fix(08-05): G-6 — inside-VM Step 11 direct flutter test, no recursive QEMU

Per 08-VERIFICATION.md G-6 closure plan (Plan 8-5 Task 1):

- scripts/build-windows.sh::main() inside-VM branch: replace
  run_headless_vm_test invocation with direct
  `(cd ${FLUTTER_DIR} && flutter test integration_test/windows_smoke_test.dart -d windows)`
  — under D-08-29 dockur auto-prov, build VM == test VM, so the test
  runs in-place against the same Windows session.
- scripts/build-windows.sh::run_headless_vm_test(): add
  `[[ "${INSIDE_VM}" == "0" ]] || return 0` safety guard so the
  function definition is safe-by-construction for any future host-mode
  caller wanting to integration_test a pre-built ZIP without rebuilding.
- tools/windows/run-headless-vm-test.sh: RETAINED UNCHANGED for the
  Linux-host manual-smoke use case.

Honors D-08-28 (Android-parity test pyramid) + D-08-29 (dockur auto-prov).
Closes G-6 from 08-VERIFICATION.md (smoke retry lands in Plan 8-5 Task 2).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-19 20:53:00 +02:00
parent 4cbe8ada9f
commit 5312bd3c44

View File

@@ -357,6 +357,12 @@ verify_zip() {
# exit ABORTS the build — headless test is part of the build's definition
# of done per D-08-28.
run_headless_vm_test() {
# G-6 safety guard (Plan 8-5): forbid invocation from inside-VM context
# — the runner spawns qemu-system-x86_64 which isn't available inside
# the dockur Win 11 VM, and nested KVM is architecturally broken. Retained
# for the Linux-host manual-smoke use case (e.g., a future host-mode
# caller wanting to integration_test a pre-built ZIP without rebuilding).
[[ "${INSIDE_VM}" == "0" ]] || return 0
log "Step 11: Running headless QEMU integration_test (D-08-28)..."
local runner="${REPO_DIR}/tools/windows/run-headless-vm-test.sh"
[[ -f "${runner}" ]] || die "Headless QEMU runner missing: ${runner}"
@@ -388,10 +394,21 @@ main() {
verify_exports
package_zip
verify_zip
# D-08-28: headless test is part of the build's definition of done.
# SUPERSEDES D-08-17 manual VM smoke. SMOKE-TEST-CHECKLIST.md retained
# as DOC reference for what the automated test covers.
run_headless_vm_test
# Step 11 (G-6 closure via Plan 8-5): direct flutter test in-place — no
# nested-QEMU recursion. Under D-08-29 dockur auto-prov, build VM == test
# VM = the same Windows instance; we're already inside it, so the
# Android-parity integration_test (D-08-28 layer 3 of the test pyramid)
# runs directly against this VM's flutter-windows build from Step 7-9.
# tools/windows/run-headless-vm-test.sh retained UNCHANGED on disk for
# the Linux-host manual-smoke use case (pre-built ZIP smoke without
# rebuilding) — that script's harness is the wrong level of indirection
# inside the VM (would attempt qemu-system-x86_64 which isn't installed
# and would require nested KVM which is architecturally broken).
log "Step 11: Running flutter integration_test in-place (D-08-28 + D-08-29)..."
( cd "${FLUTTER_DIR}" \
&& flutter test integration_test/windows_smoke_test.dart -d windows ) \
|| die "integration_test FAILED — see flutter test output above"
log " Integration_test PASSED."
log "BUILD SUCCESS: ${OUTPUT_ZIP}"
log " Integration_test verified inside headless QEMU VM (D-08-28)."
log " SMOKE-TEST-CHECKLIST.md retained as doc reference (D-08-17 SUPERSEDED)."