diff --git a/text6.txt b/text6.txt index 4ea8087..87d54fc 100644 --- a/text6.txt +++ b/text6.txt @@ -1532,3 +1532,94 @@ wasm-port/tests/host/verify_host_smokes.sh 其中 `iniparam` 与 `iniparam-failassign` 可能有 INI/context staging 细节,下一批可先处理 `inside-corners` 和 `inverse-time-with-comp` 两个简单 direct-file case。继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。 + +三十六、2026-06-13 继续执行记录:ccomp edge direct-file staging guard + +本批按上一条建议处理两个简单 direct-file case: + +- `inside-corners/test.ngc` +- `inverse-time-with-comp/inverse.ngc` + +完成内容: + +- Node 侧保留两个 fixture 的 upstream `.ngc` manifest coverage check; +- Node 侧将 2 处内联 staged path 对账替换为 + `assertInterpRegressionFileStaging(...)`; +- browser 侧保留 fixed manifest duplicate-free guard; +- browser 侧将 2 处 `replace(...)` staged path 对账替换为 single-file helper; +- browser 侧仍不枚举目录; +- 仅整理 host/filesystem staging guard,不改变 cutter-comp、inside-corner 或 + inverse-time feed 语义。 + +已运行验证: + +```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 +``` + +结果:全部通过。 + +下一步建议: + +继续处理带 INI/context staging 的 direct-file guard。优先候选: + +- `iniparam/test.ngc` +- `iniparam-failassign/test.ngc` + +这两个已有 Node/browser coverage,但涉及 INI/context staging,建议单独小批量处理, +先核对当前 helper 和 staged path 结构,再替换内联 path 对账。继续避免 blocked +runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。 + +三十七、2026-06-13 继续执行记录:INI-context ngc staging guard + +本批继续处理带 INI/context staging 的 direct-file guard: + +- `iniparam/test.ngc` +- `iniparam-failassign/test.ngc` + +完成内容: + +- Node 侧新增 `assertInterpIniContextNgcStaging(...)`,直接检查 + `plan.files[*].wasmPath` 去掉 `/work/interp//` 前缀后与 fixed `.ngc` + manifest 一致; +- Node 侧将 `iniparam` 与 `iniparam-failassign` 的内联 `sourceRel` staged path + 对账替换为该 helper; +- browser 侧新增同名 INI-context `.ngc` staging helper,检查 + `/work/browser-interp//` staged path 前缀; +- browser 侧同步替换两个 fixture 的内联 `sourceRel` staged path 对账; +- browser 侧仍不枚举目录; +- 仅整理 host/filesystem staging guard,不改变 INI named parameter、read-only + assignment 或 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 +``` + +结果:全部通过。 + +下一步建议: + +继续收敛相邻 INI/context staging guard。优先候选: + +- `sub-call-from-sub/test.ngc` +- `sequence-number/test.ngc` +- `nested-sub-error/test.ngc` +- `nested-sub-in-file-error/test.ngc` + +这些已有 Node/browser coverage,并且当前仍存在类似 `plan.files -> sourceRel` 的内联 +staged path 对账,可继续复用 `assertInterpIniContextNgcStaging(...)` 小批量替换。 +继续避免 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 c892853..32fcd35 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4675,6 +4675,16 @@ } } + function assertInterpIniContextNgcStaging(name, files, plan) { + const stagedNgcFiles = plan.files + .filter((file) => file.sourceRel.endsWith(".ngc")) + .map((file) => file.wasmPath.replace(`/work/browser-interp/${name}/`, "")) + .sort(); + if (stagedNgcFiles.join(",") !== files.join(",")) { + throw new Error(`browser_interp_${name}_staging_manifest: list drift`); + } + } + async function writeInterpRegressionFiles(interp, name, files) { const sourceDir = `../../vendor/linuxcnc/tests/interp/${name}`; const wasmDir = `/work/browser-interp/${name}`; @@ -6713,12 +6723,7 @@ if (insideCornersNgcFiles.length !== 1 || new Set(insideCornersNgcFiles).size !== insideCornersNgcFiles.length) { throw new Error("browser_interp_inside_corners_fixture_coverage: list drift"); } - const insideCornersStagedNgcFiles = [ - insideCornersPath, - ].map((path) => path.replace("/work/browser-interp/inside-corners/", "")); - if (insideCornersStagedNgcFiles.join(",") !== insideCornersNgcFiles.join(",")) { - throw new Error("browser_interp_inside_corners_staging_manifest: list drift"); - } + assertInterpRegressionFileStaging("inside-corners", "test.ngc", insideCornersPath); verifyExpectedOutput( "browser_interp_inside_corners", interp.runFile(insideCornersPath), @@ -6752,12 +6757,11 @@ if (inverseTimeWithCompNgcFiles.length !== 1 || new Set(inverseTimeWithCompNgcFiles).size !== inverseTimeWithCompNgcFiles.length) { throw new Error("browser_interp_inverse_time_with_comp_fixture_coverage: list drift"); } - const inverseTimeWithCompStagedNgcFiles = [ + assertInterpRegressionFileStaging( + "inverse-time-with-comp", + "inverse.ngc", inverseTimeWithCompPath, - ].map((path) => path.replace("/work/browser-interp/inverse-time-with-comp/", "")); - if (inverseTimeWithCompStagedNgcFiles.join(",") !== inverseTimeWithCompNgcFiles.join(",")) { - throw new Error("browser_interp_inverse_time_with_comp_staging_manifest: list drift"); - } + ); verifyExpectedOutput( "browser_interp_inverse_time_with_comp", interp.runFile(inverseTimeWithCompPath), @@ -7413,14 +7417,7 @@ if (iniparamNgcFiles.length !== 1 || new Set(iniparamNgcFiles).size !== iniparamNgcFiles.length) { throw new Error("browser_interp_iniparam_fixture_coverage: list drift"); } - const iniparamStagedNgcFiles = iniparamPlan.files - .map((file) => file.sourceRel) - .filter((sourceRel) => sourceRel.endsWith(".ngc")) - .map((sourceRel) => sourceRel.replace("tests/interp/iniparam/", "")) - .sort(); - if (iniparamStagedNgcFiles.join(",") !== iniparamNgcFiles.join(",")) { - throw new Error("browser_interp_iniparam_staging_manifest: list drift"); - } + assertInterpIniContextNgcStaging("iniparam", iniparamNgcFiles, iniparamPlan); verifyExpectedOutput( "browser_interp_iniparam", interp.runFileWithIniContinueOnError( @@ -7453,14 +7450,11 @@ if (iniparamFailassignNgcFiles.length !== 1 || new Set(iniparamFailassignNgcFiles).size !== iniparamFailassignNgcFiles.length) { throw new Error("browser_interp_iniparam_failassign_fixture_coverage: list drift"); } - const iniparamFailassignStagedNgcFiles = iniparamFailassignPlan.files - .map((file) => file.sourceRel) - .filter((sourceRel) => sourceRel.endsWith(".ngc")) - .map((sourceRel) => sourceRel.replace("tests/interp/iniparam-failassign/", "")) - .sort(); - if (iniparamFailassignStagedNgcFiles.join(",") !== iniparamFailassignNgcFiles.join(",")) { - throw new Error("browser_interp_iniparam_failassign_staging_manifest: list drift"); - } + assertInterpIniContextNgcStaging( + "iniparam-failassign", + iniparamFailassignNgcFiles, + iniparamFailassignPlan, + ); verifyExpectedOutput( "browser_interp_iniparam_failassign", interp.runFileWithIni( diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index df28715..3d15ace 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -284,6 +284,17 @@ function assertInterpRegressionFileStaging(name, filename, wasmPath) { ); } +function assertInterpIniContextNgcStaging(name, files, plan) { + assert.deepEqual( + plan.files + .filter((file) => file.sourceRel.endsWith(".ngc")) + .map((file) => file.wasmPath.replace(`/work/interp/${name}/`, "")) + .sort(), + files, + `interp ${name} staging manifest drift`, + ); +} + function writeInterpRegressionFiles(name, files) { const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name); const wasmDir = `/work/interp/${name}`; @@ -1683,13 +1694,7 @@ assert.deepEqual( interpRegressionNgcFilesRecursive("inside-corners"), "interp inside-corners fixture coverage drift", ); -assert.deepEqual( - [ - insideCornersPath, - ], - insideCornersNgcFiles.map((file) => `/work/interp/inside-corners/${file}`), - "interp inside-corners staging manifest drift", -); +assertInterpRegressionFileStaging("inside-corners", "test.ngc", insideCornersPath); verifyExpectedOutput( "interp_inside_corners_wasm", interp.runFile(insideCornersPath), @@ -1724,13 +1729,7 @@ assert.deepEqual( interpRegressionNgcFilesRecursive("inverse-time-with-comp"), "interp inverse-time-with-comp fixture coverage drift", ); -assert.deepEqual( - [ - inverseTimeWithCompPath, - ], - inverseTimeWithCompNgcFiles.map((file) => `/work/interp/inverse-time-with-comp/${file}`), - "interp inverse-time-with-comp staging manifest drift", -); +assertInterpRegressionFileStaging("inverse-time-with-comp", "inverse.ngc", inverseTimeWithCompPath); verifyExpectedOutput( "interp_inverse_time_with_comp_wasm", interp.runFile(inverseTimeWithCompPath), @@ -2388,15 +2387,7 @@ assert.deepEqual( interpRegressionNgcFilesRecursive("iniparam"), "interp iniparam fixture coverage drift", ); -assert.deepEqual( - iniparamPlan.files - .map((file) => file.sourceRel) - .filter((sourceRel) => sourceRel.endsWith(".ngc")) - .map((sourceRel) => sourceRel.replace("tests/interp/iniparam/", "")) - .sort(), - iniparamNgcFiles, - "interp iniparam staging manifest drift", -); +assertInterpIniContextNgcStaging("iniparam", iniparamNgcFiles, iniparamPlan); verifyExpectedOutput( "interp_iniparam_wasm", interp.runFileWithIniContinueOnError( @@ -2428,14 +2419,10 @@ assert.deepEqual( interpRegressionNgcFilesRecursive("iniparam-failassign"), "interp iniparam-failassign fixture coverage drift", ); -assert.deepEqual( - iniparamFailassignPlan.files - .map((file) => file.sourceRel) - .filter((sourceRel) => sourceRel.endsWith(".ngc")) - .map((sourceRel) => sourceRel.replace("tests/interp/iniparam-failassign/", "")) - .sort(), +assertInterpIniContextNgcStaging( + "iniparam-failassign", iniparamFailassignNgcFiles, - "interp iniparam-failassign staging manifest drift", + iniparamFailassignPlan, ); verifyExpectedOutput( "interp_iniparam_failassign_wasm",