Guard INI subroutine staging manifests
This commit is contained in:
69
text5.txt
69
text5.txt
@@ -6452,3 +6452,72 @@ Guard g10 interpreter fixture coverage
|
|||||||
```
|
```
|
||||||
|
|
||||||
提交后再复跑同一组 gate。
|
提交后再复跑同一组 gate。
|
||||||
|
|
||||||
|
六十七、2026-06-12 继续执行记录:INI subroutine staging manifest guard
|
||||||
|
|
||||||
|
本轮继续沿当前 host 可执行路线推进。提交后守门已通过:
|
||||||
|
|
||||||
|
```text
|
||||||
|
vendor sync up to date
|
||||||
|
standalone CNC semantics guard complete
|
||||||
|
```
|
||||||
|
|
||||||
|
当前 host 仍缺 `halcmd`、`halrun`、`linuxcnc`、`milltask`,因此不执行任何
|
||||||
|
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。
|
||||||
|
|
||||||
|
1. 候选选择。
|
||||||
|
|
||||||
|
选择已有 Node/browser 执行覆盖、且依赖 `[RS274NGC]SUBROUTINE_PATH` staging 的
|
||||||
|
两个 pure interpreter family:
|
||||||
|
|
||||||
|
- `tests/interp/sub-call-from-sub`
|
||||||
|
- `tests/interp/nested-sub-in-file-error`
|
||||||
|
|
||||||
|
这两个 family 不需要 HAL/task/tool DB/user-M process,只需要确认 staging helper
|
||||||
|
不会遗漏 INI subroutine 文件。
|
||||||
|
|
||||||
|
2. 更新。
|
||||||
|
|
||||||
|
更新:
|
||||||
|
|
||||||
|
- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
|
||||||
|
- `wasm-port/tests/browser/interp_smoke.html`
|
||||||
|
|
||||||
|
Node 新增:
|
||||||
|
|
||||||
|
- `subCallFromSubNgcFiles` 固定:
|
||||||
|
- `test.ngc`
|
||||||
|
- `subs/caller.ngc`
|
||||||
|
- `subs/helper.ngc`
|
||||||
|
- `nestedSubInFileErrorNgcFiles` 固定:
|
||||||
|
- `test.ngc`
|
||||||
|
- `subs/sequential.ngc`
|
||||||
|
- Node 对上述列表分别与
|
||||||
|
`interpRegressionNgcFilesRecursive("sub-call-from-sub")` 和
|
||||||
|
`interpRegressionNgcFilesRecursive("nested-sub-in-file-error")` 精确对账;
|
||||||
|
- Node 还检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
|
||||||
|
与上述列表一致。
|
||||||
|
|
||||||
|
Browser 新增:
|
||||||
|
|
||||||
|
- 对上述两个 fixed list 做 count 和 duplicate-free guard;
|
||||||
|
- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
|
||||||
|
与 fixed list 一致;
|
||||||
|
- browser 仍不枚举目录。
|
||||||
|
|
||||||
|
3. 下一步工作建议。
|
||||||
|
|
||||||
|
先复跑:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git diff --check
|
||||||
|
wasm-port/tests/wasm/node/verify_interp_wasm.sh
|
||||||
|
wasm-port/tests/browser/verify_interp_browser.sh
|
||||||
|
wasm-port/tests/host/verify_host_smokes.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
如果通过,做小提交,建议 message:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Guard INI subroutine staging manifests
|
||||||
|
```
|
||||||
|
|||||||
@@ -7239,6 +7239,22 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
const subCallFromSubPlan = await stageInterpIniContext(interp, "sub-call-from-sub");
|
const subCallFromSubPlan = await stageInterpIniContext(interp, "sub-call-from-sub");
|
||||||
|
const subCallFromSubNgcFiles = [
|
||||||
|
"subs/caller.ngc",
|
||||||
|
"subs/helper.ngc",
|
||||||
|
"test.ngc",
|
||||||
|
];
|
||||||
|
if (subCallFromSubNgcFiles.length !== 3 || new Set(subCallFromSubNgcFiles).size !== subCallFromSubNgcFiles.length) {
|
||||||
|
throw new Error("browser_interp_sub_call_from_sub_fixture_coverage: list drift");
|
||||||
|
}
|
||||||
|
const subCallFromSubStagedNgcFiles = subCallFromSubPlan.files
|
||||||
|
.map((file) => file.sourceRel)
|
||||||
|
.filter((sourceRel) => sourceRel.endsWith(".ngc"))
|
||||||
|
.map((sourceRel) => sourceRel.replace("tests/interp/sub-call-from-sub/", ""))
|
||||||
|
.sort();
|
||||||
|
if (subCallFromSubStagedNgcFiles.join(",") !== subCallFromSubNgcFiles.join(",")) {
|
||||||
|
throw new Error("browser_interp_sub_call_from_sub_staging_manifest: list drift");
|
||||||
|
}
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_sub_call_from_sub",
|
"browser_interp_sub_call_from_sub",
|
||||||
interp.runFileWithIni(
|
interp.runFileWithIni(
|
||||||
@@ -7294,6 +7310,21 @@
|
|||||||
interp,
|
interp,
|
||||||
"nested-sub-in-file-error",
|
"nested-sub-in-file-error",
|
||||||
);
|
);
|
||||||
|
const nestedSubInFileErrorNgcFiles = [
|
||||||
|
"subs/sequential.ngc",
|
||||||
|
"test.ngc",
|
||||||
|
];
|
||||||
|
if (nestedSubInFileErrorNgcFiles.length !== 2 || new Set(nestedSubInFileErrorNgcFiles).size !== nestedSubInFileErrorNgcFiles.length) {
|
||||||
|
throw new Error("browser_interp_nested_sub_in_file_error_fixture_coverage: list drift");
|
||||||
|
}
|
||||||
|
const nestedSubInFileErrorStagedNgcFiles = nestedSubInFileErrorPlan.files
|
||||||
|
.map((file) => file.sourceRel)
|
||||||
|
.filter((sourceRel) => sourceRel.endsWith(".ngc"))
|
||||||
|
.map((sourceRel) => sourceRel.replace("tests/interp/nested-sub-in-file-error/", ""))
|
||||||
|
.sort();
|
||||||
|
if (nestedSubInFileErrorStagedNgcFiles.join(",") !== nestedSubInFileErrorNgcFiles.join(",")) {
|
||||||
|
throw new Error("browser_interp_nested_sub_in_file_error_staging_manifest: list drift");
|
||||||
|
}
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_nested_sub_in_file_error",
|
"browser_interp_nested_sub_in_file_error",
|
||||||
interp.runFileWithIni(
|
interp.runFileWithIni(
|
||||||
|
|||||||
@@ -2134,6 +2134,25 @@ verifyExpectedOutput(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const subCallFromSubPlan = stageInterpIniContext("sub-call-from-sub");
|
const subCallFromSubPlan = stageInterpIniContext("sub-call-from-sub");
|
||||||
|
const subCallFromSubNgcFiles = [
|
||||||
|
"subs/caller.ngc",
|
||||||
|
"subs/helper.ngc",
|
||||||
|
"test.ngc",
|
||||||
|
];
|
||||||
|
assert.deepEqual(
|
||||||
|
subCallFromSubNgcFiles,
|
||||||
|
interpRegressionNgcFilesRecursive("sub-call-from-sub"),
|
||||||
|
"interp sub-call-from-sub fixture coverage drift",
|
||||||
|
);
|
||||||
|
assert.deepEqual(
|
||||||
|
subCallFromSubPlan.files
|
||||||
|
.map((file) => file.sourceRel)
|
||||||
|
.filter((sourceRel) => sourceRel.endsWith(".ngc"))
|
||||||
|
.map((sourceRel) => sourceRel.replace("tests/interp/sub-call-from-sub/", ""))
|
||||||
|
.sort(),
|
||||||
|
subCallFromSubNgcFiles,
|
||||||
|
"interp sub-call-from-sub staging manifest drift",
|
||||||
|
);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_sub_call_from_sub_wasm",
|
"interp_sub_call_from_sub_wasm",
|
||||||
interp.runFileWithIni(
|
interp.runFileWithIni(
|
||||||
@@ -2186,6 +2205,24 @@ verifyExpectedOutput(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const nestedSubInFileErrorPlan = stageInterpIniContext("nested-sub-in-file-error");
|
const nestedSubInFileErrorPlan = stageInterpIniContext("nested-sub-in-file-error");
|
||||||
|
const nestedSubInFileErrorNgcFiles = [
|
||||||
|
"subs/sequential.ngc",
|
||||||
|
"test.ngc",
|
||||||
|
];
|
||||||
|
assert.deepEqual(
|
||||||
|
nestedSubInFileErrorNgcFiles,
|
||||||
|
interpRegressionNgcFilesRecursive("nested-sub-in-file-error"),
|
||||||
|
"interp nested-sub-in-file-error fixture coverage drift",
|
||||||
|
);
|
||||||
|
assert.deepEqual(
|
||||||
|
nestedSubInFileErrorPlan.files
|
||||||
|
.map((file) => file.sourceRel)
|
||||||
|
.filter((sourceRel) => sourceRel.endsWith(".ngc"))
|
||||||
|
.map((sourceRel) => sourceRel.replace("tests/interp/nested-sub-in-file-error/", ""))
|
||||||
|
.sort(),
|
||||||
|
nestedSubInFileErrorNgcFiles,
|
||||||
|
"interp nested-sub-in-file-error staging manifest drift",
|
||||||
|
);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_nested_sub_in_file_error_wasm",
|
"interp_nested_sub_in_file_error_wasm",
|
||||||
interp.runFileWithIni(
|
interp.runFileWithIni(
|
||||||
|
|||||||
Reference in New Issue
Block a user