Implement WebAssembly runtime and kinematics coverage

This commit is contained in:
2026-08-21 06:04:48 +08:00
parent 5dd614c335
commit 554b72dae8
112 changed files with 47148 additions and 807 deletions

View File

@@ -0,0 +1,134 @@
{
"component": {
"name": "corexy_by_hal",
"period": "fixed HAL tick",
"pins": [
"j0-motor-pos-cmd",
"j1-motor-pos-cmd",
"alpha-cmd",
"beta-cmd",
"alpha-fb",
"beta-fb",
"j0-motor-pos-fb",
"j1-motor-pos-fb"
],
"thread": "servo-thread"
},
"config_scan": {
"alpha_command_to_stepgen": true,
"beta_command_to_stepgen": true,
"component_command_formula": true,
"component_feedback_formula": true,
"hal_and_kins_entries_distinct": true,
"home_j0_before_transform": true,
"home_j1_before_transform": true,
"loadrt_component": true,
"servo_registration": true
},
"home_semantics": {
"home_inputs": [
"j0-motor-pos-cmd",
"j1-motor-pos-cmd"
],
"kins_difference": "corexykins homes motor joints directly",
"reason": "corexy_by_hal.hal routes Cartesian trivkins joint commands to j0home/j1home before alpha/beta stepgens",
"status": "verified"
},
"implementation_status": "verified",
"native_wasm": {
"byte_identical_json": true,
"native": {
"command": {
"alpha": 4.0,
"beta": 2.0,
"j0": 6.0,
"j1": 2.0
},
"feedback": {
"alpha": 4.0,
"beta": 1.0,
"j0": 5.0,
"j1": 3.0
},
"function_calls": 1,
"schema": "hal-corexy-sample.v1",
"tick": 1
},
"status": "passed",
"wasm": {
"command": {
"alpha": 4.0,
"beta": 2.0,
"j0": 6.0,
"j1": 2.0
},
"feedback": {
"alpha": 4.0,
"beta": 1.0,
"j0": 5.0,
"j1": 3.0
},
"function_calls": 1,
"schema": "hal-corexy-sample.v1",
"tick": 1
}
},
"oracle": {
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "765c8318c48d7570773d22394c625c0d6c479fdf2e98c62fa48296b61e99c238",
"schema": "corexy-hal-report.v1",
"source_records": {
"component": {
"path": "linuxcnc/src/hal/components/corexy_by_hal.comp",
"sha256": "7cb585058976198779600ee1d27f6b4e225a89c1c6ebcc7ba699291c9463e5a8"
},
"hal": {
"path": "linuxcnc/configs/sim/axis/corexy/corexy_by_hal.hal",
"sha256": "1199dbb80147dc3c5820833c322e9f0d9ba94ed866b1ef6d00425ad90e3156a1"
},
"hal_header": {
"path": "wasm-core/include/sim_hal.h",
"sha256": "f0b25fda1c267ed8078469c9966fa3b09721eba77c575affea77d489437a3e49"
},
"hal_source": {
"path": "wasm-core/src/sim_hal.c",
"sha256": "76a057064546a8ee9ba1098952755a4cdc56e6e714f2761b8a1826898d3ae621"
},
"hal_test": {
"path": "wasm-core/tests/sim_hal_test.c",
"sha256": "5044ed422b37499291ff85fd7c601acc6665621cf33e9ff4d26f0e8fd5b7d533"
},
"ini": {
"path": "linuxcnc/configs/sim/axis/corexy/corexy_by_hal.ini",
"sha256": "e838da30ce5fba2d049487d48bd2aeff46b1390a5a448f31980d9ce06121740f"
},
"kins_ini": {
"path": "linuxcnc/configs/sim/axis/corexy/corexy_by_kins.ini",
"sha256": "b6682cc5186944a44c2aa78501c4f350e56b4da1151348fa9fc3ece5f0eeea3a"
}
},
"status": "partial",
"transform": {
"command": {
"alpha": "0.5*(j0+j1)",
"beta": "0.5*(j0-j1)"
},
"direction": "verified against LinuxCNC corexy_by_hal.comp",
"feedback": {
"j0": "alpha+beta",
"j1": "alpha-beta"
},
"sample": {
"alpha": 4.0,
"alpha_fb": 4.0,
"beta": 2.0,
"beta_fb": 1.0,
"j0": 6.0,
"j0_fb": 5.0,
"j1": 2.0,
"j1_fb": 3.0
}
}
}

View File

@@ -0,0 +1,436 @@
{
"closure": {
"blocking_reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"cartesian_candidate_ids": [
"config:linuxcnc/configs/sim/axis/anglejog/anglejog.ini:54:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis.ini:144:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis_9axis.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis_mm.ini:136:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/canterp.ini:47:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/classicladder/demo_sim_cl.ini:52:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/corexy/corexy_by_hal.ini:10:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/db_demo/base.inc:38:kinematics:trivkins"
],
"coupled_linear_source_ids": [
"source:linuxcnc/src/emc/kinematics/corexykins.c",
"source:linuxcnc/src/emc/kinematics/rosekins.c"
],
"max_rotate_source_ids": [
"linuxcnc/src/emc/kinematics/maxkins.c",
"linuxcnc/src/emc/kinematics/rotatekins.c"
],
"official_oracle": "blocked"
},
"configuration_candidate_origin": {
"rotatekins": "workspace_derived_fixture; LinuxCNC locked source has no shipped rotatekins config"
},
"configuration_candidates": {
"corexy_hal": {
"path": "linuxcnc/configs/sim/axis/corexy/corexy_by_hal.ini",
"sha256": "e838da30ce5fba2d049487d48bd2aeff46b1390a5a448f31980d9ce06121740f"
},
"corexy_kins": {
"path": "linuxcnc/configs/sim/axis/corexy/corexy_by_kins.ini",
"sha256": "b6682cc5186944a44c2aa78501c4f350e56b4da1151348fa9fc3ece5f0eeea3a"
},
"maxkins": {
"path": "linuxcnc/configs/sim/axis/vismach/5axis/max5/max5kins.ini",
"sha256": "ea7d453127122b7831e74de2204b446c514f3c999961a4be412b36880bacb8b6"
},
"rose": {
"path": "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini",
"sha256": "0685e9ca8c05c903b715e9fed6ecd23cbac13911ed335b6d14e24eb235de25d3"
},
"rotatekins": {
"path": "linuxcnc/configs/sim/axis/rotate/rotatekins.ini",
"sha256": "324af9a73d21b5f0c9adaf3c97e698422790d403586901f9e161b6020b1fb4fa"
}
},
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"corexy_entry_distinction": {
"distinct": true,
"hal_component": "linuxcnc/src/hal/components/corexy_by_hal.comp",
"hal_configuration": "linuxcnc/configs/sim/axis/corexy/corexy_by_hal.ini",
"kins_configuration": "linuxcnc/configs/sim/axis/corexy/corexy_by_kins.ini"
},
"families": {
"corexy": {
"boundary": "configuration coordinate requirements verified",
"forward": "X=0.5*(J0+J1), Y=0.5*(J0-J1), Z=J2",
"round_trip": "verified"
},
"maxkins": {
"boundary": "pivot_length=0 and pivot_length=0.666 verified",
"forward": "LinuxCNC maxkins pivot/B/C/U/V/W correction formula",
"round_trip": "verified"
},
"rose": {
"branch_state": "previous quadrant plus revolution count",
"forward": "X=R*cos(theta), Y=R*sin(theta), Z=J1; theta=J2 degrees",
"quadrant_continuity": "verified",
"round_trip": "verified"
},
"rotatekins": {
"boundary": "90 degree rotation verified",
"forward": "XY rotation by -C degrees; Z and optional axes direct",
"round_trip": "verified"
}
},
"implementation_status": "verified",
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"report_sha256": "3bcd97e6a87058f42f1653ae896a95b6dad2ca9f149236b75a2d5d699f2e6988",
"samples": {
"byte_identical_json": true,
"native": {
"corexy": {
"inverse": [
6.0,
2.0,
3.0
],
"pose": [
4.0,
2.0,
3.0
],
"state_hash": 15406663564927631605
},
"fiveaxiskins": {
"inverse": [
10.0,
20.0,
30.0,
35.0,
40.0,
-2.0,
20.0
],
"pose": [
118.967490359,
111.434580971,
76.850293016
],
"state_hash": 5053227094931014129
},
"maxkins": {
"inverse": [
3.0,
4.0,
5.0,
0.0,
30.0,
90.0
],
"pose": [
-4.0,
3.0,
5.0
],
"state_hash": 2549915653649577904
},
"puma": {
"inverse": [
10.0,
20.0,
-30.0,
40.0,
25.0,
-15.0
],
"pose": [
450.112320486,
207.114833215,
-612.180622409
],
"state_hash": 3161234248163340028
},
"rose": {
"branch": 1,
"inverse": [
2.0,
7.0,
190.0
],
"pose": [
-1.969615506,
-0.347296355,
7.0
],
"state_hash": 15304911204640563299
},
"rotatekins": {
"inverse": [
3.0,
4.0,
5.0,
0.0,
0.0,
90.0
],
"pose": [
4.0,
-3.0,
5.0
],
"state_hash": 1338350581716392236
},
"scara": {
"inverse": [
-3.644300703,
40.0,
25.0,
-31.355699297,
5.0,
-3.0
],
"pose": [
590.460310444,
130.945742721,
465.0
],
"state_hash": 4515826253922604237
},
"schema": "kinematics-coupled-samples.v1",
"scorbot": {
"inverse": [
25.0,
35.0,
-20.0,
10.0,
-5.0
],
"pose": [
366.786994761,
171.035584569,
191.173940759
],
"state_hash": 16037922903473574131
},
"xyzac_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
142.826706376,
9.689621386,
163.102540378
],
"state_hash": 4869492769119734977
},
"xyzbc_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
44.740352549,
25.97032557,
227.67175976
],
"state_hash": 1734235358276017152
}
},
"wasm": {
"corexy": {
"inverse": [
6.0,
2.0,
3.0
],
"pose": [
4.0,
2.0,
3.0
],
"state_hash": 15406663564927631605
},
"fiveaxiskins": {
"inverse": [
10.0,
20.0,
30.0,
35.0,
40.0,
-2.0,
20.0
],
"pose": [
118.967490359,
111.434580971,
76.850293016
],
"state_hash": 5053227094931014129
},
"maxkins": {
"inverse": [
3.0,
4.0,
5.0,
0.0,
30.0,
90.0
],
"pose": [
-4.0,
3.0,
5.0
],
"state_hash": 2549915653649577904
},
"puma": {
"inverse": [
10.0,
20.0,
-30.0,
40.0,
25.0,
-15.0
],
"pose": [
450.112320486,
207.114833215,
-612.180622409
],
"state_hash": 3161234248163340028
},
"rose": {
"branch": 1,
"inverse": [
2.0,
7.0,
190.0
],
"pose": [
-1.969615506,
-0.347296355,
7.0
],
"state_hash": 15304911204640563299
},
"rotatekins": {
"inverse": [
3.0,
4.0,
5.0,
0.0,
0.0,
90.0
],
"pose": [
4.0,
-3.0,
5.0
],
"state_hash": 1338350581716392236
},
"scara": {
"inverse": [
-3.644300703,
40.0,
25.0,
-31.355699297,
5.0,
-3.0
],
"pose": [
590.460310444,
130.945742721,
465.0
],
"state_hash": 4515826253922604237
},
"schema": "kinematics-coupled-samples.v1",
"scorbot": {
"inverse": [
25.0,
35.0,
-20.0,
10.0,
-5.0
],
"pose": [
366.786994761,
171.035584569,
191.173940759
],
"state_hash": 16037922903473574131
},
"xyzac_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
142.826706376,
9.689621386,
163.102540378
],
"state_hash": 4869492769119734977
},
"xyzbc_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
44.740352549,
25.97032557,
227.67175976
],
"state_hash": 1734235358276017152
}
}
},
"schema": "coupled-kinematics-report.v1",
"source_records": {
"corexy": {
"path": "linuxcnc/src/emc/kinematics/corexykins.c",
"sha256": "507963e0ed464440fa530db11b1b15c6a663182eb016855d105554ae8125ae5b"
},
"maxkins": {
"path": "linuxcnc/src/emc/kinematics/maxkins.c",
"sha256": "01529e0db1b698af621d63c30bc8ae382757dd367f3e4babc9b959873344b4e7"
},
"rose": {
"path": "linuxcnc/src/emc/kinematics/rosekins.c",
"sha256": "1de39affa6b99f21c5e902fc67c8b1d8876d44fc8eff920afd816d7f956cfd78"
},
"rotatekins": {
"path": "linuxcnc/src/emc/kinematics/rotatekins.c",
"sha256": "b104c7e0eb726f48b83daa4d596db5ca8021d803ab17dd123db9b9410ce5f47c"
}
},
"state_hash": {
"native": {
"corexy": 15406663564927631605,
"maxkins": 2549915653649577904,
"rose": 15304911204640563299,
"rotatekins": 1338350581716392236
},
"stable": true,
"wasm": {
"corexy": 15406663564927631605,
"maxkins": 2549915653649577904,
"rose": 15304911204640563299,
"rotatekins": 1338350581716392236
}
},
"status": "partial"
}

View File

@@ -0,0 +1,361 @@
{
"configuration_candidate_count": 4,
"configuration_candidates": {
"linear_axis": {
"hal_files": [
"sim_ldelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "lineardeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_ldelta.hal"
],
"path": "linuxcnc/configs/sim/axis/ldelta.ini",
"sha256": "1567138c3d54b4d9712b5031f6a0b060edadd8d1442d1eff8d93c2beefbb5e0c"
},
"linear_demo": {
"hal_files": [
"sim_ldelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "lineardeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_ldelta.hal"
],
"path": "linuxcnc/configs/sim/axis/ldelta_demo.ini",
"sha256": "ab0645308abe903bf66f36a328b43303aa0e8ad2d19e69a45e2703d665956439"
},
"linear_tklinuxcnc": {
"hal_files": [
"sim_ldelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "lineardeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/tklinuxcnc/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/tklinuxcnc/sim_ldelta.hal"
],
"path": "linuxcnc/configs/sim/tklinuxcnc/ldelta.ini",
"sha256": "0e23dee0f4df839c028f5bfba95c5941f2f8623ce502d6fdfc90dfdef63d8967"
},
"rotary_axis": {
"hal_files": [
"sim_rdelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "rotarydeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_rdelta.hal"
],
"path": "linuxcnc/configs/sim/axis/rdelta.ini",
"sha256": "53510733b8fd0230547f48f76ebd35dc5c98f58fe1dba1246777e227ef82c508"
}
},
"families": {
"linear_delta": {
"configuration_candidates": [
"linear_axis",
"linear_demo",
"linear_tklinuxcnc"
],
"forward": "three carriage spheres -> quadratic platform root",
"inverse": "three carriage heights from sphere intersections",
"module": "lineardeltakins"
},
"rotary_delta": {
"configuration_candidates": [
"rotary_axis"
],
"forward": "three rotary knee constraints -> quadratic platform root",
"inverse": "three rotated leg intersections",
"module": "rotarydeltakins"
}
},
"geometry": {
"linear": {
"radius": 130.25,
"rod_length": 269.0,
"tower_layout": "120-degree equilateral",
"units": "mm"
},
"rotary": {
"foot_radius": 6.0,
"joint_units": "degrees",
"platform_radius": 10.0,
"shin_length": 14.0,
"thigh_length": 10.0
}
},
"implementation_status": "verified",
"mapping": {
"coordinates": "XYZ",
"extra_joint_policy": "prefix only; extra joints rejected by count",
"kinematics_joint_count": 3,
"optional_axes": "A/B/C/U/V/W pass through"
},
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"blocked_samples": [
"linear nominal/root",
"linear alternate root",
"linear no-solution",
"linear joint-limit",
"rotary nominal/root",
"rotary alternate root",
"rotary z=0 singular"
],
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "a585edd0895eefb4add8753927a33b60cae806e814623830df39f396787cd2e3",
"resource_gaps": {
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_ldelta.hal",
"linuxcnc/configs/sim/axis/sim_rdelta.hal",
"linuxcnc/configs/sim/tklinuxcnc/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/tklinuxcnc/sim_ldelta.hal"
],
"policy": "retained as missing inputs; no configuration smoke is promoted to numeric golden"
},
"samples": {
"byte_identical_json": true,
"native": {
"delta_edges": {
"lineardelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
535.363415806
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702
},
"rotarydelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
0.320396615
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"singular": -704
},
"tripod": {
"alternate_branch": 1,
"alternate_pose": [
2.0,
3.0,
-4.0
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702,
"singular": -704
}
},
"lineardelta": {
"inverse": [
300.0,
300.0,
300.0
],
"pose": [
0.0,
0.0,
64.636584194
],
"state_hash": 10022623683197000937
},
"rotarydelta": {
"inverse": [
10.0,
10.0,
10.0
],
"pose": [
0.0,
0.0,
-3.793360169
],
"state_hash": 14346691006498560820
}
},
"state_hash_identical": true,
"wasm": {
"delta_edges": {
"lineardelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
535.363415806
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702
},
"rotarydelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
0.320396615
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"singular": -704
},
"tripod": {
"alternate_branch": 1,
"alternate_pose": [
2.0,
3.0,
-4.0
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702,
"singular": -704
}
},
"lineardelta": {
"inverse": [
300.0,
300.0,
300.0
],
"pose": [
0.0,
0.0,
64.636584194
],
"state_hash": 10022623683197000937
},
"rotarydelta": {
"inverse": [
10.0,
10.0,
10.0
],
"pose": [
0.0,
0.0,
-3.793360169
],
"state_hash": 14346691006498560820
}
}
},
"schema": "delta-kinematics-report.v1",
"solver": {
"alternate_root_flag": "SIM_KIN_DELTA_ALTERNATE_ROOT bit 0",
"convergence_tolerance": 0.0,
"default_root": 0,
"fixed_iteration_limit": 0,
"forward": "analytic quadratic intersection",
"inverse": "three independent leg intersections"
},
"source_records": {
"header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "43e588f7c45c703970598e8e42ff5aae4b97a437eaff1d4cd6ad156bd204edc7"
},
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "f15842a1dbf0cb33f071ee1e70715a85a1f3dec44c4facc220edd924f6ca352c"
},
"linear_c": {
"path": "linuxcnc/src/emc/kinematics/lineardeltakins.c",
"sha256": "792caf5f3fb8bf06d97a4bb7262697ac22182d78d91fed19e7a9e537585aa748"
},
"linear_cc": {
"path": "linuxcnc/src/emc/kinematics/lineardeltakins.cc",
"sha256": "77634457a4dd3f5617f91a66651965c5b8326fc0d4dfc916d9cd63b89b0ec0f1"
},
"linear_common": {
"path": "linuxcnc/src/emc/kinematics/lineardeltakins-common.h",
"sha256": "7785bcd7d095b431169cdd0f753c177ece643ee825f7ff4b8cdb6f8cd4706df8"
},
"rotary_c": {
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins.c",
"sha256": "64c8aeb6998a481f3c26743093dd157d2d22dc6769b258e3e6012b5c1f784773"
},
"rotary_cc": {
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins.cc",
"sha256": "7e2fd63a2a7f5718d706faa21f903b36007226b065ad6d234631d2514f653618"
},
"rotary_common": {
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins-common.h",
"sha256": "ba3e037fe2ad7eba29aa2b657492ac83f1979a38c9249fef52e598ba0d5c9136"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "00d9efc3c701ba2848535357f6027e6d9d4d19796a17be96e290ddc0babe2c5c"
}
},
"status": "partial",
"workspace_and_boundaries": {
"linear": {
"alternate_branch": 1,
"alternate_root_pose": [
-0.0,
-0.0,
535.363415806
],
"geometry_error": -703,
"iterations": 0,
"joint_limit_error": -702,
"no_solution_error": -702,
"nominal": [
0.0,
0.0,
64.636584194
],
"root_branch": 0
},
"rotary": {
"alternate_branch": 1,
"alternate_root_pose": [
-0.0,
-0.0,
0.320396615
],
"geometry_error": -703,
"iterations": 0,
"nominal": [
0.0,
0.0,
-3.793360169
],
"root_branch": 0,
"singular_error": -704
}
}
}

