You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found by E4's first real-data end-to-end browser smoke (real Open-Meteo wind, real mask.bin, real polars):
Flensburg → Marstal: unreachable
Flensburg → Glücksburg (~6 nm, deep well-connected fjord): unreachable
Trivial open-water hop with no coastline nearby: succeeds
The mask itself is NOT disconnected: verify_mask.py's flood-fill gate (PR #8) proves both harbor snaps reach the open-water body at 3.0 m. So the failure is in how the isochrone solver expands against real coastline geometry — never exercised before, because all Phase B tests use synthetic masks (open water, blob islands, wide channels) and the property suite generates blob scenarios.
Working hypotheses (to be verified, not assumed)
Step length vs channel width: isochrone time-steps at sailing speed produce ~0.5–1 nm candidate segments; inside a ~200–400 m-wide fjord head every candidate heading's segment crosses land within one step → all candidates die at the first expansion (segmentNavigable correctly rejects) → blockedDeaths → unreachable.
Heading quantization: the candidate TWA set may be too coarse to thread a narrow channel even where a segment could fit.
MAX_FRONTIER truncation (documented-silent, see PR Phase B: routing domain core #5 notes) discarding the few candidates that do survive in constrained water.
Snap-to-cell-center placing the start deep inside the harbor pocket where hypothesis 1 bites hardest.
Impact
Blocks the core product promise and the spec's Flensburg→Marstal manual acceptance test. Phase E UI work continues (rendering verified with open-water plans), but this must be fixed before Phase F acceptance.
Investigation in flight: Node-side repro against real assets, death-counter/frontier instrumentation, root-cause report with fix options before any solver change.
Found by E4's first real-data end-to-end browser smoke (real Open-Meteo wind, real mask.bin, real polars):
unreachableunreachableThe mask itself is NOT disconnected:
verify_mask.py's flood-fill gate (PR #8) proves both harbor snaps reach the open-water body at 3.0 m. So the failure is in how the isochrone solver expands against real coastline geometry — never exercised before, because all Phase B tests use synthetic masks (open water, blob islands, wide channels) and the property suite generates blob scenarios.Working hypotheses (to be verified, not assumed)
segmentNavigablecorrectly rejects) →blockedDeaths→unreachable.Impact
Blocks the core product promise and the spec's Flensburg→Marstal manual acceptance test. Phase E UI work continues (rendering verified with open-water plans), but this must be fixed before Phase F acceptance.
Investigation in flight: Node-side repro against real assets, death-counter/frontier instrumentation, root-cause report with fix options before any solver change.
🤖 Generated with Claude Code