Validate AXIS task state flow
This commit is contained in:
@@ -45,7 +45,7 @@ families, and drift report.
|
||||
| Native task / motion / HAL sync phase 0 references | `tools/task-hal-source-manifest.txt` lists `src/emc/task/*`, selected `src/emc/motion/*`, `src/hal/*`, `src/emc/nml_intf/emc.hh`, and `src/libnml/posemath/*` | Reference proof for task/motion/HAL Web simulation runtime | `tools/verify_task_hal_source_manifest.sh` compares the local LinuxCNC reference tree and vendored tree where present, emits task/HAL/motion/NML/libnml counts. `tests/native/probe_trt_task_hal_runtime.sh` is opt-in for exclusive host LinuxCNC runtime probing and does not promote by default; Web simulation validation is handled by task/HAL WASM and browser gates while readiness remains false. | `tests/native/verify_task_hal_phase0.sh` |
|
||||
| HAL runtime phase 2 minimal boundary | `src/hal/hal_lib.c`, `src/hal/hal_priv.h`, `src/hal/components/threads.c`, `src/hal/utils/halcmd_commands.cc` as source references; `runtime/core/shims/hal.h` type boundary | Runtime-edge adapter, not full native HAL promotion | `runtime/core/linuxcnc_wrap/linuxcnc_hal_runtime.cpp` owns C/C++ HAL pin, signal, param, net, and thread scheduler state behind LinuxCNC-style `hal_*` APIs and `lchal_*` C ABI; `loadusr` is blocked evidence; task runtime and native HAL comparison remain future work | `tests/wasm/node/verify_hal_runtime.sh` WASM Node smoke; native fallback only when `emcc` is unavailable |
|
||||
| Motion/HAL sync phase 3 minimal boundary | `src/emc/motion/motion.h`, `src/emc/motion/command.c`, `src/emc/motion/control.c`, `src/emc/motion/mot_priv.h`, `src/emc/task/taskintf.cc` as source references | Runtime-edge adapter, not full native motion promotion | `runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` exposes the planned `lcmot_*` C ABI, accepts LinuxCNC-style motion command JSON, advances deterministic servo cycles, and synchronizes `motion.*`, `axis.*`, and `joint.*` HAL pins through the phase 2 HAL runtime; full LinuxCNC `emcmotController()` and task/NML queue integration remain future work | `tests/wasm/node/verify_motion_hal_sync.sh` WASM Node smoke |
|
||||
| Task/motion/HAL simulation runtime | `src/emc/task/task.hh`, `src/emc/task/emctask.cc`, `src/emc/task/emctaskmain.cc`, `src/emc/task/taskintf.cc`, `src/emc/task/emccanon.cc`, `src/emc/nml_intf/emc.hh`, and upstream `src/emc/nml_intf/emc_nml.hh` as an evaluated but not vendored status-container reference | Runtime-edge adapter, not full native task/HAL promotion | `runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` exposes the planned `lctask_*` C ABI, stages files, opens a program, tracks task state/mode/interp/exec status, and routes RUN/PAUSE/RESUME/ABORT/MDI/JOG/HOME through the phase 3 motion command queue. The current WASM simulation path uses narrow `emctask.cc`, `taskintf.cc`, and `emccanon.cc` source-anchored subsets for status update, task-to-motion command envelopes, and canonical straight motion envelopes. T-007 adds `StandaloneEmcStatus` as the current `EMC_STAT`-equivalent container for top/task/motion/io required fields; `statusSource=StandaloneEmcStatus`, `emcStatus`, `task`, `motionStatus`, and `rcsStatus` are written from that centralized status snapshot. T-051 through T-055 close the status JSON contract batches: `emcStatus.motion.traj`, task current/read/motion line fields, `emcStatus.motion.axis[]`/`joint[]`, IO aux/tool/coolant shim boundaries, and the dedicated schema gate. T-033 adds a narrow `taskintf.cc` motion bridge for `emcMotionInit()`/`emcMotionUpdate()`/`emcMotionAbort()` over `lcmot_*`, including `lcmot_read_config_snapshot()` and `lcmot_read_error_message()` for config/error reads. T-034 extends the `taskintf.cc` traj control subset so `emcTrajEnable()`/`emcTrajDisable()`/`emcTrajAbort()`/`emcTrajPause()`/`emcTrajStep()`/`emcTrajResume()`/`emcTrajSetMotionId()` map to `lcmot` command/state. T-035 maps `emcTrajLinearMove()` to structured `lcmot_write_linear_move()` instead of task-owned linear move JSON on the taskintf path. T-036 maps `emcJogIncr()`、`emcJointHome()`、`emcJointUnhome()` and `emcMotionSetAout()` to structured `lcmot_write_jog_incr()`、`lcmot_write_joint_home()`、`lcmot_write_joint_unhome()` and `lcmot_write_aout()`. T-037 maps `emcTaskAbort()`、`emcTaskSetMode()` and `emcTaskSetState()` into the `emctask.cc` subset so abort/state/mode decisions come from a source-anchored command result while task-cycle command buffering remains intact. T-038 feeds `determineMode()`、`determineState()` and `emcTaskUpdate()` from `LcmotStatusSnapshot` plus the IO estop/error latch instead of deriving update inputs from task-owned state strings. T-039 maps `emcTaskPlanSetWait()`、`emcTaskPlanIsWait()`、`emcTaskPlanClearWait()`、`emcTaskPlanSynch()`、`emcTaskPlanOpen()`、`emcTaskPlanClose()` and `emcTaskPlanReset()` into the `emctask.cc` subset so plan wait/open/synch/reset state is driven by source-anchored plan results over the staged FS boundary. T-040 maps `emcTaskPlanRead()`、`emcTaskPlanExecute()`、`emcTaskPlanLine()`、`emcTaskPlanLevel()` and `emcTaskPlanCommand()` into the `emctask.cc` subset so staged program lines can drive the interp_list/taskintf path without requiring host-provided JSON motion plans. It now has task-cycle motion snapshots, WAITING_FOR_MOTION/queue semantics, motion ERROR and soft-limit injection coverage, and top/task/motion/io DONE/EXEC/ERROR aggregation matching the `emctaskmain.cc` top-level status order. T-029 deliberately keeps full `emc_nml.hh` out of the vendor tree and records a phased `StandaloneEmcStatus`/typedef path while NML transport remains unpromoted. Full `emctaskmain.cc`/NML/native HAL/native motion process topology is not promoted. `task_hal_runtime_promoted=0`, `nativeTaskReady=false`, `nativeHalSyncReady=false`, and `fullLinuxCncProgramExecutionReady=false` are the current readiness contract. Hardware drive, host realtime kernel, external user-M process, full tool DB process, and full LinuxCNC program execution remain future work. | `tools/verify_task_full_closure.sh`; `tools/verify_task_status_json_contract.sh`; `tools/verify_task_standalone_emc_status.sh`; `tools/verify_task_working_closure.sh`; `tools/verify_task_hal_readiness_contract.sh`; `tools/verify_task_emc_nml_reuse_plan.sh`; `tools/verify_task_source_reuse_drift_docs.sh`; `tools/verify_task_emctask_state_mode.sh`; `tools/verify_task_emctask_update_snapshot.sh`; `tools/verify_task_emctask_plan_open_wait.sh`; `tools/verify_task_emctask_plan_read_execute.sh`; `tools/verify_task_taskintf_motion_bridge.sh`; `tools/verify_task_taskintf_traj_control.sh`; `tools/verify_task_taskintf_linear_move.sh`; `tools/verify_task_taskintf_jog_home_switchkins.sh`; `tests/wasm/node/verify_task_status_json_contract.mjs`; `tests/wasm/node/verify_task_hal_wasm.sh`; `tests/wasm/node/verify_task_hal_sdk.sh`; `web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`; browser smoke |
|
||||
| Task/motion/HAL simulation runtime | `src/emc/task/task.hh`, `src/emc/task/emctask.cc`, `src/emc/task/emctaskmain.cc`, `src/emc/task/taskintf.cc`, `src/emc/task/emccanon.cc`, `src/emc/nml_intf/emc.hh`, and upstream `src/emc/nml_intf/emc_nml.hh` as an evaluated but not vendored status-container reference | Runtime-edge adapter, not full native task/HAL promotion | `runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` exposes the planned `lctask_*` C ABI, stages files, opens a program, tracks task state/mode/interp/exec status, and routes RUN/PAUSE/RESUME/ABORT/MDI/JOG/HOME through the phase 3 motion command queue. The current WASM simulation path uses narrow `emctask.cc`, `taskintf.cc`, and `emccanon.cc` source-anchored subsets for status update, task-to-motion command envelopes, and canonical straight motion envelopes. T-007 adds `StandaloneEmcStatus` as the current `EMC_STAT`-equivalent container for top/task/motion/io required fields; `statusSource=StandaloneEmcStatus` and `emcStatus` are written from that centralized status snapshot. T-051 through T-055 close the status JSON contract batches: `emcStatus.motion.traj`, task current/read/motion line fields, `emcStatus.motion.axis[]`/`joint[]`, IO aux/tool/coolant shim boundaries, and the dedicated schema gate; T-056 removes legacy task status top-level fields and gates their absence. T-033 adds a narrow `taskintf.cc` motion bridge for `emcMotionInit()`/`emcMotionUpdate()`/`emcMotionAbort()` over `lcmot_*`, including `lcmot_read_config_snapshot()` and `lcmot_read_error_message()` for config/error reads. T-034 extends the `taskintf.cc` traj control subset so `emcTrajEnable()`/`emcTrajDisable()`/`emcTrajAbort()`/`emcTrajPause()`/`emcTrajStep()`/`emcTrajResume()`/`emcTrajSetMotionId()` map to `lcmot` command/state. T-035 maps `emcTrajLinearMove()` to structured `lcmot_write_linear_move()` instead of task-owned linear move JSON on the taskintf path. T-036 maps `emcJogIncr()`、`emcJointHome()`、`emcJointUnhome()` and `emcMotionSetAout()` to structured `lcmot_write_jog_incr()`、`lcmot_write_joint_home()`、`lcmot_write_joint_unhome()` and `lcmot_write_aout()`. T-037 maps `emcTaskAbort()`、`emcTaskSetMode()` and `emcTaskSetState()` into the `emctask.cc` subset so abort/state/mode decisions come from a source-anchored command result while task-cycle command buffering remains intact. T-038 feeds `determineMode()`、`determineState()` and `emcTaskUpdate()` from `LcmotStatusSnapshot` plus the IO estop/error latch instead of deriving update inputs from task-owned state strings. T-039 maps `emcTaskPlanSetWait()`、`emcTaskPlanIsWait()`、`emcTaskPlanClearWait()`、`emcTaskPlanSynch()`、`emcTaskPlanOpen()`、`emcTaskPlanClose()` and `emcTaskPlanReset()` into the `emctask.cc` subset so plan wait/open/synch/reset state is driven by source-anchored plan results over the staged FS boundary. T-040 maps `emcTaskPlanRead()`、`emcTaskPlanExecute()`、`emcTaskPlanLine()`、`emcTaskPlanLevel()` and `emcTaskPlanCommand()` into the `emctask.cc` subset so staged program lines can drive the interp_list/taskintf path without requiring host-provided JSON motion plans. It now has task-cycle motion snapshots, WAITING_FOR_MOTION/queue semantics, motion ERROR and soft-limit injection coverage, and top/task/motion/io DONE/EXEC/ERROR aggregation matching the `emctaskmain.cc` top-level status order. T-029 deliberately keeps full `emc_nml.hh` out of the vendor tree and records a phased `StandaloneEmcStatus`/typedef path while NML transport remains unpromoted. Full `emctaskmain.cc`/NML/native HAL/native motion process topology is not promoted. `task_hal_runtime_promoted=0`, `nativeTaskReady=false`, `nativeHalSyncReady=false`, and `fullLinuxCncProgramExecutionReady=false` are the current readiness contract. Hardware drive, host realtime kernel, external user-M process, full tool DB process, and full LinuxCNC program execution remain future work. | `tools/verify_task_full_closure.sh`; `tools/verify_task_status_json_contract.sh`; `tools/verify_task_standalone_emc_status.sh`; `tools/verify_task_working_closure.sh`; `tools/verify_task_hal_readiness_contract.sh`; `tools/verify_task_emc_nml_reuse_plan.sh`; `tools/verify_task_source_reuse_drift_docs.sh`; `tools/verify_task_emctask_state_mode.sh`; `tools/verify_task_emctask_update_snapshot.sh`; `tools/verify_task_emctask_plan_open_wait.sh`; `tools/verify_task_emctask_plan_read_execute.sh`; `tools/verify_task_taskintf_motion_bridge.sh`; `tools/verify_task_taskintf_traj_control.sh`; `tools/verify_task_taskintf_linear_move.sh`; `tools/verify_task_taskintf_jog_home_switchkins.sh`; `tests/wasm/node/verify_task_status_json_contract.mjs`; `tests/wasm/node/verify_task_hal_wasm.sh`; `tests/wasm/node/verify_task_hal_sdk.sh`; `web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`; browser smoke |
|
||||
| Task/motion/HAL simulation runtime T-041 canon state | `src/emc/task/emccanon.cc` init/finish/unit/getter references | Runtime-edge adapter, not full native canon promotion | T-041 maps `INIT_CANON()`、`ON_RESET()`、`FINISH()`、`USE_LENGTH_UNITS()`、`GET_EXTERNAL_LENGTH_UNITS()`、`GET_EXTERNAL_ANGLE_UNITS()` and `GET_EXTERNAL_POSITION*()` into the `emccanon.cc` subset so canonical units, reset/finish counters, and external endpoint state are tracked from motion/config snapshots and surfaced through task status JSON without promoting full interpreter/canon ownership. | `tools/verify_task_emccanon_init_finish_unit.sh`; `tests/wasm/node/verify_task_hal_wasm.sh` |
|
||||
| Task/motion/HAL simulation runtime T-042 canon straight motion | `src/emc/task/emccanon.cc` straight traverse/feed references | Runtime-edge adapter, not full native canon promotion | T-042 maps `generate_fast_move()`、`generate_move()`、`STRAIGHT_TRAVERSE()` and `STRAIGHT_FEED()` into the `emccanon.cc` subset so canonical straight traverse/feed calls produce `EMC_TRAJ_LINEAR_MOVE` evidence on the task `interp_list` path before crossing into the structured `taskintf.cc` / `lcmot_write_linear_move()` motion boundary. | `tools/verify_task_emccanon_straight_motion.sh`; `tests/wasm/node/verify_task_hal_wasm.sh` |
|
||||
| Task/motion/HAL simulation runtime T-043 canon dwell/path-control | `src/emc/task/emccanon.cc` dwell and term-condition references | Runtime-edge adapter, not full native canon promotion | T-043 maps `DWELL()` and `SET_MOTION_CONTROL_MODE()` into the `emccanon.cc` subset so canonical dwell emits `EMC_TRAJ_DELAY` evidence and path-control emits `EMC_TRAJ_SET_TERM_COND` evidence on the task `interp_list` path without promoting full native canon blending, queue, or NML ownership. | `tools/verify_task_emccanon_dwell_path_control.sh`; `tests/wasm/node/verify_task_hal_wasm.sh` |
|
||||
|
||||
Reference in New Issue
Block a user