View File

@@ -0,0 +1,105 @@
{
"boundary": {
"duplicate_axis_suffix": "verified",
"missing_required_coordinate": "SIM_KIN_ERR_CONFIGURATION verified",
"pivot_length": "250.0 verified",
"round_trip": "verified",
"state_hash": "native/WASM identical"
},
"configuration": {
"coordinates": "xyzbcwy",
"duplicate_axis": "Y at joint 1 and suffix joint 6; first-wins mapping with suffix synchronized",
"joints": 7,
"kinematics": "5axiskins",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/bridgemill/5axis.ini",
"pivot_length_default": 250.0,
"required_coordinates": "XYZBCW",
"scan": {
"joint_count": true,
"kins_entry": true,
"pivot_pin": true
}
},
"formula": {
"forward": "X=JX+r*sin(180-B)*cos(C), Y=JY+r*sin(180-B)*sin(C), Z=JZ+pivot+r*cos(180-B)",
"inverse": "subtract the same spherical vector, then map pose to coordinates",
"source_contains_required_coordinates": true,
"source_spherical_helper": "s2r"
},
"implementation_status": "verified",
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "d0af8c3785d87bedd869d235f45b9d522434589a26794113b1acf8526982dde0",
"sample": {
"byte_identical_json": true,
"native": {
"inverse": [
10.0,
20.0,
30.0,
35.0,
40.0,
-2.0,
20.0
],
"pose": [
118.967490359,
111.434580971,
76.850293016
],
"state_hash": 5053227094931014129
},
"wasm": {
"inverse": [
10.0,
20.0,
30.0,
35.0,
40.0,
-2.0,
20.0
],
"pose": [
118.967490359,
111.434580971,
76.850293016
],
"state_hash": 5053227094931014129
}
},
"schema": "fiveaxis-kinematics-report.v1",
"source_records": {
"config": {
"path": "linuxcnc/configs/sim/axis/vismach/5axis/bridgemill/5axis.ini",
"sha256": "789ba656f8ee3e97feba07b58eb242305898e745795891b1a7e536289bffe6bf"
},
"hal": {
"path": "linuxcnc/configs/sim/axis/vismach/5axis/bridgemill/5axisgui.hal",
"sha256": "a59e6b9432c0a898f6d8da46309b868733a906158733fb0942017d14eb97cd07"
},
"header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "db16293ec3645559a0be71a40963693f3d1e3f5fdedc92902be19b47f653dfa8"
},
"source": {
"path": "linuxcnc/src/emc/kinematics/5axiskins.c",
"sha256": "2e29fee21936cfbbafbb000290276e4b32eaba4831014e08d3fb833f2b3dac72"
},
"source_impl": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "7a77915c59f190bcbe5c93d8f53498745bfcf978c167ba8878a21b914f9401fd"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "ceeb8b4100d034d76e70ce675d78b2d62c51e8e70be2205a9c8ae02e105a6aa6"
}
},
"status": "partial"
}

View File

@@ -0,0 +1,333 @@
{
"configuration_candidate": {
"coordinates": "XYZABC",
"hal_geometry": {
"base": [
-22.95,
13.25,
0.0,
22.95,
13.25,
0.0,
22.95,
13.25,
0.0,
0.0,
-26.5,
0.0,
0.0,
-26.5,
0.0,
-22.95,
13.25,
0.0
],
"platform": [
-1.0,
11.5,
0.0,
1.0,
11.5,
0.0,
10.459,
-4.884,
0.0,
9.459,
-6.616,
0.0,
-9.459,
-6.616,
0.0,
-10.459,
-4.884,
0.0
]
},
"hal_pins": [
"last-iterations",
"max-iterations",
"limit-iterations",
"max-error",
"convergence-criterion",
"fwd-kins-fail",
"x",
"y",
"z",
"a",
"b",
"c"
],
"joints": 6,
"kinematics": "genhexkins",
"path": "linuxcnc/configs/sim/axis/vismach/hexapod-sim/hexapod.ini",
"scan": true
},
"geometry": {
"base_points": [
[
-22.95,
13.25,
0.0
],
[
22.95,
13.25,
0.0
],
[
22.95,
13.25,
0.0
],
[
0.0,
-26.5,
0.0
],
[
0.0,
-26.5,
0.0
],
[
-22.95,
13.25,
0.0
]
],
"platform_points": [
[
-1.0,
11.5,
0.0
],
[
1.0,
11.5,
0.0
],
[
10.459,
-4.884,
0.0
],
[
9.459,
-6.616,
0.0
],
[
-9.459,
-6.616,
0.0
],
[
-10.459,
-4.884,
0.0
]
],
"struts": 6,
"units": "configuration units; XYZ linear and ABC degrees"
},
"implementation_status": "verified",
"mapping": {
"coordinates": "XYZABC",
"extra_joint_policy": "rejected",
"joint_semantics": [
"strut-0",
"strut-1",
"strut-2",
"strut-3",
"strut-4",
"strut-5"
],
"kinematics_joint_count": 6
},
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"blocked_samples": [
"nominal six-leg pose",
"alternate initial seed",
"nonpositive strut",
"iteration limit",
"maximum error",
"singular Jacobian",
"joint limit"
],
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "992b96bae770789e6013cfffaeb3c47d8ecfde24d7abe974987e66250921ea78",
"samples": {
"byte_identical_json": true,
"native": {
"boundaries": {
"alternate_branch": 1,
"alternate_pose": [
10.0,
-5.0,
-60.0
],
"alternate_status": 0,
"branch": 0,
"iteration_limit": -702,
"iterations": 14,
"limit_error": -702,
"max_error": -702,
"nonpositive": -702,
"residual": 8.57e-10,
"singular": -704
},
"genhex": {
"inverse": [
68.274402001,
63.00792855,
63.783820692,
65.475127133,
60.456723205,
68.231500501
],
"iterations": 14,
"pose": [
10.0,
-5.0,
60.0,
4.999999999,
-3.000000001,
10.0
],
"residual": 8.57e-10,
"state_hash": 11890997469032613683
}
},
"state_hash_identical": true,
"wasm": {
"boundaries": {
"alternate_branch": 1,
"alternate_pose": [
10.0,
-5.0,
-60.0
],
"alternate_status": 0,
"branch": 0,
"iteration_limit": -702,
"iterations": 14,
"limit_error": -702,
"max_error": -702,
"nonpositive": -702,
"residual": 8.57e-10,
"singular": -704
},
"genhex": {
"inverse": [
68.274402001,
63.00792855,
63.783820692,
65.475127133,
60.456723205,
68.231500501
],
"iterations": 14,
"pose": [
10.0,
-5.0,
60.0,
4.999999999,
-3.000000001,
10.0
],
"residual": 8.57e-10,
"state_hash": 11890997469032613683
}
}
},
"schema": "genhex-kinematics-report.v1",
"solver": {
"alternate_seed_flag": "SIM_KIN_GENHEX_ALTERNATE_SEED bit 1",
"default_convergence_tolerance": 1e-09,
"default_iteration_limit": 120,
"default_max_error": 500.0,
"forward": "Newton-Raphson 6x6 Jacobian",
"inverse": "closed-form six strut lengths",
"seed": [
0.0,
0.0,
50.0,
0.0,
0.0,
0.0
]
},
"source_records": {
"config": {
"path": "linuxcnc/configs/sim/axis/vismach/hexapod-sim/hexapod.ini",
"sha256": "362654b77bcaf5c87c3aa14c12684f516cbd635b6d582a68b05fcbd8299822ea"
},
"hal": {
"path": "linuxcnc/configs/sim/axis/vismach/hexapod-sim/kinematics.hal",
"sha256": "6dd6d63e0403dcc0c82b43790eaa5b4a4d639c5a02391ac1dcd5673969c4ec39"
},
"header": {
"path": "linuxcnc/src/emc/kinematics/genhexkins.h",
"sha256": "580a2e1703a5c0efb683b4a26f805af434edcfe9d1ade7890e44307f8b0b236c"
},
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "6abae835c16feb27ec1dc28a9ea5384f0bc5190217ba04a4997048d83066b905"
},
"kinematics_header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "939d4088d9e7120e4a405be154eb3d98cd4e5925fc27d47641c115624c1bd994"
},
"source": {
"path": "linuxcnc/src/emc/kinematics/genhexkins.c",
"sha256": "8df3d8bd812e040a06bc29ea91625fd143bacf26903b106ae6700430aca7f6b9"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "c9e4d20973c6a487787504bd5de9a73829f53d8bbfd35f91e72c6c62c76f191e"
}
},
"status": "partial",
"workspace_and_boundaries": {
"alternate_seed": [
10.0,
-5.0,
-60.0
],
"iteration_limit_error": -702,
"iterations": 14,
"joint_limit_error": -702,
"max_error_boundary": -702,
"nominal": {
"inverse": [
68.274402001,
63.00792855,
63.783820692,
65.475127133,
60.456723205,
68.231500501
],
"iterations": 14,
"pose": [
10.0,
-5.0,
60.0,
4.999999999,
-3.000000001,
10.0
],
"residual": 8.57e-10,
"state_hash": 11890997469032613683
},
"nonpositive_joint_error": -702,
"residual": 8.57e-10,
"singular_jacobian_error": -704
}
}

View File

@@ -0,0 +1,132 @@
{
"boundaries": {
"fixed_iteration_limit": "verified",
"invalid_DH_nonfinite": "SIM_KIN_ERR_NONFINITE verified",
"state_hash": "native/WASM identical after 1e-9 quantization"
},
"configuration_candidates": {
"melfa": {
"dh_source": "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa_dh.hal",
"kinematics": "genserkins",
"path": "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini",
"scan": true
},
"puma560": {
"dh_source": "linuxcnc/configs/sim/axis/vismach/puma/puma560_dh.hal",
"kinematics": "genserkins",
"path": "linuxcnc/configs/sim/axis/vismach/puma/puma560.ini",
"scan": true
}
},
"dh_contract": {
"alpha_units": "radians from HAL pins",
"joint_count": 6,
"joint_units": "degrees at public ABI, radians internally",
"melfa_has_alpha_and_d": true,
"parameters": [
"A-0..5",
"ALPHA-0..5",
"D-0..5"
],
"puma_has_alpha_and_d": true
},
"implementation_status": "verified",
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "fc6c23f67b2a14b58735fa60ed884a5a73815c3efb26f1b4d0de427e882d67b8",
"samples": {
"byte_identical_json": true,
"native": {
"inverse": [
0.0,
10.0,
-20.0,
29.999999999,
15.0,
-9.999999999
],
"iterations": 0,
"pose": [
619.051467462,
30.4112378,
-349.855537721
],
"residual": 0.0,
"state_hash": 13985782206955965200
},
"wasm": {
"inverse": [
0.0,
10.0,
-20.0,
29.999999999,
15.0,
-9.999999999
],
"iterations": 0,
"pose": [
619.051467462,
30.4112378,
-349.855537721
],
"residual": 0.0,
"state_hash": 13985782206955965200
}
},
"schema": "genser-kinematics-report.v1",
"solver": {
"convergence_tolerance": 1e-07,
"forward": "Craig DH homogeneous product",
"inverse": "fixed-zero seed damped numerical Jacobian with 1e-4 degree finite difference",
"iterations": 0,
"max_iterations": 200,
"nonconvergence": "SIM_KIN_ERR_SINGULAR after fixed iteration limit",
"residual": 0.0
},
"source_records": {
"functions": {
"path": "linuxcnc/src/emc/kinematics/genserfuncs.c",
"sha256": "e4b775e93b973a4faae873c81a95d7d8361fe5c5c59ea81e362a5f900a1e8781"
},
"header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "5fd01043d705486b0d365e36109c3b0e0d39f220c2cec313b5b747dca06148bc"
},
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "41fc146ab88a623b5bc6afbba1fc0d12434689c737426da12fcd297162672749"
},
"melfa_config": {
"path": "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini",
"sha256": "7dc7a3db58ca7f7ddba11fe08f691cd7658564be2a0b872d9087ee7b392e45c7"
},
"melfa_dh": {
"path": "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa_dh.hal",
"sha256": "0d943182e37da99ae99db53f3dd464cb9b62b17d4cabe56c35c0c27b43bf68c6"
},
"puma_config": {
"path": "linuxcnc/configs/sim/axis/vismach/puma/puma560.ini",
"sha256": "2bb881ed6c5662282977accac29bfd6c4efc18e572cbcb8a31c134677012cf4c"
},
"puma_dh": {
"path": "linuxcnc/configs/sim/axis/vismach/puma/puma560_dh.hal",
"sha256": "23758eb7a6a4abe116e1de88140d04e6c9a910d1c378f019d76843a5a3fb6141"
},
"source": {
"path": "linuxcnc/src/emc/kinematics/genserkins.c",
"sha256": "cbb87b9c21f9f5e1d6a3c5bd333f72a7b1b4f1618a21b32d4b34bc621b43e075"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "6c803de9aeb91499cef391620f17c7da69ee78a873b43b0ba9fa508fd096f31a"
}
},
"status": "partial"
}

View File

@@ -5,5 +5,8 @@
"fixed_tick_scheduler": true,
"max_period_ticks": 1000000,
"native_tests": ["sim_hal_test"],
"wasm_tests": ["sim_hal_wasm_test"],
"static_components": ["corexy_by_hal"],
"corexy_transform": "coverage/corexy-hal.report.json",
"real_excluded": ["hardware_driver", "linux_realtime_kernel", "host_device_access"]
}

View File

