From c7e7f075f3328f3d2288d07620930d106d2a0356 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sun, 14 Jun 2026 07:32:22 +0800 Subject: [PATCH] Guard browser direct parameter object adapters --- text9.txt | 61 +++++++++++++++++++++++ wasm-port/tests/browser/interp_smoke.html | 61 +++++++++++++++++++---- 2 files changed, 113 insertions(+), 9 deletions(-) diff --git a/text9.txt b/text9.txt index 61c5752..360ffb3 100644 --- a/text9.txt +++ b/text9.txt @@ -842,3 +842,64 @@ host_wasm_opfs_browser_smokes=ok 是否还能合并命名或减少重复 adapter;如果收益不明显,转向 parameter result/text 的 object adapter 收敛;只改测试胶水,不改变输入、OPFS path、WASM path 字符串或 保存/读取行为。 + +十八、2026-06-14 继续执行记录:browser direct parameter object adapter guard + +本轮按上一条下一步建议继续收敛 direct `browser-interp` parameter result/text helper +调用点的参数展开,范围仍只触及 +`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。 + +完成内容: + +- 新增 `opfsParameterResultLinesForValues(...)`,从显式 parameter value set 转发到 + `opfsParameterResultLines(...)`; +- 新增 `opfsParameterTextLinesForValues(...)`,从显式 parameter value set 转发到 + `opfsParameterTextLines(...)`; +- 新增 `opfsParameterValueSet(...)` 与 `opfsParameterValuesForValueSet(...)`, + 让 direct `browser-interp` parameter load/save/readback 只通过 object locals + 传递; +- direct `browser-interp` 的 initial restore、save、readback text 和 backup text + 调用点改为复用 parameter object adapter; +- adapter 只转发已显式保存的 object 字段,不推导 LinuxCNC-owned parameter 格式; +- 未改变任何 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 +``` + +备注: + +- 当前 sandbox 会拦截本地 HTTP server socket bind;`verify_host_smokes.sh` 首次在 + browser smoke 阶段因 `PermissionError: [Errno 1] Operation not permitted` 失败; +- 已按规则授权重跑 `wasm-port/tests/host/verify_host_smokes.sh`,重跑通过。 + +下一步建议: + +继续小批量 browser test glue guard。优先扫描 parameter 的 direct helper 是否还能 +合并命名,或者转向更少层级的 `parameter result/text` adapter;只改测试胶水,不改变 +输入、OPFS path、WASM path 字符串或保存/读取行为。 diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index 9dc9472..28aec8e 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4557,6 +4557,16 @@ ]; } + function opfsParameterResultLinesForValues(operation, values) { + return opfsParameterResultLines( + operation, + values.parameter5161, + values.parameter5162, + values.parameter5221, + values.parameter5399, + ); + } + function opfsParameterTextLines(separator, parameter5161, parameter5162, parameter5221, parameter5399) { return [ `5161${separator}${parameter5161}`, @@ -4566,6 +4576,16 @@ ]; } + function opfsParameterTextLinesForValues(separator, values) { + return opfsParameterTextLines( + separator, + values.parameter5161, + values.parameter5162, + values.parameter5221, + values.parameter5399, + ); + } + function opfsParameterSeedText(parameter5161, parameter5162, parameter5221, parameter5399) { return [ `5161 ${parameter5161}`, @@ -4589,6 +4609,15 @@ ]; } + function opfsParameterValueSet(parameter5161, parameter5162, parameter5221, parameter5399) { + return { + parameter5161, + parameter5162, + parameter5221, + parameter5399, + }; + } + function opfsParameterValues(parameter5161, parameter5162, parameter5221, parameter5399) { return { 5161: parameter5161, @@ -4599,6 +4628,15 @@ }; } + function opfsParameterValuesForValueSet(values) { + return opfsParameterValues( + values.parameter5161, + values.parameter5162, + values.parameter5221, + values.parameter5399, + ); + } + function opfsToolTableResultLines(operation, toolNo, pocketNo, extraLines = []) { return [ `tooldata_${operation}=0`, @@ -9421,7 +9459,7 @@ const browserInterpMachineId = "browser-interp"; const browserInterpWasmPaths = opfsBrowserSessionWasmPaths("browser"); - const browserInterpInitialParameterValues = ["10.5", "20.25", "2.25", "44"]; + const browserInterpInitialParameterValues = opfsParameterValueSet("10.5", "20.25", "2.25", "44"); const browserInterpTextPaths = await saveMachineTextFiles(browserInterpMachineId, { ini: `[EMC]\nMACHINE = ${browserInterpMachineId}\n`, toolTable: "T2 P7 Z3.125 D1.5 I12 J34 Q4 ;browser finish tool\n", @@ -9448,7 +9486,7 @@ verifyOpfsLoadResult( "opfs_restore_parameters", loadedSession.parameters, - opfsParameterResultLines("restore", ...browserInterpInitialParameterValues), + opfsParameterResultLinesForValues("restore", browserInterpInitialParameterValues), ); const browserInterpToolTable = opfsToolTableToolValues( "2", @@ -9473,13 +9511,18 @@ "tool_index_for_tool_2=1", ]), ); - const browserInterpParameterValues = [12.34, 56.78, 9.87, 66.6]; - const browserInterpParameterExpectedValues = ["12.34", "56.78", "9.87", "66.6"]; - const browserInterpParameterReadbackValues = ["12.340000", "56.780000", "9.870000", "66.600000"]; + const browserInterpParameterValues = opfsParameterValueSet(12.34, 56.78, 9.87, 66.6); + const browserInterpParameterExpectedValues = opfsParameterValueSet("12.34", "56.78", "9.87", "66.6"); + const browserInterpParameterReadbackValues = opfsParameterValueSet( + "12.340000", + "56.780000", + "9.870000", + "66.600000", + ); const savedParameters = await saveMachineParametersToOpfs( interp, browserInterpMachineId, - opfsParameterValues(...browserInterpParameterValues), + opfsParameterValuesForValueSet(browserInterpParameterValues), { wasmPath: browserInterpWasmPaths.parameters }, ); assertOpfsSavedParameterStaging( @@ -9492,14 +9535,14 @@ verifyOpfsSaveResult( "opfs_save_parameters", savedParameters, - opfsParameterResultLines("save", ...browserInterpParameterExpectedValues), + opfsParameterResultLinesForValues("save", browserInterpParameterExpectedValues), ); await verifyOpfsMachineFileReadback( "opfs_saved_parameter_text", browserInterpMachineId, "parameters", [ - ...opfsParameterTextLines("\t", ...browserInterpParameterReadbackValues), + ...opfsParameterTextLinesForValues("\t", browserInterpParameterReadbackValues), "absent=<_named_param>", ], ); @@ -9507,7 +9550,7 @@ "opfs_saved_parameter_backup_text", savedParameters.backupOpfsPath, [ - ...opfsParameterTextLines(" ", ...browserInterpInitialParameterValues), + ...opfsParameterTextLinesForValues(" ", browserInterpInitialParameterValues), "<_named_param> 123", ], );