Guard remaining m98m99 direct-file staging

This commit is contained in:
2026-06-13 08:49:38 +08:00
parent fba2946a67
commit 410e109e61
3 changed files with 71 additions and 39 deletions

View File

@@ -1070,3 +1070,49 @@ wasm-port/tests/host/verify_host_smokes.sh
其中 `06-error-mixed-sub-styles` 有 4 个同目录文件,可单独作为一批继续处理。继续避免 其中 `06-error-mixed-sub-styles` 有 4 个同目录文件,可单独作为一批继续处理。继续避免
blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。 blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。
二十六、2026-06-13 继续执行记录m98m99 remaining direct-file staging guard
本批继续复用 `assertInterpRegressionFileStaging(...)`,收敛 m98m99 剩余短小
single-file direct-file guard
- `m98m99/04-M98-but-no-sub/test.ngc`
- `m98m99/05-M98-loops/test.ngc`
- `m98m99/07-nested-subs/test.ngc`
- `m98m99/08-sub-follows-main/test.ngc`
- `m98m99/10-M98-P001/test.ngc`
完成内容:
- Node 侧为上述 5 个 direct-file case 增加局部 staged path guard
- Node 侧将 `06-error-mixed-sub-styles` 的 aggregate slice 收缩为只覆盖该目录
4 个 mixed-sub-style 文件;
- Node 侧移除 `07/08` 和 `10` 的临近 aggregate slice guard
- browser 侧同步增加 5 个局部 staged path guard
- browser 侧同步收缩 mixed-sub-style slice并移除 `07/08` 和 `10` 的临近 slice
- browser 侧仍不枚举目录;
- 仅整理 host/filesystem staging guard不改变 M98 no-sub、loop、nested sub、
sub-follows-main 或 M98-P001 执行语义。
已运行验证:
```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
```
结果:全部通过。
下一步建议:
`m98m99` 剩余显性 aggregate slice 只剩 `06-error-mixed-sub-styles`。下一批可把这
4 个文件改成固定 manifest 加 per-directory guard或逐个使用 single-file helper
完成后 m98m99 direct-file staging guard 基本收束。之后建议转向其他
`writeInterpRegressionFile(...)` families例如 `bad`、`good`、`g71/g72` 或
`rotation` 的 aggregate direct-file guard。继续避免 blocked runtime promotion、
browser full inventory 扩面和 JS CNC 语义实现。

View File