@@ -0,0 +1,361 @@
{
"canonical": {
"block_hash": "fnv1a64 over input bytes",
"byte_identical": true,
"deterministic_runs": 2,
"format": "fixed-order JSON with IEEE-754 binary64 %.17g values",
"state_hash": "fnv1a64 over explicit state fields",
"state_hash_identical": true
},
"error_boundaries": [
"argument",
"nonfinite",
"syntax",
"range",
"unknown_code",
"state",
"buffer"
],
"golden_tolerance": "exact_for_supported_words",
"implementation": "linuxcnc/src/emc/rs274ngc",
"inputs": {
"bytes": 1133481,
"file_count": 55,
"files": [
{
"bytes": 2058,
"path": "linuxcnc/src/emc/rs274ngc/Submakefile",
"sha256": "9a684add8b229eab90fe047ff3b5c7c18cfdbe96c7a2926a9c94518d12bcfbbc"
},
{
"bytes": 5174,
"path": "linuxcnc/src/emc/rs274ngc/array1.hh",
"sha256": "352f170d36ba34c57efb4a7b5739de29740234821b47b02fc6bdf9261b9e45b9"
},
{
"bytes": 619,
"path": "linuxcnc/src/emc/rs274ngc/boost_pyenum_macros.hh",
"sha256": "ae537267442894365ba483c66da60d86e28d39f31a493fd698650d9e7765b14e"
},
{
"bytes": 13230,
"path": "linuxcnc/src/emc/rs274ngc/canonmodule.cc",
"sha256": "7b47e3f67c8f4a4370b2957cc3bf6e17ae0820a2853f4febc9ec9598627c6acd"
},
{
"bytes": 44952,
"path": "linuxcnc/src/emc/rs274ngc/gcodemodule.cc",
"sha256": "de4fed54839271a850898123958acafddab17995a102597814a90452e24441a9"
},
{
"bytes": 17113,
"path": "linuxcnc/src/emc/rs274ngc/interp_arc.cc",
"sha256": "86a31b1110506a992c846c0333a5443da88ed82800e94df879688d6493664c42"
},
{
"bytes": 13874,
"path": "linuxcnc/src/emc/rs274ngc/interp_array.cc",
"sha256": "590f39ac0344aa2d3f4344565f5a73328ae305432a6c0f2d48557ef298bb6715"
},
{
"bytes": 2181,
"path": "linuxcnc/src/emc/rs274ngc/interp_array_types.hh",
"sha256": "1898b92511dbe3052fd765100b9ef95b65c62903cba9188b3f918f8725b16155"
},
{
"bytes": 2270,
"path": "linuxcnc/src/emc/rs274ngc/interp_base.cc",
"sha256": "1b6dc7c836bcb2bcfdb66975320458894ed6a1a1a90d9d4f6b4af938408e0366"
},
{
"bytes": 2945,
"path": "linuxcnc/src/emc/rs274ngc/interp_base.hh",
"sha256": "cf57996a4549a8d001b346892e4fa88de0008e83681e429040a21635aa06337b"
},
{
"bytes": 16098,
"path": "linuxcnc/src/emc/rs274ngc/interp_check.cc",
"sha256": "241b4778d5ab0939d695ad07e0b4b177750731e17e29d2406e8781ad7adfc2e2"
},
{
"bytes": 243966,
"path": "linuxcnc/src/emc/rs274ngc/interp_convert.cc",
"sha256": "50cff00c7760e51ebdd1afc8bafb863fe3f0559976313a21fccdc0a002a321f6"
},
{
"bytes": 89996,
"path": "linuxcnc/src/emc/rs274ngc/interp_cycles.cc",
"sha256": "eaced8d8f33fb7840b6b345fcb1ad9ea3ba46003599ba4ee98aebc1e98d8ccc2"
},
{
"bytes": 13102,
"path": "linuxcnc/src/emc/rs274ngc/interp_execute.cc",
"sha256": "a7787d0ae340184f1fe5055ec52dee054a0e67626db6ecfe55418e3e4c99b53c"
},
{
"bytes": 27920,
"path": "linuxcnc/src/emc/rs274ngc/interp_find.cc",
"sha256": "35ec59cca1711f5ae1b99e7effe5cde18fcad998e3180324ee87a5a0815ffcfb"
},
{
"bytes": 1016,
"path": "linuxcnc/src/emc/rs274ngc/interp_fwd.hh",
"sha256": "2fe42f0fed1247b400dd946cd976d2ca83707d33e05cdbe223ebcca6a862e9e9"
},
{
"bytes": 33574,
"path": "linuxcnc/src/emc/rs274ngc/interp_g7x.cc",
"sha256": "27648c21410e3a85d26b684ad2bd6604fcd6317a429bf799744fb718fa0760da"
},
{
"bytes": 1382,
"path": "linuxcnc/src/emc/rs274ngc/interp_inspection.cc",
"sha256": "1d3417b4e420f89b7d09dd719e976b68ff39860df8ba374724c1a821cf0df354"
},
{
"bytes": 1224,
"path": "linuxcnc/src/emc/rs274ngc/interp_inspection.hh",
"sha256": "d6add770b4cf94c8cb05578b349ce9928c57c55476e8f2b551f10e0ba018e81e"
},
{
"bytes": 15598,
"path": "linuxcnc/src/emc/rs274ngc/interp_internal.cc",
"sha256": "6276d990a7ebaec6a5a793f5d0f49364a32e69db4f770d11627b9ea6dc45e809"
},
{
"bytes": 33425,
"path": "linuxcnc/src/emc/rs274ngc/interp_internal.hh",
"sha256": "619832fceccf05aba18e84a4bf9b15b47f2ce80ef1cb5f1a3fe737fcd1d05781"
},
{
"bytes": 5015,
"path": "linuxcnc/src/emc/rs274ngc/interp_inverse.cc",
"sha256": "c3d02097143a11b2d27b84c05da906250e8b8f42c3ce6b6b3eb9c7f7514344d7"
},
{
"bytes": 28616,
"path": "linuxcnc/src/emc/rs274ngc/interp_namedparams.cc",
"sha256": "35e1a40ec555052d6895fa53ba4fc013c835456771f01522218dc006e67396ca"
},
{
"bytes": 39144,
"path": "linuxcnc/src/emc/rs274ngc/interp_o_word.cc",
"sha256": "32f3722cb7bb90eb7db4cf5c82d3781c6880a1e7810107c2365edec7e9520d8c"
},
{
"bytes": 5304,
"path": "linuxcnc/src/emc/rs274ngc/interp_parameter_def.hh",
"sha256": "95979af5cd58188d01fd02c33ac3b85472c8fd4a31041e531e785d9d6d2594da"
},
{
"bytes": 10063,
"path": "linuxcnc/src/emc/rs274ngc/interp_python.cc",
"sha256": "4872d5d58902e370f856c1b516f2f0c6d4693544f4493d62dd247422aeb2a26e"
},
{
"bytes": 609,
"path": "linuxcnc/src/emc/rs274ngc/interp_python.hh",
"sha256": "d8aa266335990d1c3a29549a00c99f195526ceee6190d869c17c64b11596fdda"
},
{
"bytes": 25017,
"path": "linuxcnc/src/emc/rs274ngc/interp_queue.cc",
"sha256": "71bb7350c6933fa7b6f6c964e5cb4fa88e4f56444142f87381e611a77eec77ba"
},
{
"bytes": 4513,
"path": "linuxcnc/src/emc/rs274ngc/interp_queue.hh",
"sha256": "c78f0e9ddb5fcbccf168c92d58fbf2a8600d62dee515af7f68347bcb0dafa64d"
},
{
"bytes": 123494,
"path": "linuxcnc/src/emc/rs274ngc/interp_read.cc",
"sha256": "72473355a0a1cef08bf922ee4d8b89f46210397957f9b1336254223eae66e116"
},
{
"bytes": 17533,
"path": "linuxcnc/src/emc/rs274ngc/interp_remap.cc",
"sha256": "e0891ff3133f7e2a3fc6ff76542f102bc8f46887e27fc8aa8117208fc8cd066b"
},
{
"bytes": 5616,
"path": "linuxcnc/src/emc/rs274ngc/interp_setup.cc",
"sha256": "f80e7793e21d62db33cd45cb0c7b9d242a74aac07dc8171a1102734e9c40e23f"
},
{
"bytes": 11421,
"path": "linuxcnc/src/emc/rs274ngc/interp_write.cc",
"sha256": "03e6a28345f714af9656355c5c6cbb6e132db431f0c6ca9568d5be8c3081eea0"
},
{
"bytes": 39664,
"path": "linuxcnc/src/emc/rs274ngc/interpmodule.cc",
"sha256": "96e11690c472e679525c911b350db603b7869f41a3dd79b984b99fd134561fb1"
},
{
"bytes": 684,
"path": "linuxcnc/src/emc/rs274ngc/meson.build",
"sha256": "98c1f76f3e1f9d4a0a0d78362a7aa85eb15e528bf1b79a0d7b4e7306a933a4d9"
},
{
"bytes": 1891,
"path": "linuxcnc/src/emc/rs274ngc/modal_state.cc",
"sha256": "2d28d76c8ca636594f4e83d25ae53365bfe733bd3b3af5673343f41e9a7130c8"
},
{
"bytes": 1962,
"path": "linuxcnc/src/emc/rs274ngc/modal_state.hh",
"sha256": "14459b9fab3d5818682f948b1411cff27bd36a7dbbf2cc9144ee1f365e5fbe0e"
},
{
"bytes": 33231,
"path": "linuxcnc/src/emc/rs274ngc/nurbs_additional_functions.cc",
"sha256": "64225f521e4067420cfa773dc93061fea198e3c8a9fc5937b62a6bcc76e80e30"
},
{
"bytes": 1436,
"path": "linuxcnc/src/emc/rs274ngc/paramclass.hh",
"sha256": "24d3d283359a9dc063dfeaf37b8a3105079df7ea4d89adb7553cabcba708d34d"
},
{
"bytes": 2544,
"path": "linuxcnc/src/emc/rs274ngc/pyarrays.cc",
"sha256": "00f6fc2eadb0426f2fb54443b097d13a79c1899e8cdcc98b6d873f35f9688a55"
},
{
"bytes": 5418,
"path": "linuxcnc/src/emc/rs274ngc/pyblock.cc",
"sha256": "e1861749e7eb4e2d6e9b5c212f48f5ec452be3a76af1fe66ea6b47b410aafbd2"
},
{
"bytes": 4067,
"path": "linuxcnc/src/emc/rs274ngc/pyemctypes.cc",
"sha256": "855ec693fb86f75b3d420808ce29691d01d09d9a664315def5cf79ed2b24d4af"
},
{
"bytes": 4550,
"path": "linuxcnc/src/emc/rs274ngc/pyinterp1.cc",
"sha256": "c1db7bae54730c987a466c81f23307ec33a5cd65fd07623fa5f473f2f455e4c2"
},
{
"bytes": 4338,
"path": "linuxcnc/src/emc/rs274ngc/pyparamclass.cc",
"sha256": "e685ca3ba693bd8f329bcc4dedd7b36d05db2556fc51a09e6549f4d9dbeebb88"
},
{
"bytes": 2392,
"path": "linuxcnc/src/emc/rs274ngc/rs274ngc.hh",
"sha256": "00c303490e8c44133603eeb1d661b16678468818b8e25f75adda981b3a757e57"
},
{
"bytes": 31741,
"path": "linuxcnc/src/emc/rs274ngc/rs274ngc_interp.hh",
"sha256": "c8bbcaa7a9545aa80055459dd3217a0b91bbc3ec034791752b5b25dea0c46fe0"
},
{
"bytes": 94199,
"path": "linuxcnc/src/emc/rs274ngc/rs274ngc_pre.cc",
"sha256": "73935d127557c0e8f9da6267f629351ec5198fbce05c665c678819383901d61b"
},
{
"bytes": 16799,
"path": "linuxcnc/src/emc/rs274ngc/rs274ngc_return.hh",
"sha256": "183974f6b7a15bf7e1578cf07d2a2ede1b188427d52368105ba7e9d28af96b7c"
},
{
"bytes": 1582,
"path": "linuxcnc/src/emc/rs274ngc/units.h",
"sha256": "a2d9148bab60dbb6f2ea41bd7b13ccd44986568b805711e0a12a6aff23c39a08"
},
{
"bytes": 1282,
"path": "linuxcnc/unit_tests/interp/interp_testing_util.hh",
"sha256": "18cb2d6075d163fff58e2892f84455f3cc3491e653e76c6531601eac39362d56"
},
{
"bytes": 179,
"path": "linuxcnc/unit_tests/interp/meson.build",
"sha256": "534b25743c0259e3757cc2b60fbe0edad23473a5262bc988992d576fb364385e"
},
{
"bytes": 23093,
"path": "linuxcnc/unit_tests/interp/test_interp_basics.cc",
"sha256": "0929d736e50c854624102d70d673d0eb15ce93a05af7993429b6f19deff57e74"
},
{
"bytes": 3135,
"path": "linuxcnc/unit_tests/interp/test_interp_block.cc",
"sha256": "c2c063b7255bb3b1a15ce2be34d5998a877235b18eca5435df487c8c87dfb81d"
},
{
"bytes": 637,
"path": "linuxcnc/unit_tests/interp/test_string_conversion.cc",
"sha256": "d6b056f762826da85385d0e235de4dc4d8f96a2b8ef64abe140c7baed09f6754"
},
{
"bytes": 595,
"path": "linuxcnc/unit_tests/interp/tests_main.cc",
"sha256": "f7ac2692b082bd9309535d2bebe11ace840395b00b63b64180b2857501956a4f"
}
],
"fingerprint_sha256": "ddf2667de41902ecdabb6c2466fe43236dafe4d17fa2c3b8ca37c398920eac02",
"roots": [
"linuxcnc/src/emc/rs274ngc",
"linuxcnc/unit_tests/interp"
]
},
"native_and_wasm": true,
"outputs": {
"bytes": 15523,
"file_count": 3,
"files": [
{
"bytes": 1872,
"path": "wasm-core/include/sim_interpreter.h",
"sha256": "7bf24098340e3da2272061acf7a43376c6c40fe9dffc55d012e3af65ceffedbb"
},
{
"bytes": 11585,
"path": "wasm-core/src/sim_interpreter.c",
"sha256": "9f9f45f7c123be774dcf55a752a29e6cc1f873a1605cf89c4caa4f4ab125e6a4"
},
{
"bytes": 2066,
"path": "wasm-core/tests/sim_interpreter_test.c",
"sha256": "c4fc3ba11b751ed9f3f770ff1ff164ce18aa19986003cf85d17a26de7aecd3ce"
}
],
"fingerprint_sha256": "440a472b1f24c6bc092e0181f58389a2fd7fab2fdb632583f1c650ec8db86d6e"
},
"schema": "interpreter-runtime-report.v1",
"status": "passed",
"supported_words": [
"G0",
"G1",
"G2",
"G3",
"G17",
"G18",
"G19",
"G20",
"G21",
"G90",
"G91",
"M2",
"M3",
"M4",
"M5",
"M30",
"X",
"Y",
"Z",
"A",
"B",
"C",
"U",
"V",
"W",
"F",
"S"
]
}

View File

