Guard interp regression staging helper
This commit is contained in:
45
text6.txt
45
text6.txt
@@ -887,3 +887,48 @@ remap file-list guard 的当前显性剩余项已基本收束。下一批建议
|
|||||||
fixture;若没有合适小批次,转向补齐 staging guard 的文档索引或生成一个
|
fixture;若没有合适小批次,转向补齐 staging guard 的文档索引或生成一个
|
||||||
machine-readable fixture coverage manifest。继续避免 blocked runtime promotion、
|
machine-readable fixture coverage manifest。继续避免 blocked runtime promotion、
|
||||||
browser full inventory 扩面和 JS CNC 语义实现。
|
browser full inventory 扩面和 JS CNC 语义实现。
|
||||||
|
|
||||||
|
二十二、2026-06-13 继续执行记录:interp fixture staging helper guard
|
||||||
|
|
||||||
|
本批回到 `writeInterpRegressionFiles(...)` helper,先整理已有 Node/browser coverage
|
||||||
|
里的两个固定 `.ngc/.tbl` fixture:
|
||||||
|
|
||||||
|
- `interp/cam-nisley`
|
||||||
|
- `interp/g76`
|
||||||
|
|
||||||
|
完成内容:
|
||||||
|
|
||||||
|
- Node 侧新增 `assertInterpRegressionStaging(...)`;
|
||||||
|
- Node 侧对 upstream vendored `.ini/.ngc/.tbl` 文件清单与 fixed manifest 精确对账;
|
||||||
|
- Node 侧检查 staged path 与 `/work/interp/<name>/...` fixed manifest 一致;
|
||||||
|
- browser 侧新增同名 `assertInterpRegressionStaging(...)`;
|
||||||
|
- browser 侧检查 fixed manifest duplicate-free,并检查 staged path 去掉
|
||||||
|
`/work/browser-interp/<name>/` 前缀后与 fixed manifest 一致;
|
||||||
|
- `cam-nisley` 与 `g76` 改用该 helper,去掉内联重复 guard;
|
||||||
|
- 仅整理 host/filesystem staging guard,不改变 G-code、tool table 或 threading 语义。
|
||||||
|
|
||||||
|
已运行验证:
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
结果:全部通过。
|
||||||
|
|
||||||
|
下一步建议:
|
||||||
|
|
||||||
|
继续复用 `assertInterpRegressionStaging(...)` 处理已有 `writeInterpRegressionFiles(...)`
|
||||||
|
调用里的小批次。优先候选:
|
||||||
|
|
||||||
|
- `m98m99/09-disable-fanuc-subs`
|
||||||
|
- `m98m99/11-main-program-oword`
|
||||||
|
|
||||||
|
这两个已有固定 file list 和 Node/browser coverage,适合把现有 m98m99 aggregate
|
||||||
|
slice guard 拆出更直接的 per-directory staged path guard。仍不推进 blocked runtime
|
||||||
|
promotion、browser full inventory 扩面或 JS CNC 语义实现。
|
||||||
|
|||||||
@@ -4680,6 +4680,16 @@
|
|||||||
return wasmDir;
|
return wasmDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function assertInterpRegressionStaging(name, files, wasmDir) {
|
||||||
|
if (files.length === 0 || new Set(files).size !== files.length) {
|
||||||
|
throw new Error(`browser_interp_${name}_fixture_coverage: list drift`);
|
||||||
|
}
|
||||||
|
const interpStagedRelativeFiles = files.map((file) => `${wasmDir}/${file}`.replace(`/work/browser-interp/${name}/`, ""));
|
||||||
|
if (interpStagedRelativeFiles.join(",") !== files.join(",")) {
|
||||||
|
throw new Error(`browser_interp_${name}_staging_manifest: list drift`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function writeCcompRegressionFiles(interp, name) {
|
async function writeCcompRegressionFiles(interp, name) {
|
||||||
const sourceDir = `../../vendor/linuxcnc/tests/ccomp/${name}`;
|
const sourceDir = `../../vendor/linuxcnc/tests/ccomp/${name}`;
|
||||||
const wasmDir = `/work/browser-ccomp/${name}`;
|
const wasmDir = `/work/browser-ccomp/${name}`;
|
||||||
@@ -6600,14 +6610,8 @@
|
|||||||
"cam.ngc",
|
"cam.ngc",
|
||||||
"test.tbl",
|
"test.tbl",
|
||||||
];
|
];
|
||||||
if (camNisleyFiles.length !== 2 || new Set(camNisleyFiles).size !== camNisleyFiles.length) {
|
|
||||||
throw new Error("browser_interp_cam_nisley_fixture_coverage: list drift");
|
|
||||||
}
|
|
||||||
const camNisleyDir = await writeInterpRegressionFiles(interp, "cam-nisley", camNisleyFiles);
|
const camNisleyDir = await writeInterpRegressionFiles(interp, "cam-nisley", camNisleyFiles);
|
||||||
const camNisleyStagedRelativeFiles = camNisleyFiles.map((file) => `${camNisleyDir}/${file}`.replace("/work/browser-interp/cam-nisley/", ""));
|
assertInterpRegressionStaging("cam-nisley", camNisleyFiles, camNisleyDir);
|
||||||
if (camNisleyStagedRelativeFiles.join(",") !== camNisleyFiles.join(",")) {
|
|
||||||
throw new Error("browser_interp_cam_nisley_staging_manifest: list drift");
|
|
||||||
}
|
|
||||||
interp.writeTextFile(
|
interp.writeTextFile(
|
||||||
`${camNisleyDir}/test.ini`,
|
`${camNisleyDir}/test.ini`,
|
||||||
[
|
[
|
||||||
@@ -7345,14 +7349,8 @@
|
|||||||
"g76only.ngc",
|
"g76only.ngc",
|
||||||
"test.tbl",
|
"test.tbl",
|
||||||
];
|
];
|
||||||
if (g76Files.length !== 2 || new Set(g76Files).size !== g76Files.length) {
|
|
||||||
throw new Error("browser_interp_g76_fixture_coverage: list drift");
|
|
||||||
}
|
|
||||||
const g76Dir = await writeInterpRegressionFiles(interp, "g76", g76Files);
|
const g76Dir = await writeInterpRegressionFiles(interp, "g76", g76Files);
|
||||||
const g76StagedRelativeFiles = g76Files.map((file) => `${g76Dir}/${file}`.replace("/work/browser-interp/g76/", ""));
|
assertInterpRegressionStaging("g76", g76Files, g76Dir);
|
||||||
if (g76StagedRelativeFiles.join(",") !== g76Files.join(",")) {
|
|
||||||
throw new Error("browser_interp_g76_staging_manifest: list drift");
|
|
||||||
}
|
|
||||||
interp.writeTextFile(
|
interp.writeTextFile(
|
||||||
`${g76Dir}/test.ini`,
|
`${g76Dir}/test.ini`,
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -287,6 +287,22 @@ function writeInterpRegressionFiles(name, files) {
|
|||||||
return wasmDir;
|
return wasmDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function assertInterpRegressionStaging(name, files, wasmDir) {
|
||||||
|
const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name);
|
||||||
|
assert.deepEqual(
|
||||||
|
readdirSync(sourceDir)
|
||||||
|
.filter((filename) => filename.endsWith(".ini") || filename.endsWith(".ngc") || filename.endsWith(".tbl"))
|
||||||
|
.sort(),
|
||||||
|
[...files].sort(),
|
||||||
|
`interp ${name} fixture coverage drift`,
|
||||||
|
);
|
||||||
|
assert.deepEqual(
|
||||||
|
files.map((file) => `${wasmDir}/${file}`),
|
||||||
|
files.map((file) => `/work/interp/${name}/${file}`),
|
||||||
|
`interp ${name} staging manifest drift`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function interpRegressionNgcFiles(name) {
|
function interpRegressionNgcFiles(name) {
|
||||||
const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name);
|
const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp", name);
|
||||||
return readdirSync(sourceDir)
|
return readdirSync(sourceDir)
|
||||||
@@ -1574,17 +1590,8 @@ const camNisleyFiles = [
|
|||||||
"cam.ngc",
|
"cam.ngc",
|
||||||
"test.tbl",
|
"test.tbl",
|
||||||
];
|
];
|
||||||
assert.deepEqual(
|
|
||||||
camNisleyFiles.filter((file) => file.endsWith(".ngc")),
|
|
||||||
interpRegressionNgcFilesRecursive("cam-nisley"),
|
|
||||||
"interp cam-nisley fixture coverage drift",
|
|
||||||
);
|
|
||||||
const camNisleyDir = writeInterpRegressionFiles("cam-nisley", camNisleyFiles);
|
const camNisleyDir = writeInterpRegressionFiles("cam-nisley", camNisleyFiles);
|
||||||
assert.deepEqual(
|
assertInterpRegressionStaging("cam-nisley", camNisleyFiles, camNisleyDir);
|
||||||
camNisleyFiles.map((file) => `${camNisleyDir}/${file}`),
|
|
||||||
camNisleyFiles.map((file) => `/work/interp/cam-nisley/${file}`),
|
|
||||||
"interp cam-nisley staging manifest drift",
|
|
||||||
);
|
|
||||||
interp.writeTextFile(
|
interp.writeTextFile(
|
||||||
`${camNisleyDir}/test.ini`,
|
`${camNisleyDir}/test.ini`,
|
||||||
[
|
[
|
||||||
@@ -2321,17 +2328,8 @@ const g76Files = [
|
|||||||
"g76only.ngc",
|
"g76only.ngc",
|
||||||
"test.tbl",
|
"test.tbl",
|
||||||
];
|
];
|
||||||
assert.deepEqual(
|
|
||||||
g76Files.filter((file) => file.endsWith(".ngc")),
|
|
||||||
interpRegressionNgcFilesRecursive("g76"),
|
|
||||||
"interp g76 fixture coverage drift",
|
|
||||||
);
|
|
||||||
const g76Dir = writeInterpRegressionFiles("g76", g76Files);
|
const g76Dir = writeInterpRegressionFiles("g76", g76Files);
|
||||||
assert.deepEqual(
|
assertInterpRegressionStaging("g76", g76Files, g76Dir);
|
||||||
g76Files.map((file) => `${g76Dir}/${file}`),
|
|
||||||
g76Files.map((file) => `/work/interp/g76/${file}`),
|
|
||||||
"interp g76 staging manifest drift",
|
|
||||||
);
|
|
||||||
interp.writeTextFile(
|
interp.writeTextFile(
|
||||||
`${g76Dir}/test.ini`,
|
`${g76Dir}/test.ini`,
|
||||||
[
|
[
|
||||||
|
|||||||
Reference in New Issue
Block a user