Record native XYZAC oracle blocker

This commit is contained in:
2026-08-31 09:48:09 +08:00
parent b564792452
commit 18436149a2
4 changed files with 18 additions and 8 deletions

View File

@@ -5,7 +5,7 @@
"status": "blocked",
"scope": "xyzac_only",
"result": "run-5axis-rtcp.sh launches native LinuxCNC services and AXIS, but linuxcnc.stat cannot attach to the launcher status buffer on this host; no native per-tick oracle was generated",
"report": {"path": "coverage/xyzac-native-tick-trace.report.json", "status": "blocked"},
"report": {"path": "coverage/xyzac-native-tick-trace.report.json", "status": "blocked", "sha256": "86d13e1a715c20b2a7bfc243301b46780a9f2942bd96d928c5ae24a53dbcca71"},
"outputs": [
{"path": "scripts/run_xyzac_native_tick_trace.py", "status": "created"},
{"path": "doc-rtcp/xyzac-trt-full-tp-parity-plan.md", "status": "created"},
@@ -15,13 +15,15 @@
"launcher": "run-5axis-rtcp.sh started native linuxcncsvr/io/halui/milltask/axis",
"axis_window": "visible during manual probe",
"stat_attach": "blocked: emcStatusBuffer invalid err=3 / taskbeat invalid",
"python_module": "blocked: installed 2.10.0~pre1 extension differs from source 2.10.0~pre0 launcher",
"native_trace": "blocked",
"source_hashes": "recorded by collector",
"full_parity_claim": "forbidden"
},
"failure_samples": [
{"code": "NATIVE_STAT_BUFFER_INVALID", "detail": "linuxcnc.stat().poll() returned emcStatusBuffer invalid err=3 or SystemError without exception while run-5axis-rtcp.sh services were alive"},
{"code": "NATIVE_TASKBEAT_INVALID", "detail": "taskbeat remained 4294967296 and no valid native tick could be selected"}
{"code": "NATIVE_TASKBEAT_INVALID", "detail": "taskbeat remained 4294967296 and no valid native tick could be selected"},
{"code": "NATIVE_PYTHON_MODULE_MISMATCH", "detail": "collector imported /usr/lib/python3/dist-packages/linuxcnc.cpython-312-x86_64-linux-gnu.so while run-5axis-rtcp.sh uses the source 2.10.0~pre0 launcher"}
],
"next_task": "TP-PARITY-01",
"next_task_status": "blocked_by_TP-PARITY-00",

View File

@@ -27,7 +27,7 @@
],
"observed": {
"report": "coverage/xyzac-native-tick-trace.report.json",
"report_sha256": "812a0bb8de8438aa18bc16789c40a33bcaadfaf3fcdc704ecf109c4b77bfdbfd",
"report_sha256": "86d13e1a715c20b2a7bfc243301b46780a9f2942bd96d928c5ae24a53dbcca71",
"row_count": 0,
"first_blocker": "NATIVE_STAT_BUFFER_INVALID"
},

View File

