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:
Ullrich Schäfer 2026-07-06 07:23:00 +02:00
parent be4f7e4ae8
commit 5dd4968626
80 changed files with 2600 additions and 2 deletions

View file

@ -83,6 +83,39 @@ Daily job on the *mirror-holding* instance: for each mirror whose
on the canonical object), re-fetch and reconcile. Covers the
"instance down > 72h, Update lost" case in arch #16.
## Prior art: wanderer (reviewed 2026-07-06)
Full analysis in `docs/inspirations.md`. wanderer is the only other
shipped ActivityPub-for-trails implementation; three findings bear on
this design:
- **Object model contrast.** wanderer federates trails as plain `Note`s
— metrics as bespoke `tag[]` entries, GPX as a `Document` attachment.
That validates our GPX-as-Document choice but is otherwise the
opposite of the `trails:Route` decision above. Their model is lossy
(stringified metrics, 3-photo cap) and needs string parsing to
consume; ours is structured but renders as nothing on non-trails
platforms. **Consideration for the vocabulary decision:** emit a
Note-compatible fallback alongside `trails:Route` (readable `content`
HTML + image/GPX attachments on the same object). wanderer proves the
Note shape renders well in Mastodon; carrying it costs little and
keeps the "Mastodon rendering" non-goal a presentation choice rather
than an architectural wall.
- **wanderer interop is an adapter, not an allowlist tweak.** The §6
gating note ("widen the allowlist") understates it: accepting
wanderer content means parsing metric-tags out of `Note`s and
emitting shapes they parse back. Feasible — their social layer
(WebFinger, per-user keys, authorized fetch, Follow/Accept) matches
ours — but it's a dedicated compatibility layer. Stays out of scope;
now with an accurate size estimate.
- **Operational prerequisite.** wanderer's fire-and-forget delivery
(no queue/retry) is the cautionary tale for mirror consistency: this
change's Update fan-out and sync-healing assume durable delivery.
The `federation-hardening` change (durable Fedify queue, replay
dedup, instance blocklist) should land **before** route mirrors;
mirror sync must also respect the blocklist (don't re-fetch origins
on blocked domains).
## Risks / Trade-offs
- **Custom vocabulary is an interop commitment** — version the