@@ -7939,6 +7939,11 @@
"m98m99/04-M98-but-no-sub", "m98m99/04-M98-but-no-sub",
"test.ngc", "test.ngc",
); );
assertInterpRegressionFileStaging(
"m98m99/04-M98-but-no-sub",
"test.ngc",
m98m99M98ButNoSubPath,
);
verifyExpectedOutput( verifyExpectedOutput(
"browser_interp_m98m99_04_m98_but_no_sub", "browser_interp_m98m99_04_m98_but_no_sub",
interp.runFile(m98m99M98ButNoSubPath), interp.runFile(m98m99M98ButNoSubPath),
@@ -7960,6 +7965,7 @@
"m98m99/05-M98-loops", "m98m99/05-M98-loops",
"test.ngc", "test.ngc",
); );
assertInterpRegressionFileStaging("m98m99/05-M98-loops", "test.ngc", m98m99M98LoopsPath);
const m98m99M98LoopsRun = runWithCapturedPrints(() => const m98m99M98LoopsRun = runWithCapturedPrints(() =>
interp.runFile(m98m99M98LoopsPath), interp.runFile(m98m99M98LoopsPath),
); );
@@ -8064,11 +8070,9 @@
} }
} }
const m98m99MixedStagedNgcFiles = [ const m98m99MixedStagedNgcFiles = [
m98m99M98ButNoSubPath,
m98m99M98LoopsPath,
...m98m99MixedSubStylePaths, ...m98m99MixedSubStylePaths,
].map((path) => path.replace("/work/browser-interp/m98m99/", "")); ].map((path) => path.replace("/work/browser-interp/m98m99/", ""));
if (m98m99MixedStagedNgcFiles.join(",") !== m98m99RegressionFiles.slice(3, 9).join(",")) { if (m98m99MixedStagedNgcFiles.join(",") !== m98m99RegressionFiles.slice(5, 9).join(",")) {
throw new Error("browser_interp_m98m99_mixed_staging_manifest: list drift"); throw new Error("browser_interp_m98m99_mixed_staging_manifest: list drift");
} }
@@ -8077,6 +8081,7 @@
"m98m99/07-nested-subs", "m98m99/07-nested-subs",
"test.ngc", "test.ngc",
); );
assertInterpRegressionFileStaging("m98m99/07-nested-subs", "test.ngc", m98m99NestedSubsPath);
const m98m99NestedSubsRun = runWithCapturedPrints(() => const m98m99NestedSubsRun = runWithCapturedPrints(() =>
interp.runFile(m98m99NestedSubsPath), interp.runFile(m98m99NestedSubsPath),
); );
@@ -8106,6 +8111,11 @@
"m98m99/08-sub-follows-main", "m98m99/08-sub-follows-main",
"test.ngc", "test.ngc",
); );
assertInterpRegressionFileStaging(
"m98m99/08-sub-follows-main",
"test.ngc",
m98m99SubFollowsMainPath,
);
const m98m99SubFollowsMainRun = runWithCapturedPrints(() => const m98m99SubFollowsMainRun = runWithCapturedPrints(() =>
interp.runFile(m98m99SubFollowsMainPath), interp.runFile(m98m99SubFollowsMainPath),
); );
@@ -8143,13 +8153,6 @@
m98m99DisableFanucSubsFiles, m98m99DisableFanucSubsFiles,
m98m99DisableFanucSubsDir, m98m99DisableFanucSubsDir,
); );
const m98m99NestedStagedNgcFiles = [
m98m99NestedSubsPath,
m98m99SubFollowsMainPath,
].map((path) => path.replace("/work/browser-interp/m98m99/", ""));
if (m98m99NestedStagedNgcFiles.join(",") !== m98m99RegressionFiles.slice(9, 11).join(",")) {
throw new Error("browser_interp_m98m99_nested_staging_manifest: list drift");
}
for (const disableFanucCase of [ for (const disableFanucCase of [
{ {
name: "fanuc_ini", name: "fanuc_ini",
@@ -8236,6 +8239,7 @@
"m98m99/10-M98-P001", "m98m99/10-M98-P001",
"test.ngc", "test.ngc",
); );
assertInterpRegressionFileStaging("m98m99/10-M98-P001", "test.ngc", m98m99M98P001Path);
const m98m99M98P001Run = runWithCapturedPrints(() => const m98m99M98P001Run = runWithCapturedPrints(() =>
interp.runFile(m98m99M98P001Path), interp.runFile(m98m99M98P001Path),
); );
@@ -8279,12 +8283,6 @@
m98m99MainProgramOwordFiles, m98m99MainProgramOwordFiles,
m98m99MainProgramOwordDir, 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 [ for (const mainProgramFixture of [
{ {
name: "legal_m2", name: "legal_m2",

View File

@@ -2934,6 +2934,7 @@ const m98m99M98ButNoSubPath = writeInterpRegressionFile(
"m98m99/04-M98-but-no-sub", "m98m99/04-M98-but-no-sub",
"test.ngc", "test.ngc",
); );
assertInterpRegressionFileStaging("m98m99/04-M98-but-no-sub", "test.ngc", m98m99M98ButNoSubPath);
verifyExpectedOutput( verifyExpectedOutput(
"interp_m98m99_04_m98_but_no_sub_wasm", "interp_m98m99_04_m98_but_no_sub_wasm",
interp.runFile(m98m99M98ButNoSubPath), interp.runFile(m98m99M98ButNoSubPath),
@@ -2951,6 +2952,7 @@ verifyExpectedOutput(
); );
const m98m99M98LoopsPath = writeInterpRegressionFile("m98m99/05-M98-loops", "test.ngc"); const m98m99M98LoopsPath = writeInterpRegressionFile("m98m99/05-M98-loops", "test.ngc");
assertInterpRegressionFileStaging("m98m99/05-M98-loops", "test.ngc", m98m99M98LoopsPath);
const m98m99M98LoopsRun = runWithCapturedPrints(() => interp.runFile(m98m99M98LoopsPath)); const m98m99M98LoopsRun = runWithCapturedPrints(() => interp.runFile(m98m99M98LoopsPath));
verifyExpectedOutput( verifyExpectedOutput(
"interp_m98m99_05_m98_loops_wasm", "interp_m98m99_05_m98_loops_wasm",
@@ -3050,18 +3052,15 @@ for (const mixedSubStyleFixture of [
} }
} }
assert.deepEqual( assert.deepEqual(
[ m98m99MixedSubStylePaths,
m98m99M98ButNoSubPath,
m98m99M98LoopsPath,
...m98m99MixedSubStylePaths,
],
m98m99RegressionFiles m98m99RegressionFiles
.slice(3, 9) .slice(5, 9)
.map((file) => `/work/interp/m98m99/${file}`), .map((file) => `/work/interp/m98m99/${file}`),
"interp m98m99 mixed direct-file staging manifest drift", "interp m98m99 mixed direct-file staging manifest drift",
); );
const m98m99NestedSubsPath = writeInterpRegressionFile("m98m99/07-nested-subs", "test.ngc"); const m98m99NestedSubsPath = writeInterpRegressionFile("m98m99/07-nested-subs", "test.ngc");
assertInterpRegressionFileStaging("m98m99/07-nested-subs", "test.ngc", m98m99NestedSubsPath);
const m98m99NestedSubsRun = runWithCapturedPrints(() => interp.runFile(m98m99NestedSubsPath)); const m98m99NestedSubsRun = runWithCapturedPrints(() => interp.runFile(m98m99NestedSubsPath));
verifyExpectedOutput( verifyExpectedOutput(
"interp_m98m99_07_nested_subs_wasm", "interp_m98m99_07_nested_subs_wasm",
@@ -3088,6 +3087,11 @@ const m98m99SubFollowsMainPath = writeInterpRegressionFile(
"m98m99/08-sub-follows-main", "m98m99/08-sub-follows-main",
"test.ngc", "test.ngc",
); );
assertInterpRegressionFileStaging(
"m98m99/08-sub-follows-main",
"test.ngc",
m98m99SubFollowsMainPath,
);
const m98m99SubFollowsMainRun = runWithCapturedPrints(() => const m98m99SubFollowsMainRun = runWithCapturedPrints(() =>
interp.runFile(m98m99SubFollowsMainPath), interp.runFile(m98m99SubFollowsMainPath),
); );
@@ -3124,16 +3128,6 @@ assertInterpRegressionStaging(
m98m99DisableFanucSubsFiles, m98m99DisableFanucSubsFiles,
m98m99DisableFanucSubsDir, m98m99DisableFanucSubsDir,
); );
assert.deepEqual(
[
m98m99NestedSubsPath,
m98m99SubFollowsMainPath,
],
m98m99RegressionFiles
.slice(9, 11)
.map((file) => `/work/interp/m98m99/${file}`),
"interp m98m99 nested direct-file staging manifest drift",
);
for (const disableFanucCase of [ for (const disableFanucCase of [
{ {
name: "fanuc_ini", name: "fanuc_ini",
@@ -3216,6 +3210,7 @@ verifyExpectedOutput(
); );
const m98m99M98P001Path = writeInterpRegressionFile("m98m99/10-M98-P001", "test.ngc"); const m98m99M98P001Path = writeInterpRegressionFile("m98m99/10-M98-P001", "test.ngc");
assertInterpRegressionFileStaging("m98m99/10-M98-P001", "test.ngc", m98m99M98P001Path);
const m98m99M98P001Run = runWithCapturedPrints(() => interp.runFile(m98m99M98P001Path)); const m98m99M98P001Run = runWithCapturedPrints(() => interp.runFile(m98m99M98P001Path));
verifyExpectedOutput( verifyExpectedOutput(
"interp_m98m99_10_m98_p001_wasm", "interp_m98m99_10_m98_p001_wasm",
@@ -3256,13 +3251,6 @@ assertInterpRegressionStaging(
m98m99MainProgramOwordFiles, m98m99MainProgramOwordFiles,
m98m99MainProgramOwordDir, m98m99MainProgramOwordDir,
); );
assert.deepEqual(
[m98m99M98P001Path],
m98m99RegressionFiles
.slice(13, 14)
.map((file) => `/work/interp/m98m99/${file}`),
"interp m98m99 m98-p001 direct-file staging manifest drift",
);
for (const mainProgramFixture of [ for (const mainProgramFixture of [
{ {
name: "legal_m2", name: "legal_m2",