@@ -45,19 +45,21 @@
"remaining_services": []
},
"errors": [
"RuntimeError:native_stat_transition_timeout"
"RuntimeError:native_stat_transition_timeout",
"NATIVE_PYTHON_MODULE_MISMATCH"
],
"known_boundaries": [
"native stat exposes motion_id but not full TP segment geometry; active_segment_geometry is explicit null",
"taskbeat is the public native task-cycle counter; wall-clock is recorded only as diagnostic elapsed_ms",
"source run-in-place launcher and installed Python extension must use the same LinuxCNC build; mismatch is blocked",
"this report is an oracle input and does not claim native/WASM parity by itself"
],
"launcher": [
"./run-5axis-rtcp.sh",
"xyzac-trt.ini"
],
"launcher_output_sha256": "8e18cd62ead0174b8c9c7c70b4fa62716ee066bb0984de99e288322ae6aecaa2",
"launcher_output_tail": "Starting 5-axis RTCP case: /home/mes006/linuxcncWebWASM/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini\nDemo program: /home/mes006/linuxcncWebWASM/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc\nRTCP subroutine: /home/mes006/linuxcncWebWASM/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_ac.ngc\nMachine configuration file is 'xyzac-trt.ini'\ncheck_config: Unchecked: [KINS]KINEMATICS={xyzac-trt-kins sparm=identityfirst}\nStarting LinuxCNC...\nlinuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod\nNote: Using POSIX non-realtime\nFound file(LIB): /home/mes006/linuxcncWebWASM/linuxcnc/lib/hallib/basic_sim.tcl\nsetup_kins: cmd=loadrt xyzac-trt-kins sparm=identityfirst\nnote: MAXV max: 1000.000 units/sec 60000.000 units/min\nnote: LJOG max: 1000.000 units/sec 60000.000 units/min\nnote: LJOG default: 20.000 units/sec 1200.000 units/min\nnote: AJOG max: 360.000 units/sec 21600.000 units/min\nnote: AJOG default: 360.000 units/sec 21600.000 units/min\nnote: jog_order='XYZC'\nnote: jog_invert=set()\ntask: 0 cycles, min=0.000004, max=0.062398, avg=-1.000000, 0 latency excursions (> 10x expected cycle time of 0.010000s)\nTraceback (most recent call last):\n File \"/home/mes006/linuxcncWebWASM/linuxcnc/bin/axis\", line 4249, in <module>\n o.mainloop()\n File \"/usr/lib/python3.12/tkinter/__init__.py\", line 1504, in mainloop\n self.tk.mainloop(n)\n File \"/usr/lib/python3.12/tkinter/__init__.py\", line 1962, in __call__\n def __call__(self, *args):\n\nKeyboardInterrupt\nShutting down and cleaning up LinuxCNC...\n\n!!! switchkins-type 0 is IDENTITY\n\nidentityKinematicsSetup: coordinates:xyzac\n Joint 0 ==> Axis X\n Joint 1 ==> Axis Y\n Joint 2 ==> Axis Z\n Joint 3 ==> Axis A\n Joint 4 ==> Axis C\n\nxyzac-trt-kins coordinates=xyzac assigns:\n Joint 0 ==> Axis X\n Joint 1 ==> Axis Y\n Joint 2 ==> Axis Z\n Joint 3 ==> Axis A\n Joint 4 ==> Axis C\n\nuserkKinematicsSetup:\n emc/kinematics/userkfuncs.c <xyzac> max_joints=16 allow_duplicates=1\n\nNote: Using POSIX non-realtime",
"launcher_output_sha256": "016a93120b82e66cf4161d61ef01fc751347479a7c709a1e12f8835001f8a86d",
"launcher_output_tail": "Starting 5-axis RTCP case: /home/mes006/linuxcncWebWASM/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini\nDemo program: /home/mes006/linuxcncWebWASM/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc\nRTCP subroutine: /home/mes006/linuxcncWebWASM/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_ac.ngc\nMachine configuration file is 'xyzac-trt.ini'\ncheck_config: Unchecked: [KINS]KINEMATICS={xyzac-trt-kins sparm=identityfirst}\nStarting LinuxCNC...\nlinuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod\nNote: Using POSIX non-realtime\nFound file(LIB): /home/mes006/linuxcncWebWASM/linuxcnc/lib/hallib/basic_sim.tcl\nsetup_kins: cmd=loadrt xyzac-trt-kins sparm=identityfirst\nnote: MAXV max: 1000.000 units/sec 60000.000 units/min\nnote: LJOG max: 1000.000 units/sec 60000.000 units/min\nnote: LJOG default: 20.000 units/sec 1200.000 units/min\nnote: AJOG max: 360.000 units/sec 21600.000 units/min\nnote: AJOG default: 360.000 units/sec 21600.000 units/min\nnote: jog_order='XYZC'\nnote: jog_invert=set()\ntask: main loop took 0.119082 seconds\ntask: 0 cycles, min=0.000003, max=0.119082, avg=-1.000000, 1 latency excursions (> 10x expected cycle time of 0.010000s)\nTraceback (most recent call last):\n File \"/home/mes006/linuxcncWebWASM/linuxcnc/bin/axis\", line 4249, in <module>\n o.mainloop()\n File \"/usr/lib/python3.12/tkinter/__init__.py\", line 1504, in mainloop\n self.tk.mainloop(n)\n File \"/usr/lib/python3.12/tkinter/__init__.py\", line 1962, in __call__\n def __call__(self, *args):\n\nKeyboardInterrupt\nShutting down and cleaning up LinuxCNC...\n\n!!! switchkins-type 0 is IDENTITY\n\nidentityKinematicsSetup: coordinates:xyzac\n Joint 0 ==> Axis X\n Joint 1 ==> Axis Y\n Joint 2 ==> Axis Z\n Joint 3 ==> Axis A\n Joint 4 ==> Axis C\n\nxyzac-trt-kins coordinates=xyzac assigns:\n Joint 0 ==> Axis X\n Joint 1 ==> Axis Y\n Joint 2 ==> Axis Z\n Joint 3 ==> Axis A\n Joint 4 ==> Axis C\n\nuserkKinematicsSetup:\n emc/kinematics/userkfuncs.c <xyzac> max_joints=16 allow_duplicates=1\n\nNote: Using POSIX non-realtime",
"native_axis_window": {
"height": 1377,
"raw": "0x4c0001f \"AXIS 2.10.0~pre0 on sim-xyzac-trt-kins (switchkins) (no file)\": (\"axis\" \"Axis\") 1552x1377+28+98 +280+286",
@@ -66,6 +68,7 @@
},
"native_linuxcnc": {
"display": ":1",
"expected_source_python_module": "/home/mes006/linuxcncWebWASM/linuxcnc/lib/python/linuxcnc.so",
"python_module": "/usr/lib/python3/dist-packages/linuxcnc.cpython-312-x86_64-linux-gnu.so"
},
"program": {
@@ -73,7 +76,7 @@
"sha256": "5afc03d5c1b692edd4154a6d37e5f94d74936a7bd5e82dc9c022f7bc21c7dc17"
},
"release_status": "STOP_RELEASE",
"report_sha256": "812a0bb8de8438aa18bc16789c40a33bcaadfaf3fcdc704ecf109c4b77bfdbfd",
"report_sha256": "86d13e1a715c20b2a7bfc243301b46780a9f2942bd96d928c5ae24a53dbcca71",
"row_count": 0,
"rows": [],
"schema": "xyzac-native-linuxcnc-tick-trace.v1",

