From 09855d37f75c473d4b76956bc1608d1d46f78319 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sun, 14 Jun 2026 00:53:17 +0800 Subject: [PATCH] Guard browser OPFS load result helper --- text8.txt | 46 +++++++++++++++++++++++ wasm-port/tests/browser/interp_smoke.html | 46 ++++++++++++----------- 2 files changed, 71 insertions(+), 21 deletions(-) diff --git a/text8.txt b/text8.txt index 19e248c..5e2b322 100644 --- a/text8.txt +++ b/text8.txt @@ -325,3 +325,49 @@ host_wasm_opfs_browser_smokes=ok `loadedSession.toolTable.result` 等形态足够一致,可抽一个只处理 result 精确校验的 helper。仍不改变 expected text,不触碰 runtime bridge、file-service 或 LinuxCNC 语义。 + +九、2026-06-14 继续执行记录:browser OPFS load result helper guard + +本轮按上一条下一步建议继续推进 OPFS load result verification 小批收敛,范围仍只触及 +`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。 + +完成内容: + +- 新增 `verifyOpfsLoadResult(...)`,统一 OPFS load helper result 的 + `verifyExpectedOutput(...)` 精确校验入口; +- 收敛 7 个 `loadedSession.*.result` / `loadedIni*Session.*.result` 的 load 校验调用; +- expected output 行内容未改,只把 `.result` 读取和 `join("\n")` 胶水放入 helper; +- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、 + INI、tool、parameter 或 LinuxCNC-owned runtime semantics。 + +验证已通过: + +```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_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +关键输出: + +```text +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 +browser_interp_smoke=ok +host_wasm_opfs_browser_smokes=ok +``` + +下一步建议: + +继续沿 browser/OPFS boundary guard 方向推进,但进入更细一层的 load/save 对称收敛审视: +检查 `opfs_saved_*_text` 与 `opfs_load_*` 附近是否还能抽出更小的 pair helper,前提是 +不让 helper 掩盖 expected text 或改变 direct-file 与 machine-file 的边界。 diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index 8fa77a2..27e177f 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4539,6 +4539,10 @@ verifyExpectedOutput(label, saveResult.result, expectedLines.join("\n")); } + function verifyOpfsLoadResult(label, loadResult, expectedLines) { + verifyExpectedOutput(label, loadResult.result, expectedLines.join("\n")); + } + async function verifyOpfsSavedText(label, loadActualText, expectedText) { verifyExpectedOutput(label, await loadActualText(), expectedText); } @@ -9195,20 +9199,20 @@ ), }, ); - verifyExpectedOutput( + verifyOpfsLoadResult( "opfs_restore_parameters", - loadedSession.parameters.result, + loadedSession.parameters, [ "restore_parameters=0", "parameter_5161=10.5", "parameter_5162=20.25", "parameter_5221=2.25", "parameter_5399=44", - ].join("\n"), + ], ); - verifyExpectedOutput( + verifyOpfsLoadResult( "opfs_load_tool_table", - loadedSession.toolTable.result, + loadedSession.toolTable, [ "tooldata_load=0", "tool_1.toolno=2", @@ -9220,7 +9224,7 @@ "tool_1.orientation=4", "tool_1.comment=browser finish tool", "tool_index_for_tool_2=1", - ].join("\n"), + ], ); const savedParameters = await saveMachineParametersToOpfs( interp, @@ -9366,9 +9370,9 @@ ), }, ); - verifyExpectedOutput( + verifyOpfsLoadResult( "opfs_load_random_tool_table", - loadedRandomSession.toolTable.result, + loadedRandomSession.toolTable, [ "tooldata_random_toolchanger=1", "tooldata_load=0", @@ -9383,7 +9387,7 @@ "tool_pocket_9.toolno=5", "tool_pocket_9.pocketno=9", "tool_index_for_tool_2=7", - ].join("\n"), + ], ); const savedRandomToolTable = await saveMachineToolTableToOpfs( interp, @@ -9480,16 +9484,16 @@ iniFileIniWasmPath, ), ); - verifyExpectedOutput( + verifyOpfsLoadResult( "opfs_load_ini_named_parameter_file", - loadedIniFileSession.parameters.result, + loadedIniFileSession.parameters, [ "restore_parameters=0", "parameter_5161=31.25", "parameter_5162=62.5", "parameter_5221=4.5", "parameter_5399=99", - ].join("\n"), + ], ); const savedIniNamedParameters = await saveMachineParametersToOpfs( interp, @@ -9544,9 +9548,9 @@ "5399 99", ].join("\n"), ); - verifyExpectedOutput( + verifyOpfsLoadResult( "opfs_load_ini_named_tool_table", - loadedIniFileSession.toolTable.result, + loadedIniFileSession.toolTable, [ "tooldata_load=0", "tool_1.toolno=8", @@ -9554,7 +9558,7 @@ "tool_1.z=4.5", "tool_1.diameter=0.5", "tool_1.comment=browser custom tool", - ].join("\n"), + ], ); const savedIniNamedToolTable = await saveMachineToolTableToOpfs( interp, @@ -9654,20 +9658,20 @@ iniOverrideIniWasmPath, ), ); - verifyExpectedOutput( + verifyOpfsLoadResult( "opfs_load_explicit_parameter_file", - loadedIniOverrideSession.parameters.result, + loadedIniOverrideSession.parameters, [ "restore_parameters=0", "parameter_5161=41.25", "parameter_5162=82.5", "parameter_5221=6.5", "parameter_5399=101", - ].join("\n"), + ], ); - verifyExpectedOutput( + verifyOpfsLoadResult( "opfs_load_explicit_tool_table", - loadedIniOverrideSession.toolTable.result, + loadedIniOverrideSession.toolTable, [ "tooldata_load=0", "tool_1.toolno=9", @@ -9675,7 +9679,7 @@ "tool_1.z=5.5", "tool_1.diameter=0.625", "tool_1.comment=browser explicit tool", - ].join("\n"), + ], ); const savedExplicitParameters = await saveMachineParametersToOpfs( interp,