20260826 - Backfill the wizard-completed flag so pre-June nodes can register - #87
Merged
Merged
Conversation
…egister retina-telemetry is about to gate registration on /data/retina-gui/setup-wizard-completed, so that a node cannot register while its config is still the shipped Greenwich/Crystal Palace default. That flag only arrived in aee29a6 (2026-06-24). Nodes that completed the wizard before then have none, and would be blocked from registering forever: the same failure the gate exists to prevent, and the reason this has to ship and deploy ahead of the telemetry side. The evidence is a location in user.yml, because that is the override layer. The merged config.yml always carries a location, so one there proves nothing, whereas an entry in user.yml means someone chose it. /towers/select has written it since 4afa307 (2026-03-23), three months before the flag, so every node in the gap is covered. Verified on two live nodes, including one configured on 2026-06-30. Not a coordinate check against the default: a node genuinely sited near Greenwich would be refused registration for life, and it would make a config default load-bearing across two repos. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Re-lands the change merged as #72 on 2026-08-26 and lost off
main83 secondslater. Same commit, rebased onto current
main.Why this is being opened again
gh pr view 72still reportsstate=MERGED,mergeCommit=b86111a7, so everysignal says this shipped. It did not. The reflog:
A force-push moved
mainback toc9f98ec, the merge's first parent, and tookb86111aand55c2b63with it. Nothing else was lost in that push.mainhascarried no
backfill_setup_wizard_completedsince, and #73, which was the samehead commit, was closed as a duplicate of the merge that no longer existed.
Why it matters now
retina-telemetry gates registration on
/data/retina-gui/setup-wizard-completed,so a node cannot register while its config is still the shipped
Greenwich/Crystal Palace default. That gate landed in retina-telemetry
1f1b990on the same day this was merged, was released in v0.2.1 on 2026-09-03, and
v0.2.1 is the current compose pin. It is running on the fleet now.
The flag itself only arrived in
aee29a6(2026-06-24). Every node that finishedthe wizard before then has none and is refused registration permanently, which
is the exact failure the gate exists to prevent. The original commit message
said this "has to ship and deploy ahead of the telemetry side". It now has to
follow it instead.
What it does
Backfills the flag at startup for a node that finished setup before the flag
existed. The evidence is a
locationinuser.yml, because that is theoverride layer: the merged
config.ymlalways carries a location, so one thereproves nothing, whereas an entry in
user.ymlmeans someone chose it./towers/selecthas written it since4afa307(2026-03-23), three monthsbefore the flag, so every node in the gap is covered.
Deliberately not a coordinate check against the default. A node genuinely sited
near Greenwich would be refused registration for life, and it would make a
config default load-bearing across two repos.
An existing flag is never re-dated: it answers "when was setup finished", and a
backfill has not finished anything. The startup call is guarded because this is
the only thing that parses
user.ymlat import time, and an unparseable onestopping the GUI booting is a worse failure than the missing flag.
Verification
tests/test_device_state.py.malformed configs, partial coordinates,
0as a real coordinate, an existingflag keeping its timestamp, and an unwritable data dir.
on 2026-06-30.
Worth deploying rather than only merging, since the nodes this repairs are the
ones already in the field.
🤖 Generated with Claude Code