Guard ccomp and INI context staging paths
This commit is contained in:
91
text6.txt
91
text6.txt
@@ -1532,3 +1532,94 @@ wasm-port/tests/host/verify_host_smokes.sh
|
|||||||
其中 `iniparam` 与 `iniparam-failassign` 可能有 INI/context staging 细节,下一批可先处理
|
其中 `iniparam` 与 `iniparam-failassign` 可能有 INI/context staging 细节,下一批可先处理
|
||||||
`inside-corners` 和 `inverse-time-with-comp` 两个简单 direct-file case。继续避免 blocked
|
`inside-corners` 和 `inverse-time-with-comp` 两个简单 direct-file case。继续避免 blocked
|
||||||
runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。
|
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/<name>/` 前缀后与 fixed `.ngc`
|
||||||
|
manifest 一致;
|
||||||
|
- Node 侧将 `iniparam` 与 `iniparam-failassign` 的内联 `sourceRel` staged path
|
||||||
|
对账替换为该 helper;
|
||||||
|
- browser 侧新增同名 INI-context `.ngc` staging helper,检查
|
||||||
|
`/work/browser-interp/<name>/` 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 语义实现。
|
||||||
|
|||||||
@@ -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) {
|
async function writeInterpRegressionFiles(interp, name, files) {
|
||||||
const sourceDir = `../../vendor/linuxcnc/tests/interp/${name}`;
|
const sourceDir = `../../vendor/linuxcnc/tests/interp/${name}`;
|
||||||
const wasmDir = `/work/browser-interp/${name}`;
|
const wasmDir = `/work/browser-interp/${name}`;
|
||||||
@@ -6713,12 +6723,7 @@
|
|||||||
if (insideCornersNgcFiles.length !== 1 || new Set(insideCornersNgcFiles).size !== insideCornersNgcFiles.length) {
|
if (insideCornersNgcFiles.length !== 1 || new Set(insideCornersNgcFiles).size !== insideCornersNgcFiles.length) {
|
||||||
throw new Error("browser_interp_inside_corners_fixture_coverage: list drift");
|
throw new Error("browser_interp_inside_corners_fixture_coverage: list drift");
|
||||||
}
|
}
|
||||||
const insideCornersStagedNgcFiles = [
|
assertInterpRegressionFileStaging("inside-corners", "test.ngc", insideCornersPath);
|
||||||
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");
|
|
||||||
}
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_inside_corners",
|
"browser_interp_inside_corners",
|
||||||
interp.runFile(insideCornersPath),
|
interp.runFile(insideCornersPath),
|
||||||
@@ -6752,12 +6757,11 @@
|
|||||||
if (inverseTimeWithCompNgcFiles.length !== 1 || new Set(inverseTimeWithCompNgcFiles).size !== inverseTimeWithCompNgcFiles.length) {
|
if (inverseTimeWithCompNgcFiles.length !== 1 || new Set(inverseTimeWithCompNgcFiles).size !== inverseTimeWithCompNgcFiles.length) {
|
||||||
throw new Error("browser_interp_inverse_time_with_comp_fixture_coverage: list drift");
|
throw new Error("browser_interp_inverse_time_with_comp_fixture_coverage: list drift");
|
||||||
}
|
}
|
||||||
const inverseTimeWithCompStagedNgcFiles = [
|
assertInterpRegressionFileStaging(
|
||||||
|
"inverse-time-with-comp",
|
||||||
|
"inverse.ngc",
|
||||||
inverseTimeWithCompPath,
|
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(
|
verifyExpectedOutput(
|
||||||
"browser_interp_inverse_time_with_comp",
|
"browser_interp_inverse_time_with_comp",
|
||||||
interp.runFile(inverseTimeWithCompPath),
|
interp.runFile(inverseTimeWithCompPath),
|
||||||
@@ -7413,14 +7417,7 @@
|
|||||||
if (iniparamNgcFiles.length !== 1 || new Set(iniparamNgcFiles).size !== iniparamNgcFiles.length) {
|
if (iniparamNgcFiles.length !== 1 || new Set(iniparamNgcFiles).size !== iniparamNgcFiles.length) {
|
||||||
throw new Error("browser_interp_iniparam_fixture_coverage: list drift");
|
throw new Error("browser_interp_iniparam_fixture_coverage: list drift");
|
||||||
}
|
}
|
||||||
const iniparamStagedNgcFiles = iniparamPlan.files
|
assertInterpIniContextNgcStaging("iniparam", iniparamNgcFiles, iniparamPlan);
|
||||||
.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");
|
|
||||||
}
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_iniparam",
|
"browser_interp_iniparam",
|
||||||
interp.runFileWithIniContinueOnError(
|
interp.runFileWithIniContinueOnError(
|
||||||
@@ -7453,14 +7450,11 @@
|
|||||||
if (iniparamFailassignNgcFiles.length !== 1 || new Set(iniparamFailassignNgcFiles).size !== iniparamFailassignNgcFiles.length) {
|
if (iniparamFailassignNgcFiles.length !== 1 || new Set(iniparamFailassignNgcFiles).size !== iniparamFailassignNgcFiles.length) {
|
||||||
throw new Error("browser_interp_iniparam_failassign_fixture_coverage: list drift");
|
throw new Error("browser_interp_iniparam_failassign_fixture_coverage: list drift");
|
||||||
}
|
}
|
||||||
const iniparamFailassignStagedNgcFiles = iniparamFailassignPlan.files
|
assertInterpIniContextNgcStaging(
|
||||||
.map((file) => file.sourceRel)
|
"iniparam-failassign",
|
||||||
.filter((sourceRel) => sourceRel.endsWith(".ngc"))
|
iniparamFailassignNgcFiles,
|
||||||
.map((sourceRel) => sourceRel.replace("tests/interp/iniparam-failassign/", ""))
|
iniparamFailassignPlan,
|
||||||
.sort();
|
);
|
||||||
if (iniparamFailassignStagedNgcFiles.join(",") !== iniparamFailassignNgcFiles.join(",")) {
|
|
||||||
throw new Error("browser_interp_iniparam_failassign_staging_manifest: list drift");
|
|
||||||
}
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_iniparam_failassign",
|
"browser_interp_iniparam_failassign",
|
||||||
interp.runFileWithIni(
|
interp.runFileWithIni(
|
||||||
|
|||||||
@@ -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) {
|
function writeInterpRegressionFiles(name, files) {
|
||||||
const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name);
|
const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name);
|
||||||
const wasmDir = `/work/interp/${name}`;
|
const wasmDir = `/work/interp/${name}`;
|
||||||
@@ -1683,13 +1694,7 @@ assert.deepEqual(
|
|||||||
interpRegressionNgcFilesRecursive("inside-corners"),
|
interpRegressionNgcFilesRecursive("inside-corners"),
|
||||||
"interp inside-corners fixture coverage drift",
|
"interp inside-corners fixture coverage drift",
|
||||||
);
|
);
|
||||||
assert.deepEqual(
|
assertInterpRegressionFileStaging("inside-corners", "test.ngc", insideCornersPath);
|
||||||
[
|
|
||||||
insideCornersPath,
|
|
||||||
],
|
|
||||||
insideCornersNgcFiles.map((file) => `/work/interp/inside-corners/${file}`),
|
|
||||||
"interp inside-corners staging manifest drift",
|
|
||||||
);
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_inside_corners_wasm",
|
"interp_inside_corners_wasm",
|
||||||
interp.runFile(insideCornersPath),
|
interp.runFile(insideCornersPath),
|
||||||
@@ -1724,13 +1729,7 @@ assert.deepEqual(
|
|||||||
interpRegressionNgcFilesRecursive("inverse-time-with-comp"),
|
interpRegressionNgcFilesRecursive("inverse-time-with-comp"),
|
||||||
"interp inverse-time-with-comp fixture coverage drift",
|
"interp inverse-time-with-comp fixture coverage drift",
|
||||||
);
|
);
|
||||||
assert.deepEqual(
|
assertInterpRegressionFileStaging("inverse-time-with-comp", "inverse.ngc", inverseTimeWithCompPath);
|
||||||
[
|
|
||||||
inverseTimeWithCompPath,
|
|
||||||
],
|
|
||||||
inverseTimeWithCompNgcFiles.map((file) => `/work/interp/inverse-time-with-comp/${file}`),
|
|
||||||
"interp inverse-time-with-comp staging manifest drift",
|
|
||||||
);
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_inverse_time_with_comp_wasm",
|
"interp_inverse_time_with_comp_wasm",
|
||||||
interp.runFile(inverseTimeWithCompPath),
|
interp.runFile(inverseTimeWithCompPath),
|
||||||
@@ -2388,15 +2387,7 @@ assert.deepEqual(
|
|||||||
interpRegressionNgcFilesRecursive("iniparam"),
|
interpRegressionNgcFilesRecursive("iniparam"),
|
||||||
"interp iniparam fixture coverage drift",
|
"interp iniparam fixture coverage drift",
|
||||||
);
|
);
|
||||||
assert.deepEqual(
|
assertInterpIniContextNgcStaging("iniparam", iniparamNgcFiles, iniparamPlan);
|
||||||
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",
|
|
||||||
);
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_iniparam_wasm",
|
"interp_iniparam_wasm",
|
||||||
interp.runFileWithIniContinueOnError(
|
interp.runFileWithIniContinueOnError(
|
||||||
@@ -2428,14 +2419,10 @@ assert.deepEqual(
|
|||||||
interpRegressionNgcFilesRecursive("iniparam-failassign"),
|
interpRegressionNgcFilesRecursive("iniparam-failassign"),
|
||||||
"interp iniparam-failassign fixture coverage drift",
|
"interp iniparam-failassign fixture coverage drift",
|
||||||
);
|
);
|
||||||
assert.deepEqual(
|
assertInterpIniContextNgcStaging(
|
||||||
iniparamFailassignPlan.files
|
"iniparam-failassign",
|
||||||
.map((file) => file.sourceRel)
|
|
||||||
.filter((sourceRel) => sourceRel.endsWith(".ngc"))
|
|
||||||
.map((sourceRel) => sourceRel.replace("tests/interp/iniparam-failassign/", ""))
|
|
||||||
.sort(),
|
|
||||||
iniparamFailassignNgcFiles,
|
iniparamFailassignNgcFiles,
|
||||||
"interp iniparam-failassign staging manifest drift",
|
iniparamFailassignPlan,
|
||||||
);
|
);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_iniparam_failassign_wasm",
|
"interp_iniparam_failassign_wasm",
|
||||||
|
|||||||
Reference in New Issue
Block a user