Files
cnc_wams/textbak/text23.txt
wangdequan 626bcfe8e3 继续完成 web-rtcp-5axis-sim-plan
结论:完成 LinuxCNC kinematics WASM ABI 覆盖,并将 web-rtcp-5axis-sim-plan 的 RTCP frame/boundary adapter 接到 xyzac-trt kinematics SDK;Node、build、browser smoke 验证通过。
2026-06-21 16:44:29 +08:00

270 lines
7.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
项目接续文件OPFS/WASM hard block 移植优先级建议
生成时间2026-06-19 CST
本文件接替 `text22.txt` 的“另开 milestone”建议专门回答
```text
在基于 OPFS、WASM 的数控系统仿真中,
L4-PYTHON-REMAP、L4-TOOL-DB、L4-USER-M-PROCESS 哪些可以移植,
以及应该先移植哪一个。
```
重要边界:
```text
本文件是 future runtime milestone 建议,不改变 text22.txt 的当前阶段铁律。
当前阶段仍不得解锁 L4-PYTHON-REMAP / L4-TOOL-DB / L4-USER-M-PROCESS
Node inventory baseline 仍保持 executed=28 passed=28 skipped=131 unexpected_fail=0
promotion_allowed 仍必须保持 0。
```
一、简要结论
三类 hard block 都可以“部分或项目定义下完整”移植到 OPFS/WASM 环境,但可移植方式不同。
推荐优先级:
```text
1. L4-TOOL-DB
2. L4-PYTHON-REMAP
3. L4-USER-M-PROCESS
```
建议先移植 `L4-TOOL-DB`,原因是:
- 当前只有 1 个 inventory row`axis/db_demo/base.ngc`
- 协议边界清晰:`DB_PROGRAM`、`v2.1`、`g`、`FINI`、`l`、`p`、`u`
- OPFS 与 tool DB flat-file persistence 天然匹配;
- 可用 Worker / WASM Python runtime 隔离 `DB_PROGRAM`
- 已有 `text20.txt` / `text21.txt` 规划和 machine-readable artifacts
- 不需要一次性承诺完整 Python remap lifecycle 或 arbitrary external process
- 成功后能形成第一个 hard-block runtime unlock 的可复用 proof pattern。
二、可移植性判断
| Family | 能否移植到 OPFS/WASM | 推荐优先级 | 主要原因 |
| --- | --- | ---: | --- |
| `L4-TOOL-DB` | 可以,建议先做 | 1 | 协议小、状态明确、OPFS 持久化适配自然、只有 1 个 row。 |
| `L4-PYTHON-REMAP` | 可以,但应分阶段做 | 2 | 覆盖面最大,价值高,但需要 LinuxCNC Python remap lifecycle、prolog/epilog、module loading、interpreter state binding。 |
| `L4-USER-M-PROCESS` | 只建议做受控子集,最后做 | 3 | 浏览器不能运行 arbitrary external process必须把 external process 收束成 LinuxCNC-owned state transition proof。 |
三、为什么先做 L4-TOOL-DB
`L4-TOOL-DB` 当前 blocked row 是:
```text
axis/db_demo/base.ngc
```
当前阻塞原因不是 G-code 解释器本身,而是 INI 声明:
```text
[EMCIO]
DB_PROGRAM = ./db_nonran.py
```
这意味着 `.tbl` fallback 不能算 pass。必须证明 LinuxCNC tool DB process protocol
```text
startup handshake: v2.1
get-all: g ... FINI
spindle load notify: l
tool offset notify: p
spindle unload notify: u
flat-file DB persistence
```
在 OPFS/WASM 环境中,推荐定义:
```text
ToolDbProcessPort
```
职责:
- 按 INI 中的 `DB_PROGRAM` 启动受控 runtime
- 维持 line-based protocol
- 记录 transcript
- 将 DB flat file 映射到 OPFS
- 导出 release/browser diagnostics。
不允许:
- 用 `.tbl` fallback 代替 DB_PROGRAM
- 用 JS 直接构造 tool semantics
- 跳过 `tooldb.py` / `db.py` 行为;
- 只靠 browser glue 声称 tool DB pass。
建议 first milestone
```text
tool-db-opfs-wasm-milestone
```
最小完成定义:
1. Native `ENABLE_TOOL_DB_RUNTIME_PROBE=1` 可在完整 LinuxCNC host runtime 上通过;
2. WASM/Worker 能执行等价 DB protocol loop
3. OPFS 能保存并恢复 DB flat-file state
4. transcript 包含 `v2.1` / `g` / `FINI` / `l` / `p` / `u`
5. browser diagnostics 输出 DB program path、OPFS DB path、transcript hash、state summary
6. release artifact 标明 `.tbl fallback sufficient=false`
7. 只有 native + WASM + browser proof 都齐后,才允许考虑把 `axis/db_demo/base.ngc` 从 `SKIP L4-TOOL-DB` 推进。
四、L4-PYTHON-REMAP 的移植建议
`L4-PYTHON-REMAP` 可以移植,但不应该作为第一个解锁对象。
原因:
- 当前涉及 53 个 skip/block rows
- 覆盖 Python module loading、remap callable、prolog/epilog、NGC-only subpath、interpreter state、HAL/UI/HALUI assumptions
- 一旦边界设计不严,很容易把 Python runtime 当作 JS/browser-owned CNC semantics
- 需要比 tool DB 更深地嵌入 LinuxCNC interpreter Python plugin lifecycle。
推荐路线:
```text
先复用 tool DB milestone 中建立的 Python/WASM substrate
再做最小 Python remap lifecycle fixture
最后扩大到 family-level inventory。
```
首个 fixture 仍建议沿用已有 artifact 中的计划:
```text
axis/remap/stop-lookahead/nc_files
```
原因是它更适合作为 lifecycle proof
- 有 Python runtime phase
- 当前已有 native runtime fixture plan
- 比完整 tool-change / five-axis Python remap family 更窄;
- 可以先证明 Python module import、callable dispatch、interpreter lifecycle 和 state observation。
Python remap milestone 的完成定义应至少包括:
1. `python-remap-native-runtime-readiness.tsv` host readiness clear
2. `ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1` native lifecycle probe pass
3. WASM Python runtime 能复现同一 lifecycle
4. remap/prolog/epilog callable 来源绑定 LinuxCNC config/source
5. browser diagnostics 明确 Python runtime mode
6. 不把 NGC-only subroutine asset 当 standalone main program
7. 不因为 Python runtime 可运行就批量解锁全部 53 rows。
五、L4-USER-M-PROCESS 的移植建议
`L4-USER-M-PROCESS` 在浏览器中最不适合按 native external process 语义原样移植。
当前代表 row
```text
axis/vismach/millturn/example.ngc
```
核心阻塞是 external user-M process
```text
M128 / M129 Tcl scripts
HAL pin state updates
kinstype guard
ini.[xyz].* soft-limit state transitions
```
浏览器/WASM 环境不能安全、通用地支持:
- arbitrary executable spawn
- native Tcl process execution
- host HAL daemon mutation
- unrestricted process side effects。
因此不建议把 `L4-USER-M-PROCESS` 定义成“浏览器运行任意 USER_M_PATH executable”。
可行路线只能是受控子集:
```text
LinuxCNC-owned user-M state transition boundary
```
例如对 `millturn`
- 读取 config-owned `M128` / `M129` source
- 绑定 `M428 -> M128`、`M429 -> M129`
- 证明 `kinstype.is-0` / `kinstype.is-1` guard
- 证明 `ini.x.*` / `ini.y.*` / `ini.z.*` state target
- browser 只执行已证明的 state-transition adapter
- diagnostics 明确 `arbitrary_external_process=false`。
推荐把它放在第三优先级,原因是:
- 成功解锁只覆盖 1 个 row
- 需要 HAL/Tcl/user-M process state proof
- 不能形成通用 external process 支持;
- 安全边界和用户期望更容易误读。
六、总体推荐路线
推荐 roadmap
```text
Phase A继续保持 text22 lock
Phase BL4-TOOL-DB OPFS/WASM proof
Phase C复用 Python/WASM substrate做最小 L4-PYTHON-REMAP lifecycle proof
Phase D做受控 L4-USER-M-PROCESS state-transition proof
```
不要反过来做:
- 不要先做 `L4-USER-M-PROCESS`,因为它不是通用 browser process model
- 不要直接批量做 `L4-PYTHON-REMAP`,因为 blast radius 太大;
- 不要用 `.tbl` fallback 解 `L4-TOOL-DB`
- 不要用 virtual HAL 或 JS glue 替代 LinuxCNC CNC/runtime 语义。
七、建议的下一步文件/代码工作
如果要开启第一个 hard-block runtime milestone建议创建
```text
text24.txt
```
主题:
```text
L4-TOOL-DB OPFS/WASM runtime milestone execution plan
```
内容应包括:
1. `ToolDbProcessPort` API 草案;
2. Worker/Python runtime 选择;
3. OPFS DB file layout
4. transcript schema
5. native/WASM/browser proof gates
6. release diagnostics fields
7. promotion lock 更新条件;
8. rollback 条件。
八、最终建议
当前问题的直接答案:
```text
都可以研究移植;
第一个应该移植 L4-TOOL-DB
第二个做 L4-PYTHON-REMAP
第三个做 L4-USER-M-PROCESS 的受控 state-transition 子集。
```
当前阶段仍不应改变:
```text
L4-PYTHON-REMAP locked
L4-TOOL-DB locked
L4-USER-M-PROCESS locked
promotion_allowed=0
baseline=28/28/131/0
```