Files
cnc_wams/text12.txt

1145 lines
45 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。