项目整体完成情况与后续执行计划

生成时间：2026-06-15 CST

本文件接替 `text12.txt`。后续工作按 `text13.txt` 执行；除非明确要求审计旧记录，
不要再回到 `text1/text2/text3/text4/text5/text6/text7/text8/text9/text10/text11/text12`
扩展进度。`text12.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. 当前续接点。

`text12.txt` 已推进到：

```text
二十六、2026-06-15 继续执行记录：INI panel shell session handoff summary schema gate
```

本文件从 `text13.txt` 重新开始记录后续进度。

2. 每轮开始前必须先执行：

```bash
git status --short
git log -5 --oneline
tail -n 120 text13.txt
awk '/^[一二三四五六七八九十百]+、/ {print}' text13.txt | sort | uniq -d
```

执行规则：

- 如果 `git status --short` 是 clean，且最新提交已经包含当前建议工作，不要重复追加记录；
- 每轮只追加一个新的中文编号记录；
- 提交前再次检查标题唯一性；
- `text13.txt` 只记录新的后续进度，不复制 `text12.txt` 的长历史；
- 每批完成后，如果要写记录，先写 `text13.txt`，再提交该批代码和记录；
- 如果发现重复记录，先做 dedupe 清理并提交，再继续新功能或新 guard；
- `text12.txt` 不再追加新进度，除非明确要求审计或修正历史记录。

三、当前完成情况摘要

1. 当前工作树状态。

切换到 `text13.txt` 时工作树包含上一批未提交改动：

```text
M text12.txt
M wasm-port/docs/panel-entry.md
M wasm-port/runtime/ui/ini-panel/launch.html
M wasm-port/runtime/ui/ini-panel/ui-shell.js
M wasm-port/tests/browser/ini_panel_launch_smoke.html
M wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html
M wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs
M wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs
M wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs
M wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs
```

上述改动对应 `text12.txt` 第 26 条：shell session handoff summary schema gate。

2. 最近提交：

```text
01817f6 推进 INI 面板 shell handoff summary browser API
b31b9a2 推进 INI 面板 shell session handoff summary
ee665c4 推进 INI 面板 shell integration workflow plan
a663c8d 推进 INI 面板 shell integration browser workflow smoke
1f9a8c3 推进 INI 面板 shell integration readiness helper
```

3. 关键基线保持稳定。

- `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`

4. 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；
- read-only control-page session readiness workflow；
- shell integration readiness、workflow plan、session handoff summary；
- shell session handoff summary versioned schema 与 compatibility predicate。

当前聚合验证入口：

```bash
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
```

2. Browser/UI workflow 验证。

当前 browser INI panel smoke 覆盖真实 OPFS/session persistence workflow 与外部 shell handoff：

```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
browser_ini_shell_integration_workflow_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
```

六、下一步建议

继续推进 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 session handoff compatibility report

本轮按“第一原则：加快实质性推进”创建 `text13.txt` 续接文件，并继续推进 SDK/API
surface 与 browser/UI workflow 的交界：新增 shell session handoff compatibility report，让外部
shell 能读取 display-ready 诊断，判断 handoff summary 是否可消费以及失败原因。

完成内容：

- 新建 `text13.txt`，接替 `text12.txt` 作为后续执行记录；
- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffCompatibilityReport()`；
- compatibility report 输出：
  - `apiName: "ini-panel-shell-session-handoff-compatibility-report"`；
  - `reportVersion: 1`；
  - `phase: "ready" | "blocked"`；
  - `compatible`；
  - `summarySupported`；
  - `handoffReady`；
  - `schema`；
  - `summary`；
  - `missingFields`；
  - `mismatchFields`；
  - `blockingReasons`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffCompatibilityReport`；
  - `createShellSessionHandoffCompatibilityReport`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffCompatibilityReport`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffCompatibilityReport()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 的 compatibility report：
  - `compatible === true`；
  - `summarySupported === true`；
  - `missingFields` 为空；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell handoff workflow 能读取
  compatibility report，并确认当前 report 无 blocking reasons；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready report 完整 shape；
  - 错误 `summaryVersion` 进入 `mismatchFields`；
  - 缺字段进入 `missingFields`；
  - `null` summary 返回完整缺字段列表；
  - blocked workflow 的 `blockingReasons` 和 `compatible === false`；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_ui_shell.mjs`、
  `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录和校验新 helper/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
