docs(openspec): reconcile mobile specs with what shipped #152

Merged
ullrich merged 1 commit from spec-sync-mobile-map-and-toolchain into main 2026-09-12 15:35:21 +00:00
Owner

The mobile PRs merged over the last days (#147–#151) moved ahead of the specs. Docs only — no code changes.

MapLibre vs react-native-maps

The mobile-app change never resolved the choice, but the code did. design.md D3 already picked MapLibre while the risks section still listed it as an open question, and proposal.md named react-native-maps as a dependency.

Location Was Now
tasks.md 3.2.1 (done) react-native-maps @maplibre/maplibre-react-native
tasks.md 5.2.3 (open) react-native-maps @maplibre/maplibre-react-native
design.md risks "Worth evaluating" RESOLVED, per D3
design.md D3 react-native-maplibre-gl @maplibre/maplibre-react-native
proposal.md react-native-maps MapLibre

5.2.3 was the one that mattered most — open work pointing at a library the app does not use. It stays unchecked: only the name was wrong, offline tile caching is still unbuilt.

Map tab had no content requirement

mobile-app-shell only said the Map tab exists and renders by default, so #148 shipped a full-screen map with nothing describing it. Adds a Map tab requirement: full-bleed render, attribution clear of the tab bar and safe areas, default camera, pan, and the placeholder when the native module is not linked.

Seed script

The local-dev-environment scenario listed users, routes and activities but not the trails-cool-mobile OAuth client added in #149 — the row that makes mobile sign-in work locally. Also notes why apps/journal/server.ts does not cover dev (it only runs under pnpm start, not react-router dev).

Expo toolchain constraints

New requirement recording what actually cost time on the SDK 57 upgrade, so SDK 58 does not rediscover it:

  • react is pinned exactly by the Expo SDK, and must be set in the catalog because pnpm-workspace.yaml's overrides force it workspace-wide — a per-app pin is silently ignored
  • expo.install.exclude hides react from expo install --check
  • iOS 27 requires UIScene adoption or the app is killed at launch
  • local config plugins need @expo/config-plugins as a direct dependency under pnpm's isolated linker

Verification

openspec validate --all --strict81 passed, 0 failed.

🤖 Generated with Claude Code

The mobile PRs merged over the last days (#147–#151) moved ahead of the specs. Docs only — no code changes. ### MapLibre vs react-native-maps The `mobile-app` change never resolved the choice, but the code did. `design.md` D3 already picked MapLibre while the risks section still listed it as an open question, and `proposal.md` named `react-native-maps` as a dependency. | Location | Was | Now | |---|---|---| | `tasks.md` 3.2.1 (done) | `react-native-maps` | `@maplibre/maplibre-react-native` | | `tasks.md` 5.2.3 (**open**) | `react-native-maps` | `@maplibre/maplibre-react-native` | | `design.md` risks | "Worth evaluating" | RESOLVED, per D3 | | `design.md` D3 | `react-native-maplibre-gl` | `@maplibre/maplibre-react-native` | | `proposal.md` | `react-native-maps` | MapLibre | 5.2.3 was the one that mattered most — open work pointing at a library the app does not use. It **stays unchecked**: only the name was wrong, offline tile caching is still unbuilt. ### Map tab had no content requirement `mobile-app-shell` only said the Map tab exists and renders by default, so #148 shipped a full-screen map with nothing describing it. Adds a **Map tab** requirement: full-bleed render, attribution clear of the tab bar and safe areas, default camera, pan, and the placeholder when the native module is not linked. ### Seed script The `local-dev-environment` scenario listed users, routes and activities but not the `trails-cool-mobile` OAuth client added in #149 — the row that makes mobile sign-in work locally. Also notes why `apps/journal/server.ts` does not cover dev (it only runs under `pnpm start`, not `react-router dev`). ### Expo toolchain constraints New requirement recording what actually cost time on the SDK 57 upgrade, so SDK 58 does not rediscover it: - `react` is pinned **exactly** by the Expo SDK, and must be set in the catalog because `pnpm-workspace.yaml`'s `overrides` force it workspace-wide — a per-app pin is silently ignored - `expo.install.exclude` hides `react` from `expo install --check` - iOS 27 requires UIScene adoption or the app is killed at launch - local config plugins need `@expo/config-plugins` as a direct dependency under pnpm's isolated linker ### Verification `openspec validate --all --strict` — **81 passed, 0 failed**. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
docs(openspec): reconcile mobile specs with what shipped
Some checks failed
CI / Dockerfile Package Check (pull_request) Successful in 16s
CI / Security Scan (pull_request) Successful in 58s
CI / Visual Tests (pull_request) Successful in 2m38s
CI / Journal Image Smoke Test (pull_request) Successful in 6m9s
CI / E2E Tests (pull_request) Has been cancelled
CI / Checks (pull_request) Has been cancelled
Cancel superseded CI / Cancel in-flight CI (pull_request) Successful in 10s
cc0fb2c1f2
The mobile PRs merged over the last days moved ahead of the specs.

MapLibre vs react-native-maps: the change never resolved the choice but
the code did. design.md D3 already picked MapLibre while the risks
section still listed the decision as open and proposal.md named
react-native-maps as a dependency; tasks 3.2.1 and 5.2.3 named it too,
5.2.3 being open work pointing at a library the app does not use. All of
these now say @maplibre/maplibre-react-native, and D3's stale package
name (react-native-maplibre-gl) is corrected.

Map tab: mobile-app-shell only required that the tab exists and renders
by default, so the full-screen map shipped with nothing describing it.
Adds a Map tab requirement covering the full-bleed render, attribution
kept clear of the tab bar and safe areas, the default camera, panning,
and the placeholder shown when the native module is not linked.

Database seed: the scenario listed users, routes and activities but not
the trails-cool-mobile OAuth client, which is what makes mobile sign-in
work locally. Notes why the production path in server.ts does not cover
dev.

Expo toolchain: adds a requirement recording the constraints that cost
time on this upgrade — react is pinned exactly by the Expo SDK and must
be set in the catalog because pnpm overrides force it workspace-wide,
expo.install.exclude hides react from `expo install --check`, iOS 27
requires scene lifecycle adoption, and local config plugins need
@expo/config-plugins as a direct dependency under pnpm.

Task 5.2.3 stays unchecked: only the library name was wrong, offline
tile caching is still unbuilt.

openspec validate --all --strict: 81 passed, 0 failed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ullrich deleted branch spec-sync-mobile-map-and-toolchain 2026-09-12 15:35:22 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
trails-cool/trails!152
No description provided.