Land the seeding world gate on main and pin merged submodules - #269
Conversation
Claiming's world gate closed one consumer of the mixed sim/real ADS-B cache; this closes the other two. The associator's seed round gets the node-world resolver (retina-analytics #23's node_world_provider) so a tracklet's tag is never verified against a state from the other world, and the frame processor's auto-tag pass — a cache-wide assignment for a node with no receiver, the same decoy exposure claiming had — filters the snapshot to the node's own world before the node-agnostic lib call. node_world moves to core/state.py as the single authority: claiming, the seed gate and the auto-tag filter all key on one resolver, where two could disagree and let one consumer accept what another rejects. The lib's adsb_seed_world_rejects counter joins the adsb_seed block of /api/radar/association/status (getattr with a zero default, so an old lib pin reads as zero rather than breaking the route). Submodule bump to the retina-analytics commit that carries the provider hook. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wire the world gate into ADS-B seeding
… chore/land-seed-wiring-and-pins
PR #268 merged into its stacked base branch after #267 had already merged, so the seeding wiring never reached main. This merges it in and bumps both submodule pins to the upstream merge commits: retina-analytics #23 (node_world_provider seed gate) and retina-simulation #12 (--real-adsb opt-in relay gate). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @jehanazad's task in 5m 32s —— View job Code review — PR #269
Scope: Traced the retina-server diff line-by-line (this PR is mostly the stranded #268 content landing, plus two submodule pin bumps) and cross-checked call sites for the What looks solid:
No correctness bugs found in the retina-server-side diff — it's a faithful move/rename plus a correctly-gated, well-tested new filter. Two observability gaps worth a look: 1. "world_rejects": getattr(_a, "adsb_seed_world_rejects", 0),This reads 2. _nw = state.node_world(node_id)
_states = {h: s for h, s in state._adsb_for_seeding().items() if s.get("world") in (None, _nw)}This new filter drops other-world ADS-B states with no counter, unlike its sibling world gates in this same PR ( Neither is a correctness bug in this PR — both are pre-existing-style gaps in observability that this PR's own stated goal (making cross-world contamination visible) would benefit from closing. |
Summary
Recovery PR for a stacked-merge race: #268 merged into its base branch
feat/adsb-world-provenanceafter #267 had already merged that branch to main, so the seeding-pool world gate never reached main. This merges the stranded wiring in and bumps both submodule pins to the upstream merge commits.Changes
origin/feat/adsb-world-provenance(= the Wire the world gate into ADS-B seeding #268 content:node_worldmoved tocore/state.pyas the single world authority, wired into the associator ctor, auto-tag snapshot filtered by world,world_rejectsin/api/radar/association/status).libs/retina-analytics→1450417(merge commit of Gate ADS-B seed verification by world retina-analytics#23, replacing the branch-head pin7495ce4— same tree).libs/retina-simulation→754cca1(merge commit of Make the adsb.lol relay opt-in and declare its world retina-simulation#12:--real-adsbopt-in relay gate +source:"real"tagging). This is the pin the fleet rebuild needs to actually stop the adsb.lol relay.Test coverage
test_known_claiming.py,test_adsb_seed_backend.py,test_solver_stats.py,test_sim_ingest.py(145 passed).Review notes
🤖 Generated with Claude Code