解锁L4-TOOL-DB主机运行环境

结论:已识别RIP版LinuxCNC主机运行时,Tool DB native protocol probe可通过,inventory baseline保持28/28/131/0且promotion继续锁定。
This commit is contained in:
2026-06-19 06:28:38 +08:00
parent f101932bf1
commit d9ac3770a7
18 changed files with 3041 additions and 184 deletions

269
text23.txt Normal file
View File

@@ -0,0 +1,269 @@
项目接续文件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
```