同步五轴仿真文档和验证证据
This commit is contained in:
112
work/working1/01-功能内容.md
Normal file
112
work/working1/01-功能内容.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# 01-功能内容
|
||||
|
||||
## 功能目标
|
||||
|
||||
完善 Web RTCP 五轴仿真页面的数控控制按钮互相功能,使按钮状态和点击反馈真实反映 LinuxCNC task/HAL 控制状态。
|
||||
|
||||
本轮优先完成的按钮:
|
||||
|
||||
- Run
|
||||
- Stop
|
||||
- Pause
|
||||
- Resume
|
||||
- Step
|
||||
- Home
|
||||
|
||||
## 已实现内容
|
||||
|
||||
1. Run 条件检查和提示
|
||||
- 当执行条件不具备时,Run 按钮保持可点击。
|
||||
- 点击后通过 `operatorMessage` 提示具体原因,例如机器未上电、未切到 AUTO、未 Home、task/HAL runtime 未就绪、未加载 LinuxCNC machine-file G-code 等。
|
||||
- 前端按钮增加 `data-command-ready` 和 `aria-disabled` 状态,避免按钮被禁用后无法给出提示。
|
||||
|
||||
2. Stop
|
||||
- Web store 发送 `EMC_TASK_ABORT`。
|
||||
- task/HAL 状态回到 idle/stopped。
|
||||
- motion runtime 标记 aborted,并清空/停止执行队列。
|
||||
|
||||
3. Pause
|
||||
- Web store 发送 `EMC_TASK_PLAN_PAUSE`。
|
||||
- task/HAL runtime 将解释器状态置为 `PAUSED`。
|
||||
- motion runtime 接收 `EMC_TRAJ_PAUSE`,运动状态进入 paused。
|
||||
|
||||
4. Resume
|
||||
- Web store 发送 `EMC_TASK_PLAN_RESUME`。
|
||||
- 仅当返回的 LinuxCNC task/HAL 状态仍应继续运行时,才恢复 task/HAL status loop。
|
||||
- 避免 Resume 后在已完成、已停止或不应运行的状态下继续轮询。
|
||||
|
||||
5. Step
|
||||
- Web store 发送 `EMC_TASK_PLAN_STEP`,不再只跑空 cycle。
|
||||
- task/HAL runtime 记录 `singleStepping=true` 和 `taskPaused=true`。
|
||||
- motion runtime 增加 `EMC_TRAJ_STEP` / `EMCMOT_STEP` 支持,在 paused 状态下允许 step 命令通过。
|
||||
|
||||
6. Home
|
||||
- Web store 发送 `EMC_JOINT_HOME`。
|
||||
- Home 后立即保持 Web 侧 `allHomed=true`,防止快速 `HOME -> SET_MODE` 时序丢失已归零状态。
|
||||
- task/HAL 状态 patch 保留 `allHomed` 和 `noForceHoming`。
|
||||
- task/HAL session 初始化时停止旧 status loop,防止旧循环覆盖新 session 状态。
|
||||
|
||||
## LinuxCNC 源码依据
|
||||
|
||||
参考 LinuxCNC 源程序:
|
||||
|
||||
- `/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctaskmain.cc`
|
||||
- `/home/meswork/cnc_wams/linuxcnc/src/emc/nml_intf/emc_nml.hh`
|
||||
- `/home/meswork/cnc_wams/linuxcnc/src/emc/nml_intf/emc.hh`
|
||||
|
||||
对应命令语义:
|
||||
|
||||
- `EMC_TASK_PLAN_RUN`
|
||||
- `EMC_TASK_PLAN_PAUSE`
|
||||
- `EMC_TASK_PLAN_RESUME`
|
||||
- `EMC_TASK_PLAN_STEP`
|
||||
- `EMC_TASK_ABORT`
|
||||
- `EMC_JOINT_HOME`
|
||||
- `EMC_TRAJ_PAUSE`
|
||||
- `EMC_TRAJ_RESUME`
|
||||
- `EMC_TRAJ_STEP`
|
||||
- `EMC_TRAJ_ABORT`
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
|
||||
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js`
|
||||
- `/home/meswork/cnc_wams/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `/home/meswork/cnc_wams/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`
|
||||
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
|
||||
|
||||
## 当前完成状态
|
||||
|
||||
状态:已完成并通过选定严格测试。
|
||||
|
||||
补充验收:已新增本地浏览器按钮流程取证,覆盖 Home、Run、Pause、Resume、Step、Stop 点击前后状态截图和 JSON 报告。
|
||||
|
||||
取证文件:
|
||||
|
||||
- `/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
- `/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json`
|
||||
- `/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.pdf`
|
||||
- `/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/`
|
||||
|
||||
云端补充验收:
|
||||
|
||||
- 已重新部署当前静态站点到 `https://82.156.24.101:8092/`。
|
||||
- 已使用同一按钮流程脚本采集云端 Home、Run、Pause、Resume、Step、Stop 点击前后状态。
|
||||
- 云端报告状态:`PASS`
|
||||
- job_id:`btn-20260623091811-c291e49b`
|
||||
- report_id:`report-btn-20260623091811-c291e49b`
|
||||
- 云端 JSON:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json`
|
||||
- 云端 PDF:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.pdf`
|
||||
- 云端截图:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/cloud-button-control-evidence/`
|
||||
|
||||
Native 对照补充验收:
|
||||
|
||||
- 已生成 native task/HAL 对照报告。
|
||||
- 报告状态:`PASS_WITH_HOST_NATIVE_RUNTIME_BLOCKER`
|
||||
- 报告文件:
|
||||
- `/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.json`
|
||||
- `/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.md`
|
||||
- 结论:LinuxCNC source/phase0/native readiness audit 对照通过;host-native TRT runtime 状态转换日志因当前主机 native runtime 依赖阻塞无法生成。
|
||||
|
||||
注意:本轮仍不声明真实硬件驱动、host realtime kernel、外部 User-M process 或 tool DB native runtime 已具备;这些边界在 native 对照报告中明确记录。
|
||||
279
work/working1/02-程序开发步骤.md
Normal file
279
work/working1/02-程序开发步骤.md
Normal file
@@ -0,0 +1,279 @@
|
||||
# 02-程序开发步骤
|
||||
|
||||
## 阶段 1:确认语义来源
|
||||
|
||||
1. 阅读 workspace 规则和 LinuxCNC WASM port 规则。
|
||||
2. 确认本轮不能新增独立 CNC 语义,必须以 LinuxCNC 源码为语义依据。
|
||||
3. 查阅 LinuxCNC task 源码:
|
||||
- `linuxcnc/src/emc/task/emctaskmain.cc`
|
||||
- `linuxcnc/src/emc/nml_intf/emc_nml.hh`
|
||||
- `linuxcnc/src/emc/nml_intf/emc.hh`
|
||||
4. 确认按钮对应的 LinuxCNC command:
|
||||
- Run -> `EMC_TASK_PLAN_RUN`
|
||||
- Stop -> `EMC_TASK_ABORT`
|
||||
- Pause -> `EMC_TASK_PLAN_PAUSE`
|
||||
- Resume -> `EMC_TASK_PLAN_RESUME`
|
||||
- Step -> `EMC_TASK_PLAN_STEP`
|
||||
- Home -> `EMC_JOINT_HOME`
|
||||
|
||||
## 阶段 2:前端按钮状态调整
|
||||
|
||||
文件:
|
||||
|
||||
- `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
|
||||
|
||||
步骤:
|
||||
|
||||
1. 找到 bottom controls 渲染逻辑。
|
||||
2. 增加 promptable action 列表:
|
||||
- `RUN`
|
||||
- `STOP`
|
||||
- `PAUSE`
|
||||
- `RESUME`
|
||||
- `STEP`
|
||||
- `HOME`
|
||||
3. 这些按钮在 blocked 时不再设置 HTML `disabled`。
|
||||
4. blocked 状态通过以下属性体现:
|
||||
- `data-command-ready="false"`
|
||||
- `aria-disabled="true"`
|
||||
- `title="... blocked reason ..."`
|
||||
5. 点击后仍 dispatch 原 action,由 store gate 返回真实阻塞原因。
|
||||
|
||||
## 阶段 3:Web store 命令行为调整
|
||||
|
||||
文件:
|
||||
|
||||
- `web-rtcp-5axis-sim-plan/app/src/state/store.js`
|
||||
|
||||
步骤:
|
||||
|
||||
1. Resume
|
||||
- 发送 `EMC_TASK_PLAN_RESUME`。
|
||||
- 根据返回 status 调用 `shouldContinueTaskHalStatusLoop()`。
|
||||
- 只有仍处于 reading/mdi 等应继续状态时才重启 status loop。
|
||||
|
||||
2. Step
|
||||
- 从空 command sequence 改为发送 `EMC_TASK_PLAN_STEP`。
|
||||
- 保留单步后 paused 状态。
|
||||
|
||||
3. Home
|
||||
- 在 task/HAL runtime 存在时,先在 Web 状态中标记:
|
||||
- `mode="manual"`
|
||||
- `allHomed=true`
|
||||
- `interpState="idle"`
|
||||
- `taskPaused=false`
|
||||
- 再异步发送 `EMC_JOINT_HOME`。
|
||||
- 修复快速 `HOME -> SET_MODE` 导致 Home 状态丢失的问题。
|
||||
|
||||
4. Session reset
|
||||
- `initializeTaskHalSession()` 开始时停止旧 `taskHalStatusLoop`。
|
||||
- 避免旧运行循环覆盖新 session 或 MDI/Step 状态。
|
||||
|
||||
5. Status patch
|
||||
- `applyTaskHalStatusPatch()` 保留 `allHomed`。
|
||||
- 同时保留 `noForceHoming`,避免 gate 状态回退。
|
||||
|
||||
## 阶段 4:WASM task/HAL runtime 补齐
|
||||
|
||||
文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
|
||||
步骤:
|
||||
|
||||
1. 在 `TaskRuntime` 中增加:
|
||||
- `task_paused`
|
||||
- `single_stepping`
|
||||
2. 在 `status_json()` 输出:
|
||||
- `task.taskPaused`
|
||||
- `task.singleStepping`
|
||||
3. 在 command handler 中补齐:
|
||||
- `EMC_TASK_PLAN_STEP`
|
||||
- RUN/RESUME/ABORT/HOME/completion 时清理 pause/step 状态。
|
||||
4. Step 行为:
|
||||
- 设置 `single_stepping=true`
|
||||
- 设置 `task_paused=true`
|
||||
- 发送 `EMC_TRAJ_STEP`
|
||||
- cycle 后回到 paused。
|
||||
|
||||
## 阶段 5:WASM motion runtime 补齐
|
||||
|
||||
文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
|
||||
步骤:
|
||||
|
||||
1. 增加 `LCMOT_CMD_STEP`。
|
||||
2. 解析:
|
||||
- `EMC_TRAJ_STEP`
|
||||
- `EMCMOT_STEP`
|
||||
3. paused 状态下允许 STEP 命令通过 queue gate。
|
||||
4. apply step 时短暂解除 paused,使单步命令可以推进。
|
||||
|
||||
## 阶段 6:测试覆盖
|
||||
|
||||
修改测试:
|
||||
|
||||
- `web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`
|
||||
- `web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
|
||||
|
||||
新增/强化验证:
|
||||
|
||||
1. blocked Run 按钮不能被 HTML disabled,应可点击并提示原因。
|
||||
2. Pause 后 `runState=paused`。
|
||||
3. Resume 后恢复 running/reading 状态。
|
||||
4. Step 后:
|
||||
- `machine.interpState="paused"`
|
||||
- `machine.taskPaused=true`
|
||||
- `taskHalStatus.task.singleStepping=true`
|
||||
5. Stop 后:
|
||||
- `runState="stopped"`
|
||||
- `machine.interpState="idle"`
|
||||
- `motion.aborted=true`
|
||||
|
||||
## 阶段 7:构建与验证
|
||||
|
||||
执行:
|
||||
|
||||
```bash
|
||||
bash wasm-port/tools/build_task_hal_wasm.sh
|
||||
node wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
|
||||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||||
```
|
||||
|
||||
结果:全部通过。
|
||||
|
||||
## 阶段 8:浏览器按钮截图取证
|
||||
|
||||
新增文件:
|
||||
|
||||
- `qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
|
||||
步骤:
|
||||
|
||||
1. 启动本地静态 HTTP server,打开 `web-rtcp-5axis-sim-plan/app/index.html`。
|
||||
2. 等待 kinematics、interpreter、task/HAL runtime ready。
|
||||
3. 加载短 G-code 程序 `button-control-evidence.ngc`。
|
||||
4. 按顺序采集:
|
||||
- 初始界面
|
||||
- 程序加载后
|
||||
- Home 前后
|
||||
- Run 前后
|
||||
- Pause 前后
|
||||
- Resume 前后
|
||||
- Step 前后
|
||||
- Stop 前后
|
||||
5. 每个步骤记录:
|
||||
- PNG 截图
|
||||
- `RUN/STOP/PAUSE/RESUME/STEP/HOME` 按钮 DOM readiness 属性
|
||||
- Web store machine/run/taskHalStatus 状态
|
||||
- Three.js canvas dataset
|
||||
- PNG 非黑像素统计
|
||||
6. 输出 JSON 报告:
|
||||
|
||||
```text
|
||||
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json
|
||||
```
|
||||
|
||||
验证命令:
|
||||
|
||||
```bash
|
||||
node --check qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs
|
||||
node qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
button_control_evidence_status=PASS
|
||||
```
|
||||
|
||||
## 阶段 9:云端部署与按钮验收
|
||||
|
||||
步骤:
|
||||
|
||||
1. 重建当前静态站点:
|
||||
|
||||
```bash
|
||||
bash wasm-port/tools/build_task_hal_wasm.sh
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
```
|
||||
|
||||
2. 打包 `web-rtcp-5axis-sim-plan/app/dist`:
|
||||
|
||||
```bash
|
||||
tar -C web-rtcp-5axis-sim-plan/app/dist -czf /tmp/web-rtcp-5axis-sim-8092-working1.tar.gz .
|
||||
```
|
||||
|
||||
3. 通过 SSH/paramiko 发布到云端 nginx root:
|
||||
|
||||
```text
|
||||
host=82.156.24.101
|
||||
user=ubuntu
|
||||
root=/var/www/web-rtcp-5axis-sim
|
||||
```
|
||||
|
||||
4. 云端执行:
|
||||
|
||||
```bash
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
curl -k -I https://127.0.0.1:8092/
|
||||
```
|
||||
|
||||
5. 对公网 URL 运行按钮流程取证:
|
||||
|
||||
```bash
|
||||
TARGET_URL='https://82.156.24.101:8092/' \
|
||||
EVIDENCE_SCOPE='cloud-button-control-evidence' \
|
||||
node qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
button_control_evidence_status=PASS
|
||||
button_control_evidence_job_id=btn-20260623091811-c291e49b
|
||||
button_control_evidence_report_id=report-btn-20260623091811-c291e49b
|
||||
button_control_evidence_json=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json
|
||||
button_control_evidence_pdf=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.pdf
|
||||
button_control_evidence_screenshots=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/cloud-button-control-evidence
|
||||
```
|
||||
|
||||
## 阶段 10:LinuxCNC native 对照报告
|
||||
|
||||
新增文件:
|
||||
|
||||
- `qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs`
|
||||
|
||||
步骤:
|
||||
|
||||
1. 运行 phase0 native source/probe gate。
|
||||
2. 运行 Web native task/HAL readiness audit。
|
||||
3. 尝试运行 opt-in TRT native runtime probe。
|
||||
4. 尝试运行 upstream `rs274` fixture baseline。
|
||||
5. 记录 `halcmd`、`rs274`、`linuxcncsvr` 动态库依赖。
|
||||
6. 输出 native 对照 JSON/Markdown 报告。
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
node --check qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs
|
||||
node qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
native_task_hal_comparison_status=PASS_WITH_HOST_NATIVE_RUNTIME_BLOCKER
|
||||
native_task_hal_comparison_json=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.json
|
||||
native_task_hal_comparison_markdown=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.md
|
||||
native_task_hal_transition_log_available=0
|
||||
native_task_hal_host_blocker_count=15
|
||||
```
|
||||
|
||||
说明:当前主机不能启动 LinuxCNC native TRT task/HAL runtime,原因包括 RIP 脚本硬编码旧绝对路径 `/home/cnc/桌面/cnc_wams/linuxcnc`,以及二进制依赖当前主机缺失的 `GLIBC_2.38`、`GLIBCXX_3.4.31`、`libpython3.13.so.1.0` 等 runtime 条件。因此 BTN-013 的完成形态是 native/source 对照审计和 host blocker 证据,不声明真实 host-native 状态转换日志已生成。
|
||||
85
work/working1/03-推进台账.md
Normal file
85
work/working1/03-推进台账.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# 03-推进台账
|
||||
|
||||
## 本轮目标
|
||||
|
||||
完成 Web RTCP 五轴仿真页面中 Run、Stop、Pause、Resume、Step、Home 按钮的互相功能,使按钮真实反映 LinuxCNC task/HAL 状态。Run 不满足条件时必须给出明确提示。
|
||||
|
||||
## 推进记录
|
||||
|
||||
| 轮次 | 做了什么 | 改了哪些文件 | 验证了什么 | 下一步 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | 阅读 workspace 和 LinuxCNC WASM port 规则,确认必须以 LinuxCNC 源码作为语义依据 | 无 | 确认 `AGENTS.md` 和 `wasm-port/SKILL.md` 规则 | 定位按钮和状态代码 |
|
||||
| 2 | 查找按钮渲染、状态 store、task/HAL runtime、motion runtime | 无 | 定位 `gmoccapy-shell.js`、`store.js`、task/HAL WASM shim | 对照 LinuxCNC 源码 |
|
||||
| 3 | 对照 LinuxCNC 源码确认命令语义 | 无 | 确认 `RUN/PAUSE/RESUME/STEP/ABORT/HOME` 对应 LinuxCNC command | 修改 UI gate |
|
||||
| 4 | 调整按钮 blocked 行为,Run/Stop/Pause/Resume/Step/Home blocked 时仍可点击 | `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js` | blocked Run 可以点击并产生 operatorMessage | 修改 store 命令 |
|
||||
| 5 | 修改 store 中 Resume、Step、Home、session reset 和 status patch 行为 | `web-rtcp-5axis-sim-plan/app/src/state/store.js` | Step 发送 `EMC_TASK_PLAN_STEP`,Home 状态不丢失 | 修改 WASM runtime |
|
||||
| 6 | task/HAL runtime 增加 paused/single-stepping 状态和 `EMC_TASK_PLAN_STEP` | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | task status 输出 `taskPaused`、`singleStepping` | 修改 motion runtime |
|
||||
| 7 | motion runtime 增加 `EMC_TRAJ_STEP` / `EMCMOT_STEP` | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | paused 状态下 step 命令可以通过 | 重建 WASM |
|
||||
| 8 | 重建 task/HAL WASM | 生成/更新 build artifact | `linuxcnc_task_hal_wasm_build=ok` | 跑 Node/WASM 测试 |
|
||||
| 9 | 跑 WASM 和 Node 测试,发现 MDI `M428` 状态被旧时序影响 | `store.js` | 定位 Home 快速切模式导致 `allHomed` 丢失 | 修复 Home race |
|
||||
| 10 | 修复 Home race:task/HAL HOME 先同步 Web homed 状态,再发 runtime command | `store.js` | `verify_linuxcnc_task_hal_runtime.mjs` 通过 | 增强测试 |
|
||||
| 11 | 增加 STEP/STOP task/HAL 状态断言 | `web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs` | Step/Stop 状态可验收 | 增加浏览器断言 |
|
||||
| 12 | 增加浏览器 blocked Run button 可点击断言 | `web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html` | blocked Run 不再 disabled,点击后提示原因 | 记录日志 |
|
||||
| 13 | 追加 GPT/Codex 过程日志 | `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md` | 满足 workspace logging rule | 生成交付文档 |
|
||||
| 14 | 新增浏览器按钮流程取证脚本,采集 Home/Run/Pause/Resume/Step/Stop 点击前后截图和状态报告 | `qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs` | `button_control_evidence_status=PASS`,生成 14 张截图和 JSON 报告 | 更新工作文档和日志 |
|
||||
| 15 | 参数化按钮取证脚本,增加 `TARGET_URL`、云端独立输出、job_id、report_id、PDF 报告 | `qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs` | 本地取证仍 PASS,并生成 PDF | 部署云端 |
|
||||
| 16 | 重建并部署当前静态站点到 `https://82.156.24.101:8092/` | `web-rtcp-5axis-sim-plan/app/dist`;远端 `/var/www/web-rtcp-5axis-sim` | `nginx -t` 成功;远端 `curl -k -I https://127.0.0.1:8092/` 返回 `HTTP/2 200` | 跑云端按钮验收 |
|
||||
| 17 | 对云端页面运行按钮流程取证 | `qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json`;`cloud-button-control-evidence-report.pdf`;`screenshots/cloud-button-control-evidence/*.png` | `button_control_evidence_status=PASS`,job_id/report_id 已生成 | 做 native 对照 |
|
||||
| 18 | 生成 LinuxCNC native task/HAL 对照报告,记录 source/phase0 audit 和 host-native runtime blocker | `qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs`;`native-task-hal-comparison-report.json`;`native-task-hal-comparison-report.md` | `native_task_hal_comparison_status=PASS_WITH_HOST_NATIVE_RUNTIME_BLOCKER` | 更新文档和日志 |
|
||||
|
||||
## 最终改动文件
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `web-rtcp-5axis-sim-plan/app/src/state/store.js`
|
||||
- `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
|
||||
- `web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
|
||||
- `web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`
|
||||
- `qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
- `qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json`
|
||||
- `qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.pdf`
|
||||
- `qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/*.png`
|
||||
- `qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json`
|
||||
- `qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.pdf`
|
||||
- `qa/web-rtcp-5axis-site-test/screenshots/cloud-button-control-evidence/*.png`
|
||||
- `qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs`
|
||||
- `qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.json`
|
||||
- `qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.md`
|
||||
- `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
|
||||
|
||||
## 最终验证
|
||||
|
||||
通过:
|
||||
|
||||
- `bash wasm-port/tools/build_task_hal_wasm.sh`
|
||||
- `node wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs`
|
||||
- `node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`
|
||||
- `node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs`
|
||||
- `node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs`
|
||||
- `bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh`
|
||||
- `node --check qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
- `node qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
- `TARGET_URL='https://82.156.24.101:8092/' EVIDENCE_SCOPE='cloud-button-control-evidence' node qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
- `bash wasm-port/tests/native/verify_task_hal_phase0.sh`
|
||||
- `node web-rtcp-5axis-sim-plan/tests/node/verify_native_task_hal_audit.mjs`
|
||||
- `node --check qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs`
|
||||
- `node qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs`
|
||||
|
||||
新增浏览器取证结果:
|
||||
|
||||
- `button_control_evidence_status=PASS`
|
||||
- JSON:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json`
|
||||
- 截图目录:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/`
|
||||
- PDF:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.pdf`
|
||||
- 云端 JSON:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json`
|
||||
- 云端 PDF:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.pdf`
|
||||
- 云端截图目录:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/cloud-button-control-evidence/`
|
||||
- 云端 job_id:`btn-20260623091811-c291e49b`
|
||||
- 云端 report_id:`report-btn-20260623091811-c291e49b`
|
||||
- Native 对照 JSON:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.json`
|
||||
- Native 对照 Markdown:`/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.md`
|
||||
|
||||
## 遗留事项
|
||||
|
||||
1. `work/working1` 中 BTN-001 到 BTN-013 已全部有验收或 blocker 证据。
|
||||
2. 当前仍不声明真实硬件、host realtime kernel、外部 User-M process 或 tool DB native runtime 已具备;native host runtime 的阻塞原因已记录在 native 对照报告中。
|
||||
50
work/working1/04-任务矩阵.md
Normal file
50
work/working1/04-任务矩阵.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 04-任务矩阵
|
||||
|
||||
## 状态说明
|
||||
|
||||
- Done:已实现并有测试证据。
|
||||
- Partial:部分实现,需要继续扩展。
|
||||
- Pending:未开始。
|
||||
- Done-with-blocker:验收报告已完成,且明确记录当前主机/外部条件阻塞,不再作为本轮未完成项。
|
||||
|
||||
## 任务矩阵
|
||||
|
||||
| 编号 | 任务 | 状态 | 验收标准 | 验收证据 |
|
||||
|---|---|---|---|---|
|
||||
| BTN-001 | Run blocked 时仍可点击 | Done | Run 按钮不被 HTML disabled;`data-command-ready=false`;点击后出现 blocked 原因 | `gmoccapy_shell_smoke.html`;`verify_gmoccapy_shell_browser.sh` |
|
||||
| BTN-002 | Run 执行条件检查 | Done | 未上电、未 AUTO、未 Home、runtime 未就绪、未选 G-code 等条件会阻止执行并提示 | `verify_run_preconditions.mjs`;`verify_rtcp_store.mjs` |
|
||||
| BTN-003 | Run 正常执行 | Done | 条件满足后进入 task/HAL run,产生 runtime feedback,状态来自 `linuxcnc-task-motion-hal-wasm` | `verify_linuxcnc_task_hal_runtime.mjs`;browser smoke |
|
||||
| BTN-004 | Stop 功能 | Done | 点击 Stop 后发送 `EMC_TASK_ABORT`,runState 为 stopped,motion aborted 为 true | `verify_linuxcnc_task_hal_runtime.mjs` |
|
||||
| BTN-005 | Pause 功能 | Done | 点击 Pause 后 task/HAL interpState 为 paused,motion paused 为 true | `verify_linuxcnc_task_hal_runtime.mjs`;browser smoke |
|
||||
| BTN-006 | Resume 功能 | Done | 点击 Resume 后发送 `EMC_TASK_PLAN_RESUME`;仅在状态允许时恢复 status loop | `verify_linuxcnc_task_hal_runtime.mjs`;browser smoke |
|
||||
| BTN-007 | Step 功能 | Done | 点击 Step 后发送 `EMC_TASK_PLAN_STEP`,singleStepping 为 true,状态保持 paused | `verify_linuxcnc_task_hal_runtime.mjs` |
|
||||
| BTN-008 | Home 功能 | Done | 点击 Home 后发送 `EMC_JOINT_HOME`,Web/task gate 保留 allHomed,快速切模式不丢状态 | `verify_linuxcnc_task_hal_runtime.mjs`;`verify_run_preconditions.mjs` |
|
||||
| BTN-009 | 按钮 UI 状态标识 | Done | 按钮根据 gate 输出 `data-command-ready`、`aria-disabled`、title | `gmoccapy-shell.js`;browser smoke |
|
||||
| BTN-010 | LinuxCNC 源码语义映射 | Done | 文档和实现引用 LinuxCNC task command 语义,不新增独立 CNC 行为 | `linuxcnc-task-policy.js` sourceReferences;本工作文档 |
|
||||
| RUNTIME-001 | task/HAL paused 状态输出 | Done | status JSON 输出 `taskPaused` | `linuxcnc_task_hal_wasm.cpp`;WASM/Node 测试 |
|
||||
| RUNTIME-002 | task/HAL single stepping 状态输出 | Done | status JSON 输出 `singleStepping` | `verify_linuxcnc_task_hal_runtime.mjs` |
|
||||
| RUNTIME-003 | motion runtime 支持 step | Done | `EMC_TRAJ_STEP` / `EMCMOT_STEP` 可进入 queue 并在 paused 时通过 | `linuxcnc_motion_runtime.c`;WASM/Node 测试 |
|
||||
| TEST-001 | WASM runtime 测试 | Done | `verify_task_hal_wasm.mjs` 通过 | 命令输出 |
|
||||
| TEST-002 | Node task/HAL 测试 | Done | `verify_linuxcnc_task_hal_runtime.mjs` 通过 | 命令输出 |
|
||||
| TEST-003 | Run precondition 测试 | Done | `verify_run_preconditions.mjs` 通过 | 命令输出 |
|
||||
| TEST-004 | Browser smoke 测试 | Done | `verify_gmoccapy_shell_browser.sh` 通过 | 命令输出 |
|
||||
| TEST-005 | Browser 按钮流程截图取证 | Done | Home/Run/Pause/Resume/Step/Stop 点击前后状态截图和 JSON 报告生成,检查项全部 PASS | `capture-button-control-evidence.mjs`;`button-control-evidence-report.json`;`screenshots/button-control-evidence/` |
|
||||
| TEST-006 | 云端按钮流程截图取证 | Done | `https://82.156.24.101:8092/` 页面 Home/Run/Pause/Resume/Step/Stop 流程 PASS,生成 job_id/report_id/PDF/截图 | `cloud-button-control-evidence-report.json`;`cloud-button-control-evidence-report.pdf`;`screenshots/cloud-button-control-evidence/` |
|
||||
| TEST-007 | LinuxCNC native task/HAL 对照报告 | Done-with-blocker | source/phase0/native readiness audit 通过;opt-in host-native runtime probe 的阻塞原因被记录 | `native-task-hal-comparison-report.json`;`native-task-hal-comparison-report.md` |
|
||||
| DOC-001 | 过程日志 | Done | 追加到 `gptlog-process/gpdlog.md` | `gpdlog.md` |
|
||||
| DOC-002 | 工作交付文档 | Done | 在 `work/working1` 创建 6 份文档 | 本目录 |
|
||||
|
||||
## 防重复规则
|
||||
|
||||
1. 后续如果继续改这些按钮,先检查 BTN-001 到 BTN-010 的状态,避免重复实现已有 gate。
|
||||
2. 不要重新写一套 JavaScript CNC 状态机替代 LinuxCNC task/HAL command。
|
||||
3. 新增按钮时必须先建立 LinuxCNC command/source mapping,再接入 store 和 tests。
|
||||
4. 修改 runtime 行为时必须同时更新 WASM/Node/browser 至少一层测试。
|
||||
|
||||
## 后续可扩展任务
|
||||
|
||||
| 编号 | 任务 | 状态 | 验收标准 |
|
||||
|---|---|---|---|
|
||||
| BTN-011 | 云端页面验收截图 | Done | `https://82.156.24.101:8092/` 部署后截图和报告证明按钮行为 |
|
||||
| BTN-012 | Stop/Pause/Resume/Step/Home 浏览器截图证据 | Done | 浏览器报告包含每个按钮点击前后状态截图 |
|
||||
| BTN-013 | 更完整 LinuxCNC native 对照 | Done-with-blocker | native/source 对照和 opt-in host-native runtime blocker 报告完成;当前主机不能生成 native task 状态转换日志 |
|
||||
280
work/working1/05-验收证据.md
Normal file
280
work/working1/05-验收证据.md
Normal file
@@ -0,0 +1,280 @@
|
||||
# 05-验收证据
|
||||
|
||||
## 验收范围
|
||||
|
||||
本轮验收覆盖:
|
||||
|
||||
- Run 条件不具备时可点击并提示原因。
|
||||
- Run 条件满足后进入 task/HAL 执行。
|
||||
- Stop、Pause、Resume、Step、Home 按钮驱动 task/HAL runtime。
|
||||
- 按钮状态来自 LinuxCNC task policy 和 task/HAL status,而不是固定 UI 状态。
|
||||
|
||||
## 命令证据
|
||||
|
||||
### 1. 构建 task/HAL WASM
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
bash wasm-port/tools/build_task_hal_wasm.sh
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
linuxcnc_task_hal_wasm_build=ok
|
||||
```
|
||||
|
||||
### 2. WASM task/HAL runtime 测试
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
node wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
linuxcnc_task_runtime_smoke=ok
|
||||
task_status_from_linuxcnc_runtime=ok
|
||||
task_commands_drive_motion_runtime=ok
|
||||
mdi_jog_task_motion_hal_sync=ok
|
||||
```
|
||||
|
||||
### 3. Web store + task/HAL runtime 测试
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
linuxcnc_task_hal_runtime_smoke=ok
|
||||
task_hal_machine_file_smoke=ok
|
||||
switchkins_remap_hal_sync_smoke=ok
|
||||
browser_task_hal_worker_smoke=ok
|
||||
```
|
||||
|
||||
覆盖点:
|
||||
|
||||
- Run task/HAL feedback。
|
||||
- MDI `M428` 后 `switchkinsType=1`。
|
||||
- Home 后 Jog 保持坐标连续。
|
||||
- Pause 后 `interpState=paused`。
|
||||
- Resume 后 `interpState=reading`。
|
||||
- Step 后 `singleStepping=true`。
|
||||
- Stop 后 `motion.aborted=true`。
|
||||
|
||||
### 4. Run preconditions 测试
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
run_preconditions_ini_profile_smoke=ok
|
||||
run_preconditions_kinematics_smoke=ok
|
||||
run_preconditions_machine_file_smoke=ok
|
||||
```
|
||||
|
||||
覆盖点:
|
||||
|
||||
- LinuxCNC INI 未加载时阻止 Run。
|
||||
- task/HAL runtime 未就绪时阻止 Run。
|
||||
- 未开机、未 AUTO、未 Home 时阻止 Run。
|
||||
- 未选择 machine-file G-code 时阻止 Run。
|
||||
|
||||
### 5. Store 回归测试
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
rtcp_store_smoke=ok
|
||||
```
|
||||
|
||||
### 6. 浏览器 smoke 测试
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
gmoccapy_shell_smoke=ok
|
||||
```
|
||||
|
||||
覆盖点:
|
||||
|
||||
- 页面渲染完整。
|
||||
- task/HAL runtime worker 就绪。
|
||||
- blocked Run 按钮不 disabled。
|
||||
- blocked Run 按钮有 `data-command-ready=false` 和 `aria-disabled=true`。
|
||||
- 点击 blocked Run 后输出 blocked 原因。
|
||||
- Pause/Resume browser workflow 正常。
|
||||
|
||||
### 7. 浏览器按钮流程截图取证
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
node --check qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs
|
||||
node qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
button_control_evidence_status=PASS
|
||||
button_control_evidence_job_id=btn-20260623091525-b35869f1
|
||||
button_control_evidence_report_id=report-btn-20260623091525-b35869f1
|
||||
button_control_evidence_json=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json
|
||||
button_control_evidence_pdf=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.pdf
|
||||
button_control_evidence_screenshots=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence
|
||||
```
|
||||
|
||||
覆盖点:
|
||||
|
||||
- Home 后 `allHomed=true`,保持 manual/idle 状态。
|
||||
- Run 后 `runState=running`,runtime feedback 来源为 `linuxcnc-task-motion-hal-wasm`。
|
||||
- Pause 后 `runState=paused`,`taskPaused=true`。
|
||||
- Resume 后恢复 `runState=running` 和 `interpState=reading`。
|
||||
- Step 后 `singleStepping=true`,并保持 paused。
|
||||
- Stop 后 `runState=stopped`,`motion.aborted=true`。
|
||||
- 14 张截图非空,且每一步记录 `RUN/STOP/PAUSE/RESUME/STEP/HOME` 的 readiness 属性。
|
||||
|
||||
### 8. 云端部署与按钮流程验收
|
||||
|
||||
部署命令摘要:
|
||||
|
||||
```bash
|
||||
bash wasm-port/tools/build_task_hal_wasm.sh
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
tar -C web-rtcp-5axis-sim-plan/app/dist -czf /tmp/web-rtcp-5axis-sim-8092-working1.tar.gz .
|
||||
```
|
||||
|
||||
云端发布:
|
||||
|
||||
```text
|
||||
host=82.156.24.101
|
||||
user=ubuntu
|
||||
nginx root=/var/www/web-rtcp-5axis-sim
|
||||
remote tar=/home/ubuntu/tmp/web-rtcp-5axis-sim-8092-working1-20260623051405.tar.gz
|
||||
remote staging=/home/ubuntu/tmp/web-rtcp-5axis-sim-8092-working1-20260623051405
|
||||
remote backup=/home/ubuntu/tmp/web-rtcp-backups/web-rtcp-5axis-sim-before-working1-20260623051405
|
||||
```
|
||||
|
||||
云端验证:
|
||||
|
||||
```text
|
||||
sudo nginx -t -> nginx: configuration file /etc/nginx/nginx.conf test is successful
|
||||
curl -k -I https://127.0.0.1:8092/ -> HTTP/2 200
|
||||
```
|
||||
|
||||
公网按钮流程取证命令:
|
||||
|
||||
```bash
|
||||
TARGET_URL='https://82.156.24.101:8092/' \
|
||||
EVIDENCE_SCOPE='cloud-button-control-evidence' \
|
||||
node qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
button_control_evidence_status=PASS
|
||||
button_control_evidence_job_id=btn-20260623091811-c291e49b
|
||||
button_control_evidence_report_id=report-btn-20260623091811-c291e49b
|
||||
button_control_evidence_json=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json
|
||||
button_control_evidence_pdf=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.pdf
|
||||
button_control_evidence_screenshots=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/cloud-button-control-evidence
|
||||
```
|
||||
|
||||
### 9. LinuxCNC native task/HAL 对照报告
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
bash wasm-port/tests/native/verify_task_hal_phase0.sh
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_native_task_hal_audit.mjs
|
||||
node --check qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs
|
||||
node qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
task_hal_phase0_native_probe_gate=ok
|
||||
native_task_hal_source_artifact_audit=ok
|
||||
native_task_hal_comparison_status=PASS_WITH_HOST_NATIVE_RUNTIME_BLOCKER
|
||||
native_task_hal_comparison_json=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.json
|
||||
native_task_hal_comparison_markdown=/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.md
|
||||
native_task_hal_transition_log_available=0
|
||||
native_task_hal_host_blocker_count=15
|
||||
```
|
||||
|
||||
阻塞证据摘要:
|
||||
|
||||
- `linuxcnc/scripts/linuxcnc` 和 `linuxcnc/scripts/rip-environment` 硬编码旧路径 `/home/cnc/桌面/cnc_wams/linuxcnc`。
|
||||
- `linuxcnc/bin/halcmd` 要求当前主机没有的 `GLIBC_2.38`。
|
||||
- `linuxcnc/bin/rs274` 要求当前主机没有的 `GLIBC_2.38`、`GLIBCXX_3.4.31` 和 `libpython3.13.so.1.0`。
|
||||
- 当前主机 glibc 为 `Ubuntu GLIBC 2.35`,`libstdc++` 只到 `GLIBCXX_3.4.30`。
|
||||
|
||||
结论:BTN-013 已形成可复核 native/source 对照和 host-native blocker 证据;不声明 native task 状态转换日志已生成。
|
||||
|
||||
## 页面证据
|
||||
|
||||
本轮执行的是本地和云端 browser 验收:
|
||||
|
||||
- 页面入口:`web-rtcp-5axis-sim-plan/app/index.html`
|
||||
- 云端入口:`https://82.156.24.101:8092/`
|
||||
- 浏览器验证脚本:`web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh`
|
||||
- 按钮流程取证脚本:`qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
- 按钮流程 JSON:`qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json`
|
||||
- 按钮流程 PDF:`qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.pdf`
|
||||
- 按钮流程截图目录:`qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/`
|
||||
- 云端按钮流程 JSON:`qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json`
|
||||
- 云端按钮流程 PDF:`qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.pdf`
|
||||
- 云端按钮流程截图目录:`qa/web-rtcp-5axis-site-test/screenshots/cloud-button-control-evidence/`
|
||||
- Native 对照 JSON:`qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.json`
|
||||
- Native 对照 Markdown:`qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.md`
|
||||
|
||||
## 文件证据
|
||||
|
||||
实现文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `web-rtcp-5axis-sim-plan/app/src/state/store.js`
|
||||
- `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
|
||||
|
||||
测试文件:
|
||||
|
||||
- `web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
|
||||
- `web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`
|
||||
- `qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`
|
||||
- `qa/web-rtcp-5axis-site-test/capture-native-task-hal-comparison.mjs`
|
||||
|
||||
过程日志:
|
||||
|
||||
- `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
|
||||
|
||||
## 验收结论
|
||||
|
||||
本轮功能已通过 WASM、Node、browser 三层验证。按钮行为已从单纯 UI 操作提升为 LinuxCNC task/HAL 状态驱动的控制流程。
|
||||
187
work/working1/06-决策记录.md
Normal file
187
work/working1/06-决策记录.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# 06-决策记录
|
||||
|
||||
## DR-001:按钮 blocked 时保持可点击
|
||||
|
||||
决策:Run、Stop、Pause、Resume、Step、Home 在 gate blocked 时不设置 HTML `disabled`。
|
||||
|
||||
原因:
|
||||
|
||||
- 用户要求点击 Run 时,如果执行条件不具备,请提示。
|
||||
- HTML disabled 按钮无法触发 click,用户拿不到具体阻塞原因。
|
||||
- 保持按钮可点击,同时用 `data-command-ready=false`、`aria-disabled=true`、title 和 operatorMessage 表达 blocked 状态,更符合操作员界面需求。
|
||||
|
||||
影响:
|
||||
|
||||
- blocked 按钮仍能 dispatch action。
|
||||
- store gate 是最终裁决点。
|
||||
- UI 可以显示真实阻塞原因。
|
||||
|
||||
## DR-002:按钮语义以 LinuxCNC task command 为准
|
||||
|
||||
决策:不新增独立 JavaScript CNC 行为,按钮映射 LinuxCNC command。
|
||||
|
||||
映射:
|
||||
|
||||
- Run -> `EMC_TASK_PLAN_RUN`
|
||||
- Stop -> `EMC_TASK_ABORT`
|
||||
- Pause -> `EMC_TASK_PLAN_PAUSE`
|
||||
- Resume -> `EMC_TASK_PLAN_RESUME`
|
||||
- Step -> `EMC_TASK_PLAN_STEP`
|
||||
- Home -> `EMC_JOINT_HOME`
|
||||
|
||||
原因:
|
||||
|
||||
- `wasm-port/SKILL.md` 要求 LinuxCNC 源码是语义源。
|
||||
- LinuxCNC task 状态、解释器状态、pause/resume/step 行为已有明确实现。
|
||||
- Web 端只应做 runtime edge adapter 和 UI 显示。
|
||||
|
||||
参考:
|
||||
|
||||
- `/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctaskmain.cc`
|
||||
- `/home/meswork/cnc_wams/linuxcnc/src/emc/nml_intf/emc_nml.hh`
|
||||
|
||||
## DR-003:Step 必须发送 `EMC_TASK_PLAN_STEP`
|
||||
|
||||
决策:Step 不再只执行空 task cycle,必须发送 `EMC_TASK_PLAN_STEP`。
|
||||
|
||||
原因:
|
||||
|
||||
- LinuxCNC 中单步由 `EMC_TASK_PLAN_STEP`、`single_stepping`、`steppingWait` 等状态控制。
|
||||
- 空 cycle 不能表达 operator step command,也不能作为验收依据。
|
||||
|
||||
影响:
|
||||
|
||||
- task/HAL runtime 增加 `singleStepping` 状态。
|
||||
- motion runtime 增加 `EMC_TRAJ_STEP` 支持。
|
||||
- Node 测试验证 `singleStepping=true`。
|
||||
|
||||
## DR-004:Resume 后是否重启 status loop 由返回状态决定
|
||||
|
||||
决策:Resume command 完成后,用 `shouldContinueTaskHalStatusLoop(state, status)` 判断是否恢复轮询。
|
||||
|
||||
原因:
|
||||
|
||||
- 旧逻辑只看旧 state,可能在已经完成、停止或状态不应继续时重启 loop。
|
||||
- LinuxCNC task/HAL status 是更可信的数据来源。
|
||||
|
||||
影响:
|
||||
|
||||
- 减少旧 status loop 覆盖新命令状态的风险。
|
||||
- Pause/Resume 更接近 LinuxCNC task 状态。
|
||||
|
||||
## DR-005:Home 在 Web 状态中立即标记 homed
|
||||
|
||||
决策:task/HAL HOME dispatch 时,先同步 Web 侧 machine 状态,再异步发送 `EMC_JOINT_HOME`。
|
||||
|
||||
原因:
|
||||
|
||||
- 前端操作可能快速执行 `HOME -> SET_MODE auto/mdi`。
|
||||
- 如果只等异步 task/HAL status 返回,后续 mode command 可能覆盖 Home 状态,导致 Run 或 MDI 被错误阻止。
|
||||
- 这是 standalone Web runtime 的异步边界适配,不改变 LinuxCNC Home 命令语义。
|
||||
|
||||
影响:
|
||||
|
||||
- `allHomed=true` 不会因快速模式切换丢失。
|
||||
- task/HAL runtime 仍会收到 `EMC_JOINT_HOME`。
|
||||
|
||||
## DR-006:初始化 task/HAL session 时停止旧 status loop
|
||||
|
||||
决策:`initializeTaskHalSession()` 开始时停止旧 `taskHalStatusLoop`。
|
||||
|
||||
原因:
|
||||
|
||||
- session reset 会重置 task/HAL runtime。
|
||||
- 旧 status loop 如果继续运行,可能把旧运行状态覆盖到新 session 或 MDI command 上。
|
||||
|
||||
影响:
|
||||
|
||||
- MDI `M428` 后 `switchkinsType=1` 不会被旧 loop 覆盖。
|
||||
- 新 session 状态边界更清晰。
|
||||
|
||||
## DR-007:保留 `allHomed` 和 `noForceHoming`
|
||||
|
||||
决策:`applyTaskHalStatusPatch()` 在合并 task/HAL status 时保留 Web policy 状态中的 `allHomed` 和 `noForceHoming`。
|
||||
|
||||
原因:
|
||||
|
||||
- 当前 standalone task/HAL status JSON 不完整表达所有 LinuxCNC homing policy 细节。
|
||||
- Web task policy gate 需要这些字段判断 Run/MDI 是否允许。
|
||||
|
||||
影响:
|
||||
|
||||
- Run gate 不会因为 status patch 丢失 homed/policy 信息而错误阻止。
|
||||
|
||||
## DR-008:本轮不做真实硬件控制
|
||||
|
||||
决策:只完善 Web/WASM standalone simulation task/HAL 状态,不接入真实硬件。
|
||||
|
||||
原因:
|
||||
|
||||
- 项目边界明确:Web simulation,不驱动真实硬件。
|
||||
- `wasm-port/SKILL.md` 明确 realtime scheduling、driver、native HAL runtime internals 是替换边界。
|
||||
|
||||
影响:
|
||||
|
||||
- 验收以 WASM/Node/browser simulation 为准。
|
||||
- 后续若要硬件级对照,应另建 native LinuxCNC 验收任务。
|
||||
|
||||
## DR-009:云端验收另行执行
|
||||
|
||||
决策:本轮文档记录本地严格测试证据;云端 `https://82.156.24.101:8092/` 需要部署后单独采集。后续已执行部署和云端取证,见 DR-011。
|
||||
|
||||
原因:
|
||||
|
||||
- 本轮代码和测试在本地 workspace 完成。
|
||||
- 未执行云端部署命令,也未产生云端 job_id/report_id/PDF。
|
||||
|
||||
影响:
|
||||
|
||||
- 当前功能代码已完成。
|
||||
- 云端验收截图/报告已在后续步骤补齐。
|
||||
|
||||
## DR-010:按钮流程截图取证独立于 browser smoke
|
||||
|
||||
决策:新增 `qa/web-rtcp-5axis-site-test/capture-button-control-evidence.mjs`,不把截图取证逻辑塞进 `gmoccapy_shell_smoke.html`。
|
||||
|
||||
原因:
|
||||
|
||||
- browser smoke 用于快速回归,职责是发现核心渲染和行为回退。
|
||||
- 按钮流程取证会启动 Puppeteer、采集 PNG、分析像素并写 JSON,执行成本和输出体积更大。
|
||||
- 独立脚本可以稳定保留 Home/Run/Pause/Resume/Step/Stop 的验收证据,同时不拖慢常规 smoke。
|
||||
|
||||
影响:
|
||||
|
||||
- BTN-012 的验收入口是独立 QA 命令。
|
||||
- 截图和 JSON 报告保存在 `qa/web-rtcp-5axis-site-test/` 下,可用于交付或人工复核。
|
||||
|
||||
## DR-011:云端 BTN-011 以同一按钮流程脚本验收
|
||||
|
||||
决策:使用参数化后的 `capture-button-control-evidence.mjs` 对 `https://82.156.24.101:8092/` 运行同一套 Home/Run/Pause/Resume/Step/Stop 验收。
|
||||
|
||||
原因:
|
||||
|
||||
- 同一脚本能保证本地和云端验收标准一致。
|
||||
- 云端验收必须包含 job_id、report_id、PDF、截图和 JSON。
|
||||
- 云端 machine-file seed 比本地慢,脚本改为轮询 runtime readiness 和 staging 状态,避免 Puppeteer 长 Promise 被回收。
|
||||
|
||||
影响:
|
||||
|
||||
- BTN-011 已完成。
|
||||
- 云端报告为 `PASS`,job_id 为 `btn-20260623091811-c291e49b`。
|
||||
|
||||
## DR-012:BTN-013 以 native/source 对照和 host blocker 报告完成
|
||||
|
||||
决策:不把当前主机无法运行的 host-native TRT task/HAL runtime 伪装成已通过;BTN-013 的完成产物是 `native-task-hal-comparison-report.json/md`。
|
||||
|
||||
原因:
|
||||
|
||||
- 默认 phase0 native source/probe gate 和 Web native readiness audit 均通过。
|
||||
- opt-in native runtime probe 尝试后失败,`linuxcnc.stderr.log` 显示 LinuxCNC RIP 脚本引用旧绝对路径 `/home/cnc/桌面/cnc_wams/linuxcnc/scripts/rip-environment`。
|
||||
- `ldd` 显示当前主机还缺少 `GLIBC_2.38`、`GLIBCXX_3.4.31`、`libpython3.13.so.1.0` 等 native runtime 依赖。
|
||||
- 在这些 host 条件未满足前,无法生成真实 native LinuxCNC task 状态转换日志。
|
||||
|
||||
影响:
|
||||
|
||||
- BTN-013 标记为 `Done-with-blocker`。
|
||||
- 本轮仍只声明 Web/WASM simulation boundary 的 task/HAL 行为完成。
|
||||
- 真实 host realtime/hardware/external process/tool DB native runtime 仍不提升为完成状态。
|
||||
Reference in New Issue
Block a user