web(devbox): devbox source drift base red, excuse the digest awaiting its rebake (no bead)
Summary
Base red: the devbox drift check fails every Web tests (1/4) run (27 of 27 in the last 24h, seen on #19549) and the Cloud VM image contract job's devbox:manifest:check. The test is web/tests/vm-image-manifest.test.ts, "every default was baked from this checkout's devbox sources".
The Freestyle defaults are the freestyle-cmux-devbox-20261003-130941 ladder, baked from desktop sources 082484bccc9a. Walking the commits that touch the devbox sources shows the digest moved three times with no bake promoted:
3690d43a9383at 0174c116d4db6421b50e38b1at 0c91f5f556624b22f8bbeb1bat 219015401324
The first two are cx-6so.49 L1 and the last is the devbox metadata service.
The real fix is a rebake and promotion, which is an outward-facing Freestyle operation in Lawrence's image pipeline. This PR doesn't do that and doesn't change the drift logic. It adds DEVBOX_AWAITING_REBAKE in devbox-image-common.ts. Each entry excuses exactly one drift: defaults baked from baked against this checkout's current digest.
devbox:manifest:checkand the manifest test filterdevboxSourceDriftProblemsthrough it.promotestays strict.- A further source change, or any other ladder, still fails.
- A new test fails once an entry is no longer needed, either because its rebake is promoted or because the sources move again.
- The validator's success line names the sources awaiting their rebake.
- The devbox README documents the entry.
Testing
- Base 0acdf31e15c5:
vm-image-manifest.test.tsgives21 pass, 1 fail, andbun scripts/validate-devbox-ladder.tsexits 1 with 12 drift lines. - This branch:
vm-image-manifest.test.tsplusvm-devbox-image.test.tsgive61 pass, 0 fail. The validator exits 0 with "sources awaiting their rebake: desktop 4b22f8bbeb1b…". - This branch, one line appended to
desktop/desktop-env.sh: 2 tests fail (the drift check and the pending check) and the validator exits 1. The guard still catches new drift.
Correctness review: the first version excused the drift only in the test, so the contract job's validate step would have stayed red. That's fixed in b3d22b8d7382, which also takes the review's nits (match the baked digest, check each entry on its own).
Changelog
none
🤖 Generated with Claude Code