```

下一步建议：

继续推进 browser/UI workflow。下一批建议把 compatibility report 用到一个真实的外部 shell
display view-model 或 DOM smoke 中，让 launch 页面能直接展示 handoff 是否可消费、缺失字段和
blocking reasons；仍保持只读，不新增控制按钮，不解析 G-code。

二、2026-06-15 继续执行记录：INI panel shell handoff display view-model

本轮按“第一原则：加快实质性推进”继续推进 browser/UI workflow，把上一批 compatibility
report 接入可复用 display view-model 与真实 launch DOM，让外部 shell 能直接展示 handoff
是否可消费、缺失字段、mismatch fields 与 blocking reasons。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffDisplayViewModel()`；
- display view-model 输出：
  - `phase: "ready" | "blocked"`；
  - `title`；
  - `statusText`；
  - `detailText`；
  - `rows`；
- `rows` 固定覆盖：
  - `summary-supported`；
  - `handoff-ready`；
  - `missing-fields`；
  - `mismatch-fields`；
  - `blocking-reasons`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffDisplayViewModel`；
  - `createShellSessionHandoffDisplayViewModel`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffDisplayViewModel`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffDisplayViewModel()`；
- `launch.html` 新增只读 DOM 展示区域：
  - `[data-handoff-status]`；
  - `[data-handoff-rows]`；
  - `[data-handoff-value="missing-fields"]`；
  - `[data-handoff-value="blocking-reasons"]`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - display view-model `statusText === "Ready"`；
  - display rows 数量为 5；
  - DOM status 为 `Ready: No blocking reasons`；
  - DOM missing fields 为 `none`；
  - DOM blocking reasons 为 `none`；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能读取
  display view-model，并确认 display status/detail 与 compatibility report 一致；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready display view-model 完整 shape；
  - 错误 `summaryVersion` 显示到 `mismatch-fields` row；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 display view-model shape；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/API/DOM 节点；
- 未新增控制按钮；
- 未解析 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
```

下一步建议：

继续推进 OPFS/session persistence 与 browser/UI workflow 的交界。下一批建议新增一个只读
`createIniPanelShellSessionHandoffSnapshot()` 或等价 helper，把 integration readiness、handoff
summary、compatibility report、display view-model 聚合成单次外部 shell snapshot API，减少外部
shell 多次读取 launch API 的组合风险；仍保持只读，不新增控制按钮，不解析 G-code。

三、2026-06-15 继续执行记录：INI panel shell handoff snapshot API

本轮按“第一原则：加快实质性推进”继续推进 OPFS/session persistence 与 browser/UI workflow
的交界，新增只读 shell handoff snapshot API，把 integration readiness、handoff summary、
compatibility report 和 display view-model 聚合成单次外部 shell 读取。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffSnapshot()`；
- snapshot 输出：
  - `apiName: "ini-panel-shell-session-handoff-snapshot"`；
  - `snapshotVersion: 1`；
  - `phase`；
  - `ready`；
  - `readiness`；
  - `summary`；
  - `compatibilityReport`；
  - `displayViewModel`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffSnapshot`；
  - `createShellSessionHandoffSnapshot`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffSnapshot`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffSnapshot()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - snapshot version 为 1；
  - snapshot `ready === true`；
  - snapshot readiness 与独立 readiness API 一致；
  - snapshot summary 与独立 summary API 一致；
  - snapshot display view-model 与独立 display API 一致；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能读取 snapshot，
  并确认 snapshot display status 为 `Ready`；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready snapshot 完整 shape；
  - default snapshot 包含 5 个 display rows；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 snapshot 聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/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
```

下一步建议：

继续推进 browser/UI workflow。下一批建议在 launch 页面或等价外部 shell view 中增加一个只读
snapshot consumer helper，把 snapshot 直接压成 launch-side render state，并对 blocked snapshot
做 focused browser smoke；仍保持只读，不新增控制按钮，不解析 G-code。

四、2026-06-15 继续执行记录：INI panel shell handoff render-state consumer

