Port the post-v0.230.0 development train - #72
Conversation
|
Held (converted to draft). The pre-merge /review found that this train's smoke gate, which now sources env.sh, fetches live weather and writes the live frame path on text-rendering devices, so a slow weather provider can revert a healthy release and block it until the next one. Also under investigation: rollback to a last-known-good older than v0.226.0 running this release's catalog smoke probes. Fixing on the development repo first, then this branch is rebuilt. |
Runtime-render migration (litclock-dev#871 Stage B), the bootcheck rollback fixes (litclock-dev#894, litclock-dev#896), and two pre-port fixes found reviewing this port (litclock-dev#897, litclock-dev#898). Dev range 1e81722b..abbd54b9.
7347951 to
699e4db
Compare
|
Hold lifted. The two findings were fixed on the development repo first (litclock-dev#897, litclock-dev#898), this branch was rebuilt from scratch, and the rebuilt port passed a fresh review with no findings. It also ran on the bench: two real update ticks on the port commit itself. The first applied it and migrated. The second was a no-op on the text tier. On both, the smoke gate passed and left no scratch directory, and its text-tier render did not touch the live frame file. |
Ports the litclock-dev train that landed after v0.230.0.
Boundary confirmed by content: dev
1e81722b<-> publice6c67886(tag v0.230.0). Dev range1e81722b..abbd54b9: four non-stats commits..gitignorecarries only the env.sh staging-file hunk; the dev stats-page hunk stays dev-only.What changes on a clock
Runtime text rendering, turned on where the device has proved it works (litclock-dev#871 Stage B). The weekly updater already runs an on-device self-test (Stage A, since v0.229.0). Now, when that self-test passes on the same run, the durable pass record matches this release,
images/metadatais present as the fallback, andenv.shholds exactly one exportedLITCLOCK_RUNTIME_RENDER=false, the updater rewrites it totrueunderenv.sh.lockand logsMIGRATED to runtime text rendering. Any failed guard leaves the device on the pre-rendered images and retries next week.env.sh.samplestaysfalseon purpose: it backfills keys on existing devices, sotruethere would skip every guard. Fresh flashes gettruefromfirst-boot.sh.Bootcheck rollback actually rolls back (litclock-dev#896), and does not carry text rendering onto a version that never validated it (litclock-dev#894). The rollback copy of
update.shnow carries itslib/, so it no longer drops out of rollback mode and installs the bad release again. The rollback also removes the runtime-render marker, so the recovered clock paints the pre-rendered images until the next applied release re-earns it.The smoke gate now renders the tier the device is actually on, and
migration-skippedis an accepted memo token, so a refusal is visible in/api/statusinstead of reading asnull.Found by reviewing this port, fixed on dev first (litclock-dev#898): sourcing
env.shgave the smoke gate a location, so it began fetching live weather (a slow provider could push it past 60s and block a healthy release) and, on text-tier devices, wrote the livecurrent-quote.png. It now passesWEATHER_ENABLED=falseand a throwaway frame directory withenv(1), as the self-test does. A bootcheck rollback to a last-known-good older than v0.227.0 no longer fails this release's catalog probes, which that older tree cannot answer. Also litclock-dev#897: the updater's self-test log line no longer says the step changes nothing.Verified on hardware (bench, before this port)
:03; the second tick was a no-op.The synthetic release differs from this port only in comments, operator-facing text and prose.
Port mechanics
Issue refs requalified on ported lines only (public's own
tests/test_issue_ref_namespace.pypasses). Conflicts were the ref namespace in context lines, resolved block by block. Every pre-existing public/dev divergence survives the port (checked per file), and maintainer-local paths were stripped fromCLAUDE.md(grep -c archives CLAUDE.md= 0). Full suite 4753 passed, ruff and shellcheck clean.