Refresh WASM qualification on the shared providers
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_closuresstep inscripts/qualify-ci.sh:- Checks
--lib --testswith-Dwarningsforbrowser,wasmandbrowser,test-support, and keeps the featureless--libcheck. - The
weblane calls it, and it also runs alone as the browser-freeweb-warningslane. harness_testsmoves to the top level and now also rejects any0 passedsuite.
- Checks
- Preflight pins:
scripts/test-qualify-ci-preflight.shchecks the four cargo calls and their-Dwarningsflags exactly. Twosedmutations act as negative controls:- dropping
--testsmust fail the test; - dropping
-Dwarningsmust fail the test.
- dropping
- Merge with main: after merging main, the gate pins also cover #833's
--hook-lifecycleLoom step: its library build and its two exact filters. - Results on bb1:
bash -npasses.test-qualify-ci-preflight.shpasses in 5โ30 s, depending on box load.qualify-mcp-loom,build-wasm-groups,ci-background-logandtest-plan-qualification-gatenode tests all pass.scripts/check-harness-package.test.mjsfails withroot: 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