本轮按“第一原则：加快实质性推进”继续推进 browser/UI workflow，新增只读 shell handoff
render-state consumer，把 handoff snapshot 压成 launch 页面和外部 shell 可直接渲染的稳定状态。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffRenderState()`；
- render-state 输出：
  - `apiName: "ini-panel-shell-session-handoff-render-state"`；
  - `renderStateVersion: 1`；
  - `phase`；
  - `ready`；
  - `title`；
  - `statusText`；
  - `detailText`；
  - `statusLine`；
  - `rows`；
  - `dataset.handoffPhase`；
  - `dataset.handoffReady`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffRenderState`；
  - `createShellSessionHandoffRenderState`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffRenderState`；
- `launch.html` 改为从 render-state 渲染 `[data-handoff-status]`、
  `[data-handoff-rows]` 和 `[data-handoff-shell]` 的 phase/readiness dataset；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffRenderState()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - render-state version 为 1；
  - render-state `ready === true`；
  - render-state status line 为 `Ready: No blocking reasons`；
  - render-state rows 与 display view-model rows 一致；
  - DOM `[data-handoff-shell]` 输出 `handoffPhase=ready` 与 `handoffReady=true`；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能读取
  render-state，并确认 status line 与 display rows 一致；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready render-state 完整 shape；
  - blocked snapshot render-state 的 `Blocked: summaryVersion` focused case；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 render-state 聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/API/DOM dataset；
- 未新增控制按钮；
- 未解析 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 的交界。下一批建议新增一个只读
`createIniPanelShellSessionHandoffActionPlan()` 或等价 helper，把 render-state 的 ready/blocked
状态转成外部 shell 可执行的下一步计划（例如 target page、required methods、blocked reasons、
display rows），但仍只描述流程，不新增控制按钮，不解析 G-code。

五、2026-06-15 继续执行记录：INI panel shell handoff action plan

本轮按“第一原则：加快实质性推进”继续推进 SDK/API surface 与 browser/UI workflow 的交界，
新增只读 shell handoff action-plan helper，把 snapshot/render-state 转成外部 shell 可消费的
下一步流程描述。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffActionPlan()`；
- action-plan 输出：
  - `apiName: "ini-panel-shell-session-handoff-action-plan"`；
  - `planVersion: 1`；
  - `phase`；
  - `ready`；
  - `statusLine`；
  - `targetPage`；
  - `requiredMethods.loadSessionState`；
  - `requiredMethods.readStatus`；
  - `blockingReasons`；
  - `displayRows`；
  - `nextSteps`；
- ready plan 输出两个只读流程步骤：
  - `open-control-page`；
  - `read-readonly-status`；
- blocked plan 输出一个诊断步骤：
  - `resolve-blockers`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffActionPlan`；
  - `createShellSessionHandoffActionPlan`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffActionPlan`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffActionPlan()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - action-plan version 为 1；
  - action-plan `ready === true`；
  - next step id 为 `open-control-page,read-readonly-status`；
  - `requiredMethods.readStatus === "readControlPageStatus"`；
  - `displayRows` 与 render-state rows 一致；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能读取
  action-plan，并确认 target page 与 next steps；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready action-plan 完整 shape；
  - default action-plan next steps；
  - blocked/mismatch snapshot action-plan；
  - blocked manifest action-plan `blockingReasons`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 action-plan 聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/API；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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
```

下一步建议：

继续推进 OPFS/session persistence 与 browser/UI workflow 的交界。下一批建议新增一个只读
`createIniPanelShellSessionHandoffChecklist()` 或等价 helper，把 action-plan、render-state、
required methods 和 blocking reasons 压成外部 shell 可显示的 checklist/health rows，并补真实
browser workflow smoke；仍保持只读，不新增控制按钮，不解析 G-code。

六、2026-06-15 继续执行记录：INI panel shell handoff checklist

本轮按“第一原则：加快实质性推进”继续推进 OPFS/session persistence 与 browser/UI workflow
的交界，新增只读 shell handoff checklist helper，把 action-plan、render-state、required
methods 和 blocking reasons 压成外部 shell 可显示的 health rows。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffChecklist()`；
- checklist 输出：
  - `apiName: "ini-panel-shell-session-handoff-checklist"`；
  - `checklistVersion: 1`；
  - `phase`；
  - `ready`；
  - `statusLine`；
  - `checks`；
  - `displayRows`；
  - `nextStepIds`；
  - `blockingReasons`；
- checklist checks 固定覆盖：
  - `render-state`；
  - `target-page`；
  - `load-session-method`；
  - `read-status-method`；
  - `blocking-reasons`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffChecklist`；
  - `createShellSessionHandoffChecklist`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffChecklist`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffChecklist()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - checklist version 为 1；
  - checklist `ready === true`；
  - 5 个 health checks 全部为 `pass`；
  - `nextStepIds` 为 `open-control-page,read-readonly-status`；
  - `displayRows` 与 render-state rows 一致；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能读取
  checklist，并确认 checks 与 nextStepIds；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready checklist 完整 shape；
  - default checklist check 数量；
  - blocked/mismatch checklist health rows；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 checklist 聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/API；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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
