Guard browser custom session tool-table values

This commit is contained in:
2026-06-14 07:07:09 +08:00
parent c260246a8e
commit 4274cda03d
2 changed files with 132 additions and 20 deletions

View File

@@ -624,3 +624,55 @@ host_wasm_opfs_browser_smokes=ok
value groups看是否能像 direct session 一样用 tool object locals 表达 load、
save、readback 三组 expected lines只改测试胶水不改变输入、OPFS path、WASM path
字符串或保存/读取行为。
十四、2026-06-14 继续执行记录browser custom session tool-table value object guard
本轮按上一条下一步建议继续收敛 custom session 普通 tool-table load/save/readback
value groups范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。
完成内容:
- 新增 `opfsToolTableToolValues(...)`,用显式 object locals 承载普通 OPFS
tool-table 的 seed、load result 与 readback expected 值;
- `iniNamedToolTable*` 三组并行数组收敛为 `iniNamedToolTable` object
- `explicitToolTable*` 三组并行数组收敛为 `explicitToolTable` object
- `loadComment`、`readbackZOffset` 与 `readbackDiameter` 继续显式传入,避免在
browser test glue 中推导 LinuxCNC-owned tool-table 格式;
- 未改变任何 expected 字符串、输入、OPFS path、WASM path 字符串或 save/read/load
行为;
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。
验证已通过:
```bash
git diff --check
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_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
关键输出:
```text
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```
下一步建议:
继续小批量 browser test glue guard。优先扫描 direct `browser-interp` ordinary
tool-table value groups 是否也能复用 `opfsToolTableToolValues(...)`,或把
`opfsToolTableSeedText(...)` / `opfsToolTableTextLines(...)` 调用收敛成 object
adapter只改测试胶水不改变输入、OPFS path、WASM path 字符串或保存/读取行为。

View File

@@ -4619,6 +4619,28 @@
];
}
function opfsToolTableToolValues(
toolNo,
pocketNo,
zOffset,
diameter,
comment,
loadComment,
readbackZOffset,
readbackDiameter,
) {
return {
toolNo,
pocketNo,
zOffset,
diameter,
comment,
loadComment,
readbackZOffset,
readbackDiameter,
};
}
function toolTableResultLines(tools) {
return tools.flatMap((tool) => tool.resultLines);
}
@@ -9610,13 +9632,26 @@
iniFileParameterFilename,
opfsParameterSeedText(...iniNamedInitialParameterValues),
);
const iniNamedToolTableValues = ["8", "8", "4.5", "0.5", ";browser custom tool"];
const iniNamedToolTableLoadValues = ["8", "8", "4.5", "0.5", "browser custom tool"];
const iniNamedToolTableReadbackValues = ["8", "8", "+4.500000", "+0.500000", ";browser custom tool"];
const iniNamedToolTable = opfsToolTableToolValues(
"8",
"8",
"4.5",
"0.5",
";browser custom tool",
"browser custom tool",
"+4.500000",
"+0.500000",
);
await writeOpfsMachineFile(
iniFileMachineId,
iniFileToolTableFilename,
opfsToolTableSeedText(...iniNamedToolTableValues),
opfsToolTableSeedText(
iniNamedToolTable.toolNo,
iniNamedToolTable.pocketNo,
iniNamedToolTable.zOffset,
iniNamedToolTable.diameter,
iniNamedToolTable.comment,
),
);
const loadedIniFileSession = await loadMachineSessionFromOpfs(
interp,
@@ -9680,10 +9715,10 @@
verifyOpfsLoadResult(
"opfs_load_ini_named_tool_table",
loadedIniFileSession.toolTable,
opfsToolTableResultLines("load", iniNamedToolTableLoadValues[0], iniNamedToolTableLoadValues[1], [
`tool_1.z=${iniNamedToolTableLoadValues[2]}`,
`tool_1.diameter=${iniNamedToolTableLoadValues[3]}`,
`tool_1.comment=${iniNamedToolTableLoadValues[4]}`,
opfsToolTableResultLines("load", iniNamedToolTable.toolNo, iniNamedToolTable.pocketNo, [
`tool_1.z=${iniNamedToolTable.zOffset}`,
`tool_1.diameter=${iniNamedToolTable.diameter}`,
`tool_1.comment=${iniNamedToolTable.loadComment}`,
]),
);
const savedIniNamedToolTable = await saveMachineToolTableToOpfs(
@@ -9701,12 +9736,18 @@
verifyOpfsSaveResult(
"opfs_save_ini_named_tool_table",
savedIniNamedToolTable,
opfsToolTableResultLines("save", iniNamedToolTableValues[0], iniNamedToolTableValues[1]),
opfsToolTableResultLines("save", iniNamedToolTable.toolNo, iniNamedToolTable.pocketNo),
);
await verifyOpfsReadback(
"opfs_saved_ini_named_tool_table_text",
loadedIniFileSession.toolTable.opfsPath,
opfsToolTableTextLines(...iniNamedToolTableReadbackValues),
opfsToolTableTextLines(
iniNamedToolTable.toolNo,
iniNamedToolTable.pocketNo,
iniNamedToolTable.readbackZOffset,
iniNamedToolTable.readbackDiameter,
iniNamedToolTable.comment,
),
);
const iniOverrideMachineId = "browser-ini-override-session";
@@ -9734,13 +9775,26 @@
explicitParameterFilename,
opfsParameterSeedText(...explicitInitialParameterValues),
);
const explicitToolTableValues = ["9", "9", "5.5", "0.625", ";browser explicit tool"];
const explicitToolTableLoadValues = ["9", "9", "5.5", "0.625", "browser explicit tool"];
const explicitToolTableReadbackValues = ["9", "9", "+5.500000", "+0.625000", ";browser explicit tool"];
const explicitToolTable = opfsToolTableToolValues(
"9",
"9",
"5.5",
"0.625",
";browser explicit tool",
"browser explicit tool",
"+5.500000",
"+0.625000",
);
await writeOpfsMachineFile(
iniOverrideMachineId,
explicitToolTableFilename,
opfsToolTableSeedText(...explicitToolTableValues),
opfsToolTableSeedText(
explicitToolTable.toolNo,
explicitToolTable.pocketNo,
explicitToolTable.zOffset,
explicitToolTable.diameter,
explicitToolTable.comment,
),
);
const loadedIniOverrideSession = await loadMachineSessionFromOpfs(
interp,
@@ -9777,10 +9831,10 @@
verifyOpfsLoadResult(
"opfs_load_explicit_tool_table",
loadedIniOverrideSession.toolTable,
opfsToolTableResultLines("load", explicitToolTableLoadValues[0], explicitToolTableLoadValues[1], [
`tool_1.z=${explicitToolTableLoadValues[2]}`,
`tool_1.diameter=${explicitToolTableLoadValues[3]}`,
`tool_1.comment=${explicitToolTableLoadValues[4]}`,
opfsToolTableResultLines("load", explicitToolTable.toolNo, explicitToolTable.pocketNo, [
`tool_1.z=${explicitToolTable.zOffset}`,
`tool_1.diameter=${explicitToolTable.diameter}`,
`tool_1.comment=${explicitToolTable.loadComment}`,
]),
);
const explicitParameterValues = [51.25, 102.5, 7.5, 202];
@@ -9829,12 +9883,18 @@
verifyOpfsSaveResult(
"opfs_save_explicit_tool_table",
savedExplicitToolTable,
opfsToolTableResultLines("save", explicitToolTableValues[0], explicitToolTableValues[1]),
opfsToolTableResultLines("save", explicitToolTable.toolNo, explicitToolTable.pocketNo),
);
await verifyOpfsReadback(
"opfs_saved_explicit_tool_table_text",
loadedIniOverrideSession.toolTable.opfsPath,
opfsToolTableTextLines(...explicitToolTableReadbackValues),
opfsToolTableTextLines(
explicitToolTable.toolNo,
explicitToolTable.pocketNo,
explicitToolTable.readbackZOffset,
explicitToolTable.readbackDiameter,
explicitToolTable.comment,
),
);
await verifyOpfsInvalidIniSessionRejects(