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、 value groups看是否能像 direct session 一样用 tool object locals 表达 load、
save、readback 三组 expected lines只改测试胶水不改变输入、OPFS path、WASM path 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) { function toolTableResultLines(tools) {
return tools.flatMap((tool) => tool.resultLines); return tools.flatMap((tool) => tool.resultLines);
} }
@@ -9610,13 +9632,26 @@
iniFileParameterFilename, iniFileParameterFilename,
opfsParameterSeedText(...iniNamedInitialParameterValues), opfsParameterSeedText(...iniNamedInitialParameterValues),
); );
const iniNamedToolTableValues = ["8", "8", "4.5", "0.5", ";browser custom tool"]; const iniNamedToolTable = opfsToolTableToolValues(
const iniNamedToolTableLoadValues = ["8", "8", "4.5", "0.5", "browser custom tool"]; "8",
const iniNamedToolTableReadbackValues = ["8", "8", "+4.500000", "+0.500000", ";browser custom tool"]; "8",
"4.5",
"0.5",
";browser custom tool",
"browser custom tool",
"+4.500000",
"+0.500000",
);
await writeOpfsMachineFile( await writeOpfsMachineFile(
iniFileMachineId, iniFileMachineId,
iniFileToolTableFilename, iniFileToolTableFilename,
opfsToolTableSeedText(...iniNamedToolTableValues), opfsToolTableSeedText(
iniNamedToolTable.toolNo,
iniNamedToolTable.pocketNo,
iniNamedToolTable.zOffset,
iniNamedToolTable.diameter,
iniNamedToolTable.comment,
),
); );
const loadedIniFileSession = await loadMachineSessionFromOpfs( const loadedIniFileSession = await loadMachineSessionFromOpfs(
interp, interp,
@@ -9680,10 +9715,10 @@
verifyOpfsLoadResult( verifyOpfsLoadResult(
"opfs_load_ini_named_tool_table", "opfs_load_ini_named_tool_table",
loadedIniFileSession.toolTable, loadedIniFileSession.toolTable,
opfsToolTableResultLines("load", iniNamedToolTableLoadValues[0], iniNamedToolTableLoadValues[1], [ opfsToolTableResultLines("load", iniNamedToolTable.toolNo, iniNamedToolTable.pocketNo, [
`tool_1.z=${iniNamedToolTableLoadValues[2]}`, `tool_1.z=${iniNamedToolTable.zOffset}`,
`tool_1.diameter=${iniNamedToolTableLoadValues[3]}`, `tool_1.diameter=${iniNamedToolTable.diameter}`,
`tool_1.comment=${iniNamedToolTableLoadValues[4]}`, `tool_1.comment=${iniNamedToolTable.loadComment}`,
]), ]),
); );
const savedIniNamedToolTable = await saveMachineToolTableToOpfs( const savedIniNamedToolTable = await saveMachineToolTableToOpfs(
@@ -9701,12 +9736,18 @@
verifyOpfsSaveResult( verifyOpfsSaveResult(
"opfs_save_ini_named_tool_table", "opfs_save_ini_named_tool_table",
savedIniNamedToolTable, savedIniNamedToolTable,
opfsToolTableResultLines("save", iniNamedToolTableValues[0], iniNamedToolTableValues[1]), opfsToolTableResultLines("save", iniNamedToolTable.toolNo, iniNamedToolTable.pocketNo),
); );
await verifyOpfsReadback( await verifyOpfsReadback(
"opfs_saved_ini_named_tool_table_text", "opfs_saved_ini_named_tool_table_text",
loadedIniFileSession.toolTable.opfsPath, loadedIniFileSession.toolTable.opfsPath,
opfsToolTableTextLines(...iniNamedToolTableReadbackValues), opfsToolTableTextLines(
iniNamedToolTable.toolNo,
iniNamedToolTable.pocketNo,
iniNamedToolTable.readbackZOffset,
iniNamedToolTable.readbackDiameter,
iniNamedToolTable.comment,
),
); );
const iniOverrideMachineId = "browser-ini-override-session"; const iniOverrideMachineId = "browser-ini-override-session";
@@ -9734,13 +9775,26 @@
explicitParameterFilename, explicitParameterFilename,
opfsParameterSeedText(...explicitInitialParameterValues), opfsParameterSeedText(...explicitInitialParameterValues),
); );
const explicitToolTableValues = ["9", "9", "5.5", "0.625", ";browser explicit tool"]; const explicitToolTable = opfsToolTableToolValues(
const explicitToolTableLoadValues = ["9", "9", "5.5", "0.625", "browser explicit tool"]; "9",
const explicitToolTableReadbackValues = ["9", "9", "+5.500000", "+0.625000", ";browser explicit tool"]; "9",
"5.5",
"0.625",
";browser explicit tool",
"browser explicit tool",
"+5.500000",
"+0.625000",
);
await writeOpfsMachineFile( await writeOpfsMachineFile(
iniOverrideMachineId, iniOverrideMachineId,
explicitToolTableFilename, explicitToolTableFilename,
opfsToolTableSeedText(...explicitToolTableValues), opfsToolTableSeedText(
explicitToolTable.toolNo,
explicitToolTable.pocketNo,
explicitToolTable.zOffset,
explicitToolTable.diameter,
explicitToolTable.comment,
),
); );
const loadedIniOverrideSession = await loadMachineSessionFromOpfs( const loadedIniOverrideSession = await loadMachineSessionFromOpfs(
interp, interp,
@@ -9777,10 +9831,10 @@
verifyOpfsLoadResult( verifyOpfsLoadResult(
"opfs_load_explicit_tool_table", "opfs_load_explicit_tool_table",
loadedIniOverrideSession.toolTable, loadedIniOverrideSession.toolTable,
opfsToolTableResultLines("load", explicitToolTableLoadValues[0], explicitToolTableLoadValues[1], [ opfsToolTableResultLines("load", explicitToolTable.toolNo, explicitToolTable.pocketNo, [
`tool_1.z=${explicitToolTableLoadValues[2]}`, `tool_1.z=${explicitToolTable.zOffset}`,
`tool_1.diameter=${explicitToolTableLoadValues[3]}`, `tool_1.diameter=${explicitToolTable.diameter}`,
`tool_1.comment=${explicitToolTableLoadValues[4]}`, `tool_1.comment=${explicitToolTable.loadComment}`,
]), ]),
); );
const explicitParameterValues = [51.25, 102.5, 7.5, 202]; const explicitParameterValues = [51.25, 102.5, 7.5, 202];
@@ -9829,12 +9883,18 @@
verifyOpfsSaveResult( verifyOpfsSaveResult(
"opfs_save_explicit_tool_table", "opfs_save_explicit_tool_table",
savedExplicitToolTable, savedExplicitToolTable,
opfsToolTableResultLines("save", explicitToolTableValues[0], explicitToolTableValues[1]), opfsToolTableResultLines("save", explicitToolTable.toolNo, explicitToolTable.pocketNo),
); );
await verifyOpfsReadback( await verifyOpfsReadback(
"opfs_saved_explicit_tool_table_text", "opfs_saved_explicit_tool_table_text",
loadedIniOverrideSession.toolTable.opfsPath, loadedIniOverrideSession.toolTable.opfsPath,
opfsToolTableTextLines(...explicitToolTableReadbackValues), opfsToolTableTextLines(
explicitToolTable.toolNo,
explicitToolTable.pocketNo,
explicitToolTable.readbackZOffset,
explicitToolTable.readbackDiameter,
explicitToolTable.comment,
),
); );
await verifyOpfsInvalidIniSessionRejects( await verifyOpfsInvalidIniSessionRejects(