继续完成 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 验证通过。
This commit is contained in:
2026-06-21 16:44:29 +08:00
parent a6eda3fbff
commit 626bcfe8e3
101 changed files with 101586 additions and 770 deletions

691
textbak/text25.txt Normal file
View File

@@ -0,0 +1,691 @@
项目接续文件L4-PYTHON-REMAP OPFS/WASM runtime milestone 执行计划
生成时间2026-06-19 CST
本文件接替 `text24.txt`,整理当前完成情况,并明确下一步:
```text
剩余 hard block 先做 L4-PYTHON-REMAP
L4-USER-M-PROCESS 放在 Python remap lifecycle proof 之后。
```
重要边界:
```text
本文件是单独 hard-block runtime milestone 的执行计划。
不是 virtual HAL 新功能计划,也不是直接批量 promotion 计划。
当前禁止事项:
- 不用 JavaScript 重写 Python remap / prolog / epilog CNC 语义;
- 不把 Python runtime 可 import 当成 remap pass
- 不把 NGC-only subroutine asset 当 standalone main program
- 不一次性解锁全部 53 个 L4-PYTHON-REMAP rows
- 不因为 native probe 通过就自动改 promotion_allowed
- L4-USER-M-PROCESS 仍不做 arbitrary external process execution。
```
一、当前完成情况快照
1. virtual HAL 已接入 Web 数控仿真。
已通过真实 browser simulation smoke
```bash
SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh
```
输出:
```text
browser_real_simulation_page_smoke=ok
```
当前 virtual HAL 覆盖范围:
- browser HAL pin/signal/param state
- virtual `halcmd` command workflow
- ESTOP / power / home / jog / spindle / coolant state
- motion controller matrix
- virtual HAL session save/restore
- browser diagnostics / release evidence。
边界不变:
- G-code / interpreter / planner / canonical motion 语义仍来自 LinuxCNC-backed WASM
- virtual HAL 不提供 Linux kernel hard-realtime ABI
- virtual HAL 不提供外部硬件驱动 ABI 或 native HAL module ABI
- virtual HAL 不解锁 Python remap、external user-M process。
2. L4-TOOL-DB proof 已完成接入,但仍要按 promotion lock 规则处理。
已通过聚合 proof
```bash
wasm-port/tests/host/verify_tool_db_process_proof.sh
```
输出:
```text
tool_db_process_port_sdk=ok
tool_db_store_opfs=ok
tool_db_process_port_wasm=ok
browser_tool_db_process_smoke=ok
tool_db_process_proof=ok
```
已通过 native opt-in DB_PROGRAM protocol probe
```bash
ENABLE_TOOL_DB_RUNTIME_PROBE=1 wasm-port/tests/native/probe_tool_db_runtime.sh
```
关键输出:
```text
tool_db_protocol_version=v2.1
tool_db_get_all_count=10
tool_db_put_tool_update_state_ok=1
tool_db_load_spindle_state_ok=1
tool_db_unload_spindle_state_ok=1
tool_db_persistence_state_ok=1
tool_db_runtime_probe_status=runtime_protocol_probe_passed
```
结论:
```text
L4-TOOL-DB 的 native / SDK / OPFS / WASM / browser proof chain 已经成立。
后续不应再把主要精力放在 Tool DB runtime substrate 上,除非是 promotion lock
收尾或 gate drift 修复。
```
3. 当前 sim-config inventory 快照。
当前 `wasm-port/build/wasm/sim-configs-inventory/summary.tsv` 统计:
```text
total=159
pass=29
skip=130
fail=0
```
当前 `skip-summary.tsv`
```text
ASSET-ONLY=65
L4-PYTHON-REMAP=53
L4-USER-M-PROCESS=1
NON_MAIN_CLASS=10
UPSTREAM-DEMO=1
```
注意:
```text
这里已经不是 text24.txt 中的旧 baseline
executed=28 passed=28 skipped=131 unexpected_fail=0。
当前可见 generated inventory 已是:
PASS=29 SKIP=130 FAIL=0。
后续文件和 gate 必须以当前 artifact 为准,不能沿用过期 baseline。
```
4. 当前剩余 hard block。
主要剩余:
```text
L4-PYTHON-REMAP: 53
L4-USER-M-PROCESS: 1
```
推荐顺序:
```text
1. L4-PYTHON-REMAP
2. L4-USER-M-PROCESS
```
理由:
- `L4-PYTHON-REMAP` 覆盖面最大,解决后可复用到 53 个 rows
- Tool DB milestone 已经建立 Python/WASM Worker、runtime port、browser proof、OPFS/diagnostics 的可复用模式;
- `L4-USER-M-PROCESS` 只有 1 个 row且浏览器不能支持 arbitrary external process只能做受控 state-transition proof
- 先做 Python remap lifecycle substrate能为后续 user-M 的受控 runtime proof 提供更成熟的边界模型。
二、L4-PYTHON-REMAP 当前已有基础
已有 machine-readable artifacts
```text
wasm-port/build/wasm/sim-configs-inventory/python-remap-boundary-summary.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-family-summary.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-runtime-contract.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-runtime-gates.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-alignment.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-readiness.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-state-plan.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-fixture-plan.tsv
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-probe-gate.tsv
```
当前选定最小 fixture
```text
family=axis/remap/stop-lookahead/nc_files
fixture_id=stop_lookahead_python_runtime_lifecycle
fixture_scope=no_python_callables_no_ngc_only_subpaths
```
原因:
- 适合作为 Python runtime lifecycle proof
- 范围比 tool-change、five-axis、完整 remap family 更窄;
- 已有 source/runtime readiness artifacts
- 可先证明 Python path、toplevel、module import、callable lookup、generator lifecycle、
remap phase dispatch 等生命周期边界。
当前 fixture modules
```text
axis/remap/stop-lookahead/python/remap.py
axis/remap/stop-lookahead/python/toplevel.py
```
当前 runtime phases
```text
initialize_python
apply_ini_python_path
execute_toplevel
callable_lookup
pycall_dispatch
callable_invoke
remap_phase_dispatch
generator_finish
execute_python_runtime
reload_on_change
```
三、当前 native probe 状态
默认 probe
```bash
wasm-port/tests/native/probe_python_remap_runtime.sh
```
关键输出:
```text
python_remap_runtime_fixture_family=axis/remap/stop-lookahead/nc_files
python_remap_runtime_fixture_id=stop_lookahead_python_runtime_lifecycle
python_remap_runtime_requirements=python3:1,linuxcnc:1
python_remap_missing_requirements=-
python_remap_source_proof_ready=1
python_remap_runtime_ready=1
python_remap_execution_enabled=0
python_remap_promotion_allowed=0
python_remap_runtime_probe_status=ready_disabled_by_default
```
显式 opt-in native lifecycle probe
```bash
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 wasm-port/tests/native/probe_python_remap_runtime.sh
```
关键输出:
```text
python_remap_lifecycle_execute_finish_source_value=2
python_remap_lifecycle_ini_path_prepend=python
python_remap_lifecycle_ini_toplevel=python/toplevel.py
python_remap_lifecycle_interpreter_sentinel_ok=1
python_remap_lifecycle_toplevel_imported=1
python_remap_lifecycle_remap_imported=1
python_remap_lifecycle_callable_lookup_ok=1
python_remap_lifecycle_generator_returned=1
python_remap_lifecycle_generator_first_yield=2
python_remap_lifecycle_generator_finish_ok=1
python_remap_runtime_lifecycle_probe_ok=1
python_remap_runtime_probe_status=runtime_lifecycle_probe_passed
```
结论:
```text
L4-PYTHON-REMAP 已不是“从零设计”。
native stop-lookahead lifecycle proof 已能通过;
下一步是把这个 native pass evidence 接入 WASM/Worker proof、browser diagnostics、
release artifact 和 promotion lock 后置 gate。
```
四、目标
本 milestone 的目标不是直接让 53 个 `L4-PYTHON-REMAP` rows 全部 PASS。
目标是证明:
```text
LinuxCNC-owned Python remap lifecycle + configured Python modules +
interpreter state binding 可以在 native / WASM / browser proof chain 中成立。
```
第一目标 fixture
```text
axis/remap/stop-lookahead/nc_files
ini=axis/remap/stop-lookahead/demo.ini
blocked=L4-PYTHON-REMAP
modules=python/remap.py,python/toplevel.py
```
必须证明:
- INI `[PYTHON]PATH_PREPEND=python` 被执行;
- INI `[PYTHON]TOPLEVEL=python/toplevel.py` 被执行;
- configured Python module 可 import
- callable lookup 来自 LinuxCNC Python remap lifecycle
- generator remap lifecycle 可开始、yield、finish
- interpreter sentinel / state binding 可观测;
- diagnostics 明确 `promotion_allowed=0`,直到完整 native + WASM + browser + manual lock review 完成。
五、Phase 1把 native lifecycle pass evidence 接入 artifacts
当前 native opt-in probe 已通过,但 generated artifact 里仍有历史状态:
```text
python-remap-native-runtime-probe-gate.tsv
gate_status=ready_to_implement_lifecycle_probe
proof_status=pending
promotion_allowed=0
```
下一批应先做:
1. 让 inventory/report layer 可读取 native probe stdout
```text
wasm-port/build/native/python-remap-runtime/python_lifecycle.stdout.log
```
2. 生成 native pass evidence contract
```text
python_remap_runtime_probe_status=runtime_lifecycle_probe_passed
python_remap_lifecycle_toplevel_imported=1
python_remap_lifecycle_remap_imported=1
python_remap_lifecycle_callable_lookup_ok=1
python_remap_lifecycle_generator_finish_ok=1
python_remap_runtime_lifecycle_probe_ok=1
```
3. 更新/新增 machine-readable artifacts
```text
python-remap-native-runtime-probe-gate.tsv
runtime-boundary-native-evidence-acceptance-gate.tsv
runtime-boundary-post-native-pass-gates.tsv
native-runtime-probe-pass-evidence-contract.tsv
runtime-probe-gate-alignment.tsv
```
4. 仍保持:
```text
execution_enabled=0
promotion_allowed=0
manual_lock_update_required=1
```
验收命令:
```bash
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 wasm-port/tests/native/probe_python_remap_runtime.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_interp_browser.sh
```
六、Phase 2定义 PythonRemapRuntimePort
建议新增:
```text
wasm-port/runtime/sdk/src/python-remap-runtime-port.js
wasm-port/runtime/sdk/src/python-remap-browser-worker-adapter.js
wasm-port/runtime/workers/python-remap-worker.js
wasm-port/tests/sdk/node/verify_python_remap_runtime_port.mjs
wasm-port/tests/wasm/node/verify_python_remap_runtime_port_wasm.mjs
wasm-port/tests/browser/verify_python_remap_runtime_browser.sh
wasm-port/tests/browser/python_remap_runtime_browser_smoke.html
```
建议 API
```text
createLinuxCncPythonRemapRuntimePort({
fixtureFamily,
iniPath,
pythonPathPrepend,
topLevelPath,
sourceFiles,
runtimeMode,
runtimeAdapter,
})
start()
applyIniPythonPath()
executeTopLevel()
importModule(modulePath)
lookupCallable(callableName)
invokeGenerator(callableName, args)
runLifecyclePlan(plan)
exportTranscript()
exportDiagnostics()
close()
```
最小 lifecycle plan
```text
1. initialize_python
2. apply_ini_python_path
3. execute_toplevel
4. import python/remap.py
5. lookup configured callable
6. invoke generator
7. observe first yield
8. finish generator
9. export interpreter sentinel/state
10. export diagnostics
```
必须保持:
```text
executionEnabled=false
promotionAllowed=false
bulkPromotionAllowed=false
```
不允许:
- JS 直接实现 remap callable 结果;
- JS 构造 interpreter state 假装 Python remap pass
- 只用 fixture transcript 假装 runtime pass
- 跳过 `toplevel.py`
- 跳过 configured Python module import
- 把 Python module import success 当作 full remap lifecycle success。
七、Phase 3WASM/Worker runtime
推荐复用 Tool DB milestone 的 runtime pattern
```text
Browser/Node worker + Python/WASM provider + LinuxCNC-specific lifecycle shim
```
Worker 职责:
- 加载 Python runtime provider
- 设置 INI 声明的 Python path
- 执行 `python/toplevel.py`
- import `python/remap.py`
- 通过受控 adapter 调用 lifecycle fixture
- 记录 transcript
- 导出 diagnostics。
允许的 shim
```text
minimal LinuxCNC Python remap integration shim
```
shim 只能覆盖 stop-lookahead fixture 必需的 integration surface例如
- interpreter sentinel
- callable lookup bridge
- generator invocation bridge
- remap phase observations
- diagnostics state capture。
shim 不允许承载:
- generic interpreter semantics
- G-code parsing
- planner / canonical motion
- full tool-change semantics
- arbitrary Python UI process
- arbitrary external process。
八、Phase 4browser diagnostics proof
新增 browser diagnostics 字段建议:
```text
python_remap_runtime_mode=browser-python-wasm-worker
fixture_family=axis/remap/stop-lookahead/nc_files
ini_path=axis/remap/stop-lookahead/demo.ini
python_path_prepend=python
toplevel=python/toplevel.py
modules=python/remap.py,python/toplevel.py
lifecycle_transcript_ready=true
callable_lookup_ready=true
generator_lifecycle_ready=true
interpreter_state_binding_ready=true
ngc_only_subroutine_promoted=false
bulk_family_promotion_allowed=false
promotion_allowed=0
```
browser gate 必须证明:
- 页面/API 可读取 Python remap lifecycle diagnostics
- diagnostics 来源绑定 LinuxCNC config/source
- diagnostics 明确不是 JS-owned CNC semantics
- saved artifact 可进入 release URL / ini-panel workflow
- `L4-PYTHON-REMAP` 仍在 manual promotion lock 下。
建议命令:
```bash
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_python_remap_runtime_browser.sh
```
九、Phase 5release artifact / promotion lock
在 native + WASM + browser proof 全部通过前release artifact 只能显示:
```text
L4-PYTHON-REMAP locked
python_remap_native_lifecycle_ready=<0|1>
python_remap_wasm_lifecycle_ready=<0|1>
python_remap_browser_lifecycle_ready=<0|1>
promotion_allowed=0
```
三层 proof 都 ready 后,仍不能自动批量解锁 53 rows。
下一步只能考虑单独 review
```text
axis/remap/stop-lookahead/nc_files: SKIP L4-PYTHON-REMAP -> PASS
```
并且必须证明:
- 对应 row 不是 NGC-only subroutine
- 对应 INI / Python modules / remap declarations 都已 vendored
- native pass 与 WASM/browser lifecycle proof 对齐;
- Python runtime 没有绕过 LinuxCNC interpreter lifecycle
- `promotion_allowed` 的变更是显式人工 review不是 gate 自动推断。
十、L4-USER-M-PROCESS 暂缓原则
`L4-USER-M-PROCESS` 当前代表 row
```text
axis/vismach/millturn/example.ngc
```
核心阻塞:
```text
M128 / M129 Tcl scripts
HAL pin state updates
kinstype guard
ini.[xyz].* soft-limit state transitions
```
暂缓原因:
- 浏览器不能支持 arbitrary executable spawn
- 浏览器不能通用执行 native Tcl process
- 不能模拟 host HAL daemon unrestricted side effects
- 成功只覆盖 1 个 row
- 更适合在 Python remap lifecycle / runtime diagnostics pattern 稳定后,做受控 state-transition proof。
后续做法只允许:
```text
LinuxCNC-owned user-M state transition boundary
```
不允许:
```text
browser arbitrary external process execution
```
十一、下一批最小执行建议
优先做一批小而可验收的改动:
1. 固化 native Python remap lifecycle pass evidence。
```bash
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 wasm-port/tests/native/probe_python_remap_runtime.sh
```
2. 让 generated inventory / release artifact 能识别:
```text
python_remap_runtime_probe_status=runtime_lifecycle_probe_passed
```
3. 新增 `PythonRemapRuntimePort` contract-only SDK 层。
4. 新增 Node contract test
```text
wasm-port/tests/sdk/node/verify_python_remap_runtime_port.mjs
```
5. 暂不改 baseline不改 53 rows。
首批验收命令:
```bash
git diff --check
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 wasm-port/tests/native/probe_python_remap_runtime.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/sdk/node/verify_sdk_surface.sh
wasm-port/tests/sdk/node/verify_project_release_gate_manifest.sh
```
十二、结论
当前状态可以概括为:
```text
virtual HAL 已接入 Web 仿真;
L4-TOOL-DB proof chain 已成立;
当前 generated inventory 为 PASS=29 / SKIP=130 / FAIL=0
剩余主要 hard block 是 L4-PYTHON-REMAP=53 和 L4-USER-M-PROCESS=1
下一步先做 L4-PYTHON-REMAP
首个 fixture 是 axis/remap/stop-lookahead/nc_files
native opt-in lifecycle probe 已通过;
下一批应把 native pass evidence 接入 artifacts并建立 PythonRemapRuntimePort
的 WASM/browser proof chain
promotion_allowed 继续保持 0直到完整 proof + manual lock review。
```
十三、2026-06-19 接续执行记录L4-PYTHON-REMAP 仿真系统接入收尾
本轮结论:
```text
L4-PYTHON-REMAP 的 native / SDK / WASM / browser proof chain 已接入;
真实数控仿真页 runtime/ui/simulation 现在也暴露 Python remap runtime 状态;
release artifact / URL workflow 能识别 python-remap-runtime-proof=ready
53 个 L4-PYTHON-REMAP inventory rows 仍保持 SKIP/manual promotion lock
不做批量 PASS不启用 execution不允许 promotion_allowed。
```
新增/补齐的仿真接入点:
```text
wasm-port/runtime/ui/simulation/simulation-app.js
- createPythonRemapSimulationRuntimeStatus()
- renderPythonRemapRuntimeStatus()
- runRealBrowserSimulation() state.pythonRemapRuntime
wasm-port/runtime/ui/simulation/index.html
- Machine State 面板显示 L4-PYTHON-REMAP fixture/runtime/lifecycle/promotion 状态
- window.linuxCncRealSimulationApi.getPythonRemapRuntimeStatus()
- exportDiagnosticsArtifact().pythonRemapRuntime
wasm-port/tests/browser/real_simulation_page_smoke.html
- 验证 DOM / API / diagnostics artifact 的 Python remap runtime 状态
```
本轮验证:
```bash
wasm-port/tests/native/probe_python_remap_runtime.sh
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 wasm-port/tests/native/probe_python_remap_runtime.sh
wasm-port/tests/sdk/node/verify_python_remap_runtime_port.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_python_remap_runtime_port_wasm.sh
wasm-port/tests/browser/verify_python_remap_runtime_browser.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh
wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh
wasm-port/tests/sdk/node/verify_sdk_surface.sh
wasm-port/tests/sdk/node/verify_project_release_gate_manifest.sh
wasm-port/tests/sdk/node/verify_project_release_artifact_url_workflow.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
git diff --check
```
关键验证结果:
```text
python_remap_runtime_probe_status=ready_disabled_by_default
python_remap_runtime_probe_status=runtime_lifecycle_probe_passed
python_remap_runtime_lifecycle_probe_ok=1
python_remap_lifecycle_generator_first_yield=2
python_remap_execution_enabled=0
python_remap_promotion_allowed=0
browser_python_remap_runtime_smoke=ok
browser_real_simulation_page_smoke=ok
browser_release_artifact_url_workflow_smoke=ok
sim_configs_wasm_node_inventory_executed=29
sim_configs_wasm_node_inventory_passed=29
sim_configs_wasm_node_inventory_skipped=130
sim_configs_wasm_node_inventory_skip_L4_PYTHON_REMAP=53
sim_configs_wasm_node_inventory_unexpected_fail=0
standalone CNC semantics guard complete
```
仍保持的边界:
```text
executionEnabled=false
promotionAllowed=false
bulkPromotionAllowed=false
ngcOnlySubroutinePromoted=false
jsCncSemantics=false
```