diff --git a/text6.txt b/text6.txt index e3a691b..c824afb 100644 --- a/text6.txt +++ b/text6.txt @@ -1969,3 +1969,55 @@ wasm-port/tests/host/verify_host_smokes.sh `assertRemapRegressionStaging(...)` 拆成 coverage helper 与 per-file staging helper。 `nested-remaps-oword` 含 expected-unstaged 文件,应留到后续单独处理。继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。 + +四十五、2026-06-13 继续执行记录:initial remap per-file staging helper guard + +本批开始处理 remap 专用 staged path helper,并只选择没有 expected-unstaged 额外清单的 +短小 fixture: + +- `duplicate-o-word` +- `fail/args.0` +- `fail/args.1` + +完成内容: + +- Node 侧新增 `assertRemapRegressionCoverage(...)`,保留 vendored `.ini/.ngc` + manifest coverage 与 expected-unstaged overlap 检查; +- Node 侧新增 `assertRemapRegressionFilesStaging(...)`,逐个文件检查 + `/work/remap//` staged path; +- Node 侧保留原 `assertRemapRegressionStaging(...)` 给尚未拆分的 remap fixture 使用; +- Node 侧将上述 3 个 remap fixture 切换为 coverage helper 加 per-file staging helper; +- browser 侧新增同名 per-file staging helper,逐个文件检查 + `/work/browser-remap//` staged path; +- browser 侧同步替换上述 3 个 remap fixture; +- browser 侧仍不枚举目录; +- 仅整理 host/filesystem staging guard,不改变 remap、O-word、argument validation、 + expected-error 或 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 +``` + +结果:全部通过。 + +下一步建议: + +继续处理没有 expected-unstaged 额外清单的 remap fixture。优先候选: + +- `fail/args.2` +- `fail/body-ngc` +- `m30-interaction` + +这三组 file list 均为 `test.ini`、`test.ngc`、`rm400.ngc`,适合继续切换到 +`assertRemapRegressionCoverage(...)` 加 `assertRemapRegressionFilesStaging(...)`。 +仍暂缓 `nested-remaps-oword`,因为它含 expected-unstaged 文件,需要单独保留 +staged/unstaged overlap guard。继续避免 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 e9e9ac3..90f23e4 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4660,6 +4660,17 @@ } } + function assertRemapRegressionFilesStaging(name, files, wasmDir) { + if (files.length === 0 || new Set(files).size !== files.length) { + throw new Error(`browser_remap_${name}_fixture_coverage: list drift`); + } + for (const file of files) { + if (`${wasmDir}/${file}` !== `/work/browser-remap/${name}/${file}`) { + throw new Error(`browser_remap_${name}_${file}_staging_manifest: list drift`); + } + } + } + async function writeInterpRegressionFile(interp, name, filename) { const sourceDir = `../../vendor/linuxcnc/tests/interp/${name}`; const wasmDir = `/work/browser-interp/${name}`; @@ -6008,7 +6019,7 @@ "rm208.ngc", ]; const duplicateOwordDir = await writeRemapRegressionFiles(interp, "duplicate-o-word", duplicateOwordFiles); - assertRemapRegressionStaging("duplicate-o-word", duplicateOwordFiles, duplicateOwordDir); + assertRemapRegressionFilesStaging("duplicate-o-word", duplicateOwordFiles, duplicateOwordDir); verifyExpectedOutput( "browser_duplicate_oword_remap", interp.runRemapFile( @@ -6042,7 +6053,7 @@ "rm400.ngc", ]; const failArgs0Dir = await writeRemapRegressionFiles(interp, "fail/args.0", failArgs0Files); - assertRemapRegressionStaging("fail/args.0", failArgs0Files, failArgs0Dir); + assertRemapRegressionFilesStaging("fail/args.0", failArgs0Files, failArgs0Dir); verifyExpectedOutput( "browser_fail_args_0_remap", interp.runRemapFile( @@ -6071,7 +6082,7 @@ "rm400.ngc", ]; const failArgs1Dir = await writeRemapRegressionFiles(interp, "fail/args.1", failArgs1Files); - assertRemapRegressionStaging("fail/args.1", failArgs1Files, failArgs1Dir); + assertRemapRegressionFilesStaging("fail/args.1", failArgs1Files, failArgs1Dir); verifyExpectedOutput( "browser_fail_args_1_remap", interp.runRemapFileContinueOnError( diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 429dff5..e70e2e0 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -246,7 +246,7 @@ function writeRemapRegressionFiles(name, files) { return wasmDir; } -function assertRemapRegressionStaging(name, files, wasmDir, expectedUnstagedFiles = []) { +function assertRemapRegressionCoverage(name, files, expectedUnstagedFiles = []) { const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/remap", name); assert.deepEqual( readdirSync(sourceDir) @@ -260,6 +260,20 @@ function assertRemapRegressionStaging(name, files, wasmDir, expectedUnstagedFile [], `remap ${name} unstaged fixture overlap drift`, ); +} + +function assertRemapRegressionFilesStaging(name, files, wasmDir) { + for (const file of files) { + assert.equal( + `${wasmDir}/${file}`, + `/work/remap/${name}/${file}`, + `remap ${name}/${file} staging manifest drift`, + ); + } +} + +function assertRemapRegressionStaging(name, files, wasmDir, expectedUnstagedFiles = []) { + assertRemapRegressionCoverage(name, files, expectedUnstagedFiles); assert.deepEqual( files.map((file) => `${wasmDir}/${file}`), files.map((file) => `/work/remap/${name}/${file}`), @@ -1011,7 +1025,8 @@ const duplicateOwordFiles = [ "rm208.ngc", ]; const duplicateOwordDir = writeRemapRegressionFiles("duplicate-o-word", duplicateOwordFiles); -assertRemapRegressionStaging("duplicate-o-word", duplicateOwordFiles, duplicateOwordDir); +assertRemapRegressionCoverage("duplicate-o-word", duplicateOwordFiles); +assertRemapRegressionFilesStaging("duplicate-o-word", duplicateOwordFiles, duplicateOwordDir); verifyExpectedOutput( "duplicate_oword_remap_wasm", interp.runRemapFile( @@ -1045,7 +1060,8 @@ const failArgs0Files = [ "rm400.ngc", ]; const failArgs0Dir = writeRemapRegressionFiles("fail/args.0", failArgs0Files); -assertRemapRegressionStaging("fail/args.0", failArgs0Files, failArgs0Dir); +assertRemapRegressionCoverage("fail/args.0", failArgs0Files); +assertRemapRegressionFilesStaging("fail/args.0", failArgs0Files, failArgs0Dir); verifyExpectedOutput( "fail_args_0_remap_wasm", interp.runRemapFile( @@ -1074,7 +1090,8 @@ const failArgs1Files = [ "rm400.ngc", ]; const failArgs1Dir = writeRemapRegressionFiles("fail/args.1", failArgs1Files); -assertRemapRegressionStaging("fail/args.1", failArgs1Files, failArgs1Dir); +assertRemapRegressionCoverage("fail/args.1", failArgs1Files); +assertRemapRegressionFilesStaging("fail/args.1", failArgs1Files, failArgs1Dir); verifyExpectedOutput( "fail_args_1_remap_wasm", interp.runRemapFileContinueOnError(