Guard browser OPFS custom session staging

This commit is contained in:
2026-06-13 22:10:33 +08:00
parent 40f95af188
commit ff6dd315ee
2 changed files with 115 additions and 47 deletions

View File

@@ -1949,3 +1949,65 @@ LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime semantics。
```bash ```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
``` ```
三十三、2026-06-13 继续执行记录browser OPFS custom session staging guard
1. 本批目标。
继续 staged path guard inventory 第二十八轮,收敛 browser OPFS smoke 中 custom session
路径三件套:
```text
browser-ini-file-session
browser-ini-override-session
```
2. 已完成改动。
- 扩展 browser smoke 的 `assertOpfsSessionStaging(...)`,支持默认 OPFS path 加 custom
`opfs` override
- 普通/default session 调用改为显式 `wasm` path map
- INI-derived `browser-ini-file-session` 的 INI、custom parameter、custom tool table
staging 断言改为走 session helper
- explicit override `browser-ini-override-session` 的 INI、explicit parameter、explicit
tool table staging 断言改为走 session helper
- 保留 custom filename 的显式 expected OPFS path
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
LinuxCNC-owned 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
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 custom session staging
```
4. 下一步工作建议。
继续 staged path guard inventory 第二十九轮,优先扫描 browser OPFS smoke 中 invalid
INI parameter/tool-table rejection 的 staging guard收敛为 invalid-session helper
仍只加 browser/OPFS boundary guard不改变 LinuxCNC-owned interpreter、INI、tool、
parameter 或 runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

View File

@@ -4511,27 +4511,33 @@
generatedToolTablePath(toolTable.wasmPath, expectedWasmPath); generatedToolTablePath(toolTable.wasmPath, expectedWasmPath);
} }
function assertOpfsSessionStaging(label, session, machineId, expectedWasmPaths) { function assertOpfsSessionStaging(label, session, machineId, expectedPaths) {
if (session.machineId !== machineId) { if (session.machineId !== machineId) {
throw new Error(`${label}: unexpected machine id ${session.machineId}`); throw new Error(`${label}: unexpected machine id ${session.machineId}`);
} }
const expectedOpfsPaths = {
ini: `linuxcnc/machines/${machineId}/machine.ini`,
parameters: `linuxcnc/machines/${machineId}/linuxcnc.var`,
toolTable: `linuxcnc/machines/${machineId}/tool.tbl`,
...(expectedPaths.opfs ?? {}),
};
assertOpfsIniStaging( assertOpfsIniStaging(
`${label}_ini`, `${label}_ini`,
session.ini, session.ini,
`linuxcnc/machines/${machineId}/machine.ini`, expectedOpfsPaths.ini,
expectedWasmPaths.ini, expectedPaths.wasm.ini,
); );
assertOpfsToolTableStaging( assertOpfsToolTableStaging(
`${label}_tool_table`, `${label}_tool_table`,
session.toolTable, session.toolTable,
`linuxcnc/machines/${machineId}/tool.tbl`, expectedOpfsPaths.toolTable,
expectedWasmPaths.toolTable, expectedPaths.wasm.toolTable,
); );
assertOpfsParameterStaging( assertOpfsParameterStaging(
`${label}_parameters`, `${label}_parameters`,
session.parameters, session.parameters,
`linuxcnc/machines/${machineId}/linuxcnc.var`, expectedOpfsPaths.parameters,
expectedWasmPaths.parameters, expectedPaths.wasm.parameters,
); );
} }
@@ -9081,10 +9087,12 @@
loadedSession, loadedSession,
"browser-interp", "browser-interp",
{ {
wasm: {
ini: "/work/browser-machine.ini", ini: "/work/browser-machine.ini",
parameters: "/work/browser-linuxcnc.var", parameters: "/work/browser-linuxcnc.var",
toolTable: "/work/browser-tool.tbl", toolTable: "/work/browser-tool.tbl",
}, },
},
); );
verifyExpectedOutput( verifyExpectedOutput(
"opfs_restore_parameters", "opfs_restore_parameters",
@@ -9245,10 +9253,12 @@
loadedRandomSession, loadedRandomSession,
"browser-random-toolchanger", "browser-random-toolchanger",
{ {
wasm: {
ini: "/work/browser-random-machine.ini", ini: "/work/browser-random-machine.ini",
parameters: "/work/browser-random-linuxcnc.var", parameters: "/work/browser-random-linuxcnc.var",
toolTable: "/work/browser-random-tool.tbl", toolTable: "/work/browser-random-tool.tbl",
}, },
},
); );
verifyExpectedOutput( verifyExpectedOutput(
"opfs_load_random_tool_table", "opfs_load_random_tool_table",
@@ -9348,23 +9358,21 @@
toolTableWasmPath: "/work/browser-custom-tool.tbl", toolTableWasmPath: "/work/browser-custom-tool.tbl",
}, },
); );
assertOpfsIniStaging( assertOpfsSessionStaging(
"opfs_load_ini_named_ini_staging", "opfs_load_ini_named_session_staging",
loadedIniFileSession.ini, loadedIniFileSession,
"linuxcnc/machines/browser-ini-file-session/machine.ini", "browser-ini-file-session",
"/work/browser-ini-file-session.ini", {
); opfs: {
assertOpfsToolTableStaging( parameters: "linuxcnc/machines/browser-ini-file-session/browser-custom.var",
"opfs_load_ini_named_tool_table_staging", toolTable: "linuxcnc/machines/browser-ini-file-session/browser-custom-tool.tbl",
loadedIniFileSession.toolTable, },
"linuxcnc/machines/browser-ini-file-session/browser-custom-tool.tbl", wasm: {
"/work/browser-custom-tool.tbl", ini: "/work/browser-ini-file-session.ini",
); parameters: "/work/browser-custom.var",
assertOpfsParameterStaging( toolTable: "/work/browser-custom-tool.tbl",
"opfs_load_ini_named_parameters_staging", },
loadedIniFileSession.parameters, },
"linuxcnc/machines/browser-ini-file-session/browser-custom.var",
"/work/browser-custom.var",
); );
verifyExpectedOutput( verifyExpectedOutput(
"opfs_load_ini_named_parameter_file", "opfs_load_ini_named_parameter_file",
@@ -9522,23 +9530,21 @@
toolTableWasmPath: "/work/browser-explicit-tool.tbl", toolTableWasmPath: "/work/browser-explicit-tool.tbl",
}, },
); );
assertOpfsIniStaging( assertOpfsSessionStaging(
"opfs_load_explicit_ini_staging", "opfs_load_explicit_session_staging",
loadedIniOverrideSession.ini, loadedIniOverrideSession,
"linuxcnc/machines/browser-ini-override-session/machine.ini", "browser-ini-override-session",
"/work/browser-ini-override-session.ini", {
); opfs: {
assertOpfsToolTableStaging( parameters: "linuxcnc/machines/browser-ini-override-session/browser-explicit.var",
"opfs_load_explicit_tool_table_staging", toolTable: "linuxcnc/machines/browser-ini-override-session/browser-explicit-tool.tbl",
loadedIniOverrideSession.toolTable, },
"linuxcnc/machines/browser-ini-override-session/browser-explicit-tool.tbl", wasm: {
"/work/browser-explicit-tool.tbl", ini: "/work/browser-ini-override-session.ini",
); parameters: "/work/browser-explicit.var",
assertOpfsParameterStaging( toolTable: "/work/browser-explicit-tool.tbl",
"opfs_load_explicit_parameters_staging", },
loadedIniOverrideSession.parameters, },
"linuxcnc/machines/browser-ini-override-session/browser-explicit.var",
"/work/browser-explicit.var",
); );
verifyExpectedOutput( verifyExpectedOutput(
"opfs_load_explicit_parameter_file", "opfs_load_explicit_parameter_file",