20260914 - Point the ADS-B truth feed at the node's own tar1090 - #39
Merged
Merged
Conversation
The shipped default named sfo1.retnode.com, one machine that every node read its truth from. It stopped answering: it returns HTTP 530 from every node on the estate and from off it, so every node that never had this set by hand has been labelling nothing. Three of the four nodes checked were blind. localhost:8078 is node-invariant, which is what makes it defaultable at all. Every node already runs its own tar1090 container on that port, fed by adsb.lol and by a local receiver where tar1090.adsb_source names one. The per-site part stays in adsb_source, so attaching a receiver is three fields in one place and never touches the truth feed. That separation is also the fix for how this went wrong on fairforest B, where the receiver's BEAST address was put in the truth field. A raw feed port is not an HTTP endpoint, so blah2-api logged a parse error every cycle for 15 hours and every detection's adsb came back null. Changing default.yml alone reaches no deployed node, because first boot seeds user.yml with a whole copy of it. migrate_adsb_truth_server() drops the key when it still holds the legacy host, on the same reasoning as the Doppler span and tracker_forward migrations: nothing is lost by moving a node off a host that answers 530. Any other value is a real choice and survives, including a receiver address, which is wrong in a way this cannot safely judge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Purple10101
deleted the
20260914-default-adsb-truth-to-local-tar1090
branch
September 14, 2026 08:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Changes the shipped
truth.adsb.tar1090default fromsfo1.retnode.comtolocalhost:8078, and adds a migration so the change actually reaches deployed nodes.Why
The default named one machine that every node read its truth from, and it has stopped answering.
sfo1.retnode.comreturns HTTP 530 from every node checked and from off-estate. Every node that never had this set by hand has been labelling nothing.Four nodes, three different values, one working:
truth.adsb.tar1090localhost:8078sfo1.retnode.com(inherited)sfo1.retnode.com(in user.yml)192.168.1.143:30005jonathan-node-1 was fixed by hand in its own
user.ymlsome time after 2026-07-16 and the value never came back into the repo. Every broken node already had a working tar1090 container onlocalhost:8078that nothing was reading.Why
localhost:8078is the right defaultIt is node-invariant, which is what makes it defaultable at all. Every node runs its own tar1090 container on that port, fed by adsb.lol and by a local receiver wherever
tar1090.adsb_sourcenames one. The genuinely per-site part stays inadsb_source, so attaching a receiver is three fields in one place and never involves the truth feed.That separation is also the fix for how fairforest B went wrong: the receiver's BEAST address was put in the truth field. A raw feed port is not an HTTP endpoint, so
fetchADSB()loggedParse Error: Expected HTTP/, RTSP/ or ICE/every cycle for 15 hours and every detection'sadsbcame back null.Why the migration is needed
Changing
default.ymlalone reaches no deployed node. First boot seedsuser.ymlwith a whole copy of the defaults, so every node persists whatever shipped the day it booted and that overlay shadows the new value.migrate_adsb_truth_server()followsmigrate_doppler_span()andmigrate_tracker_forward()exactly: drop the key when it still holds the legacy host, so the shipped default applies. Safe on the same reasoning, and more clearly so than either, since nothing is lost by moving a node off a host that answers 530.Any other value is a real choice and survives untouched, including a receiver address like fairforest B's, which is wrong in a way this cannot safely judge.
forced.ymlstill wins, anduser.ymlon disk is not rewritten, so the migration stays load-bearing rather than being a one-shot fixup.Verification
As
lint.ymlruns it:ruff check .cleanpytest config-merger/test/47 passed8 new tests. Disabling the migration fails 2 of them; the other 6 are guards asserting values are kept (a deliberate host, a receiver address, the legacy host with a port appended,
forced.ymlprecedence, anduser.ymlleft unrewritten).Verified on hardware
fairforest B was corrected by hand ahead of this change and the pipeline was traced end to end: local receiver → tar1090 (
messages0 → 4009), tar1090 → blah2-api (parse errors stopped), blah2-api → adsb2dd (aircraft converted to bistatic delay and Doppler). Association was still unproven at 04:00 local only because no aircraft had yet been inside both the delay and ±200 Hz Doppler windows. jonathan-node-1 proves that final link on identical software.🤖 Generated with Claude Code