docs+openspec: prior-art research (Organic Maps, Endurain, wanderer) and 15 proposals
Add docs/inspirations.md as the durable record of the 2026-07-05/06 prior-art research — per-project learnings with source paths, canonical credit lines, and the changes each spawned — and extend the acknowledgment lists in philosophy.md/architecture.md (Organic Maps, Endurain, wanderer). New OpenSpec changes (proposal/design/specs/tasks each): - Organic Maps: elevation-profile-hardening, gpx-parser-robustness, hiking-time-estimate, poi-index, hiking-foot-profile - Endurain: account-export, activity-duplicate-review, fit-parsing-hardening, activity-locations, self-hosting-guide, activity-privacy-controls - wanderer: federation-hardening, link-share-tokens - credits-page (user-visible acknowledgments) Updated in-flight changes with wanderer prior-art sections: route-federation, route-discovery. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
be4f7e4ae8
commit
5dd4968626
80 changed files with 2600 additions and 2 deletions
41
openspec/changes/account-export/specs/account-export/spec.md
Normal file
41
openspec/changes/account-export/specs/account-export/spec.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
## ADDED Requirements
|
||||
|
||||
### Requirement: Full-account export archive
|
||||
The Journal SHALL let a user export all data they own as a single ZIP archive: every route (current GPX plus version-history GPX files), every activity (GPX when present), activity media, and JSON manifests for profile, route/activity metadata, follows, notification history, and connected-service names. The archive SHALL carry a `manifest.json` with a format version. OAuth tokens, credentials, sessions, and other users' content SHALL NOT be included.
|
||||
|
||||
#### Scenario: Archive contains originals in open formats
|
||||
- **WHEN** a user with routes and activities requests an export
|
||||
- **THEN** the archive contains one GPX file per route and per activity with GPX, and JSON manifests keyed by the same ids
|
||||
|
||||
#### Scenario: Secrets never exported
|
||||
- **WHEN** a user with a connected Wahoo account exports
|
||||
- **THEN** the archive lists the connection's provider and date only, with no tokens or credentials
|
||||
|
||||
### Requirement: Asynchronous generation with bounded memory
|
||||
Export generation SHALL run as a background job that streams data in batches (memory use independent of account size), notify the user when the archive is ready, and allow only one active export job per user.
|
||||
|
||||
#### Scenario: Export of a large account completes
|
||||
- **WHEN** a user with thousands of activities requests an export
|
||||
- **THEN** the job completes without exhausting memory and a "export ready" notification links to the download
|
||||
|
||||
#### Scenario: Duplicate request returns the running job
|
||||
- **WHEN** a user requests an export while one is already generating
|
||||
- **THEN** no second job starts and the settings page shows the in-progress state
|
||||
|
||||
### Requirement: Owner-only, expiring download
|
||||
The export artifact SHALL be downloadable only by the authenticated owner through an app route, and SHALL expire (deleted from storage) after 7 days.
|
||||
|
||||
#### Scenario: Another user cannot download
|
||||
- **WHEN** a different authenticated user requests the export download URL
|
||||
- **THEN** the request is rejected
|
||||
|
||||
#### Scenario: Expired artifact is gone
|
||||
- **WHEN** 7 days pass after generation
|
||||
- **THEN** the artifact is removed from storage and the settings page offers a fresh export
|
||||
|
||||
### Requirement: Documented archive format
|
||||
The archive layout and manifest schema SHALL be documented in the repository (`docs/export-format.md`) and versioned via `manifest.formatVersion`, so a future import capability can consume archives across versions.
|
||||
|
||||
#### Scenario: Format documented
|
||||
- **WHEN** the export capability ships
|
||||
- **THEN** `docs/export-format.md` describes every file and manifest field for format version 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue