3175 lines
134 KiB
Plaintext
3175 lines
134 KiB
Plaintext
项目整体完成情况与后续执行计划
|
||
|
||
生成时间:2026-06-15 CST
|
||
|
||
本文件接替 `text11.txt`。后续工作按 `text12.txt` 执行;除非明确要求审计旧记录,
|
||
不要再回到 `text1/text2/text3/text4/text5/text6/text7/text8/text9/text10/text11`
|
||
扩展进度。`text11.txt` 作为历史归档保留。
|
||
|
||
一、第一原则:加快实质性推进
|
||
|
||
后续批次必须以“实质性能力优先”为第一遵守原则。
|
||
|
||
1. 优先级从高到低:
|
||
|
||
- OPFS/session persistence;
|
||
- SDK/API surface;
|
||
- browser/UI workflow;
|
||
- sim config coverage promotion;
|
||
- host/runtime boundary proof;
|
||
- 文档化可执行工作流。
|
||
|
||
2. 每批默认应产出至少一种可直接复用的能力:
|
||
|
||
- 可调用 helper;
|
||
- 可复用 API;
|
||
- 可验证用户流程;
|
||
- 可执行 gate;
|
||
- 可提升覆盖面的 runtime boundary proof;
|
||
- 能直接指导下一步实现的设计/清单。
|
||
|
||
3. 暂停低收益推进:
|
||
|
||
- 不再把“局部常量化、路径变量收敛、断言分组整理”作为主目标;
|
||
- 只有当它支撑可复用 workflow/API/gate 时,才允许做测试胶水;
|
||
- 禁止为了推进而扩大 CNC 语义边界;
|
||
- 禁止启动性能测试,除非已有明确用户流程需要性能基线。
|
||
|
||
4. LinuxCNC 仍是唯一 CNC 语义来源:
|
||
|
||
- G-code、remap、tool、parameter、planner、kinematics、user-M、tool DB、Python remap
|
||
等语义必须来自 LinuxCNC upstream 或 vendored LinuxCNC C/C++/配置/脚本源码;
|
||
- JS/browser 只允许做 build、source sync、runtime shim、filesystem staging、OPFS、
|
||
WASM/browser boundary、测试胶水、文档和机器可读 gate/artifact;
|
||
- 不在 JS 中重写 G-code 或 CNC 语义;
|
||
- 不修改 vendored LinuxCNC 源文件来让测试通过;
|
||
- 不把 full-process/HAL/UI/Python/tool DB 依赖伪装成 standalone pass;
|
||
- 不把 expected failure 硬改成 pass,除非已有 LinuxCNC-owned runtime proof,并且
|
||
native、Node、browser gate 都按顺序通过;
|
||
- browser 不能依赖目录枚举。
|
||
|
||
二、续接状态与防重规则
|
||
|
||
1. 当前续接点。
|
||
|
||
`text11.txt` 已推进到:
|
||
|
||
```text
|
||
二十四、2026-06-15 继续执行记录:INI panel control-page refresh workflow helper
|
||
```
|
||
|
||
该批已提交:
|
||
|
||
```text
|
||
ed5d03e 推进 INI 面板 control-page refresh workflow helper
|
||
```
|
||
|
||
本文件从 `text12.txt` 重新开始记录后续进度。
|
||
|
||
2. 每轮开始前必须先执行:
|
||
|
||
```bash
|
||
git status --short
|
||
git log -5 --oneline
|
||
tail -n 120 text12.txt
|
||
awk '/^[一二三四五六七八九十百]+、/ {print}' text12.txt | sort | uniq -d
|
||
```
|
||
|
||
执行规则:
|
||
|
||
- 如果 `git status --short` 是 clean,且最新提交已经包含当前建议工作,不要重复追加记录;
|
||
- 每轮只追加一个新的中文编号记录;
|
||
- 提交前再次检查标题唯一性;
|
||
- `text12.txt` 只记录新的后续进度,不复制 `text11.txt` 的长历史;
|
||
- 每批完成后,如果要写记录,先写 `text12.txt`,再提交该批代码和记录;
|
||
- 如果发现重复记录,先做 dedupe 清理并提交,再继续新功能或新 guard;
|
||
- `text11.txt` 不再追加新进度,除非明确要求审计或修正历史记录。
|
||
|
||
三、当前完成情况摘要
|
||
|
||
1. 当前工作树状态。
|
||
|
||
切换到 `text12.txt` 前已确认:
|
||
|
||
```text
|
||
git status --short: clean
|
||
```
|
||
|
||
当前最近提交:
|
||
|
||
```text
|
||
ed5d03e 推进 INI 面板 control-page refresh workflow helper
|
||
213514f 推进 INI 面板 shell view-model helper
|
||
b330f7b 推进 INI 面板 launcher link view-model helper
|
||
ac46345 推进 INI 面板 entry docs strict gate
|
||
ef4769b 推进 INI 面板 entry doc
|
||
```
|
||
|
||
2. 关键基线保持稳定。
|
||
|
||
- `linuxcnc/nc_files` native Layer 1:
|
||
- `total 107`
|
||
- `pass 101`
|
||
- `expected_fail 6`
|
||
- `unexpected_fail 0`
|
||
- `linuxcnc/configs/sim` native Layer 2:
|
||
- `total 159`
|
||
- `pass 151`
|
||
- `expected_fail 8`
|
||
- `unexpected_fail 0`
|
||
- Node sim-config inventory:
|
||
- `executed=28`
|
||
- `passed=28`
|
||
- `skipped=131`
|
||
- `unexpected_fail=0`
|
||
|
||
3. blocked runtime family 仍未 promotion。
|
||
|
||
仍 blocked,不允许 promotion:
|
||
|
||
- `L4-USER-M-PROCESS`
|
||
- `L4-TOOL-DB`
|
||
- `L4-PYTHON-REMAP`
|
||
|
||
当前 host 仍按缺少 LinuxCNC host runtime 处理,不执行任何:
|
||
|
||
```bash
|
||
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
|
||
ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh
|
||
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh
|
||
```
|
||
|
||
四、当前实质能力进展
|
||
|
||
1. INI panel/UI helper 能力。
|
||
|
||
当前 UI helper 已覆盖:
|
||
|
||
- run summary;
|
||
- run workflow;
|
||
- session snapshot summary;
|
||
- session load summary;
|
||
- machine file save/load summary;
|
||
- panel state summary;
|
||
- session snapshot save/restore workflow;
|
||
- entry manifest、launcher link view-model、shell view-model;
|
||
- read-only control-page controller;
|
||
- read-only control-page refresh workflow。
|
||
|
||
当前聚合验证入口:
|
||
|
||
```bash
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
```
|
||
|
||
当前 `verify_ui_node_smokes.sh` 覆盖:
|
||
|
||
```text
|
||
ini_panel_run_summary_node_smoke=ok
|
||
ini_panel_run_workflow_node_smoke=ok
|
||
ini_panel_session_summary_node_smoke=ok
|
||
ini_panel_session_workflow_node_smoke=ok
|
||
ini_panel_machine_file_summary_node_smoke=ok
|
||
ini_panel_state_summary_node_smoke=ok
|
||
ini_panel_control_page_controller_node_smoke=ok
|
||
ini_panel_control_page_refresh_workflow_node_smoke=ok
|
||
ini_panel_entry_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
```
|
||
|
||
2. Browser/UI workflow 验证。
|
||
|
||
当前 browser INI panel smoke 覆盖真实 OPFS/session persistence workflow:
|
||
|
||
```bash
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh
|
||
```
|
||
|
||
关键输出:
|
||
|
||
```text
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
```
|
||
|
||
五、当前必须保持通过的验证入口
|
||
|
||
每批后续改动至少运行:
|
||
|
||
```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_ini_panel_browser.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
wasm-port/tests/host/verify_host_smokes.sh
|
||
```
|
||
|
||
如果涉及 browser interpreter smoke,再运行:
|
||
|
||
```bash
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
|
||
```
|
||
|
||
涉及 native baseline 或大范围 source/staging 改动时,再运行:
|
||
|
||
```bash
|
||
wasm-port/tests/native/verify_nc_files.sh
|
||
wasm-port/tests/native/verify_sim_configs.sh
|
||
```
|
||
|
||
六、下一步建议
|
||
|
||
继续推进 OPFS/session persistence 的实质链路。下一批建议抽出
|
||
`loadMachineSessionForControlPageWorkflow()` 或等价 helper,让 read-only control page 能以明确
|
||
状态模型描述 embedded panel API readiness 和首帧 session state;仍保持只读,不新增控制按钮,
|
||
不解析 G-code。
|
||
|
||
一、2026-06-15 继续执行记录:INI panel control-page session readiness workflow helper
|
||
|
||
本轮按“第一原则:加快实质性推进”切换到 `text12.txt` 续接,并推进 OPFS/session
|
||
persistence 相关 browser/UI workflow:新增 read-only control-page session readiness workflow,
|
||
让外层页面能以明确状态模型读取 embedded panel API readiness 和首帧 session state。
|
||
|
||
完成内容:
|
||
|
||
- 新建 `text12.txt`,接替 `text11.txt`;后续记录从本文件继续;
|
||
- 新增 `wasm-port/runtime/ui/ini-panel/control-page-session-workflow.js`;
|
||
- 新增 `createControlPageSessionLoadState(input)`,固定 control-page session load 状态结构;
|
||
- 新增 `loadMachineSessionForControlPageWorkflow(input)`,统一描述:
|
||
- `waiting-panel`:embedded panel frame 尚不可读;
|
||
- `waiting-api`:panel window 可读但 API 尚未暴露;
|
||
- `waiting-session`:API 已可读但 control view 尚未就绪;
|
||
- `ready`:state bundle、workflow status 和 control view 可读取;
|
||
- `error`:读取 panel window/API/control view 时失败;
|
||
- `createMachineSessionControlPageController()` 新增 `loadSessionState()`;
|
||
- `control-page.js` 对浏览器页面暴露 `loadControlPageSessionState`;
|
||
- `ui-shell.js` re-export session readiness workflow helper,并在
|
||
`createIniPanelShellViewModel()` 中暴露 `controlPage.loadSessionState`;
|
||
- 新增 `wasm-port/tests/ui/node/verify_ini_panel_control_page_session_workflow.mjs` 和 `.sh`;
|
||
- `verify_ui_node_smokes.sh` 纳入 session readiness workflow smoke;
|
||
- browser control-page smoke 验证 `loadControlPageSessionState().phase === "ready"`;
|
||
- `panel-entry.md` 和 entry docs gate 同步记录 session readiness workflow API;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_control_page_session_workflow.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_control_page_controller.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_control_page_session_workflow_node_smoke=ok
|
||
ini_panel_control_page_controller_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
browser_interp_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence 的实质链路。下一批建议把 `load-session` 按钮路径抽成
|
||
`loadMachineSessionIntoWasmWorkflow()`,统一返回 loaded session、load summary、field state 和
|
||
log lines;仍保持由 LinuxCNC/OPFS bridge 执行实际语义,不在 JS 中解释 CNC 行为。
|
||
|
||
二、2026-06-15 继续执行记录:INI panel load-session workflow helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 OPFS/session persistence 主链路,抽出
|
||
`load-session` 按钮路径的可复用 workflow helper,统一返回 loaded session、load summary、
|
||
field state 和 log lines。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/session-workflow.js` 新增
|
||
`createMachineSessionLoadFieldState(summary)`;
|
||
- `session-workflow.js` 新增 `machineSessionLoadWorkflowLogLines(summary)`;
|
||
- `session-workflow.js` 新增 `loadMachineSessionIntoWasmWorkflow({ loadSession })`;
|
||
- workflow 只调用外部传入的 LinuxCNC/OPFS session loader,并基于现有
|
||
`createMachineSessionLoadSummary()` 生成 UI 状态;
|
||
- `wasm-port/runtime/ui/ini-panel/app.js` 的 `load-session` handler 改为调用
|
||
`loadMachineSessionIntoWasmWorkflow()`;
|
||
- `app.js` 仍由 `loadMachineSessionFromOpfs()` 通过 LinuxCNC/OPFS bridge 执行实际 session
|
||
staging;
|
||
- `wasm-port/tests/ui/node/verify_ini_panel_session_workflow.mjs` 覆盖 load workflow 的
|
||
loader 调用、summary、field state、log lines 和缺失 loader 错误;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_session_workflow.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_session_workflow_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
browser_interp_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence 的实质链路。下一批建议将 `restore-load-session` 路径改为复用
|
||
`loadMachineSessionIntoWasmWorkflow()`,避免 restore+load 与单独 load 的 field/log 状态模型
|
||
分叉;仍保持由 LinuxCNC/OPFS bridge 执行实际语义,不在 JS 中解释 CNC 行为。
|
||
|
||
三、2026-06-15 继续执行记录:INI panel restore-load workflow 复用 load-session helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 OPFS/session persistence 主链路,将
|
||
`restore-load-session` 路径收敛到已存在的 `loadMachineSessionIntoWasmWorkflow()`,让单独
|
||
load 与 restore+load 共享同一套 load summary、field state 和 log lines 模型。
|
||
|
||
完成内容:
|
||
|
||
- `restoreMachineSessionSnapshotWorkflow()` 的 restore+load 分支改为调用
|
||
`loadMachineSessionIntoWasmWorkflow({ loadSession })`;
|
||
- restore+load 返回的 `loadedSession`、`loadSummary` 和 INI/parameter/tool-table field state
|
||
直接来自 load workflow;
|
||
- restore+load 日志纳入 load workflow 的统一首行:
|
||
`Loaded machine session into the interpreter WASM filesystem.`;
|
||
- 删除 `app.js` 中已不再使用的 `sessionSnapshotSummaryLogLines` import;
|
||
- `verify_ini_panel_session_workflow.mjs` 增加 restore+load 复用断言,确认
|
||
`loadSummary` 与单独 load workflow 一致,且 `loadedSession` 保持 loader 返回对象;
|
||
- `ui-session-summary-helpers.md` 同步说明 restore-load 复用 load workflow;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_session_workflow.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_session_workflow_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
browser_interp_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence 的实质链路。下一批建议抽出 `run-session` 首帧 readiness
|
||
或 run 前置状态 helper,把“已加载 session、已选择/恢复 snapshot、默认 G-code 路径、run
|
||
按钮可执行条件”统一成可复用状态模型;仍保持只描述 UI/host boundary facts,不在 JS 中解释
|
||
G-code、canonical events 或 CNC 运行语义。
|
||
|
||
四、2026-06-15 继续执行记录:INI panel run readiness workflow helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 run 前置状态模型,将 run 按钮可执行条件、
|
||
默认/快照 G-code 选择结果与已加载 session 的 WASM 绑定关系抽成可复用 readiness helper,
|
||
让 app、state summary、control view 和 Node smoke 共享同一份运行前状态。
|
||
|
||
完成内容:
|
||
|
||
- 新增 `wasm-port/runtime/ui/ini-panel/run-workflow.js` 的
|
||
`createRunSessionReadinessState(input)`;
|
||
- `runGcodeSessionWorkflow()` 现在先生成 readiness state,再复用其中的选定程序和 loaded
|
||
session 信息执行实际 run;
|
||
- readiness state 固定返回:
|
||
- `phase`
|
||
- `canRun`
|
||
- `missing`
|
||
- `loadedSession`
|
||
- `snapshot`
|
||
- `defaultProgram`
|
||
- `program`
|
||
- `runButton`
|
||
- `wasm-port/runtime/ui/ini-panel/app.js` 在点击 Run 前先写入 readiness state,并把
|
||
`selectedProgram`、`runReadiness` 和 field state 一起更新到 panel state;
|
||
- `wasm-port/runtime/ui/ini-panel/panel-state-summary.js` 新增 `runReadiness` 的 report /
|
||
workflowStatus / control-view 映射;
|
||
- `createMachineSessionControlView()` 的 Run 区新增 `Ready` 与 `Button` 行,用于 read-only
|
||
control page 读取首帧 run 前置状态;
|
||
- `wasm-port/tests/ui/node/verify_ini_panel_run_workflow.mjs` 覆盖 readiness helper 与
|
||
workflow readiness 返回值;
|
||
- `wasm-port/tests/ui/node/verify_ini_panel_state_summary.mjs` 覆盖 runReadiness 在 report、
|
||
bundle、workflowStatus 和 control view 中的映射;
|
||
- `wasm-port/docs/ui-run-summary-helpers.md` 和 `wasm-port/docs/ui-panel-state-summary.md`
|
||
同步说明 readiness helper 与 runReadiness 状态;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_run_workflow.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_state_summary.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_run_workflow_node_smoke=ok
|
||
ini_panel_state_summary_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
browser_interp_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence 的实质链路。下一批建议将 `load-session` 与
|
||
`restore-load-session` 的 field/log 路径再做一次轻量整合,优先把“已加载 session、快照恢复、
|
||
run readiness、run 结果”汇总成一个更上层的只读工作流状态对象;仍保持只描述 UI/host
|
||
boundary facts,不在 JS 中解释 G-code、canonical events 或 CNC 运行语义。
|
||
|
||
五、2026-06-15 继续执行记录:INI panel workflow overview helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进更上层只读工作流状态对象,将已归一化的
|
||
report、run readiness、session snapshot/load、run result 和 control page 需要的状态字段
|
||
再压成单一 workflow overview,供 state bundle、workflow status 和 read-only control view
|
||
共享。
|
||
|
||
完成内容:
|
||
|
||
- 新增 `wasm-port/runtime/ui/ini-panel/panel-state-summary.js` 的
|
||
`createMachineSessionWorkflowOverview(report)`;
|
||
- `createMachineSessionWorkflowStatus()` 现在额外返回 `overview`;
|
||
- `createMachineSessionStateBundle()` 现在额外返回 `overview`;
|
||
- `createMachineSessionControlView()` 新增 `Workflow` 区,显示:
|
||
- `Phase`
|
||
- `Missing`
|
||
- `Last action`
|
||
- `Error`
|
||
- overview 只组合已有的 readiness、session、loaded、runReadiness、run 和 status 信息;
|
||
- `Missing` 现在优先基于 loaded session / run readiness 的已知边界事实判断,不再依赖 DOM;
|
||
- `wasm-port/tests/ui/node/verify_ini_panel_state_summary.mjs` 覆盖 overview helper、bundle、
|
||
workflow status 和 control view;
|
||
- `wasm-port/tests/ui/node/verify_ini_panel_control_page_session_workflow.mjs` 同步带上 overview;
|
||
- `wasm-port/docs/ui-panel-state-summary.md` 同步说明 overview helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_state_summary.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_control_page_session_workflow.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_state_summary_node_smoke=ok
|
||
ini_panel_control_page_session_workflow_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
browser_interp_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence 的实质链路。下一批建议把 `load-session`、`restore-load-session`
|
||
和 `run` 的状态入口再向上收拢成一个稳定的只读状态 API,优先服务 control page 和 shell 的
|
||
统一读取;仍保持只描述 UI/host boundary facts,不在 JS 中解释 G-code、canonical events 或
|
||
CNC 运行语义。
|
||
|
||
六、2026-06-15 继续执行记录:INI panel readonly status API
|
||
|
||
本轮按“第一原则:加快实质性推进”继续把 control page / shell 的状态入口向上收拢,新增稳定的
|
||
read-only status API,让外层 UI 能一次读取 state bundle、workflow status、overview、control view、
|
||
session、run readiness 和 run 结果。
|
||
|
||
完成内容:
|
||
|
||
- 新增 `wasm-port/runtime/ui/ini-panel/readonly-status-api.js`;
|
||
- 新增 `createMachineSessionReadonlyStatus(input)`,固定只读状态对象 shape;
|
||
- 新增 `readMachineSessionReadonlyStatus({ getPanelApi, getControlView })`,通过现有 panel API
|
||
读取 `stateBundle`、`workflowStatus` 和 `controlView`;
|
||
- `createMachineSessionControlPageController()` 新增 `readStatus()`;
|
||
- `ui-shell.js` re-export readonly status API;
|
||
- `createIniPanelShellViewModel()` 的 `controlPage` 新增 `readStatus`;
|
||
- 新增 `wasm-port/tests/ui/node/verify_ini_panel_readonly_status_api.mjs` 和 `.sh`;
|
||
- `verify_ui_node_smokes.sh` 纳入 readonly status API smoke;
|
||
- `verify_ini_panel_control_page_controller.mjs` 覆盖 controller `readStatus()`;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell export、view-model 和 controller 读取路径;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 API;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_readonly_status_api.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_control_page_controller.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_readonly_status_api_node_smoke=ok
|
||
ini_panel_control_page_controller_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
browser_interp_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议把 readonly status API 的 shape 写入一个轻量 SDK-facing
|
||
入口或 manifest,方便外部页面稳定发现 `readStatus()`、`loadSessionState()`、`refresh()` 和
|
||
`renderView()`;仍保持只描述 UI/host boundary facts,不在 JS 中解释 G-code、canonical events
|
||
或 CNC 运行语义。
|
||
|
||
七、2026-06-15 继续执行记录:INI panel readonly status API manifest
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,把 readonly status API 的 shape
|
||
写入轻量 manifest,方便外部页面稳定发现 `readStatus()`、`loadSessionState()`、`refresh()` 和
|
||
`renderView()`。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/readonly-status-api.js` 新增
|
||
`createMachineSessionReadonlyStatusApiManifest()`;
|
||
- manifest 固定返回:
|
||
- `apiName`
|
||
- `methods.readStatus`
|
||
- `relatedControlPageMethods`
|
||
- `statusFields`
|
||
- `ui-shell.js` re-export `createMachineSessionReadonlyStatusApiManifest()`;
|
||
- `createIniPanelShellViewModel()` 的 `controlPage` 新增 `readonlyStatusApiManifest`;
|
||
- `verify_ini_panel_readonly_status_api.mjs` 覆盖 manifest shape;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 中的 manifest 暴露;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录 manifest 入口;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_readonly_status_api.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_readonly_status_api_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
browser_interp_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议为 shell-facing API 增加一个 focused contract smoke,
|
||
直接校验 `createIniPanelShellViewModel().controlPage` 的所有方法名、manifest 字段和只读边界,
|
||
使外部页面接入前能运行一个快速 contract gate;仍保持只描述 UI/host boundary facts,不在 JS
|
||
中解释 G-code、canonical events 或 CNC 运行语义。
|
||
|
||
八、2026-06-15 继续执行记录:INI panel shell control-page contract helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,为 shell-facing control-page API
|
||
增加可复用 contract helper 和 focused contract gate,使外部页面接入前能快速校验方法名、
|
||
manifest 字段和只读边界。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增
|
||
`createIniPanelShellControlPageContract()`;
|
||
- `createIniPanelShellViewModel().controlPage` 新增 `contract`;
|
||
- contract 固定描述:
|
||
- `methodNames`
|
||
- `readonlyStatusApiManifest`
|
||
- `readonlyStatusApiMethodNames`
|
||
- `readonlyStatusApiStatusFields`
|
||
- `relatedControlPageMethods`
|
||
- 新增 `verify_ini_panel_shell_control_page_contract.mjs/.sh` focused contract smoke;
|
||
- `verify_ui_node_smokes.sh` 接入 shell control-page contract smoke;
|
||
- `verify_ini_panel_ui_shell.mjs` 与 `verify_ini_panel_entry_docs.mjs` 覆盖 contract 暴露;
|
||
- `docs/panel-entry.md` 记录 `createIniPanelShellControlPageContract()` 和
|
||
`controlPage.contract`;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_control_page_contract.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.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
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh
|
||
wasm-port/tests/host/verify_host_smokes.sh
|
||
```
|
||
|
||
关键输出:
|
||
|
||
```text
|
||
ini_panel_shell_control_page_contract_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=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
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
host_wasm_opfs_browser_smokes=ok
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 browser/UI workflow。下一批建议让 browser control-page smoke 读取并校验
|
||
`createIniPanelShellViewModel().controlPage.contract` 或等价 browser-exposed contract,
|
||
把 Node 端 contract gate 延伸到真实嵌入页面流程;仍保持只读,不新增控制按钮,不解析 G-code,
|
||
不解释 canonical events。
|
||
|
||
九、2026-06-15 继续执行记录:INI panel browser control-page contract exposure
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把 Node 端 shell control-page
|
||
contract 延伸到真实 browser iframe 流程,使 `control-page.html` 暴露可读 contract,并由
|
||
browser smoke 在读取 embedded panel state 前校验 API shape。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/control-page.js` 引入
|
||
`createIniPanelShellControlPageContract()`;
|
||
- `window.linuxCncIniPanelControlPageApi` 新增 `getControlPageContract()`;
|
||
- `ini_panel_control_page_smoke.html` 在真实 control-page iframe 中校验:
|
||
- `methodNames`
|
||
- `readonlyStatusApiManifest.apiName`
|
||
- `readonlyStatusApiMethodNames`
|
||
- `relatedControlPageMethods`
|
||
- `readonlyStatusApiStatusFields`
|
||
- `docs/panel-entry.md` 记录
|
||
`linuxCncIniPanelControlPageApi.getControlPageContract()` browser API;
|
||
- `verify_ini_panel_entry_docs.mjs` 覆盖 browser-exposed contract API 文档与源码入口;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence。下一批建议增加一个 browser control-page readonly status
|
||
snapshot smoke,直接通过 `linuxCncIniPanelControlPageApi` 读取 `readStatus()` 或等价只读状态,
|
||
并校验 save/load session 后的 `stateBundle`、`workflowStatus`、`controlView` 一致暴露;仍保持
|
||
只读,不新增控制按钮,不解析 G-code,不解释 canonical events。
|
||
|
||
十、2026-06-15 继续执行记录:INI panel browser readonly status snapshot
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 OPFS/session persistence 和 browser/UI workflow,
|
||
让真实 browser control-page API 暴露只读状态 snapshot,并在 save/load session 与 run workflow
|
||
后校验 `stateBundle`、`workflowStatus`、`controlView` 一致可读。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/control-page.js` 在
|
||
`window.linuxCncIniPanelControlPageApi` 新增 `readControlPageStatus()`;
|
||
- `ini_panel_control_page_smoke.html` 在真实 control-page iframe 中校验:
|
||
- 初始 readonly status last action;
|
||
- load-session 后 `stateBundle.report.readiness.parameterFile`;
|
||
- load-session 后 `workflowStatus.lastAction`;
|
||
- load-session 后 `controlView.status.lastAction`;
|
||
- load-session 后 `session.parameterFile`;
|
||
- run-gcode 后 readonly status `lastAction` 与 `runStatus`;
|
||
- run-gcode 后 `workflowStatus` 与 `controlView` 一致暴露;
|
||
- `docs/panel-entry.md` 记录
|
||
`linuxCncIniPanelControlPageApi.readControlPageStatus()` browser API;
|
||
- `verify_ini_panel_entry_docs.mjs` 覆盖 browser readonly status API 文档与源码入口;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 LinuxCNC interpreter、tool、parameter、planner 或 LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议为 browser control-page API 增加一个轻量 manifest 或
|
||
`getControlPageApiMethods()`,明确 `getControlPageContract()`、`readControlPageStatus()`、
|
||
`loadControlPageSessionState()`、`refreshControlPage()`、`renderControlPage()` 的 browser-exposed
|
||
方法清单,并由 Node/browser gate 双向校验;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
十一、2026-06-15 继续执行记录:INI panel browser control-page API methods manifest
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,为真实 browser control-page API
|
||
增加轻量方法清单,使外部页面能先发现 browser-exposed 方法,再调用只读 contract、status、
|
||
session load 与 refresh/render workflow。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/control-page.js` 新增
|
||
`createControlPageBrowserApiMethods()`;
|
||
- `window.linuxCncIniPanelControlPageApi` 新增 `getControlPageApiMethods()`;
|
||
- browser-exposed 方法清单固定包含:
|
||
- `getControlPageApiMethods`
|
||
- `getControlPageContract`
|
||
- `getControlView`
|
||
- `getPanelApi`
|
||
- `loadControlPageSessionState`
|
||
- `readControlPageStatus`
|
||
- `refreshControlPage`
|
||
- `renderControlPage`
|
||
- `ini_panel_control_page_smoke.html` 在真实 control-page iframe 中校验方法清单与 namespace
|
||
实际函数一致;
|
||
- `docs/panel-entry.md` 记录
|
||
`linuxCncIniPanelControlPageApi.getControlPageApiMethods()` browser API;
|
||
- `verify_ini_panel_entry_docs.mjs` 覆盖 browser API methods helper、源码入口和文档入口;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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/UI workflow。下一批建议把 browser control-page API methods manifest 纳入
|
||
launch page 或 shell view-model 暴露,让入口页也能展示/消费可用 read-only control-page API
|
||
清单;仍保持只读,不新增控制按钮,不解析 G-code,不解释 canonical events。
|
||
|
||
十二、2026-06-15 继续执行记录:INI panel launch exposes control-page API methods
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把 browser control-page API
|
||
methods manifest 纳入 shell view-model 和 launch page,使入口页也能消费可用 read-only
|
||
control-page API 清单,而不需要先加载 control-page iframe。
|
||
|
||
完成内容:
|
||
|
||
- `createControlPageBrowserApiMethods()` 从 `control-page.js` 迁移到 `ui-shell.js`;
|
||
- `control-page.js` 复用 shell 侧 `createControlPageBrowserApiMethods()`;
|
||
- `createIniPanelShellViewModel().controlPage` 新增 `browserApiMethods`;
|
||
- `launch.html` 改为基于 `createIniPanelShellViewModel()` 渲染 launcher links;
|
||
- `launch.html` 新增只读 `window.linuxCncIniPanelLaunchApi`:
|
||
- `getLauncherLinks()`
|
||
- `getControlPageApiMethods()`
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验 launch API 与 shell helper
|
||
返回同一份 control-page browser methods 清单;
|
||
- `verify_ini_panel_ui_shell.mjs`、`verify_ini_panel_shell_control_page_contract.mjs` 和
|
||
`verify_ini_panel_entry_docs.mjs` 覆盖 shell view-model、launch API 与文档入口;
|
||
- `docs/panel-entry.md` 记录 `linuxCncIniPanelLaunchApi.getControlPageApiMethods()`;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_control_page_contract.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_shell_control_page_contract_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议把 `linuxCncIniPanelLaunchApi` 也整理为轻量 launch API
|
||
manifest,明确 `getLauncherLinks()`、`getControlPageApiMethods()`、visible entries 和目标页面
|
||
路径,供外部 shell 在不读 DOM 的情况下发现入口;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
十三、2026-06-15 继续执行记录:INI panel launch API manifest
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,为 launch page 增加轻量 API
|
||
manifest,使外部 shell 可以在不读取 DOM、不加载 control-page iframe 的情况下发现入口方法、
|
||
visible entries、目标页面路径和 read-only control-page browser API 清单。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增
|
||
`createIniPanelLaunchApiManifest()`;
|
||
- `createIniPanelShellViewModel()` 新增 `launchApiManifest`;
|
||
- launch API manifest 固定包含:
|
||
- `apiName`
|
||
- `methods`
|
||
- `visibleEntries`
|
||
- `targetPages`
|
||
- `controlPageApiMethods`
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增 `getLaunchApiManifest()`;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验:
|
||
- manifest API name;
|
||
- manifest method list;
|
||
- visible entry count;
|
||
- control-page target href;
|
||
- launch API 与 shell helper 一致;
|
||
- `verify_ini_panel_ui_shell.mjs`、`verify_ini_panel_shell_control_page_contract.mjs` 和
|
||
`verify_ini_panel_entry_docs.mjs` 覆盖 shell view-model、launch API manifest helper 与文档入口;
|
||
- `docs/panel-entry.md` 记录 `createIniPanelLaunchApiManifest()` 和
|
||
`linuxCncIniPanelLaunchApi.getLaunchApiManifest()`;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_control_page_contract.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_shell_control_page_contract_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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/UI workflow。下一批建议给 launch API manifest 增加一个 focused Node smoke
|
||
`verify_ini_panel_launch_api_manifest.sh`,直接校验 manifest shape、entries 深拷贝、target page
|
||
映射和 control-page API methods,避免这些能力只被大 smoke 间接覆盖;仍保持只读,不新增控制
|
||
按钮,不解析 G-code。
|
||
|
||
十四、2026-06-15 继续执行记录:INI panel launch API manifest focused gate
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,为 launch API manifest 增加
|
||
focused Node gate,直接校验 manifest shape、entries 深拷贝、target page 映射和 control-page
|
||
API methods,避免这些能力只被大 smoke 间接覆盖。
|
||
|
||
完成内容:
|
||
|
||
- 新增 `wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs`;
|
||
- 新增 `wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh`;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖:
|
||
- `apiName`
|
||
- `methods`
|
||
- `visibleEntries`
|
||
- `targetPages`
|
||
- `controlPageApiMethods`
|
||
- manifest 深拷贝行为;
|
||
- custom entries 的 target page 映射;
|
||
- `launch.html` 暴露 `linuxCncIniPanelLaunchApi.getLaunchApiManifest()`;
|
||
- `ui-shell.js` 暴露 `createIniPanelLaunchApiManifest()`;
|
||
- `verify_ui_node_smokes.sh` 接入 launch API manifest focused gate;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence。下一批建议为 launch API manifest 加入 `persistenceCapabilities`
|
||
或等价只读字段,明确 launch 入口可发现的 OPFS/session workflow 能力(如 machine files、
|
||
session snapshot、readonly status),并由 focused Node gate 与 browser launch smoke 双向校验;
|
||
仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
十五、2026-06-15 继续执行记录:INI panel launch persistence capabilities manifest
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 OPFS/session persistence,把 launch API manifest
|
||
扩展为可发现的 persistence capabilities 清单,让入口页和外部 shell 能在不读取 DOM、不加载
|
||
control-page iframe 的情况下发现 machine files、session snapshot 和 readonly status 能力。
|
||
|
||
完成内容:
|
||
|
||
- `createIniPanelLaunchApiManifest()` 新增 `persistenceCapabilities`;
|
||
- persistence capabilities 固定包含:
|
||
- `machine-files` / `Machine text files` / `opfs`
|
||
- `session-snapshot` / `Machine session snapshot` / `opfs`
|
||
- `readonly-status` / `Read-only machine session status` / `control-page`
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 persistence capabilities shape 和深拷贝行为;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验 persistence capabilities 数量、
|
||
id 清单和 readonly status scope;
|
||
- `docs/panel-entry.md` 记录 launch manifest 中的 OPFS/session persistence capabilities;
|
||
- `verify_ini_panel_entry_docs.mjs` 覆盖文档中的 machine files、session snapshots 和
|
||
read-only status 能力说明;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 LinuxCNC interpreter、tool、parameter、planner 或 LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议为 `persistenceCapabilities` 增加 stable schema helper 或
|
||
manifest version 字段(例如 `manifestVersion: 1`),由 focused Node gate、launch browser smoke
|
||
和 docs gate 共同校验,便于后续外部 shell 做兼容性判断;仍保持只读,不新增控制按钮,不解析
|
||
G-code。
|
||
|
||
十六、2026-06-15 继续执行记录:INI panel launch manifest version schema
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,为 launch API manifest 增加
|
||
stable schema helper 和 `manifestVersion: 1`,便于外部 shell 在消费 launch methods、entries、
|
||
target pages、control-page API methods 与 persistence capabilities 前进行兼容性判断。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增 `createIniPanelLaunchApiSchema()`;
|
||
- `createIniPanelLaunchApiManifest()` 新增 `manifestVersion: 1`;
|
||
- schema 固定描述:
|
||
- `apiName`
|
||
- `manifestVersion`
|
||
- `fields`
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 schema shape、manifest version 和
|
||
shell view-model version;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验 `manifestVersion`;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 manifest version;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 记录并校验
|
||
`createIniPanelLaunchApiSchema()` 和 `manifestVersion`;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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/UI workflow。下一批建议把 launch manifest 的 schema/version 信息暴露到
|
||
`linuxCncIniPanelLaunchApi` 的独立 `getLaunchApiSchema()` 方法,并由 browser launch smoke 与
|
||
focused Node gate 双向校验;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
十七、2026-06-15 继续执行记录:INI panel launch API schema exposure
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把 launch manifest 的
|
||
schema/version 信息通过真实 browser launch API 独立暴露,方便外部 shell 在读取完整 manifest
|
||
前先做兼容性判断。
|
||
|
||
完成内容:
|
||
|
||
- `createIniPanelShellViewModel()` 新增 `launchApiSchema`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增 `getLaunchApiSchema()`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `getLaunchApiSchema`;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验:
|
||
- `getLaunchApiSchema()` 存在;
|
||
- schema `manifestVersion`;
|
||
- schema fields 包含 `persistenceCapabilities`;
|
||
- manifest methods 包含 `getLaunchApiSchema`;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 shell view-model 的 `launchApiSchema`;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 `launchApiSchema`;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 记录并校验
|
||
`linuxCncIniPanelLaunchApi.getLaunchApiSchema()`;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议为 `createIniPanelLaunchApiSchema()` 增加 focused schema
|
||
compatibility helper(例如 `isSupportedIniPanelLaunchApiManifest()` 或等价只读 predicate),让外部
|
||
shell 可以用 schema/version 判断 manifest 是否可消费,并由 Node/browser gate 校验;仍保持只读,
|
||
不新增控制按钮,不解析 G-code。
|
||
|
||
十八、2026-06-15 继续执行记录:INI panel launch manifest compatibility predicate
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,为 launch manifest 增加只读
|
||
compatibility predicate,让外部 shell 能用 schema/version 和必需字段判断 manifest 是否可消费。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增
|
||
`isSupportedIniPanelLaunchApiManifest()`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增
|
||
`isSupportedLaunchApiManifest()`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `isSupportedLaunchApiManifest`;
|
||
- predicate 固定校验:
|
||
- manifest 是对象;
|
||
- `apiName` 匹配 schema;
|
||
- `manifestVersion` 匹配 schema;
|
||
- schema fields 全部存在;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 supported、错误 version、错误 apiName、
|
||
缺少字段和 null 输入;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验支持当前 manifest,并拒绝错误
|
||
`manifestVersion`;
|
||
- `verify_ini_panel_ui_shell.mjs`、`verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md`
|
||
记录并校验 predicate 入口;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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/UI workflow。下一批建议把 control-page browser API 也补齐 schema/version 与
|
||
compatibility predicate,使 launch API 和 control-page API 具备一致的外部 shell 接入模型;仍保持
|
||
只读,不新增控制按钮,不解析 G-code。
|
||
|
||
十九、2026-06-15 继续执行记录:INI panel control-page API manifest compatibility predicate
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把 control-page browser API
|
||
补齐 schema/version、manifest 和 compatibility predicate,使 launch API 与 control-page API
|
||
具备一致的外部 shell 接入模型。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增:
|
||
- `createControlPageBrowserApiSchema()`;
|
||
- `createControlPageBrowserApiManifest()`;
|
||
- `isSupportedIniPanelControlPageApiManifest()`;
|
||
- `createControlPageBrowserApiMethods()` 新增:
|
||
- `isSupportedControlPageApiManifest`;
|
||
- `getControlPageApiSchema`;
|
||
- `getControlPageApiManifest`;
|
||
- `createIniPanelShellViewModel().controlPage` 新增:
|
||
- `browserApiSchema`;
|
||
- `browserApiManifest`;
|
||
- `isSupportedBrowserApiManifest`;
|
||
- `control-page.js` 的 `window.linuxCncIniPanelControlPageApi` 新增真实 browser 入口:
|
||
- `isSupportedControlPageApiManifest()`;
|
||
- `getControlPageApiSchema()`;
|
||
- `getControlPageApiManifest()`;
|
||
- `ini_panel_control_page_smoke.html` 在真实 control-page iframe 中校验:
|
||
- schema `manifestVersion`;
|
||
- schema fields 包含 `readonlyStatusApiManifest`;
|
||
- 当前 manifest 被 predicate 接受;
|
||
- 错误 `apiName` 被 predicate 拒绝;
|
||
- manifest methods 与 browser API methods 一致;
|
||
- manifest 暴露 readonly status API manifest;
|
||
- `verify_ini_panel_shell_control_page_contract.mjs` 覆盖 control-page browser API schema、
|
||
manifest、supported、错误 version、错误 apiName、缺少字段和 null 输入;
|
||
- `verify_ini_panel_ui_shell.mjs`、`verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md`
|
||
记录并校验 control-page browser API schema/manifest/predicate;
|
||
- launch manifest 继续通过同一 `createControlPageBrowserApiMethods()` 获取 control-page
|
||
方法清单;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_control_page_contract.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_shell_control_page_contract_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议把 launch API 和 control-page API 的 manifest 组合成一个
|
||
可复用的 shell integration manifest(例如 `createIniPanelShellIntegrationManifest()`),让外部
|
||
shell 一次读取入口页、目标页、launch API、control-page API、OPFS/session persistence 能力与
|
||
compatibility predicate 状态;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
二十、2026-06-15 继续执行记录:INI panel shell integration manifest
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,把 launch API 与 control-page API
|
||
组合成可复用的 shell integration manifest,让外部 shell 能一次读取入口页、目标页、两类 API
|
||
manifest、OPFS/session persistence 能力与 compatibility 状态。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增:
|
||
- `createIniPanelShellIntegrationSchema()`;
|
||
- `createIniPanelShellIntegrationManifest()`;
|
||
- `isSupportedIniPanelShellIntegrationManifest()`;
|
||
- shell integration manifest 固定暴露:
|
||
- `pages`;
|
||
- `launcherLinks`;
|
||
- `launchApiSchema`;
|
||
- `launchApiManifest`;
|
||
- `controlPageApiSchema`;
|
||
- `controlPageApiManifest`;
|
||
- `compatibility.launchApiManifest`;
|
||
- `compatibility.controlPageApiManifest`;
|
||
- `persistenceCapabilities`;
|
||
- `createIniPanelShellViewModel()` 新增:
|
||
- `shellIntegrationSchema`;
|
||
- `shellIntegrationManifest`;
|
||
- `isSupportedShellIntegrationManifest`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增:
|
||
- `getShellIntegrationSchema`;
|
||
- `getShellIntegrationManifest`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口:
|
||
- `getShellIntegrationSchema()`;
|
||
- `getShellIntegrationManifest()`;
|
||
- 新增 `verify_ini_panel_shell_integration_manifest.mjs/.sh`,覆盖:
|
||
- schema 固定字段;
|
||
- manifest 完整 shape;
|
||
- supported、错误 version、错误 apiName、缺少字段和 null 输入;
|
||
- 修改返回对象不污染 `INI_PANEL_ENTRIES` 或后续 manifest;
|
||
- custom entries 的 pages、launcher links 和 launch target pages;
|
||
- 不引入 JS CNC 语义;
|
||
- `verify_ui_node_smokes.sh` 纳入 shell integration manifest focused gate;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验:
|
||
- `getShellIntegrationSchema()`;
|
||
- `getShellIntegrationManifest()`;
|
||
- launch/control-page compatibility 均为 true;
|
||
- control-page manifest 名称;
|
||
- browser manifest 与模块 helper 结果一致;
|
||
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_ui_shell.mjs`、
|
||
`verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence。下一批建议增加只读 shell integration readiness helper
|
||
(例如 `createIniPanelShellIntegrationReadiness()`),用 integration manifest、launch manifest 和
|
||
control-page manifest 生成外部 shell 可直接展示/拦截的 readiness 状态;仍保持只读,不新增控制
|
||
按钮,不解析 G-code。
|
||
|
||
二十一、2026-06-15 继续执行记录:INI panel shell integration readiness helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 OPFS/session persistence 相关外部 shell 接入能力,
|
||
新增只读 shell integration readiness helper,让外部 shell 能在挂载 embedded control page 前判断
|
||
integration、launch 与 control-page manifest 是否都可消费。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增
|
||
`createIniPanelShellIntegrationReadiness()`;
|
||
- readiness helper 从 shell integration manifest 派生:
|
||
- `phase: "ready" | "blocked"`;
|
||
- `ready`;
|
||
- `checks.integrationManifestSupported`;
|
||
- `checks.launchApiManifestSupported`;
|
||
- `checks.controlPageApiManifestSupported`;
|
||
- `checks.launchCompatibility`;
|
||
- `checks.controlPageCompatibility`;
|
||
- `missing`;
|
||
- `counts.pages`;
|
||
- `counts.launcherLinks`;
|
||
- `counts.launchMethods`;
|
||
- `counts.controlPageMethods`;
|
||
- `counts.persistenceCapabilities`;
|
||
- `apiNames.integration/launch/controlPage`;
|
||
- `createIniPanelShellViewModel()` 新增:
|
||
- `shellIntegrationReadiness`;
|
||
- `createShellIntegrationReadiness`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `getShellIntegrationReadiness`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
|
||
`getShellIntegrationReadiness()`;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖:
|
||
- ready 正常状态;
|
||
- compatibility blocked 状态;
|
||
- malformed manifest 的 blocked 状态;
|
||
- counts 与 API names;
|
||
- browser/doc 暴露点;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验:
|
||
- `getShellIntegrationReadiness()` 存在;
|
||
- readiness `ready === true`;
|
||
- persistence capability count;
|
||
- missing checks 为空;
|
||
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_ui_shell.mjs`、
|
||
`verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未访问 OPFS 或启动额外 iframe;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_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/UI workflow。下一批建议把 shell integration readiness 接到 control-page 或 launch
|
||
的外部 shell smoke 中,形成“读取 integration manifest -> readiness gate -> 打开 control page ->
|
||
读取 readonly status”的端到端只读接入 workflow;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
二十二、2026-06-15 继续执行记录:INI panel shell integration browser workflow smoke
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把 shell integration readiness
|
||
接入真实 browser 端到端只读外部 shell workflow,覆盖“读取 integration manifest -> readiness gate
|
||
-> 打开 control page -> 读取 readonly status”的接入链路。
|
||
|
||
完成内容:
|
||
|
||
- 新增 `wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html`;
|
||
- 该 browser smoke 模拟外部 shell:
|
||
- 先加载真实 `launch.html`;
|
||
- 读取 `linuxCncIniPanelLaunchApi.getShellIntegrationManifest()`;
|
||
- 读取 `linuxCncIniPanelLaunchApi.getShellIntegrationReadiness()`;
|
||
- 校验 readiness `phase === "ready"`、`ready === true`、`missing` 为空;
|
||
- 从 integration manifest 的 target pages 找到 control-page target;
|
||
- 加载真实 `control-page.html`;
|
||
- 校验 control-page browser API manifest 与 integration manifest 对齐;
|
||
- 等待 embedded INI panel API ready;
|
||
- 通过既有 UI workflow 写入 INI、保存 machine files、load session;
|
||
- 使用 `readControlPageStatus()` 读取 readonly machine-session status;
|
||
- 校验 workflow last action、parameter file、tool table 与 control-page DOM status;
|
||
- `verify_ini_panel_browser.sh` 纳入新 browser smoke,并输出
|
||
`browser_ini_shell_integration_workflow_smoke=ok`;
|
||
- `docs/panel-entry.md` 记录该 browser workflow smoke 的外部 shell handoff 目的;
|
||
- `verify_ini_panel_entry_docs.mjs` 校验:
|
||
- 文档记录新 smoke;
|
||
- browser 聚合脚本执行新 smoke;
|
||
- 新 smoke 使用 `getShellIntegrationReadiness()`;
|
||
- 新 smoke 使用 `readControlPageStatus()`;
|
||
- 新 smoke 输出成功标记;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议把 shell integration workflow 的只读 handoff 抽成 Node 可测
|
||
helper(例如 `createIniPanelShellIntegrationWorkflowPlan()`),让外部 shell 在不开 browser 的情况下
|
||
获得 target page、readiness、required methods 与 readonly status handoff plan;仍保持只读,不新增
|
||
控制按钮,不解析 G-code。
|
||
|
||
二十三、2026-06-15 继续执行记录:INI panel shell integration workflow plan helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,把 shell integration browser workflow
|
||
的只读 handoff 抽成 Node 可测 helper,让外部 shell 在不开 browser 的情况下获得 control-page target、
|
||
readiness、required methods 与 readonly status handoff plan。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增
|
||
`createIniPanelShellIntegrationWorkflowPlan()`;
|
||
- workflow plan 从 integration manifest 与 readiness 派生:
|
||
- `phase: "ready" | "blocked"`;
|
||
- `ready`;
|
||
- `controlEntryId`;
|
||
- `targetPage`;
|
||
- `readiness`;
|
||
- `requiredLaunchApiMethods`;
|
||
- `requiredControlPageApiMethods`;
|
||
- `missingLaunchApiMethods`;
|
||
- `missingControlPageApiMethods`;
|
||
- `missing`;
|
||
- `readonlyStatusHandoff.loadSessionStateMethod`;
|
||
- `readonlyStatusHandoff.readStatusMethod`;
|
||
- `readonlyStatusHandoff.expectedStatusFields`;
|
||
- `createIniPanelShellViewModel()` 新增:
|
||
- `shellIntegrationWorkflowPlan`;
|
||
- `createShellIntegrationWorkflowPlan`;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖:
|
||
- ready workflow plan 完整 shape;
|
||
- blocked readiness 传递到 plan missing;
|
||
- control target 缺失;
|
||
- control-page required method 缺失;
|
||
- readonly status handoff fields;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 workflow plan;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 记录并校验 workflow plan helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未访问 OPFS 或启动 browser/frame;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 OPFS/session persistence。下一批建议把 workflow plan 扩展为包含 session handoff summary
|
||
helper(例如 `createIniPanelShellSessionHandoffSummary()`),把 readiness、target page、readonly
|
||
status fields 与 persistence capabilities 压成外部 shell 可直接显示的一页摘要;仍保持只读,不新增
|
||
控制按钮,不解析 G-code。
|
||
|
||
二十四、2026-06-15 继续执行记录:INI panel shell session handoff summary helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 OPFS/session persistence 相关外部 shell 接入能力,
|
||
新增只读 shell session handoff summary helper,把 readiness、target page、readonly status fields
|
||
与 persistence capabilities 压成外部 shell 可直接显示的一页摘要。
|
||
|
||
完成内容:
|
||
|
||
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增
|
||
`createIniPanelShellSessionHandoffSummary()`;
|
||
- summary 从 integration manifest、readiness 与 workflow plan 派生:
|
||
- `phase: "ready" | "blocked"`;
|
||
- `ready`;
|
||
- `targetPage`;
|
||
- `readiness.phase`;
|
||
- `readiness.missing`;
|
||
- `readiness.counts`;
|
||
- `readiness.apiNames`;
|
||
- `persistenceCapabilities`;
|
||
- `readonlyStatusFields`;
|
||
- `handoffMethods.loadSessionState`;
|
||
- `handoffMethods.readStatus`;
|
||
- `blockingReasons`;
|
||
- `createIniPanelShellViewModel()` 新增:
|
||
- `shellSessionHandoffSummary`;
|
||
- `createShellSessionHandoffSummary`;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖:
|
||
- ready handoff summary 完整 shape;
|
||
- blocked workflow plan 的 blocking reasons;
|
||
- persistence capabilities 与 readonly status fields 返回值不污染后续 summary;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 handoff summary;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 记录并校验 handoff summary helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未访问 OPFS 或启动 browser/frame;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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/UI workflow。下一批建议把 `shellSessionHandoffSummary` 暴露到 launch browser API
|
||
或 shell integration browser workflow smoke 中,让真实 browser 外部 shell 可以直接读取 summary
|
||
并与 readonly status handoff 结果交叉校验;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
二十五、2026-06-15 继续执行记录:INI panel shell session handoff summary browser API
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把
|
||
`shellSessionHandoffSummary` 暴露到真实 launch browser API,并在 shell integration browser
|
||
workflow smoke 中用 summary 驱动 readonly status handoff。
|
||
|
||
完成内容:
|
||
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `getShellSessionHandoffSummary`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
|
||
`getShellSessionHandoffSummary()`;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验:
|
||
- `getShellSessionHandoffSummary()` 存在;
|
||
- launch API manifest methods 包含该方法;
|
||
- summary `ready === true`;
|
||
- summary target page 为 `./control-page.html`;
|
||
- summary readonly fields 包含 `session`;
|
||
- summary persistence capabilities 数量为 3;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 改为读取
|
||
`getShellSessionHandoffSummary()`,并使用 summary 的 handoff methods 调用:
|
||
- `loadControlPageSessionState()`;
|
||
- `readControlPageStatus()`;
|
||
- shell integration browser workflow smoke 现在交叉校验:
|
||
- summary target 与 integration manifest target 一致;
|
||
- summary handoff methods 可调用;
|
||
- summary readonly status fields 全部存在于 `readControlPageStatus()` 返回值;
|
||
- summary persistence capabilities 与 blocking reasons;
|
||
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
|
||
`docs/panel-entry.md` 同步记录和校验 browser API;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 将 launch method count 更新为 9;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议为 shell/session handoff summary 增加 focused compatibility
|
||
predicate 或 versioned summary schema(例如 `createIniPanelShellSessionHandoffSummarySchema()`),
|
||
让外部 shell 能独立判断 summary shape 是否可消费;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
二十六、2026-06-15 继续执行记录:INI panel shell session handoff summary schema gate
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface,为 shell/session handoff
|
||
summary 增加 versioned schema 与 focused compatibility predicate,并暴露到真实 launch browser
|
||
API,让外部 shell 能在消费 summary 前独立判断 shape 是否可支持。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffSummarySchema()`;
|
||
- `ui-shell.js` 新增 `isSupportedIniPanelShellSessionHandoffSummary()`;
|
||
- `createIniPanelShellSessionHandoffSummary()` 新增:
|
||
- `apiName: "ini-panel-shell-session-handoff-summary"`;
|
||
- `summaryVersion: 1`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增:
|
||
- `getShellSessionHandoffSummarySchema`;
|
||
- `isSupportedShellSessionHandoffSummary`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增:
|
||
- `getShellSessionHandoffSummarySchema()`;
|
||
- `isSupportedShellSessionHandoffSummary()`;
|
||
- `ini_panel_launch_smoke.html` 在真实 launch iframe 中校验:
|
||
- summary schema version;
|
||
- 当前 summary 可支持;
|
||
- 错误 summary version 被拒绝;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在 browser shell handoff workflow 中校验:
|
||
- launch API 暴露 summary schema 与 predicate;
|
||
- 当前 handoff summary 可支持;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖:
|
||
- summary schema 完整 shape;
|
||
- valid summary 支持;
|
||
- 错误 version、错误 apiName、缺字段、null 被拒绝;
|
||
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_ui_shell.mjs`、
|
||
`verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验新 API;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface 与 browser/UI workflow 的交界。下一批建议增加一个
|
||
`createIniPanelShellSessionHandoffCompatibilityReport()` 或等价 helper,把 summary schema
|
||
支持状态、缺失字段、version/apiName mismatch 与 blocking reasons 合并成可显示报告,便于外部
|
||
shell 在 UI 中解释为什么不能消费 handoff summary;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
二十七、2026-06-15 继续执行记录:INI panel shell handoff package display view-model
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow 与 SDK/API surface 的交界,
|
||
把 shell handoff package report 压缩成外部 shell 可直接渲染的 display view-model,并暴露到真实
|
||
launch browser API。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackageDisplayViewModel()`;
|
||
- `createIniPanelShellViewModel()` 新增 `shellSessionHandoffPackageDisplayViewModel`;
|
||
- shell view-model 暴露 `createShellSessionHandoffPackageDisplayViewModel` helper;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增
|
||
`getShellSessionHandoffPackageDisplayViewModel`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
|
||
`getShellSessionHandoffPackageDisplayViewModel()`;
|
||
- `ini_panel_launch_smoke.html` 校验真实 launch API 返回的 package display status 与 rows;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在真实 shell handoff workflow 中校验 package
|
||
display view-model 与 package report 对齐;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 helper 导出、shell view-model 字段和 blocked package
|
||
mismatch display 状态;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 package display view-model ready/blocked
|
||
形态;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch page API 暴露;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验新 helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_smoke=ok
|
||
ui_node_smokes=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/UI workflow。下一批建议把 shell handoff package display view-model 接入
|
||
launch 页面当前 `[data-handoff-rows]` 渲染路径,或增加一个 package render-state helper,让 launch
|
||
页可显示 package 级 schema/report 状态;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
二十八、2026-06-15 继续执行记录:INI panel shell handoff package render-state
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把 shell handoff package
|
||
display view-model 压缩成 launch-side package render-state,并让真实 launch 页面首屏渲染 package
|
||
级 schema/report 状态。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackageRenderState()`;
|
||
- `createIniPanelShellViewModel()` 新增 `shellSessionHandoffPackageRenderState`;
|
||
- shell view-model 暴露 `createShellSessionHandoffPackageRenderState` helper;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增
|
||
`getShellSessionHandoffPackageRenderState`;
|
||
- `launch.html` 的 `[data-handoff-status]` 和 `[data-handoff-rows]` 改为从 package
|
||
render-state 渲染;
|
||
- `launch.html` 的 `[data-handoff-shell]` 新增 `data-handoff-scope="package"`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
|
||
`getShellSessionHandoffPackageRenderState()`;
|
||
- `ini_panel_launch_smoke.html` 校验真实 launch API 返回的 package render-state,并校验 DOM
|
||
已显示 package schema/report rows;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在真实 shell handoff workflow 中校验 package
|
||
render-state;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 helper 导出、shell view-model 字段和 render-state shape;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 ready/blocked package render-state;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch page API 暴露;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验新 helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_smoke=ok
|
||
ui_node_smokes=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/UI workflow 与 OPFS/session persistence 的交界。下一批建议增加一个
|
||
`createIniPanelShellSessionHandoffPackageMountState()` 或等价 helper,把 launch-side package
|
||
render-state、target control page、required readonly methods 与首帧 control-page session readiness
|
||
合并为外部 shell 可消费的 mount-state;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
二十九、2026-06-15 继续执行记录:INI panel shell handoff package mount-state
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow 与 OPFS/session persistence
|
||
的交界,新增 shell handoff package mount-state,把 launch-side package render-state、control
|
||
page target、required readonly methods 与 control-page session readiness 合并为外部 shell 可消费
|
||
状态。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackageMountState()`;
|
||
- `createIniPanelShellViewModel()` 新增 `shellSessionHandoffPackageMountState`;
|
||
- shell view-model 暴露 `createShellSessionHandoffPackageMountState` helper;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增
|
||
`getShellSessionHandoffPackageMountState`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageMountState()`
|
||
新增真实 browser 入口;
|
||
- launch API 的 mount-state 入口支持传入真实 `sessionLoadState`,从而让外部 shell 在 control
|
||
page iframe ready 后生成 ready mount-state;
|
||
- 默认 launch mount-state 表示 `waiting-panel`,不主动打开 control page,不执行 action plan;
|
||
- `ini_panel_launch_smoke.html` 校验默认 mount-state 的 package readiness、target、readonly
|
||
method 与 waiting session;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在真实 control page iframe ready 后,把
|
||
`loadControlPageSessionState()` 结果传入 launch API,并校验 ready mount-state;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 helper 导出、shell view-model 字段、默认 blocked mount
|
||
state 与 ready session mount-state;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 ready/blocked/error mount-state;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch page API 暴露;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验新 helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_smoke=ok
|
||
ui_node_smokes=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/UI workflow 与 SDK/API surface。下一批建议增加 mount-state display 或
|
||
render-state helper,把 mount-state checks 压缩为外部 shell 可直接显示的 rows,并在 shell
|
||
integration browser workflow 中校验 waiting/ready mount-state 显示;仍保持只读,不新增控制按钮,
|
||
不解析 G-code。
|
||
|
||
三十、2026-06-15 继续执行记录:INI panel shell handoff mount-state display/render-state
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow 与 SDK/API surface,新增
|
||
mount-state display view-model 与 render-state,让外部 shell 可直接显示 waiting/ready mount-state
|
||
checks。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackageMountDisplayViewModel()`;
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackageMountRenderState()`;
|
||
- `createIniPanelShellViewModel()` 新增:
|
||
- `shellSessionHandoffPackageMountDisplayViewModel`;
|
||
- `shellSessionHandoffPackageMountRenderState`;
|
||
- shell view-model 暴露:
|
||
- `createShellSessionHandoffPackageMountDisplayViewModel`;
|
||
- `createShellSessionHandoffPackageMountRenderState`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增:
|
||
- `getShellSessionHandoffPackageMountDisplayViewModel`;
|
||
- `getShellSessionHandoffPackageMountRenderState`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口:
|
||
- `getShellSessionHandoffPackageMountDisplayViewModel(mountState?)`;
|
||
- `getShellSessionHandoffPackageMountRenderState(mountState?)`;
|
||
- `ini_panel_launch_smoke.html` 校验默认 waiting mount-state 的 display detail 与 render status;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在真实 control page iframe ready 后校验 ready
|
||
mount display/render-state;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 helper 导出、shell view-model 字段、waiting display/render
|
||
state 与 ready display;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 waiting/ready mount render-state;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch page API 暴露;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验新 helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_smoke=ok
|
||
ui_node_smokes=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/UI workflow 与 OPFS/session persistence。下一批建议把 mount render-state 接入
|
||
launch 页面一个独立的 `[data-handoff-mount-*]` 只读区域,或在 shell integration workflow 中增加
|
||
mount-state ready DOM rendering smoke;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
三十一、2026-06-15 继续执行记录:INI panel launch mount-state DOM render
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,把 mount render-state 接入
|
||
真实 launch 页面独立只读 DOM 区域,使首屏能同时显示 package handoff 状态与 mount readiness 状态。
|
||
|
||
完成内容:
|
||
|
||
- `launch.html` 新增独立只读 mount 状态区域:
|
||
- `[data-handoff-mount]`;
|
||
- `[data-handoff-mount-status]`;
|
||
- `[data-handoff-mount-rows]`;
|
||
- `launch.html` 使用 `shellSessionHandoffPackageMountRenderState` 渲染默认 waiting mount-state;
|
||
- mount DOM rows 写入:
|
||
- `data-handoff-mount-row`;
|
||
- `data-handoff-mount-value`;
|
||
- `data-handoff-mount-status`;
|
||
- mount DOM dataset 暴露:
|
||
- `data-handoff-phase`;
|
||
- `data-handoff-ready`;
|
||
- `data-handoff-scope="mount"`;
|
||
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 中的 mount DOM status、phase、ready、scope、
|
||
session state value 与 row status;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch page 中新增 mount DOM hooks;
|
||
- `docs/panel-entry.md` 记录 launch 页面 mount DOM hook;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_smoke=ok
|
||
ui_node_smokes=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/UI workflow。下一批建议在 shell integration browser workflow 中增加 ready
|
||
mount-state DOM rendering helper 或 smoke,把 control-page ready 后的 mount render-state 渲染到
|
||
外部 shell 自有 DOM 并校验 row/status;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
三十二、2026-06-15 继续执行记录:INI panel shell integration ready mount DOM smoke
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 browser/UI workflow,在真实 shell integration
|
||
browser workflow 中新增外部 shell 自有 DOM renderer,校验 waiting 与 ready mount-state DOM
|
||
显示。
|
||
|
||
完成内容:
|
||
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 新增外部 shell 自有只读 mount 区域:
|
||
- `[data-external-shell-mount]`;
|
||
- `[data-external-shell-mount-status]`;
|
||
- `[data-external-shell-mount-rows]`;
|
||
- 新增 `renderExternalShellMountState(renderState)` 测试 helper;
|
||
- workflow 初始阶段把默认 waiting mount render-state 渲染到外部 shell DOM;
|
||
- workflow 在真实 control page iframe ready 后,把 ready mount render-state 渲染到外部 shell DOM;
|
||
- browser smoke 校验 waiting DOM:
|
||
- status 为 `Blocked: session-load-state`;
|
||
- `data-handoff-ready="false"`;
|
||
- `session-load-state` row status 为 `blocked`;
|
||
- browser smoke 校验 ready DOM:
|
||
- status 为 `Ready: No blocking reasons`;
|
||
- `data-handoff-ready="true"`;
|
||
- `session-load-state` row value 为 `ready`;
|
||
- `session-load-state` row status 为 `pass`;
|
||
- `docs/panel-entry.md` 记录 shell integration workflow 中外部 shell-owned DOM 渲染;
|
||
- `verify_ini_panel_entry_docs.mjs` 覆盖外部 shell mount DOM hooks 与 workflow smoke;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_smoke=ok
|
||
ui_node_smokes=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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议把外部 shell mount DOM renderer 抽成可复用 helper
|
||
`renderIniPanelShellSessionHandoffMountState()` 或等价 API,并用 Node/browser smoke 保护其
|
||
DOM contract;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
三十三、2026-06-15 继续执行记录:INI panel shell handoff mount DOM renderer helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow,把外部
|
||
shell mount DOM renderer 从 browser smoke 内抽为可复用 helper,让 launch 页面和 shell integration
|
||
workflow 共享同一只读 DOM contract。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `renderIniPanelShellSessionHandoffMountState()`;
|
||
- `createIniPanelShellViewModel()` 暴露 `renderShellSessionHandoffMountState` helper;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `renderShellSessionHandoffMountState`;
|
||
- `launch.html` 改为使用 `renderIniPanelShellSessionHandoffMountState()` 渲染默认 mount DOM;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi.renderShellSessionHandoffMountState()`
|
||
新增真实 browser 入口,并支持外部 shell 传入自有 DOM nodes 与 row dataset prefix;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 删除本地专用 renderer,改用 launch API 暴露的
|
||
shared renderer 渲染 waiting/ready mount-state;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 校验 shared renderer 返回值:
|
||
- `rendered === true`;
|
||
- row count 为 5;
|
||
- ready render result dataset `handoffReady === "true"`;
|
||
- `verify_ini_panel_ui_shell.mjs` 用最小 DOM stub 覆盖 shared renderer 的 dataset、statusLine、row
|
||
ids 与 row dataset 写入;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs` 将 launch method count 更新为 27;
|
||
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch page API 暴露;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验新 helper;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议为 shared mount DOM renderer 增加 schema/contract helper
|
||
(例如 `createIniPanelShellSessionHandoffMountDomContract()`),让外部 shell 可在渲染前校验所需
|
||
DOM nodes、dataset keys 与 row dataset prefix;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
三十四、2026-06-15 继续执行记录:INI panel shell handoff mount DOM contract helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow,把 shared
|
||
mount DOM renderer 的隐式 DOM 约定抽成可复用 contract/readiness helper,让外部 shell 能在渲染前
|
||
校验所需 DOM nodes、dataset keys 与 row dataset prefix。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffMountDomContract()`;
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffMountDomReadiness()`;
|
||
- `renderIniPanelShellSessionHandoffMountState()` 改为复用 DOM readiness gate,并支持通过 contract
|
||
统一 selectors 与 row dataset prefix;
|
||
- `createIniPanelShellViewModel()` 暴露 `shellSessionHandoffMountDomContract`、
|
||
`createShellSessionHandoffMountDomContract` 与 `createShellSessionHandoffMountDomReadiness`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增:
|
||
- `getShellSessionHandoffMountDomContract`;
|
||
- `getShellSessionHandoffMountDomReadiness`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 暴露对应 browser API;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 改为先构造外部 shell-owned DOM contract,再执行
|
||
readiness 校验,随后用同一 contract 渲染 waiting/ready mount-state;
|
||
- Node smoke 覆盖默认 contract、外部 row dataset prefix、DOM readiness ready/missing 路径、launch
|
||
manifest 方法清单与文档记录;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议把 shell handoff mount DOM contract/readiness 聚合进一个
|
||
可复用的 browser-side mount workflow helper(例如 `mountIniPanelShellSessionHandoff()`),让外部
|
||
shell 一次调用即可完成 contract 生成、DOM readiness、mount-state render 与 structured result;仍
|
||
保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
三十五、2026-06-15 继续执行记录:INI panel shell handoff mount workflow helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow,把 shell
|
||
handoff mount DOM contract/readiness/render 三步聚合为一个可复用 browser-side workflow helper,
|
||
让外部 shell 一次调用即可获得 structured mount result。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `mountIniPanelShellSessionHandoff()`;
|
||
- 新 helper 返回 `apiName`、`workflowVersion`、`phase`、`ready`、`statusLine`、`contract`、
|
||
`domReadiness`、`renderState`、`renderResult` 与 `error`;
|
||
- DOM 未 ready 时,新 helper 返回 structured blocked result,不把 renderer error 抛给外部 shell;
|
||
- DOM ready 时,新 helper 复用 `renderIniPanelShellSessionHandoffMountState()` 并返回 renderer result;
|
||
- `createIniPanelShellViewModel()` 暴露 `mountShellSessionHandoff`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `mountShellSessionHandoff`,launch method count 更新为 30;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi.mountShellSessionHandoff()` 暴露真实 browser API;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 改为通过 shared mount workflow 渲染 waiting/ready
|
||
mount-state,并校验 workflow phase 与 DOM readiness;
|
||
- Node smoke 覆盖 workflow helper 的 blocked、missing DOM 与 rendered result 路径;
|
||
- 文档同步记录 browser-side mount workflow 用法;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议为 shell handoff mount workflow 增加 session-load helper 接口
|
||
(例如 `mountIniPanelShellSessionHandoffFromControlPage()`),让外部 shell 可以把 control-page API
|
||
或 session-load state 传入后一次生成 mount-state、render-state 与 DOM workflow result;仍保持只读,
|
||
不新增控制按钮,不解析 G-code。
|
||
|
||
三十六、2026-06-15 继续执行记录:INI panel shell handoff control-page mount workflow helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow,为 shell
|
||
handoff mount workflow 增加 control-page/session-load 聚合 helper,让外部 shell 可以把 control-page
|
||
API 或已观察到的 session-load state 传入后,一次生成 mount-state、render-state 与 DOM workflow
|
||
result。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `mountIniPanelShellSessionHandoffFromControlPage()`;
|
||
- 新 helper 支持传入 `sessionLoadState`,也支持从 `controlPageApi.loadControlPageSessionState()`
|
||
读取只读 session readiness;
|
||
- 新 helper 返回 `apiName`、`workflowVersion`、`phase`、`ready`、`statusLine`、
|
||
`loadSessionStateMethod`、`sessionLoadState`、`sessionLoadError`、`mountState`、
|
||
`mountDisplayViewModel`、`mountRenderState` 与 `mountWorkflow`;
|
||
- control-page API 缺失时返回 waiting-api 派生的 blocked workflow result;
|
||
- control-page API 抛错时把错误转换为 `createControlPageSessionLoadState({ phase: "error" })`,
|
||
不把异常直接抛给外部 shell;
|
||
- `createIniPanelShellViewModel()` 暴露 `mountShellSessionHandoffFromControlPage`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `mountShellSessionHandoffFromControlPage`,
|
||
launch method count 更新为 31;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi.mountShellSessionHandoffFromControlPage()` 暴露
|
||
真实 browser API,并默认复用 launch 侧 handoff package 与 package render-state;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 改为通过 control-page mount workflow 渲染 ready
|
||
mount-state,并校验 session-load、mount-state 与 DOM workflow result;
|
||
- Node smoke 覆盖 session-load state 直传、control-page API 读取与缺失 API blocked 路径;
|
||
- 文档同步记录 control-page mount workflow 用法;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议增加 shell handoff readonly status 聚合 helper(例如
|
||
`readIniPanelShellSessionHandoffStatusFromControlPage()`),让外部 shell 在 mount workflow ready 后一次
|
||
读取 readonly status、校验 expected status fields,并返回 structured status result;仍保持只读,不新增
|
||
控制按钮,不解析 G-code。
|
||
|
||
三十七、2026-06-15 继续执行记录:INI panel shell handoff readonly status workflow helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow,为 shell
|
||
handoff 增加 readonly status 聚合 helper,让外部 shell 在 mount workflow ready 后一次读取
|
||
control-page readonly status、校验 expected status fields,并返回 structured status result。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `readIniPanelShellSessionHandoffStatusFromControlPage()`;
|
||
- 新 helper 支持传入 `readonlyStatus`,也支持从 `controlPageApi.readControlPageStatus()` 读取只读状态;
|
||
- 新 helper 返回 `apiName`、`resultVersion`、`phase`、`ready`、`statusLine`、`readStatusMethod`、
|
||
`expectedStatusFields`、`presentStatusFields`、`missingStatusFields`、`readonlyStatus` 与 `readError`;
|
||
- control-page API 缺失时返回 structured blocked result,不把缺失方法伪装成 pass;
|
||
- control-page API 抛错时把错误写入 `readError`,不把异常直接抛给外部 shell;
|
||
- `createIniPanelShellViewModel()` 暴露 `readShellSessionHandoffStatusFromControlPage`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `readShellSessionHandoffStatusFromControlPage`,
|
||
launch method count 更新为 32;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi.readShellSessionHandoffStatusFromControlPage()` 暴露
|
||
真实 browser API,并默认复用 launch 侧 handoff summary 的 expected readonly status fields;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在真实 browser workflow 中通过 shared status helper
|
||
读取最终 readonly status,并校验 ready、missing fields 与 workflow last action;
|
||
- Node smoke 覆盖 readonly status 直传、control-page API 读取、缺失字段与缺失 API blocked 路径;
|
||
- 文档同步记录 readonly status workflow 用法;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议增加 shell handoff workflow result summary helper(例如
|
||
`createIniPanelShellSessionHandoffWorkflowSummary()`),把 mount workflow、control-page mount workflow
|
||
和 readonly status result 合并成一个稳定 summary,方便外部 shell 一次展示 handoff end-to-end 状态;
|
||
仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
三十八、2026-06-15 继续执行记录:INI panel shell handoff workflow summary helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow,为 shell
|
||
handoff 增加 end-to-end workflow summary helper,把 mount workflow、control-page mount workflow
|
||
和 readonly status result 合并为一个稳定 summary,方便外部 shell 一次展示 handoff 总体状态。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffWorkflowSummary()`;
|
||
- 新 helper 返回 `apiName`、`summaryVersion`、`phase`、`ready`、`statusLine`、`mountWorkflow`、
|
||
`controlPageMountWorkflow`、`readonlyStatusResult`、`blockingReasons` 与 display rows;
|
||
- summary helper 对 mount workflow、control-page mount workflow、readonly status result 做只读聚合,
|
||
并把 blocked 原因稳定编码为 end-to-end `blockingReasons`;
|
||
- `createIniPanelShellViewModel()` 暴露 `createShellSessionHandoffWorkflowSummary`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `getShellSessionHandoffWorkflowSummary`,
|
||
launch method count 更新为 33;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi.getShellSessionHandoffWorkflowSummary()` 暴露
|
||
真实 browser API,并提供无副作用的默认 summary 输入;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在真实 browser workflow 中通过 shared summary helper
|
||
校验 ready、blocking reasons 与 end-to-end handoff 状态;
|
||
- Node smoke 覆盖 summary helper 的 blocked/ready 路径;
|
||
- 文档同步记录 summary helper 用法;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议增加 shell handoff workflow display-model helper(例如
|
||
`createIniPanelShellSessionHandoffWorkflowDisplayViewModel()`),把 end-to-end summary 转成稳定 title、
|
||
statusText、detailText 和 rows,方便外部 shell 直接渲染 handoff 总览;仍保持只读,不新增控制按钮,
|
||
不解析 G-code。
|
||
|
||
三十九、2026-06-15 继续执行记录:INI panel shell handoff workflow display-model helper
|
||
|
||
本轮按“第一原则:加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow,为 shell
|
||
handoff 增加 workflow display-model helper,把 end-to-end summary 压缩成稳定的
|
||
title/statusText/detailText/rows,方便外部 shell 直接渲染 handoff 总览。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffWorkflowDisplayViewModel()`;
|
||
- 新 helper 读取 workflow summary,返回 `phase`、`title`、`statusText`、`detailText` 与 rows;
|
||
- `createIniPanelShellViewModel()` 暴露 `shellSessionHandoffWorkflowDisplayViewModel` 与
|
||
`createShellSessionHandoffWorkflowDisplayViewModel`;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增 `getShellSessionHandoffWorkflowDisplayViewModel`,
|
||
launch method count 更新为 34;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi.getShellSessionHandoffWorkflowDisplayViewModel()`
|
||
暴露真实 browser API;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 在真实 browser workflow 中通过 shared display-model
|
||
helper 校验 ready、statusText 与 detailText;
|
||
- Node smoke 覆盖 display-model helper 的 blocked/ready 路径;
|
||
- 文档同步记录 display-model helper 用法;
|
||
- 未新增控制按钮;
|
||
- 未解析 G-code;
|
||
- 未解释 canonical events;
|
||
- 未新增 JS CNC 语义;
|
||
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||
LinuxCNC-owned runtime semantics。
|
||
|
||
验证已通过:
|
||
|
||
```bash
|
||
git diff --check
|
||
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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
|
||
ini_panel_ui_shell_node_smoke=ok
|
||
ini_panel_launch_api_manifest_node_smoke=ok
|
||
ini_panel_shell_integration_manifest_node_smoke=ok
|
||
ini_panel_entry_docs_node_smoke=ok
|
||
ui_node_smokes=ok
|
||
browser_ini_opfs_smoke=ok
|
||
browser_ini_control_page_smoke=ok
|
||
browser_ini_launch_smoke=ok
|
||
browser_ini_shell_integration_workflow_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
|
||
```
|
||
|
||
下一步建议:
|
||
|
||
继续推进 SDK/API surface。下一批建议增加 shell handoff workflow render-state helper(例如
|
||
`createIniPanelShellSessionHandoffWorkflowRenderState()`),把 workflow display-model 压缩成稳定
|
||
dataset/statusLine/rows,方便外部 shell 直接渲染 end-to-end handoff 总览 DOM;仍保持只读,不新增控制按钮,
|
||
不解析 G-code。
|