```

下一步建议：

继续推进 browser/UI workflow 与 OPFS/session persistence 的交界。下一批建议新增一个只读
`createIniPanelShellSessionHandoffPackage()` 或等价 helper，把 snapshot、render-state、
action-plan、checklist 和 launch/control method manifests 打包成单次 browser shell 可读取的
handoff package，并补真实 browser workflow smoke；仍保持只读，不新增控制按钮，不解析 G-code。

七、2026-06-15 继续执行记录：INI panel shell handoff package

本轮按“第一原则：加快实质性推进”继续推进 browser/UI workflow 与 OPFS/session persistence
的交界，新增只读 shell handoff package helper，把外部 shell 需要的 handoff artifacts 和方法
manifest 聚合成单次 browser API 读取。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackage()`；
- package 输出：
  - `apiName: "ini-panel-shell-session-handoff-package"`；
  - `packageVersion: 1`；
  - `phase`；
  - `ready`；
  - `statusLine`；
  - `manifests.shellIntegration`；
  - `manifests.launchApi`；
  - `manifests.controlPageApi`；
  - `manifests.launchMethods`；
  - `manifests.controlPageMethods`；
  - `snapshot`；
  - `renderState`；
  - `actionPlan`；
  - `checklist`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffPackage`；
  - `createShellSessionHandoffPackage`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffPackage`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffPackage()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - package version 为 1；
  - package `ready === true`；
  - package launch methods 包含 `getShellSessionHandoffPackage`；
  - package control methods 包含 `readControlPageStatus`；
  - package checklist 与独立 checklist API 一致；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能单次读取
  package，并确认 checklist、action-plan 与 control-page methods；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready package 完整 shape；
  - default package 包含新增 launch method；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 package 聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/API；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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
```

下一步建议：

继续推进 browser/UI workflow。下一批建议新增一个只读
`createIniPanelShellSessionHandoffPackageSchema()` 与
`isSupportedIniPanelShellSessionHandoffPackage()`，为 package 增加 versioned schema 与 focused
compatibility predicate，便于外部 shell 在消费 package 前做单点兼容性检查；仍保持只读，不新增
控制按钮，不解析 G-code。

八、2026-06-15 继续执行记录：INI panel shell handoff package schema gate

本轮按“第一原则：加快实质性推进”继续推进 browser/UI workflow，为 shell handoff package
新增 versioned schema 与 focused compatibility predicate，让外部 shell 能在消费 package 前做
单点 shape 兼容性检查。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackageSchema()`；
- package schema 输出：
  - `apiName: "ini-panel-shell-session-handoff-package"`；
  - `packageVersion: 1`；
  - `fields`；
  - `manifestFields`；
- `ui-shell.js` 新增 `isSupportedIniPanelShellSessionHandoffPackage()`；
- predicate 检查：
  - package 对象存在；
  - `apiName` 匹配；
  - `packageVersion` 匹配；
  - package 顶层 required fields 存在；
  - `manifests` 对象存在；
  - manifest required fields 存在；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffPackageSchema`；
  - `createShellSessionHandoffPackageSchema`；
  - `isSupportedShellSessionHandoffPackage`；
- `createIniPanelLaunchApiManifest().methods` 新增：
  - `getShellSessionHandoffPackageSchema`；
  - `isSupportedShellSessionHandoffPackage`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口：
  - `getShellSessionHandoffPackageSchema()`；
  - `isSupportedShellSessionHandoffPackage()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - package schema version 为 1；
  - 当前 package 可支持；
  - 错误 package version 被拒绝；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能读取
  package schema，并用 predicate 确认 package 可支持；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - package schema 完整 shape；
  - valid package 支持；
  - 错误 version、错误 apiName、缺 package 字段、缺 manifest 字段、null 被拒绝；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 package schema 和 predicate；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/API；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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
```

下一步建议：

继续推进 browser/UI workflow 与文档化可执行工作流。下一批建议新增一个只读
`createIniPanelShellSessionHandoffPackageReport()` 或等价 helper，把 package schema support、
missing package fields、missing manifest fields、version/apiName mismatch 和 checklist blocking
reasons 合并成 display-ready report，便于外部 shell 在拒绝 package 时显示原因；仍保持只读，
不新增控制按钮，不解析 G-code。

九、2026-06-15 继续执行记录：INI panel shell handoff package report

本轮按“第一原则：加快实质性推进”继续推进 browser/UI workflow 与文档化可执行工作流，
新增只读 shell handoff package report，把 package schema support、缺失字段、版本/API mismatch
和 checklist blocking reasons 合并成外部 shell 可直接显示的诊断。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellSessionHandoffPackageReport()`；
- package report 输出：
  - `apiName: "ini-panel-shell-session-handoff-package-report"`；
  - `reportVersion: 1`；
  - `phase`；
  - `ready`；
  - `packageSupported`；
  - `packageReady`；
  - `statusLine`；
  - `schema`；
  - `package`；
  - `missingPackageFields`；
  - `missingManifestFields`；
  - `mismatchFields`；
  - `blockingReasons`；
  - `rows`；
- report rows 固定覆盖：
  - `package-supported`；
  - `package-ready`；
  - `missing-package-fields`；
  - `missing-manifest-fields`；
  - `mismatch-fields`；
  - `blocking-reasons`；
