Skip to content

test(qa): verify all four distro baselines in QEMU - #220

Merged
PyRo1121 merged 2 commits into
PyRo1121/fix-smoke-observed-verdictsfrom
PyRo1121/qa-qemu-four-distros
Sep 5, 2026
Merged

test(qa): verify all four distro baselines in QEMU#220
PyRo1121 merged 2 commits into
PyRo1121/fix-smoke-observed-verdictsfrom
PyRo1121/qa-qemu-four-distros

Conversation

@PyRo1121

@PyRo1121 PyRo1121 commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Why

The Ubuntu-only runner could not prove that the supported distro baselines work under real guest kernels. Extend one runner rather than copy its SSH, reboot, and cleanup logic four times.

Scope

Replace scripts/benchmark-qemu-ubuntu.sh with scripts/benchmark-qemu.sh. Add pinned x86_64 profiles for Arch 20260901, Debian 12, Ubuntu 24.04, and Fedora 44. Support sequential all-distro runs, published or staged inputs, and optional warm info measurements.

Each guest checks its identity, strict SSH host keys, sudo, a changed boot ID after reboot, package search, install, exact native name/version parity, remove, and native absence. Debian and Ubuntu also check local-file consent and installation. The receipt and decision trail are committed under benchmarks/records. README instructions identify the supported baselines and remaining limits.

Tradeoffs

Reuse native package managers for fixtures and state assertions. APT fixture downloads use HTTPS on Ubuntu, bounded IPv4 requests, and no unused translation or desktop indexes. Signature checks remain enabled. One guest per distro and debug candidates do not establish release speedups.

A teardown timeout exposed unnecessary cleanup through Docker exec. The final runner removes the controller first and deletes known temporary files from the host-owned run directory. It does not report PASS when cleanup fails.

Blast Radius

This replaces a local script, not the release pipeline. No host package installation, merge, release publication, or deployment occurred. Missing staged artifacts do not fall back to published artifacts.

The passing set uses unchanged published Arch and Ubuntu archives and fixed Debian and Fedora candidates. The APT fix is separate at #218. Published Fedora defects and Debian 13 libapt ABI incompatibility remain. Exhaustive CLI coverage is not claimed.

Verification

The final frozen runner completed suite-iaP5Nd with four PASS results. All four guests rebooted, checked native package state, and produced 30 samples for each of two commands. All 240 raw samples are retained. Controller absence and deletion of private keys, seed images, overlays, and base images were checked after teardown.

Shell syntax checks, invalid-argument checks, release-smoke fixtures, receipt shape checks, exact runner SHA-256 matching, and git diff --check pass. The Debian candidate build and Clippy used -j 2 and CARGO_BUILD_JOBS=2 in a disposable Bookworm build controller.

Automated review abstained outside its project root. Diff and comment review were manual. Independent subagent review was not available under the session restriction. The task transcript was checked against the final receipt.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-05T14:39:11.541357Z ebec120 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No merge conflicts. GitHub reports MERGEABLE against PyRo1121/fix-smoke-observed-verdicts, and git merge-tree is also clean against that base and against current main. This is not an explicit product or API break, so I am not blocking it.

I am not merging, closing, approving, rebasing, or retargeting this PR. The runner still sits on the smoke-verdict stack (base 71f92605 is not on main). Changing the base would be an author workflow decision, not a conflict fix.

The diff replaces the local Ubuntu-only QEMU script with one four-distro runner. Docs and the committed receipt point at scripts/benchmark-qemu.sh. There are no remaining callers of scripts/benchmark-qemu-ubuntu.sh. That is a local QA rename, not a CLI, JSON, or release-pipeline contract change.

Checks I ran here: bash -n scripts/benchmark-qemu.sh is clean; the committed runner SHA-256 889cff76a4b8647ee03c3f2976b4cc97acde4f862d3445d83df48acf268be246 matches benchmarks/records/qemu-four-distros-20260905.json. I did not re-run the four-guest KVM suite, install host packages, or change the lockfile.

