Implement AXIS parity UI and execution baseline

This commit is contained in:
2026-08-23 07:28:37 +08:00
parent 1325504544
commit 06f96f85e5
463 changed files with 84893 additions and 692 deletions

View File

@@ -68,6 +68,7 @@
| `PROJECT-AUDIT-01` | 整体审计确认 K0-K6 运动学实现和 15 项 native CTest 已通过;运动学 `partial/blocked` 仅因锁定来源缺少官方 oracle;当前开发瓶颈转为配置启动闭包,下一任务为 M3-CFG-01,K8 release 六项 blocker/`STOP_RELEASE` 独立保留 | `docs/linuxcnc-web-wasm-next-work.md`, `coverage/kinematics-registry.report.json`, `coverage/kinematics-motion.report.json`, `coverage/kinematics-feedback.report.json`, `coverage/kinematics-home-limit.report.json`, `coverage/configuration-regression.report.json` |
| `PROJECT-AUDIT-02` | 重新梳理任务图确认 M3/FE/REG 实现证据均已 verified;K8-REL-17 owner_inputs=0、gate_refresh=blocked,发现旧 Next 自引用风险;生成 GOV-01 readiness 后进入不自动重试的 WAIT-OWNER-01,六项 blocker 和 `STOP_RELEASE` 保持 verified | `docs/linuxcnc-web-wasm-task-map.md`, `coverage/project-task-readiness.report.json`, `nextTask.md` |
| `OWNER-INTAKE-01` | 建立六项 owner decision 输入模板、结构/identity/context/evidence hash 验证器和 blocked report;当前输入文件缺失,验证结果为 blocked,gate refresh 永远 blocked,不修改 context lock 或 release gate | `coverage/owner-decision-intake.template.json`, `coverage/owner-decision-intake.report.json`, `docs/linuxcnc-web-wasm-owner-decision-intake.md`, `scripts/validate_owner_decision_intake.py`, `scripts/test_owner_decision_intake.py` |
| `GOV-INTAKE-01` | 强化 owner decision intake 的持续接续门禁;非 approve、缺少 decision_set_id、仓库外/缺失证据路径、非十六进制或实际 hash 不匹配均 fail-closed;当前 owner 输入仍缺失,release gate 和 context lock 未修改 | `scripts/validate_owner_decision_intake.py`, `scripts/test_owner_decision_intake.py`, `docs/linuxcnc-web-wasm-continuation-plan.md` |
| `M3-CFG-01` | 确定性配置 resolver 和 Worker preflight 完成;16,093 条资源全部分类,15,112 resolved、981 blocked;显式 `LIB:`、参数尾缀、相对路径、仓库外路径和宿主路径均有明确策略;原始索引 hash、context lock、187 个脚本测试、15 个 native CTest 和 Worker/workspace 测试通过 | `web/workspace/configuration.mjs`, `web/worker/sim-session.mjs`, `coverage/configuration-startup-closure.report.json`, `scripts/generate_configuration_startup_closure.py`, `scripts/test_configuration_startup_closure.py`, `web/workspace/test_configuration.mjs`, `web/worker/test_configuration_preflight.mjs` |
| `M3-RT-02` | 生成 145 个 `.comp` 组件 manifest、1,220 pins、140 params、530 functions 和 193 个 HAL 文件的 4,566 条配置图记录;manifest、容量、资源边和动态加载拒绝检查 verified,29 个 `loadusr` 与 124 个变量化/未声明 `loadrt` 保持 blocked;190 个脚本测试、15 个 native CTest 和 Worker/workspace 测试通过 | `coverage/hal-component-manifest.report.json`, `scripts/generate_hal_component_manifest.py`, `scripts/test_hal_component_manifest.py`, `web/workspace/hal-configuration.mjs`, `web/worker/sim-session.mjs`, `web/worker/test_hal_preflight.mjs` |
| `M3-RT-03` | 虚拟设备故障矩阵完成;26 个 spindle/tool/probe/limit/estop/非有限/恢复场景进入 EventLog,连续执行与 replay state hash 一致,设备 checkpoint 增量恢复通过;192 个脚本测试、15 个 native CTest 和 Worker/workspace 测试通过 | `coverage/virtual-device-fault-matrix.report.json`, `scripts/generate_virtual_device_fault_matrix.py`, `scripts/test_virtual_device_fault_matrix.py`, `web/worker/virtual-devices.mjs`, `web/worker/test_virtual_devices.mjs`, `web/worker/test_device_recovery.mjs` |
@@ -77,6 +78,46 @@
| `FE-M2` | 完成核心 operation controls 和权威 state panel;run/pause/resume/abort/home/estop/recover 控制、operation 去重、错误/报警状态和窄屏布局 smoke 通过;200 个脚本测试、15 个 native CTest 和 Worker/workspace/Python 回归通过 | `coverage/frontend-m2.report.json`, `scripts/generate_frontend_m2.py`, `scripts/test_frontend_m2.py`, `web/app/controls.mjs`, `web/app/state-panel.mjs`, `web/app/test_frontend_m2.mjs` |
| `FE-M3` | 项目/恢复 workflow 完成;journal 导入导出、checkpoint/package、v1↔v2 migration、offline ready 和 half-commit 状态展示 smoke 通过;202 个脚本测试、15 个 native CTest 和 Worker/workspace/Python 回归通过 | `coverage/frontend-m3.report.json`, `scripts/generate_frontend_m3.py`, `scripts/test_frontend_m3.py`, `web/app/project-workflow.mjs`, `web/app/recovery-panel.mjs`, `web/app/test_frontend_m3.mjs` |
| `FE-M4` | 完成 HAL/tool/IO/3D frontend workflows;设备命令、HAL diagnostics、稳定 canvas machine view 和故障状态展示 smoke 通过;204 个脚本测试、15 个 native CTest 和 Worker/workspace/Python 回归通过 | `coverage/frontend-m4.report.json`, `scripts/generate_frontend_m4.py`, `scripts/test_frontend_m4.py`, `web/app/device-panel.mjs`, `web/app/hal-panel.mjs`, `web/app/machine-view.mjs`, `web/app/test_frontend_m4.mjs` |
| `S5-02` | 真实 LinuxCNC `runtests` 代表性纯仿真基线 12/12 native 通过;abort/G64 超时不伪造为回归通过,明确保留 Worker Task/motion 适配边界 | `coverage/linuxcnc-source-test-execution-s5.report.json`, `scripts/test_linuxcnc_source_test_execution.py` |
| `S5-03` | `unit_tests/interp` 与 `unit_tests/tp` 的 9 个可移植源断言由同一 native/WASM adapter 执行,CTest 通过且 JSON golden 字节一致;上游 Meson oracle 缺失标记 `SOURCE_BLOCKED`,G64/abort 保持 `WORKER_TASK_MOTION_PENDING` | `coverage/linuxcnc-source-unit-execution-s5.report.json`, `wasm-core/tests/source_unit_adapter_test.c`, `scripts/test_linuxcnc_source_unit_s5.py` |
| `S5-04` | `tests/interp`、`tests/oword` 与 `tests/remap` 的 8 个真实 fixture 由 WASM-backed Worker 执行;6 项 block/error/canonical/callback 适配通过,DO/G64 2 项明确保持 `WORKER_TASK_MOTION_PENDING`,26 个源/expected/checkresult/config 文件哈希闭合;源 canonical logger 继续 `SOURCE_BLOCKED` | `coverage/linuxcnc-source-interp-s5.report.json`, `web/worker/test_source_interpreter_s5.mjs`, `scripts/test_linuxcnc_source_interpreter_s5.py` |
| `S5-05` | HAL `abs`/`edge` 与 starting-high 边界由 Worker 静态运行时执行通过;native/WASM `sim_hal_test` golden 字节一致;自定义 `.comp`、相对头文件和 userspace/RTAPI 路径分别保留 `SOURCE_BLOCKED`/`HOST_EXCLUDED`,8 个源案例和 23 个 fixture 文件均有哈希 | `coverage/linuxcnc-source-hal-s5.report.json`, `web/worker/test_source_hal_s5.mjs`, `scripts/test_linuxcnc_source_hal_s5.py` |
| `S5-06` | IO/limit/tool ack Worker 适配 3 项通过;native/WASM `sim_io` 与 `sim_device_io` golden 字节一致;startup tool table 2 项 `SOURCE_BLOCKED`、ClassicLadder 1 项 `HOST_EXCLUDED`、motion-logger abort 1 项 `WORKER_TASK_MOTION_PENDING`,30 个 fixture 文件哈希闭合 | `coverage/linuxcnc-source-io-s5.report.json`, `web/worker/test_source_io_s5.mjs`, `scripts/test_linuxcnc_source_io_s5.py` |
| `S5-07` | 批量读取并哈希全部 264 个配置矩阵条目(216 个 `configs/sim`、48 个 tests 配置);56 READY、208 BLOCKED,逐项保留资源/诊断状态;batch checkpoint/restore、native/WASM/Worker startup probes 通过,静态 preflight 不提升为官方 runtime oracle | `coverage/linuxcnc-source-config-s5.report.json`, `web/worker/test_source_config_s5.mjs`, `scripts/test_linuxcnc_source_config_s5.py` |
| `S5-08` | 汇总 S5-01..S5-07 源证据;关键适配器重复运行稳定,native/WASM 静态 golden 全部一致,1x/fast/recovery/trace import 终点一致且 `first_divergence=null`;SOURCE_BLOCKED/HOST_EXCLUDED/WORKER_TASK_MOTION_PENDING 与官方 oracle 阻塞均保留 | `coverage/linuxcnc-source-parity-s5.report.json`, `web/worker/test_source_parity_s5.mjs`, `scripts/test_linuxcnc_source_parity_s5.py` |
| `S6-01` | 对完整仿真计划 P0-P8 的 39 个任务逐项对齐证据;S5 源测试链全部 verified;识别 authoritative sim_task tick integration、官方 native oracle、配置资源、source adapter 和浏览器/OPFS 五类开放 gap;创建下一执行任务 S6-02 | `coverage/full-linuxcnc-simulation-gap-audit.report.json`, `scripts/generate_full_linuxcnc_simulation_gap_audit.py`, `scripts/test_full_linuxcnc_simulation_gap_audit.py`, `nextTask1.md` |
| `S6-02` | 新增 authoritative runtime:程序行在 task phase 执行,XYZ/trivkins planner 在 tp/kinematics phase 更新,motion/HAL/IO 共用固定 tick;state 纳入 snapshot/checkpoint/trace/endpoint,1x/fast、recovery/trace import parity 通过;非 trivkins和完整 canonical oracle 保持后续/blocked | `coverage/authoritative-sim-task-s6.report.json`, `web/worker/authoritative-runtime.mjs`, `web/worker/test_authoritative_sim_task_s6.mjs`, `scripts/test_authoritative_sim_task_s6.py` |
| `S6-03` | authoritative runtime 扩展 CoreXY:XYZ pose `[4,2,3]` 映射到 joints `[6,2,3]`;native/WASM kinematics 与 kinematics-motion golden、1x/fast/recovery endpoint parity 通过;unsupported `puma` 稳定拒绝,其他 families 和官方 oracle 保留后续/blocked | `coverage/authoritative-kinematics-s6.report.json`, `web/worker/test_authoritative_kinematics_s6.mjs`, `scripts/test_authoritative_kinematics_s6.py` |
| `S6-04` | authoritative runtime 接入一个可验证的并联 Tripod family:真实 `tripodkins` 配置/几何 `[0,0],[10,0],[5,7.071]`,pose `[2,3,4]` 逆映射为三支杆 `[5.385164807,9.433981132,6.447715952]`;native/WASM kinematics 与 kinematics-motion golden、1x/fast/recovery endpoint parity 和首差诊断通过;TRT、机器人、Delta/Hexapod/Pentapod、switch/user 与官方 oracle 明确保留 queued/blocked | `coverage/authoritative-kinematics-s6-04.report.json`, `web/worker/test_authoritative_kinematics_s6_04.mjs`, `scripts/test_authoritative_kinematics_s6_04.py`, `web/worker/authoritative-runtime.mjs` |
| `S6-05` | 新增 OPFS Dedicated Worker 探针、逻辑 journal/offline integrity 测试和确定性报告;Playwright headed Chromium 140 两次完成 sync-access-handle 写入/读取/清理并稳定一致,headless timeout 作为边界保留;Safari/Firefox 明确 OUT_OF_SCOPE,物理 crash/restart oracle 和 release/oracle blocker 不被升级为闭合 | `coverage/authoritative-browser-s6-05.report.json`, `web/workspace/opfs-runtime.mjs`, `scripts/test_browser_opfs_playwright_s6_05.mjs`, `web/app/test_opfs_runtime_s6_05.mjs`, `scripts/test_authoritative_browser_s6_05.py` |
| `S6-06` | 使用同一 headed Chromium 140 persistent profile:第一阶段提交 OPFS record 后关闭 browser context,第二阶段重开 profile 读取相同 content hash 并清理;两次运行稳定,profile restart slice verified;真实进程 crash/power-loss oracle 和 release blocker 保留,Safari/Firefox 明确 OUT_OF_SCOPE | `coverage/authoritative-browser-restart-s6-06.report.json`, `scripts/test_browser_opfs_restart_s6_06.mjs`, `scripts/test_authoritative_browser_restart_s6_06.py`, `web/workspace/opfs-runtime.mjs` |
| `S6-07` | 使用 Playwright BrowserServer kill 真实终止 Chromium 进程,再以同一 profile 重开并读取 committed OPFS record;两次运行 process-kill、hash continuity 和 cleanup 均 verified;power-loss/filesystem-corruption 与 release/oracle blocker 保留,Safari/Firefox 明确 OUT_OF_SCOPE | `coverage/authoritative-browser-crash-s6-07.report.json`, `scripts/test_browser_opfs_crash_s6_07.mjs`, `scripts/test_authoritative_browser_crash_s6_07.py`, `web/workspace/opfs-runtime.mjs` |
| `S7-AUDIT` | 重新梳理 LinuxCNC 完整仿真计划、264 配置入口、S5 source parity、S6 authoritative/runtime/browser evidence;确认配置 `56 READY/208 BLOCKED`、DO/ENDDO 与 G64/G61 pending、剩余 kinematics queued、官方 oracle/release blocked;创建并认领 S7-01 | `coverage/simulation-alignment-s7.report.json`, `scripts/generate_simulation_alignment_audit_s7.py`, `scripts/test_simulation_alignment_s7.py` |
| `S7-01` | 接入锁定 `linuxcnc/tests/interp/do-while-break/test.ngc` 的 DO/ENDDO/BREAK 后测循环 slice;嵌套 BREAK、named parameters、pause/resume、malformed ENDDO、depth budget 和 checkpoint recovery parity 通过;上游 canonical expected 保持 `SOURCE_BLOCKED` | `coverage/source-do-s7-01.report.json`, `web/worker/test_source_do_s7_01.mjs`, `scripts/test_source_do_s7_01.py`, `web/worker/program-runner.mjs`, `web/worker/sim-session.mjs` |
| `S7-02` | 接入锁定 `linuxcnc/tests/interp/g6164/test.ngc` 的 G64 continuous/P/Q、G61 exact-path、G61.1 exact-stop modal state;负 tolerance/unsupported code、pause/recovery parity 通过;S5-04 pending 清零,canonical logger 与 TP numeric parity 仍保持明确边界 | `coverage/source-g6164-s7-02.report.json`, `web/worker/test_source_g6164_s7_02.mjs`, `scripts/test_source_g6164_s7_02.py`, `web/worker/program-runner.mjs`, `web/worker/sim-session.mjs` |
| `S7-03` | 选择有真实配置/native-WASM 样本且保持 XYZ/3-joint 形状的 `lineardeltakins`,接入 authoritative fixed tick;pose `[0,0,64.636584194]` 映射三 carriage joints `[300,300,300]`,1x/fast/recovery parity、无解 fail-closed 和 unsupported TRT boundary 通过 | `coverage/authoritative-kinematics-s7-03.report.json`, `web/worker/test_authoritative_kinematics_s7_03.mjs`, `scripts/test_authoritative_kinematics_s7_03.py`, `web/worker/authoritative-runtime.mjs` |
| `S7-04` | 接入 `rotarydeltakins` authoritative fixed tick;pose `[0,0,-3.793360169]` 映射 rotary joints `[10,10,10]`,1x/fast/recovery parity、z=0 singular fail-closed 和 unsupported TRT boundary 通过;缺失 rdelta HAL 与官方 oracle 保持边界 | `coverage/authoritative-kinematics-s7-04.report.json`, `web/worker/test_authoritative_kinematics_s7_04.mjs`, `scripts/test_authoritative_kinematics_s7_04.py`, `web/worker/authoritative-runtime.mjs` |
| `S7-05` | 对齐真实 `corexy_by_kins.ini` 的 LinuxCNC `#INCLUDE`、HAL 变量和反斜杠续行;HAL 72 条 preflight records 全部 ready,但 runtime 正确 BLOCKED 在缺失 `linuxcnc.var/tool.tbl`,未提升 static READY | `coverage/configuration-corexy-s7-05.report.json`, `web/worker/test_configuration_corexy_s7_05.mjs`, `scripts/test_configuration_corexy_s7_05.py`, `web/workspace/ini-parser.mjs`, `web/workspace/hal-configuration.mjs`, `web/workspace/configuration-startup.mjs` |
| `S7-06` | verified:依据 `stepconf/build_INI.py` 的精确 `INTRO_GRAPHIC = linuxcnc.gif` 约定,将 `linuxcnc/linuxcnc.gif` 作为 DISPLAY-only shared simulation asset;同 basename 的 tool/parameter/HAL/program 和非 DISPLAY 键保持 blocked;资源图 state hash、source fixture、self-hash 和 native/Worker/App 全量回归通过。S7 后续技术任务未定义,指针保持 `next_task: none` | `coverage/resource-intro-graphic-s7-06.report.json`, `web/worker/test_resource_intro_graphic_s7_06.mjs`, `scripts/test_resource_intro_graphic_s7_06.py`, `web/workspace/resource-resolver.mjs`, `nextTask1.md` |
| `S8-01` | verified:从真实 `linuxcnc/configs/sim` 生成 235 个 INI 案例和 2,080 个精确文件索引;递归 INI/HAL/resource loader 保留缺失诊断并把 static READY 与 runtime READY 分开;AppShell 提供案例筛选、Worker startup、G-code、MDI、Run/Pause/Step、Home/Jog、倍率、主轴/刀具/探针/急停和 machine view。235 个案例中 4 个 loader-ready、其余保留实际资源/HAL blockers | `coverage/sim-case-catalog.report.json`, `scripts/generate_sim_case_catalog.py`, `scripts/test_sim_case_catalog.py`, `web/workspace/sim-case-catalog.mjs`, `web/workspace/sim-case-loader.mjs`, `web/workspace/test_sim_case_loader.mjs`, `web/app/app.mjs`, `web/app/styles.css` |
| `S8-02` | verified:用户授权从真实 LinuxCNC 仿真执行复制 runtime fixtures;`minimal_xyz` 的 `sim.var`/生成 HAL 和 CoreXY 的 `linuxcnc.var`/`tool.tbl` 均 exact-path hash-lock;预加载 `corexykins/motmod/pid/stepgen` 与虚拟 `hal_manualtoolchange` 适配通过,两个案例 Worker startup 均达到 `TASK_READY`,未知 `loadusr` 仍 blocked | `coverage/sim-case-startup-s8-02.report.json`, `web/worker/test_sim_case_startup_s8_02.mjs`, `scripts/generate_sim_case_startup_s8_02.py`, `scripts/test_sim_case_startup_s8_02.py`, `web/workspace/hal-configuration.mjs`, `web/workspace/sim-case-loader.mjs` |
| `S8-03` | verified:真实执行 `xz.ini`、`xz_both.ini`、`xz_both_auto.ini` 取得 `xz.var` 和三份生成 HAL fixture;同案例 `xz.tbl` 精确复用;三案 Worker startup 均 `TASK_READY`、HAL blocked_count=0,identity/BOTH/AUTO state hash 分别保留 | `coverage/sim-case-batch-s8-03.report.json`, `web/worker/test_sim_case_batch_s8_03.mjs`, `scripts/generate_sim_case_batch_s8_03.py`, `scripts/test_sim_case_batch_s8_03.py` |
| `S8-04` | verified:minimal_xyz 真实 fixture 达到 TASK_READY;固定 tick 覆盖 Home/Jog/override、G-code Run/Pause/Resume/Abort/Restart、MDI、estop/recover 和 checkpoint recovery endpoint parity;前端 AppShell/state panel/machine view 继续消费 Worker 权威状态 | `coverage/minimal-xyz-vertical-s8-04.report.json`, `web/worker/test_minimal_xyz_vertical_s8_04.mjs`, `scripts/generate_minimal_xyz_vertical_s8_04.py`, `scripts/test_minimal_xyz_vertical_s8_04.py` |
| `S8-05` | verified:`corexy_by_kins.ini` 与 `corexy_by_hal.ini` 均使用真实 fixtures 达到 TASK_READY;同一 pose `[4,2,3]` 映射 joints `[6,2,3]`,HAL records 72/100,1x/fast/recovery parity 均通过;kins path 与 HAL-trivkins transform path 保持明确区分,未知 HAL 命令仍 fail-closed | `coverage/corexy-dual-path-s8-05.report.json`, `web/worker/test_corexy_dual_path_s8_05.mjs`, `scripts/generate_corexy_dual_path_s8_05.py`, `scripts/test_corexy_dual_path_s8_05.py`, `web/workspace/hal-configuration.mjs` |
| `S8-06` | verified:235 个真实 `configs/sim` 案例全部执行 exact-path loader/startup 两次;分类为 TASK_READY=7、BLOCKED_RESOURCE=221、BLOCKED_HAL=4、BLOCKED_INI=3;每案保留 fixture、missing、first diagnostic、resource/HAL counts 和 deterministic state hash,不把 blocked 提升为 ready | `coverage/sim-case-matrix-s8-06.report.json`, `web/worker/test_sim_case_matrix_s8_06.mjs`, `scripts/generate_sim_case_matrix_s8_06.py`, `scripts/test_sim_case_matrix_s8_06.py` |
| `S8-07` | verified:从真实 INI/include declarations 生成 235-case display family catalog;Axis 85、QtVCP 61、Gscreen 14、VisMach 21、GladeVCP 6、Touchy 6、PyVCP 5、other 37;AppShell 按案例显示 family capabilities/host plugin boundaries,未改变 Worker 权威状态或 blocked 语义 | `coverage/sim-display-families-s8-07.report.json`, `web/app/sim-display-families.mjs`, `web/app/display-family.mjs`, `web/app/test_display_family_s8_07.mjs`, `scripts/generate_sim_display_families_s8_07.py`, `scripts/test_sim_display_families_s8_07.py` |
| `S8-08` | verified:ldelta/rdelta 真实案例通过 HALLIB exact resolution、sim.var/sim.tbl fixtures、lineardelta/rotarydelta virtual adapters;nominal joints `[300,300,300]`/`[10,10,10]`、1x/fast/recovery parity 和 TASK_READY 通过,official oracle 与其它机床族边界保留 | `coverage/machine-families-s8-08.report.json`, `web/worker/test_machine_families_s8_08.mjs`, `scripts/generate_machine_families_s8_08.py`, `scripts/test_machine_families_s8_08.py` |
| `S8-09` | verified:10 个真实 Worker runtime extension runners 全部通过,覆盖 remap/O-word/filter、Python callbacks、tool/probe/IO ack、virtual devices 和 PLC;固定 tick、能力拒绝和 recovery/ack 边界保留,host Python/dynamic loader 不被误报为浏览器 parity | `coverage/runtime-extensions-s8-09.report.json`, `scripts/generate_runtime_extensions_s8_09.py`, `scripts/test_runtime_extensions_s8_09.py` |
| `S8-10` | blocked(正式停止条件):新增最终 235-case acceptance 聚合;WASM/native/Worker/App 构建与回归 72/72 通过,10 个案例 TASK_READY、225 个案例保留 resource/HAL/INI/STARTUP blockers,display/machine family 与 runtime extension 证据已汇总;official full LinuxCNC oracle 仍 source-gated,Chromium/Firefox/Safari minimums 仍 TBD/Safari unavailable;implementation coverage=verified、acceptance=blocked、`STOP_RELEASE`,不宣称 LinuxCNC 全功能 release | `coverage/full-case-acceptance-s8-10.report.json`, `scripts/generate_full_case_acceptance_s8_10.py`, `scripts/test_full_case_acceptance_s8_10.py`, `nextTask1.md` |
| `FE-M1-REACT` | verified:按技术路线新增 React 19/TypeScript/Vite/Tailwind/Radix/Three.js 前端入口;Dedicated Worker/WASM bundle、protocol.v1 reducer、exact-path `configs/sim` loader、LinuxCNC AXIS source icons 和 Three.js r185 三轴 viewer 通过 typecheck/build/preview;OPFS 仍 Worker-owned | `coverage/react-frontend-m1.report.json`, `web/react`, `scripts/generate_react_frontend_m1.py`, `scripts/test_react_frontend_m1.py` |
| `FE-M4-GUI-01` | verified:扫描 LinuxCNC AXIS/Gmoccapy/Touchy/Gscreen/QtVCP/PyVCP/GladeVCP/Vismach/NGCGUI/QtPlasmaC 等 GUI 源码、Python 库、sim descriptors/assets,1837 条文件记录、12 个 family、source hash/path 通过;341 条 manifest 反向归属缺口保留审计,许可证不阻塞技术移植 | `coverage/gui-source-inventory-fe-m4.report.json`, `scripts/generate_gui_source_inventory.py`, `scripts/test_gui_source_inventory.py`, `nextTask1.md` |
| `FE-M4-GUI-02` | verified:集中 React GUI domain model,定义 12 family、23 个 protocol.v1 Worker command、panel/capability/boundary 映射;PY-WASM、SIM-DEVICE、WEB-EQUIV、REAL-EXCLUDED 和 Worker/OPFS ownership 均有 contract evidence | `coverage/react-gui-domain-fe-m4.report.json`, `web/react/src/gui-domain.ts`, `scripts/generate_react_gui_domain_report.py`, `scripts/test_react_gui_domain_report.py` |
| `FE-M4-GUI-03` | verified:对照 LinuxCNC AXIS/Gremlin/glcanon 完成 React AXIS Web-equivalent workflow;program/MDI/run/pause/step/restart/abort/jog/home/override/spindle/tool/probe/coolant/estop/recover/DRO/Three.js 由 Worker 驱动,minimal_xyz Worker regression 和 React build 通过 | `coverage/axis-web-workflow-fe-m4.report.json`, `web/react/src/App.tsx`, `web/react/src/worker-client.ts`, `scripts/generate_axis_web_workflow_report.py`, `scripts/test_axis_web_workflow_report.py` |
| `FE-M4-GUI-04` | verified:将 Gmoccapy/Touchy/Gscreen/QtVCP/QtDragon/PyVCP/GladeVCP/Vismach/NGCGUI/QtPlasmaC/Plasma 转为 family descriptor;Web Component、Three.js、PY-WASM 和 REAL-EXCLUDED 边界集中定义,12 family contract 通过 | `coverage/gui-family-adapter-fe-m4.report.json`, `web/react/src/gui-family-adapter.ts`, `scripts/generate_gui_family_adapter_report.py`, `scripts/test_gui_family_adapter_report.py` |
| `FE-M4-GUI-05` | verified:建立 vismach/glcanon/NGCGUI/QtPlasmaC 的 Three.js visual workflow mapping;pose/joints/toolpath/stock/material/torch 只读 Worker snapshot,PY-WASM/真实硬件边界保留 | `coverage/gui-visual-workflow-fe-m4.report.json`, `web/react/src/visual-workflow.ts`, `scripts/generate_gui_visual_workflow_report.py`, `scripts/test_gui_visual_workflow_report.py` |
| `FE-M4-GUI-06` | blocked(正式停止条件):现有 Chromium production preview desktop/mobile DOM、截图、Three.js canvas smoke verified;三浏览器 minimum matrix仍 TBD,Safari/Firefox 和 OPFS recovery 保持 blocked/STOP_RELEASE,不把 Chromium smoke 误报为全 GUI release | `coverage/gui-browser-visual-fe-m4.report.json`, `scripts/generate_gui_browser_visual_report.py`, `scripts/test_gui_browser_visual_report.py`, `nextTask1.md` |
| `REAL-CASE-CONDITIONS-01` | 真实 LinuxCNC `linuxcnc -r` 临时目录执行 verified:minimal_xyz 和 CoreXY 均进入真实 TASK tick;当前环境使用 `linuxcnc-uspace 2.10.0~pre1`、非 `PREEMPT_RT` 内核的 POSIX fallback、X11 DISPLAY;CoreXY 缺 tool.tbl 时出现官方 tool-table error,补入临时 linuxcnc.var/tool.tbl 后持续运行;参数文件会在可写目录中生成/更新,临时 fixture 不纳入 source parity | `coverage/native-linuxcnc-case-conditions.report.json`, `scripts/generate_native_linuxcnc_case_conditions.py`, `scripts/test_native_linuxcnc_case_conditions.py`, `linuxcnc/docs/src/getting-started/system-requirements.adoc` |
| `CASE-PARITY-PLAN-01` | 建立以真实 `configs/sim` 案例为中心的 S8-03..S8-10 执行队列;定义每案例 native/Worker/frontend parity contract、资源生成条件、Axis/QtVCP/Gscreen/Touchy/GladeVCP/PyVCP/VisMach 家族和 235-case full acceptance;S8-02 blocker 未被绕过 | `docs/linuxcnc-web-wasm-case-parity-plan.md`, `nextTask1.md` |
## 追溯规则