- `createIniPanelShellViewModel()` 新增：
  - `shellSessionHandoffPackageReport`；
  - `createShellSessionHandoffPackageReport`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getShellSessionHandoffPackageReport`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getShellSessionHandoffPackageReport()`；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe：
  - package report `ready === true`；
  - report rows 数量为 6；
  - 当前 report 无 missing package fields；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 能读取
  package report，并确认 package supported 与 report rows；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖：
  - ready package report 完整 shape；
  - version mismatch 输出 `mismatchFields`；
  - 缺 manifest field 输出 `missingManifestFields`；
  - null package 输出全部 missing package fields；
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 package report 聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs`、`verify_ini_panel_entry_docs.mjs` 与
  `docs/panel-entry.md` 同步记录和校验新 helper/API；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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
```

下一步建议：

继续推进 browser/UI workflow。下一批建议新增一个只读
`createIniPanelShellSessionHandoffPackageDisplayViewModel()` 或等价 helper，把 package report
压成稳定 label/value rows 与 status text，供 launch 页面或外部 shell 直接渲染 package report；
仍保持只读，不新增控制按钮，不解析 G-code。

十、2026-06-15 继续执行记录：INI panel workflow overview embedding contract

本轮按 `text13.txt` 执行，不再扩展 `text12.txt`。继续推进 browser/UI workflow，
新增只读 workflow-overview embedding contract，让外部 shell 可以先验证
`workflow-overview.html` iframe 的 API shape，再用 launch API 挂载 workflow overview。

完成内容：

- `ui-shell.js` 新增：
  - `createIniPanelShellWorkflowOverviewContract()`；
  - `createIniPanelShellWorkflowOverviewReadiness()`；
  - `mountIniPanelShellWorkflowOverviewEmbedding()`；
- `createIniPanelLaunchApiManifest().methods` 新增：
  - `getWorkflowOverviewContract`；
  - `getWorkflowOverviewReadiness`；
  - `mountWorkflowOverviewEmbedding`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口：
  - `getWorkflowOverviewContract()`；
  - `getWorkflowOverviewReadiness()`；
  - `mountWorkflowOverviewEmbedding()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增自描述入口：
  - `getWorkflowOverviewContract()`；
  - `getWorkflowOverviewReadinessFromApi()`；
  - `mountWorkflowOverviewEmbedding()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖：
  - overview contract shape；
  - missing API readiness；
  - ready API readiness；
  - embedding result；
  - thrown mount error 转成 data error；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 overview contract/readiness helper；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 加载真实 workflow-overview iframe 后，
  能读取 readiness 并执行 embedding workflow；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 可通过 launch API
  消费真实 workflow-overview iframe；
- `docs/panel-entry.md` 与 `verify_ini_panel_entry_docs.mjs` 同步记录新 helper/API；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_workflow_overview_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 与可执行 gate。下一批建议新增一个只读
`createIniPanelShellWorkflowOverviewEmbeddingReport()` 或等价 helper，把 overview iframe
readiness、missing methods、mount phase、render row count 和 error 合并成 display-ready report，
便于外部 shell 在不能嵌入 overview 时直接显示原因；仍保持只读，不新增控制按钮，不解析 G-code。

十一、2026-06-15 继续执行记录：INI panel workflow overview embedding report

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow 与可执行
gate，新增只读 workflow-overview embedding report，把 iframe API readiness、缺失方法、
mount phase、render row count 和 error 合并成外部 shell 可直接显示的诊断。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellWorkflowOverviewEmbeddingReport()`；
- embedding report 输出：
  - `apiName: "ini-panel-shell-workflow-overview-embedding-report"`；
  - `reportVersion: 1`；
  - `phase`；
  - `ready`；
  - `overviewReady`；
  - `embeddingReady`；
  - `mountReady`；
  - `statusLine`；
  - `pageHref`；
  - `contract`；
  - `missingMethods`；
  - `mountPhase`；
  - `renderRowCount`；
  - `error`；
  - `blockingReasons`；
  - `rows`；
- report rows 固定覆盖：
  - `overview-api`；
  - `missing-methods`；
  - `embedding-ready`；
  - `mount-phase`；
  - `render-row-count`；
  - `error`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getWorkflowOverviewEmbeddingReport`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getWorkflowOverviewEmbeddingReport()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增
  `getWorkflowOverviewEmbeddingReport()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖：
  - blocked embedding report 完整 shape；
  - missing methods report；
  - thrown mount error report；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、默认 blocked report、
  launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 report API；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 读取真实 workflow overview iframe 的
  embedding report；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 读取同一 report；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_workflow_overview_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。下一批建议新增一个只读
`createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel()` 或等价 helper，把 embedding
report 压成稳定 `title/statusText/detailText/rows`，供 launch 页面、workflow overview 页面或外部
shell 直接渲染该 report；仍保持只读，不新增控制按钮，不解析 G-code。

十二、2026-06-15 继续执行记录：INI panel workflow overview embedding display view-model

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow，新增只读
workflow-overview embedding display view-model，把 embedding report 压成稳定
`title/statusText/detailText/rows`，便于 launch 页面、workflow overview 页面和外部 shell
直接渲染 report。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel()`；
- display view-model 输出：
  - `phase: "ready" | "blocked"`；
  - `title: "Workflow overview embedding"`；
  - `statusText: "Ready" | "Blocked"`；
  - `detailText`；
  - `rows`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getWorkflowOverviewEmbeddingDisplayViewModel`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getWorkflowOverviewEmbeddingDisplayViewModel()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增
  `getWorkflowOverviewEmbeddingDisplayViewModel()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 display view-model 的 blocked shape 与 view-model helper
  聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、默认 display view-model、
  launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 display view-model API；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 读取真实 workflow overview iframe 的
  embedding display view-model；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 读取同一 display
  view-model；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_workflow_overview_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。下一批建议新增只读
