802 lines
31 KiB
Plaintext
802 lines
31 KiB
Plaintext
项目整体完成情况与后续执行计划
|
||
|
||
生成时间:2026-06-15 CST
|
||
|
||
本文件接替 `text13.txt`。后续工作按 `text14.txt` 执行;除非明确要求审计旧记录,
|
||
不要再回到 `text1/text2/text3/text4/text5/text6/text7/text8/text9/text10/text11/text12/text13`
|
||
扩展进度。`text13.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. 当前续接点。
|
||
|
||
`text13.txt` 已推进到:
|
||
|
||
```text
|
||
十九、2026-06-15 继续执行记录:INI panel workflow overview embedding mount render-state
|
||
```
|
||
|
||
本文件从 `text14.txt` 重新开始记录后续进度。
|
||
|
||
2. 每轮开始前必须先执行:
|
||
|
||
```bash
|
||
git status --short
|
||
git log -5 --oneline
|
||
tail -n 120 text14.txt
|
||
awk '/^[一二三四五六七八九十百]+、/ {print}' text14.txt | sort | uniq -d
|
||
```
|
||
|
||
执行规则:
|
||
|
||
- 如果 `git status --short` 是 clean,且最新提交已经包含当前建议工作,不要重复追加记录;
|
||
- 每轮只追加一个新的中文编号记录;
|
||
- 提交前再次检查标题唯一性;
|
||
- `text14.txt` 只记录新的后续进度,不复制 `text13.txt` 的长历史;
|
||
- 每批完成后,如果要写记录,先写 `text14.txt`,再提交该批代码和记录;
|
||
- 如果发现重复记录,先做 dedupe 清理并提交,再继续新功能或新 guard;
|
||
- `text13.txt` 不再追加新进度,除非明确要求审计或修正历史记录。
|
||
|
||
三、当前完成情况摘要
|
||
|
||
1. 当前工作树状态。
|
||
|
||
切换到 `text14.txt` 时工作树为 clean。
|
||
|
||
2. 最近提交:
|
||
|
||
```text
|
||
1a863fa 推进 INI 面板 workflow overview embedding mount render state
|
||
fc9e6a3 推进 INI 面板 workflow overview embedding mount display
|
||
83df80d 推进 INI 面板 workflow overview embedding mount result
|
||
75f71c2 推进 INI 面板 workflow overview embedding DOM renderer
|
||
6856721 推进 INI 面板 workflow overview embedding DOM readiness
|
||
3cfd4b3 推进 INI 面板 workflow overview embedding DOM contract
|
||
f70fc09 推进 INI 面板 workflow overview embedding render-state
|
||
4fdbadd 推进 INI 面板 workflow overview embedding display view-model
|
||
```
|
||
|
||
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 schema、compatibility report、display view-model、snapshot;
|
||
- shell handoff package、package report、package display/render state;
|
||
- shell handoff package mount state、mount display/render state;
|
||
- shell handoff mount DOM contract、DOM readiness、renderer、mount workflow;
|
||
- shell handoff workflow summary、display/render state、DOM contract/readiness、renderer、mount workflow;
|
||
- workflow overview surface;
|
||
- workflow overview embedding report、display view-model、render-state;
|
||
- workflow overview embedding DOM contract、DOM readiness、renderer;
|
||
- workflow overview embedding mount workflow result、mount display view-model、mount render-state。
|
||
|
||
当前聚合验证入口:
|
||
|
||
```bash
|
||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||
```
|
||
|
||
2. Browser/UI workflow 验证。
|
||
|
||
当前 browser INI panel smoke 覆盖真实 OPFS/session persistence workflow、control page、
|
||
workflow overview surface 与外部 shell 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
|
||
browser_ini_workflow_overview_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
|
||
```
|
||
|
||
六、下一步建议
|
||
|
||
继续推进 browser/UI workflow。下一批建议新增只读
|
||
`createIniPanelShellWorkflowOverviewEmbeddingMountDomContract()` 或等价 helper,为 mount render-state
|
||
定义 mount/status/rows selectors、dataset keys 与 render-result fields,给后续 DOM readiness 和 renderer
|
||
提供稳定契约;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
七、快速推进完成整个项目的详细工作内容和实现步骤
|
||
|
||
本节是后续按 `text14.txt` 执行的总路线图。目标不是继续堆叠零散 helper,而是把当前
|
||
LinuxCNC WASM/browser port 推到“可交付、可验证、可接续维护”的完整状态。
|
||
|
||
总体完成定义:
|
||
|
||
- CNC 语义边界清晰:所有解释器、G-code、tool、parameter、planner、kinematics、remap
|
||
语义仍来自 LinuxCNC upstream 或 vendored LinuxCNC C/C++/配置/脚本源码;
|
||
- Browser 可用:INI panel、control page、workflow overview、外部 shell handoff、OPFS/session
|
||
persistence 都有真实 browser smoke;
|
||
- SDK 可用:外部调用方能通过稳定 API 完成加载配置、保存/恢复 session、读取只读状态、
|
||
获取 workflow report/render-state、执行只读 mount;
|
||
- Coverage 可解释:sim config inventory、promotion/skip 原因、blocked runtime family 都有
|
||
机器可读输出和文档说明;
|
||
- Gate 可复现:Node、browser、host 聚合 smoke 和 source/vendor guard 稳定通过;
|
||
- 文档可执行:新接手者只看 `text14.txt`、`README.md`、`docs/panel-entry.md`、coverage
|
||
docs 即可继续工作。
|
||
|
||
推进顺序必须按以下批次执行;每批完成后追加一个新的中文编号记录到 `text14.txt` 并提交。
|
||
|
||
1. Browser/UI workflow 收口批次。
|
||
|
||
目标:完成 workflow overview embedding mount render-state 的 DOM contract/readiness/renderer/mount
|
||
闭环,让外部 shell 无需手写 DOM 细节即可显示完整 embedding mount 结果。
|
||
|
||
实现步骤:
|
||
|
||
- 新增 `createIniPanelShellWorkflowOverviewEmbeddingMountDomContract()`:
|
||
- 定义默认 selectors:
|
||
- `[data-workflow-overview-embedding-mount]`;
|
||
- `[data-workflow-overview-embedding-mount-status]`;
|
||
- `[data-workflow-overview-embedding-mount-rows]`;
|
||
- 定义 `mountDatasetKeys`:
|
||
- `handoffPhase`;
|
||
- `handoffReady`;
|
||
- `handoffScope`;
|
||
- 定义 row dataset prefix,默认 `workflowOverviewEmbeddingMount`;
|
||
- 定义 `renderResultFields`:
|
||
- `rendered`;
|
||
- `statusLine`;
|
||
- `rowCount`;
|
||
- `rowIds`;
|
||
- `dataset`;
|
||
- 新增 `createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness()`:
|
||
- 检查 document、mount、status、rows、rowDatasetPrefix;
|
||
- 返回 `apiName`、`readinessVersion`、`phase`、`ready`、`missing`、`checks`、`contract`;
|
||
- 新增 `renderIniPanelShellWorkflowOverviewEmbeddingMountState()`:
|
||
- 输入 mount render-state 与 DOM contract;
|
||
- 写入 mount dataset;
|
||
- 写入 status text;
|
||
- 渲染 `dt/dd` rows;
|
||
- 返回结构化 render result;
|
||
- 新增 `mountIniPanelShellWorkflowOverviewEmbeddingMountState()`:
|
||
- DOM 不 ready 时返回 blocked result;
|
||
- render 异常时捕获到 `error` 字段;
|
||
- 成功时返回 `workflowVersion`、`phase`、`ready`、`statusLine`、`domReadiness`、
|
||
`renderState`、`renderResult`、`error`;
|
||
- 在 `createIniPanelLaunchApiManifest().methods`、`createIniPanelShellViewModel()`、
|
||
`launch.html`、`workflow-overview.html` 暴露上述 API;
|
||
- 更新:
|
||
- `verify_ini_panel_ui_shell.mjs`;
|
||
- `verify_ini_panel_launch_api_manifest.mjs`;
|
||
- `verify_ini_panel_shell_integration_manifest.mjs`;
|
||
- `verify_ini_panel_entry_docs.mjs`;
|
||
- `ini_panel_workflow_overview_smoke.html`;
|
||
- `ini_panel_shell_integration_workflow_smoke.html`;
|
||
- `ini_panel_launch_smoke.html`;
|
||
- `docs/panel-entry.md`。
|
||
|
||
完成判定:
|
||
|
||
- 外部 shell 使用自定义 DOM contract 能拿到 ready DOM readiness;
|
||
- mount render-state 能被真实 browser DOM renderer 渲染;
|
||
- mount workflow result 不抛异常,错误通过结构化 `error` 返回;
|
||
- `verify_ui_node_smokes.sh` 与 `verify_ini_panel_browser.sh` 通过。
|
||
|
||
2. SDK/API surface 收口批次。
|
||
|
||
目标:把当前分散的 UI helper/API 能力整理成外部调用方可稳定消费的 SDK surface。
|
||
|
||
实现步骤:
|
||
|
||
- 检查 `runtime/sdk/src/index.js`、`runtime/sdk/src/linuxcnc-ini.js`、
|
||
`runtime/sdk/src/linuxcnc-interp.js`、`runtime/sdk/src/sim-config-staging.js`;
|
||
- 为浏览器 UI workflow 新增或整理 SDK export:
|
||
- entry manifest helper;
|
||
- launch API manifest/schema helper;
|
||
- shell integration manifest/readiness/workflow plan;
|
||
- session handoff summary/package/workflow helper;
|
||
- workflow overview embedding report/display/render/mount helper;
|
||
- OPFS file/session bridge helper;
|
||
- 保持 SDK 只做 API 聚合、staging、OPFS/session、WASM/browser boundary,不加入 CNC 语义;
|
||
- 增加 Node SDK smoke:
|
||
- 验证 export 名称;
|
||
- 验证 manifest schema;
|
||
- 验证 helper 返回稳定 shape;
|
||
- 验证不依赖 browser 目录枚举;
|
||
- 更新 `runtime/sdk/README.md`:
|
||
- 最小 browser 调用示例;
|
||
- Node smoke 命令;
|
||
- 不支持项和 blocked family 说明。
|
||
|
||
完成判定:
|
||
|
||
- SDK exports 与 UI/browser manifest 一致;
|
||
- Node SDK smoke 纳入 `verify_host_smokes.sh` 或明确纳入 UI node 聚合;
|
||
- `runtime/sdk/README.md` 可直接指导外部调用方使用。
|
||
|
||
3. OPFS/session persistence 收口批次。
|
||
|
||
目标:把 OPFS 文件、session snapshot、control page readonly status、workflow handoff 的真实
|
||
browser 使用路径收口为可复用 workflow。
|
||
|
||
实现步骤:
|
||
|
||
- 审查 `runtime/opfs/`:
|
||
- `file-service.js`;
|
||
- `machine-file-store.js`;
|
||
- `snapshot-store.js`;
|
||
- `linuxcnc-machine-session-bridge.js`;
|
||
- tool/parameter bridge;
|
||
- 为 UI workflow 增加一个只读 summary/report:
|
||
- OPFS capability;
|
||
- session snapshot availability;
|
||
- loaded machine/session ids;
|
||
- last save/load status;
|
||
- readonly control status availability;
|
||
- Browser smoke 增加一条端到端路径:
|
||
- 保存 machine file;
|
||
- 保存 session snapshot;
|
||
- reload/load session;
|
||
- control page 读取 readonly status;
|
||
- shell workflow 读取 handoff summary;
|
||
- 不新增控制按钮,不模拟 LinuxCNC runtime,不解析 G-code。
|
||
|
||
完成判定:
|
||
|
||
- `browser_ini_opfs_smoke=ok` 仍通过;
|
||
- 新增 OPFS/session workflow summary 的 Node 与 browser smoke;
|
||
- 文档说明 browser OPFS 权限、scope、失败原因。
|
||
|
||
4. Sim config coverage promotion 批次。
|
||
|
||
目标:把当前 skipped sim configs 转为“有证据的 skip/promotion 矩阵”,能快速推进可 promotion
|
||
类别,同时明确 blocked 类别。
|
||
|
||
实现步骤:
|
||
|
||
- 读取并更新:
|
||
- `docs/sim-configs-coverage-matrix.md`;
|
||
- `docs/sim-configs-completion-plan.md`;
|
||
- `docs/compatibility-validation.md`;
|
||
- `tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`;
|
||
- 将 skipped configs 按原因分组:
|
||
- `ASSET_ONLY`;
|
||
- `L4_PYTHON_REMAP`;
|
||
- `L4_TOOL_DB`;
|
||
- `L4_USER_M_PROCESS`;
|
||
- `NON_MAIN_CLASS`;
|
||
- `UPSTREAM_DEMO`;
|
||
- 对可 promotion 类别只做 LinuxCNC-owned boundary proof:
|
||
- 先 native probe;
|
||
- 再 Node/WASM inventory;
|
||
- 最后 browser/host gate;
|
||
- 不把 full-process/HAL/UI/Python/tool DB 依赖硬改成 pass;
|
||
- 对仍 blocked 类别补齐机器可读 skip reason 与文档说明。
|
||
|
||
完成判定:
|
||
|
||
- `sim_configs_wasm_node_inventory_unexpected_fail=0`;
|
||
- 每个 skip family 都有文档解释;
|
||
- 可 promotion 项有 native/Node/browser 顺序证据;
|
||
- blocked runtime family 不被误 promotion。
|
||
|
||
5. Host/runtime boundary proof 批次。
|
||
|
||
目标:把 host/runtime 能力边界从“能跑 smoke”提升为“能说明为什么 pass/skip/blocked”。
|
||
|
||
实现步骤:
|
||
|
||
- 审查 native probes:
|
||
- `probe_millturn_user_m_runtime.sh`;
|
||
- `probe_tool_db_runtime.sh`;
|
||
- `probe_python_remap_runtime.sh`;
|
||
- `verify_native_probes.sh`;
|
||
- 在没有 LinuxCNC host runtime 的环境下保持 blocked,不执行 ENABLE probe;
|
||
- 如果环境提供真实 LinuxCNC host runtime:
|
||
- 先单独执行 ENABLE probe;
|
||
- 记录真实输出;
|
||
- 再决定是否 promotion;
|
||
- 同步 Node/browser/host gate;
|
||
- 增加或整理 boundary report:
|
||
- runtime family;
|
||
- native proof available;
|
||
- wasm/browser support;
|
||
- promotion status;
|
||
- blocking reason。
|
||
|
||
完成判定:
|
||
|
||
- `verify_host_smokes.sh` 输出稳定;
|
||
- blocked family 有明确边界 report;
|
||
- 没有把缺 runtime 的情况伪装成 pass。
|
||
|
||
6. Browser UX 最小完成批次。
|
||
|
||
目标:让当前 UI 不只是测试可用,也具备外部 shell 可嵌入、可诊断、可解释的最小完成度。
|
||
|
||
实现步骤:
|
||
|
||
- 保持现有页面结构:
|
||
- `launch.html`;
|
||
- `index.html`;
|
||
- `control-page.html`;
|
||
- `workflow-overview.html`;
|
||
- 不新增控制按钮;
|
||
- 不做营销 landing page;
|
||
- 增加或收口只读显示:
|
||
- launch API manifest/status;
|
||
- workflow overview embedding mount result;
|
||
- OPFS/session summary;
|
||
- blocked reasons;
|
||
- 保证每个 browser namespace 都有:
|
||
- schema/manifest;
|
||
- readiness;
|
||
- display view-model;
|
||
- render-state;
|
||
- DOM contract/readiness;
|
||
- renderer 或 mount workflow;
|
||
- Playwright/browser smoke 验证真实 DOM 不缺节点、status text 与 rows 正确。
|
||
|
||
完成判定:
|
||
|
||
- `browser_ini_launch_smoke=ok`;
|
||
- `browser_ini_workflow_overview_smoke=ok`;
|
||
- `browser_ini_shell_integration_workflow_smoke=ok`;
|
||
- 页面 API 与 docs 完全一致。
|
||
|
||
7. Documentation/release gate 批次。
|
||
|
||
目标:把项目收口为可交付状态,避免后续只能从聊天记录恢复上下文。
|
||
|
||
实现步骤:
|
||
|
||
- 更新 `README.md`:
|
||
- 项目目标;
|
||
- 当前可用能力;
|
||
- 快速验证命令;
|
||
- 当前不支持/blocked 项;
|
||
- 更新 `docs/panel-entry.md`:
|
||
- browser entry;
|
||
- API namespace;
|
||
- shell handoff/workflow overview;
|
||
- embedding/mount render path;
|
||
- 更新 `docs/source-reuse-map.md`:
|
||
- LinuxCNC-owned semantic source;
|
||
- JS/browser boundary;
|
||
- 更新 `docs/drift-report.md`:
|
||
- upstream sync 状态;
|
||
- local wrapper/shim 状态;
|
||
- 新增或更新最终 checklist:
|
||
- source/vendor guard;
|
||
- standalone CNC semantics guard;
|
||
- Node smoke;
|
||
- browser smoke;
|
||
- host smoke;
|
||
- native baseline 如适用。
|
||
|
||
完成判定:
|
||
|
||
- 新开发者可以只按 README/docs/text14 执行;
|
||
- 没有必须依赖旧 `text1` 到 `text13` 的隐性步骤;
|
||
- 所有命令可复制执行。
|
||
|
||
8. 最终验收批次。
|
||
|
||
目标:确认整个项目达到当前 scope 的完成状态。
|
||
|
||
最终验收命令:
|
||
|
||
```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
|
||
```
|
||
|
||
如涉及 native/source/staging 大范围改动,再执行:
|
||
|
||
```bash
|
||
wasm-port/tests/native/verify_nc_files.sh
|
||
wasm-port/tests/native/verify_sim_configs.sh
|
||
```
|
||
|
||
最终完成判定:
|
||
|
||
- 工作树 clean;
|
||
- 最新提交包含最后一次 `text14.txt` 完成记录;
|
||
- 所有必须 gate 通过;
|
||
- sim config inventory `unexpected_fail=0`;
|
||
- browser INI panel smoke 全部 `ok`;
|
||
- host 聚合输出 `host_wasm_opfs_browser_smokes=ok`;
|
||
- blocked runtime family 明确保留 blocked,不误 promotion;
|
||
- 文档中下一步建议只剩真实外部依赖或明确 scope 外事项。
|
||
|
||
八、2026-06-15 继续执行记录:INI panel workflow overview embedding mount DOM contract
|
||
|
||
本轮按 `text14.txt` 执行,从 Browser/UI workflow 收口批次开始快速推进。新增只读
|
||
workflow-overview embedding mount DOM contract,为 mount render-state 定义 mount/status/rows
|
||
selectors、dataset keys 与 render-result fields,给后续 DOM readiness 和 renderer 提供稳定契约。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增
|
||
`createIniPanelShellWorkflowOverviewEmbeddingMountDomContract()`;
|
||
- mount DOM contract 输出:
|
||
- `apiName: "ini-panel-shell-workflow-overview-embedding-mount-dom-contract"`;
|
||
- `contractVersion: 1`;
|
||
- `requiredNodeIds: ["mount", "status", "rows"]`;
|
||
- 默认 selectors:
|
||
- `[data-workflow-overview-embedding-mount]`;
|
||
- `[data-workflow-overview-embedding-mount-status]`;
|
||
- `[data-workflow-overview-embedding-mount-rows]`;
|
||
- `mountDatasetKeys`;
|
||
- `rowDatasetPrefix: "workflowOverviewEmbeddingMount"`;
|
||
- `rowDatasetKeys`;
|
||
- `renderResultFields`;
|
||
- 支持自定义 `rowDatasetPrefix` 与 selectors;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增
|
||
`getWorkflowOverviewEmbeddingMountDomContract`;
|
||
- `createIniPanelShellViewModel()` 暴露
|
||
`createWorkflowOverviewEmbeddingMountDomContract`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
|
||
`getWorkflowOverviewEmbeddingMountDomContract()`;
|
||
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser
|
||
入口 `getWorkflowOverviewEmbeddingMountDomContract()`;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖默认 contract 与自定义 prefix/selectors;
|
||
- `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 DOM contract;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 自定义 mount DOM contract;
|
||
- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 contract 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 收口批次。下一批建议新增只读
|
||
`createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness()` 或等价 helper,检查 mount
|
||
render-state contract 所需 document/mount/status/rows 节点是否存在,输出 missing/checks,
|
||
为后续 renderer 和 mount workflow 提供稳定前置 gate;仍保持只读,不新增控制按钮,不解析 G-code。
|
||
|
||
九、2026-06-15 继续执行记录:INI panel workflow overview embedding mount DOM readiness
|
||
|
||
本轮按 `text14.txt` 执行,继续推进 Browser/UI workflow 收口批次。新增只读
|
||
workflow-overview embedding mount DOM readiness,检查 mount render-state contract 所需
|
||
document/mount/status/rows 节点是否存在,输出 missing/checks,为后续 renderer 和 mount workflow
|
||
提供稳定前置 gate。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增
|
||
`createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness()`;
|
||
- mount DOM readiness 输出:
|
||
- `apiName: "ini-panel-shell-workflow-overview-embedding-mount-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` 新增
|
||
`getWorkflowOverviewEmbeddingMountDomReadiness`;
|
||
- `createIniPanelShellViewModel()` 暴露
|
||
`createWorkflowOverviewEmbeddingMountDomReadiness`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
|
||
`getWorkflowOverviewEmbeddingMountDomReadiness()`;
|
||
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser
|
||
入口 `getWorkflowOverviewEmbeddingMountDomReadiness()`;
|
||
- `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、launch method count 与文档记录;
|
||
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API;
|
||
- `ini_panel_workflow_overview_smoke.html` 动态创建 mount render-state DOM 节点并校验 ready readiness;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 自定义 mount DOM contract 的 blocked readiness;
|
||
- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 readiness helper;
|
||
- `PROJECT_COMPLETION_TRACKER.md` 同步当前完成批次与下一步任务;
|
||
- 未新增控制按钮;
|
||
- 未执行 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 收口批次。下一批建议新增只读
|
||
`renderIniPanelShellWorkflowOverviewEmbeddingMountState()` 或等价 helper,使用 mount render-state 与
|
||
mount DOM readiness/contract 渲染 status 与 rows,并返回结构化 render result;仍保持只读,
|
||
不新增控制按钮,不解析 G-code。
|
||
|
||
十、2026-06-15 继续执行记录:INI panel workflow overview embedding mount DOM renderer
|
||
|
||
本轮按 `text14.txt` 执行,继续推进 Browser/UI workflow 收口批次。新增只读
|
||
workflow-overview embedding mount DOM renderer,使用 mount render-state 与 mount DOM
|
||
readiness/contract 渲染 status 与 rows,并返回结构化 render result。
|
||
|
||
完成内容:
|
||
|
||
- `ui-shell.js` 新增
|
||
`renderIniPanelShellWorkflowOverviewEmbeddingMountState()`;
|
||
- renderer 在 DOM readiness ready 时写入:
|
||
- mount dataset:
|
||
`handoffPhase`、`handoffReady`、`handoffScope`;
|
||
- status text;
|
||
- rows `<dt>/<dd>` 与 contract 定义的 row dataset keys;
|
||
- renderer 返回结构化 render result:
|
||
- `rendered`;
|
||
- `statusLine`;
|
||
- `rowCount`;
|
||
- `rowIds`;
|
||
- `dataset`;
|
||
- DOM readiness blocked 时保持抛错行为,与既有 workflow/embedding renderer 模式一致;
|
||
- `createIniPanelLaunchApiManifest().methods` 新增
|
||
`renderWorkflowOverviewEmbeddingMountState`;
|
||
- `createIniPanelShellViewModel()` 暴露
|
||
`renderWorkflowOverviewEmbeddingMountState`;
|
||
- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口
|
||
`renderWorkflowOverviewEmbeddingMountState()`;
|
||
- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser
|
||
入口 `renderWorkflowOverviewEmbeddingMountState()`;
|
||
- `verify_ini_panel_ui_shell.mjs` 覆盖 renderer 返回 shape、dataset 写入与 rows dataset;
|
||
- `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 browser 页面中执行 mount
|
||
render-state DOM 渲染并校验 render result、row count、dataset 与 status text;
|
||
- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 renderer;
|
||
- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell launch API 暴露新 renderer;
|
||
- `PROJECT_COMPLETION_TRACKER.md` 同步当前完成批次与下一步任务;
|
||
- 未新增控制按钮;
|
||
- 未执行 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 收口批次。下一批建议新增只读
|
||
`mountIniPanelShellWorkflowOverviewEmbeddingMountState()` 或等价非抛错 wrapper,将 mount DOM
|
||
readiness、render-state、renderer 与 render-result 聚合成稳定 mount workflow result,供外部 shell
|
||
直接调用;仍保持只读,不新增控制按钮,不解析 G-code。
|