Enforce LinuxCNC WASM authority for XYZAC frontend
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
`release_status: STOP_RELEASE`
|
||||
|
||||
这表示已执行并通过选定 XYZAC 案例的 WASM/Worker 控制闭环,但不宣称整个 LinuxCNC 或所有 AXIS 配置已经数值完全对标。
|
||||
本项目铁律:所有 G-code、运动、门控、I/O、HAL、刀具和状态业务不得由 JavaScript 模拟;React/Three 只做用户输入与显示投影。
|
||||
|
||||
## 对标输入
|
||||
|
||||
@@ -36,6 +37,24 @@ source slices c9f0b4dc686717b37565f85fb0ab8cc8ded9cfa0028cc0aaaccdbcf808c4c524
|
||||
|
||||
AXIS 源控件清单:菜单 80、工具栏 20、快捷键 10,共 110 条,来自 `web/workspace/xyzac-trt-source-slices.mjs`。
|
||||
|
||||
## 权威状态边界
|
||||
|
||||
选定 `xyzac-trt` 配置时,Worker 强制建立 LinuxCNC WASM TP,不接受缺省 planner 降级。前端只负责输入和显示投影,业务值、门控、运动和设备状态均来自以下 WASM 边界:
|
||||
|
||||
| 数据/动作 | 唯一来源 | 前端使用方式 |
|
||||
| --- | --- | --- |
|
||||
| G-code 解析、当前行、活动段、预览 | `WasmProgramRuntime` (`linuxcnc-wasm-sim_program`) | 显示源代码和路径,不在 React 重解析 |
|
||||
| XYZAC 位姿、速度、队列、前瞻 | `WasmLinuxcncTp` (`linuxcnc-source-tp`) | DRO、实时刀具、执行状态 |
|
||||
| 五关节命令值 | WASM TP 当前 pose + `sim_kinematics_switch_inverse_mode` | 关节/DRO 投影;无 JS 插值 |
|
||||
| JOG 目标、速度和限位 | `sim_linuxcnc_tp_jog`、WASM TP axis limits/jog scale | Worker 只传递轴、方向、步长 |
|
||||
| HOME、逐关节 homed、limit | `WasmHomeLimit` (`homed_mask`) | Home 按钮和轴状态门控 |
|
||||
| ESTOP、POWER、主轴、探针、HAL | `WasmXyzacIo` / `sim_io` / `sim_hal` | 设备状态、报警和命令结果 |
|
||||
| Task/程序门控 | `SimTask` `sim_task_command_gate` | 所有按钮 `disabled` 和错误原因 |
|
||||
| Feed/Jog/Max/Spindle override | WASM TP/IO getter/setter | 受控 slider,值由快照回读 |
|
||||
| 视图缩放、旋转、平移、tab | React/Three 本地 UI | 仅显示交互,不参与运动计算 |
|
||||
|
||||
在 WASM 快照尚未到达前,界面显示 `WASM PENDING` 并禁用运动操作;不会使用 JS 默认轴值、任务状态或 override 值。浏览器定时器只发送 `SIM_STEP` 采样请求,不执行 G-code、轨迹、运动学或设备状态计算。React/Three 中的定时器、相机、网格、刀具网格和文本格式化均为显示层,不产生或修改任何 CNC 状态。
|
||||
|
||||
## 按钮/控件矩阵
|
||||
|
||||
下表中的“通过”包含正常路径和刻意触发的 LinuxCNC 门控拒绝;拒绝不是失败,必须返回可解释的 gate/error key。
|
||||
@@ -47,6 +66,7 @@ AXIS 源控件清单:菜单 80、工具栏 20、快捷键 10,共 110 条,
|
||||
| Machine | Power On/Off | `commands.power`、`emcTaskSetState` | `sim_io_set_power` | 通过 |
|
||||
| Machine | Reset | `commands.reset` | WASM Task/IO reset | 通过 |
|
||||
| Machine | HOME ALL | `home_all_joints` | `WasmHomeLimit` 五关节回零 | 通过 |
|
||||
| Machine | Home X/Y/Z/A/C | `home_joint` | `WasmHomeLimit.homed_mask` 逐关节回零 | 通过 |
|
||||
| Machine | Run Startup Sequence | release -> power -> home -> run | Worker 固定顺序 | 通过 |
|
||||
| Program | Load | `open_file_guts` | WASM interpreter preview | 通过 |
|
||||
| Program | Run | `task_run` / `AUTO_RUN` | WASM program + source TP | 通过 |
|
||||
@@ -54,7 +74,7 @@ AXIS 源控件清单:菜单 80、工具栏 20、快捷键 10,共 110 条,
|
||||
| Program | Stop | `task_stop` / `c.abort` | WASM TP abort,队列清零 | 通过 |
|
||||
| Program | Restart | `reload_file` / first line | WASM program reload | 通过 |
|
||||
| Program | Step / Seek | `task_step` / `set_first_line` | WASM interpreter | 通过 |
|
||||
| JOG | X、Y、Z、A、C +/-、Stop | `jog_plus/jog_minus/jog_on/jog_off` | WASM motion queue | 通过 |
|
||||
| JOG | X、Y、Z、A、C +/-、Stop | `jog_plus/jog_minus/jog_on/jog_off` | WASM source TP jog velocity/queue | 通过 |
|
||||
| JOG | 越界/非有限速度 | LinuxCNC motion limit/ferror | WASM 错误 key | 通过拒绝 |
|
||||
| MDI | Go、历史命令 | `send_mdi_command` | WASM interpreter/canonical | 通过 |
|
||||
| MDI | 运行中 MDI | `manual_ok` | `mdi_while_program_active` | 通过拒绝 |
|
||||
@@ -79,16 +99,17 @@ AXIS 源控件清单:菜单 80、工具栏 20、快捷键 10,共 110 条,
|
||||
{
|
||||
"schema": "xyzac-panel-button-parity.v1",
|
||||
"source": "linuxcnc-wasm-worker",
|
||||
"verified_paths": 94,
|
||||
"verified_paths": 97,
|
||||
"expected_error_paths": 8,
|
||||
"blocked_by_abi_paths": 7,
|
||||
"blocked_by_abi_paths": 4,
|
||||
"selected_case_release_status": "STOP_RELEASE"
|
||||
}
|
||||
```
|
||||
|
||||
94 条通过路径包括:
|
||||
97 条通过路径包括:
|
||||
|
||||
- Machine:HELLO、SESSION_ATTACH、LOAD_WORKSPACE、ESTOP、ESTOP_RESET、POWER、RESET、HOME ALL、启动序列;
|
||||
- Machine:五个轴的独立 HOME、`homed_mask` 聚合和部分回零门控;
|
||||
- Program:LOAD、RUN、SIM_STEP、PAUSE、SNAPSHOT、RESUME、ABORT/STOP、RESTART、STEP、SEEK、按行恢复;
|
||||
- JOG:XYZAC 五轴启动、固定 tick 采样和停止;
|
||||
- MDI:正常 G-code、运行中门控和非法 G-code 错误回显;
|
||||
@@ -105,22 +126,22 @@ AXIS 源控件清单:菜单 80、工具栏 20、快捷键 10,共 110 条,
|
||||
source_length: 200509
|
||||
line_count: 4711
|
||||
preview_segments: 4684
|
||||
fixed_tick_samples: 1500
|
||||
execution_line: 168
|
||||
execution_trace_entries: 166
|
||||
fixed_tick_samples: 3000
|
||||
execution_line: 147
|
||||
execution_trace_entries: 145
|
||||
motion_authority: wasm
|
||||
motion_delta_snapshots: 0
|
||||
ledger_audit_window: 32
|
||||
```
|
||||
|
||||
## 当前未闭合项
|
||||
|
||||
这些项目在本轮明确记录为 `blocked_by_abi`,没有伪造通过:
|
||||
以下项目仍明确记录为 `blocked_by_abi`,没有伪造通过:
|
||||
|
||||
1. `Home Axis`:当前 WASM home 状态只暴露 aggregate `homed`,没有 LinuxCNC 每关节 homed mask;当前按钮调用的是统一 home。
|
||||
2. `Override Limits`:原始 AXIS `toggle_override_limits` 有独立 motion command;选定 XYZAC WASM 配置目前把 limits 作为配置所有权,尚无等价 command ABI。
|
||||
3. `Jog Speed` 和 `Max Velocity` slider:当前是 React 控件状态,尚未接入 WASM jog/max velocity command。
|
||||
4. `Block delete` 和 `Optional pause`:当前是 React toggle,尚未写入 WASM interpreter modal/control state。
|
||||
5. `Tool Touch Off`:当前按钮发送固定 `G43`;原始 AXIS 先取得用户值,再发送 `G10 L10/L11` 和 `G43`,交互输入流程尚未闭合。
|
||||
6. `Edit tool data`、`Quit`:依赖桌面进程/外部编辑器,属于浏览器 `HOST_BOUNDARY`,不在仿真 Web 范围内。
|
||||
1. `Override Limits`:原始 AXIS `toggle_override_limits` 有独立 motion command;选定 XYZAC WASM 配置目前把 limits 作为配置所有权,尚无等价 command ABI。
|
||||
2. `Block delete` 和 `Optional pause`:当前 AXIS 图标已禁用,尚未写入 WASM interpreter modal/control state;不保留本地假状态。
|
||||
3. `Tool Touch Off`:当前按钮发送固定 `G43`;原始 AXIS 先取得用户值,再发送 `G10 L10/L11` 和 `G43`,交互输入流程尚未闭合。
|
||||
4. `Edit tool data`、`Quit`:依赖桌面进程/外部编辑器,属于浏览器 `HOST_BOUNDARY`,不在仿真 Web 范围内。
|
||||
|
||||
## 复现命令
|
||||
|
||||
@@ -137,7 +158,7 @@ node --experimental-strip-types web/worker/test_xyzac_3d_chips.mjs
|
||||
bash -n run-5axis-rtcp.sh
|
||||
```
|
||||
|
||||
本轮结果:WASM 构建通过,原生 CTest 22/22 通过,XYZAC 聚合按钮测试通过,3D_Chips 固定 tick 长程序测试通过。发布站点 UI 运行/暂停/恢复/停止也已在 Chromium 仿真环境执行;Safari 和真实物理断电不属于本项目范围。
|
||||
本轮结果:WASM 构建通过,原生 CTest 22/22 通过,XYZAC 聚合按钮测试通过,3D_Chips 固定 tick 长程序测试通过。Jog Speed、Max Velocity、Spindle Override 已改为 WASM TP/IO 状态和命令;前端运行态不再使用 React 默认值。发布站点 UI 运行/暂停/恢复/停止也已在 Chromium 仿真环境执行;Safari 和真实物理断电不属于本项目范围。
|
||||
|
||||
发布站点 r5 浏览器冒烟:
|
||||
|
||||
@@ -154,14 +175,32 @@ and view controls: clicked with no browser errors
|
||||
output_sha256: bdf705473e6cda94d721aa23329257adf4a68b705add7650da5cc47012ab70b0
|
||||
```
|
||||
|
||||
发布站点 r6(本轮 WASM authority 版本)浏览器验收:
|
||||
|
||||
```text
|
||||
url: https://49.232.250.35:58010/
|
||||
release: 20260902-linuxcnc-wasm-authority-r6
|
||||
resource_sha256: index-DEinWp01.js 79f5e933909fc631186db9b5091b6239f30c1ade612bb908a4ab9fcf79965343
|
||||
sim-worker-entry-7q53Ew6x.js e5c239104d6676f242ea45cb3ddaf78a379aaaecaca5ff26031dee1ba9496e7c
|
||||
linuxcnc-sim-core-CJilJ2YZ.wasm 13e2746899b0cac5cf91189c00a6174160202f8e632b53c5701e9664335c97cf
|
||||
initial_dom: data-axis-authority=linuxcnc-wasm-worker, data-axis-state-source=linuxcnc-wasm,
|
||||
data-axis-motion-authority=wasm, data-axis-task-authority=wasm_task_canonical
|
||||
3D_Chips.ngc: loaded from published workspace, preview 100%, source TP running current line 22
|
||||
browser_errors: 0
|
||||
screenshots: /tmp/published-r6-authority.png (e58205228a04b386c7b7514bf03c71df7b53f66f2d9ebe2292931b36ef0edb55)
|
||||
/tmp/published-r6-running.png (7fc474d0cb31a0fdd4afb198061e9812c753684e3d2963cc004ec4483c5c4990)
|
||||
```
|
||||
|
||||
## 证据哈希
|
||||
|
||||
```text
|
||||
panel_button_test_output 4447f37d8db6724fcd43518e8ddcd18d54e40faaedc77be9ea01abdc573226bc
|
||||
3d_chips_test_output 493ed6c901d18fae8fa02d0dc26ee0575ce78c53557351a468fc1df622e48ea4
|
||||
panel_button_test_output 9bddcd8b0219925e00598e081dc7a4ed0f4868e8822a21f0ccd08d8e9d355d45
|
||||
button_constraints_output 5b6f4ce1dec03764dcb234793ff96fc2f04d15ab954620a44dbb1210ec64a5a5
|
||||
feed_authority_output deab4a51ee0e56d4f8134efba4b7a97a2b88f37d9165cf730207f71886df8526
|
||||
3d_chips_test_output c97caef2ea5cf3841e1238ec443d0eebadad8cb0048af829111c06e99c9fcdd7
|
||||
wasm_io_source 1cb066d185dd2c5bbf435e022c2518483bd44962e5a0303248757b2da51740f7
|
||||
wasm_io_c_source 09bce1430d6f71702ca0b3bf29ac50db377a6f232ce0d1a9b2c1eaac7ea2162e
|
||||
panel_button_test_source 80782fc1f85f88beb48ec3dfaf638a93f2edb912e694840199dbff504477fe74
|
||||
```
|
||||
|
||||
报告对应提交前工作树保留了既有 coverage 大文件和 LinuxCNC 子模块改动;本轮只提交面板 WASM I/O 修正、step 状态修正、聚合测试和本报告。
|
||||
报告对应提交前工作树保留了既有 coverage 大文件和 LinuxCNC 子模块改动;本轮提交包含 WASM TP/IO/HOME authority、无 JS JOG 运动计算、前端 pending 投影、长程序快照性能修正、聚合测试和本报告。
|
||||
|
||||
Reference in New Issue
Block a user