`createIniPanelShellWorkflowOverviewEmbeddingRenderState()` 或等价 helper，把 embedding display
view-model 压成稳定 `statusLine/dataset/rows`，供 launch 页面或外部 shell 用同一 DOM renderer
显示 overview embedding report；仍保持只读，不新增控制按钮，不解析 G-code。

十三、2026-06-15 继续执行记录：INI panel workflow overview embedding render-state

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow，新增只读
workflow-overview embedding render-state，把 embedding display view-model 压成稳定
`statusLine/dataset/rows`，供 launch 页面、workflow overview 页面或外部 shell 复用同一种
DOM renderer 数据结构显示 overview embedding report。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellWorkflowOverviewEmbeddingRenderState()`；
- render-state 输出：
  - `apiName: "ini-panel-shell-workflow-overview-embedding-render-state"`；
  - `renderStateVersion: 1`；
  - `phase`；
  - `ready`；
  - `title`；
  - `statusText`；
  - `detailText`；
  - `statusLine`；
  - `rows`；
  - `dataset.handoffPhase`；
  - `dataset.handoffReady`；
  - `dataset.handoffScope: "workflow-overview-embedding"`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getWorkflowOverviewEmbeddingRenderState`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getWorkflowOverviewEmbeddingRenderState()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增
  `getWorkflowOverviewEmbeddingRenderState()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 render-state blocked shape 与 view-model helper 聚合关系；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、默认 render-state、
  launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 render-state API；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 读取真实 workflow overview iframe 的
  embedding render-state；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 读取同一 render-state；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_workflow_overview_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。下一批建议新增只读
`createIniPanelShellWorkflowOverviewEmbeddingDomContract()` 或等价 helper，定义 embedding
report 渲染所需 mount/status/rows selectors、dataset keys 和 render-result fields，并为后续
真实 DOM renderer 做准备；仍保持只读，不新增控制按钮，不解析 G-code。

十四、2026-06-15 继续执行记录：INI panel workflow overview embedding DOM contract

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow，新增只读
workflow-overview embedding DOM contract，定义 embedding report 渲染所需的 mount/status/rows
selectors、dataset keys 和 render-result fields，为后续真实 DOM renderer 做准备。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellWorkflowOverviewEmbeddingDomContract()`；
- DOM contract 输出：
  - `apiName: "ini-panel-shell-workflow-overview-embedding-dom-contract"`；
  - `contractVersion: 1`；
  - `requiredNodeIds: ["mount", "status", "rows"]`；
  - 默认 selectors：
    - `[data-workflow-overview-embedding]`；
    - `[data-workflow-overview-embedding-status]`；
    - `[data-workflow-overview-embedding-rows]`；
  - `mountDatasetKeys`；
  - `rowDatasetPrefix`；
  - `rowDatasetKeys`；
  - `renderResultFields`；
- 支持外部 shell 传入自定义 `rowDatasetPrefix` 与 selectors；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getWorkflowOverviewEmbeddingDomContract`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getWorkflowOverviewEmbeddingDomContract()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增
  `getWorkflowOverviewEmbeddingDomContract()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖默认 contract 完整 shape 与自定义 prefix/selectors；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、默认 contract、
  launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 DOM contract API；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 读取真实 workflow overview iframe 的
  embedding DOM contract；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 可读取自定义
  rowDatasetPrefix 的 DOM contract；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_workflow_overview_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。下一批建议新增只读
`createIniPanelShellWorkflowOverviewEmbeddingDomReadiness()` 或等价 helper，检查 embedding
report DOM contract 需要的 document/mount/status/rows 节点是否存在，输出 missing/checks，
为真实 DOM renderer 做最后前置 gate；仍保持只读，不新增控制按钮，不解析 G-code。

