Skip to content

uat: their release gate runs on every commit, held to the recorded matrix - #82

Merged
lex00 merged 1 commit into
mainfrom
feat/61-uat-in-ci
Aug 7, 2026
Merged

uat: their release gate runs on every commit, held to the recorded matrix#82
lex00 merged 1 commit into
mainfrom
feat/61-uat-in-ci

Conversation

@lex00

@lex00 lex00 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Closes #61, with the landing-page smoke folded in per the issue thread.

The uat job stands the stack up on k3d with m80:candidate built from the commit (up.sh already imports local builds — that was the point of the knob), runs KubeMicroVM's suite unmodified from a checkout pinned by SHA (bumping the pin is a deliberate commit — their suite moving is exactly what the gate exists to notice), and holds the result to uat/expected-failures.txt in both directions via uat/assert-matrix.py: a failure not listed is a regression and fails; a listed failure that passes also fails, with instructions, so "50 of 63" can never rot in the flattering direction. Results upload as artifacts either way; the operator's log prints on failure.

The smoke job runs the landing page's literal commands against the same candidate — docker run, the list-microvm-images call from "Give this to your agent", /_m80/health at 29/29 with nothing pending. The CLI runs from the UAT runner image so its version is pinned by a Dockerfile rather than the runner's whim.

The seed run is the re-measure. The full suite ran locally against v0.4.0 to capture the canonical expectation set: 50 of 63, identical to the v0.1.0 recording, every failure in the same documented class. docs/kubemicrovm.md's "not re-measured" caveat is replaced by the standing-gate statement. The gate was then proven against that same run: matrix holds: every failure expected, every expectation still failing.

~35 minutes end to end locally; the workflow caps at 60.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WVmBmk6XERjKxHa4HyezvT

…trix (#61)

Upstream's gate is the 63-case Robot UAT, run by hand against a billed
cluster before each release. It now runs here per commit, free: the
stack up on k3d with the image built from the commit, their suite
unmodified from a pinned checkout, and assert-matrix.py holding the
result to uat/expected-failures.txt in both directions — a new failure
is a regression, an expected failure that starts passing fails too
until the record moves with it. The full local run that seeded the
expectations doubles as the re-measure the pass matrix lacked: 50 of
63 on v0.4.0, identical to the v0.1.0 recording, each failure still
accounted for.

A smoke job runs first: the landing page's own commands against the
candidate — docker run, the list-microvm-images call, /_m80/health at
29/29 — because a docs prompt nobody executes is a docs prompt that
rots. Both jobs proven locally before this commit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WVmBmk6XERjKxHa4HyezvT
@lex00
lex00 merged commit 8a5e169 into main Aug 7, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Align m80 with codriverlabs' actual release gate: get their UAT into CI

1 participant