Break up route-features into focused specs, add new changes
Archive the monolithic route-features spec and replace with 9 focused OpenSpec changes: multi-day-routes, waypoint-notes (with POI snapping), undo-redo, local-dev-stack, route-sharing, route-discovery, activity-photos, osm-overlays, plus the existing changelog and komoot-import. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9c7891402f
commit
0a330e4466
46 changed files with 2968 additions and 0 deletions
77
openspec/changes/route-sharing/proposal.md
Normal file
77
openspec/changes/route-sharing/proposal.md
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
## Why
|
||||
|
||||
Routes in the Journal are currently invisible to everyone except the owner. There
|
||||
is no way to make a route public, share it with a specific person, or fork
|
||||
someone else's route into your own collection. The architecture doc specifies
|
||||
visibility levels, a permission matrix, and forking for Phase 2, and the original
|
||||
`route-features` spec bundled these with spatial search, multi-day routes, and
|
||||
photos. This change breaks out the sharing and permissions scope into a focused,
|
||||
independent unit of work.
|
||||
|
||||
Without visibility and sharing, routes are just private GPX storage. Users cannot
|
||||
show a planned bikepacking route to a friend, let a co-planner view the latest
|
||||
version in the Journal, or build on someone else's published route. This is the
|
||||
minimum social layer needed before federation makes routes visible across
|
||||
instances.
|
||||
|
||||
## What Changes
|
||||
|
||||
- **Route visibility**: `private` (default) and `public` on routes and
|
||||
activities. Public routes are viewable by anyone with the link. Private routes
|
||||
are owner-only.
|
||||
- **Route sharing**: Owners can share a route with specific users at `view` or
|
||||
`edit` permission level. Shared users see the route in their collection and can
|
||||
act according to their permission.
|
||||
- **Route forking**: Logged-in users can fork any public route, copying the route
|
||||
metadata and latest GPX into their own collection with a `forkedFromId` link
|
||||
back to the original.
|
||||
- **Contributor tracking**: When the Planner saves back to the Journal via JWT
|
||||
callback, the contributor's identity is recorded on the route version. The
|
||||
route detail page shows who contributed to each version.
|
||||
|
||||
These are all Journal-side changes (database schema, server logic, and UI). No
|
||||
Planner changes are needed.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
- `route-sharing`: Visibility levels (private/public), per-user sharing with
|
||||
view/edit permissions, share dialog with user search
|
||||
- `route-forking`: Copy public routes into own collection with provenance link
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `route-management`: Visibility toggle on routes and activities, permission
|
||||
checks on all route access, contributor display
|
||||
- `planner-callback`: JWT callback records contributor identity on route versions
|
||||
|
||||
## Non-Goals
|
||||
|
||||
- **Granular permissions beyond view/edit**: No "edit waypoints but not
|
||||
description" or "view but not export GPX". Two levels are enough.
|
||||
- **Team or organization sharing**: No group-level permissions. Share with
|
||||
individual users only.
|
||||
- **ActivityPub federation of shares**: Sharing is local to the instance for now.
|
||||
Cross-instance sharing comes with the federation change.
|
||||
- **Followers-only visibility**: Only private and public for now. A
|
||||
followers-only level can be added when the follow system exists.
|
||||
- **Spatial search / explore page**: Broken out as a separate change. Public
|
||||
routes are a prerequisite; discovery is not.
|
||||
|
||||
## Impact
|
||||
|
||||
- **Database**: New `visibility` enum column on `journal.routes` and
|
||||
`journal.activities`. New `journal.route_shares` table. New `contributors`
|
||||
text array on `journal.route_versions`. New `forkedFromId` column on
|
||||
`journal.routes`.
|
||||
- **Server logic**: New `permissions.server.ts` module with `canView` and
|
||||
`canEdit` functions. Route loaders and list queries updated to respect
|
||||
permissions.
|
||||
- **UI**: Visibility toggle on route detail/edit page. Share dialog modal with
|
||||
user search. Fork button on public routes. "Forked from" link. Contributor
|
||||
list on route detail.
|
||||
- **Privacy**: Privacy manifest updated to document visibility and sharing
|
||||
behavior.
|
||||
- **i18n**: New translation keys for visibility, sharing, forking, contributors
|
||||
(en + de).
|
||||
Loading…
Add table
Add a link
Reference in a new issue