十五、2026-06-15 继续执行记录：INI panel workflow overview embedding DOM readiness

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow，新增只读
workflow-overview embedding DOM readiness，检查 embedding report DOM contract 所需的
document/mount/status/rows 节点是否存在，输出 missing/checks，为真实 DOM renderer 做最后
前置 gate。

完成内容：

- `ui-shell.js` 新增 `createIniPanelShellWorkflowOverviewEmbeddingDomReadiness()`；
- DOM readiness 输出：
  - `apiName: "ini-panel-shell-workflow-overview-embedding-dom-readiness"`；
  - `readinessVersion: 1`；
  - `phase: "ready" | "blocked"`；
  - `ready`；
  - `missing`；
  - `checks.document`；
  - `checks.mount`；
  - `checks.status`；
  - `checks.rows`；
  - `checks.rowDatasetPrefix`；
  - `contract`；
- 支持传入自定义 contract、documentRef、mountNode、statusNode、rowsNode；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getWorkflowOverviewEmbeddingDomReadiness`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getWorkflowOverviewEmbeddingDomReadiness()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增
  `getWorkflowOverviewEmbeddingDomReadiness()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 missing document/nodes 与 ready nodes 两种 shape；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、默认 readiness、
  launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 DOM readiness API；
- `ini_panel_launch_smoke.html` 校验真实 launch iframe 读取真实 workflow overview iframe 的
  embedding DOM readiness；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 使用自定义 DOM
  contract 与已有外部节点得到 ready readiness；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_workflow_overview_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。下一批建议新增只读
`renderIniPanelShellWorkflowOverviewEmbeddingState()` 或等价 helper，使用 embedding render-state
与 DOM readiness/contract 渲染 status 与 rows，并返回结构化 render result；仍保持只读，
不新增控制按钮，不解析 G-code。

十六、2026-06-15 继续执行记录：INI panel workflow overview embedding DOM renderer

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow，新增只读
workflow-overview embedding DOM renderer，使用 embedding render-state 与 DOM readiness/contract
渲染 status 与 rows，并返回结构化 render result，便于外部 shell 直接复用同一展示路径。

完成内容：

- `ui-shell.js` 新增 `renderIniPanelShellWorkflowOverviewEmbeddingState()`；
- renderer 行为：
  - 使用 `createIniPanelShellWorkflowOverviewEmbeddingDomReadiness()` 检查 document、mount、
    status、rows 与 row dataset prefix；
  - 将 `renderState.dataset.handoffPhase`、`handoffReady`、`handoffScope` 写入 mount node；
  - 将 `renderState.statusLine` 写入 status node；
  - 将 `renderState.rows` 渲染为 `dt/dd` rows；
  - 返回 `rendered`、`statusLine`、`rowCount`、`rowIds`、`dataset`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `renderWorkflowOverviewEmbeddingState`；
- `createIniPanelShellViewModel()` 暴露
  `renderWorkflowOverviewEmbeddingState`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `renderWorkflowOverviewEmbeddingState()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser
  入口 `renderWorkflowOverviewEmbeddingState()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 fake DOM 渲染结果、dataset、row ids 与 row dataset keys；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 在 workflow overview iframe 内动态创建 embedding
  mount/status/rows 节点并校验 renderer；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 使用自定义 embedding DOM
  contract 调用 renderer；
- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 renderer；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_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_workflow_overview_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。下一批建议新增只读
`mountIniPanelShellWorkflowOverviewEmbeddingState()` 或等价 helper，把 embedding render-state、DOM
readiness、renderer result 与错误捕获合并成不抛异常的结构化 mount workflow result；仍保持只读，
不新增控制按钮，不解析 G-code。

十七、2026-06-15 继续执行记录：INI panel workflow overview embedding mount workflow result

本轮先处理 `text12.txt` 遗留问题：删除未提交的重复/错序“四十三”记录块，使 `text12.txt`
回到归档干净状态；随后按 `text13.txt` 继续推进 browser/UI workflow。新增只读
workflow-overview embedding mount workflow result，把 embedding render-state、DOM readiness、
renderer result 与错误捕获合并成不抛异常的结构化 mount result。

完成内容：

- 清理 `text12.txt` 遗留重复记录：
  - 删除复制“四十二”内容的错序“四十三”块；
  - `git diff -- text12.txt` 为空；
  - `text12.txt` 标题重复检查无输出；
- `ui-shell.js` 新增 `mountIniPanelShellWorkflowOverviewEmbeddingState()`；
- mount workflow result 输出：
  - `apiName: "ini-panel-shell-workflow-overview-embedding-dom-mount"`；
  - `workflowVersion: 1`；
  - `phase: "ready" | "blocked"`；
  - `ready`；
  - `statusLine`；
  - `contract`；
  - `domReadiness`；
  - `renderState`；
  - `renderResult`；
  - `error`；
