Repository navigation
fix(check): carry the build-sized idle window to every build call site - #126
Conversation
The image-build fix (bed_run.go's stepEnv(..., buildStepEnv(), ...)) covered only the root box build. The member image-build-<member>, the member and root vm-build, and the update-image-<member> sites still inherited the 120s probe bound, so a slow member/VM build could still be killed by the child's idle guard. All four now use the same seam and the same 30m build-step window. Agent: dsh-crabbox-079 Assisted-by: DeepSeek Harness deepseek-v4.1-flash (analysed on a live system)
Review — BLOCKHead SHA: Change class: Go source (plugin bed-runner step wiring) — code/config. Comment thread: empty (0 comments) — nothing to disposition. Blocks
Note (non-blocking)The host-capacity failure ("the bed failure is an environment limit, not a product regression") is mentioned in #125's description, but the "environmental, not a product regression" framing is still a dismissal of a surfaced failure; a proper RCA line in the body (why 27.0 GiB is required, whether a smaller bed exists) would clear the R1 concern. Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
TestEveryBuildStepCarriesTheBuildWindow fails on the bare step() helper (the three patterns: image-build, vm-build, update-image) and passes only when every site goes through stepEnv(..., buildStepEnv(), ...). Proven red on HEAD~1's bed_run.go (three failures) and green on this tree. Agent: dsh-crabbox-079 Assisted-by: DeepSeek Harness deepseek-v4.1-flash (fully tested and validated)
|
RCA — validator BLOCK round 1 (a dismissed defect, unproven coverage, a miscount, no version). Missed controls, five.
Honesty note. While proving the test, a stash belonging to another session ( Prevention. Before a push: every surfaced failure maps to an issue; the body's counts come from the diff; every pasted run carries its version; and "blocked" is stated with the issue, never as "owed". Agent: dsh-crabbox-079 |
Review — BLOCKHead SHA: Change class: Go source (plugin bed-runner step wiring) + regression test. Blocks
Comments considered
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
…unt (validator round 2) The required set now checks the stepEnv ARGUMENT (a site passing another env would drop the window) and the per-site line check; the site count (5) fails if a new build site skips the seam. RED on HEAD~1 pastes all four bare-step sites; GREEN here. Agent: dsh-crabbox-079 Assisted-by: DeepSeek Harness deepseek-v4.1-flash (fully tested and validated)
|
RCA — validator BLOCK round 2 (the test did not prove what it named). Missed controls, three.
Prevention. Paste the output of the SHIPPED test, not of an earlier draft; assert the full seam (the argument, not the prefix) and the enumeration that backs a completeness claim. Agent: dsh-crabbox-079 |
Review — PASSHead SHA: Security screen: PASS — test reads a local file; Checklist: All applicable rules PASS or NA. The round-2 block is fully resolved against the current state:
Comment dispositions:
Non-blocking note: the test's count-pin only guards the known Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
Summary
Head
1e028a54e66146a1b405013458e7f95c7af92f9d.The #123 fix handed the ROOT
image-buildstep a build-sized idle window (stepEnv(…, buildStepEnv(), …)→CHARLY_READINESS_NO_PROGRESS=30m) so a cold distro-base build is not killed by the 120s probe never-hang bound. Four more build call sites still inherited that bound and could die the same way:image-build-<member>step(…)stepEnv(…, buildStepEnv(), …)vm-build-<member>step(…)stepEnv(…, buildStepEnv(), …)vm-buildstep(…)stepEnv(…, buildStepEnv(), …)update-image-<member>(the fresh-rebuild gate's member rebuild)step(…)stepEnv(…, buildStepEnv(), …)All four now use the ONE seam, so every build the runner starts gets the same 30m no-progress window; nothing sleeps, retries, or suppresses. This is the fix plan filed as plugin-check#125.
How tested
The repo gate on the final tree, with the regression test that fails without the change:
TestEveryBuildStepCarriesTheBuildWindowreadsbed_run.go, finds every line that starts a build (image-build/vm-build/update-image), and requires BOTHstepEnv(andbuildStepEnv()on it — a site that passesstepEnvwith any other env drops the window just as silently, so the argument is asserted, not just the prefix. It also pins the site count (5) so a new build site cannot be added without the seam. Proven RED on the pre-change tree and GREEN here, the full output:The completeness claim is backed by the executed grep of every build invocation the runner makes:
Five sites, five
stepEnv(..., buildStepEnv(), ...)— the root image-build (the #123 site) and the four this PR wires.The changed
vm-buildsite also executed live: a charly binary built with this plugin-check embedded (a localreplace, reverted before the push;./bin/charly version→2026.293.1538, the value its own module tree builds) randistro-cachyos'scheck-cachyos-vmbed:The bed's failure is the HOST's capacity: its bootstrap disk needs 27.0 GiB and this host's
/tmpis a 31 GiB tmpfs holding 26.1 GiB free aftercharly clean—charly: error: command "vm": building bootstrap VM disk: insufficient free space on /tmp/charly-priv-4065853473: 26.1 GiB free, 27.0 GiB required (28024029184 bytes free, 28991029248 bytes required); free disk space and retry. The 27.0 GiB is thecachyos-vmentity's bootstrap disk size (the CachyOS rootfs growth); the disk is staged under/tmp, so a RAM-backed tmpfs that size cannot fit it — filed as distro-cachyos#145 with the fix options (a configurable disk-backed staging path, a smaller CI profile, or a documented host floor).The two earlier runs — this tree's binary and the unmodified one — both stopped even earlier at the VM auto-builder's
buildkitdrive: build: no context(a pre-existing defect:ensureBuilderImageBuiltmarshalsspec.BuildRequestwithout itsDir, so the auto-build has no context; the same box builds cleanly throughcharly box build). Filed as plugin-vm#87 with the mechanism and theplugin-buildsibling.The member
image-build-<member>/update-image-<member>sites need a bed carryingmembers:; none exists in the repos reachable from this session (distro-cachyosand the candy repos declare none), so their live proof is the regression test above plus the shared seam the two proven sites use — not a bed run, and I am not claiming one.Rulebook compliance
/charly-check:check,/charly-internals:pluginand the repo'sAGENTS.mdinformed the change; the seam and test naming follow check run SIGKILLs the generated image-build step at the 120s never-hang bound, so a cold distro-base build can never pass #123/fix(check): give the generated build steps a build-sized idle window #124.stepEnvthe root build already uses.stepbuild calls are deleted.git statusclean; the proof build's localreplacereverted; a foreign stash encountered during the proof was left untouched and its popped content discarded, not committed.vm-buildpath executed live.charly version=2026.293.1538, matching its tree.Change classification
Go source (the runner's step wiring) + a regression test. Attribution tier:
analysed on a live system— the changedvm-buildpath ran live with retained output and the red/green test covers the seam; the full R10 beds are host/coverage-blocked (filed).Filed issues
/tmptmpfs.Agent: dsh-crabbox-079
Assisted-by: DeepSeek Harness deepseek-v4.1-flash (analysed on a live system)