Fix all openspec validation errors (45/45 pass)

Main specs (7): Converted from delta format (## ADDED/MODIFIED) to
proper main spec format (## Purpose + ## Requirements)

Changes (3): Added missing spec files for e2e-test-reorganization,
journal-poi-details, and mobile-nearby-sync

Mobile testing: Added missing scenario for "No Vitest" requirement

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ullrich Schäfer 2026-04-12 22:41:51 +02:00
parent 8682ec8140
commit 572d240ed1
No known key found for this signature in database
GPG key ID: A32FF691A0F752D9
11 changed files with 94 additions and 7 deletions

View file

@ -0,0 +1,16 @@
## MODIFIED Requirements
### Requirement: Planner E2E test infrastructure
The Planner E2E test suite SHALL mock BRouter by default, split tests by feature file, and provide shared test helpers for common setup patterns.
#### Scenario: BRouter mocked by default
- **WHEN** a Planner E2E test runs
- **THEN** BRouter is mocked via a shared Playwright fixture unless the test explicitly opts into the real BRouter endpoint
#### Scenario: Tests split by feature file
- **WHEN** the Planner E2E test suite is executed
- **THEN** tests are organized into focused files by feature area (session, routing, multi-day, overlays, coloring) instead of a single monolithic test file
#### Scenario: Shared test helpers
- **WHEN** a Planner E2E test needs to create a session and wait for connection
- **THEN** it uses a shared helper function that handles session creation, navigation, and waiting for the connected state

View file

@ -0,0 +1,16 @@
## MODIFIED Requirements
### Requirement: POI metadata on route detail waypoints
The Journal route detail page SHALL display POI metadata (phone, address, website, opening hours) for waypoints that have associated OpenStreetMap POI data.
#### Scenario: POI metadata displayed on waypoints
- **WHEN** a route detail page is loaded and a waypoint has POI metadata from the Planner
- **THEN** the waypoint displays the POI name, icon, and category alongside its coordinates
#### Scenario: Phone, address, and website shown
- **WHEN** a waypoint has POI metadata including phone, address, or website
- **THEN** those details are shown in the waypoint detail section with appropriate links (tel: for phone, mailto: or https: for website)
#### Scenario: Waypoints without POI data display normally
- **WHEN** a waypoint on the route detail page has no associated POI metadata
- **THEN** the waypoint displays as before with coordinates and name only, with no empty POI sections shown

View file

@ -24,3 +24,7 @@ The mobile app SHALL use Maestro for end-to-end flow testing on real/emulated de
### Requirement: No Vitest for mobile
Vitest SHALL NOT be used for the mobile app. React Native Testing Library has incomplete Vitest support — Jest with jest-expo is the stable, Expo-recommended choice.
#### Scenario: Vitest not used
- **WHEN** unit or component tests are added to the mobile app
- **THEN** they use Jest with jest-expo preset, not Vitest

View file

@ -0,0 +1,23 @@
## ADDED Requirements
### Requirement: BLE nearby route sync
The mobile app SHALL discover nearby devices via Bluetooth LE and transfer route data (waypoints + GPX geometry) directly between devices without internet connectivity.
#### Scenario: BLE device discovery
- **WHEN** a user enables nearby sync on the route detail screen
- **THEN** the app advertises via BLE and discovers other nearby devices that have the same route open
#### Scenario: Route transfer
- **WHEN** a nearby device with a newer version of the route is discovered
- **THEN** the user is prompted to accept the update and the route data is transferred via chunked BLE messages
#### Scenario: Version check before sync
- **WHEN** two devices discover each other via BLE
- **THEN** they exchange route version numbers and only the device with the older version is offered the update
### Requirement: QR waypoint sharing
The mobile app SHALL support sharing waypoint coordinates via QR code as a fallback when BLE is unavailable or impractical.
#### Scenario: QR waypoint sharing
- **WHEN** a user taps "Share via QR" on a route
- **THEN** a QR code is generated containing compressed waypoint coordinates that another device can scan to receive the waypoints

View file

@ -1,4 +1,8 @@
## ADDED Requirements
## Purpose
Bidirectional interaction between the map and elevation chart, enabling users to explore route elevation by hovering, clicking, and dragging on either surface.
## Requirements
### Requirement: Route hover highlights elevation chart
Hovering over the route polyline on the map SHALL highlight the corresponding position on the elevation chart.

View file

@ -1,4 +1,8 @@
## ADDED Requirements
## Purpose
Renderer-agnostic map configuration data (tile sources, route color palettes, POI categories) usable by any rendering engine without DOM or library dependencies.
## Requirements
### Requirement: Renderer-agnostic map definitions
The `@trails-cool/map-core` package SHALL provide map configuration data usable by any rendering engine.

View file

@ -1,4 +1,8 @@
## MODIFIED Requirements
## Purpose
Map tile layer display with base layer switching and independent overlay tile layers in the Planner.
## Requirements
### Requirement: Base layer switching
The map SHALL support switching between multiple base tile layers, and SHALL support toggling overlay tile layers independently.

View file

@ -1,4 +1,8 @@
## ADDED Requirements
## Purpose
Multi-day route planning with overnight waypoint markers, per-day statistics, day-aware UI, and day structure preserved in GPX exports.
## Requirements
### Requirement: Overnight waypoint markers
Any waypoint SHALL be toggleable as an overnight stop, creating day boundaries in the route.

View file

@ -1,4 +1,8 @@
## ADDED Requirements
## Purpose
POI overlay panel for toggling OpenStreetMap point-of-interest categories on the Planner map, with viewport-scoped loading, caching, and profile-aware defaults.
## Requirements
### Requirement: POI overlay panel
The Planner SHALL provide a collapsible panel for toggling POI categories on the map.

View file

@ -1,4 +1,8 @@
## ADDED Requirements
## Purpose
Tile-based map overlays (hillshading, Waymarked Trails cycling/hiking/MTB routes) with support for multiple simultaneous overlays, proper attribution, and profile-aware auto-enabling.
## Requirements
### Requirement: Hillshading overlay
The Planner map SHALL offer a hillshading tile overlay that visualizes terrain relief.

View file

@ -1,4 +1,8 @@
## MODIFIED Requirements
## Purpose
Real-time collaborative editing sessions in the Planner using Yjs CRDTs, synchronizing waypoints, route options, and overlay preferences across all connected participants.
## Requirements
### Requirement: Real-time collaborative editing
The Planner SHALL synchronize waypoint edits, route options, and overlay preferences across all connected participants in real-time using Yjs CRDTs.