diff --git a/text6.txt b/text6.txt index 2c7263c..69fce11 100644 --- a/text6.txt +++ b/text6.txt @@ -1385,3 +1385,50 @@ wasm-port/tests/host/verify_host_smokes.sh 建议先处理 `g10`,因为 fixed manifest 已存在,当前只需把 initial/final aggregate path guard 拆到每个 `writeG10RegressionFiles(...)` 调用附近。继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。 + +三十三、2026-06-13 继续执行记录:g10 directory staging guard + +本批处理 `g10` initial/final aggregate staged path guard,将其拆到每个 +`writeG10RegressionFiles(...)` 调用附近。 + +完成内容: + +- Node 侧新增 `assertG10RegressionStaging(...)`; +- Node 侧对每个 g10 fixture 目录的 vendored `.ngc/.tbl` 文件清单与 fixed manifest + 精确对账; +- Node 侧检查 staged path 与 `/work/interp/g10//...` fixed manifest 一致; +- Node 侧移除 `g10` initial/final aggregate staged path guard; +- browser 侧新增同名 helper,检查 fixed manifest duplicate-free; +- browser 侧检查 staged path 去掉 `/work/browser-interp/g10//` 前缀后与 fixed + manifest 一致; +- browser 侧移除 `g10` initial/final aggregate staged path guard,仍不枚举目录; +- 仅整理 host/filesystem staging guard,不改变 G10、G92 或 tool table 语义。 + +已运行验证: + +```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 +``` + +结果:全部通过。 + +下一步建议: + +继续收敛 earlier direct-file guard。优先候选: + +- `do-while-break` +- `oword-bug315` +- `oword-bug315-p2` +- `exists` +- `return-value` + +这些已有 Node/browser coverage 和 fixed `.ngc` manifest,适合逐步复用 +`assertInterpRegressionFileStaging(...)` 或小型 per-directory helper 替换内联 staged +path 对账。继续避免 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 1894b6a..25c435a 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4755,6 +4755,16 @@ return wasmDir; } + function assertG10RegressionStaging(name, files, wasmDir) { + if (files.length === 0 || new Set(files).size !== files.length) { + throw new Error(`browser_interp_g10_${name}_fixture_coverage: list drift`); + } + const g10StagedRelativeFiles = files.map((file) => `${wasmDir}/${file}`.replace(`/work/browser-interp/g10/${name}/`, "")); + if (g10StagedRelativeFiles.join(",") !== files.join(",")) { + throw new Error(`browser_interp_g10_${name}_staging_manifest: list drift`); + } + } + async function runVendorNcFile(interp, filename) { const wasmPath = `/work/browser-nc-files/${filename}`; await writeFetchedTextFile( @@ -8439,6 +8449,7 @@ "test.ngc", "test.tbl", ]); + assertG10RegressionStaging("g10-l1-l10", ["test.ngc", "test.tbl"], g10L1L10Dir); verifyExpectedOutput( "browser_interp_g10_l1_l10", interp.runFileWithIni(`${g10L1L10Dir}/test.ngc`, `${g10L1L10Dir}/test.ini`), @@ -8461,6 +8472,7 @@ "test.ngc", "test.tbl", ]); + assertG10RegressionStaging("g10-l11", ["test.ngc", "test.tbl"], g10L11Dir); verifyExpectedOutput( "browser_interp_g10_l11", interp.runFileWithIni(`${g10L11Dir}/test.ngc`, `${g10L11Dir}/test.ini`), @@ -8482,14 +8494,7 @@ "g10-l2-while-active", ["test.ngc"], ); - const g10InitialStagedNgcFiles = [ - `${g10L1L10Dir}/test.ngc`, - `${g10L11Dir}/test.ngc`, - `${g10L2WhileActiveDir}/test.ngc`, - ].map((path) => path.replace("/work/browser-interp/g10/", "")); - if (g10InitialStagedNgcFiles.join(",") !== g10RegressionFiles.slice(0, 3).join(",")) { - throw new Error("browser_interp_g10_initial_staging_manifest: list drift"); - } + assertG10RegressionStaging("g10-l2-while-active", ["test.ngc"], g10L2WhileActiveDir); verifyExpectedOutput( "browser_interp_g10_l2_while_active", interp.runFile(`${g10L2WhileActiveDir}/test.ngc`), @@ -8512,6 +8517,7 @@ "g10-l20-while-active", ["test.ngc"], ); + assertG10RegressionStaging("g10-l20-while-active", ["test.ngc"], g10L20WhileActiveDir); verifyExpectedOutput( "browser_interp_g10_l20_while_active", interp.runFile(`${g10L20WhileActiveDir}/test.ngc`), @@ -8532,13 +8538,7 @@ "test.ngc", "test.tbl", ]); - const g10FinalStagedNgcFiles = [ - `${g10L20WhileActiveDir}/test.ngc`, - `${g10WithG92Dir}/test.ngc`, - ].map((path) => path.replace("/work/browser-interp/g10/", "")); - if (g10FinalStagedNgcFiles.join(",") !== g10RegressionFiles.slice(3, 5).join(",")) { - throw new Error("browser_interp_g10_final_staging_manifest: list drift"); - } + assertG10RegressionStaging("g10-with-g92", ["test.ngc", "test.tbl"], g10WithG92Dir); verifyExpectedOutput( "browser_interp_g10_with_g92", interp.runFileWithIni(`${g10WithG92Dir}/test.ngc`, `${g10WithG92Dir}/test.ini`), diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 7ecb2c1..e2d6259 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -405,6 +405,22 @@ function writeG10RegressionFiles(name, files) { return wasmDir; } +function assertG10RegressionStaging(name, files, wasmDir) { + const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp/g10", name); + assert.deepEqual( + readdirSync(sourceDir) + .filter((filename) => filename.endsWith(".ngc") || filename.endsWith(".tbl")) + .sort(), + [...files].sort(), + `interp g10 ${name} fixture coverage drift`, + ); + assert.deepEqual( + files.map((file) => `${wasmDir}/${file}`), + files.map((file) => `/work/interp/g10/${name}/${file}`), + `interp g10 ${name} staging manifest drift`, + ); +} + function writeUserMCodeFixture(name, code) { const wasmDir = `/work/user-m/${name}`; const iniPath = `${wasmDir}/test.ini`; @@ -3396,6 +3412,7 @@ assert.deepEqual( ); const g10L1L10Dir = writeG10RegressionFiles("g10-l1-l10", ["test.ngc", "test.tbl"]); +assertG10RegressionStaging("g10-l1-l10", ["test.ngc", "test.tbl"], g10L1L10Dir); verifyExpectedOutput( "interp_g10_l1_l10_wasm", interp.runFileWithIni(`${g10L1L10Dir}/test.ngc`, `${g10L1L10Dir}/test.ini`), @@ -3415,6 +3432,7 @@ verifyExpectedOutput( ); const g10L11Dir = writeG10RegressionFiles("g10-l11", ["test.ngc", "test.tbl"]); +assertG10RegressionStaging("g10-l11", ["test.ngc", "test.tbl"], g10L11Dir); verifyExpectedOutput( "interp_g10_l11_wasm", interp.runFileWithIni(`${g10L11Dir}/test.ngc`, `${g10L11Dir}/test.ini`), @@ -3432,17 +3450,7 @@ verifyExpectedOutput( ); const g10L2WhileActiveDir = writeG10RegressionFiles("g10-l2-while-active", ["test.ngc"]); -assert.deepEqual( - [ - `${g10L1L10Dir}/test.ngc`, - `${g10L11Dir}/test.ngc`, - `${g10L2WhileActiveDir}/test.ngc`, - ], - g10RegressionFiles - .slice(0, 3) - .map((file) => `/work/interp/g10/${file}`), - "interp g10 initial staging manifest drift", -); +assertG10RegressionStaging("g10-l2-while-active", ["test.ngc"], g10L2WhileActiveDir); verifyExpectedOutput( "interp_g10_l2_while_active_wasm", interp.runFile(`${g10L2WhileActiveDir}/test.ngc`), @@ -3461,6 +3469,7 @@ verifyExpectedOutput( ); const g10L20WhileActiveDir = writeG10RegressionFiles("g10-l20-while-active", ["test.ngc"]); +assertG10RegressionStaging("g10-l20-while-active", ["test.ngc"], g10L20WhileActiveDir); verifyExpectedOutput( "interp_g10_l20_while_active_wasm", interp.runFile(`${g10L20WhileActiveDir}/test.ngc`), @@ -3478,16 +3487,7 @@ verifyExpectedOutput( ); const g10WithG92Dir = writeG10RegressionFiles("g10-with-g92", ["test.ngc", "test.tbl"]); -assert.deepEqual( - [ - `${g10L20WhileActiveDir}/test.ngc`, - `${g10WithG92Dir}/test.ngc`, - ], - g10RegressionFiles - .slice(3, 5) - .map((file) => `/work/interp/g10/${file}`), - "interp g10 final staging manifest drift", -); +assertG10RegressionStaging("g10-with-g92", ["test.ngc", "test.tbl"], g10WithG92Dir); verifyExpectedOutput( "interp_g10_with_g92_wasm", interp.runFileWithIni(`${g10WithG92Dir}/test.ngc`, `${g10WithG92Dir}/test.ini`),