diff --git a/text6.txt b/text6.txt index 44eacb0..17fe3e4 100644 --- a/text6.txt +++ b/text6.txt @@ -415,3 +415,43 @@ loop manifest 成组补 staged path guard;如果选择 `bad` expected-error 需要按现有 `badInterpFixtures` fixed list 做 staged path 对账,不改变 expected-error 语义。继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。 + +十一、2026-06-13 继续执行记录:g72 staging path guard + +本批按“自然成组 direct-file fixture staged path guard”推进,完成 `g72` loop 组 +2 个已有 Node/browser coverage 的 `.ngc` fixture: + +- `g72-facing/g72-iterations-present.ngc` +- `g72-missing-iteration/g72-iterations-missing.ngc` + +完成内容: + +- Node 侧将 `g72` inline loop 提成 `g72Fixtures` fixed manifest; +- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 分别与 upstream vendored + fixture 目录精确对账; +- Node 侧检查 staged path 与 fixed manifest 一致; +- browser 侧增加 fixed-count 与 duplicate-free guard; +- browser 侧检查 staged path 去掉 `/work/browser-interp/` 前缀后与 + `dir/file` fixed manifest 一致; +- browser 仍不依赖目录枚举。 + +已运行验证: + +```bash +git diff --check +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +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_sim_configs_inventory_wasm.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +结果:全部通过。 + +下一步建议: + +继续处理自然成组 direct-file fixtures。优先候选:`g71` 四项按现有 loop manifest +补 staged path guard;或者处理 `bad` expected-error 目录,只做 fixed list 与 +staged path 对账,不改变 expected-error 语义。继续避免 blocked runtime promotion、 +browser full inventory 扩面和 JS CNC 语义实现。 diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index 941e1c1..5583a02 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -7144,7 +7144,7 @@ ].join("\n"), ); - for (const g72Fixture of [ + const g72Fixtures = [ { name: "facing", dir: "g72-facing", @@ -7157,8 +7157,16 @@ file: "g72-iterations-missing.ngc", finalZ: "-40", }, - ]) { + ]; + if (g72Fixtures.length !== 2 || new Set(g72Fixtures.map((fixture) => `${fixture.dir}/${fixture.file}`)).size !== g72Fixtures.length) { + throw new Error("browser_interp_g72_fixture_coverage: list drift"); + } + for (const g72Fixture of g72Fixtures) { const g72Path = await writeInterpRegressionFile(interp, g72Fixture.dir, g72Fixture.file); + const g72StagedRelativeNgcFile = g72Path.replace("/work/browser-interp/", ""); + if (g72StagedRelativeNgcFile !== `${g72Fixture.dir}/${g72Fixture.file}`) { + throw new Error(`browser_interp_g72_${g72Fixture.name}_staging_manifest: list drift`); + } verifyExpectedOutput( `browser_interp_g72_${g72Fixture.name}`, interp.runFile(g72Path), diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index dffe2b6..657f12e 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -2088,7 +2088,7 @@ verifyExpectedOutput( ].join("\n"), ); -for (const g72Fixture of [ +const g72Fixtures = [ { name: "facing", dir: "g72-facing", @@ -2101,8 +2101,19 @@ for (const g72Fixture of [ file: "g72-iterations-missing.ngc", finalZ: "-40", }, -]) { +]; +for (const g72Fixture of g72Fixtures) { + assert.deepEqual( + [g72Fixture.file], + interpRegressionNgcFilesRecursive(g72Fixture.dir), + `interp ${g72Fixture.dir} fixture coverage drift`, + ); const g72Path = writeInterpRegressionFile(g72Fixture.dir, g72Fixture.file); + assert.deepEqual( + [g72Path], + [`/work/interp/${g72Fixture.dir}/${g72Fixture.file}`], + `interp ${g72Fixture.dir} staging manifest drift`, + ); verifyExpectedOutput( `interp_g72_${g72Fixture.name}_wasm`, interp.runFile(g72Path),