Author-scoped leftovers I will not force through:

  • Debian 13 / libapt-pkg.so.6.0 ABI compatibility is explicitly left separate. I will not retarget the published Debian artifact or invent a Trixie guest profile.
  • Published Fedora package defects remain. The passing Fedora receipt is a staged debug candidate from 525c74d4 (#217), not a published archive fix.
  • Published Debian still depends on the native APT frontend fix in open #218 (34854798). Expanding this PR to land that product change would be a different stack, not a conflict fix.
  • Image publisher signatures are documented as unverified. Adding independent signature checks would change the author’s stated runner contract.
  • Exhaustive CLI inventory, cold-cache trials, and repeated-guest statistics are left as remaining work. I will not invent a follow-up harness for those.
  • Later benchmarks/README.md design-contract sections still describe the Ubuntu-only subset and unimplemented guest targets. Rewriting that ledger is author documentation scope, not a merge conflict.
Open in Web View Automation 

Sent by Cursor Automation: Untitled

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e759450b0a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/benchmark-qemu.sh
[[ -z "$staged_dir" ]] || args+=(--staged-dir "$staged_dir")
[[ "$benchmark" == false ]] || args+=(--benchmark)
for target in arch debian ubuntu fedora; do
"$0" --distro "$target" --evidence-dir "$suite/$target" "${args[@]}" || rc=1

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Stop the suite when a child is interrupted

When --distro all is running and the operator presses Ctrl-C, the active child exits with 130, but this || rc=1 handler treats that signal exit like an ordinary distro failure and advances to the next guest. Consequently, cancelling a potentially long four-distro run starts another target instead of stopping; preserve signal exit codes and terminate the loop while continuing only after normal test failures.

Useful? React with 👍 / 👎.

@PyRo1121

PyRo1121 commented Sep 5, 2026

Copy link
Copy Markdown
Owner Author

Follow-up commit ebec120 adds failure-path coverage and preserves interrupted suite evidence.

  • Engine preflight now runs inside each target's result lifecycle. The full Docker inventory request was replaced with server-version negotiation.
  • The suite writes all four requested targets before guest startup. NOT_RUN and INCOMPLETE remain visible after coordinator interruption.
  • Guest exit receipts must match Docker/SSH exits. Missing receipts and transport disagreements cannot become product failures or passes.
  • The existing fixture suite covers unavailable engines, actual coordinator SIGTERM, product failures, timeouts, cleanup failures, transport disagreement, missing receipts, and temporary-file removal.

Current-code live verification passed Arch, Debian 12, Ubuntu 24.04, and Fedora 44 without --benchmark. Fedora required a separate retry after Docker controller creation timed out. The committed default_path_follow_up receipt retains both the failed suite-OmHcRb and passing run-N4VEvQ. This is not presented as one uninterrupted green suite. Each passing profile has a guest exit of zero, reboot proof, native package checks, and verified key/disk/controller cleanup.

The earlier suite-iaP5Nd remains historical benchmark evidence. No timing comparisons were collected under the competing Cargo load in this follow-up. Shell fixtures, syntax, JSON checks, executed-runner SHA-256 matching, and diff checks pass. Automated review abstained, and independent review remains unavailable under the no-subagent restriction.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ebec12009e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/benchmark-qemu.sh
ssh_service=sshd
case "$distro" in
arch)
image_url=https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-cloudimg-20260901.583572.qcow2

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Pin the Arch image outside the rotating latest catalog

When Arch refreshes its cloud images, this dated object under /images/latest/ can disappear, causing both --distro arch and the sequential all-distro suite to fail during download despite having a pinned checksum. The repository's own design identifies this catalog as a discovery URL rather than an immutable input (benchmarks/README.md:212-219); use the corresponding immutable versioned image URL instead.

Useful? React with 👍 / 👎.

Comment thread scripts/benchmark-qemu.sh
Comment on lines +225 to +226
hyperfine --shell=none --output=pipe --warmup 3 --runs 30 --export-json evidence/info.json \
--command-name 'OMG installed info' "$bin info tree" --command-name 'Native info' "${native[*]}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Record the hyperfine version with benchmark results

When --benchmark is enabled, the runner exports samples without capturing hyperfine --version, so results obtained from potentially different distro-packaged hyperfine releases cannot be reproduced or audited reliably. This also conflicts with the performance-record contract in benchmarks/README.md:264-268; persist the installed version alongside info.json and include it in the committed receipt.

Useful? React with 👍 / 👎.

@PyRo1121
PyRo1121 merged commit 8d991d1 into PyRo1121/fix-smoke-observed-verdicts Sep 5, 2026
4 of 5 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.

1 participant