Refresh WASM qualification on the shared providers

Merged
VA
1d ago
+135-23

Hold for #804 and #825. Whole WASM --tests warning denial is deliberately excluded until #825 lands.

Problem

Qualification uses obsolete WASM integration targets and does not check the minimal production or source-including fuzz/model closures under warning denial.

Design

Use the current shared main and client-views-parity targets, browser,test-support, and the existing provider Node runner. Deny warnings on the existing WASM steps and check browser alone, wasm alone and no default features without test-support.

Add default-feature harness-fuzz --bins, model-checking library builds both alone and with filesystem-local, actual mailbox/journal/MCP models, workflow models and the existing memory-accounting qualifier under -Dwarnings. The model cfg is supplied only by dedicated commands; no MCP/test-support feature masks missing library imports.

Reuse one Harness suite wrapper across native model and browser qualification. Require nonempty results and reject any zero-test suite, including when another suite passed. Update the command/flag oracle, including coordinator and summary artifacts, and add independent missing-result and mixed-zero-result negative controls.

Deletions

Delete the duplicate nested suite wrapper and replace obsolete target invocations. Scripts only: +90/-23, net +67, 2 files. No Rust implementation, generated output or README edits.

Tests run

Signed head f6b3af310: one sequential bs.ps1 script batch, 7.2 s total including sync/setup. Bash syntax checks and qualification preflight pass; both new negative controls reject incomplete coverage. Node qualification tests: 9 passed in 0.045 s. No Cargo compilation was repeated for these script changes.

#804 at signed 74aa8b148 supplies the real compilation/runtime evidence: all eight native full/small, WASM production-library and Windows GNU closures pass -Dwarnings; default fuzz bins and minimum model libraries pass. Model groups, including negative controls, complete in 0.00-0.18 s. The additional tool-file shrinking property passes in 0.01 s.

Decisions

Merge after #804. Keep whole wasm32 --tests cleanup in #825 and add its warning-denied closure here only after it lands, as directed. Keep the existing runners and require actual nonzero model execution. Qualification commands remain sequential. Windows crate compile proof is supplied by #804; this PR changes only shell scripts and their scripted tests.

Whole-WASM test closures, now that #825 has landed (d5d8d39a9, fc5c51428, c5b6edca9)

  • New web_warning_closures step in scripts/qualify-ci.sh:
    • Checks --lib --tests with -Dwarnings for browser, wasm and browser,test-support, and keeps the featureless --lib check.
    • The web lane calls it, and it also runs alone as the browser-free web-warnings lane.
    • harness_tests moves to the top level and now also rejects any 0 passed suite.
  • Preflight pins: scripts/test-qualify-ci-preflight.sh checks the four cargo calls and their -Dwarnings flags exactly. Two sed mutations act as negative controls:
    • dropping --tests must fail the test;
    • dropping -Dwarnings must fail the test.
  • Merge with main: after merging main, the gate pins also cover #833's --hook-lifecycle Loom step: its library build and its two exact filters.
  • Results on bb1:
    • bash -n passes.
    • test-qualify-ci-preflight.sh passes in 5โ€“30 s, depending on box load.
    • qualify-mcp-loom, build-wasm-groups, ci-background-log and test-plan-qualification-gate node tests all pass.
    • scripts/check-harness-package.test.mjs fails with root: unbound variable. It fails identically on origin/main 09326531c, so it is not from this PR.
    • The real wasm32 closures this lane runs passed on #825's gate: browser 59.6 s, wasm 111.5 s, browser,test-support 88.7 s.

๐Ÿค– Generated with Claude Code