diff --git a/text7.txt b/text7.txt index f790ac3..b58c1a1 100644 --- a/text7.txt +++ b/text7.txt @@ -1154,3 +1154,70 @@ filesystem/OPFS path guard,不改变 tool table、INI 或 session runtime sema ```bash git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d ``` + +二十一、2026-06-13 继续执行记录:browser OPFS tool-table staging guard + +1. 本批目标。 + +继续 staged path guard inventory 第十六轮,处理 browser OPFS/session tool-table +boundary path: + +```text +/work/browser-tool.tbl +/work/browser-random-tool.tbl +/work/browser-custom-tool.tbl +/work/browser-explicit-tool.tbl +``` + +2. 已完成改动。 + +- browser 侧新增 `assertOpfsToolTableStaging(...)`; +- 默认 machine session 的 load/save tool table 均检查 OPFS path 与 WASM path; +- random toolchanger session 的 load/save tool table 均检查 OPFS path 与 WASM path; +- INI `TOOL_TABLE` 命名 session 的 load/save tool table 均检查 OPFS path 与 WASM path; +- explicit override session 的 load/save tool table 均检查 OPFS path 与 WASM path; +- 复用 `generatedToolTablePath(...)` 校验 WASM staged path; +- 未修改 OPFS 存储内容、tool table 内容、INI 解析、random toolchanger 行为或 session + runtime semantics。 + +涉及文件: + +```text +wasm-port/tests/browser/interp_smoke.html +``` + +3. 已完成的目标验证。 + +```bash +git diff --check +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +``` + +4. 本批剩余建议验证。 + +```bash +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 +Guard browser OPFS tool-table staging +``` + +5. 下一步工作建议。 + +继续 staged path guard inventory 第十七轮,优先处理 browser OPFS/session parameter +path guard,例如 `/work/browser-linuxcnc.var`、`/work/browser-random-linuxcnc.var`、 +`/work/browser-custom.var`、`/work/browser-explicit.var`;仍只加 filesystem/OPFS path +guard,不改变 parameter、INI 或 session runtime semantics。 + +下一轮第一条命令仍保持: + +```bash +git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d +``` diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index e909b6b..fc63b88 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4472,6 +4472,13 @@ return checkedPath; } + function assertOpfsToolTableStaging(label, toolTable, expectedOpfsPath, expectedWasmPath) { + if (toolTable.opfsPath !== expectedOpfsPath) { + throw new Error(`${label}: unexpected tool table OPFS path ${toolTable.opfsPath}`); + } + generatedToolTablePath(toolTable.wasmPath, expectedWasmPath); + } + async function loadSimMachineFiles(machineRel, iniFile, programFile = null) { const iniText = await fetchText( `../../vendor/linuxcnc/configs/sim/${machineRel}/${iniFile}`, @@ -8977,6 +8984,12 @@ toolTableWasmPath: "/work/browser-tool.tbl", }, ); + assertOpfsToolTableStaging( + "opfs_load_tool_table_staging", + loadedSession.toolTable, + "linuxcnc/machines/browser-interp/tool.tbl", + "/work/browser-tool.tbl", + ); verifyExpectedOutput( "opfs_restore_parameters", loadedSession.parameters.result, @@ -9061,6 +9074,12 @@ "browser-interp", { wasmPath: "/work/browser-tool.tbl" }, ); + assertOpfsToolTableStaging( + "opfs_save_tool_table_staging", + savedToolTable, + "linuxcnc/machines/browser-interp/tool.tbl", + "/work/browser-tool.tbl", + ); verifyExpectedOutput( "opfs_save_tool_table", savedToolTable.result, @@ -9119,18 +9138,18 @@ toolTableWasmPath: "/work/browser-random-tool.tbl", }, ); + assertOpfsToolTableStaging( + "opfs_load_random_tool_table_staging", + loadedRandomSession.toolTable, + "linuxcnc/machines/browser-random-toolchanger/tool.tbl", + "/work/browser-random-tool.tbl", + ); if ( loadedRandomSession.parameters.opfsPath !== "linuxcnc/machines/browser-random-toolchanger/linuxcnc.var" ) { throw new Error(`unexpected default parameter path: ${loadedRandomSession.parameters.opfsPath}`); } - if ( - loadedRandomSession.toolTable.opfsPath !== - "linuxcnc/machines/browser-random-toolchanger/tool.tbl" - ) { - throw new Error(`unexpected default tool path: ${loadedRandomSession.toolTable.opfsPath}`); - } verifyExpectedOutput( "opfs_load_random_tool_table", loadedRandomSession.toolTable.result, @@ -9155,6 +9174,12 @@ "browser-random-toolchanger", { wasmPath: "/work/browser-random-tool.tbl" }, ); + assertOpfsToolTableStaging( + "opfs_save_random_tool_table_staging", + savedRandomToolTable, + "linuxcnc/machines/browser-random-toolchanger/tool.tbl", + "/work/browser-random-tool.tbl", + ); verifyExpectedOutput( "opfs_save_random_tool_table", savedRandomToolTable.result, @@ -9218,18 +9243,18 @@ toolTableWasmPath: "/work/browser-custom-tool.tbl", }, ); + assertOpfsToolTableStaging( + "opfs_load_ini_named_tool_table_staging", + loadedIniFileSession.toolTable, + "linuxcnc/machines/browser-ini-file-session/browser-custom-tool.tbl", + "/work/browser-custom-tool.tbl", + ); if ( loadedIniFileSession.parameters.opfsPath !== "linuxcnc/machines/browser-ini-file-session/browser-custom.var" ) { throw new Error(`unexpected custom parameter path: ${loadedIniFileSession.parameters.opfsPath}`); } - if ( - loadedIniFileSession.toolTable.opfsPath !== - "linuxcnc/machines/browser-ini-file-session/browser-custom-tool.tbl" - ) { - throw new Error(`unexpected custom tool path: ${loadedIniFileSession.toolTable.opfsPath}`); - } verifyExpectedOutput( "opfs_load_ini_named_parameter_file", loadedIniFileSession.parameters.result, @@ -9319,6 +9344,12 @@ wasmPath: loadedIniFileSession.toolTable.wasmPath, }, ); + assertOpfsToolTableStaging( + "opfs_save_ini_named_tool_table_staging", + savedIniNamedToolTable, + "linuxcnc/machines/browser-ini-file-session/browser-custom-tool.tbl", + "/work/browser-custom-tool.tbl", + ); verifyExpectedOutput( "opfs_save_ini_named_tool_table", savedIniNamedToolTable.result, @@ -9380,18 +9411,18 @@ toolTableWasmPath: "/work/browser-explicit-tool.tbl", }, ); + assertOpfsToolTableStaging( + "opfs_load_explicit_tool_table_staging", + loadedIniOverrideSession.toolTable, + "linuxcnc/machines/browser-ini-override-session/browser-explicit-tool.tbl", + "/work/browser-explicit-tool.tbl", + ); if ( loadedIniOverrideSession.parameters.opfsPath !== "linuxcnc/machines/browser-ini-override-session/browser-explicit.var" ) { throw new Error(`unexpected explicit parameter path: ${loadedIniOverrideSession.parameters.opfsPath}`); } - if ( - loadedIniOverrideSession.toolTable.opfsPath !== - "linuxcnc/machines/browser-ini-override-session/browser-explicit-tool.tbl" - ) { - throw new Error(`unexpected explicit tool path: ${loadedIniOverrideSession.toolTable.opfsPath}`); - } verifyExpectedOutput( "opfs_load_explicit_parameter_file", loadedIniOverrideSession.parameters.result, @@ -9481,12 +9512,12 @@ wasmPath: loadedIniOverrideSession.toolTable.wasmPath, }, ); - if ( - savedExplicitToolTable.opfsPath !== - "linuxcnc/machines/browser-ini-override-session/browser-explicit-tool.tbl" - ) { - throw new Error(`unexpected explicit saved tool path: ${savedExplicitToolTable.opfsPath}`); - } + assertOpfsToolTableStaging( + "opfs_save_explicit_tool_table_staging", + savedExplicitToolTable, + "linuxcnc/machines/browser-ini-override-session/browser-explicit-tool.tbl", + "/work/browser-explicit-tool.tbl", + ); verifyExpectedOutput( "opfs_save_explicit_tool_table", savedExplicitToolTable.result,