Repository navigation
Bind the known lane on staging, one step ahead of production - #684
Conversation
Shadow was the measuring stage for the known lane: it claimed, calibrated and solved but published nothing. The measurements are in. On production, 2026-10-01, the single-node arcs the map draws instead sat a median 1.49 km (p95 31.5 km) from the aircraft, while the lane's withheld truth_match solves measured 0.49 km (p95 1.72 km); since #671 a solve whose loci barely cross is withheld as well. Staging mirrors production's real nodes, so binding there first shows what app.retina.fm will show before production's own overlay moves. The parity check gets a staging-scoped allowance for KNOWN_LANE_MODE alone, marked temporary: the change that binds production removes it, and the fallback flag stays compared throughout. Binding is lane-wide, so claims the adsb-service fallback makes for nodes that send no ADS-B of their own are drawn at the service's fix. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Claude finished @jehanazad's task in 1m 47s —— View job Review: Bind the known lane on staging (#684)
Summary: This is a clean, well-scoped flip of Findings:
Not checked: I wasn't able to execute No functional issues found. The compose comment, allowlist comment, and test docstring all independently told the same story (binding on staging, shadow still on prod, fallback flag unaffected), which is exactly the kind of cross-file consistency this repo's parity check exists to protect. |
Summary
Switches the known lane on staging from
shadowtobinding, one step ahead of production, so staging-app.retina.fm draws the lane's solves and claimed ADS-B targets. Staging mirrors production's real nodes, so this is the rehearsal of production's own switch: the map there shows what app.retina.fm will show whendocker-compose.prod.ymlfollows in a second PR.Why now
Shadow was the measuring stage. On production (2026-10-01) the single-node arc placements the map draws instead sat a median 1.49 km (p95 31.5 km) from the aircraft, while the lane's withheld
truth_matchsolves measured 0.49 km (p95 1.72 km). Since #671, a solve whose delay loci barely cross is withheld too, so the shallow co-sited pairs that produced ghosts on test no longer publish.Changes
docker-compose.staging.yml:KNOWN_LANE_MODE=binding, with the reasoning in the comment.ADSB_FALLBACK_ENABLED=1unchanged.deploy/check-env-parity.py: a staging-scoped allowance forKNOWN_LANE_MODEonly, marked temporary. The fallback flag stays compared, so staging remains production's rehearsal there.backend/tests/test_env_parity_scoping.py: staging may diverge on the mode, still may not on the fallback flag.docs/architecture.md: the flag table's staging column.Test coverage
deploy/check-env-parity.pypasses locally (staging and test in parity with production).test_env_parity_scoping.py,test_deploy_workflows.py,test_env_example.py: 285 passed. Lint hooks clean.Review notes
adsb_single_node/adsb_multi_node). Those icons are the transponder's position, not a radar estimate; the map labels them as such.aircraft-live.jsonshould carrymultinode_solveentries withadsb_hexandadsb_single_nodeentries, and far fewersingle_node_ellipse_arc; solver-statsknown_lane.published> 0 withpublish_weak_geometrycounting the withheld shallow solves.docker-compose.prod.ymlto binding and deletes the parity allowance. Nothing else should touch that allowance.🤖 Generated with Claude Code