chore(nav): Phase 1 HERE Japan transit spike — HALT, custom track cancelled#42
chore(nav): Phase 1 HERE Japan transit spike — HALT, custom track cancelled#42emptylower wants to merge 1 commit into
Conversation
…celled 10-pair OD probe against HERE Public Transit v8 (transit.router.hereapi.com/v8). Score: 0/10 expected operators matched. Root cause: HERE has Japan station entities but every /stations response returns empty `transports` arrays — no line associations, so /routes returns `noCoverage`/`noStationsFound` for Shinjuku, Nagoya, Kyoto, Sapporo, Hakata, Osaka, Ueno. The only transit modes that surfaced were highway buses and one Toei subway line (三田線). HERE Driving v8 + Pedestrian v8 work fine — the gap is the transit feed, not the key or the endpoint. Per owner decision, Phase 2/3 custom in-map transit UI is cancelled (not deferred). The Phase 0 Google Maps Embed API picker shipped in 99121b4 remains the long-term solution. NAVITIME path is not being pursued. Artifact details and "what this rules out for future maintainers" live in docs/in-app-navigation-phase1-decision.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 27b0453414
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // Aggregate. | ||
| const matchedCount = results.filter((r) => r.matched).length | ||
| const errorCount = results.filter((r) => !r.ok).length | ||
| const noRouteCount = results.filter((r) => r.ok && r.routeCount === 0).length |
There was a problem hiding this comment.
Count HTTP-200 empty routes in no-route summary
When HERE returns 200 with routes: [], processPair marks the result as ok: false, but the aggregate metric computes noRouteCount with results.filter((r) => r.ok && r.routeCount === 0). That condition can never match these empty-route cases, so the script always reports No-route (HTTP 200 but empty): 0/10 even when such responses occurred, which makes the decision report’s diagnostics inaccurate.
Useful? React with 👍 / 👎.
Summary
Phase 1 of the in-app navigation overhaul, follow-up to #41. HERE Public Transit v8 fails Japan coverage, so the custom in-map transit UI track (planned Phase 2 / Phase 3) is cancelled — Phase 0's Google Maps Embed API picker remains the long-term solution.
What the spike found
A standalone 10-pair OD probe against
transit.router.hereapi.com/v8/routes(Tokyo / Osaka / Kyoto / Sapporo / Nagoya / Fukuoka core scenarios):/v8/stationsendpoint returns station entities for 新宿駅 / 名古屋駅 / 京都駅 but everytransportsarray is empty[]— no line associations, so the router responds withnoCoverage/noStationsFound.Full per-pair table, station-probe data, and "what this rules out for future maintainers" →
docs/in-app-navigation-phase1-decision.md.Program decision
Owner decision after reviewing data: cancel the in-map custom transit program (not defer). Reasoning:
Dropped from roadmap: Phase 2 (HERE/NAVITIME provider integration), Phase 3 (visual polish + departure-time picker + provider switch runbook), the provider-agnostic
RouteTS schema,/api/route/*Worker proxy, KV cache,@here/flexible-polylinedependency.Stays in production unchanged:
lib/route/google.ts,lib/route/embedNavigation.ts,<NavModeToggle>, native-app deep-linkmode=propagation.Files
scripts/here-japan-coverage.ts— self-contained spike, no main-code imports, dumps raw JSON to.cache/here-spike/, applies the 9-10/10 GO · 6-8 REVIEW · ≤5 HALT decision gatepackage.json—npm run route:here-spikealias for reproducibilitydocs/in-app-navigation-phase1-decision.md— decision artifact + ruled-out notes for future sessionsTest plan
npm run route:here-spike— produces HALT verdict (exit 3) with 0/10 matchednpx tsc --noEmit -p tsconfig.node.json— cleannpm run check:line-budget— no new violations (only the 3 pre-existing baseline ones)🤖 Generated with Claude Code