解锁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

414
text24.txt Normal file
View File

@@ -0,0 +1,414 @@
项目接续文件L4-TOOL-DB OPFS/WASM runtime milestone 执行计划
生成时间2026-06-19 CST
本文件接替 `text23.txt`,回答“第一个先做 `L4-TOOL-DB`,具体如何做”。
重要边界:
```text
本文件是单独 hard-block runtime milestone 的执行计划。
不是 text22.txt 当前 evidence-based promotion 阶段的一部分。
在本 milestone 完成前:
axis/db_demo/base.ngc 仍必须保持 SKIP L4-TOOL-DB
promotion_allowed=0
baseline 仍保持 executed=28 passed=28 skipped=131 unexpected_fail=0。
```
一、目标
目标不是让 `axis/db_demo/base.ngc` 通过 `.tbl` fallback也不是用 JavaScript 重新实现 tool semantics。
目标是证明:
```text
LinuxCNC-owned tool DB protocol + DB_PROGRAM behavior + OPFS persistence
可以在 native / WASM / browser proof chain 中成立。
```
最小目标 row
```text
axis/db_demo/base.ngc
ini=axis/db_demo/db_nonran.ini
blocked=L4-TOOL-DB
DB_PROGRAM=./db_nonran.py
```
必须保留的协议:
```text
startup handshake: v2.1
get-all: g ... FINI
spindle load notify: l
tool offset notify: p
spindle unload notify: u
flat-file persistence
```
二、当前已有基础
已有 source/protocol accounting
```text
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-boundary-summary.tsv
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-protocol-gates.tsv
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-transaction-plan.tsv
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-native-protocol-alignment.tsv
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-native-runtime-readiness.tsv
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-native-runtime-probe-gate.tsv
```
当前 probe 状态:
```text
python3=1
axis/db_demo/db_nonran.py=1
linuxcnc.so=1
tooldb.py=1
linuxcnc=0
milltask=0
halcmd=0
runtime_ready=0
source_proof_ready=1
gate_status=blocked_missing_host_runtime
promotion_allowed=0
```
已有 native probe 入口:
```text
wasm-port/tests/native/probe_tool_db_runtime.sh
```
三、Phase 1native protocol proof 先闭环
目的:先证明项目记录的 tool DB transaction contract 与真实 LinuxCNC DB runtime 一致。
1. 准备完整 LinuxCNC host runtime。
需要 PATH 上存在:
```text
python3
linuxcnc
milltask
halcmd
```
需要 Python 模块可 import
```bash
python3 -c "import linuxcnc; import tooldb; print('linuxcnc_tooldb_python_modules=ok')"
```
2. 先跑 readiness不启用执行。
```bash
wasm-port/tests/native/probe_tool_db_runtime.sh
```
可接受输出:
```text
tool_db_runtime_probe_status=ready_disabled_by_default
```
如果仍输出:
```text
tool_db_runtime_probe_status=skipped_missing_host_runtime
```
则先修 host/container runtime不改项目 fallback。
3. 显式启用 native runtime probe。
```bash
ENABLE_TOOL_DB_RUNTIME_PROBE=1 wasm-port/tests/native/probe_tool_db_runtime.sh
```
必须看到:
```text
tool_db_runtime_probe_status=runtime_protocol_probe_passed
```
该 probe 必须证明:
- `db_nonran.py` 启动并返回 `v2.1`
- `g` 返回 `T10..T19` 并以 `FINI` 结束;
- 初始 pocket 是 `tno+100`
- `p t11 p111 d0.33 z0.11` 后 get-all 能看到状态更新;
- `l t14 p0` 后 `T14` 进入 spindle pocket `P0`
- `u t0 p0` 后 `T14` 回到 `P114`
- DB savefile 包含 mutation
- 输出仍保持 `tool_db_execution_enabled=0`、`tool_db_promotion_allowed=0`。
4. 刷新 inventory artifacts。
```bash
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
```
预期仍不改变 baseline
```text
executed=28
passed=28
skipped=131
unexpected_fail=0
```
但 tool DB runtime artifacts 应进入 “native proof ready, waiting for Node/browser proof” 类型状态。
四、Phase 2定义 WASM ToolDbProcessPort
目的:把 native child-process edge 改成可在 WASM/browser 中验证的协议端口。
建议新增抽象:
```text
ToolDbProcessPort
```
建议 API
```text
createLinuxCncToolDbProcessPort({
dbProgramPath,
sourceFiles,
opfsRoot,
runtimeMode,
})
start()
writeLine(line)
readLine()
runTransactionPlan(plan)
exportTranscript()
close()
```
职责:
- 按 INI 的 `DB_PROGRAM` 定位 DB program
- 提供 line-based protocol I/O
- 记录 transcript
- 将 DB flat-file 映射到 OPFS
- 导出 diagnostics artifact。
不允许:
- 解析 `.tbl` 作为 pass
- JS 直接构造 tool table semantics
- 跳过 `tooldb.py`
- 不跑 `db.py` / `db_nonran.py` 回调;
- 只用 fixture transcript 假装 runtime pass。
五、Phase 3选择 DB_PROGRAM runtime
推荐首选:
```text
Web Worker + WASM Python runtime
```
Worker 内加载:
```text
configs/sim/axis/db_demo/db_nonran.py
configs/sim/axis/db_demo/db.py
lib/python/tooldb.py
minimal linuxcnc Python integration shim
OPFS-backed DB flat file
```
注意:
```text
minimal linuxcnc shim 只能覆盖 DB demo 必需 integration surface
例如 linuxcnc.command().load_tool_table 的同步边界记录。
不能承载 tool semantics。
```
如果暂时没有 Python/WASM runtime不要直接改成 JS 版 DB program。可以先做
```text
tool-db-process-port contract tests
transcript schema
OPFS persistence store
browser diagnostics shell
```
但仍保持:
```text
runtime_execution_ready=0
promotion_allowed=0
```
六、Phase 4OPFS persistence layout
建议 OPFS 路径:
```text
/machines/<machine-id>/tool-db/db_nonran_file
/machines/<machine-id>/tool-db/transcripts/<run-id>.json
```
必须验证:
1. 初次启动可创建 DB file
2. `p` / `l` / `u` 后 DB file 更新;
3. 关闭 session 后重新加载仍能读回状态;
4. diagnostics 导出:
```text
db_program_path
opfs_db_path
transcript_hash
db_file_hash
startup_tool_count
mutation_count
tbl_fallback_sufficient=false
promotion_allowed=0
```
七、Phase 5Node/WASM proof
新增 Node gate 建议:
```text
wasm-port/tests/wasm/node/verify_tool_db_process_port_wasm.sh
```
该 gate 要证明:
- 从 INI 解析到 `DB_PROGRAM=./db_nonran.py`
- ToolDbProcessPort 可启动 runtime
- transcript 包含 `v2.1` / `g` / `FINI` / `p` / `l` / `u`
- OPFS-equivalent store 可 roundtrip DB file
- `.tbl fallback sufficient=false`
- 输出 `tool_db_process_port_wasm=ok`
- 不改 `verify_sim_configs_inventory_wasm.sh` baseline。
八、Phase 6browser diagnostics proof
新增 browser gate 建议:
```text
wasm-port/tests/browser/verify_tool_db_process_browser.sh
```
browser diagnostics 应显示:
```text
tool_db_runtime_mode=wasm-tool-db-protocol-worker
db_program=./db_nonran.py
opfs_db_path=/machines/<machine-id>/tool-db/db_nonran_file
protocol_transcript_ready=true
opfs_persistence_ready=true
tbl_fallback_sufficient=false
promotion_allowed=0
```
UI 只展示状态和 transcript evidence不实现 tool semantics。
九、Phase 7release artifact / promotion lock
在 native + Node/WASM + browser proof 都通过前release artifact 只能显示:
```text
L4-TOOL-DB locked
tool_db_native_protocol_ready=<0|1>
tool_db_wasm_protocol_ready=<0|1>
tool_db_browser_protocol_ready=<0|1>
promotion_allowed=0
```
只有三层 proof 都为 ready 后,才能另起变更更新:
```text
runtime-boundary-promotion-readiness.tsv
runtime-boundary-promotion-blockers.tsv
runtime-boundary-post-native-pass-gates.tsv
blocked-runtime-promotion-lock.tsv
promotion-candidates.tsv
```
即使到那一步,也要单独 review 是否允许:
```text
axis/db_demo/base.ngc: SKIP L4-TOOL-DB -> PASS
```
十、验收命令建议
milestone 初期最小验证:
```bash
git diff --check
wasm-port/tests/native/probe_tool_db_runtime.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/sdk/node/verify_project_release_gate_manifest.sh
```
具备 host runtime 后:
```bash
ENABLE_TOOL_DB_RUNTIME_PROBE=1 wasm-port/tests/native/probe_tool_db_runtime.sh
```
实现 WASM/OPFS port 后追加:
```bash
wasm-port/tests/wasm/node/verify_tool_db_process_port_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_tool_db_process_browser.sh
```
十一、首个代码切入点建议
建议第一批代码不要直接改 inventory pass/fail而是新增只读 protocol/runtime 层:
```text
wasm-port/runtime/sdk/src/tool-db-process-port.js
wasm-port/runtime/opfs/tool-db-store.js
wasm-port/tests/sdk/node/verify_tool_db_process_port.mjs
wasm-port/tests/opfs/node/verify_tool_db_store.mjs
```
第一批只做:
- transaction plan parser
- transcript schema
- OPFS/path model
- DB file hash
- diagnostics export
- `.tbl fallback sufficient=false` guard。
第二批再接 Python/WASM Worker runtime。
这样可以先建立可测试边界,同时避免误把 JS helper 当作 tool DB runtime pass。
十二、结论
`L4-TOOL-DB` 的正确做法是:
```text
先 native protocol proof
再 ToolDbProcessPort
再 WASM/Worker DB_PROGRAM runtime
再 OPFS persistence
再 browser diagnostics
最后才考虑 promotion lock 更新。
```
当前不要做:
```text
不要 .tbl fallback
不要 JS tool semantics
不要直接改 baseline
不要把 protocol contract 当 runtime pass。
```