Repository navigation
test(qa): keep the failed image build step's output as qa evidence - #2942
Conversation
Finding 2020: a kubernetes QA cell's dev-up failed in the runtime image build at the Dockerfile step that runs the upstream server.required-placement-scopes test. The failure kept only the last eight stderr lines (the BuildKit summary), and the full output stayed in the private state directory, which the cell does not upload, so the vitest failure itself was lost. When a QA command's stderr shows a failed image build, the failed BuildKit step's lines (or, for podman, the last lines) are redacted like other QA command output and recorded as an *.json evidence file, which the cell uploads; the error names that file. The Dockerfile and the in-build test are unchanged.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
Review fixes for finding 2020: one dev-up can run several builds whose step numbers repeat, so the failed step is looked up in the last build only; newer buildx prints 'ERROR: failed to build: failed to solve:'.
|
Codex review: needs maintainer review before merge. What this changesThis PR saves bounded, redacted output from failed image-build steps into the existing uploaded QA evidence. Example: BuildKit step #41 fails in server.required-placement-scopes.test.ts.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this PR open for maintainer triage: it addresses a concrete QA diagnostic gap still present on current main, with no actionable correctness findings. Priority: P3 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherThe installation QA helper launches dev-up, receives subprocess failures, and sends diagnostic JSON through the existing evidence recorder to GitHub Actions artifacts. flowchart TB
A[QA installation] --> B[dev-up image build]
B --> C[Failed command stderr]
C --> D[Failed step selection]
D --> E[Existing QA redactor]
E --> F[JSON evidence recorder]
F --> G[Workflow artifact upload]
Technical reviewBest possible solution: Retain bounded, redacted failed-step diagnostics through the existing QA artifact path while preserving the original build failure. Do we have a high-confidence way to reproduce the issue? Current main demonstrably stores complete command output privately while exposing only an eight-line stderr tail; a build assertion above that tail is omitted from uploaded QA diagnostics. Is this the best way to solve the issue? The change addresses the diagnostic owner directly, reusing its recorder and redactor without introducing retries, changing build outcomes, or duplicating the separate provider-fixture repair. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 7afa66cb5532. Provenance checked
TestingProof path: unit tests only. SecurityNone. EvidenceWhat I checked:
Review metrics
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 19, 2026, 9:56 AM ET / 13:56 UTC. |
Problem
Finding 2020: a kubernetes QA cell on main 097f8d0 (#2919, run 39229991331) failed in dev-up's runtime image build. It failed at
deploy/runtime/Dockerfile:181, the step that runs the upstreamserver.required-placement-scopes.test.ts. The QA helper kept only the last eight stderr lines (BuildKit's summary). The full output stayed in the private state directory, which the cell does not upload, so the vitest failure itself was lost. The compose and OpenShell cells built the same commit fine.Change
Test-only. When a QA command's stderr shows a failed image build (
ERROR: failed to solve:or podman'sError: building at STEP), two things happen:imageBuildFailureOutputtakes the failed BuildKit step's own lines, at most 200:#<step>prefix of the last#<step> ERROR:line.ERROR: failed to solve:and newer buildx'sERROR: failed to build: failed to solve:.recordImageBuildFailureredacts them like other QA command output (redactedQaTail) and records them as<control-plane>-image-build-failure-<ms>.jsonevidence, which the cell uploads (*.json). The command's error names that file.The Dockerfile and the in-build test are unchanged.
Verification
tests/integration/qa-fixture-inputs.test.mjs, file 33/33.Risks
Low. Test-only, and runs only on failed image builds.
For the owner: the upstream regression test runs inside the image build with one vitest worker. On a contended runner it can fail the whole cell before any OCE check runs. Options:
This PR only keeps the evidence.