From 2bb0cf99045bac1e57e347b2f277241942192333 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sat, 13 Jun 2026 08:39:03 +0800 Subject: [PATCH] Guard m98m99 interp directory staging --- text6.txt | 45 +++++++++++++++++++ wasm-port/tests/browser/interp_smoke.html | 24 ++++++---- .../tests/wasm/node/verify_interp_wasm.mjs | 26 ++++++----- 3 files changed, 75 insertions(+), 20 deletions(-) diff --git a/text6.txt b/text6.txt index 3816376..65cbce3 100644 --- a/text6.txt +++ b/text6.txt @@ -932,3 +932,48 @@ wasm-port/tests/host/verify_host_smokes.sh 这两个已有固定 file list 和 Node/browser coverage,适合把现有 m98m99 aggregate slice guard 拆出更直接的 per-directory staged path guard。仍不推进 blocked runtime promotion、browser full inventory 扩面或 JS CNC 语义实现。 + +二十三、2026-06-13 继续执行记录:m98m99 interp directory staging guard + +本批继续复用 `assertInterpRegressionStaging(...)`,把两个已有 m98m99 目录从 +aggregate slice guard 拆成更直接的 per-directory staged path guard: + +- `m98m99/09-disable-fanuc-subs` +- `m98m99/11-main-program-oword` + +完成内容: + +- Node 侧对 `09-disable-fanuc-subs` 的 `.ini/.ngc` fixed manifest 与 vendored + 文件清单精确对账; +- Node 侧对 `11-main-program-oword` 的 `.ngc` fixed manifest 与 vendored 文件清单 + 精确对账; +- Node 侧保留相邻 direct-file smoke 的 slice guard,但不再让该 slice 夹带目录 + file-list 对账; +- browser 侧复用同名 helper 检查 fixed manifest duplicate-free; +- browser 侧检查 staged path 去掉 `/work/browser-interp//` 前缀后与 fixed + manifest 一致; +- browser 侧仍不枚举目录; +- 仅整理 host/filesystem staging guard,不改变 Fanuc sub、main-program oword 或 + interpreter 语义。 + +已运行验证: + +```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 +``` + +结果:全部通过。 + +下一步建议: + +继续扫描 `writeInterpRegressionFiles(...)` 与 m98m99 剩余 direct-file aggregate guard。 +优先候选是把 `m98m99/13-named-program` 的 fixed file list 提成 per-directory guard, +同时保留 `m98m99/14-o-expression-call` direct-file slice guard;如继续小批量, +也可处理 `m98m99/09`、`11` 后续文档索引。继续避免 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 df789c4..e685b47 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -8133,14 +8133,16 @@ "m98m99/09-disable-fanuc-subs", m98m99DisableFanucSubsFiles, ); + assertInterpRegressionStaging( + "m98m99/09-disable-fanuc-subs", + m98m99DisableFanucSubsFiles, + m98m99DisableFanucSubsDir, + ); const m98m99NestedStagedNgcFiles = [ m98m99NestedSubsPath, m98m99SubFollowsMainPath, - ...m98m99DisableFanucSubsFiles - .filter((file) => file.endsWith(".ngc")) - .map((file) => `${m98m99DisableFanucSubsDir}/${file}`), ].map((path) => path.replace("/work/browser-interp/m98m99/", "")); - if (m98m99NestedStagedNgcFiles.join(",") !== m98m99RegressionFiles.slice(9, 13).join(",")) { + if (m98m99NestedStagedNgcFiles.join(",") !== m98m99RegressionFiles.slice(9, 11).join(",")) { throw new Error("browser_interp_m98m99_nested_staging_manifest: list drift"); } for (const disableFanucCase of [ @@ -8267,11 +8269,15 @@ "m98m99/11-main-program-oword", m98m99MainProgramOwordFiles, ); - const m98m99MainProgramStagedNgcFiles = [ - m98m99M98P001Path, - ...m98m99MainProgramOwordFiles.map((file) => `${m98m99MainProgramOwordDir}/${file}`), - ].map((path) => path.replace("/work/browser-interp/m98m99/", "")); - if (m98m99MainProgramStagedNgcFiles.join(",") !== m98m99RegressionFiles.slice(13, 21).join(",")) { + assertInterpRegressionStaging( + "m98m99/11-main-program-oword", + m98m99MainProgramOwordFiles, + m98m99MainProgramOwordDir, + ); + const m98m99M98P001StagedNgcFiles = [m98m99M98P001Path].map((path) => + path.replace("/work/browser-interp/m98m99/", ""), + ); + if (m98m99M98P001StagedNgcFiles.join(",") !== m98m99RegressionFiles.slice(13, 14).join(",")) { throw new Error("browser_interp_m98m99_main_program_staging_manifest: list drift"); } for (const mainProgramFixture of [ diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 8238ea6..76f7623 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -3115,18 +3115,20 @@ const m98m99DisableFanucSubsDir = writeInterpRegressionFiles( "m98m99/09-disable-fanuc-subs", m98m99DisableFanucSubsFiles, ); +assertInterpRegressionStaging( + "m98m99/09-disable-fanuc-subs", + m98m99DisableFanucSubsFiles, + m98m99DisableFanucSubsDir, +); assert.deepEqual( [ m98m99NestedSubsPath, m98m99SubFollowsMainPath, - ...m98m99DisableFanucSubsFiles - .filter((file) => file.endsWith(".ngc")) - .map((file) => `${m98m99DisableFanucSubsDir}/${file}`), ], m98m99RegressionFiles - .slice(9, 13) + .slice(9, 11) .map((file) => `/work/interp/m98m99/${file}`), - "interp m98m99 nested/disable-fanuc staging manifest drift", + "interp m98m99 nested direct-file staging manifest drift", ); for (const disableFanucCase of [ { @@ -3245,15 +3247,17 @@ const m98m99MainProgramOwordDir = writeInterpRegressionFiles( "m98m99/11-main-program-oword", m98m99MainProgramOwordFiles, ); +assertInterpRegressionStaging( + "m98m99/11-main-program-oword", + m98m99MainProgramOwordFiles, + m98m99MainProgramOwordDir, +); assert.deepEqual( - [ - m98m99M98P001Path, - ...m98m99MainProgramOwordFiles.map((file) => `${m98m99MainProgramOwordDir}/${file}`), - ], + [m98m99M98P001Path], m98m99RegressionFiles - .slice(13, 21) + .slice(13, 14) .map((file) => `/work/interp/m98m99/${file}`), - "interp m98m99 main-program staging manifest drift", + "interp m98m99 m98-p001 direct-file staging manifest drift", ); for (const mainProgramFixture of [ {