From 3b1e4129c42fdd51a125a713cd81620ca1766bea Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sat, 13 Jun 2026 08:11:55 +0800 Subject: [PATCH] Guard initial remap staging paths --- text6.txt | 47 +++++++++++++++++ wasm-port/tests/browser/interp_smoke.html | 46 +++++++++++----- .../tests/wasm/node/verify_interp_wasm.mjs | 52 ++++++++++++++----- 3 files changed, 121 insertions(+), 24 deletions(-) diff --git a/text6.txt b/text6.txt index c21c647..2d1cce3 100644 --- a/text6.txt +++ b/text6.txt @@ -706,3 +706,50 @@ wasm-port/tests/host/verify_host_smokes.sh 优先候选:继续扫描剩余 `write*RegressionFiles(...)` helper 输出,或挑选短小单文件 direct-file case。仍不要推进 blocked runtime promotion、browser full inventory 扩面或 JS CNC 语义实现。 + +十八、2026-06-13 继续执行记录:initial remap file-list staging path guard + +本批按“已有明确 file list 的 remap fixture staged path guard”推进,完成现有 +Node/browser remap coverage 的 6 个小目录: + +- `remap/duplicate-o-word` +- `remap/fail/args.0` +- `remap/fail/args.1` +- `remap/fail/args.2` +- `remap/fail/body-ngc` +- `remap/m30-interaction` + +完成内容: + +- Node 侧新增 `assertRemapRegressionStaging(...)`; +- Node 侧将上述 6 个 inline remap file list 提成 fixed manifest; +- Node 侧用 upstream vendored `.ini/.ngc` 文件清单与 fixed manifest 精确对账; +- Node 侧检查 `writeRemapRegressionFiles(...)` 目标 staged path 与 fixed manifest + 一致; +- browser 侧新增同名 staged path guard; +- browser 侧检查 staged path 去掉 `/work/browser-remap//` 前缀后与 fixed + manifest 一致; +- 仅校验文件清单与 staging 路径,不改变 remap 执行语义; +- 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 +``` + +结果:全部通过。 + +下一步建议: + +继续按小批量处理剩余 `writeRemapRegressionFiles(...)` file list,例如 +`nested-remaps-oword`、`posargs.0`、`sequencing`、`remap-io`。注意 `remap-io` +会额外生成 `simpockets.tbl`,如处理该项应明确区分 vendored file list 与运行时 +生成文件。继续避免 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 3c7a7a3..2619241 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4647,6 +4647,16 @@ return wasmDir; } + function assertRemapRegressionStaging(name, files, wasmDir) { + if (files.length === 0 || new Set(files).size !== files.length) { + throw new Error(`browser_remap_${name}_fixture_coverage: list drift`); + } + const remapStagedRelativeFiles = files.map((file) => `${wasmDir}/${file}`.replace(`/work/browser-remap/${name}/`, "")); + if (remapStagedRelativeFiles.join(",") !== files.join(",")) { + throw new Error(`browser_remap_${name}_staging_manifest: list drift`); + } + } + async function writeInterpRegressionFile(interp, name, filename) { const sourceDir = `../../vendor/linuxcnc/tests/interp/${name}`; const wasmDir = `/work/browser-interp/${name}`; @@ -5951,12 +5961,14 @@ ].join("\n"), ); - const duplicateOwordDir = await writeRemapRegressionFiles(interp, "duplicate-o-word", [ + const duplicateOwordFiles = [ "test.ini", "test.ngc", "rm207.ngc", "rm208.ngc", - ]); + ]; + const duplicateOwordDir = await writeRemapRegressionFiles(interp, "duplicate-o-word", duplicateOwordFiles); + assertRemapRegressionStaging("duplicate-o-word", duplicateOwordFiles, duplicateOwordDir); verifyExpectedOutput( "browser_duplicate_oword_remap", interp.runRemapFile( @@ -5984,11 +5996,13 @@ ].join("\n"), ); - const failArgs0Dir = await writeRemapRegressionFiles(interp, "fail/args.0", [ + const failArgs0Files = [ "test.ini", "test.ngc", "rm400.ngc", - ]); + ]; + const failArgs0Dir = await writeRemapRegressionFiles(interp, "fail/args.0", failArgs0Files); + assertRemapRegressionStaging("fail/args.0", failArgs0Files, failArgs0Dir); verifyExpectedOutput( "browser_fail_args_0_remap", interp.runRemapFile( @@ -6011,11 +6025,13 @@ ].join("\n"), ); - const failArgs1Dir = await writeRemapRegressionFiles(interp, "fail/args.1", [ + const failArgs1Files = [ "test.ini", "test.ngc", "rm400.ngc", - ]); + ]; + const failArgs1Dir = await writeRemapRegressionFiles(interp, "fail/args.1", failArgs1Files); + assertRemapRegressionStaging("fail/args.1", failArgs1Files, failArgs1Dir); verifyExpectedOutput( "browser_fail_args_1_remap", interp.runRemapFileContinueOnError( @@ -6034,11 +6050,13 @@ ].join("\n"), ); - const failArgs2Dir = await writeRemapRegressionFiles(interp, "fail/args.2", [ + const failArgs2Files = [ "test.ini", "test.ngc", "rm400.ngc", - ]); + ]; + const failArgs2Dir = await writeRemapRegressionFiles(interp, "fail/args.2", failArgs2Files); + assertRemapRegressionStaging("fail/args.2", failArgs2Files, failArgs2Dir); verifyExpectedOutput( "browser_fail_args_2_remap", interp.runRemapFileContinueOnError( @@ -6057,11 +6075,13 @@ ].join("\n"), ); - const failBodyNgcDir = await writeRemapRegressionFiles(interp, "fail/body-ngc", [ + const failBodyNgcFiles = [ "test.ini", "test.ngc", "rm400.ngc", - ]); + ]; + const failBodyNgcDir = await writeRemapRegressionFiles(interp, "fail/body-ngc", failBodyNgcFiles); + assertRemapRegressionStaging("fail/body-ngc", failBodyNgcFiles, failBodyNgcDir); verifyExpectedOutput( "browser_fail_body_ngc_remap", interp.runRemapFileContinueOnError( @@ -6083,11 +6103,13 @@ ].join("\n"), ); - const m30InteractionDir = await writeRemapRegressionFiles(interp, "m30-interaction", [ + const m30InteractionFiles = [ "test.ini", "test.ngc", "rm400.ngc", - ]); + ]; + const m30InteractionDir = await writeRemapRegressionFiles(interp, "m30-interaction", m30InteractionFiles); + assertRemapRegressionStaging("m30-interaction", m30InteractionFiles, m30InteractionDir); verifyExpectedOutput( "browser_m30_interaction_remap", interp.runRemapFile( diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 12deae0..f303a96 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -246,6 +246,22 @@ function writeRemapRegressionFiles(name, files) { return wasmDir; } +function assertRemapRegressionStaging(name, files, wasmDir) { + const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/remap", name); + assert.deepEqual( + readdirSync(sourceDir) + .filter((filename) => filename.endsWith(".ini") || filename.endsWith(".ngc")) + .sort(), + [...files].sort(), + `remap ${name} fixture coverage drift`, + ); + assert.deepEqual( + files.map((file) => `${wasmDir}/${file}`), + files.map((file) => `/work/remap/${name}/${file}`), + `remap ${name} staging manifest drift`, + ); +} + function writeInterpRegressionFile(name, filename) { const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name); const wasmDir = `/work/interp/${name}`; @@ -921,12 +937,14 @@ verifyExpectedOutput( ].join("\n"), ); -const duplicateOwordDir = writeRemapRegressionFiles("duplicate-o-word", [ +const duplicateOwordFiles = [ "test.ini", "test.ngc", "rm207.ngc", "rm208.ngc", -]); +]; +const duplicateOwordDir = writeRemapRegressionFiles("duplicate-o-word", duplicateOwordFiles); +assertRemapRegressionStaging("duplicate-o-word", duplicateOwordFiles, duplicateOwordDir); verifyExpectedOutput( "duplicate_oword_remap_wasm", interp.runRemapFile( @@ -954,11 +972,13 @@ verifyExpectedOutput( ].join("\n"), ); -const failArgs0Dir = writeRemapRegressionFiles("fail/args.0", [ +const failArgs0Files = [ "test.ini", "test.ngc", "rm400.ngc", -]); +]; +const failArgs0Dir = writeRemapRegressionFiles("fail/args.0", failArgs0Files); +assertRemapRegressionStaging("fail/args.0", failArgs0Files, failArgs0Dir); verifyExpectedOutput( "fail_args_0_remap_wasm", interp.runRemapFile( @@ -981,11 +1001,13 @@ verifyExpectedOutput( ].join("\n"), ); -const failArgs1Dir = writeRemapRegressionFiles("fail/args.1", [ +const failArgs1Files = [ "test.ini", "test.ngc", "rm400.ngc", -]); +]; +const failArgs1Dir = writeRemapRegressionFiles("fail/args.1", failArgs1Files); +assertRemapRegressionStaging("fail/args.1", failArgs1Files, failArgs1Dir); verifyExpectedOutput( "fail_args_1_remap_wasm", interp.runRemapFileContinueOnError( @@ -1004,11 +1026,13 @@ verifyExpectedOutput( ].join("\n"), ); -const failArgs2Dir = writeRemapRegressionFiles("fail/args.2", [ +const failArgs2Files = [ "test.ini", "test.ngc", "rm400.ngc", -]); +]; +const failArgs2Dir = writeRemapRegressionFiles("fail/args.2", failArgs2Files); +assertRemapRegressionStaging("fail/args.2", failArgs2Files, failArgs2Dir); verifyExpectedOutput( "fail_args_2_remap_wasm", interp.runRemapFileContinueOnError( @@ -1027,11 +1051,13 @@ verifyExpectedOutput( ].join("\n"), ); -const failBodyNgcDir = writeRemapRegressionFiles("fail/body-ngc", [ +const failBodyNgcFiles = [ "test.ini", "test.ngc", "rm400.ngc", -]); +]; +const failBodyNgcDir = writeRemapRegressionFiles("fail/body-ngc", failBodyNgcFiles); +assertRemapRegressionStaging("fail/body-ngc", failBodyNgcFiles, failBodyNgcDir); verifyExpectedOutput( "fail_body_ngc_remap_wasm", interp.runRemapFileContinueOnError( @@ -1053,11 +1079,13 @@ verifyExpectedOutput( ].join("\n"), ); -const m30InteractionDir = writeRemapRegressionFiles("m30-interaction", [ +const m30InteractionFiles = [ "test.ini", "test.ngc", "rm400.ngc", -]); +]; +const m30InteractionDir = writeRemapRegressionFiles("m30-interaction", m30InteractionFiles); +assertRemapRegressionStaging("m30-interaction", m30InteractionFiles, m30InteractionDir); verifyExpectedOutput( "m30_interaction_remap_wasm", interp.runRemapFile(