@@ -0,0 +1,231 @@
{
"abi_version": 1,
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"contract_sha256": "3c338760a86122d25b76e5a27e26b9c79d8579e1ca96638ed932b8ca8e41283a",
"declared_functions": [
"sim_kinematics_forward",
"sim_kinematics_forward_ex",
"sim_kinematics_home",
"sim_kinematics_init",
"sim_kinematics_inverse",
"sim_kinematics_inverse_ex",
"sim_kinematics_state_hash",
"sim_kinematics_validate_pose"
],
"enums": {
"sim_kinematics_mode": [
{
"name": "SIM_KIN_MODE_DEFAULT",
"value": 0
},
{
"name": "SIM_KIN_MODE_IDENTITY",
"value": 1
},
{
"name": "SIM_KIN_MODE_FORWARD_ONLY",
"value": 2
},
{
"name": "SIM_KIN_MODE_INVERSE_ONLY",
"value": 3
},
{
"name": "SIM_KIN_MODE_BOTH",
"value": 4
}
],
"sim_kinematics_result": [
{
"name": "SIM_KIN_OK",
"value": 0
},
{
"name": "SIM_KIN_ERR_ARGUMENT",
"value": -700
},
{
"name": "SIM_KIN_ERR_NONFINITE",
"value": -701
},
{
"name": "SIM_KIN_ERR_RANGE",
"value": -702
},
{
"name": "SIM_KIN_ERR_CONFIGURATION",
"value": -703
},
{
"name": "SIM_KIN_ERR_SINGULAR",
"value": -704
},
{
"name": "SIM_KIN_ERR_UNKNOWN_TYPE",
"value": -705
},
{
"name": "SIM_KIN_ERR_UNSUPPORTED",
"value": -706
}
],
"sim_kinematics_type": [
{
"name": "SIM_KIN_TRIVKINS",
"value": 1
},
{
"name": "SIM_KIN_XYZAC_TRT",
"value": 2
},
{
"name": "SIM_KIN_XYZBC_TRT",
"value": 3
},
{
"name": "SIM_KIN_XYZBCW",
"value": 4
},
{
"name": "SIM_KIN_COREXY",
"value": 5
},
{
"name": "SIM_KIN_ROSE",
"value": 6
},
{
"name": "SIM_KIN_MAXKINS",
"value": 7
},
{
"name": "SIM_KIN_ROTATEKINS",
"value": 8
},
{
"name": "SIM_KIN_5AXISKINS",
"value": 9
},
{
"name": "SIM_KIN_SCARA",
"value": 10
},
{
"name": "SIM_KIN_PUMA",
"value": 11
},
{
"name": "SIM_KIN_SCORBOT",
"value": 12
},
{
"name": "SIM_KIN_GENSER",
"value": 13
}
]
},
"errors": {
"SIM_KIN_ERR_ARGUMENT": -700,
"SIM_KIN_ERR_CONFIGURATION": -703,
"SIM_KIN_ERR_NONFINITE": -701,
"SIM_KIN_ERR_RANGE": -702,
"SIM_KIN_ERR_SINGULAR": -704,
"SIM_KIN_ERR_UNKNOWN_TYPE": -705,
"SIM_KIN_ERR_UNSUPPORTED": -706,
"SIM_KIN_OK": 0
},
"exported_functions": [
"sim_kinematics_forward",
"sim_kinematics_forward_ex",
"sim_kinematics_home",
"sim_kinematics_init",
"sim_kinematics_inverse",
"sim_kinematics_inverse_ex",
"sim_kinematics_state_hash",
"sim_kinematics_validate_pose"
],
"inputs": {
"cmake": "wasm-core/CMakeLists.txt",
"cmake_sha256": "e9296a3983a531e4e6864d05e2e97c8dbf29e0dc9e45942ecc1a0a7222b3a660",
"header": "wasm-core/include/sim_kinematics.h",
"header_sha256": "5fd01043d705486b0d365e36109c3b0e0d39f220c2cec313b5b747dca06148bc"
},
"missing_required_exports": [],
"numeric_policy": {
"fast_math": false,
"fp_contract": "off",
"iteration_limit": 100000,
"nonfinite": "SIM_KIN_ERR_NONFINITE",
"state_hash": "FNV-1a-64"
},
"required_functions": [
"sim_kinematics_init",
"sim_kinematics_forward",
"sim_kinematics_forward_ex",
"sim_kinematics_inverse",
"sim_kinematics_inverse_ex",
"sim_kinematics_home",
"sim_kinematics_validate_pose",
"sim_kinematics_state_hash"
],
"schema": "kinematics-abi-contract.v1",
"status": "verified",
"structs": {
"sim_kinematics": [
"sim_kinematics_config config;",
"int axis_joint[SIM_KIN_MAX_JOINTS];",
"uint32_t configured;",
"uint64_t forward_flags;",
"uint64_t inverse_flags;",
"sim_posemath_pose last_pose;",
"double last_residual;",
"uint32_t last_iterations;",
"uint32_t branch_id;",
"int32_t revolution_count;",
"uint32_t previous_quadrant;"
],
"sim_kinematics_config": [
"int type;",
"int mode;",
"uint32_t joint_count;",
"uint32_t kinematics_joint_count;",
"uint32_t extra_joint_count;",
"char coordinates[16];",
"double x_rot_point;",
"double y_rot_point;",
"double z_rot_point;",
"double x_offset;",
"double y_offset;",
"double z_offset;",
"double tool_offset;",
"double pivot_length;",
"double scara_d1;",
"double scara_d2;",
"double scara_d3;",
"double scara_d4;",
"double scara_d5;",
"double scara_d6;",
"double puma_a2;",
"double puma_a3;",
"double puma_d3;",
"double puma_d4;",
"double puma_d6;",
"uint32_t dh_joint_count;",
"double dh_a[SIM_KIN_MAX_JOINTS];",
"double dh_alpha[SIM_KIN_MAX_JOINTS];",
"double dh_d[SIM_KIN_MAX_JOINTS];",
"uint32_t max_iterations;",
"double convergence_tolerance;",
"uint8_t limit_enabled[SIM_KIN_MAX_JOINTS];",
"double joint_min[SIM_KIN_MAX_JOINTS];",
"double joint_max[SIM_KIN_MAX_JOINTS];"
],
"sim_kinematics_result_info": [
"uint64_t forward_flags;",
"uint64_t inverse_flags;",
"double residual;",
"uint32_t iterations;",
"uint32_t branch_id;"
]
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,53 @@
{
"$id": "linuxcnc-web-wasm/kinematics-golden.v1",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"context_id": {
"type": "string"
},
"input": {
"type": "object"
},
"operation": {
"const": "fk_ik_fk_roundtrip"
},
"result": {
"additionalProperties": true,
"required": [
"status",
"error_code",
"kinematics_type",
"branch_id",
"flags",
"current_tick",
"config_hash",
"axis_joint_mapping"
],
"type": "object"
},
"sample_id": {
"type": "string"
},
"schema": {
"const": "kinematics-golden.v1"
},
"tolerances": {
"additionalProperties": {
"minimum": 0,
"type": "number"
},
"type": "object"
}
},
"required": [
"schema",
"context_id",
"sample_id",
"operation",
"input",
"result"
],
"title": "LinuxCNC Web/WASM kinematics FK/IK golden",
"type": "object"
}

View File

@@ -0,0 +1,92 @@
{
"axis_order": {
"A": 3,
"B": 4,
"C": 5,
"U": 6,
"V": 7,
"W": 8,
"X": 0,
"Y": 1,
"Z": 2
},
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"contract_sha256": "f79ad4af7f460b0d544d835fa63fe331d7c39907d7394edba1c7a3cbef612874",
"error_cases": [
"null_config",
"null_pose",
"nonfinite_joint",
"nonfinite_pose",
"joint_count_mismatch",
"enabled_limit_violation",
"invalid_coordinate",
"inverse_only_forward",
"forward_only_inverse"
],
"inputs": {
"header": "/home/mes006/linuxcncWebWASM/wasm-core/include/sim_kinematics.h",
"header_sha256": "db16293ec3645559a0be71a40963693f3d1e3f5fdedc92902be19b47f653dfa8",
"source": "/home/mes006/linuxcncWebWASM/wasm-core/src/sim_kinematics.c",
"source_sha256": "7a77915c59f190bcbe5c93d8f53498745bfcf978c167ba8878a21b914f9401fd"
},
"sample_mappings": [
{
"axis_joint": {
"X": 0,
"Y": 1,
"Z": 2
},
"coordinates": "XYZ"
},
{
"axis_joint": {
"X": 0,
"Y": 1,
"Z": 3
},
"coordinates": "XYYZ",
"duplicate": {
"axis": "Y",
"copies": [
2
],
"owner": 1
}
},
{
"axis_joint": {
"X": 0,
"Y": 1,
"Z": 3
},
"case_fold": true,
"coordinates": "xyyz"
},
{
"axis_joint": {
"A": 3,
"B": 4,
"C": 5,
"U": 6,
"V": 7,
"W": 8,
"X": 0,
"Y": 1,
"Z": 2
},
"coordinates": "XYZABCUVW"
}
],
"schema": "kinematics-mapping-contract.v1",
"semantics": {
"coordinate_case": "ASCII case-fold to uppercase",
"duplicate_axis": "first occurrence owns axis; later duplicates copy the first joint during inverse",
"extra_joints": "coordinates may repeat and joint_count remains authoritative",
"forward": "joint-to-pose uses mapped first joint for each axis",
"home": "zeroes all configured joints, then computes forward pose",
"inverse": "pose-to-joint initializes all joints then fills duplicates deterministically",
"limits": "enabled inclusive min/max; violation returns SIM_KIN_ERR_RANGE",
"state_hash": "includes config bytes, configured joint prefix and pose bytes"
},
"status": "verified"
}

View File

@@ -0,0 +1,74 @@
{
"angles": {
"constants": "full-precision DEG_TO_RAD/RAD_TO_DEG literals",
"input_units": "degrees for rotary joints",
"internal_units": "radians"
},
"boundary_matrix": [
{
"case": "NaN joint",
"expected": "SIM_KIN_ERR_NONFINITE"
},
{
"case": "+Inf pose",
"expected": "SIM_KIN_ERR_NONFINITE"
},
{
"case": "negative tolerance",
"expected": "SIM_KIN_ERR_CONFIGURATION"
},
{
"case": "iteration > 100000",
"expected": "SIM_KIN_ERR_CONFIGURATION"
},
{
"case": "XYZBC B=90 singular",
"expected": "SIM_KIN_ERR_SINGULAR"
},
{
"case": "enabled limit violation",
"expected": "SIM_KIN_ERR_RANGE"
}
],
"compiler": {
"denormals": "host-independent finite checks before arithmetic",
"fast_math": false,
"fenv_access": "default",
"fp_contract": "off"
},
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"exact_fields": [
"status",
"error_code",
"kinematics_type",
"branch_id",
"flags",
"current_tick",
"config_hash",
"axis_joint_mapping",
"event_order"
],
"inputs": {
"abi_contract_sha256": "3177c4d28200c5136981d28489ac4578a84360f9688ee8614e23af8d7526b50b",
"mapping_contract_sha256": "49bd93c716bd5b5eb6064f75ea2b8ba26dfa819c6166c22c5375ebeba927dd91"
},
"iterations": {
"default": 0,
"maximum": 100000,
"nonconvergence": "stable error; never repaired by tolerance widening",
"zero_means": "algorithm default"
},
"policy_sha256": "dcf2fdb6bf488f81ec55f43ebc3180f52665b54ba9cd9b4c6bbfb8dbd2a39560",
"schema": "kinematics-numeric-policy.v1",
"status": "verified",
"tolerances": {
"configuration_nonnegative": true,
"golden_absolute_default": 1e-09,
"golden_relative_default": 1e-09,
"singularity_threshold": 1e-12,
"state_hash_float_quantization": 1e-09,
"tolerance_applies_only_to": [
"finite numeric pose/joint fields"
]
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,599 @@
{
"blocked_count": 11,
"blocking_reasons": [
"linuxcnc/unit_tests/kinematics"
],
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"golden_schema": "coverage/kinematics-golden-schema.json",
"golden_schema_sha256": "8d6abe21ad350bb5a5ddc38d8fd9044ed2fa622f4331804a85cad55eb5a30a63",
"inputs": {
"closure": "coverage/kinematics-source-closure.report.json",
"closure_sha256": "d3af5e19e38d8dc2640323dcf755d0323e871815087b9eece9d76544b0b0cfa6",
"samples": "coverage/kinematics-oracle-samples.jsonl",
"samples_sha256": "df32ade49e3c3beb49e52d26200e37766dd04c5bee5dba4b1c87695439bf87bd"
},
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"ready_count": 0,
"records": [
{
"configuration_id": "config:linuxcnc/configs/sim/axis/anglejog/anglejog.ini:54:kinematics:trivkins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "cartesian",
"input": {
"joint": [
10.0,
-5.0,
2.5
]
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "cartesian",
"status": "blocked"
},
"sample_id": "kinematics-sample:cartesian:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/corexy/corexy_by_hal.hal:25:hal_transform:corexy_by_hal",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "coupled_linear",
"input": {
"joint": [
12.0,
4.0,
3.0
]
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "coupled_linear",
"status": "blocked"
},
"sample_id": "kinematics-sample:coupled_linear:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/vismach/5axis/bridgemill/5axis.ini:98:kinematics:5axiskins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "five_axis",
"input": {
"joint": [
10.0,
20.0,
30.0,
15.0,
-20.0
]
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "five_axis",
"status": "blocked"
},
"sample_id": "kinematics-sample:five_axis:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini:31:kinematics:xyzab_tdr_kins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "five_axis_trt",
"input": {
"joint": [
100.0,
50.0,
200.0,
30.0,
45.0
]
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "five_axis_trt",
"status": "blocked"
},
"sample_id": "kinematics-sample:five_axis_trt:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/ldelta.ini:59:kinematics:lineardeltakins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "parallel_delta",
"input": {
"pose": {
"abcuvw": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"tran": [
5.0,
-3.0,
-250.0
]
}
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "parallel_delta",
"status": "blocked"
},
"sample_id": "kinematics-sample:parallel_delta:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/vismach/hexapod-sim/hexapod.ini:76:kinematics:genhexkins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "parallel_hexapod",
"input": {
"pose": {
"abcuvw": [
1.0,
-1.0,
2.0,
0.0,
0.0,
0.0
],
"tran": [
0.0,
0.0,
100.0
]
}
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "parallel_hexapod",
"status": "blocked"
},
"sample_id": "kinematics-sample:parallel_hexapod:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/pentapod/pentapod.ini:113:kinematics:pentakins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "parallel_pentapod",
"input": {
"pose": {
"abcuvw": [
1.0,
2.0,
0.0,
0.0,
0.0,
0.0
],
"tran": [
0.0,
0.0,
75.0
]
}
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "parallel_pentapod",
"status": "blocked"
},
"sample_id": "kinematics-sample:parallel_pentapod:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/tklinuxcnc/tripod.ini:59:kinematics:tripodkins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "parallel_tripod",
"input": {
"pose": {
"abcuvw": [
2.0,
-1.0,
0.0,
0.0,
0.0,
0.0
],
"tran": [
1.0,
2.0,
100.0
]
}
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "parallel_tripod",
"status": "blocked"
},
"sample_id": "kinematics-sample:parallel_tripod:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini:7:kinematics:genserkins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "serial_robot",
"input": {
"joint": [
0.0,
-30.0,
45.0,
10.0,
20.0,
-15.0
]
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "serial_robot",
"status": "blocked"
},
"sample_id": "kinematics-sample:serial_robot:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini:3:switchkins:switchkins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "switchable",
"input": {
"joint": [
5.0,
6.0,
7.0,
30.0
],
"switch_sequence": [
0,
1,
0
]
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "switchable",
"status": "blocked"
},
"sample_id": "kinematics-sample:switchable:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
},
{
"configuration_id": "config:linuxcnc/tests/matrixkins/test.ini:53:kinematics:matrixkins",
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"execution": {
"native_smoke": {
"binary": "build-native/sim_kinematics_test",
"exit_code": 0,
"result_sha256": "96d4ce027200030704ead75b891ead3c3af9b39f60eaccaafa875e0e8d526e3a",
"status": "passed",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stdout_sha256": "4792c9d03a753904bfef11d4b53e680ec1ff00a8b593addd95f4d566aa722140"
},
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source; this definition is deterministic but cannot be accepted as the official native FK/IK oracle",
"status": "blocked"
},
"family": "user_static",
"input": {
"pose": {
"abcuvw": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"tran": [
10.0,
20.0,
30.0
]
}
},
"operation": "fk_ik_fk_roundtrip",
"result": {
"axis_joint_mapping": null,
"branch_id": null,
"config_hash": null,
"current_tick": 0,
"error_code": "MISSING_OFFICIAL_ORACLE",
"flags": null,
"kinematics_type": "user_static",
"status": "blocked"
},
"sample_id": "kinematics-sample:user_static:nominal-roundtrip",
"schema": "kinematics-golden.v1",
"tolerances": {
"absolute_tolerance": 1e-09,
"exact_fields": [
"status",
"flags",
"branch_id"
],
"invariant": "pose_roundtrip"
}
}
],
"report_fingerprint_sha256": "a501a60ae74340f05642468dc4911f56b9c5a3e93b0ccdb2e2a11657754cac7e",
"sample_count": 11,
"schema": "kinematics-oracle-report.v1",
"status": "blocked"
}

View File

@@ -0,0 +1,286 @@
{
"closure": {
"blocking_reason": "linuxcnc/unit_tests/kinematics is absent; official oracle remains blocked while the deterministic runtime slice is implemented",
"full_linuxcnc_kinematics": false,
"official_unit_tests_present": false,
"oracle_ready": false
},
"determinism": {
"byte_identical": true,
"native_ctest": "passed",
"runs": 2,
"state_hash_identical": true
},
"error_boundaries": [
"argument",
"nonfinite",
"range",
"configuration",
"singular",
"unsupported",
"unknown_type"
],
"implementation": "wasm-core/src/sim_kinematics.c",
"inputs": {
"bytes": 241271,
"file_count": 38,
"files": [
{
"bytes": 9705,
"path": "linuxcnc/src/emc/kinematics/5axiskins.c",
"sha256": "2e29fee21936cfbbafbb000290276e4b32eaba4831014e08d3fb833f2b3dac72"
},
{
"bytes": 1620,
"path": "linuxcnc/src/emc/kinematics/Submakefile",
"sha256": "1c207052f7321b3380891762da32b8985592c3dba3cc894a8fd946229809db69"
},
{
"bytes": 1202,
"path": "linuxcnc/src/emc/kinematics/blend.fig",
"sha256": "8ccf10df11d69958f286b3c8012fc239a07093d3789e5be9c96a6d487b92a89b"
},
{
"bytes": 2272,
"path": "linuxcnc/src/emc/kinematics/corexykins.c",
"sha256": "507963e0ed464440fa530db11b1b15c6a663182eb016855d105554ae8125ae5b"
},
{
"bytes": 9497,
"path": "linuxcnc/src/emc/kinematics/cubic.c",
"sha256": "64f9070d413fa0ebf94668d753e13d17049317899777b59ea100b30db00acda3"
},
{
"bytes": 1764,
"path": "linuxcnc/src/emc/kinematics/cubic.h",
"sha256": "00a9d34bb44045890221eeb0f44bd93b76b695b6e788405a8b6f78deae338436"
},
{
"bytes": 26308,
"path": "linuxcnc/src/emc/kinematics/genhexkins.c",
"sha256": "8df3d8bd812e040a06bc29ea91625fd143bacf26903b106ae6700430aca7f6b9"
},
{
"bytes": 3680,
"path": "linuxcnc/src/emc/kinematics/genhexkins.h",
"sha256": "580a2e1703a5c0efb683b4a26f805af434edcfe9d1ade7890e44307f8b0b236c"
},
{
"bytes": 22068,
"path": "linuxcnc/src/emc/kinematics/genserfuncs.c",
"sha256": "e4b775e93b973a4faae873c81a95d7d8361fe5c5c59ea81e362a5f900a1e8781"
},
{
"bytes": 2313,
"path": "linuxcnc/src/emc/kinematics/genserkins.c",
"sha256": "cbb87b9c21f9f5e1d6a3c5bd333f72a7b1b4f1618a21b32d4b34bc621b43e075"
},
{
"bytes": 5247,
"path": "linuxcnc/src/emc/kinematics/genserkins.h",
"sha256": "2e40cf061dafe050ad242f197b4acdbd916adcea41885e4edbb2b8c7b5423833"
},
{
"bytes": 9696,
"path": "linuxcnc/src/emc/kinematics/kinematics.h",
"sha256": "33b3744b9ceeeef3d992e9ca9cda89d93a3357d2d0a2af2023ca728e4be8e428"
},
{
"bytes": 12821,
"path": "linuxcnc/src/emc/kinematics/kins_util.c",
"sha256": "9a9dfbeb0f5d307b5fe99556b10a1869ccbcabc699be1bcfcfd80864ffb0288e"
},
{
"bytes": 4416,
"path": "linuxcnc/src/emc/kinematics/lineardeltakins-common.h",
"sha256": "7785bcd7d095b431169cdd0f753c177ece643ee825f7ff4b8cdb6f8cd4706df8"
},
{
"bytes": 2489,
"path": "linuxcnc/src/emc/kinematics/lineardeltakins.c",
"sha256": "792caf5f3fb8bf06d97a4bb7262697ac22182d78d91fed19e7a9e537585aa748"
},
{
"bytes": 1808,
"path": "linuxcnc/src/emc/kinematics/lineardeltakins.cc",
"sha256": "77634457a4dd3f5617f91a66651965c5b8326fc0d4dfc916d9cd63b89b0ec0f1"
},
{
"bytes": 3763,
"path": "linuxcnc/src/emc/kinematics/maxkins.c",
"sha256": "01529e0db1b698af621d63c30bc8ae382757dd367f3e4babc9b959873344b4e7"
},
{
"bytes": 699,
"path": "linuxcnc/src/emc/kinematics/meson.build",
"sha256": "a5de13a16e378a98c1c3df262881592396818510e835a5f2fe2101ed512072a3"
},
{
"bytes": 14441,
"path": "linuxcnc/src/emc/kinematics/pentakins.c",
"sha256": "1b385c2ab3a1bcb106d1d22a2dfe14519dba9c4a5df4cb31071a180845cda4c6"
},
{
"bytes": 1560,
"path": "linuxcnc/src/emc/kinematics/pentakins.h",
"sha256": "af8551454177bbcc85e4e17377e059573ab8c15dc022de2a4be9b70dead74e2d"
},
{
"bytes": 10870,
"path": "linuxcnc/src/emc/kinematics/pumakins.c",
"sha256": "5d473d34beacd696fc34719658e1622a1228494fe6596e277f4c34a51dfb91b2"
},
{
"bytes": 1232,
"path": "linuxcnc/src/emc/kinematics/pumakins.h",
"sha256": "a90cafe680533e0a8d43cf72c9f6bea380267d60090ea82ead4e3eb58bcddf58"
},
{
"bytes": 3839,
"path": "linuxcnc/src/emc/kinematics/rosekins.c",
"sha256": "1de39affa6b99f21c5e902fc67c8b1d8876d44fc8eff920afd816d7f956cfd78"
},
{
"bytes": 5753,
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins-common.h",
"sha256": "ba3e037fe2ad7eba29aa2b657492ac83f1979a38c9249fef52e598ba0d5c9136"
},
{
"bytes": 2964,
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins.c",
"sha256": "64c8aeb6998a481f3c26743093dd157d2d22dc6769b258e3e6012b5c1f784773"
},
{
"bytes": 1835,
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins.cc",
"sha256": "7e2fd63a2a7f5718d706faa21f903b36007226b065ad6d234631d2514f653618"
},
{
"bytes": 2372,
"path": "linuxcnc/src/emc/kinematics/rotatekins.c",
"sha256": "b104c7e0eb726f48b83daa4d596db5ca8021d803ab17dd123db9b9410ce5f47c"
},
{
"bytes": 7467,
"path": "linuxcnc/src/emc/kinematics/scarakins.c",
"sha256": "f6e37f7cf5b932fc27378ab9ed03ef71c2010aa38f883980a1b6c6b9265cf9f9"
},
{
"bytes": 11893,
"path": "linuxcnc/src/emc/kinematics/scorbot-kins.c",
"sha256": "89badd55ec168139143c58f67c64dbdb9e5b411c3b847404beaf79ba8c591b5d"
},
{
"bytes": 11718,
"path": "linuxcnc/src/emc/kinematics/switchkins.c",
"sha256": "4de32a4a147e5ceee5346b9c6bf471dddf5c64ff58afe5044406c50bcd96b7f5"
},
{
"bytes": 1184,
"path": "linuxcnc/src/emc/kinematics/switchkins.h",
"sha256": "f6e5323aa16daaac8e07bba622d0bf969102ad0d9c00d41621c08af31e0bb9b1"
},
{
"bytes": 9211,
"path": "linuxcnc/src/emc/kinematics/tripodkins.c",
"sha256": "0fb0876d2ab190e3bde69d3fe1ce0cebbb54adee2ddb4b05b929d7ca5cb3f31f"
},
{
"bytes": 2429,
"path": "linuxcnc/src/emc/kinematics/trivkins.c",
"sha256": "a08cd347b8dde7d7e201ddde93a1cdef47e8126e58f355d4270fccf6d48819bc"
},
{
"bytes": 13363,
"path": "linuxcnc/src/emc/kinematics/trtfuncs.c",
"sha256": "ced2f9d4732681e2e82153b2f6343eccdf6972222d558d1e277bf1ec0bdc87fd"
},
{
"bytes": 11327,
"path": "linuxcnc/src/emc/kinematics/ugenserkins.c",
"sha256": "dee63aebaa11f2867657bc4b9052f6a8e8bd875e06bd8a9df2d3edac9eb1c31d"
},
{
"bytes": 2653,
"path": "linuxcnc/src/emc/kinematics/userkfuncs.c",
"sha256": "146238645955f8d4e2cb0cd34ff44db3a9dad01e149f81c08f8a53c19f1609bc"
},
{
"bytes": 1896,
"path": "linuxcnc/src/emc/kinematics/xyzac-trt-kins.c",
"sha256": "24c633613db9876c2ec246e1519a63d288fd27c68296d89f89f0368105634e69"
},
{
"bytes": 1896,
"path": "linuxcnc/src/emc/kinematics/xyzbc-trt-kins.c",
"sha256": "d79c06db82930ef685809a87c7207398f7893f56a6a0dfe382df2c81eaeb9562"
}
],
"fingerprint_sha256": "ffde02b34018456bed7d47117425a239aa7205ccd0cb40ef021e80c42e85d9f2",
"roots": [
"linuxcnc/src/emc/kinematics",
"linuxcnc/unit_tests/kinematics"
]
},
"outputs": {
"bytes": 109761,
"file_count": 4,
"files": [
{
"bytes": 5446,
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "939d4088d9e7120e4a405be154eb3d98cd4e5925fc27d47641c115624c1bd994"
},
{
"bytes": 66830,
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "6abae835c16feb27ec1dc28a9ea5384f0bc5190217ba04a4997048d83066b905"
},
{
"bytes": 37392,
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "c9e4d20973c6a487787504bd5de9a73829f53d8bbfd35f91e72c6c62c76f191e"
},
{
"bytes": 93,
"path": "wasm-core/tests/sim_kinematics_test_main.c",
"sha256": "e567fe412145d3c9b04afc91d6efc6a53c3af3b3b52b7dda860cc289d42dbfc0"
}
],
"fingerprint_sha256": "a2c4d27905dd0b153450b195aee62967773733428df8236779ee418b6d15cc13"
},
"registered_build_targets": {
"native_ctest": true,
"native_sim_core": true,
"wasm_exports": [
"sim_kinematics_init",
"sim_kinematics_forward",
"sim_kinematics_forward_ex",
"sim_kinematics_inverse",
"sim_kinematics_inverse_ex",
"sim_kinematics_home"
],
"wasm_module": true
},
"schema": "kinematics-runtime-report.v1",
"status": "partial",
"supported_types": [
"trivkins",
"xyzac-trt",
"xyzbc-trt",
"xyzbcw",
"corexy",
"rose",
"maxkins",
"rotatekins",
"5axiskins",
"scara",
"puma",
"scorbot",
"genser",
"linear-delta",
"rotary-delta",
"tripod",
"genhex"
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,370 @@
{
"canonical": {
"byte_identical": true,
"deterministic_runs": 2,
"format": "fixed-order JSON",
"state_hash": "fnv1a64 over explicit state fields",
"state_hash_identical": true
},
"error_boundaries": [
"argument",
"nonfinite",
"range",
"geometry",
"motion_type",
"state",
"capacity",
"buffer"
],
"golden_tolerance": "exact_for_fixed_tick_inputs",
"implementation": "linuxcnc/src/emc/tp + linuxcnc/src/emc/motion + linuxcnc/src/emc/task",
"inputs": {
"bytes": 1030532,
"file_count": 60,
"files": [
{
"bytes": 11,
"path": "linuxcnc/src/emc/motion/.gitignore",
"sha256": "d3914918e9a01b5a71fe22bbbd13b428373ca2a6435b302e874f0c0dd78e05b2"
},
{
"bytes": 253,
"path": "linuxcnc/src/emc/motion/Submakefile",
"sha256": "d1c3457c41726a616fce23ff177669f71d0f718b568658903ccd313399f715d3"
},
{
"bytes": 23244,
"path": "linuxcnc/src/emc/motion/axis.c",
"sha256": "5c3fe99e672a72cc81c2ce74e36e225ff9e10a115c51f46729b135fd134922d8"
},
{
"bytes": 2027,
"path": "linuxcnc/src/emc/motion/axis.h",
"sha256": "aba94067deedbd163cfcb8ed3dbc1843b947f4ef8828360490521039d784f2df"
},
{
"bytes": 71866,
"path": "linuxcnc/src/emc/motion/command.c",
"sha256": "9d138ed5780a11ed037aa238781f4bfb4960a73ee23c0b0abf0724db068b3e3f"
},
{
"bytes": 84689,
"path": "linuxcnc/src/emc/motion/control.c",
"sha256": "fa1b14689e2e4493c02d0939f982278366d4c1888da62e172cec030904c82c50"
},
{
"bytes": 4525,
"path": "linuxcnc/src/emc/motion/dbuf.c",
"sha256": "605378315317999ee069477282134e64e9940e939892dbb5f433f77f103262ef"
},
{
"bytes": 2169,
"path": "linuxcnc/src/emc/motion/dbuf.h",
"sha256": "7f15618d30d07040f58110a9c1130140f6fb14705971578e8af554e3ef6dda87"
},
{
"bytes": 2202,
"path": "linuxcnc/src/emc/motion/emcmotcfg.h",
"sha256": "26ce8b18ae3b53e001215bc92330f65301de8832cc8764b239672c0a30e9e6f3"
},
{
"bytes": 1112,
"path": "linuxcnc/src/emc/motion/emcmotglb.c",
"sha256": "3fe47c93af71036340c517046062b6ce955fdd78c7369bc26aeff2fe51e2c4ab"
},
{
"bytes": 1314,
"path": "linuxcnc/src/emc/motion/emcmotglb.h",
"sha256": "7ba82587da304f62aa261e4647639cdcc8f7623699677462b82a19d503e7332f"
},
{
"bytes": 1925,
"path": "linuxcnc/src/emc/motion/emcmotutil.c",
"sha256": "275d601af6fdf115ecf1ca580c3d307ed5a150a8c9d03cf8cf071268e715d020"
},
{
"bytes": 1057,
"path": "linuxcnc/src/emc/motion/homemod.c",
"sha256": "df2e24e8d6c48d47448971b6e69471910a435d207a9d45f857a968aebf14ea5c"
},
{
"bytes": 59456,
"path": "linuxcnc/src/emc/motion/homing.c",
"sha256": "ee73d38f2feb8d5523b9a733cb17d635d3904667aaa219f8a02d7fbffee1ba39"
},
{
"bytes": 2265,
"path": "linuxcnc/src/emc/motion/homing.dot",
"sha256": "df3be34e18b97fdacef55e26dd8df9d1af9f1984d3782d460a3646e7e5dbe53d"
},
{
"bytes": 2868,
"path": "linuxcnc/src/emc/motion/homing.h",
"sha256": "fe33498e5a9c2a5aee6aebdab57a93742cba61018af8bd83f1d79edb28dbe0ed"
},
{
"bytes": 40,
"path": "linuxcnc/src/emc/motion/meson.build",
"sha256": "4b5493eb6bb0f9d745ede01e162b71a39c1572ab335ef493ced4c2554b6cc887"
},
{
"bytes": 15972,
"path": "linuxcnc/src/emc/motion/mot_priv.h",
"sha256": "92ea1ec7f18374e2f8867348586776a680dfec724ea373a257d77f36cc640c6b"
},
{
"bytes": 48444,
"path": "linuxcnc/src/emc/motion/motion.c",
"sha256": "c3d1404150b56cfb03ab35ecdf64694d60a6d37117d0617a8464d548133e79d3"
},
{
"bytes": 31857,
"path": "linuxcnc/src/emc/motion/motion.h",
"sha256": "640f10ec3d02d2955f1ffacd86e5b7078a631ff3c6703f201e0d04b177a17225"
},
{
"bytes": 1024,
"path": "linuxcnc/src/emc/motion/motion_struct.h",
"sha256": "2af32cecf7128793bbfcbb2840da8b7f32d836ce2b4524541581274bfd7ebe1f"
},
{
"bytes": 2315,
"path": "linuxcnc/src/emc/motion/simple_tp.c",
"sha256": "5a0026f4d5bdd9d1bc55290c6ea9c399abd664633b69413c307f7353953d2603"
},
{
"bytes": 2046,
"path": "linuxcnc/src/emc/motion/simple_tp.h",
"sha256": "a6b72ddaf4a14801f95b625d824c2ea1625db5dce765db2d3b1f96a4730afca7"
},
{
"bytes": 3561,
"path": "linuxcnc/src/emc/motion/stashf.c",
"sha256": "3017fd1732c037729c9bd1eb998752b225774f51c11bf76f159b7669d9176fe2"
},
{
"bytes": 1289,
"path": "linuxcnc/src/emc/motion/stashf.h",
"sha256": "5fcbde679a78958552430b3af95fbf4d3012669ecaf1a28c68f4ca9f16efbddd"
},
{
"bytes": 2859,
"path": "linuxcnc/src/emc/motion/stashf_wrap.h",
"sha256": "625cc7d8df30b351f243bc3f1687f5ef9758cb4243efd0c2196d9c71c64c7793"
},
{
"bytes": 4167,
"path": "linuxcnc/src/emc/motion/state_tag.h",
"sha256": "e53b2989929b43aeb90167e0b352aeaddbe55344b0e7e5ccdfb81881a7eaffd1"
},
{
"bytes": 5895,
"path": "linuxcnc/src/emc/motion/teleop-notes",
"sha256": "6ac654e450157beb0ded79386f4b59ac08553f452be544f27b091f4b97030ae4"
},
{
"bytes": 19321,
"path": "linuxcnc/src/emc/motion/usrmotintf.cc",
"sha256": "44e3413daef771bf6104eb48ae7279ff60625b87c19063bf3097639fb8e1d818"
},
{
"bytes": 3058,
"path": "linuxcnc/src/emc/motion/usrmotintf.h",
"sha256": "1f5f6eb571ce0ea73084f0c8248182c3101359c855d6ca70ef46dde7ad94b3d3"
},
{
"bytes": 1259,
"path": "linuxcnc/src/emc/task/Submakefile",
"sha256": "c0f97c488c655acffeb91208d6ba0592a7252d33bf856cdacd37876ffaca78fb"
},
{
"bytes": 2725,
"path": "linuxcnc/src/emc/task/backtrace.cc",
"sha256": "07060b5eda02cead50c66edc20a2154fbd97cf432d27f98e31da08029c1875db"
},
{
"bytes": 126928,
"path": "linuxcnc/src/emc/task/emccanon.cc",
"sha256": "87bc78d9594e1d0042b28e75b0faa01f650b33c901887dbe686a0927b0eba699"
},
{
"bytes": 5337,
"path": "linuxcnc/src/emc/task/emcsvr.cc",
"sha256": "494cc0f5d5042c37ddd10da2f1e731b7c6c615027972a014ee4b9e6c7104482c"
},
{
"bytes": 19313,
"path": "linuxcnc/src/emc/task/emctask.cc",
"sha256": "db3996e57edbf042cc0ff85580ac62728491fb55e7236219a3a76bfbee6beee9"
},
{
"bytes": 105741,
"path": "linuxcnc/src/emc/task/emctaskmain.cc",
"sha256": "77490e65a1d3436086bedbfee68d6f467ca2d1a50139c64b3ace0dd4ed63022e"
},
{
"bytes": 4344,
"path": "linuxcnc/src/emc/task/signalhandler.cc",
"sha256": "fee333fda054449c7d49fed107b741d5ffd87eabc5881631e522ca68baf32288"
},
{
"bytes": 2194,
"path": "linuxcnc/src/emc/task/task.hh",
"sha256": "74a2c27fbf06d389d190ec8bca9d2163cca7645cec2fbc45761fc702f7441da8"
},
{
"bytes": 21110,
"path": "linuxcnc/src/emc/task/taskclass.cc",
"sha256": "837dbf1ca0fabed601baeca6a3785e6880330e763b2cfd363d121a5099935431"
},
{
"bytes": 2007,
"path": "linuxcnc/src/emc/task/taskclass.hh",
"sha256": "529f5d44ec108d3e523145a11da9fcf171486711ec98580e5067adaf8ee75799"
},
{
"bytes": 56981,
"path": "linuxcnc/src/emc/task/taskintf.cc",
"sha256": "017db5aeb5f6dcfbf138927b5114bdf4385e385309fd544f62275e6280a45834"
},
{
"bytes": 19270,
"path": "linuxcnc/src/emc/task/taskmodule.cc",
"sha256": "dd139359b01b3616e33dfa405203c2af4a854d2c71ebc2aa0943a3db46568216"
},
{
"bytes": 225,
"path": "linuxcnc/src/emc/tp/Submakefile",
"sha256": "8af41d532de2a2bbcc6ec0238c88547fbf14ad80a666fa1fc5c39d2c27d016fc"
},
{
"bytes": 58264,
"path": "linuxcnc/src/emc/tp/blendmath.c",
"sha256": "27b9b1192f273f77d52b7810dbd633e8ffd03f0e3127015eafae475e18b0666a"
},
{
"bytes": 9443,
"path": "linuxcnc/src/emc/tp/blendmath.h",
"sha256": "48276307d04edfaf63a394e41aa62f698e29787884d1cd23673f18763c4088f1"
},
{
"bytes": 136,
"path": "linuxcnc/src/emc/tp/meson.build",
"sha256": "1dba7d81a6cb02c6ed1dcd8d5e54f41a7c6bce3a46ddd95744c98409a4f6c6a7"
},
{
"bytes": 6293,
"path": "linuxcnc/src/emc/tp/spherical_arc.c",
"sha256": "58a31693ffc61528c4e8842386fcd0267ab28edef4a27b2aa91d1b7af85fc934"
},
{
"bytes": 2284,
"path": "linuxcnc/src/emc/tp/spherical_arc.h",
"sha256": "24369c82fd770cdfd392c8ae8a2e30a46e04b44a3ed6bbd8745d45bc85147801"
},
{
"bytes": 28016,
"path": "linuxcnc/src/emc/tp/tc.c",
"sha256": "ff2a123adaa198c71dcd9a9c1a3a403ab25f9d6c217684afc4a093829adef2c1"
},
{
"bytes": 3888,
"path": "linuxcnc/src/emc/tp/tc.h",
"sha256": "48caa2255744257b9b8e37812766f7feb3d012d1891dfdd6634edd32f1c65ba5"
},
{
"bytes": 6363,
"path": "linuxcnc/src/emc/tp/tc_types.h",
"sha256": "5ce27b5a545d8b4acaf119bf314fc4fed9320c22f975d786b7b2ec94d8029cb5"
},
{
"bytes": 8541,
"path": "linuxcnc/src/emc/tp/tcq.c",
"sha256": "2eb9de3c38d4d86338bda149baf52f9e9c87111cac9dff2b17884a2deb0feb05"
},
{
"bytes": 2181,
"path": "linuxcnc/src/emc/tp/tcq.h",
"sha256": "61f516f51a78f505fc2d2ee60c967de2c35dce298def5466e4b8a5a9aa7fcbd2"
},
{
"bytes": 121641,
"path": "linuxcnc/src/emc/tp/tp.c",
"sha256": "e0e4be6ef0b0a6c8b5eee32db9307986651938bc72c4e2c44750133b8da4dba8"
},
{
"bytes": 3534,
"path": "linuxcnc/src/emc/tp/tp.h",
"sha256": "e36449a34f0ae67fa15e570b3c3117d39d3bada44c9e1ba61e7aa52533c46f17"
},
{
"bytes": 1736,
"path": "linuxcnc/src/emc/tp/tp_debug.h",
"sha256": "033eab89f8378ed781b4c494ca4abba986282f83cb0ca7288bf56b5a5e4c6228"
},
{
"bytes": 4556,
"path": "linuxcnc/src/emc/tp/tp_types.h",
"sha256": "2d552b57e2ae7cd71dede51c0a1adc86a01173dc24d49d8bbdb8467e0a85d18d"
},
{
"bytes": 1025,
"path": "linuxcnc/src/emc/tp/tpmod.c",
"sha256": "1420f5777e0d1063709a6fdf4e391ec64abc43f9dd1da0838571052a92139d94"
},
{
"bytes": 48,
"path": "linuxcnc/unit_tests/tp/meson.build",
"sha256": "625c4249c225fed116bc998530cc539703c341cb3426851aedaae58f4291de3d"
},
{
"bytes": 2318,
"path": "linuxcnc/unit_tests/tp/test_blendmath.c",
"sha256": "0b2aaf0ec2506a4c2fd43a236f01c6c4e08fbf58998126926a8690a314d4d855"
}
],
"fingerprint_sha256": "4c8f89826279721c328be9b167798e59c811568a3b830dd2d1faf5d39b1c34e1",
"roots": [
"linuxcnc/src/emc/tp",
"linuxcnc/src/emc/motion",
"linuxcnc/src/emc/task",
"linuxcnc/unit_tests/tp"
]
},
"native_and_wasm": true,
"outputs": {
"bytes": 10996,
"file_count": 3,
"files": [
{
"bytes": 1819,
"path": "wasm-core/include/sim_motion_queue.h",
"sha256": "c26af2b5cff6cbc687f621d745601ff287eebd62011ea46fc7fa692b446a08cc"
},
{
"bytes": 7791,
"path": "wasm-core/src/sim_motion_queue.c",
"sha256": "56074e27df90bc1b60134eac3cdf84c78149388f99a19a027f6714e3784b04ed"
},
{
"bytes": 1386,
"path": "wasm-core/tests/sim_motion_queue_test.c",
"sha256": "882c90f9963b2433b868859c50a91dbdecef93454039b05b11241c1f76c13f31"
}
],
"fingerprint_sha256": "4c4afb2b2787d69c962edccf2db7dfc9a94a4e4bbf29ab095c409b7373d218cd"
},
"queue": {
"capacity": 64,
"continuity_tolerance": 1e-12,
"motion_types": [
1,
2,
3,
4
],
"tick": "fixed cycle_time"
},
"schema": "motion-runtime-report.v1",
"status": "passed"
}

View File

@@ -0,0 +1,248 @@
{
"configuration_candidate": {
"coordinates": "XYZAB",
"hal_geometry": {
"base": [
-418.0,
500.0,
-140.0,
418.0,
500.0,
-140.0,
0.0,
500.0,
-310.0,
418.0,
500.0,
510.0,
-418.0,
500.0,
510.0
],
"effector_radius": [
80.3,
80.3,
80.3,
80.3,
80.3
],
"effector_z": [
87.0,
114.5,
140.5,
232.5,
258.5
]
},
"hal_pins": [
"last-iterations",
"max-iterations",
"limit-iterations",
"max-error",
"convergence-criterion",
"tool-offset"
],
"joints": 5,
"kinematics": "pentakins",
"path": "linuxcnc/configs/sim/axis/pentapod/pentapod.ini",
"scan": true
},
"geometry": {
"orientation": "roll/pitch only; yaw fixed at zero",
"struts": 5,
"units": "configuration units; XYZ linear and AB degrees"
},
"implementation_status": "verified",
"mapping": {
"coordinates": "XYZAB",
"extra_joint_policy": "rejected",
"joint_semantics": [
"strut-0",
"strut-1",
"strut-2",
"strut-3",
"strut-4"
],
"kinematics_joint_count": 5
},
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"blocked_samples": [
"nominal five-strut pose",
"negative-z seed",
"nonpositive strut",
"iteration limit",
"maximum error",
"singular Jacobian",
"joint limit"
],
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "b1d1cdc8fbd64b64ffa88023c77c7ce097952966353567b023c0667a8dc1be75",
"samples": {
"byte_identical_json": true,
"native": {
"boundaries": {
"alternate_branch": 0,
"alternate_pose": [
0.0,
0.0,
0.0
],
"alternate_status": -702,
"branch": 0,
"iteration_limit": -702,
"iterations": 1,
"limit_error": -702,
"max_error": -702,
"nonpositive": -702,
"residual": 0.0,
"singular": -704
},
"pentapod": {
"inverse": [
619.814203778,
655.78680467,
750.465994974,
351.035577947,
327.336726304
],
"iterations": 1,
"pose": [
0.0,
500.0,
300.0,
2.0,
-3.0
],
"residual": 0.0,
"state_hash": 10088895819155863850
}
},
"state_hash_identical": true,
"wasm": {
"boundaries": {
"alternate_branch": 0,
"alternate_pose": [
0.0,
0.0,
0.0
],
"alternate_status": -702,
"branch": 0,
"iteration_limit": -702,
"iterations": 1,
"limit_error": -702,
"max_error": -702,
"nonpositive": -702,
"residual": 0.0,
"singular": -704
},
"pentapod": {
"inverse": [
619.814203778,
655.78680467,
750.465994974,
351.035577947,
327.336726304
],
"iterations": 1,
"pose": [
0.0,
500.0,
300.0,
2.0,
-3.0
],
"residual": 0.0,
"state_hash": 10088895819155863850
}
}
},
"schema": "pentapod-kinematics-report.v1",
"solver": {
"alternate_seed_flag": "SIM_KIN_GENHEX_ALTERNATE_SEED bit 1; negative-z seed is explicitly bounded",
"default_convergence_tolerance": 1e-09,
"default_iteration_limit": 120,
"default_max_error": 1000.0,
"forward": "Newton-Raphson 5x5 numerical Jacobian",
"inverse": "closed-form radial/z strut lengths",
"seed": [
0.0,
500.0,
300.0,
0.0,
0.0
]
},
"source_records": {
"config": {
"path": "linuxcnc/configs/sim/axis/pentapod/pentapod.ini",
"sha256": "0fb210122ab482087d3a95e5e7487baecb84c3260dca1769970f4c19b2ad0618"
},
"hal": {
"path": "linuxcnc/configs/sim/axis/pentapod/kinematics.hal",
"sha256": "cf56ea1c1fe2b49d1af6a771bd73ea43ecc7a37991717b68a1e017c101bc6ae2"
},
"header": {
"path": "linuxcnc/src/emc/kinematics/pentakins.h",
"sha256": "af8551454177bbcc85e4e17377e059573ab8c15dc022de2a4be9b70dead74e2d"
},
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "424873c8e5d3d5b45daf616d95a58157c6dbcbbee9f4cc512b58bfb2672c6145"
},
"kinematics_header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "0c6d955717982e9d1a24d1240a1c657fc37dfe166c5738d3ee23878e46b2a98d"
},
"source": {
"path": "linuxcnc/src/emc/kinematics/pentakins.c",
"sha256": "1b385c2ab3a1bcb106d1d22a2dfe14519dba9c4a5df4cb31071a180845cda4c6"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "3bda403d3af592dcc69ee9b1f3c96dda97b952f827a1c9ce5393e01cd357c403"
}
},
"status": "partial",
"workspace_and_boundaries": {
"alternate_seed": [
0.0,
0.0,
0.0
],
"alternate_seed_error": -702,
"iteration_limit_error": -702,
"iterations": 1,
"joint_limit_error": -702,
"max_error_boundary": -702,
"nominal": {
"inverse": [
619.814203778,
655.78680467,
750.465994974,
351.035577947,
327.336726304
],
"iterations": 1,
"pose": [
0.0,
500.0,
300.0,
2.0,
-3.0
],
"residual": 0.0,
"state_hash": 10088895819155863850
},
"nonpositive_joint_error": -702,
"residual": 0.0,
"singular_jacobian_error": -704
}
}

View File

@@ -1,10 +1,230 @@
{
"schema": "posemath-runtime-report.v1",
"status": "passed",
"implementation": "linuxcnc/src/libnml/posemath",
"linked_sources": ["_posemath.c", "gomath.c", "sincos.c", "posemath.cc"],
"adapter_operations": ["normalize", "dot", "line_point", "is_finite"],
"error_boundaries": ["nonfinite", "degenerate", "range"],
"adapter_operations": [
"normalize",
"dot",
"line_point",
"pose_line_point",
"segment_validate",
"segment_point",
"is_finite"
],
"determinism": {
"byte_identical": true,
"runs": 2,
"state_hash_algorithm": "fnv1a64 over sim_tp_state object bytes",
"state_hash_identical": true
},
"error_boundaries": [
"argument",
"nonfinite",
"degenerate",
"range",
"motion_type",
"state",
"capacity"
],
"fixed_float": {
"contract": "off",
"fast_math": false,
"standard": "IEEE-754 binary64"
},
"golden_tolerance": "exact_for_adapter_inputs",
"implementation": "linuxcnc/src/libnml/posemath + linuxcnc/src/emc/tp",
"inputs": {
"bytes": 488358,
"file_count": 28,
"files": [
{
"bytes": 712,
"path": "linuxcnc/src/libnml/posemath/Submakefile",
"sha256": "ce99301b14a570f3a5a6832d214131cc5331d655b76a0078803112b1f229b6ac"
},
{
"bytes": 47948,
"path": "linuxcnc/src/libnml/posemath/_posemath.c",
"sha256": "b75ca68deef765090923cbbbd2fc8317d131c53c06fbbbc78b25ba331aeddd31"
},
{
"bytes": 89361,
"path": "linuxcnc/src/libnml/posemath/gomath.c",
"sha256": "0095605a866d95d3cfce0236e9479e477a276a884bb05b50a63a474f08bc2f12"
},
{
"bytes": 28115,
"path": "linuxcnc/src/libnml/posemath/gomath.h",
"sha256": "9a05762201ea93126a768b1bb717f8593786d591a38b17852565cb93103a9d85"
},
{
"bytes": 4700,
"path": "linuxcnc/src/libnml/posemath/gotypes.h",
"sha256": "977fd4907da53fa831d1f3e85ae41e8018fe8fbd2540db25f53dc83966e8dd91"
},
{
"bytes": 169,
"path": "linuxcnc/src/libnml/posemath/meson.build",
"sha256": "a48bc583c107d469ac6ec2df51b36b65caa5d8a476b906a4dbbba9d7d896ddf7"
},
{
"bytes": 23563,
"path": "linuxcnc/src/libnml/posemath/posemath.cc",
"sha256": "c83f52c26bd233d9403488f5f38df5121602d842948ad4dc2c37789e18c5f67f"
},
{
"bytes": 32215,
"path": "linuxcnc/src/libnml/posemath/posemath.h",
"sha256": "23205524123476e0a17da40983bdf0aad529684294884c5144f50380d190da69"
},
{
"bytes": 575,
"path": "linuxcnc/src/libnml/posemath/sincos.c",
"sha256": "69b2671ecbdaa6d3c771e4ef267d2fb8abbddeaa3bf6c08d02d4e222e5b2c8fe"
},
{
"bytes": 508,
"path": "linuxcnc/src/libnml/posemath/sincos.h",
"sha256": "1866f1647e0834c687e541f8f0540799026d6e9eeff97b7ec8dc5e6ec4438e08"
},
{
"bytes": 225,
"path": "linuxcnc/src/emc/tp/Submakefile",
"sha256": "8af41d532de2a2bbcc6ec0238c88547fbf14ad80a666fa1fc5c39d2c27d016fc"
},
{
"bytes": 58264,
"path": "linuxcnc/src/emc/tp/blendmath.c",
"sha256": "27b9b1192f273f77d52b7810dbd633e8ffd03f0e3127015eafae475e18b0666a"
},
{
"bytes": 9443,
"path": "linuxcnc/src/emc/tp/blendmath.h",
"sha256": "48276307d04edfaf63a394e41aa62f698e29787884d1cd23673f18763c4088f1"
},
{
"bytes": 136,
"path": "linuxcnc/src/emc/tp/meson.build",
"sha256": "1dba7d81a6cb02c6ed1dcd8d5e54f41a7c6bce3a46ddd95744c98409a4f6c6a7"
},
{
"bytes": 6293,
"path": "linuxcnc/src/emc/tp/spherical_arc.c",
"sha256": "58a31693ffc61528c4e8842386fcd0267ab28edef4a27b2aa91d1b7af85fc934"
},
{
"bytes": 2284,
"path": "linuxcnc/src/emc/tp/spherical_arc.h",
"sha256": "24369c82fd770cdfd392c8ae8a2e30a46e04b44a3ed6bbd8745d45bc85147801"
},
{
"bytes": 28016,
"path": "linuxcnc/src/emc/tp/tc.c",
"sha256": "ff2a123adaa198c71dcd9a9c1a3a403ab25f9d6c217684afc4a093829adef2c1"
},
{
"bytes": 3888,
"path": "linuxcnc/src/emc/tp/tc.h",
"sha256": "48caa2255744257b9b8e37812766f7feb3d012d1891dfdd6634edd32f1c65ba5"
},
{
"bytes": 6363,
"path": "linuxcnc/src/emc/tp/tc_types.h",
"sha256": "5ce27b5a545d8b4acaf119bf314fc4fed9320c22f975d786b7b2ec94d8029cb5"
},
{
"bytes": 8541,
"path": "linuxcnc/src/emc/tp/tcq.c",
"sha256": "2eb9de3c38d4d86338bda149baf52f9e9c87111cac9dff2b17884a2deb0feb05"
},
{
"bytes": 2181,
"path": "linuxcnc/src/emc/tp/tcq.h",
"sha256": "61f516f51a78f505fc2d2ee60c967de2c35dce298def5466e4b8a5a9aa7fcbd2"
},
{
"bytes": 121641,
"path": "linuxcnc/src/emc/tp/tp.c",
"sha256": "e0e4be6ef0b0a6c8b5eee32db9307986651938bc72c4e2c44750133b8da4dba8"
},
{
"bytes": 3534,
"path": "linuxcnc/src/emc/tp/tp.h",
"sha256": "e36449a34f0ae67fa15e570b3c3117d39d3bada44c9e1ba61e7aa52533c46f17"
},
{
"bytes": 1736,
"path": "linuxcnc/src/emc/tp/tp_debug.h",
"sha256": "033eab89f8378ed781b4c494ca4abba986282f83cb0ca7288bf56b5a5e4c6228"
},
{
"bytes": 4556,
"path": "linuxcnc/src/emc/tp/tp_types.h",
"sha256": "2d552b57e2ae7cd71dede51c0a1adc86a01173dc24d49d8bbdb8467e0a85d18d"
},
{
"bytes": 1025,
"path": "linuxcnc/src/emc/tp/tpmod.c",
"sha256": "1420f5777e0d1063709a6fdf4e391ec64abc43f9dd1da0838571052a92139d94"
},
{
"bytes": 48,
"path": "linuxcnc/unit_tests/tp/meson.build",
"sha256": "625c4249c225fed116bc998530cc539703c341cb3426851aedaae58f4291de3d"
},
{
"bytes": 2318,
"path": "linuxcnc/unit_tests/tp/test_blendmath.c",
"sha256": "0b2aaf0ec2506a4c2fd43a236f01c6c4e08fbf58998126926a8690a314d4d855"
}
],
"fingerprint_sha256": "bb921823ad630db52343b52fb1d8074c8e333ceedb0735949ff5a74596c98dc7",
"roots": [
"linuxcnc/src/libnml/posemath",
"linuxcnc/src/emc/tp",
"linuxcnc/unit_tests/tp"
]
},
"linked_sources": [
"_posemath.c",
"gomath.c",
"sincos.c",
"posemath.cc"
],
"motion_types": {
"circular": 2,
"linear": 1,
"rigid_tap": 3,
"spherical": 4
},
"native_and_wasm": true,
"golden_tolerance": "exact_for_adapter_inputs"
"outputs": {
"bytes": 19323,
"file_count": 3,
"files": [
{
"bytes": 3280,
"path": "wasm-core/include/sim_posemath.h",
"sha256": "fef257b09f68e5649f0acacfcd3590d699d6f678927fbf8db7d103a40bf7da62"
},
{
"bytes": 13491,
"path": "wasm-core/src/sim_posemath.c",
"sha256": "939b221ed6ede1229d26c170ab3514884d5bafc90854ab09db641925859b5e8d"
},
{
"bytes": 2552,
"path": "wasm-core/tests/sim_posemath_test.c",
"sha256": "751910f2bcd740c963b008e1ae4cb1dd058d2942ab1d63dd0a9f510a20a408d2"
}
],
"fingerprint_sha256": "7db9f98a48f6f945374d367bdb878348704db218a426e6baf926ec358b607bc1"
},
"schema": "posemath-runtime-report.v2",
"status": "passed",
"tp_operations": [
"init",
"reset",
"enqueue",
"step",
"read_state",
"state_hash"
]
}

View File

@@ -0,0 +1,229 @@
{
"boundaries": {
"puma_unreachable_or_singular": "SIM_KIN_ERR_RANGE/SINGULAR verified",
"scara_unreachable": "SIM_KIN_ERR_RANGE verified",
"scorbot_unreachable": "SIM_KIN_ERR_RANGE verified",
"state_hash": "native/WASM identical after 1e-9 hash quantization"
},
"configuration_candidates": {
"puma": {
"coordinates": "XYZABC",
"joints": 6,
"kinematics": "pumakins",
"origin": "shipped",
"path": "linuxcnc/configs/sim/axis/vismach/puma/puma.ini",
"scan": true
},
"scara": {
"coordinates": "xyzcab",
"joints": 6,
"kinematics": "scarakins",
"origin": "shipped",
"path": "linuxcnc/configs/sim/axis/vismach/scara/scara.ini",
"scan": true
},
"scorbot": {
"coordinates": "XYZAB",
"joints": 5,
"kinematics": "scorbot-kins",
"origin": "workspace_derived_fixture; source has no shipped sim INI",
"path": "linuxcnc/configs/sim/axis/vismach/scorbot/scorbot.ini",
"scan": true
}
},
"geometry": {
"puma": {
"branches": [
"shoulder",
"elbow",
"wrist flip"
],
"parameters": {
"A2": 400.0,
"A3": 50.0,
"D3": 100.0,
"D4": 400.0,
"D6": 95.0
},
"singularity": "wrist t1/t2 threshold"
},
"scara": {
"branch": "elbow flag selects q1 sign",
"defaults": {
"D1": 490.0,
"D2": 340.0,
"D3": 50.0,
"D4": 250.0,
"D5": 50.0,
"D6": 50.0
},
"orientation": "C=a0+a1+a3"
},
"scorbot": {
"branch": "fixed elbow solution from source",
"controlled_point": "wrist J3/J4",
"links_mm": {
"L0_horizontal": 16.0,
"L0_vertical": 140.0,
"L1": 221.0,
"L2": 221.0
}
}
},
"implementation_status": "verified",
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "fad0d9058ca41776a07fd7b88d467b0d8f96135e036f0e887c9583c78a4f97ea",
"samples": {
"byte_identical_json": true,
"native": {
"puma": {
"inverse": [
10.0,
20.0,
-30.0,
40.0,
25.0,
-15.0
],
"pose": [
450.112320486,
207.114833215,
-612.180622409
],
"state_hash": 3161234248163340028
},
"scara": {
"inverse": [
-3.644300703,
40.0,
25.0,
-31.355699297,
5.0,
-3.0
],
"pose": [
590.460310444,
130.945742721,
465.0
],
"state_hash": 4515826253922604237
},
"scorbot": {
"inverse": [
25.0,
35.0,
-20.0,
10.0,
-5.0
],
"pose": [
366.786994761,
171.035584569,
191.173940759
],
"state_hash": 16037922903473574131
}
},
"wasm": {
"puma": {
"inverse": [
10.0,
20.0,
-30.0,
40.0,
25.0,
-15.0
],
"pose": [
450.112320486,
207.114833215,
-612.180622409
],
"state_hash": 3161234248163340028
},
"scara": {
"inverse": [
-3.644300703,
40.0,
25.0,
-31.355699297,
5.0,
-3.0
],
"pose": [
590.460310444,
130.945742721,
465.0
],
"state_hash": 4515826253922604237
},
"scorbot": {
"inverse": [
25.0,
35.0,
-20.0,
10.0,
-5.0
],
"pose": [
366.786994761,
171.035584569,
191.173940759
],
"state_hash": 16037922903473574131
}
}
},
"schema": "robot-kinematics-report.v1",
"source_records": {
"header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "db16293ec3645559a0be71a40963693f3d1e3f5fdedc92902be19b47f653dfa8"
},
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "7a77915c59f190bcbe5c93d8f53498745bfcf978c167ba8878a21b914f9401fd"
},
"puma_config": {
"path": "linuxcnc/configs/sim/axis/vismach/puma/puma.ini",
"sha256": "26ee23af27aa03d2da89b842992802ece2423195a5ac0960b28bb751871d74f6"
},
"puma_params": {
"path": "linuxcnc/configs/sim/axis/vismach/puma/puma_dh.hal",
"sha256": "b57992601bf614c26e53c8add3c3aac0a0df79929dd64f897a19630437d1c181"
},
"puma_source": {
"path": "linuxcnc/src/emc/kinematics/pumakins.c",
"sha256": "5d473d34beacd696fc34719658e1622a1228494fe6596e277f4c34a51dfb91b2"
},
"scara_config": {
"path": "linuxcnc/configs/sim/axis/vismach/scara/scara.ini",
"sha256": "602e02bb6d320b728d9ae15904a5d229ea1a31e932c18e9018b45be007d695ce"
},
"scara_source": {
"path": "linuxcnc/src/emc/kinematics/scarakins.c",
"sha256": "f6e37f7cf5b932fc27378ab9ed03ef71c2010aa38f883980a1b6c6b9265cf9f9"
},
"scorbot_config": {
"path": "linuxcnc/configs/sim/axis/vismach/scorbot/scorbot.ini",
"sha256": "4e8edd061a033d45e1e71c56bdd521ee10d3f60def3be020bbd437fc49271343"
},
"scorbot_source": {
"path": "linuxcnc/src/emc/kinematics/scorbot-kins.c",
"sha256": "89badd55ec168139143c58f67c64dbdb9e5b411c3b847404beaf79ba8c591b5d"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "ceeb8b4100d034d76e70ce675d78b2d62c51e8e70be2205a9c8ae02e105a6aa6"
}
},
"status": "partial"
}

View File

@@ -532,6 +532,8 @@
{"bytes":208,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc","sha256":"5b194542cca489e2f998104e7054c7d95433aa16f22be0ce5c09411089509b66","source_id":"config:linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc"}
{"bytes":207,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/rose_engine/rose_engine.halshow","sha256":"174d37a7fc858c6534bcdaa239b35d1d873540b37bee173cf2aee53b80a4212a","source_id":"config:linuxcnc/configs/sim/axis/rose_engine/rose_engine.halshow"}
{"bytes":1694,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini","sha256":"0685e9ca8c05c903b715e9fed6ecd23cbac13911ed335b6d14e24eb235de25d3","source_id":"config:linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini"}
{"bytes":343,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/rotate/rotatekins.hal","sha256":"e3c9ec02685f64fdb72bb9e561b3709b450f0da29eac9cca0f17541f843b0954","source_id":"config:linuxcnc/configs/sim/axis/rotate/rotatekins.hal"}
{"bytes":515,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/rotate/rotatekins.ini","sha256":"324af9a73d21b5f0c9adaf3c97e698422790d403586901f9e161b6020b1fb4fa","source_id":"config:linuxcnc/configs/sim/axis/rotate/rotatekins.ini"}
{"bytes":174,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/sim.tbl","sha256":"52411645e06c20cf0e6c469e544a4d17de07d03254a6cb784e2468704e0a4a9e","source_id":"config:linuxcnc/configs/sim/axis/sim.tbl"}
{"bytes":523,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/sim_mm.tbl","sha256":"1816cbb02cc6585d86676bb2d88f85b10b439cf42212e0b4c144f3846a3dcf30","source_id":"config:linuxcnc/configs/sim/axis/sim_mm.tbl"}
{"bytes":618,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/simpockets.tbl","sha256":"e81a30f74f1c91fcece180e607f7e2cd63468bf4d432cc5cad2bc65eb7152150","source_id":"config:linuxcnc/configs/sim/axis/simpockets.tbl"}
@@ -736,6 +738,8 @@
{"bytes":3622,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/vismach/scara/scara.ini","sha256":"602e02bb6d320b728d9ae15904a5d229ea1a31e932c18e9018b45be007d695ce","source_id":"config:linuxcnc/configs/sim/axis/vismach/scara/scara.ini"}
{"bytes":3589,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/vismach/scara/scara.xml","sha256":"4fc724d9bd969c84ce6d9e4c2c4e47a1c1ec67646044e1ca227b1745f9131734","source_id":"config:linuxcnc/configs/sim/axis/vismach/scara/scara.xml"}
{"bytes":828,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/vismach/scara/scara_postgui.hal","sha256":"77b7360cf05b79fa6cc15f1f686f444fe55360668ec21f3859703bcd2d2a5596","source_id":"config:linuxcnc/configs/sim/axis/vismach/scara/scara_postgui.hal"}
{"bytes":250,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/vismach/scorbot/scorbot.hal","sha256":"ef66253c80e77899df824f9317e9ba0e9292f0e0389ef8e7ec22ebb465563363","source_id":"config:linuxcnc/configs/sim/axis/vismach/scorbot/scorbot.hal"}
{"bytes":420,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/vismach/scorbot/scorbot.ini","sha256":"4e8edd061a033d45e1e71c56bdd521ee10d3f60def3be020bbd437fc49271343","source_id":"config:linuxcnc/configs/sim/axis/vismach/scorbot/scorbot.ini"}
{"bytes":193,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/wrapped_rotary/README","sha256":"5f9fd4cb6e25c0a7b940e92131b962e10d671a1f6e16afe528901e9f73ab48a2","source_id":"config:linuxcnc/configs/sim/axis/wrapped_rotary/README"}
{"bytes":193,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/wrapped_rotary/README_es","sha256":"5f9fd4cb6e25c0a7b940e92131b962e10d671a1f6e16afe528901e9f73ab48a2","source_id":"config:linuxcnc/configs/sim/axis/wrapped_rotary/README_es"}
{"bytes":918,"kind":"simulation_config","path":"linuxcnc/configs/sim/axis/wrapped_rotary/wrapped_rotary.hal","sha256":"34102c0b792c4ddf9d2122898513a316f990b91f38e3ede62f5a6fe6f40c04a1","source_id":"config:linuxcnc/configs/sim/axis/wrapped_rotary/wrapped_rotary.hal"}
@@ -3207,21 +3211,32 @@
{"bytes":311,"kind":"documentation","path":"linuxcnc/docs/src/xhtml11-latexmath.conf","sha256":"d31ed1d15f9ac1232af1e58c05d83feedd9cd73f9fe543d589f9340fdf0ad719","source_id":"doc:linuxcnc/docs/src/xhtml11-latexmath.conf"}
{"bytes":269,"kind":"documentation","path":"linuxcnc/docs/src/xhtml11-links.conf","sha256":"debc4b462499fdd8286b3812c705e40267e53d87ae8062250e8c23cb7ad59afe","source_id":"doc:linuxcnc/docs/src/xhtml11-links.conf"}
{"bytes":886,"kind":"documentation","path":"linuxcnc/docs/src/xhtml11.conf","sha256":"c0222c552624bf3b7695e2f5c5db797be0e6cddcd77092293fd5e15b579f2ba9","source_id":"doc:linuxcnc/docs/src/xhtml11.conf"}
{"bytes":3882,"kind":"web_wasm_build_or_test","path":"wasm-core/CMakeLists.txt","sha256":"c289bad75abc394faf08b90d5cebb14c5293b4a9b64249a4aefd317acca036ac","source_id":"implementation:wasm-core/CMakeLists.txt"}
{"bytes":6793,"kind":"web_wasm_build_or_test","path":"wasm-core/CMakeLists.txt","sha256":"e9296a3983a531e4e6864d05e2e97c8dbf29e0dc9e45942ecc1a0a7222b3a660","source_id":"implementation:wasm-core/CMakeLists.txt"}
{"bytes":933,"kind":"web_wasm_interface","path":"wasm-core/include/sim_api.h","sha256":"9dda70ef64afe0b398a3de5342e6bdf545c331bbef24f112be2a45acec327227","source_id":"implementation:wasm-core/include/sim_api.h"}
{"bytes":1050,"kind":"web_wasm_interface","path":"wasm-core/include/sim_event.h","sha256":"5406dbf7fb6a80924835d967641c9ed22cc8c25a13b72b76ce3d235abb0ad45d","source_id":"implementation:wasm-core/include/sim_event.h"}
{"bytes":1669,"kind":"web_wasm_interface","path":"wasm-core/include/sim_hal.h","sha256":"f87fc7fb47a848516e1e9f41298ceb1a7af18d022619c9336cc390aebb0f9ab2","source_id":"implementation:wasm-core/include/sim_hal.h"}
{"bytes":928,"kind":"web_wasm_interface","path":"wasm-core/include/sim_posemath.h","sha256":"71b092379fbfbbd46cf2280fb825fabe84219dd9a0fc1e16f0bf7232160dff05","source_id":"implementation:wasm-core/include/sim_posemath.h"}
{"bytes":1967,"kind":"web_wasm_interface","path":"wasm-core/include/sim_hal.h","sha256":"f0b25fda1c267ed8078469c9966fa3b09721eba77c575affea77d489437a3e49","source_id":"implementation:wasm-core/include/sim_hal.h"}
{"bytes":1872,"kind":"web_wasm_interface","path":"wasm-core/include/sim_interpreter.h","sha256":"7bf24098340e3da2272061acf7a43376c6c40fe9dffc55d012e3af65ceffedbb","source_id":"implementation:wasm-core/include/sim_interpreter.h"}
{"bytes":5446,"kind":"web_wasm_interface","path":"wasm-core/include/sim_kinematics.h","sha256":"939d4088d9e7120e4a405be154eb3d98cd4e5925fc27d47641c115624c1bd994","source_id":"implementation:wasm-core/include/sim_kinematics.h"}
{"bytes":1819,"kind":"web_wasm_interface","path":"wasm-core/include/sim_motion_queue.h","sha256":"c26af2b5cff6cbc687f621d745601ff287eebd62011ea46fc7fa692b446a08cc","source_id":"implementation:wasm-core/include/sim_motion_queue.h"}
{"bytes":3280,"kind":"web_wasm_interface","path":"wasm-core/include/sim_posemath.h","sha256":"fef257b09f68e5649f0acacfcd3590d699d6f678927fbf8db7d103a40bf7da62","source_id":"implementation:wasm-core/include/sim_posemath.h"}
{"bytes":1238,"kind":"web_wasm_interface","path":"wasm-core/include/sim_protocol.h","sha256":"d1dd3247159f0950a9aa2d903d25cfa184bccff1d7512de293868763b4035d35","source_id":"implementation:wasm-core/include/sim_protocol.h"}
{"bytes":2262,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_api.c","sha256":"072ffb5aa13c4924c638464bb8487e5c293db589a9735c4d39c3a6d9455a3e59","source_id":"implementation:wasm-core/src/sim_api.c"}
{"bytes":2579,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_event.c","sha256":"a0af4a75c9c3b71d4a59df675b64f313eda05f4589538fe999cd92607d104397","source_id":"implementation:wasm-core/src/sim_event.c"}
{"bytes":6029,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_hal.c","sha256":"5926e2cdc785d060bc199b2bdfa550c898facf8221204487fdc3ae841400a02e","source_id":"implementation:wasm-core/src/sim_hal.c"}
{"bytes":2449,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_posemath.c","sha256":"274445935ffc1bf7201879d0779c19e73a6eea70a19b10c5929208f77a6bde65","source_id":"implementation:wasm-core/src/sim_posemath.c"}
{"bytes":9413,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_hal.c","sha256":"76a057064546a8ee9ba1098952755a4cdc56e6e714f2761b8a1826898d3ae621","source_id":"implementation:wasm-core/src/sim_hal.c"}
{"bytes":11585,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_interpreter.c","sha256":"9f9f45f7c123be774dcf55a752a29e6cc1f873a1605cf89c4caa4f4ab125e6a4","source_id":"implementation:wasm-core/src/sim_interpreter.c"}
{"bytes":66830,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_kinematics.c","sha256":"6abae835c16feb27ec1dc28a9ea5384f0bc5190217ba04a4997048d83066b905","source_id":"implementation:wasm-core/src/sim_kinematics.c"}
{"bytes":7791,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_motion_queue.c","sha256":"56074e27df90bc1b60134eac3cdf84c78149388f99a19a027f6714e3784b04ed","source_id":"implementation:wasm-core/src/sim_motion_queue.c"}
{"bytes":13491,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_posemath.c","sha256":"939b221ed6ede1229d26c170ab3514884d5bafc90854ab09db641925859b5e8d","source_id":"implementation:wasm-core/src/sim_posemath.c"}
{"bytes":4302,"kind":"web_wasm_implementation","path":"wasm-core/src/sim_protocol.c","sha256":"da63b458f64f997251323fc8b53a9c84d1f978f5e8ea5ed7c8dd6f5bceab60e4","source_id":"implementation:wasm-core/src/sim_protocol.c"}
{"bytes":858,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_api_test.c","sha256":"5fe8aa04543be2943c9e577bd6ce8f9ae9a8c98c7c24e84fd589b761fe39170c","source_id":"implementation:wasm-core/tests/sim_api_test.c"}
{"bytes":1178,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_event_test.c","sha256":"57fdb682dcb18632216b4093e6dfadf2736a0ab11a002438e3c269d4d4b5406d","source_id":"implementation:wasm-core/tests/sim_event_test.c"}
{"bytes":1358,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_hal_test.c","sha256":"9dd08ea73df45d1d9cef14bb02138269a5b3e0a0e96de75c621f5c79f00318b9","source_id":"implementation:wasm-core/tests/sim_hal_test.c"}
{"bytes":972,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_posemath_test.c","sha256":"419176eef28697eecdac1e2e666dc42da491e600b966a559bfe9e5b60a2d0c0a","source_id":"implementation:wasm-core/tests/sim_posemath_test.c"}
{"bytes":3505,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_hal_test.c","sha256":"5044ed422b37499291ff85fd7c601acc6665621cf33e9ff4d26f0e8fd5b7d533","source_id":"implementation:wasm-core/tests/sim_hal_test.c"}
{"bytes":79,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_hal_test_main.c","sha256":"86f625eaa0c6d6a195b97c0d4df17af6c57f5407bcec0a830e7521cb9823165a","source_id":"implementation:wasm-core/tests/sim_hal_test_main.c"}
{"bytes":2066,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_interpreter_test.c","sha256":"c4fc3ba11b751ed9f3f770ff1ff164ce18aa19986003cf85d17a26de7aecd3ce","source_id":"implementation:wasm-core/tests/sim_interpreter_test.c"}
{"bytes":37392,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_kinematics_test.c","sha256":"c9e4d20973c6a487787504bd5de9a73829f53d8bbfd35f91e72c6c62c76f191e","source_id":"implementation:wasm-core/tests/sim_kinematics_test.c"}
{"bytes":93,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_kinematics_test_main.c","sha256":"e567fe412145d3c9b04afc91d6efc6a53c3af3b3b52b7dda860cc289d42dbfc0","source_id":"implementation:wasm-core/tests/sim_kinematics_test_main.c"}
{"bytes":1386,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_motion_queue_test.c","sha256":"882c90f9963b2433b868859c50a91dbdecef93454039b05b11241c1f76c13f31","source_id":"implementation:wasm-core/tests/sim_motion_queue_test.c"}
{"bytes":2552,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_posemath_test.c","sha256":"751910f2bcd740c963b008e1ae4cb1dd058d2942ab1d63dd0a9f510a20a408d2","source_id":"implementation:wasm-core/tests/sim_posemath_test.c"}
{"bytes":1457,"kind":"web_wasm_implementation","path":"wasm-core/tests/sim_protocol_test.c","sha256":"74c855e4bcae2091913847e2ba46ea5f0ae482229b53199baee5bbdcd3c0ef49","source_id":"implementation:wasm-core/tests/sim_protocol_test.c"}
{"bytes":1779,"kind":"web_wasm_implementation","path":"web/worker/capabilities.mjs","sha256":"175cb4dac10cc6b2eb80ed1cf24405151ae3fac6ff82f68e5e2e241d79f10c97","source_id":"implementation:web/worker/capabilities.mjs"}
{"bytes":3084,"kind":"web_wasm_implementation","path":"web/worker/error-map.mjs","sha256":"83ca215534eed48a9082cc07230507c7b38cbb99f9f2a52e7026b5d49da1d167","source_id":"implementation:web/worker/error-map.mjs"}

View File

@@ -0,0 +1,197 @@
{
"configuration_candidate": {
"coordinates": "XYZ",
"hal_library": "linuxcnc/lib/hallib/tripodsim.hal",
"joints": 3,
"kinematics": "tripodkins",
"path": "linuxcnc/configs/sim/tklinuxcnc/tripod.ini",
"scan": true
},
"geometry": {
"base_A": [
0.0,
0.0,
0.0
],
"base_B": [
10.0,
0.0,
0.0
],
"base_C": [
5.0,
7.071,
0.0
],
"hal_parameters": {
"Bx": 10.0,
"Cx": 5.0,
"Cy": 7.071
},
"joint_semantics": [
"AD",
"BD",
"CD"
]
},
"implementation_status": "verified",
"mapping": {
"axis_joint_mapping": {
"X": 0,
"Y": 1,
"Z": 2
},
"coordinates": "XYZ",
"home_pose": [
0.0,
0.0,
1.0
],
"kinematics_joint_count": 3
},
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"blocked_samples": [
"nominal above-root",
"alternate below-root",
"triangle-inequality no-solution",
"base-plane singular",
"joint-limit",
"degenerate base geometry"
],
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "e5fe7526d1dcff1f8327c1389809affb5ac4cf1913e4b428ec4420e6ae957070",
"samples": {
"byte_identical_json": true,
"native": {
"boundaries": {
"alternate_branch": 1,
"alternate_pose": [
2.0,
3.0,
-4.0
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702,
"singular": -704
},
"tripod": {
"inverse": [
5.385164807,
9.433981132,
6.447715952
],
"pose": [
2.0,
3.0,
4.0
],
"state_hash": 7469146853106540736
}
},
"state_hash_identical": true,
"wasm": {
"boundaries": {
"alternate_branch": 1,
"alternate_pose": [
2.0,
3.0,
-4.0
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702,
"singular": -704
},
"tripod": {
"inverse": [
5.385164807,
9.433981132,
6.447715952
],
"pose": [
2.0,
3.0,
4.0
],
"state_hash": 7469146853106540736
}
}
},
"schema": "tripod-kinematics-report.v1",
"solver": {
"alternate_branch": "Dz<0 when SIM_KIN_TRIPOD_BELOW_ROOT is set",
"convergence_tolerance": 0.0,
"default_branch": "Dz>0",
"forward": "analytic trilateration",
"inverse": "three Euclidean strut lengths",
"iterations": 0
},
"source_records": {
"config": {
"path": "linuxcnc/configs/sim/tklinuxcnc/tripod.ini",
"sha256": "8da7280a981d80e9b7d4b608a357fc87dbb9d83535636794e1ae97d5ebcb8f01"
},
"hal": {
"path": "linuxcnc/lib/hallib/tripodsim.hal",
"sha256": "e8b341253823f5e2764b2e7c4cc630b557b89dad5e1f7698bbddc1d0b9679747"
},
"header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "43e588f7c45c703970598e8e42ff5aae4b97a437eaff1d4cd6ad156bd204edc7"
},
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "f15842a1dbf0cb33f071ee1e70715a85a1f3dec44c4facc220edd924f6ca352c"
},
"source": {
"path": "linuxcnc/src/emc/kinematics/tripodkins.c",
"sha256": "0fb0876d2ab190e3bde69d3fe1ce0cebbb54adee2ddb4b05b929d7ca5cb3f31f"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "00d9efc3c701ba2848535357f6027e6d9d4d19796a17be96e290ddc0babe2c5c"
}
},
"status": "partial",
"workspace_and_boundaries": {
"alternate_branch": 1,
"alternate_pose": [
2.0,
3.0,
-4.0
],
"base_plane_singular_error": -704,
"geometry_error": -703,
"iterations": 0,
"joint_limit_error": -702,
"no_solution_error": -702,
"nominal": {
"inverse": [
5.385164807,
9.433981132,
6.447715952
],
"pose": [
2.0,
3.0,
4.0
],
"state_hash": 7469146853106540736
},
"root_branch": 0
}
}

View File

@@ -0,0 +1,307 @@
{
"abi_contract": "coverage/kinematics-abi-contract.json",
"configuration_ids": [
"config:linuxcnc/configs/sim/axis/anglejog/anglejog.ini:54:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis.ini:144:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis_9axis.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis_mm.ini:136:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/canterp.ini:47:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/classicladder/demo_sim_cl.ini:52:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/corexy/corexy_by_hal.ini:10:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/db_demo/base.inc:38:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini:46:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/jwp_z.ini:52:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/opa.ini:56:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/extrajoints/12extrajoints.ini:19:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/extrajoints/1extrajoint.ini:22:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/extrajoints/2extrajoints.ini:25:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/foam/axis_foam.ini:64:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gantry/gantry.ini:3:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gantry/gantry_jjog.ini:6:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gantry/gantry_mm.ini:45:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/geometry/xyzc.ini:33:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/geometry/xyzc_origin.ini:34:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gladevcp/gladevcp_panel.ini:69:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gladevcp/gladevcp_panel_tester.ini:69:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gladevcp/gladevcp_tab.ini:73:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gladevcp/probe.ini:69:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/gladevcp/set-param-from-ini.ini:68:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/halui_pyvcp/halui.ini:57:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/histogram_demo.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/historical_lathe.ini:68:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ini_hal_demo.ini:71:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ini_with_includes/kins.inc:2:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/iocontrolv2/axis-iocontrolv2-demo.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/iocontrolv2/g8812.ini:135:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/iocontrolv2/m66track.ini:116:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/iocontrolv2/owordm6-ui-ns.ini:118:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/iocontrolv2/owordm6-ui.ini:98:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ja_tests/xyzb_locking_indexer/xyyzb.ini:20:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ja_tests/xyzb_locking_indexer/xyzb.ini:13:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ja_tests/xyzx_mpg/xyzx_base.inc:7:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ja_tests/xz/xz.ini:11:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ja_tests/xz/xz_both.ini:10:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ja_tests/xz/xz_both_auto.ini:10:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/lathe-fanucy/lathe-fanucy.ini:62:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/lathe.ini:64:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/lathe_multispindle/lathe.ini:142:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/minimal_xyz.ini:39:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/moveoff/moveoff_base.inc:40:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ngcgui/ngcgui.ini:101:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ngcgui/ngcgui_gcmc.ini:106:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ngcgui/ngcgui_lathe.ini:90:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ngcgui/ngcgui_simple.ini:89:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/ngcgui/pyngcgui_axis.ini:102:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/orphans/acc_test.ini:66:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/orphans/axis_noio.ini:117:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/orphans/iocontrol-removed/core_sim_test.hal:5:loadrt:trivkins",
"config:linuxcnc/configs/sim/axis/orphans/iocontrol-removed/iocontrol-removed.ini:212:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/orphans/medium.ini:65:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/panelui-demo/panelui-demo.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/plasma/imperial.ini:61:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/plasma/metric.ini:61:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/profile_axis.ini:64:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/qtvcp/qtvcp_tab.ini:74:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/qtvcp/qtvismach_tab.ini:73:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/random_tc.ini:64:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/remap/cycle/cycle.ini:75:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/remap/extend-builtins/extend-builtins.ini:105:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/remap/getting-started/demo.ini:156:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/remap/manual-toolchange-with-tool-length-switch/manualtoolchange.ini:92:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/remap/rack-toolchange/racktoolchange.ini:92:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/remap/stop-lookahead/demo.ini:73:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/simtcl/twopass_base.inc:51:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/spindle_orient/orient.ini:72:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/twopass/twopass.ini:74:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini:159:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/vismach/5axis/max5/max5kins.ini:4:kinematics:maxkins",
"config:linuxcnc/configs/sim/axis/vismach/5axis/max5/max5triv.ini:4:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/vismach/VMC_toolchange/vmc_graycode.ini:54:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/vismach/VMC_toolchange/vmc_index.ini:54:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/vismach/hbm/hbm.ini:49:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/vismach/rolfmill/rolfmill.hal:5:loadrt:trivkins",
"config:linuxcnc/configs/sim/axis/wrapped_rotary/wrapped_rotary.ini:45:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/xhc-hb04/inch_trivkins.inc:13:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/xhc-hb04/mm_trivkins.inc:13:kinematics:trivkins",
"config:linuxcnc/configs/sim/craftsman/craftsmancnc.ini:82:kinematics:trivkins",
"config:linuxcnc/configs/sim/craftsman/sim_core.hal:5:loadrt:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/6_axis.ini:72:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/7_axis.ini:72:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/7_axis_tool.ini:72:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/8_axis.ini:71:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/9_axis.ini:72:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/core_sim_6.hal:5:loadrt:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/core_sim_7.hal:5:loadrt:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/core_sim_8.hal:5:loadrt:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/core_sim_9.hal:5:loadrt:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy.ini:101:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_4_axis.ini:89:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZAB.ini:121:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZAC.ini:111:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZCW.ini:107:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_left_panel.ini:98:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_messages.ini:131:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_pedant.ini:99:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_plasma/gmoccapy_plasma.ini:113:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_pyngcgui.ini:134:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_right_panel.ini:94:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_sim_hardware_button.ini:102:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_tool_sensor.ini:128:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/gmoccapy_with_user_tabs.ini:119:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/lathe_configs/lathe.ini:95:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/lathe_configs/lathe_C.ini:96:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/lathe_configs/lathe_CW.ini:96:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/lathe_configs/lathe_backtool.ini:96:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/lathe_configs/lathe_imperial.ini:95:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/lathe_configs/lathe_macros.ini:101:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/Gantry/gantry_mm.ini:55:kinematics:trivkins",
"config:linuxcnc/configs/sim/gmoccapy/plasma_config/gmoccapy_plasma.ini:109:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen.ini:166:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_custom/9axis.ini:135:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_custom/gaxis_no_plot.ini:133:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_custom/gscreen_gaxis.ini:133:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_custom/industrial.ini:135:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_custom/tester.ini:124:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_custom/tester_metric.ini:137:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_lathe.ini:65:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/gscreen_mm.ini:138:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/industrial_lathe_wear/industrial_lathe_wear.ini:79:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/ngcgui/pyngcgui_gscreen.ini:114:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/ngcgui/pyngcgui_gscreen_popupkeyboard.ini:111:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/silverdragon/silverdragon.ini:128:kinematics:trivkins",
"config:linuxcnc/configs/sim/gscreen/spartan/spartan.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/pyvcp_demo/pyvcp_bottom_panel.ini:153:kinematics:trivkins",
"config:linuxcnc/configs/sim/pyvcp_demo/pyvcp_demo1.ini:150:kinematics:trivkins",
"config:linuxcnc/configs/sim/pyvcp_demo/pyvcp_embed_tab.ini:154:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtaxis/gantry/qt_gantry.ini:3:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtaxis/xyz/qtaxis.ini:217:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini:84:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyzy.ini:84:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyzya.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_tool_probe/qtdragon_auto_tool_probe.ini:86:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini:114:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_metric.ini:111:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_xyza.ini:89:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyzab.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyzac.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_xyz.ini:84:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_xyza.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_xyzab.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_xyzac.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini:84:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtplasmac/qtplasmac_imperial_ini.inc:44:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtplasmac/qtplasmac_metric_ini.inc:44:kinematics:trivkins",
"config:linuxcnc/configs/sim/qttouchy/qttouchy.ini:198:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/blender.ini:207:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/industrial_lathe_wear/industrial_lathe_wear.ini:86:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qt_800x600.ini:164:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qt_gantry.ini:3:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtaxis.ini:220:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtaxis_lathe/qtaxis_lathe.ini:191:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtaxis_mpg.ini:224:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdefault.ini:210:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdefault_9axis.ini:73:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdefault_gantry.ini:3:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdefault_mm.ini:134:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon.ini:80:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_auto_tool_probe.ini:55:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_hd.ini:58:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_inch.ini:75:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_xyyz.ini:61:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_xyz.ini:62:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_xyza.ini:63:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_xyzy.ini:61:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_xyzya.ini:63:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtvcp_custom/qtdefault_ngc.ini:229:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtvcp_experimental/gremlin.ini:232:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtvcp_experimental/qtdefault_gladevcp.ini:232:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtvcp_experimental/qtdefault_ngc.ini:229:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/qtx1mill.ini:214:kinematics:trivkins",
"config:linuxcnc/configs/sim/qtvcp_screens/tester.ini:184:kinematics:trivkins",
"config:linuxcnc/configs/sim/tklinuxcnc/servo_sim.ini:49:kinematics:trivkins",
"config:linuxcnc/configs/sim/tklinuxcnc/tklinuxcnc.ini:79:kinematics:trivkins",
"config:linuxcnc/configs/sim/tklinuxcnc/trivkins/xz.ini:11:kinematics:trivkins",
"config:linuxcnc/configs/sim/tklinuxcnc/trivkins/xz_both.ini:10:kinematics:trivkins",
"config:linuxcnc/configs/sim/touchy/gladevcp/gladevcp_touchy.ini:90:kinematics:trivkins",
"config:linuxcnc/configs/sim/touchy/gladevcp/touchy.ini:86:kinematics:trivkins",
"config:linuxcnc/configs/sim/touchy/ngcgui/pyngcgui_touchy.ini:73:kinematics:trivkins",
"config:linuxcnc/configs/sim/touchy/ngcgui/pyngcgui_touchy_lathe.ini:88:kinematics:trivkins",
"config:linuxcnc/configs/sim/touchy/ngcgui/pyngcgui_touchy_moveoff.ini:75:kinematics:trivkins",
"config:linuxcnc/configs/sim/touchy/touchy.ini:64:kinematics:trivkins",
"config:linuxcnc/configs/sim/woodpecker/woodpecker.ini:49:kinematics:trivkins",
"config:linuxcnc/configs/sim/woodpecker/woodpecker_auto_tool_probe.ini:63:kinematics:trivkins",
"config:linuxcnc/configs/sim/woodpecker/woodpecker_xyz.ini:56:kinematics:trivkins",
"config:linuxcnc/configs/sim/woodpecker/woodpecker_xyza.ini:86:kinematics:trivkins",
"config:linuxcnc/configs/sim/woodpecker/woodpecker_xyzab.ini:74:kinematics:trivkins",
"config:linuxcnc/configs/sim/woodpecker/woodpecker_xyzy.ini:55:kinematics:trivkins",
"config:linuxcnc/configs/sim/woodpecker/woodpecker_xyzya.ini:58:kinematics:trivkins",
"config:linuxcnc/tests/abort/feed-rate/test.ini:59:kinematics:trivkins",
"config:linuxcnc/tests/abort/g64/test.ini:60:kinematics:trivkins",
"config:linuxcnc/tests/abort/on_abort_command-crazy-move/test.ini:67:kinematics:trivkins",
"config:linuxcnc/tests/abort/stop-button-crazy-move/test.ini:65:kinematics:trivkins",
"config:linuxcnc/tests/ccomp/early-exit/test.ini:58:kinematics:trivkins",
"config:linuxcnc/tests/classicladder/estop/classicladder-estop.ini:38:kinematics:trivkins",
"config:linuxcnc/tests/halui/jogging/halui.ini:60:kinematics:trivkins",
"config:linuxcnc/tests/halui/mdi/halui.ini:49:kinematics:trivkins",
"config:linuxcnc/tests/hard-limits/hard-limits.ini:37:kinematics:trivkins",
"config:linuxcnc/tests/interp/m98m99/12-M99-endless-main-program/motion-logger.ini:44:kinematics:trivkins",
"config:linuxcnc/tests/interp/mdi-oword-m66/interp.ini:47:kinematics:trivkins",
"config:linuxcnc/tests/interp/oword-mdi-sub-update/interp.ini:41:kinematics:trivkins",
"config:linuxcnc/tests/interp/subroutine-return/interp.ini:41:kinematics:trivkins",
"config:linuxcnc/tests/io-startup/nonrandom/test.ini:44:kinematics:trivkins",
"config:linuxcnc/tests/io-startup/random/test.ini:43:kinematics:trivkins",
"config:linuxcnc/tests/lathe/lathe.ini:47:kinematics:trivkins",
"config:linuxcnc/tests/linuxcncrsh-tcp/linuxcncrsh-test.ini:42:kinematics:trivkins",
"config:linuxcnc/tests/linuxcncrsh/linuxcncrsh-test.ini:58:kinematics:trivkins",
"config:linuxcnc/tests/mdi-queue-length/test.ini:45:kinematics:trivkins",
"config:linuxcnc/tests/mdi-queue/linuxcncrsh-test.ini:60:kinematics:trivkins",
"config:linuxcnc/tests/mdi-while-queuebuster-waitflag/test.ini:46:kinematics:trivkins",
"config:linuxcnc/tests/motion-logger/basic/test.ini:42:kinematics:trivkins",
"config:linuxcnc/tests/motion-logger/mountaindew/mountaindew.ini:45:kinematics:trivkins",
"config:linuxcnc/tests/motion-logger/startup-gcode-abort/test.ini:57:kinematics:trivkins",
"config:linuxcnc/tests/motion/g0/motion-test.ini:65:kinematics:trivkins",
"config:linuxcnc/tests/motion/jogwheel-axis/motion-test.ini:42:kinematics:trivkins",
"config:linuxcnc/tests/motion/jogwheel-joint/motion-test.ini:42:kinematics:trivkins",
"config:linuxcnc/tests/mqtt/simulator.ini:52:kinematics:trivkins",
"config:linuxcnc/tests/remap/remap-io/test-ngc.ini:64:kinematics:trivkins",
"config:linuxcnc/tests/remap/remap-io/test-py.ini:64:kinematics:trivkins",
"config:linuxcnc/tests/remap/remap-reentry/test.ini:45:kinematics:trivkins",
"config:linuxcnc/tests/rs274ngc-startup/test.ini:57:kinematics:trivkins",
"config:linuxcnc/tests/single-step/test.ini:43:kinematics:trivkins",
"config:linuxcnc/tests/startup-state/test.ini:57:kinematics:trivkins",
"config:linuxcnc/tests/statbuffer-g5x-abort/test.ini:56:kinematics:trivkins",
"config:linuxcnc/tests/t0/nonrandom/sim.ini:67:kinematics:trivkins",
"config:linuxcnc/tests/t0/random-with-t0/sim.ini:67:kinematics:trivkins",
"config:linuxcnc/tests/t0/random-without-t0/sim.ini:67:kinematics:trivkins",
"config:linuxcnc/tests/tlo/g43-test.ini:46:kinematics:trivkins",
"config:linuxcnc/tests/tool-info/non-random/test.ini:54:kinematics:trivkins",
"config:linuxcnc/tests/tool-info/random-no-startup-tool/test.ini:54:kinematics:trivkins",
"config:linuxcnc/tests/tool-info/random-with-startup-tool/test.ini:54:kinematics:trivkins",
"config:linuxcnc/tests/toolchanger/m61/m61-test.ini:39:kinematics:trivkins",
"config:linuxcnc/tests/toolchanger/m61/mod_core_sim.hal:5:loadrt:trivkins",
"config:linuxcnc/tests/toolchanger/reload-tool/non-random/test.ini:55:kinematics:trivkins",
"config:linuxcnc/tests/toolchanger/reload-tool/random/test.ini:55:kinematics:trivkins",
"config:linuxcnc/tests/toolchanger/toolno-pocket-differ/nonrandom/sim.ini:68:kinematics:trivkins",
"config:linuxcnc/tests/toolchanger/toolno-pocket-differ/random/sim.ini:68:kinematics:trivkins",
"config:linuxcnc/tests/trajectory-planner/circular-arcs/configs/core_sim_components.hal:5:loadrt:trivkins"
],
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"coordinates": {
"XYZ": "verified",
"XYZABCUVW": "verified",
"case_fold": "verified",
"duplicate_axes": "verified",
"extra_joint_count": "verified"
},
"extra_joints": {
"home_zeroes_kinematics_prefix": "verified",
"ignored_suffix": "verified",
"joint_count_mismatch": "verified",
"prefix_only": "verified"
},
"mapping_contract": "coverage/kinematics-mapping-contract.json",
"modes": {
"both": "verified",
"forward_only": "verified",
"identity": "verified",
"inverse_only": "verified"
},
"numeric_policy": "coverage/kinematics-numeric-policy.json",
"oracle": {
"configuration_candidates": [
"config:linuxcnc/configs/sim/axis/anglejog/anglejog.ini:54:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis.ini:144:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis_9axis.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/axis_mm.ini:136:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/canterp.ini:47:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/classicladder/demo_sim_cl.ini:52:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/corexy/corexy_by_hal.ini:10:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/db_demo/base.inc:38:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini:46:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini:67:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/jwp_z.ini:52:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/external_offsets/opa.ini:56:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/extrajoints/12extrajoints.ini:19:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/extrajoints/1extrajoint.ini:22:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/extrajoints/2extrajoints.ini:25:kinematics:trivkins",
"config:linuxcnc/configs/sim/axis/foam/axis_foam.ini:64:kinematics:trivkins"
],
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "fec9dd7b8adc27ab05c2663320854b027d22cd5dcc7aab31c9597470b9724560",
"schema": "trivkins-integration-report.v1",
"source_ids": [
"source:linuxcnc/src/emc/kinematics/maxkins.c",
"source:linuxcnc/src/emc/kinematics/rotatekins.c",
"source:linuxcnc/src/emc/kinematics/trivkins.c"
],
"status": "partial",
"tests": {
"ctest": "sim_kinematics_test",
"native": "build-native/sim_kinematics_test",
"status": "passed"
}
}

View File

@@ -0,0 +1,153 @@
{
"boundaries": {
"missing_required_axis": "SIM_KIN_ERR_CONFIGURATION verified by existing contract tests",
"state_hash": "native/WASM identical",
"xyzac_round_trip": "verified",
"xyzbc_b_90_singular": "SIM_KIN_ERR_SINGULAR verified",
"xyzbc_round_trip": "verified"
},
"configuration_candidates": {
"xyzac": {
"joints": 5,
"kinematics": "xyzac-trt-kins",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini",
"scan": true,
"sparm": "identityfirst"
},
"xyzbc": {
"joints": 5,
"kinematics": "xyzbc-trt-kins",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini",
"scan": true,
"sparm": "identityfirst"
}
},
"implementation_status": "verified",
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"offsets": {
"xyzac": {
"tool_offset": 100.0,
"x_rot_point": 20.0,
"y_offset": 3.0
},
"xyzbc": {
"tool_offset": 50.0,
"x_offset": 5.0,
"z_offset": 2.0
}
},
"oracle": {
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "504f1e29c8c7e3d0d96c4113106401d0c44c1b82044461e43d1b2f5cf48fdfcc",
"rotation_chain": {
"direction": "LinuxCNC opposite conventional rotary directions retained",
"identityfirst": "switchkins type 0 identity, type 1 TRT, type 2 userk",
"xyzac": "C about Z then A about X with y/z/tool offsets",
"xyzbc": "C about Z then B about Y with x/z/tool offsets"
},
"samples": {
"byte_identical_json": true,
"native": {
"xyzac_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
142.826706376,
9.689621386,
163.102540378
],
"state_hash": 4869492769119734977
},
"xyzbc_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
44.740352549,
25.97032557,
227.67175976
],
"state_hash": 1734235358276017152
}
},
"wasm": {
"xyzac_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
142.826706376,
9.689621386,
163.102540378
],
"state_hash": 4869492769119734977
},
"xyzbc_trt": {
"inverse": [
100.0,
50.0,
200.0,
30.0,
45.0
],
"pose": [
44.740352549,
25.97032557,
227.67175976
],
"state_hash": 1734235358276017152
}
}
},
"schema": "trt-kinematics-report.v1",
"source_records": {
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "7a77915c59f190bcbe5c93d8f53498745bfcf978c167ba8878a21b914f9401fd"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "ceeb8b4100d034d76e70ce675d78b2d62c51e8e70be2205a9c8ae02e105a6aa6"
},
"trt_source": {
"path": "linuxcnc/src/emc/kinematics/trtfuncs.c",
"sha256": "ced2f9d4732681e2e82153b2f6343eccdf6972222d558d1e277bf1ec0bdc87fd"
},
"xyzac_config": {
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini",
"sha256": "9ee1d96962e7a44b25468f452543cfc3ca318585269e26227bb5b6e17b1e42f1"
},
"xyzac_source": {
"path": "linuxcnc/src/emc/kinematics/xyzac-trt-kins.c",
"sha256": "24c633613db9876c2ec246e1519a63d288fd27c68296d89f89f0368105634e69"
},
"xyzbc_config": {
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini",
"sha256": "78ce55d1e96e6f6a68f7352d530f9f84f3a68188cbe3b45e908a085295180c78"
},
"xyzbc_source": {
"path": "linuxcnc/src/emc/kinematics/xyzbc-trt-kins.c",
"sha256": "d79c06db82930ef685809a87c7207398f7893f56a6a0dfe382df2c81eaeb9562"
}
},
"status": "partial"
}