mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-08 11:46:35 +00:00
The site answers 202 while it builds a version, and 200 once a build exists. Whether that build matches what the version currently names was never asked at the serving gate: servable() only checks that an index.html is on disk. So the first request after a new snapshot got the previous build with 200, and the rebuild it triggered finished into a directory nobody was waiting for. For a release tag that cannot happen, and for latest it is a reasonable trade, since a visitor would rather read the previous page than a spinner. For deployed it is wrong by definition: the name means the working tree this run staged, so an earlier snapshot is not a stale answer but a different question's answer. The post-deploy test that reads the published page therefore validated the round before it, and reported a role broken whose page had already been fixed. The comparison already existed. _current() weighs built_ref against _wanted_ref, which resolves deployed to the snapshot digest, and the builder consults it to decide whether to rebuild. Only the server did not. outdated() exposes it for deployed alone and the serving branch now treats a mismatch as not yet servable, so the poll waits for the build it asked for. Measured on the stack while the previous round was live: the served page was written 16:44:41 from the older snapshot, its own source carried the newer content, and the correct build landed at 17:10:56, twenty-six minutes after the test had already read the stale one and failed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>