Complete XYZAC LinuxCNC WASM parity and smooth 3D preview

This commit is contained in:
2026-08-28 06:24:50 +08:00
parent e8fe323aab
commit 1a7995fa9b
181 changed files with 36854 additions and 215 deletions

View File

@@ -0,0 +1,42 @@
{
"schema": "task-handoff.v1",
"task_id": "PARITY-00",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "Native C, WASM C and Worker protocol/control/state/canonical/recovery traces compare tick-by-tick with positive divergence detection",
"report": {"path": "coverage/xyzac-trt-trace-parity.report.json", "sha256": "39c63aa9af38fd98e49fd68ec2401ee8715fcafef98d47c070a47ab6f6dc0a48"},
"outputs": [
{"path": "scripts/compare_xyzac_native_wasm_trace.py", "sha256": "89834553f2a7afc47e351bbddd33f83259665b943cd7f22fe48acbba32aaf7c4"},
{"path": "web/worker/test_xyzac_trace_parity.mjs", "sha256": "f5c6a7cd3e8b7f72bb1b25b5c368c0e52d494b9c811022d34435e668612ec4ce"},
{"path": "coverage/xyzac-trt-trace-parity.report.json", "sha256": "ef914bb7823b9cdb0f6e15ca409515659d5575d09cdc6da2c458cd81fafa595a"},
{"path": "wasm-core/tests/sim_xyzac_trace_test.c", "sha256": "0a3d5f748d9f69f4212c3a1cdd65fe2986c253442c4de2de78de2e5a5635ff08"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"protocol_level": "passed",
"control_level": "passed",
"state_level": "passed",
"canonical_level": "passed",
"recovery_level": "passed",
"native_wasm_exact": "passed",
"native_worker_semantic": "passed",
"positive_divergence_tick": "passed",
"report_self_hash": "passed",
"native_ctest_21": "passed",
"react_typecheck_build": "passed"
},
"evidence": {
"levels": ["protocol", "control", "state", "canonical", "recovery"],
"first_divergent_tick": null,
"positive_sample_tick": 2,
"positive_sample_path": "$[1].active_type",
"native_wasm_trace_sha256": "18d2ef9d77f9a7a5bf2fa8d9380c8b04383a58ee2b0258364cba31ec34a168f0"
},
"failure_samples": [],
"next_task": "RTCP-09",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,40 @@
{
"schema": "task-handoff.v1",
"task_id": "RELEASE-00",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "Selected xyzac-trt.ini WASM-only release gate verified; release remains STOP_RELEASE by explicit scope governance",
"report": {"path": "coverage/xyzac-trt-wasm-only-release-gate.report.json", "sha256": "368bc17b4ade17b8567abe299b7d7395abc0f09d187028a0cb750aa170b5891c"},
"outputs": [
{"path": "scripts/generate_xyzac_trt_wasm_only_release_gate.py", "sha256": "06e4c564d0b4fc482150ffd19ae7ce93d553a6bf525144159875d824054eca70"},
{"path": "coverage/xyzac-trt-wasm-only-release-gate.report.json", "sha256": "f85319a0d1a5bc28a2ab06aed6c043ba1fff8a5d69d8901754b6d62ce6eb0c1c"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"wasm_authority": "passed",
"all_13_selected_case_reports": "passed",
"native_worker_trace": "passed",
"browser_matrix": "passed",
"recovery_endpoint": "passed",
"scope_exclusions_explicit": "passed",
"release_report_self_hash": "passed"
},
"evidence": {
"selected_case": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini",
"candidate_eligible": false,
"release_status": "STOP_RELEASE",
"blockers": [
"HOST_EXCLUDED: Safari not in project scope",
"REAL-EXCLUDED: physical power loss not simulated",
"HOST_EXCLUDED: xyzbc/3axis/other LinuxCNC cases out of scope"
],
"first_divergent_tick": null
},
"failure_samples": [],
"next_task": null,
"next_task_status": "complete",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,42 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-01",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"result": "XYZAC Worker topology, logical scheduler, command ledger and cancellation/reconcile contract verified",
"outputs": [
{"path": "web/worker/xyzac-session.mjs", "sha256": "9cbbbd08ae372e515bafe906f87fe3a9552571f52997b4e5495b42a36097c6b3"},
{"path": "web/worker/xyzac-scheduler.mjs", "sha256": "0c7544298869c9c2858cce1275db8f3f2034655a5aa92aac5bd6dbf2b16e3221"},
{"path": "web/worker/xyzac-command-ledger.mjs", "sha256": "90d5fd10547f544338014a026a407cfb73f08c639bf0f1bef9c19a85fbcd16f5"},
{"path": "web/worker/test_xyzac_session.mjs", "sha256": "76cd74a09a0318a33d70529f7c5b9cad25fd0daebd6dd8bb05f87b42626858ef"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"xyzac_session": "passed",
"xyzac_case_worker": "passed",
"xyzac_program_authority": "passed",
"xyzac_io_authority": "passed",
"ledger_replay_commit": "passed",
"ledger_timeout_reconcile": "passed",
"cancel_no_blind_retry": "passed",
"scheduler_logical_tick": "passed",
"native_ctest": "20/20 passed",
"react_typecheck_build": "passed"
},
"evidence": {
"session_authority": "linuxcnc-wasm-worker",
"machine": {"coordinates": "XYZAC", "joint_count": 5, "kinematics": "xyzac-trt", "rotary_units": "degrees"},
"scheduler_tick": 3,
"scheduler_state_hash": "fnv1a64:d6b307bada354385",
"replayed": true,
"committed_operation": "step-1",
"pending_after_abort": 0,
"first_divergent_tick": null
},
"failure_samples": [],
"next_task": "RTCP-02",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,35 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-02",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "Exact xyzac-trt.ini resource closure and startup state machine verified; xyzbc/3axis/other cases excluded",
"report": {"path": "coverage/xyzac-trt-startup.report.json", "sha256": "12cdae5c4547d8f2647da1f4721e147807ba738474adeb60901b3d837e4cb39e"},
"outputs": [
{"path": "web/workspace/xyzac-trt-case-loader.mjs", "sha256": "8480a20a13301cfc8dd37fbe66cf9b4cbfbfd7bd18623e81499a583c72f9f44a"},
{"path": "coverage/xyzac-trt-startup.report.json", "sha256": "56e040b645bcefc3d6c57244cb2d3aba16f421ff5137089d9c3336970dfd968b"},
{"path": "web/worker/test_xyzac_startup.mjs", "sha256": "013023e5f0a01d93ed8ab568879937f462a97e2fe08742995f15775c867fb8aa"},
{"path": "scripts/generate_xyzac_trt_startup_report.py", "sha256": "0b7fca4feb6039423b92164cd57802b7aaaefa7e141dffd38cb024f9b031fb5e"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"xyzac_startup_test": "passed",
"startup_report_self_hash": "passed",
"exact_resource_count": 15,
"required_ini_sections": 7,
"hal_record_count": 165,
"missing_resource_fail_closed": "passed",
"xyzac_worker_case": "passed",
"native_ctest": "20/20 passed",
"react_typecheck": "passed"
},
"startup_state_sequence": ["TASK_NEW", "CONFIG_RESOLVED", "HAL_READY", "RUNTIME_READY", "TASK_READY"],
"machine": {"coordinates": "XYZAC", "joint_count": 5, "rotary_units": "degrees", "kinematics": "xyzac-trt"},
"failure_samples": [],
"next_task": "RTCP-03",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,41 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-03",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "XYZAC authoritative snapshot, axis_state projection and gate matrix verified",
"report": {"path": "coverage/xyzac-trt-gate-matrix.report.json", "sha256": "25deaea6a1fb442d86e660319fdd1d3061ca7da0af7d48858258aad4c71ec56c"},
"outputs": [
{"path": "web/worker/test_xyzac_gate_matrix.mjs", "sha256": "07e4f05f3b7bf470fb87ecea077587e7584928d28fe7e28932f8a649c960525d"},
{"path": "coverage/xyzac-trt-gate-matrix.report.json", "sha256": "7c8cb2dad644e54462b30dd0ec3e3e792ecee8da67c9c2de236bc38f1c0e6188"},
{"path": "web/app/axis-contract.mjs", "sha256": "51854238857e03c42abe91f1dec4da3f49734386a6cf3d99dae97d7f07ebafd5"},
{"path": "web/worker/sim-session.mjs", "sha256": "bdde47643f15780fe32cc10fe1b8542bd70c3170fd057b26d34b5c79ccd9dc29"},
{"path": "scripts/generate_xyzac_trt_gate_matrix_report.py", "sha256": "a5ec4edbe3f416f134812fe8e4b7222a426de0aa7b524fb9deafbcc3d999b6a9"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"xyzac_gate_matrix": "passed",
"gate_report_self_hash": "passed",
"xyzac_worker_case": "passed",
"panel_gate_regression": "passed",
"axis_contract_regression": "passed",
"react_typecheck": "passed"
},
"gate_scenarios": {
"no_file": "axis_taskfile_missing",
"highlight_missing": "axis_highlight_missing",
"switchkins_hal_missing": "xyzac_hal_pin_vars_missing",
"switchkins_estop": "xyzac_estop_active",
"running_pause_abort": "verified",
"paused_resume": "verified",
"vismach_clear_visual_only": "verified"
},
"state_hash": "fnv1a64:a95c3da31e470f59",
"failure_samples": [],
"next_task": "RTCP-04",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,20 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-04",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "WASM canonical XYZAC program load/preview/ledger flow verified",
"report": {"path": "coverage/xyzac-trt-program-preview.report.json", "sha256": "ad151b42a738667f0d62f1811409190adc06f5b59f3bde9019eec8b895abf736"},
"outputs": [
{"path": "web/worker/test_xyzac_program_preview.mjs", "sha256": "2ecec15067d0350741b1a02d14dd4aed3587ef1bc236065a51c28bc3391c2eef"},
{"path": "coverage/xyzac-trt-program-preview.report.json", "sha256": "3398060c346e51691717b43c164322c333cab951a5c83ac3dd5e87fe0e452429"},
{"path": "web/worker/wasm-program-runtime.mjs", "sha256": "3a91b2111f9803d58c8dc6dfc8fb0db4f7343cc7b87108bc53b642a13032c844"}
],
"checks": {"baseline": "passed", "download_index": "passed", "pointer": "passed", "xyzac_program_preview": "passed", "preview_report_self_hash": "passed", "source_path_hash": "passed", "canonical_segments": "passed", "invalid_gcode_fail_closed": "passed", "empty_program_fail_closed": "passed", "program_load_replay": "passed", "xyzac_worker_case": "passed", "react_typecheck": "passed"},
"evidence": {"source_hash": "fnv1a64:b7f4678312207b31", "line_count": 5, "segment_count": 2, "preview_hash": "fnv1a64:e226b45322b06337", "state_hash": "fnv1a64:d1505250bdc90614", "preview_authority": "linuxcnc-wasm-sim_program", "first_divergent_tick": null},
"failure_samples": [],
"next_task": "RTCP-05",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,20 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-05",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "WASM XYZAC Run/Pause/Resume/Step/Abort/Restart/Run-from-line workflow verified",
"report": {"path": "coverage/xyzac-trt-workflow.report.json", "sha256": "5abbef3106546d65d0951cce07777532903653abeed52221a9c8ecd142d5bc0d"},
"outputs": [
{"path": "web/worker/test_xyzac_workflow.mjs", "sha256": "6c738c6993d43b4ce16feecfe87d2b507824a88b06ead2f0659db6ca25c346b5"},
{"path": "scripts/generate_xyzac_trt_workflow_report.py", "sha256": "f1f4b34105b64d7caea34921ec8504d0c58006ee0fd9fa15561cecb1cba93abb"},
{"path": "coverage/xyzac-trt-workflow.report.json", "sha256": "0a9749ed647fb5ead26681719468470b7cf9e765ea4df5881d74404c019c0a5d"}
],
"checks": {"baseline": "passed", "download_index": "passed", "pointer": "passed", "xyzac_workflow": "passed", "workflow_report_self_hash": "passed", "run_pause_resume_step": "passed", "abort_queue_empty": "passed", "restart_source_hash": "passed", "run_from_line": "passed", "checkpoint_recovery": "passed", "xyzac_preview_regression": "passed", "xyzac_gate_regression": "passed", "react_typecheck": "passed"},
"evidence": {"tick_after_first": 1, "active_before_abort": 1, "pause_cursor": 1, "restart_source_hash": "fnv1a64:7e075e2e695feafd", "run_from_line": 4, "recovery": "recovered", "final_state_hash": "fnv1a64:de58dbdf1fa2606f", "first_divergent_tick": null},
"failure_samples": [],
"next_task": "RTCP-06",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,21 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-06",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "WASM XYZAC MDI, five-axis jog, home, limits and ESTOP recovery verified",
"report": {"path": "coverage/xyzac-trt-manual-control.report.json", "sha256": "ec2180de513726dc70c0940ed15e03a7d9e54714960ba7246aba19eaf95d849b"},
"outputs": [
{"path": "web/worker/test_xyzac_manual_control.mjs", "sha256": "75ed33fcbe9f40f0c244029b4dd57017c4f9944107c88c5500ade5c6e67fe893"},
{"path": "coverage/xyzac-trt-manual-control.report.json", "sha256": "012871cb9758621d0b38a0acf240e5d077b332a72bad42d9592fe39c86567a99"},
{"path": "wasm-core/src/sim_posemath.c", "sha256": "2e63d8cc2bf4275a89238b2622b41dcd8dfabfe6d24ef5918628083a4f4f5216"},
{"path": "wasm-core/src/sim_motion_queue.c", "sha256": "252de61937b685689c479be60e6ce398364790ef5034e54cd89db138b368937f"}
],
"checks": {"baseline": "passed", "download_index": "passed", "pointer": "passed", "xyzac_manual_control": "passed", "manual_report_self_hash": "passed", "home_five_joints": "passed", "jog_xyz": "passed", "jog_ac_degrees": "passed", "mdi": "passed", "nonfinite_speed": "passed", "range_boundary": "passed", "following_error": "passed", "mdi_running_gate": "passed", "estop_recovery": "passed", "xyzac_workflow_regression": "passed", "react_typecheck": "passed"},
"evidence": {"linear_axes": ["X", "Y", "Z"], "angular_axes": ["A", "C"], "angular_units": "degrees", "home_joint_count": 5, "jog_state_hash": "fnv1a64:458a605f469d43cc", "first_divergent_tick": null},
"failure_samples": [],
"next_task": "RTCP-07",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,60 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-07",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "WASM XYZAC HAL, PyVCP, tool, spindle, coolant, device acknowledgement and alarm authority verified",
"report": {
"path": "coverage/xyzac-trt-hal-tool-alarm.report.json",
"sha256": "3b59d77a19277228a3d37d00486c5344571392651adcf4b7d019217d0880fbe8"
},
"outputs": [
{
"path": "web/worker/test_xyzac_hal_tool_alarm.mjs",
"sha256": "731ff64fc5b9abd70c6ab6649a2644e51e363bda710a0d4ec9faeffa3bb77db3"
},
{
"path": "coverage/xyzac-trt-hal-tool-alarm.report.json",
"sha256": "d0e8fef743ea45ed230a29bb5deefa563f07d82df85e6f9c70be56f67e79031a"
},
{
"path": "web/worker/wasm-xyzac-io.mjs",
"sha256": "c5b77654b952e0656edc9d649f07af6e3244d649313761b9ff42aed329c98f0b"
},
{
"path": "web/worker/sim-session.mjs",
"sha256": "ec5846105eeecb5dcf5d9ec579ff00b185eaaba2039caeabe1e9a199a6749873"
}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"xyzac_hal_tool_alarm": "passed",
"hal_tool_alarm_report_self_hash": "passed",
"pyvcp_switches": "passed",
"vismach_clear_visual_only": "passed",
"hal_write_allowlist": "passed",
"tool_spindle_coolant": "passed",
"device_ack_timeout_abort": "passed",
"xyzac_io_regression": "passed",
"xyzac_manual_control_regression": "passed",
"native_ctest": "passed",
"react_typecheck_build": "passed"
},
"evidence": {
"pyvcp_m_codes": ["M429", "M428", "M430"],
"hal_allowed": "motion.probe-input",
"hal_denied_code": "wasm_hal_write_denied",
"tool": 7,
"spindle_rpm": 1200,
"ack_timeout_code": "wasm_sim_device_ack_ack_-1008",
"state_hash": "fnv1a64:78582773ec5a3bbe",
"first_divergent_tick": null
},
"failure_samples": [],
"next_task": "RTCP-08",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,60 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-08",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "WASM XYZAC identity/TRT/userk kinematics, offsets, limits, multi-turn G93 arc, switchkins and lifecycle recovery verified",
"report": {
"path": "coverage/xyzac-trt-rtcp.report.json",
"sha256": "c370004d8f2d962937b3b91abe2b0dd1632283f570e29d2d194731bc0fe0a083"
},
"outputs": [
{"path": "web/worker/test_xyzac_rtcp.mjs", "sha256": "9bc14997e56a8d0f6f0043b3a92fa5efe0fc8b3fa9c973bffa9045446973208f"},
{"path": "coverage/xyzac-trt-rtcp.report.json", "sha256": "b1562d6d2c9cd5144c7c8c9b334bd8bf67919ea7297f103ec67cb32773608d08"},
{"path": "web/worker/wasm-xyzac-kinematics.mjs", "sha256": "f14581a52830df5f55d612a1ec88d82737bb429ff63b5267ea3903984be6050e"},
{"path": "web/worker/sim-session.mjs", "sha256": "f3b3f78146a08ad0f770bceae9cb46e66dd997c1270e3be7e27c544c2f5d3b6b"},
{"path": "wasm-core/src/sim_interpreter.c", "sha256": "714396428b6826d9ac8c05d654dcc33acf24eef4b6393f610c8997997e540e5a"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"xyzac_rtcp_k0_k6": "passed",
"rtcp_report_self_hash": "passed",
"identity_forward_inverse": "passed",
"xyzac_forward_inverse_offsets": "passed",
"userk_static_capability": "passed",
"dynamic_userk_rejection": "passed",
"switchkins_pose_preservation": "passed",
"g93_multiturn_arc": "passed",
"pause_abort_restart_recovery": "passed",
"native_ctest_20": "passed",
"wasm_switchkins_kinematics_userkins": "passed",
"xyzac_worker_regressions": "passed",
"motion_checkpoint_regression": "passed",
"react_typecheck_build": "passed"
},
"evidence": {
"coordinates": "XYZAC",
"linear_units": "mm",
"angular_units": "deg",
"range_error": "wasm_xyzac_forward_-702",
"nonfinite_error": "wasm_xyzac_forward_-701",
"dynamic_userk_error": -712,
"helix_turn": -3,
"recovered_active_type": 1,
"recovered_state_hash": "fnv1a64:8c57efd84475776a",
"first_divergent_tick": null
},
"failure_samples": [
{
"classification": "HOST_EXCLUDED",
"code": "wasm_ctest_node18_local_url",
"detail": "CTest sim_api_test uses Node 18 fetch on a bare local .wasm path; real Node 24 Worker module and single-file WASM tests passed"
}
],
"next_task": "PARITY-00",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,42 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-09",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "XYZAC additive Worker commands, typed snapshot projection, React controls, gate/operation/alarm/recovery visibility and browser layout verified",
"report": {"path": "coverage/xyzac-trt-protocol-react.report.json", "sha256": "ad83b98df362f1f7e25effbdbf43da2b2ea4e2b0f1f185568f33495c88aba854"},
"outputs": [
{"path": "web/react/src/XyzacTrtPanel.tsx", "sha256": "f17e25f74d87a39a1bd7520f65cf1b285cb4c38d8e4fcaec13320e41c4ca6511"},
{"path": "web/react/src/xyzac-panel-contract.ts", "sha256": "650ac562d6153c992762a138752e5821e0d4fc16706622511cb94e4a733e6733"},
{"path": "coverage/xyzac-trt-protocol-react.report.json", "sha256": "94bb31615c0cbe5a227fbfd6af42ed1b6ace82880d2453bd3cde89340647fc6d"},
{"path": "web/worker/test_xyzac_protocol_react.mjs", "sha256": "69d942dfdcb7bc0d7fb26d6708220a47af13aa84acdcf490780980f6de0cc03d"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"additive_power": "passed",
"kinematics_select": "passed",
"visual_clear_visual_only": "passed",
"gate_rejection_reason": "passed",
"operation_pending_ack_result": "passed",
"react_worker_only_static_audit": "passed",
"react_typecheck_build": "passed",
"browser_desktop": "passed",
"browser_mobile": "passed",
"canvas_nonblank": "passed",
"horizontal_overflow": "passed"
},
"evidence": {
"commands": ["POWER", "KINEMATICS_SELECT", "VISUAL_CLEAR"],
"components": ["XyzacTrtPanel", "XyzacProgramPane", "XyzacKinematicsControl", "XyzacManualPanel", "XyzacDiagnostics"],
"browser": {"desktop": [1440, 1000], "mobile": [390, 844], "desktop_status": "READY", "mobile_status": "READY", "desktop_scroll_width": 1425, "mobile_scroll_width": 390},
"state_hash": "fnv1a64:4034107d88cc3171",
"first_divergent_tick": null
},
"failure_samples": [],
"next_task": "RTCP-10",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,43 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-10",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "Three.js XYZAC TRT Vismach hierarchy, signed table/saddle/spindle translations, A/C rotations, tool offset and authoritative visual trace verified",
"report": {"path": "coverage/xyzac-trt-threejs.report.json", "sha256": "592f729730cb122238edefd90417399cd2f21a2084603001d1b46aadad7b261f"},
"outputs": [
{"path": "web/react/src/XyzacMachineView.tsx", "sha256": "2645e2dadeda98357e73974ae7a48b5fb825a2362ddca33689604bb11ee78a71"},
{"path": "web/react/src/XyzacToolPreview.tsx", "sha256": "32f6879594c3ed9bb6a9f2bb17650ea2cfb89a972c93ce31091bcccc73cdb6ef"},
{"path": "web/react/src/xyzac-visual-adapter.ts", "sha256": "1e9aca3e5f206876310268b86c5cabd0c37cd23a28cfbf599e29612effdf20dd"},
{"path": "web/react/src/test_xyzac_threejs.mjs", "sha256": "a858df19658826e92e5d6f6df566a16741741648631f4e02f36b2825b97f6e7d"},
{"path": "web/react/src/test_xyzac_tool_preview.mjs", "sha256": "be345e8df99a1bb4912c2a1fb334ed1823e03dd2ba67ca6cf60bee927d269b0a"},
{"path": "coverage/xyzac-trt-threejs.report.json", "sha256": "0bdd0e072c7d1c87f1a3183ca522cc61baf0bdc3d26a94199d1f3e005a960dbb"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"machine_hierarchy": "passed",
"tool_preview_separated": "passed",
"ac_direction_offset": "passed",
"authoritative_tick_hash": "passed",
"canvas_nonblank_desktop": "passed",
"canvas_nonblank_mobile": "passed",
"visual_clear_nonmutating": "passed",
"horizontal_overflow_desktop_mobile": "passed",
"react_typecheck_build": "passed",
"xyzac_worker_regressions": "passed",
"native_ctest_21": "passed"
},
"evidence": {
"machine_groups": ["xyzac-machine", "table-x", "saddle-y", "spindle-z", "tilt-a", "rotate-c", "tool-offset", "xyzac-toolpath", "xyzac-live-toolpath"],
"direction": {"table_x": -1, "saddle_y": -1, "spindle_z": -1, "tilt_a": "x+", "rotate_c": "z+", "tool_offset": "z-"},
"browser_pixel_oracle": {"desktop_nonzero_pixels": 777266, "mobile_nonzero_pixels": 118864},
"first_divergent_tick": null
},
"failure_samples": [],
"next_task": "RTCP-11",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,45 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-11",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "XYZAC WASM checkpoint/journal/restart/replay/reconcile recovery verified with no duplicate M428 and fail-closed corruption paths",
"report": {"path": "coverage/xyzac-trt-recovery.report.json", "sha256": "9dc18abe81d4d7f84ef2543d664895f43ffd52ab5b4925672402724902b2369f"},
"outputs": [
{"path": "web/worker/test_xyzac_recovery.mjs", "sha256": "d8f02b0ab5b7c9fc5ef30a3a67f7896071ecf9bbaa7d2f3614c031d118e655e7"},
{"path": "coverage/xyzac-trt-recovery.report.json", "sha256": "a863e06fce29904913b38526fe0f780f3f8912f0e741763c1e7221283a335808"},
{"path": "scripts/generate_xyzac_trt_recovery_report.py", "sha256": "5e75fe82fd069d891e7a34a07da7aa9b4e7b3152b6b61ce791a77a97e2dc957c"},
{"path": "web/worker/sim-session.mjs", "sha256": "0ab5e206629e005eabb834db8bb90106e28f2cfcc23ddec4acbb96f38c3d5423"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"checkpoint_minimum_fields": "passed",
"endpoint_pose_joints_program_hash": "passed",
"no_duplicate_m428": "passed",
"ledger_reconcile": "passed",
"corrupt_checkpoint_fail_closed": "passed",
"schema_mismatch_fail_closed": "passed",
"journal_commit_recovery": "passed",
"journal_corruption_fail_closed": "passed",
"opfs_unavailable_fail_closed": "passed",
"native_ctest_21": "passed",
"react_typecheck_build": "passed"
},
"evidence": {
"required_checkpoint_fields": ["context_id", "simulation_tick", "event_cursor", "state_hash", "task", "program", "kinematics", "motion", "wasm_motion", "ledger"],
"endpoint_at_checkpoint_equal": true,
"no_duplicate_m428": true,
"replayed_operation": true,
"corrupt_checkpoint": "blocked",
"schema_mismatch": "blocked",
"opfs_physical_crash": "REAL-EXCLUDED",
"first_divergent_tick": null
},
"failure_samples": [],
"next_task": "RTCP-12",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,38 @@
{
"schema": "task-handoff.v1",
"task_id": "RTCP-12",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"scope": "xyzac_only",
"result": "Selected xyzac-trt.ini native/Worker/WASM/React/Three.js parity aggregate verified with explicit release exclusions",
"report": {"path": "coverage/xyzac-trt-web-wasm-parity.report.json", "sha256": "676f94870045670d2808c2193bded706fdd4909f06d70be00f46dd2653d92927"},
"outputs": [
{"path": "scripts/generate_xyzac_trt_web_wasm_parity_report.py", "sha256": "fd658a157981d8ca8bd95eecea3cf803443c0f10c7d7ca1dde75c184a69abd4d"},
{"path": "coverage/xyzac-trt-web-wasm-parity.report.json", "sha256": "032912a30e5bdd970f6ff10cadb9a30642b7bdb45252ea40cd7f1b953a1050c7"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"all_13_selected_case_reports": "passed",
"native_wasm_trace": "passed",
"native_worker_trace": "passed",
"first_divergent_tick_normal": "null",
"first_divergent_tick_positive_sample": "2",
"browser_desktop_mobile": "passed",
"recovery_endpoint_equal": "passed",
"blocker_identity_explicit": "passed",
"report_self_hash": "passed"
},
"evidence": {
"report_count": 13,
"candidate_eligible": false,
"release_status": "STOP_RELEASE",
"excluded": ["Safari", "physical power loss", "host hardware", "xyzbc", "3axis", "other cases"],
"first_divergent_tick": null
},
"failure_samples": [],
"next_task": "RELEASE-00",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,33 @@
{
"schema": "task-handoff.v1",
"task_id": "SRC-00-REMEDIATION",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"result": "resolved native source startup, exact intro resource, and XYZAC native/WASM/Worker evidence",
"reports": [
{"path": "coverage/xyzac-trt-native-wasm-parity.report.json", "sha256": "ec9c3d9062ab68ab542e5193852e7f8296a40c9c1813d9a303b0971cf4b89598"},
{"path": "coverage/xyzac-trt-source-slice-inventory.report.json", "sha256": "69385c93662a6627dc6d83eaca851411ddf76156ae9aa85f56d4e029455e68ef"}
],
"resolved": [
"run-5axis-rtcp.sh now uses the repository run-in-place launcher",
"sim_lib.tcl recognizes xyzac-trt-kins and xyzbc-trt-kins",
"INTRO_GRAPHIC uses the existing linuxcnc.gif exact manifest asset",
"Worker loads xyzac-trt-headless_cmds.hal fixture and TASK_READY",
"WASM C API supplies XYZAC five-joint kinematics and M428/M429/M430 transitions"
],
"checks": {
"native_xyzac_xyzbc_startup": "passed",
"native_wasm_kinematics_trace": "passed",
"native_wasm_switchkins_trace": "passed",
"xyzac_worker_case": "passed",
"source_slice_self_hash": "passed",
"native_ctest": "20/20",
"wasm_kinematics_tests": "passed",
"react_typecheck": "passed"
},
"evidence": {"control_count": 110, "menus": 80, "toolbar": 20, "keyboard": 10, "slices": 11, "direct_sources": 35, "unregistered_slices": 0, "js_authority": 0, "first_divergent_tick": null},
"packet": {"path": "coverage/task-packets/SRC-00-REMEDIATION.json", "sha256": "855839e8a1e5ca5168330ab25a3dc6eebc87ce3f9b6e69475c53e2b74a2b4e33"},
"next_task": "WASM-00",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,42 @@
{
"schema": "task-handoff.v1",
"task_id": "SRC-00",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"result": "source inventory, native/WASM parity, and exact XYZAC Worker authority evidence verified",
"reports": [
{"path": "coverage/xyzac-trt-source-slice-inventory.report.json", "sha256": "601fb94f39681e382262b0ed6d6890f9db67e27a8ff4383b977fb073b46562e4"},
{"path": "coverage/xyzac-trt-native-wasm-parity.report.json", "sha256": "f67633527c623e826c14d89687139d109d046fdeaf445fc754506a66c8262d8e"}
],
"checks": {
"baseline": "passed",
"download_index": "passed",
"pointer": "passed",
"source_slice_unittest": "passed",
"source_slice_self_hash": "passed",
"native_xyzac_xyzbc_startup": "passed",
"native_wasm_kinematics_trace": "passed",
"native_wasm_switchkins_trace": "passed",
"xyzac_worker_case": "passed",
"mjs_syntax": "passed",
"react_typecheck": "passed"
},
"evidence": {
"control_count": 110,
"menus": 80,
"toolbar": 20,
"keyboard": 10,
"slices": 11,
"direct_sources": 35,
"unregistered_slices": 0,
"blocked_resources": 0,
"js_authority": 0,
"first_divergent_tick": null,
"worker_state_hash": "fnv1a64:72275811a4320d7c"
},
"failure_samples": [],
"packet": {"path": "coverage/task-packets/SRC-00.json", "sha256": "a13fa893653494bf12cee5e15c38cc6c74edc6ffcd02a10cb788c4a87e3cf37b"},
"next_task": "WASM-00",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,45 @@
{
"schema": "task-handoff.v1",
"task_id": "WASM-00-REMEDIATION",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "verified",
"result": "selected XYZAC authority verified for the simulation scope; physical power-loss and Safari are accepted scope exclusions",
"report": {"path": "coverage/xyzac-trt-wasm-authority-audit.report.json", "sha256": "279a9c2b0496e415cb3da25fc387ee245e826e942b67471a25796a3c23122205"},
"implemented": [
"sim_program C/WASM runtime owns selected XYZAC program load/control/interpreter/motion events",
"selected XYZAC jog/home/limit validation routes through WASM motion queue and home-limit",
"selected XYZAC snapshots omit JS compatibility planner state",
"sim_io C/WASM owns spindle/tool/probe/ESTOP/recovery and HAL scalar writes",
"sim_device_io C/WASM owns encoder/coolant/door/interlock/ack state",
"Chromium SIGKILL/profile reopen and corruption detection verified",
"Firefox Worker OPFS round-trip verified"
],
"tests": {
"native_ctest": "20/20 passed",
"react_typecheck_build": "passed",
"xyzac_worker": "passed",
"xyzac_program_authority": "passed",
"xyzac_io_authority": "passed",
"native_xyzac_xyzbc_startup": "passed",
"native_wasm_parity": "passed",
"chromium_opfs_crash": "passed",
"chromium_opfs_corruption": "passed",
"firefox_opfs_round_trip": "passed",
"authority_audit": "passed"
},
"authority_matrix": {
"program_interpreter": "verified",
"motion_jog_home_limit": "verified",
"task_state": "verified",
"hal_io_tool_probe": "verified",
"kinematics_rtcp_switchkins": "verified"
},
"accepted_scope_exclusions": [
{"code": "PHYSICAL_POWER_LOSS_OUTSIDE_BROWSER", "status": "accepted_scope_exclusion"},
{"code": "SAFARI_NOT_REQUIRED", "status": "accepted_scope_exclusion"}
],
"failure_samples": [],
"next_task": "RTCP-01",
"next_task_status": "queued",
"release_status": "STOP_RELEASE"
}

View File

@@ -0,0 +1,38 @@
{
"schema": "task-handoff.v1",
"task_id": "WASM-00",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"status": "blocked",
"result": "XYZAC WASM authority audit completed; selected Worker trace is verified but JS authority and external recovery/browser boundaries remain open",
"report": {"path": "coverage/xyzac-trt-wasm-authority-audit.report.json", "sha256": "36fdd77229015634dcde9f796e32eb0435ae2729dc4267aca28d081179a44d7f"},
"packet": {"path": "coverage/task-packets/WASM-00.json", "sha256": "4bdb5ca36b7a57d977248693ebea2b76a6bc9cc7d3a8998d59983630a342e73e"},
"checks": {
"authority_audit_unittest": "passed",
"report_self_hash": "passed",
"xyzac_worker_trace": "passed",
"worker_motion_authority": "wasm",
"first_divergent_tick": null,
"react_direct_wasm_pointer": "passed",
"react_direct_opfs_writer": "passed"
},
"evidence": {
"control_count": 110,
"switchkins": ["M429", "M428", "M430"],
"tick_sequence": [0, 0, 0],
"state_hash": "fnv1a64:72275811a4320d7c",
"js_authority_call_count": 0,
"js_authority_findings": 3,
"blocker_count": 5,
"candidate_eligible": false
},
"failure_samples": [
{"code": "JS_PROGRAM_CONTROL_FLOW", "detail": "ProgramRunner executes control directives and schedules interpreter blocks from JS"},
{"code": "JS_MOTION_STATE_MIRROR", "detail": "MotionState owns XYZAC-relevant HOME/JOG/limit/fault transitions"},
{"code": "JS_COMPATIBILITY_PLANNER_PRESENT", "detail": "AuthoritativeRuntime remains constructed and serializable for the selected session"},
{"code": "BROWSER_OPFS_ORACLE_BLOCKED", "detail": "physical OPFS crash/restart and Firefox/Safari matrix are unavailable"},
{"code": "FULL_XYZAC_AUTHORITY_MATRIX_PENDING", "detail": "HAL/IO/tool/probe and non-selected authority closure remain outside WASM-00"}
],
"next_task": "RTCP-01",
"next_task_status": "blocked",
"release_status": "STOP_RELEASE"
}