Complete 3axis tutorial native and Web/WASM parity tools
This commit is contained in:
248
nextTask1.md
248
nextTask1.md
@@ -1,180 +1,166 @@
|
||||
# LinuxCNC Web/WASM 完整仿真移植接续指针
|
||||
# LinuxCNC Web/WASM 仿真接续指针
|
||||
|
||||
这是 LinuxCNC 仿真实现的唯一接续入口;本文件只管理仿真源码、native/WASM/Worker 行为和回归测试。
|
||||
这是仿真实现轨道的唯一接续入口。治理/owner 轨道仍以 [`nextTask.md`](nextTask.md) 为准;不要用本文件刷新 K8 release gate、owner decision 或 context lock。
|
||||
|
||||
## Current
|
||||
|
||||
```yaml
|
||||
pointer_version: 1
|
||||
updated: 2026-08-23
|
||||
pointer_version: 2
|
||||
updated: 2026-08-24
|
||||
track: complete-linuxcnc-simulation
|
||||
context_id: linuxcnc-2.10.0-pre0-wasm-m1-py-c1
|
||||
milestone: S8
|
||||
last_verified_task: FE-M1-REACT
|
||||
last_verified_slice: React/Tailwind/Radix/Three.js FE-M1 build and minimal_xyz Worker case verified
|
||||
milestone: PANEL-15
|
||||
last_verified_task: PANEL-15-SELECTED-CASE-ACCEPTANCE
|
||||
last_verified_slice: 3axis-tutorial source-backed Web/WASM control-panel parity
|
||||
overall_audit: selected_case_verified
|
||||
audit_report: coverage/axis3-tutorial-web-wasm-complete-parity.report.json
|
||||
audit_report_sha256: c4229856a5d16918e15095ef79d92251b97acf8d5a2266050a7c850821c01da2
|
||||
wasm_exports: 207
|
||||
```
|
||||
|
||||
## Read
|
||||
|
||||
启动时只读取本文件的 `Current`、`Task`、`Verify`、`Stop`,然后按需读取:
|
||||
启动时只读取本文件的 `Current/Task/Next/Verify/Stop`,再按需读取当前任务的直接输入。保持选定案例和 context 不变:
|
||||
|
||||
- [`docs/linuxcnc-web-wasm-simulation-gap-plan-v2.md`](docs/linuxcnc-web-wasm-simulation-gap-plan-v2.md)
|
||||
- [`docs/linuxcnc-web-wasm-autonomous-execution-prompt.md`](docs/linuxcnc-web-wasm-autonomous-execution-prompt.md)
|
||||
- [`docs/linuxcnc-web-wasm-case-parity-plan.md`](docs/linuxcnc-web-wasm-case-parity-plan.md)
|
||||
- [`docs/linuxcnc-axis-complete-parity-spec.md`](docs/linuxcnc-axis-complete-parity-spec.md)
|
||||
- [`context-lock.json`](context-lock.json)
|
||||
- 当前任务列出的直接输入和上一个任务的完成报告
|
||||
- 案例入口:`linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini`
|
||||
- 来源规则:[`docs/linuxcnc-web-wasm-wasm-only-migration-plan.md`](docs/linuxcnc-web-wasm-wasm-only-migration-plan.md)
|
||||
- 选定案例契约:[`docs/linuxcnc-web-wasm-3axis-tutorial-complete-parity-plan.md`](docs/linuxcnc-web-wasm-3axis-tutorial-complete-parity-plan.md)
|
||||
- 锁定输入:`context-lock.json`
|
||||
|
||||
启动只读取仿真实现直接输入和当前测试要求。
|
||||
不要重新执行已验证的全配置、GUI 或运动学实现矩阵;它们只作为回归输入。`nextTask.md` 的 owner 阻塞与本地 T3/T4/T5 技术任务相互独立。
|
||||
|
||||
## Task
|
||||
|
||||
```yaml
|
||||
id: FE-M4-GUI-06
|
||||
id: T7-RELEASE-GATE-01
|
||||
status: blocked
|
||||
title: GUI browser visual/performance/recovery matrix
|
||||
active_case: linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini
|
||||
milestone: S8
|
||||
title: local simulation release-gate audit
|
||||
owner: simulation-runtime
|
||||
milestone: T7
|
||||
context_id: linuxcnc-2.10.0-pre0-wasm-m1-py-c1
|
||||
depends_on: [FE-M4-GUI-05, FE-M4-GUI-04, FE-M4-GUI-03, FE-M1-REACT, S8-09]
|
||||
depends_on: [T6-FUNCTION-CLOSURE-01]
|
||||
active_case: linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini
|
||||
direct_inputs:
|
||||
- coverage/react-frontend-m1.report.json
|
||||
- coverage/gui-source-inventory-fe-m4.report.json
|
||||
- coverage/react-gui-domain-fe-m4.report.json
|
||||
- coverage/axis-web-workflow-fe-m4.report.json
|
||||
- coverage/gui-family-adapter-fe-m4.report.json
|
||||
- coverage/gui-visual-workflow-fe-m4.report.json
|
||||
- coverage/axis-source-inventory.report.json
|
||||
- coverage/axis-contract.report.json
|
||||
- coverage/axis-control.report.json
|
||||
- coverage/axis-view-edit.report.json
|
||||
- coverage/axis-case-parity.report.json
|
||||
- coverage/axis-test-matrix.report.json
|
||||
- coverage/axis-release-evidence.report.json
|
||||
- coverage/gui-browser-visual-fe-m4.report.json
|
||||
- docs/linuxcnc-axis-complete-parity-spec.md
|
||||
- coverage/wasm-function-closure-t6.report.json
|
||||
- coverage/wasm-feature-matrix-t5.report.json
|
||||
- coverage/release-candidate-gate.report.json
|
||||
- coverage/full-case-acceptance-s8-10.report.json
|
||||
- coverage/remediation-evidence-roundup.report.json
|
||||
- coverage/owner-review-gate-refresh.report.json
|
||||
- coverage/official-oracle-remediation.report.json
|
||||
- coverage/configuration-resource-remediation.report.json
|
||||
- coverage/browser-matrix-remediation.report.json
|
||||
- docs/linuxcnc-web-wasm-frontend-communication-design.md
|
||||
- docs/linuxcnc-web-wasm-source-map.md
|
||||
- linuxcnc/src/emc/usr_intf
|
||||
- linuxcnc/lib/python
|
||||
- linuxcnc/configs/sim
|
||||
- coverage/implementation-license-remediation.report.json
|
||||
- coverage/full-configuration-startup-matrix.report.json
|
||||
- coverage/linuxcnc-source-semantics-contract.json
|
||||
- web/workspace/linuxcnc-source-semantics.mjs
|
||||
- context-lock.json
|
||||
- nextTask.md
|
||||
required_outputs:
|
||||
- Chromium GUI screenshot/DOM/canvas visual evidence
|
||||
- browser performance and recovery boundary report
|
||||
- explicit Firefox/Safari/OPFS blockers without promotion
|
||||
- coverage/wasm-simulation-release-gate-t7.report.json
|
||||
- scripts/generate_wasm_simulation_release_gate_t7.py
|
||||
- scripts/test_wasm_simulation_release_gate_t7.py
|
||||
objective: >-
|
||||
在真实 Chromium production preview 中验证 GUI DOM、Three.js 非空像素、
|
||||
exact-path 三轴案例加载、控件布局和移动视口;浏览器版本矩阵、OPFS
|
||||
crash/recovery 和 Safari/Firefox 不可用条件保持独立 blocked。
|
||||
non_goals:
|
||||
- 不复制桌面 GTK/Qt/Tk 窗口,不把宿主 Python/动态 loader/真实硬件变成 Web 能力
|
||||
- 不修改 ABI、protocol、schema、context lock;manifest 归属缺口保留为可定位审计项
|
||||
completion_evidence:
|
||||
在不刷新 K8 owner gate、不修改 context lock、ABI、protocol、schema 或许可证决定的前提下,
|
||||
对 simulation track 的 T6 closure、已有 release evidence 和外部 blocker 做只读 release-gate
|
||||
审计;明确 candidate eligibility、STOP_RELEASE、未解决 blocker identity 和不可自动重试边界。
|
||||
completion_evidence:
|
||||
report: coverage/wasm-simulation-release-gate-t7.report.json
|
||||
report_sha256: 4e7cc4e7006fbdcd4698a1304b6ea9e688b18d2abf506731fbf8d0c9e2edd19b
|
||||
status: blocked
|
||||
report: coverage/gui-browser-visual-fe-m4.report.json
|
||||
report_sha256: 053d8a18c129487017c1a85b004c6ed46a8475b2bd5fb126fe2ba4d367b845ed
|
||||
implementation_status: verified
|
||||
chromium_visual: verified
|
||||
chromium_authorized_slice: verified
|
||||
chromium_version: Google Chrome 151.0.7922.169
|
||||
axis_ui_dom_contract: verified
|
||||
axis_ui_feature_count: 26
|
||||
axis_control_contract: verified
|
||||
axis_control_report_sha256: cc12b349cc3fc3e7d1882530f123ca92e4a510f3f40fec4c72bcfd4e876f0a3e
|
||||
axis_view_edit_contract: verified
|
||||
axis_view_edit_report_sha256: 39785b377806de18cb48a1d3c38c129d84a000b9c81d2478cc1a5567ec754e9b
|
||||
axis_case_parity: partial
|
||||
axis_case_parity_report_sha256: a6fcc5eec964a02b821f9a52f30b8e0d3303b8c94507b6d44d6cc75b7a7089e4
|
||||
axis_test_matrix: partial
|
||||
axis_test_matrix_report_sha256: 9ba5de25bd8cfbfd61bd0a87bcb282170fa1de44b28a172b1c6ba649f580c357
|
||||
axis_release_evidence: partial
|
||||
axis_release_evidence_report_sha256: 1a0d3add58fcddf8a6a2a81a7197d91c45a1c94fabb7db75033c4b2f0f3da777
|
||||
browser_matrix: blocked
|
||||
opfs_recovery: blocked
|
||||
prior_completion_evidence:
|
||||
task_id: FE-M4-GUI-05
|
||||
report: coverage/gui-visual-workflow-fe-m4.report.json
|
||||
report_sha256: 4082c673e2bccbf250cfe23683d2732021a3a22f5302da8e12cc80397685c788
|
||||
worker_test: scripts/test_gui_visual_workflow_report.py
|
||||
candidate_eligible: false
|
||||
release_action: STOP_RELEASE
|
||||
gate_mutation: forbidden
|
||||
blocker_count: 8
|
||||
failure_samples: 3
|
||||
checks_verified: 9
|
||||
known_blockers: owner/source/oracle/resource/browser/license inputs remain unresolved
|
||||
release_status: STOP_RELEASE
|
||||
```
|
||||
|
||||
实施顺序:
|
||||
|
||||
1. 读取 T6 closure 和既有 release/remediation evidence,固定 context 与 blocker identity。
|
||||
2. 只读核对 candidate eligibility、STOP_RELEASE、owner input 缺失、oracle/resource/browser/license 状态。
|
||||
3. 验证 gate/context/manifest 未被本地审计修改;任何 release promotion 都视为失败。
|
||||
4. 生成带输入 hash、检查结果、failure sample 和 self-hash 的 T7 audit report。
|
||||
|
||||
## Next
|
||||
|
||||
```yaml
|
||||
next_task: none
|
||||
status: blocked
|
||||
depends_on: [FE-M4-GUI-06]
|
||||
plan: docs/linuxcnc-web-wasm-3axis-tutorial-complete-parity-plan.md
|
||||
continuation_file: nextTask1.md
|
||||
continuation_status: local-closure-verified-awaiting-external
|
||||
case_parity_plan: docs/linuxcnc-web-wasm-case-parity-plan.md
|
||||
queued_after_unblock: []
|
||||
local_continuation:
|
||||
status: verified
|
||||
task_id: TUTORIAL-14
|
||||
report: coverage/axis3-tutorial-closure-index.report.json
|
||||
report_sha256: 5d63a83572d381e01cce7ba70b8c4ddb4ce6dfb790d4ac3b6c365d7dbbdbf750
|
||||
previous_task: TUTORIAL-13
|
||||
action_if_drift: rerun_selected_case_complete_parity_and_visual_regression
|
||||
failure_sample: source_defined_individual_home_and_change_button_ack
|
||||
pause_condition: selected_case_complete_scope_verified_or_explicit_external_source_blocker_recorded
|
||||
native_case_execution:
|
||||
status: required_for_case_parity
|
||||
selected_case: /home/mes006/linuxcncWebWASM/linuxcnc/configs/sim/axis/vismach/3axis-tutorial
|
||||
case_dir: copy_only_3axis_tutorial_declared_exact_files_to_isolated_writable_directory
|
||||
cwd: repository_root_with_system_HALLIB_DIR
|
||||
command: cwd=/home/mes006/linuxcncWebWASM/linuxcnc linuxcnc <case_dir>/<entrypoint>.ini
|
||||
display: real_DISPLAY_required
|
||||
success: visible_AXIS_window_WM_CLASS_axis_Axis_and_geometry_at_least_600x400
|
||||
forbidden_success_proxies: timeout_or_task_marker_without_visible_AXIS_panel
|
||||
evidence:
|
||||
prior_implementation_reports: coverage/*.report.json
|
||||
title: selected 3axis-tutorial closure verified; external release blockers retained
|
||||
direct_inputs:
|
||||
- coverage/runtime-extensions-s8-09.report.json
|
||||
- coverage/sim-case-matrix-s8-06.report.json
|
||||
- docs/linuxcnc-web-wasm-case-parity-plan.md
|
||||
reason: TUTORIAL-11..14 selected-case implementation is verified using source-defined individual home and hal_manualtoolchange.change_button ACK; Firefox/Safari/OPFS/realtime hardware/full release blockers remain external and do not justify creating another local task
|
||||
status: verified
|
||||
title: 3axis-tutorial Web/WASM complete parity acceptance
|
||||
completion_report: coverage/axis3-tutorial-web-wasm-complete-parity.report.json
|
||||
completion_report_sha256: c4229856a5d16918e15095ef79d92251b97acf8d5a2266050a7c850821c01da2
|
||||
release_status: authorized_selected_case
|
||||
|
||||
panel_01_completion_evidence: >-
|
||||
coverage/panel-01-source-control-inventory.report.json sha256=a508c4bc092a71fe012b404afb1634717f29af5dbf54573674a3b4eeb0638ba7;
|
||||
blocked SOURCE_CONTROL_MAPPING_BLOCKED; inventory=verified controls=187 menus=80 toolbar=20 shortcuts=82 panels=5
|
||||
react_features=29 gaps=153; manual_tool=verified;
|
||||
screenshots=7acd6aa950c1e35d3ab3a8cde1ed79e0e94d0c6443625da5d440c90075ac5f3b,f3fc1b076d74374b1548a36b50f485a207ff52dee99868f78cf2e9bc612ed1d0
|
||||
|
||||
control_panel_plan:
|
||||
document: docs/linuxcnc-web-wasm-3axis-tutorial-control-panel-implementation.md
|
||||
semantics_contract: coverage/linuxcnc-source-semantics-contract.json
|
||||
shared_rules: web/workspace/linuxcnc-source-semantics.mjs
|
||||
scope: selected_3axis_tutorial_only
|
||||
data_authority: linuxcnc_wasm_through_dedicated_worker
|
||||
react_role: command_input_and_projection_only
|
||||
hard_constraints:
|
||||
- wasm_is_sole_runtime_data_source
|
||||
- state_machine_matches_linuxcnc_source
|
||||
- button_gates_match_axis_source
|
||||
- toolpath_preview_matches_native_canonical_motion
|
||||
feature_matrix:
|
||||
status: verified
|
||||
p0: [load_program, toolpath_preview, estop_reset, power_on, reset, home, execute_gcode, realtime_path, realtime_coordinates, button_gates]
|
||||
p1: [mdi, jog]
|
||||
total_items: 12
|
||||
tasks: PANEL-01..PANEL-15
|
||||
release_boundary: authorized_selected_case
|
||||
```
|
||||
|
||||
认领后状态改为 `in_progress`,完成后只能在专属测试、完整技术回归和报告 self-hash 都通过时改为 `verified`;发现输入或契约缺口则改为 `blocked` 并保留失败样本。
|
||||
认领后把当前 `Task.status` 和 `Next.status` 改为 `in_progress`;只有专项测试、完整回归和报告 self-hash 全部通过才改为 `verified`。发现缺口则改为 `blocked` 并保留 failure sample,不自动重试同一阻塞。
|
||||
|
||||
## Verify
|
||||
|
||||
开始修改前:
|
||||
开始任务前:
|
||||
|
||||
```bash
|
||||
python3 scripts/validate_baseline.py
|
||||
python3 scripts/validate_task_pointer.py
|
||||
python3 scripts/validate_task_pointer.py nextTask1.md --lock context-lock.json
|
||||
```
|
||||
|
||||
技术轨道收口验证:
|
||||
T7 专项与构建门禁:
|
||||
|
||||
```bash
|
||||
scripts/build-wasm.sh
|
||||
ctest --test-dir build-native --output-on-failure
|
||||
for f in web/worker/test_*.mjs; do node "$f" || exit 1; done
|
||||
for f in web/app/test_*.mjs; do node "$f" || exit 1; done
|
||||
python3 scripts/generate_wasm_simulation_release_gate_t7.py
|
||||
python3 scripts/test_wasm_simulation_release_gate_t7.py
|
||||
python3 scripts/test_wasm_function_closure_t6.py
|
||||
python3 scripts/test_wasm_feature_matrix_t5.py
|
||||
node web/worker/test_wasm_preview.mjs
|
||||
node web/worker/test_wasm_motion_event.mjs
|
||||
node web/worker/test_wasm_motion_authority.mjs
|
||||
node web/worker/test_wasm_motion_checkpoint.mjs
|
||||
node web/worker/test_wasm_canonical_state.mjs
|
||||
node web/worker/test_wasm_canonical_state_checkpoint.mjs
|
||||
node web/worker/test_axis3_selected_case.mjs
|
||||
node web/worker/test_axis3_visible_completion.mjs
|
||||
node web/worker/test_axis3_tutorial_program.mjs
|
||||
npm --prefix web/react run typecheck
|
||||
npm --prefix web/react run build
|
||||
```
|
||||
|
||||
完成任务后还必须运行:
|
||||
|
||||
```bash
|
||||
for f in web/worker/test_*.mjs; do node "$f" || exit 1; done
|
||||
for f in web/app/test_*.mjs; do node "$f" || exit 1; done
|
||||
python3 scripts/validate_baseline.py
|
||||
python3 scripts/validate_task_pointer.py
|
||||
```
|
||||
收口时运行全部 `web/worker/test_*.mjs`、全部 `web/app/test_*.mjs`,再运行两项 baseline validator;生成器失败、测试失败或 hash 不稳定都保持 `blocked`。回归必须使用真实 WASM module、Dedicated Worker/session 代码和固定 logical tick,不得用 mock、墙钟或 JS G-code preview 作为通过依据。
|
||||
|
||||
## Stop
|
||||
|
||||
遇到以下任一情况立即保持 `blocked`:
|
||||
|
||||
- 需要修改锁定 ABI、protocol、schema 或 manifest。
|
||||
- native/WASM/Worker 的首个 divergent tick 未定位。
|
||||
- 只能依赖墙钟、随机数、mock Worker、宿主路径或真实设备才能通过。
|
||||
- checkpoint/event/hash 不可验证,或恢复会重复已提交副作用。
|
||||
- 直接输入缺失、生成器不确定性、索引/资源无法定位,或测试只能通过降低检查。
|
||||
|
||||
S8-10 原有 235-case acceptance 仍保持 `blocked/STOP_RELEASE`,不宣称 LinuxCNC 全功能 release。用户已授权继续全 GUI 技术移植;FE-M4-GUI-01..05 已完成 source/domain/AXIS/family/Three.js 映射,FE-M4-GUI-06 Chromium desktop/mobile visual smoke 已 verified,但三浏览器 minimum matrix、Safari/Firefox、OPFS recovery 仍 blocked;许可证审批不阻塞实现,最终交付阶段再汇总 license/NOTICE。
|
||||
- 需要修改锁定 ABI、protocol、schema、context lock 或 manifest 才能继续。
|
||||
- 任一 selected-case task/motion/home/limit 字段仍由 JS 镜像产生,或首个 divergent tick 未定位。
|
||||
- canonical task/home-limit state、queue state、checkpoint/event/hash 不一致,恢复重复 segment/副作用,或 ESTOP/limit/home 状态不可解释。
|
||||
- 对缺失 WASM ABI 的 core 回退为 JS authority,或把 HAL/IO/tool/probe 的 partial slice 宣称为 T4 完成。
|
||||
- 不得把 selected-case verified 写成全量 LinuxCNC parity;T5、Firefox/Safari、OPFS 物理崩溃、官方 oracle、实时硬件、许可证和 owner release blockers 继续保持 blocked/`STOP_RELEASE`。
|
||||
|
||||
Reference in New Issue
Block a user