- DOM 不 ready 时返回 blocked 结果，不抛异常；
- renderer 异常时捕获到 `error` 字段并返回 blocked 结果；
- `createIniPanelLaunchApiManifest().methods` 新增
  `mountWorkflowOverviewEmbeddingState`；
- `createIniPanelShellViewModel()` 暴露
  `mountWorkflowOverviewEmbeddingState`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `mountWorkflowOverviewEmbeddingState()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser
  入口 `mountWorkflowOverviewEmbeddingState()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 fake DOM mount workflow result 与 missing DOM blocked result；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 mount workflow result；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 使用自定义 embedding DOM
  contract 调用 mount workflow result；
- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 mount helper；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_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_workflow_overview_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。下一批建议新增只读
`createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel()` 或等价 helper，把 embedding
mount workflow result 压缩成 stable `title`、`statusText`、`detailText` 与 rows，便于外部 shell
直接显示 mount 结果；仍保持只读，不新增控制按钮，不解析 G-code。

十八、2026-06-15 继续执行记录：INI panel workflow overview embedding mount display view-model

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow，新增只读
workflow-overview embedding mount display view-model，把 embedding mount workflow result 压缩成
stable `title`、`statusText`、`detailText` 与 rows，便于外部 shell 直接显示 mount 结果。

完成内容：

- `ui-shell.js` 新增
  `createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel()`；
- display view-model 输出：
  - `phase: "ready" | "blocked"`；
  - `title: "Workflow overview embedding mount"`；
  - `statusText: "Ready" | "Blocked"`；
  - `detailText`；
  - `rows`；
- rows 覆盖：
  - mount readiness；
  - DOM readiness；
  - missing DOM；
  - render state；
  - render result；
  - render row count；
  - error；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getWorkflowOverviewEmbeddingMountDisplayViewModel`；
- `createIniPanelShellViewModel()` 暴露
  `createWorkflowOverviewEmbeddingMountDisplayViewModel`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getWorkflowOverviewEmbeddingMountDisplayViewModel()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser
  入口 `getWorkflowOverviewEmbeddingMountDisplayViewModel()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 mount display view-model 的 blocked rows 与 missing DOM row；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 mount display view-model；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 从自定义 embedding DOM mount result
  生成 mount display view-model；
- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 display helper；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_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_workflow_overview_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。下一批建议新增只读
`createIniPanelShellWorkflowOverviewEmbeddingMountRenderState()` 或等价 helper，把 mount display
view-model 压缩成 stable `statusLine`、`dataset` 与 rows，作为后续共享 DOM renderer 的输入；仍保持只读，
不新增控制按钮，不解析 G-code。

十九、2026-06-15 继续执行记录：INI panel workflow overview embedding mount render-state

本轮按 `text13.txt` 执行，不扩展 `text12.txt`。继续推进 browser/UI workflow，新增只读
workflow-overview embedding mount render-state，把 mount display view-model 压缩成 stable
`statusLine`、`dataset` 与 rows，作为后续共享 DOM renderer 的输入。

完成内容：

- `ui-shell.js` 新增
  `createIniPanelShellWorkflowOverviewEmbeddingMountRenderState()`；
- mount render-state 输出：
  - `apiName: "ini-panel-shell-workflow-overview-embedding-mount-render-state"`；
  - `renderStateVersion: 1`；
  - `phase: "ready" | "blocked"`；
  - `ready`；
  - `title`；
  - `statusText`；
  - `detailText`；
  - `statusLine`；
  - `rows`；
  - `dataset.handoffPhase`；
  - `dataset.handoffReady`；
  - `dataset.handoffScope: "workflow-overview-embedding-mount"`；
- `createIniPanelLaunchApiManifest().methods` 新增
  `getWorkflowOverviewEmbeddingMountRenderState`；
- `createIniPanelShellViewModel()` 暴露
  `createWorkflowOverviewEmbeddingMountRenderState`；
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
  `getWorkflowOverviewEmbeddingMountRenderState()`；
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser
  入口 `getWorkflowOverviewEmbeddingMountRenderState()`；
- `verify_ini_panel_ui_shell.mjs` 覆盖 mount render-state 的 statusLine、dataset 与 rows；
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API；
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、launch method count 与文档记录；
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API；
- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 mount render-state；
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 从自定义 embedding DOM mount
  display view-model 生成 mount render-state；
- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 render-state helper；
- 未新增控制按钮；
- 未执行 action-plan；
- 未解析 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_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_workflow_overview_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。下一批建议新增只读
`createIniPanelShellWorkflowOverviewEmbeddingMountDomContract()` 或等价 helper，为 mount render-state
定义 mount/status/rows selectors、dataset keys 与 render-result fields，给后续 DOM readiness 和 renderer
提供稳定契约；仍保持只读，不新增控制按钮，不解析 G-code。
