From 08e10c7b5ae2351b94686aa4207193fb167ee807 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sat, 13 Jun 2026 12:49:17 +0800 Subject: [PATCH] Guard final interp per-file staging paths --- text6.txt | 54 +++++++++++++++++++ wasm-port/tests/browser/interp_smoke.html | 18 ++----- .../tests/wasm/node/verify_interp_wasm.mjs | 24 ++++----- 3 files changed, 69 insertions(+), 27 deletions(-) diff --git a/text6.txt b/text6.txt index 199240e..cfa8cfc 100644 --- a/text6.txt +++ b/text6.txt @@ -1809,3 +1809,57 @@ wasm-port/tests/host/verify_host_smokes.sh fixed manifest 和 Node/browser coverage,适合直接切换到 per-file helper。其后再按 小批量处理 `do-while-break`、`cam-nisley`、`g76`。继续避免 blocked runtime promotion、 browser full inventory 扩面和 JS CNC 语义实现。 + +四十二、2026-06-13 继续执行记录:final interp directory per-file staging guard + +本批继续收敛剩余 ordinary interp directory aggregate staging guard: + +- `m98m99/13-named-program` +- `do-while-break` +- `cam-nisley` +- `g76` + +完成内容: + +- Node 侧将 `m98m99/13-named-program` 从 `assertInterpRegressionStaging(...)` + 切换为 `assertInterpRegressionFilesCoverage(...)` 加 + `assertInterpRegressionFilesStaging(...)`; +- Node 侧同步将 `do-while-break`、`cam-nisley`、`g76` 切换到 coverage helper 加 + per-file staging helper; +- browser 侧将上述 4 组切换为 `assertInterpRegressionFilesStaging(...)`; +- 删除 Node/browser 侧已无调用的 ordinary `assertInterpRegressionStaging(...)` + aggregate helper; +- `cam-nisley` 和 `g76` 运行时生成的 `test.ini` 仍保持测试内生成,不纳入 vendored + staged manifest; +- browser 侧仍不枚举目录; +- 仅整理 host/filesystem staging guard,不改变 do-while、CAM、G76 threading、 + named-program 或 interpreter 语义。 + +已运行验证: + +```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_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +结果:全部通过。 + +下一步建议: + +ordinary interp directory aggregate guard 已清空。下一批建议继续按专用域收敛 staged +path helper,优先候选: + +- ccomp 专用 helper:`lathe-comp`、`mill-g90g91g92`、`mill-line-arc-entry`、 + `mill-zchanges` +- g10 专用 helper:`g10-l1-l10`、`g10-l11`、`g10-l2-while-active`、 + `g10-l20-while-active`、`g10-with-g92` +- remap 专用 helper保留 expected-unstaged 语义,需单独小心处理 + +建议下一批先处理 ccomp 4 组,因为 file manifest 固定为 `test.ngc`、`test.tbl`, +且 Node/browser coverage 已成型。继续避免 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 3e4de5c..d9155e5 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4705,16 +4705,6 @@ return wasmDir; } - function assertInterpRegressionStaging(name, files, wasmDir) { - if (files.length === 0 || new Set(files).size !== files.length) { - throw new Error(`browser_interp_${name}_fixture_coverage: list drift`); - } - const interpStagedRelativeFiles = files.map((file) => `${wasmDir}/${file}`.replace(`/work/browser-interp/${name}/`, "")); - if (interpStagedRelativeFiles.join(",") !== files.join(",")) { - throw new Error(`browser_interp_${name}_staging_manifest: list drift`); - } - } - async function writeCcompRegressionFiles(interp, name) { const sourceDir = `../../vendor/linuxcnc/tests/ccomp/${name}`; const wasmDir = `/work/browser-ccomp/${name}`; @@ -6374,7 +6364,7 @@ "do-while-break", doWhileBreakNgcFiles, ); - assertInterpRegressionStaging("do-while-break", doWhileBreakNgcFiles, doWhileBreakDir); + assertInterpRegressionFilesStaging("do-while-break", doWhileBreakNgcFiles, doWhileBreakDir); const doWhileBreakPath = `${doWhileBreakDir}/test.ngc`; verifyExpectedOutput( "browser_interp_do_while_break", @@ -6599,7 +6589,7 @@ "test.tbl", ]; const camNisleyDir = await writeInterpRegressionFiles(interp, "cam-nisley", camNisleyFiles); - assertInterpRegressionStaging("cam-nisley", camNisleyFiles, camNisleyDir); + assertInterpRegressionFilesStaging("cam-nisley", camNisleyFiles, camNisleyDir); interp.writeTextFile( `${camNisleyDir}/test.ini`, [ @@ -7296,7 +7286,7 @@ "test.tbl", ]; const g76Dir = await writeInterpRegressionFiles(interp, "g76", g76Files); - assertInterpRegressionStaging("g76", g76Files, g76Dir); + assertInterpRegressionFilesStaging("g76", g76Files, g76Dir); interp.writeTextFile( `${g76Dir}/test.ini`, [ @@ -8292,7 +8282,7 @@ "m98m99/13-named-program", m98m99NamedProgramFiles, ); - assertInterpRegressionStaging( + assertInterpRegressionFilesStaging( "m98m99/13-named-program", m98m99NamedProgramFiles, m98m99NamedProgramDir, diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 32968e6..83b2fb7 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -323,15 +323,6 @@ function assertInterpRegressionFilesStaging(name, files, wasmDir) { } } -function assertInterpRegressionStaging(name, files, wasmDir) { - assertInterpRegressionFilesCoverage(name, files); - assert.deepEqual( - files.map((file) => `${wasmDir}/${file}`), - files.map((file) => `/work/interp/${name}/${file}`), - `interp ${name} staging manifest drift`, - ); -} - function interpRegressionNgcFiles(name) { const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name); return readdirSync(sourceDir) @@ -1365,7 +1356,8 @@ const doWhileBreakNgcFiles = [ "test.ngc", ]; const doWhileBreakDir = writeInterpRegressionFiles("do-while-break", doWhileBreakNgcFiles); -assertInterpRegressionStaging("do-while-break", doWhileBreakNgcFiles, doWhileBreakDir); +assertInterpRegressionFilesCoverage("do-while-break", doWhileBreakNgcFiles); +assertInterpRegressionFilesStaging("do-while-break", doWhileBreakNgcFiles, doWhileBreakDir); const doWhileBreakPath = `${doWhileBreakDir}/test.ngc`; verifyExpectedOutput( "interp_do_while_break_wasm", @@ -1583,7 +1575,8 @@ const camNisleyFiles = [ "test.tbl", ]; const camNisleyDir = writeInterpRegressionFiles("cam-nisley", camNisleyFiles); -assertInterpRegressionStaging("cam-nisley", camNisleyFiles, camNisleyDir); +assertInterpRegressionFilesCoverage("cam-nisley", camNisleyFiles); +assertInterpRegressionFilesStaging("cam-nisley", camNisleyFiles, camNisleyDir); interp.writeTextFile( `${camNisleyDir}/test.ini`, [ @@ -2265,7 +2258,8 @@ const g76Files = [ "test.tbl", ]; const g76Dir = writeInterpRegressionFiles("g76", g76Files); -assertInterpRegressionStaging("g76", g76Files, g76Dir); +assertInterpRegressionFilesCoverage("g76", g76Files); +assertInterpRegressionFilesStaging("g76", g76Files, g76Dir); interp.writeTextFile( `${g76Dir}/test.ini`, [ @@ -3247,7 +3241,11 @@ const m98m99NamedProgramDir = writeInterpRegressionFiles( "m98m99/13-named-program", m98m99NamedProgramFiles, ); -assertInterpRegressionStaging( +assertInterpRegressionFilesCoverage( + "m98m99/13-named-program", + m98m99NamedProgramFiles, +); +assertInterpRegressionFilesStaging( "m98m99/13-named-program", m98m99NamedProgramFiles, m98m99NamedProgramDir,