diff --git a/text5.txt b/text5.txt index d1693df..1a1e77d 100644 --- a/text5.txt +++ b/text5.txt @@ -6711,3 +6711,94 @@ wasm-port/tests/host/verify_host_smokes.sh ```text Guard sequence subroutine staging manifests ``` + +七十一、2026-06-13 继续执行记录:abort-hot-comment/m19 INI-context staging manifest guard + +本轮继续按“小批已有 Node/browser 执行覆盖 + 不扩大测试面”的路线推进。当前 +host 仍按 blocked runtime 规则处理,不执行任何 `ENABLE_*_RUNTIME_PROBE=1` +opt-in native probe。 + +1. 候选选择。 + +选择已有 Node/browser 执行覆盖、且通过 `stageInterpIniContext()` staging +INI-context 的两个 interpreter regression family: + +- `tests/interp/abort-hot-comment` +- `tests/interp/m19` + +这两个 family 都不需要 HAL/task/tool DB/Python remap/user-M process runtime。 +本轮只固定 host/filesystem staging manifest 对账,不新增 CNC 语义。 + +2. 覆盖对账。 + +`tests/interp/abort-hot-comment` 当前 upstream `.ngc` 文件: + +```text +test.ngc +``` + +`tests/interp/m19` 当前 upstream `.ngc` 文件: + +```text +test.ngc +``` + +3. 更新。 + +更新: + +- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs` +- `wasm-port/tests/browser/interp_smoke.html` + +Node 新增: + +- `abortHotCommentNgcFiles` 固定 `test.ngc`; +- `m19NgcFiles` 固定 `test.ngc`; +- 分别与 `interpRegressionNgcFilesRecursive(...)` 精确对账; +- 检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合与 + fixed list 一致。 + +Browser 新增: + +- fixed-count 和 duplicate-free guard; +- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合 + 与 fixed list 一致; +- browser 仍不枚举目录。 + +4. 已执行验证。 + +```bash +git diff --check +wasm-port/tools/verify_vendor_sync.sh +wasm-port/tools/verify_no_standalone_cnc_semantics.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +结果: + +- `git diff --check` clean。 +- `vendor sync up to date` +- `standalone CNC semantics guard complete` +- `interp_wasm_node_smoke=ok` +- Node inventory 保持: + - `executed=28` + - `passed=28` + - `skipped=131` + - `unexpected_fail=0` +- `browser_interp_smoke=ok` +- `host_wasm_opfs_browser_smokes=ok` + +5. 下一步工作建议。 + +当前工作集已稳定。建议先做小提交,message: + +```text +Guard abort and m19 staging manifests +``` + +提交后再继续下一批已有 INI-context fixture 的 staging manifest guard;仍保持每批 +只选少量 pure interpreter/INI-context case,并按 native/Node/browser gate 顺序 +复核,不推进 blocked runtime promotion。 diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index d78977f..43eb0d2 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -7409,6 +7409,20 @@ ); const abortHotCommentPlan = await stageInterpIniContext(interp, "abort-hot-comment"); + const abortHotCommentNgcFiles = [ + "test.ngc", + ]; + if (abortHotCommentNgcFiles.length !== 1 || new Set(abortHotCommentNgcFiles).size !== abortHotCommentNgcFiles.length) { + throw new Error("browser_interp_abort_hot_comment_fixture_coverage: list drift"); + } + const abortHotCommentStagedNgcFiles = abortHotCommentPlan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/abort-hot-comment/", "")) + .sort(); + if (abortHotCommentStagedNgcFiles.join(",") !== abortHotCommentNgcFiles.join(",")) { + throw new Error("browser_interp_abort_hot_comment_staging_manifest: list drift"); + } verifyExpectedOutput( "browser_interp_abort_hot_comment", interp.runFileWithIniContinueOnError( @@ -7426,6 +7440,20 @@ ); const m19Plan = await stageInterpIniContext(interp, "m19"); + const m19NgcFiles = [ + "test.ngc", + ]; + if (m19NgcFiles.length !== 1 || new Set(m19NgcFiles).size !== m19NgcFiles.length) { + throw new Error("browser_interp_m19_fixture_coverage: list drift"); + } + const m19StagedNgcFiles = m19Plan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/m19/", "")) + .sort(); + if (m19StagedNgcFiles.join(",") !== m19NgcFiles.join(",")) { + throw new Error("browser_interp_m19_staging_manifest: list drift"); + } verifyExpectedOutput( "browser_interp_m19", interp.runFileWithIni(m19Plan.programPath, m19Plan.iniPath), diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 33008c6..a7179b0 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -2316,6 +2316,23 @@ verifyExpectedOutput( ); const abortHotCommentPlan = stageInterpIniContext("abort-hot-comment"); +const abortHotCommentNgcFiles = [ + "test.ngc", +]; +assert.deepEqual( + abortHotCommentNgcFiles, + interpRegressionNgcFilesRecursive("abort-hot-comment"), + "interp abort-hot-comment fixture coverage drift", +); +assert.deepEqual( + abortHotCommentPlan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/abort-hot-comment/", "")) + .sort(), + abortHotCommentNgcFiles, + "interp abort-hot-comment staging manifest drift", +); verifyExpectedOutput( "interp_abort_hot_comment_wasm", interp.runFileWithIniContinueOnError( @@ -2333,6 +2350,23 @@ verifyExpectedOutput( ); const m19Plan = stageInterpIniContext("m19"); +const m19NgcFiles = [ + "test.ngc", +]; +assert.deepEqual( + m19NgcFiles, + interpRegressionNgcFilesRecursive("m19"), + "interp m19 fixture coverage drift", +); +assert.deepEqual( + m19Plan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/m19/", "")) + .sort(), + m19NgcFiles, + "interp m19 staging manifest drift", +); verifyExpectedOutput( "interp_m19_wasm", interp.runFileWithIni(m19Plan.programPath, m19Plan.iniPath),