trails/docs/ideas/activity-participants.md
Ullrich Schäfer bf9787e56a docs: capture remaining architecture vision; draft route-federation change
Gap analysis of docs/architecture.md against openspec/ and docs/ideas/
found the envisioned-but-uncaptured remainder. This commit captures it:

New OpenSpec change (validated):
- route-federation — the collaboration half of the federation vision:
  routes as dereferenceable trails:Route objects, Create/Update
  fan-out, Invite/Accept collaboration mirroring (arch decision #2),
  cross-instance Planner edits via HTTP-Signature-requested scoped
  tokens (decisions #3/#12), mirror sync healing (#16). Depends on
  social-federation §6 + route-sharing; carries the 2026-06-07 soak
  lessons as design constraints.

New docs/ideas/ explorations:
- instance-administration — registration toggle, suspend/ban,
  federation blocklists, reports (moderation now gates the federated
  comments idea)
- social-interactions — local likes + comments (don't exist even
  locally; the foundation federated kudos/comments attach to)
- activity-participants — group tagging with confirm/decline +
  federated mentions (the participants jsonb column is an untyped stub)
- multi-day-collections — architecture open question #1, directions
  evaluated

architecture.md cleanup:
- Mastodon-compat section annotated with shipped/captured state + the
  live-soak interop lessons (attachment arrays, tombstones, 10s
  timeout, no backfill)
- api.trails.cool removed (contradicted resolved decision #18)
- Phase 1 ticked (shipped); Phase 2/3 items annotated with where each
  is tracked; specs/ → openspec/, activity.* → journal.*, cx21 → cx23
- brouter-web open question marked resolved-in-practice; new section
  pointing to where the unshipped vision is tracked

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 10:31:50 +02:00

46 lines
2.1 KiB
Markdown

# Activity participants (group tagging)
Pre-spec exploration. From `docs/architecture.md` §Activity Sharing &
Participants: when people ride/hike together, the activity creator tags
the others; tagged users confirm or decline; confirmed participants see
the activity on their own profile and can attach their own GPS trace and
photos. "Like photo tagging on social media, but for rides."
The `activities.participants` jsonb column exists as an untyped stub —
no flow, UI, or spec behind it.
## Scope sketch
**v1 (local)**
- Tag local users on your activity (search by username, like the
share dialog planned in `route-sharing`)
- Notification `participant_tagged` → confirm / decline (Requests-tab
pattern from follow requests)
- Confirmed participation renders the activity on the participant's
profile (clearly attributed: "with @alice")
- Participant may attach their own trace + photos to the shared
activity — or link their own existing activity as "same outing"
(the second option composes better with imports: Bob's Garmin
recording is already its own activity)
- Schema: promote from jsonb stub to a real
`journal.activity_participants` table
(`activity_id, user_id | participant_actor_iri, status, own_activity_id?`)
— the exactly-one-of local/remote pattern from `follows` again
**v2 (federated)**
- Tagging across trails instances; Mastodon sees mentions
(`"Rode with @bob@bob.trails.xyz"`) per the architecture
- Confirm/decline crosses instances → needs a small custom activity
vocabulary or reuse of `Invite`/`Accept` (the same pair
route-federation needs — design together)
## Constraints & notes
- Privacy: being tagged must never reveal more than the tagger could
already see; declined/pending tags are visible only to tagger +
taggee. Tagging requires the activity to be visible to the taggee.
- The "link own activity as same outing" model doubles as the natural
seed for multi-day collections' "shared trip" case — see
`multi-day-collections.md`.
- Mention-style federation means participant handles end up in public
Note content — privacy manifest update when v2 lands.