review: iteration-3 fixes (convergence pass)
- ci-cd.md phrasing made time-invariant (true before and after the visibility flip; the prior wording asserted a state not yet real). - ui-shot: liveness check before the tap QMP call too — the commit-message claim of "before every QMP call" is now actually true. - busybox fetcher checks its pin before downloading, mirroring the kernel-tarball fetcher's ordering. - Fragment disable-arm: absence of a deps-gated symbol is a valid disable outcome; only "still set" is fatal (the iteration-2 symmetrization overcorrected). Negative-tested both directions under set -e. Iteration 3 produced four findings, none blocking, all applied — the recursive review is converged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018HUayid7W5w7jBdb9Rrj1K
This commit is contained in:
co-authored by
Claude Fable 5
parent
973a414f07
commit
f5c2cc9a42
@@ -129,11 +129,14 @@ if [ -n "${WARDEN_KCONFIG_FRAGMENT:-}" ]; then
|
|||||||
frag_fail=1
|
frag_fail=1
|
||||||
} ;;
|
} ;;
|
||||||
"# CONFIG_"*" is not set")
|
"# CONFIG_"*" is not set")
|
||||||
# Symmetric with the enable arm: the exact disable line must be
|
# A disable succeeded if the symbol is NOT set: Kconfig writes either
|
||||||
# present. A symbol absent entirely means a typo'd/renamed option,
|
# the literal "is not set" line or (when dependencies gate the symbol
|
||||||
# not a successful disable.
|
# out) nothing at all — both are valid outcomes. Only "still =value"
|
||||||
grep -qxF "$line" "$SRC/.config" || {
|
# is a failed disable. (A typo'd symbol disables nothing and is
|
||||||
echo "FATAL: fragment line '$line' not reflected in the final .config" >&2
|
# harmless by construction.)
|
||||||
|
opt="${line#\# }"; opt="${opt% is not set}"
|
||||||
|
grep -qE "^$opt=" "$SRC/.config" && {
|
||||||
|
echo "FATAL: fragment disabled '$opt' but it is still set in the final .config" >&2
|
||||||
frag_fail=1
|
frag_fail=1
|
||||||
} ;;
|
} ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
# CI/CD
|
# CI/CD
|
||||||
|
|
||||||
`.github/workflows/ci.yml` — every job runs on GitHub-hosted `ubuntu-latest`.
|
`.github/workflows/ci.yml` — every job runs on GitHub-hosted `ubuntu-latest`.
|
||||||
No self-hosted runner is (or may be) reachable from this repo's workflows:
|
No self-hosted runner is (or may be) reachable from this repo's workflows —
|
||||||
the repo is public, and a fork PR that gets one approved run could
|
on a public repo, a fork PR that gets one approved run could otherwise
|
||||||
otherwise execute code on private infrastructure (ADR-0007).
|
execute code on private infrastructure (ADR-0007).
|
||||||
|
|
||||||
## Jobs
|
## Jobs
|
||||||
|
|
||||||
|
|||||||
+6
-4
@@ -16,14 +16,16 @@ qemu_get_busybox() {
|
|||||||
local out="${OUT:-$QEMU_DIR/out}"
|
local out="${OUT:-$QEMU_DIR/out}"
|
||||||
mkdir -p "$out"
|
mkdir -p "$out"
|
||||||
BB="${BUSYBOX:-$out/busybox-armv7l}"
|
BB="${BUSYBOX:-$out/busybox-armv7l}"
|
||||||
if [ ! -f "$BB" ]; then
|
# Pin first: a missing pin refuses BEFORE downloading, same ordering as
|
||||||
qemu_log "downloading $BB_URL"
|
# build/fetch-kernel-tarball.sh.
|
||||||
curl --retry 3 --retry-delay 5 --retry-connrefused -fSL "$BB_URL" -o "$BB"
|
|
||||||
fi
|
|
||||||
[ -f "$sha_file" ] || {
|
[ -f "$sha_file" ] || {
|
||||||
echo "FATAL: no pinned sha256 for busybox (expected $sha_file) — refusing to build from an unverified binary" >&2
|
echo "FATAL: no pinned sha256 for busybox (expected $sha_file) — refusing to build from an unverified binary" >&2
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
if [ ! -f "$BB" ]; then
|
||||||
|
qemu_log "downloading $BB_URL"
|
||||||
|
curl --retry 3 --retry-delay 5 --retry-connrefused -fSL "$BB_URL" -o "$BB"
|
||||||
|
fi
|
||||||
local want got
|
local want got
|
||||||
want="$(cat "$sha_file")"
|
want="$(cat "$sha_file")"
|
||||||
got="$(sha256sum "$BB" | awk '{print $1}')"
|
got="$(sha256sum "$BB" | awk '{print $1}')"
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ done
|
|||||||
# Tap the "Metrics" tab: pixel (373,40) of 720x720 scaled to the QMP absolute
|
# Tap the "Metrics" tab: pixel (373,40) of 720x720 scaled to the QMP absolute
|
||||||
# range 0..32767 — switching tabs must repaint the content area. Poll for the
|
# range 0..32767 — switching tabs must repaint the content area. Poll for the
|
||||||
# repaint rather than guessing a delay.
|
# repaint rather than guessing a delay.
|
||||||
|
vm_alive_or_die
|
||||||
qmp tap 16975 1820
|
qmp tap 16975 1820
|
||||||
changed=0
|
changed=0
|
||||||
# 90s, matching the first-frame budget: TCG repaints are CPU-bound and a
|
# 90s, matching the first-frame budget: TCG repaints are CPU-bound and a
|
||||||
|
|||||||
Reference in New Issue
Block a user