View File

@@ -223,6 +223,10 @@ def run(duration: float) -> dict[str, Any]:
source_bytes = PROGRAM.read_bytes()
trace_hash = sha256_bytes(canonical(rows).encode())
python_module = getattr(linuxcnc, "__file__", None)
source_python_module = str(ROOT / "linuxcnc/lib/python/linuxcnc.so")
if python_module != source_python_module:
errors.append("NATIVE_PYTHON_MODULE_MISMATCH")
status = "verified" if rows and not errors else "blocked"
return {
"schema": SCHEMA,
@@ -231,7 +235,7 @@ def run(duration: float) -> dict[str, Any]:
"launcher": command,
"native_axis_window": window,
"program": {"path": PROGRAM.relative_to(ROOT).as_posix(), "sha256": sha256_bytes(source_bytes)},
"native_linuxcnc": {"python_module": getattr(linuxcnc, "__file__", None), "display": environment["DISPLAY"]},
"native_linuxcnc": {"python_module": python_module, "expected_source_python_module": source_python_module, "display": environment["DISPLAY"]},
"tick_source": "linuxcnc.stat.taskbeat",
"rows": rows,
"row_count": len(rows),
@@ -243,6 +247,7 @@ def run(duration: float) -> dict[str, Any]:
"known_boundaries": [
"native stat exposes motion_id but not full TP segment geometry; active_segment_geometry is explicit null",
"taskbeat is the public native task-cycle counter; wall-clock is recorded only as diagnostic elapsed_ms",
"source run-in-place launcher and installed Python extension must use the same LinuxCNC build; mismatch is blocked",
"this report is an oracle input and does not claim native/WASM parity by itself",
],
"release_status": "STOP_RELEASE",