Files
cnc_wams/text12.txt

2871 lines
119 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
项目整体完成情况与后续执行计划
生成时间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。