Compare commits

..

38 Commits

Author SHA1 Message Date
db29ae625f 按关节槽位驱动 13 个五轴案例的三维模型
关节契约扩为槽位制:以 LinuxCNC 联合号标识关节,轴字母降为槽位属性,
重复轴(bridge-mill 的两个 Y)、并联杆长(hexapod/pentapod)和被动槽位
(max5 第 6 关节)都能表达。v1 规则保持不变并合成 jointOrder,已保存
GLB 与既有测试不受影响。

13 个结构 GLB 由 scripts/generate_physical_case_glbs.mjs 统一重建,
可动关节均为按槽位命名的 Group 并写 userData.linuxcncJoint,共 71 个
关节,槽位数与运行目录的 joint_count 逐条一致。

新增 machine-visual-bindings.json 与纯函数模块,以 machine id 为键:
坐标字母不能作键,因为三个案例共用 XYZAB、三个共用 XYZABC。主界面切换
案例时自动装载对应模型,失败时保留内置模型并显式提示。

消除前端五关节截断:visual 适配器的 joints 改为数组并新增
jointsAuthoritative;allHomed 按 joint_count 判断;面板按 worker 断言的
machine id 查找机型。

管理器解锁:坐标与案例下拉以"存在完整视觉绑定"为启用条件,13 案例全部
可选;machine-urdf.ts 新增 generic-wasm/1 profile,AC/BC 严格校验路径
不变;新增 machine-kinematics-specs.json 保存逐关节限位,INI 未声明的
限位保持 null 而不编造。

修复三个真实缺陷:构建漏发 woodpecker/gmoccapy/qtdragon 配置目录(
DEFECT-02 根因);案例切换沿用"装载需要已上电"的门控,导致关机状态下
第二次切换被静默拒绝;重复轴机型上 React 列表键冲突。

验收:13 案例逐个切换装载成功、槽位键与绑定定义逐一一致、浏览器错误 0;
typecheck 与生产构建通过;视觉绑定、GLB 命名、关节契约、投影、store、
双画布、运动学规格漂移、11 案例 Worker 闭环、管理器浏览器回归全部通过。
证据在 coverage/glb-machine-manager/physical-drive/。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-30 06:09:12 +08:00
af65b69b2c Make 3D machine manager axis controls configuration driven 2026-09-30 20:30:07 +08:00
469881794c Expose LinuxCNC case selector in machine manager 2026-09-22 08:42:00 +08:00
ae525d6b93 Cover remaining five-axis case variants 2026-09-22 08:02:55 +08:00
23d07e72d1 Add LinuxCNC five-axis case catalog 2026-09-22 07:36:23 +08:00
b15af28034 Keep machine dialogs open when file picker is cancelled 2026-09-22 05:24:55 +08:00
d4d0088daf Complete machine document library and recovery workflow 2026-09-22 04:42:20 +08:00
3cb5950d1f Record deployed document library and complete model recovery verification 2026-09-21 21:19:10 +08:00
8443930edb Save named machine documents and restore editor configuration from GLB or local library 2026-09-21 21:07:01 +08:00
1eb9840941 Record deployed AC BC program compatibility regression 2026-09-21 20:03:26 +08:00
0de96bbc72 Keep G-code matched to imported AC or BC machine type 2026-09-21 19:52:31 +08:00
86cfa2b7f0 Record machine type selection and saved model cloud verification 2026-09-21 17:49:43 +08:00
338500dfc2 Select machine type in design dialog and save importable machine GLB 2026-09-21 17:41:46 +08:00
8f1a22485d Record workbench release and final AC BC verification 2026-09-21 13:34:44 +08:00
a7233bc8e4 Improve machine manager engineering workbench 2026-09-21 12:54:56 +08:00
a2c6dd1c01 Record single-DOF release and cloud validation 2026-09-21 11:32:29 +08:00
d8488641ca Configure single-DOF machine joints and drive them from WASM axes 2026-09-21 11:24:22 +08:00
989866b3ab Record deployed parent-relative joint editing verification 2026-09-21 09:39:10 +08:00
91ebd56d6d Verify isolated joint edits and parent frame inheritance 2026-09-21 09:19:45 +08:00
a472911ad1 Apply hierarchy node transforms relative to parents 2026-09-21 09:11:38 +08:00
63f726dc32 Apply GLB part translation and rotation 2026-09-21 06:47:37 +08:00
70229a8d1f Align machine manager render-state regression 2026-09-20 23:14:44 +08:00
2fd0a3d90b Display selected joint local coordinate system 2026-09-20 22:56:44 +08:00
c2892bfe36 Add hierarchy axis motion validation and model deletion 2026-09-20 21:23:14 +08:00
320a69a916 Stabilize machine manager WebGL resources 2026-09-20 20:14:27 +08:00
72b38b7d43 Add draggable GLB hierarchy tree and node origins 2026-09-20 18:53:30 +08:00
53285d04af Use camera Z-up coordinates without modifying GLB imports 2026-09-20 17:14:37 +08:00
8cafbb326b Use Z-up machine coordinates in GLB manager 2026-09-20 15:18:54 +08:00
6d04425121 Improve GLB manager lighting for metallic models 2026-09-20 14:35:34 +08:00
1076bfa5e0 Update handoff for machine manager delivery 2026-09-20 12:32:14 +08:00
8aab531b02 Add AC/BC RTCP programs and 3D machine manager 2026-09-20 12:31:12 +08:00
1c1e5f9672 Document verified repository state and Codex restart handoff 2026-09-18 09:24:34 +08:00
4a568f1f4c Make machine configuration authoritative and restore native checkpoints exactly 2026-09-18 09:09:41 +08:00
6a69511276 Preserve RTCP compensation across rotary jog stops 2026-09-18 06:10:53 +08:00
e4600b34e3 Add INI-driven XYZAC and XYZBC parametric machine design 2026-09-17 19:16:48 +08:00
9232f29027 Attach machine preview path to rotary cradle 2026-09-11 15:17:03 +08:00
d7c8b514fc Assert preview HUDs stay hidden 2026-09-11 11:08:40 +08:00
021e688b6e Remove duplicate preview HUD overlays 2026-09-11 10:20:04 +08:00
666 changed files with 119817 additions and 434 deletions

View File

@@ -1,5 +1,26 @@
# LinuxCNC Web/WASM # LinuxCNC Web/WASM
五轴 GLB / URDF 机床导入(AC / BC、底座双分支)的工作入口:
[`子项目文档、任务矩阵与模型交付`](docs/glb-machine/README.md)。
机床预览区的部件级三维机床管理器(GLB 部件、层级、原点、姿态、RTCP 标定和物理零点)入口:
[`三维机床管理器文档、任务矩阵与验收证据`](docs/glb-machine-manager/README.md)。
线上站点 `https://49.232.250.35:58010/` 的操作说明、案例支持状态与发布功能巡检结论见
[`LinuxCNC Web/WASM 使用说明书`](docs/user-manual/LinuxCNC-Web-使用说明书.html)。
详细功能规格见 [`三维机床管理详细功能文档`](docs/glb-machine-manager/00-三维机床管理详细功能文档.md)。
可离线阅读的图文版见 [`三维机床管理详细功能文档(HTML)`](docs/glb-machine-manager/00-三维机床管理详细功能文档.html)。
退出重启接续见 [`三维机床管理 HTML 文档接续入口`](nextTask-glb-machine-manager-doc.md)。
当前配置驱动改造的重启接续入口:[`nextTask-hardcoding.md`](nextTask-hardcoding.md)。
五轴机床 INI 参数化设计(XYZAC / XYZBC)的当前工作入口:
[`项目文档、任务矩阵与验收证据`](docs/trt-parametric/README.md)。本专项按该索引接续。
LinuxCNC 五轴/多自由度机床结构案例、运动学源码、示例 G 代码和 Web/WASM 适配状态:
[`LinuxCNC 五轴机床案例目录`](docs/linuxcnc-five-axis-case-catalog.md)。界面使用同一份
[`five-axis-machine-catalog.json`](web/workspace/five-axis-machine-catalog.json);本地案例路径可用
`node scripts/validate_five_axis_catalog.mjs` 复核。
本仓库的目标是将 LinuxCNC `2.10.0~pre0` 的仿真行为移植到浏览器。当前已完成 posemath/TP、rs274ngc interpreter 和 fixed-tick motion queue 核心切片;这仍不是 LinuxCNC 全功能完成声明。 本仓库的目标是将 LinuxCNC `2.10.0~pre0` 的仿真行为移植到浏览器。当前已完成 posemath/TP、rs274ngc interpreter 和 fixed-tick motion queue 核心切片;这仍不是 LinuxCNC 全功能完成声明。
完整仿真功能范围、任务分解和 M0-M8 里程碑见 [`完整仿真移植实施计划`](docs/linuxcnc-web-wasm-complete-simulation-plan.md);技术实施接续入口为 [`nextTask1.md`](nextTask1.md)。 完整仿真功能范围、任务分解和 M0-M8 里程碑见 [`完整仿真移植实施计划`](docs/linuxcnc-web-wasm-complete-simulation-plan.md);技术实施接续入口为 [`nextTask1.md`](nextTask1.md)。

View File

@@ -0,0 +1,18 @@
{
"report_id": "configurable-ui-browser-v1",
"status": "verified",
"default_machine": "xyzbc-trt",
"entrypoint": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/configured-machine.ini",
"program": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/configured-preview.ngc",
"increments": [
"0.25",
"2.5"
],
"feed_max": 1.3,
"colors": {
"purple": 143449,
"green": 85
},
"configured_icons": 24,
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

View File

@@ -0,0 +1,76 @@
{
"report_id": "configuration-input-audit-v1",
"status": "verified",
"scope": "configurable inputs; not a zero-literals claim",
"checks": {
"machine_catalog_parses": true,
"resource_catalog_parses": true,
"settings_parse": true,
"worker_reparses_ini": true,
"axis_limits_from_ini": true,
"joint_limits_from_ini": true,
"no_kinematics_example_limits": true,
"no_loader_fixed_timing": true,
"no_loader_axis3_override": true,
"native_axis_dynamics_input": true,
"no_native_xyzac_speed_override": true,
"native_acceleration_upper_bound": true,
"model_uses_visual_configuration": true,
"machine_path_color_configured": true
},
"sources": [
{
"path": "web/workspace/machine-catalog.json",
"sha256": "b71a4cf6f5517710c8cc7ed496b3d5d8d7850c07ab4dc5096548407f93dd9130"
},
{
"path": "web/workspace/simulation-resources.json",
"sha256": "872a0e52dc4f8725d623ad47f3cbb446b6cb257793ce78ca1f8f0bcf1ee0966b"
},
{
"path": "web/workspace/web-settings.json",
"sha256": "c9f7da5ef8ec0d17ee2e9e9f55e71acc051eb4afe75b85a961a18599f28c8a82"
},
{
"path": "web/workspace/trt-configuration.mjs",
"sha256": "5ede37c1066545da1825b98ccedd82c22dad7f8f311c8ea0112595a916e6b432"
},
{
"path": "web/worker/sim-session.mjs",
"sha256": "07c40bb0e8603291cdea245be03c8afc7d9b6582452433ed4f5eac413add988f"
},
{
"path": "web/worker/wasm-linuxcnc-tp.mjs",
"sha256": "50616c4d75e3693f06e0095c9df76671f7af9d417e351a68796bdba92dcbe5f7"
},
{
"path": "wasm-core/src/sim_linuxcnc_tp.c",
"sha256": "2db45da43cd7951a172d118c3dd346a2d5182eae29f0bbe2abd9b9d5a645da26"
},
{
"path": "web/worker/wasm-xyzac-kinematics.mjs",
"sha256": "7453c58a220b31a1c74ff2e2f9f3d6b7d16cc84973b9ea5be17d06fa179af37f"
},
{
"path": "web/workspace/sim-case-loader.mjs",
"sha256": "d6399f2fcb053fc625933d72118b82e7f6eff73df7dc02a606fe45f238b06207"
},
{
"path": "web/react/src/xyzac-machine-model.ts",
"sha256": "1d22af1384e4e26adad8bed122fabd17ecfb046d0320c920ca1c7a385c40f5b6"
},
{
"path": "web/react/src/XyzacMachineView.tsx",
"sha256": "d0f42c020a8da8708323fc778d206460fa1ea02d114d5df2a3c2eaf85f138f3a"
}
],
"wasm_sha256": "213b55e64b45c14df5c40e59827fa8bb4903135cd788664bb08263f08a49738f",
"retained": [
"mathematical constants and tolerances",
"ABI layouts, enums, and capacities",
"source model mesh topology",
"CSS/icon assets",
"test fixtures and historical evidence",
"upstream LinuxCNC and dependency locks"
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,657 @@
{
"report_id": "trt-rtcp-jog-browser-v1",
"status": "verified",
"machines": [
{
"coordinates": "XYZAC",
"rows": [
{
"axis": "a",
"before": {
"joints": [
5.066649999999981,
4.066650000000003,
0,
0,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 64,
"rendered_tick": 64,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
5.066649999999981,
4.841821345591999,
-1.1400746004481288,
4.199999999999992,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 88,
"rendered_tick": 88,
"tool_tip": [
0,
2,
0
],
"tcp_error": 1.3877787807814457e-17
},
"stopped": {
"joints": [
5.066649999999981,
5.19921919111046,
-1.6107075438884007,
6.000000000000007,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 99,
"rendered_tick": 99,
"tool_tip": [
0,
2,
0
],
"tcp_error": 2.2247786310271853e-16
}
},
{
"axis": "c",
"before": {
"joints": [
5.066649999999981,
5.19921919111046,
-1.6107075438884007,
6.000000000000007,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 99,
"rendered_tick": 99,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
4.266433017896709,
6.027611642587745,
-1.5236399887760221,
6.000000000000007,
10.199999999999976
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 143,
"rendered_tick": 136,
"tool_tip": [
0,
2,
0
],
"tcp_error": 2.2473876566261383e-16
},
"stopped": {
"joints": [
4.110427463793882,
6.158484995689042,
-1.5098846450816552,
6.000000000000007,
11.999999999999938
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 154,
"rendered_tick": 154,
"tool_tip": [
0,
2,
0
],
"tcp_error": 6.938893903907228e-18
}
},
{
"axis": "a",
"before": {
"joints": [
4.110427463793882,
6.158484995689042,
-1.5098846450816552,
6.000000000000007,
11.999999999999938
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 154,
"rendered_tick": 154,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
4.110427463793882,
9.152485181578204,
-4.3665028598393185,
19.19999999999992,
11.999999999999938
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 208,
"rendered_tick": 202,
"tool_tip": [
0,
2,
0
],
"tcp_error": 1.3877787807814457e-17
},
"stopped": {
"joints": [
4.110427463793882,
9.532273556710663,
-4.645534652791378,
20.69999999999989,
11.999999999999938
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 218,
"rendered_tick": 218,
"tool_tip": [
0,
2,
0
],
"tcp_error": 4.445768331151997e-16
}
},
{
"axis": "c",
"before": {
"joints": [
4.110427463793882,
9.532273556710663,
-4.645534652791378,
20.69999999999989,
11.999999999999938
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 218,
"rendered_tick": 218,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
3.8414816180013283,
9.727059259543312,
-4.571931269146798,
20.69999999999989,
14.999999999999936
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 238,
"rendered_tick": 238,
"tool_tip": [
0,
2,
0
],
"tcp_error": 1.3877787807814457e-17
},
"stopped": {
"joints": [
3.6750116751266004,
9.837515099025248,
-4.53019348546481,
20.69999999999989,
16.799999999999933
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 249,
"rendered_tick": 249,
"tool_tip": [
0,
2,
0
],
"tcp_error": 4.443601777255714e-16
}
}
]
},
{
"coordinates": "XYZBC",
"rows": [
{
"axis": "b",
"before": {
"joints": [
5.0666499999999814,
3.666650000000003,
0,
0,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 311,
"rendered_tick": 311,
"tool_tip": [
0,
1.5,
0
]
},
"moving": {
"joints": [
6.166264319539167,
3.666650000000003,
-2.0129466859294602,
4.499999999999995,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 336,
"rendered_tick": 330,
"tool_tip": [
0,
1.4879917702595602,
0
],
"tcp_error": 2.7755575615628914e-17
},
"stopped": {
"joints": [
6.56128605042624,
3.666650000000003,
-2.8412572372826563,
6.30000000000001,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 347,
"rendered_tick": 347,
"tool_tip": [
0,
1.4715874276271734,
0
],
"tcp_error": 5.551115123125783e-17
}
},
{
"axis": "c",
"before": {
"joints": [
6.56128605042624,
3.666650000000003,
-2.8412572372826563,
6.30000000000001,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 347,
"rendered_tick": 347,
"tool_tip": [
0,
1.4715874276271734,
0
]
},
"moving": {
"joints": [
6.259816863284065,
4.05287171910206,
-2.807974729167359,
6.30000000000001,
4.499999999999995
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 372,
"rendered_tick": 372,
"tool_tip": [
0,
1.4719202527083264,
0
],
"tcp_error": 6.938893903907228e-18
},
"stopped": {
"joints": [
6.130945648374414,
4.200492284609181,
-2.793747214585462,
6.30000000000001,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 383,
"rendered_tick": 383,
"tool_tip": [
0,
1.4720625278541453,
0
],
"tcp_error": 2.2887833992611187e-16
}
},
{
"axis": "b",
"before": {
"joints": [
6.130945648374414,
4.200492284609181,
-2.793747214585462,
6.30000000000001,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 383,
"rendered_tick": 383,
"tool_tip": [
0,
1.4720625278541453,
0
]
},
"moving": {
"joints": [
7.840448318636497,
4.200492284609181,
-7.46817651846061,
16.199999999999992,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 426,
"rendered_tick": 420,
"tool_tip": [
0,
1.4340259659607903,
0
],
"tcp_error": 0
},
"stopped": {
"joints": [
8.063291030797899,
4.200492284609181,
-8.346382633448467,
17.999999999999954,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 437,
"rendered_tick": 437,
"tool_tip": [
0,
1.4165361736655155,
0
],
"tcp_error": 2.2887833992611187e-16
}
},
{
"axis": "c",
"before": {
"joints": [
8.063291030797899,
4.200492284609181,
-8.346382633448467,
17.999999999999954,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 437,
"rendered_tick": 437,
"tool_tip": [
0,
1.4165361736655155,
0
]
},
"moving": {
"joints": [
7.5982993210492396,
4.6836006491845,
-8.195297668366113,
17.999999999999954,
12.60000000000002
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 468,
"rendered_tick": 461,
"tool_tip": [
0,
1.41752527642095,
0
],
"tcp_error": 2.2247786310271853e-16
},
"stopped": {
"joints": [
7.456439115506413,
4.811480064556107,
-8.1492044934736,
17.999999999999954,
14.40000000000003
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 479,
"rendered_tick": 474,
"tool_tip": [
0,
1.418507955065264,
0
],
"tcp_error": 1.5515838457795457e-17
}
}
]
}
],
"browser_errors": []
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

View File

@@ -0,0 +1,129 @@
{
"report_id": "subpath-deployment-v1",
"status": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"url": "http://127.0.0.1:5175/dist/",
"machine": "xyzac-trt",
"icons": [
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/axis-24x24.png",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_estop.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_power.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_open.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_verify.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_reload.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_run.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_step.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_pause.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_stop.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_blockdelete.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_optpause.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_zoomin.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_zoomout.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_axis_z.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_axis_z2.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_axis_x.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_axis_y.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_axis_y2.png",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_axis_p.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_rotate.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_clear.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/spindle_ccw.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/spindle_cw.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_zoomin.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_zoomout.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_axis_z.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_verify.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_reload.gif",
"loaded": true
},
{
"src": "http://127.0.0.1:5175/dist/linuxcnc/share/axis/images/tool_open.gif",
"loaded": true
}
],
"errors": []
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,21 @@
{
"schema": "machine-manager-browser.v1",
"report_id": "GLB-MGR-E02",
"mode": "production-preview",
"status": "verified",
"checks": [
"eight GLB parts rendered with studio PMREM lighting",
"eight-part roots have unique single DOFs; fixed base cannot move; numeric input drives only bound X",
"validated assembly exports a self-contained managed GLB",
"validated hierarchy applied through LOAD_WORKSPACE with geometry and physical zero in userData",
"same component assembly switches to BC hierarchy and applies BC geometry",
"BC five-axis program drives managed model from authoritative WASM joints",
"production bundle exercised through AC/BC UI apply and WASM program motion"
],
"browser_errors": [],
"final": {
"program": "running",
"machine": "ON",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
}
}

View File

@@ -0,0 +1,21 @@
{
"schema": "machine-manager-browser.v1",
"report_id": "GLB-MGR-E01",
"mode": "development-source",
"status": "verified",
"checks": [
"eight GLB parts rendered with studio PMREM lighting",
"eight-part roots have unique single DOFs; fixed base cannot move; numeric input drives only bound X",
"validated assembly exports a self-contained managed GLB",
"validated hierarchy applied through LOAD_WORKSPACE with geometry and physical zero in userData",
"same component assembly switches to BC hierarchy and applies BC geometry",
"BC five-axis program drives managed model from authoritative WASM joints",
"AC/BC WASM joint projection subtracts physical zero, preserves userData and rejects invalid hierarchy"
],
"browser_errors": [],
"final": {
"program": "aborted",
"machine": "ON",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
}
}

View File

@@ -0,0 +1,15 @@
{
"report_id": "GLB-MGR-E17",
"status": "verified",
"url": "http://127.0.0.1:5180/",
"checks": [
"named GLB downloads and atomic browser-library copy with time/size/checksum; editor display changes mark document dirty",
"reload and local-library open restore eight source files, exact edited hierarchy, axis/sign, visibility, origins and calibration; second save has identical metadata",
"explicit open-file entry restores document; library redownload is byte identical; delete affects only chosen saved copy",
"inconsistent editor metadata is rejected atomically without replacing the current draft",
"saved GLB loads through control-panel importer and can be sent back into editor with eight original parts",
"legacy GLB remains editable via single-assembly fallback",
"local storage failure does not prevent GLB download and is visibly reported"
],
"errors": []
}

View File

@@ -0,0 +1,15 @@
{
"report_id": "GLB-MGR-E17",
"status": "verified",
"url": "https://49.232.250.35:58015/",
"checks": [
"named GLB downloads and atomic browser-library copy with time/size/checksum; editor display changes mark document dirty",
"reload and local-library open restore eight source files, exact edited hierarchy, axis/sign, visibility, origins and calibration; second save has identical metadata",
"explicit open-file entry restores document; library redownload is byte identical; delete affects only chosen saved copy",
"inconsistent editor metadata is rejected atomically without replacing the current draft",
"saved GLB loads through control-panel importer and can be sent back into editor with eight original parts",
"legacy GLB remains editable via single-assembly fallback",
"local storage failure does not prevent GLB download and is visibly reported"
],
"errors": []
}

View File

@@ -0,0 +1 @@
{"schema":"axis-control-inventory.v1","status":"verified","documented_controls":146,"duplicate_command_entries_removed":["machine_menu","view_menu","program_pane_load","tool_probe_commands"],"contract":"linuxcnc-axis-web-control-panel-source-logic.md"}

View File

@@ -0,0 +1,20 @@
{
"report_id": "GLB-MGR-E17-CLOUD",
"status": "verified",
"checked_at": "2026-09-21T13:19:10.126525+00:00",
"url": "https://49.232.250.35:58015/",
"source_commit": "8443930edbb91f80234bb6de053b7a3cc76245ae",
"release": "/var/www/linuxcnc-wasm-58015/releases/20260921-linuxcnc-wasm-8443930",
"bundle": "assets/index-EHYipPfn.js",
"archive_sha256": "961e37e9b164ffc01831a5cba583d26767238ffe1da0edb95c00f8936bc0eadc",
"checks": [
"named GLB downloads and atomic browser-library copy with time/size/checksum; editor display changes mark document dirty",
"reload and local-library open restore eight source files, exact edited hierarchy, axis/sign, visibility, origins and calibration; second save has identical metadata",
"explicit open-file entry restores document; library redownload is byte identical; delete affects only chosen saved copy",
"inconsistent editor metadata is rejected atomically without replacing the current draft",
"saved GLB loads through control-panel importer and can be sent back into editor with eight original parts",
"legacy GLB remains editable via single-assembly fallback",
"local storage failure does not prevent GLB download and is visibly reported"
],
"browser_errors": []
}

View File

@@ -0,0 +1,21 @@
{
"schema": "machine-manager-browser.v1",
"report_id": "GLB-MGR-E02",
"mode": "production-preview",
"status": "verified",
"checks": [
"eight GLB parts rendered with studio PMREM lighting",
"eight-part roots have unique single DOFs; fixed base cannot move; numeric input drives only bound X",
"validated assembly exports a self-contained managed GLB",
"validated hierarchy applied through LOAD_WORKSPACE with geometry and physical zero in userData",
"same component assembly switches to BC hierarchy and applies BC geometry",
"BC five-axis program drives managed model from authoritative WASM joints",
"production bundle exercised through AC/BC UI apply and WASM program motion"
],
"browser_errors": [],
"final": {
"program": "running",
"machine": "ON",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@@ -0,0 +1 @@
{"report_id":"GLB-MGR-E14-HISTORY","status":"verified","checks":["undo/redo","duplicate edits ignored","new edit discards redo","30-entry bound","clear preserves draft","machine type change preserves general axes and clears incompatible tilt","undo restores type and bindings"]}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
{
"report_id": "GLB-MGR-E14",
"status": "verified",
"url": "http://127.0.0.1:5180/",
"checks": [
"search expands real nested nodes; axis overview locates selection; binding undo/redo",
"empty input preserves last pose; repeated selection/input does not concatenate; single-axis step and reset",
"TRT forbidden offset blocks export before build; calibration undo/redo",
"view presets and selected fitting; deletion undo restores model with all axis bindings",
"failed batch import leaves existing assembly intact",
"live mode locks edits; desktop, short viewport and narrow viewport keep footer visible without overflow"
],
"errors": []
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
{"schema":"axis-control-inventory.v1","status":"verified","documented_controls":115,"duplicate_command_entries_removed":["machine_menu","view_menu","program_pane_load","tool_probe_commands"],"contract":"linuxcnc-axis-web-control-panel-source-logic.md"}

View File

@@ -0,0 +1,33 @@
{
"report_id": "GLB-MGR-E13-CLOUD",
"status": "verified",
"checked_at": "2026-09-21T03:32:29.065851+00:00",
"url": "https://49.232.250.35:58015/",
"commit": "d8488641ca377fe9c930ea48d42249f90953529d",
"release": "/var/www/linuxcnc-wasm-58015/releases/20260921-linuxcnc-wasm-d848864",
"archive_sha256": "fcd454879625de8b6ecf83d8e064ca2df472a71ac591abee189b7e20e6ee506b",
"bundle": "assets/index-DZs5acdt.js",
"cloud_regression": {
"schema": "machine-manager-browser.v1",
"report_id": "GLB-MGR-E02",
"mode": "production-preview",
"status": "verified",
"checks": [
"eight GLB parts rendered with studio PMREM lighting",
"eight-part roots have unique single DOFs; fixed base cannot move; numeric input drives only bound X",
"validated assembly exports a self-contained managed GLB",
"validated hierarchy applied through LOAD_WORKSPACE with geometry and physical zero in userData",
"same component assembly switches to BC hierarchy and applies BC geometry",
"BC five-axis program drives managed model from authoritative WASM joints",
"production bundle exercised through AC/BC UI apply and WASM program motion"
],
"browser_errors": [],
"final": {
"program": "running",
"machine": "ON",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
}
},
"mill700_full_validation": "coverage/glb-machine-manager/joint-dof/browser.report.json",
"mill700_full_validation_scope": "local production build, same deployed bundle; XYZAC and XYZBC with 8 moving ticks each"
}

View File

@@ -0,0 +1 @@
{"report_id":"GLB-MGR-E13-MATH","status":"verified","checks":["parent-frame motion with nonidentity zero orientation","unit/sign/physical-zero conversion","100 updates without drift","child inheritance","rotation about own origin","malformed JSON rejected","missing live axis rejected atomically"]}

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
{
"report_id": "GLB-MGR-E15",
"url": "http://127.0.0.1:5180",
"status": "verified",
"checks": [
"dialog selects BC while controller stays AC; switching drops incompatible tilt only; undo/redo restores type and bindings; saved GLB contains BC metadata",
"controller workspace changes do not change draft type; reopening saved machine restores type, calibration and hierarchy in one undoable transaction",
"applying BC design from AC controller changes controller type without altering design draft",
"controller import accepts saved BC GLB from AC workspace and automatically switches to BC with physical zero"
],
"errors": []
}

View File

@@ -0,0 +1,12 @@
{
"report_id": "GLB-MGR-E15",
"url": "https://49.232.250.35:58015/",
"status": "verified",
"checks": [
"dialog selects BC while controller stays AC; switching drops incompatible tilt only; undo/redo restores type and bindings; saved GLB contains BC metadata",
"controller workspace changes do not change draft type; reopening saved machine restores type, calibration and hierarchy in one undoable transaction",
"applying BC design from AC controller changes controller type without altering design draft",
"controller import accepts saved BC GLB from AC workspace and automatically switches to BC with physical zero"
],
"errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

View File

@@ -0,0 +1 @@
{"schema":"axis-control-inventory.v1","status":"verified","documented_controls":134,"duplicate_command_entries_removed":["machine_menu","view_menu","program_pane_load","tool_probe_commands"],"contract":"linuxcnc-axis-web-control-panel-source-logic.md"}

View File

@@ -0,0 +1,17 @@
{
"report_id": "GLB-MGR-E15-CLOUD",
"status": "verified",
"checked_at": "2026-09-21T09:49:43.644683+00:00",
"url": "https://49.232.250.35:58015/",
"source_commit": "338500dfc298270fcb2adee18b36afd23e32c9e5",
"release": "/var/www/linuxcnc-wasm-58015/releases/20260921-linuxcnc-wasm-338500d",
"bundle": "assets/index-C8kh60HL.js",
"archive_sha256": "dcbcefdbf521359d4c35c09fd11c27aa110f05d7ce242d482fc5bc73b5c6250d",
"checks": [
"dialog selects BC while controller stays AC; switching drops incompatible tilt only; undo/redo restores type and bindings; saved GLB contains BC metadata",
"controller workspace changes do not change draft type; reopening saved machine restores type, calibration and hierarchy in one undoable transaction",
"applying BC design from AC controller changes controller type without altering design draft",
"controller import accepts saved BC GLB from AC workspace and automatically switches to BC with physical zero"
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1 @@
{"report_id":"GLB-MGR-E14-HISTORY","status":"verified","checks":["undo/redo","duplicate edits ignored","new edit discards redo","30-entry bound","clear preserves draft","machine type change preserves general axes and clears incompatible tilt","undo restores type and bindings"]}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
# 可导入的 MILL700 验收模型
这两份 GLB 由三维机床管理器实际保存,均已通过控制面板“导入机床模型”、五轴程序与参数恢复验证。用于演示 AC/BC 文件识别和单自由度映射;由同一个 MILL700 几何资产生成,不代表两台实机的测量标定。
- `MILL700-xyzac.glb`:XYZAC,主轴 JT1/JT2/JT3 → XYZ,工作台 JT1/JT2 → A/C。
- `MILL700-xyzbc.glb`:XYZBC,主轴 JT1/JT2/JT3 → XYZ,工作台 JT1/JT2 → B/C。
- 两者测试配置:Z 反向;物理零点 X=5、Z=7 mm,倾转轴=12°、C=9°;C 原点/倾转偏置为 0。
- 使用时:控制面板关机且空闲 → 导入机床模型 → 导入 GLB → 选择文件;机型和关节参数从 GLB 自动读取。
- 编辑时:三维机床管理 → 导入 GLB 部件 → 单独选择文件,恢复完整设计文档;根据需要核对并修改轴绑定和标定,再保存机床模型 GLB。

View File

@@ -0,0 +1,14 @@
{
"report_id": "GLB-MGR-E14",
"status": "verified",
"url": "http://127.0.0.1:5180/",
"checks": [
"search expands real nested nodes; axis overview locates selection; binding undo/redo",
"empty input preserves last pose; repeated selection/input does not concatenate; single-axis step and reset",
"TRT forbidden offset blocks export before build; calibration undo/redo",
"view presets and selected fitting; deletion undo restores model with all axis bindings",
"failed batch import leaves existing assembly intact",
"live mode locks edits; desktop, short viewport and narrow viewport keep footer visible without overflow"
],
"errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

View File

@@ -0,0 +1,16 @@
{
"status": "verified",
"baseline": false,
"checks": [
"manager export retains source PBR colors, roughness, metalness and normal maps",
"real m1 and saturated RGB / white / metal / dark material probes render without browser exceptions",
"control panel uses the same AgX neutral studio for imported GLBs"
],
"errors": [],
"manager": {
"lighting": "neutral-studio-pmrem",
"toneMapping": "AgX",
"exposure": "1",
"meshes": 41
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -0,0 +1,13 @@
{
"status": "verified",
"baseline": true,
"checks": [
"real m1 and saturated RGB / white / metal / dark material probes render without browser exceptions"
],
"errors": [],
"manager": {
"lighting": "studio-pmrem",
"exposure": "1.45",
"meshes": 41
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View File

@@ -0,0 +1,626 @@
{
"schema": "machine-manager-mill700-browser.v1",
"report_id": "GLB-MGR-E05",
"status": "verified",
"model": {
"path": "/home/mes006/linuxcncWebWASM/MILL700-U_1.glb",
"bytes": 9418852,
"sha256": "bf37130681cc6462412e52744519516e8ade2a3212dd69153c0b1b3e415bcf66"
},
"checks": [
"root and internal node transforms update their local position and posture relative to their parent",
"MILL700 JT3 edits preserve parent and sibling transforms; child inherits movement and rotation around the joint origin; values survive reselection and dialog reopening",
"reparenting an edited node preserves world pose and subsequent inputs edit that node under its new parent",
"selected MILL700 joint displays its local XYZ coordinate system at local origin",
"existing 132-node, depth-6 hierarchy displayed as a draggable tree with node origins",
"each joint rotates about its own origin while children inherit parent motion",
"metallic MILL700 surfaces rendered with studio PMREM lighting; screenshot captured for visual review",
"imported model can be deleted and its tree is removed"
],
"nodeEditing": {
"before": {
"parent": {
"local": [
-0.003969311714172363,
-0.20427599549293518,
0.40563321113586426
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7138478483851618,
-0.515726496296395,
1.8940227031707764
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"sibling": {
"local": [
0.0031614303588867188,
0.12106472253799438,
-0.2689887285232544
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7522836493599145,
-0.40088159702548765,
1.625033974647522
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"child": {
"local": [
0.0013986825942993164,
0.0009530782699584961,
-0.8500750064849854
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.4232056214947701,
-1.3709958977290349,
1.4128730297088623
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"selected": {
"local": [
-0.02080368995666504,
-0.9040489196777344,
0.3689253330230713
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.4241939812409632,
-1.3723698759677156,
2.2629480361938477
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
}
},
"translated": {
"parent": {
"local": [
-0.003969311714172363,
-0.20427599549293518,
0.40563321113586426
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7138478483851618,
-0.515726496296395,
1.8940227031707764
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"sibling": {
"local": [
0.0031614303588867188,
0.12106472253799438,
-0.2689887285232544
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7522836493599145,
-0.40088159702548765,
1.625033974647522
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"child": {
"local": [
0.0013986825942993164,
0.0009530782699584961,
-0.8500750064849854
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.2908934330630653,
-1.3228381995092735,
1.3688730297088623
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"selected": {
"local": [
0.12,
-0.9040489196777344,
0.3249253330230713
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.2918817928092583,
-1.3242121777479543,
2.2189480361938476
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
}
},
"rotated": {
"parent": {
"local": [
-0.003969311714172363,
-0.20427599549293518,
0.40563321113586426
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7138478483851618,
-0.515726496296395,
1.8940227031707764
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"sibling": {
"local": [
0.0031614303588867188,
0.12106472253799438,
-0.2689887285232544
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7522836493599145,
-0.40088159702548765,
1.625033974647522
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"child": {
"local": [
0.0013986825942993164,
0.0009530782699584961,
-0.8500750064849854
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.2915667029697908,
-1.3225492316931085,
1.3688730297088623
],
"worldQuaternion": [
0,
0,
0.38268343236508984,
0.9238795325112867
]
},
"selected": {
"local": [
0.12,
-0.9040489196777344,
0.3249253330230713
],
"localQuaternion": [
0,
0,
0.21643961393810288,
0.9762960071199334
],
"world": [
-1.2918817928092583,
-1.3242121777479543,
2.2189480361938476
],
"worldQuaternion": [
0,
0,
0.38268343236508984,
0.9238795325112867
]
}
}
},
"hierarchy": {
"root": "MILL700-U_1",
"nodes": 132,
"meshes": 126,
"maxDepth": 6,
"materials": 126,
"metallic": 110
},
"motion": {
"input": {
"x": 10,
"y": 20,
"z": 30,
"a": 15,
"c": 45
},
"baseline": {
"base": {
"local": [
0.1,
0,
0
],
"localQuaternion": [
0,
0,
0.17364817766693033,
0.984807753012208
],
"world": [
0.1,
0,
0
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"x": {
"local": [
0.4726388454437256,
1.681300401687622,
-0.9978671073913574
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7799844207142423,
-0.3224122661666029,
1.488389492034912
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"y": {
"local": [
-0.003969311714172363,
-0.20427599549293518,
0.40563321113586426
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7138478483851618,
-0.515726496296395,
1.8940227031707764
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"z": {
"local": [
0.12,
-0.9040489196777344,
0.3249253330230713
],
"localQuaternion": [
0,
0,
0.21643961393810288,
0.9762960071199334
],
"world": [
-1.2918817928092583,
-1.3242121777479543,
2.2189480361938476
],
"worldQuaternion": [
0,
0,
0.38268343236508984,
0.9238795325112867
]
},
"tilt": {
"local": [
0.49799561500549316,
1.1399997472763062,
-1.6030043363571167
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.571021124066044,
-0.8223959707837081,
0.8832522630691528
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"c": {
"local": [
-0.00008916854858398438,
-0.6340826749801636,
-0.08644759654998779
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.3542358677161157,
-1.418269278870524,
0.796804666519165
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
}
},
"driven": {
"base": {
"local": [
0.1,
0,
0
],
"localQuaternion": [
0,
0,
0.17364817766693033,
0.984807753012208
],
"world": [
0.1,
0,
0
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"x": {
"local": [
0.4826388454437256,
1.681300401687622,
-0.9978671073913574
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7705874945063833,
-0.3189920647333462,
1.488389492034912
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"y": {
"local": [
-0.003969311714172363,
-0.1842759954929352,
0.40563321113586426
],
"localQuaternion": [
0,
0,
0,
1
],
"world": [
-1.7112913250438162,
-0.4935124424474202,
1.8940227031707764
],
"worldQuaternion": [
0,
0,
0.17364817766693033,
0.9848077530122079
]
},
"z": {
"local": [
0.12,
-0.9040489196777344,
0.3549253330230713
],
"localQuaternion": [
0,
0,
0.21643961393810288,
0.9762960071199334
],
"world": [
-1.2893252694679127,
-1.3019981238989793,
2.2489480361938474
],
"worldQuaternion": [
0,
0,
0.38268343236508984,
0.9238795325112867
]
},
"tilt": {
"local": [
0.49799561500549316,
1.1399997472763062,
-1.6030043363571167
],
"localQuaternion": [
0.13052619222005157,
0,
0,
0.9914448613738104
],
"world": [
-1.571021124066044,
-0.8223959707837081,
0.8832522630691528
],
"worldQuaternion": [
0.12854320606946854,
0.022665635416815412,
0.1721625934348045,
0.9763825861650425
]
},
"c": {
"local": [
-0.00008916854858398438,
-0.6340826749801636,
-0.08644759654998779
],
"localQuaternion": [
0,
0,
0.3826834323650898,
0.9238795325112867
],
"world": [
-1.369277957263005,
-1.3769414774990314,
0.6356376244864839
],
"worldQuaternion": [
0.12743220028900526,
-0.02825103865291858,
0.5327029357136194,
0.8361761150778141
]
}
}
},
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

View File

@@ -0,0 +1,13 @@
{
"status": "verified",
"checks": [
"same filenames retain unique selection; model selection clears search and highlights preview",
"viewport click picks correct import; orbit drag returning to start does not select",
"delete unselected/selected import by ID; undo restores and selects it; redo repairs selection",
"deleting parent import preserves separately imported child; undo restores parent link",
"last deletion clears preview; undo restores selection from empty state",
"real m1 deletion/undo preserves all five bindings; live follow locks deletion",
"selection and deletion reachable on short and narrow viewports"
],
"errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

View File

@@ -0,0 +1,24 @@
{
"report_id": "GLB-MGR-E12-CLOUD",
"status": "verified",
"checked_at": "2026-09-21T01:39:10.681054+00:00",
"url": "https://49.232.250.35:58015/",
"source_commit": "91ebd56d6d34ca3f88a73541cfe64f7bef3d8483",
"release": "/var/www/linuxcnc-wasm-58015/releases/20260921-linuxcnc-wasm-91ebd56",
"archive_sha256": "a4ae18ee92a08af7b532052620d9d349539e4424c0ec2f12e65fa8eafacee1a7",
"bundle": "assets/index-CJLtuazD.js",
"command": "PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.js MACHINE_MANAGER_URL=https://49.232.250.35:58015/ node scripts/test_machine_manager_mill700_browser.mjs",
"report": "coverage/glb-machine-manager/mill700/browser.report.json",
"report_sha256": "3555f9efe0cebba79a0bec8afbff8a4a44cc1278d0f36ff737fae9a74e18b9e1",
"checks": [
"root and internal node transforms update their local position and posture relative to their parent",
"MILL700 JT3 edits preserve parent and sibling transforms; child inherits movement and rotation around the joint origin; values survive reselection and dialog reopening",
"reparenting an edited node preserves world pose and subsequent inputs edit that node under its new parent",
"selected MILL700 joint displays its local XYZ coordinate system at local origin",
"existing 132-node, depth-6 hierarchy displayed as a draggable tree with node origins",
"each joint rotates about its own origin while children inherit parent motion",
"metallic MILL700 surfaces rendered with studio PMREM lighting; screenshot captured for visual review",
"imported model can be deleted and its tree is removed"
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

View File

@@ -0,0 +1,85 @@
{
"schema": "physical-case-glb-browser.v1",
"status": "verified",
"cases": [
{
"id": "xyzac-trt",
"tree_nodes": 21,
"scene_objects": "24",
"rendered": "true"
},
{
"id": "xyzbc-trt",
"tree_nodes": 21,
"scene_objects": "24",
"rendered": "true"
},
{
"id": "xyzab-tdr",
"tree_nodes": 21,
"scene_objects": "24",
"rendered": "true"
},
{
"id": "bridge-mill-5axiskins",
"tree_nodes": 21,
"scene_objects": "24",
"rendered": "true"
},
{
"id": "max5-maxkins",
"tree_nodes": 21,
"scene_objects": "24",
"rendered": "true"
},
{
"id": "hexapod-genhexkins",
"tree_nodes": 21,
"scene_objects": "24",
"rendered": "true"
},
{
"id": "pentapod-pentakins",
"tree_nodes": 19,
"scene_objects": "22",
"rendered": "true"
},
{
"id": "puma-pumakins",
"tree_nodes": 19,
"scene_objects": "22",
"rendered": "true"
},
{
"id": "puma-genserkins",
"tree_nodes": 19,
"scene_objects": "22",
"rendered": "true"
},
{
"id": "trivkins-xyzab",
"tree_nodes": 21,
"scene_objects": "24",
"rendered": "true"
},
{
"id": "trivkins-xyzcw",
"tree_nodes": 22,
"scene_objects": "25",
"rendered": "true"
},
{
"id": "trivkins-xyzya",
"tree_nodes": 22,
"scene_objects": "25",
"rendered": "true"
},
{
"id": "scorbot-kins",
"tree_nodes": 17,
"scene_objects": "20",
"rendered": "true"
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

View File

@@ -0,0 +1,266 @@
{
"schema": "five-axis-live-models.v1",
"url": "http://127.0.0.1:5174/",
"cases": [
{
"id": "xyzac-trt",
"coordinates": "XYZAC",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"A",
"C"
],
"expectedKeys": [
"X",
"Y",
"Z",
"A",
"C"
]
},
{
"id": "xyzbc-trt",
"coordinates": "XYZBC",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"B",
"C"
],
"expectedKeys": [
"X",
"Y",
"Z",
"B",
"C"
]
},
{
"id": "xyzab-tdr",
"coordinates": "XYZAB",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"A",
"B"
],
"expectedKeys": [
"X",
"Y",
"Z",
"A",
"B"
]
},
{
"id": "bridge-mill-5axiskins",
"coordinates": "XYZBCWY",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"B",
"C",
"W",
"Y#2"
],
"expectedKeys": [
"X",
"Y",
"Z",
"B",
"C",
"W",
"Y#2"
]
},
{
"id": "max5-maxkins",
"coordinates": "XYZBC",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"B",
"C",
"J5"
],
"expectedKeys": [
"X",
"Y",
"Z",
"B",
"C",
"J5"
]
},
{
"id": "hexapod-genhexkins",
"coordinates": "XYZABC",
"glbLoaded": true,
"slotKeys": [
"J0",
"J1",
"J2",
"J3",
"J4",
"J5"
],
"expectedKeys": [
"J0",
"J1",
"J2",
"J3",
"J4",
"J5"
]
},
{
"id": "pentapod-pentakins",
"coordinates": "XYZAB",
"glbLoaded": true,
"slotKeys": [
"J0",
"J1",
"J2",
"J3",
"J4"
],
"expectedKeys": [
"J0",
"J1",
"J2",
"J3",
"J4"
]
},
{
"id": "puma-pumakins",
"coordinates": "XYZABC",
"glbLoaded": true,
"slotKeys": [
"J0",
"J1",
"J2",
"J3",
"J4",
"J5"
],
"expectedKeys": [
"J0",
"J1",
"J2",
"J3",
"J4",
"J5"
]
},
{
"id": "puma-genserkins",
"coordinates": "XYZABC",
"glbLoaded": true,
"slotKeys": [
"J0",
"J1",
"J2",
"J3",
"J4",
"J5"
],
"expectedKeys": [
"J0",
"J1",
"J2",
"J3",
"J4",
"J5"
]
},
{
"id": "trivkins-xyzab",
"coordinates": "XYZAB",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"A",
"B"
],
"expectedKeys": [
"X",
"Y",
"Z",
"A",
"B"
]
},
{
"id": "trivkins-xyzcw",
"coordinates": "XYZCW",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"C",
"W"
],
"expectedKeys": [
"X",
"Y",
"Z",
"C",
"W"
]
},
{
"id": "trivkins-xyzya",
"coordinates": "XYZYA",
"glbLoaded": true,
"slotKeys": [
"X",
"Y",
"Z",
"Y#2",
"A"
],
"expectedKeys": [
"X",
"Y",
"Z",
"Y#2",
"A"
]
},
{
"id": "scorbot-kins",
"coordinates": "XYZAB",
"glbLoaded": true,
"slotKeys": [
"J0",
"J1",
"J2",
"J3",
"J4"
],
"expectedKeys": [
"J0",
"J1",
"J2",
"J3",
"J4"
]
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@@ -0,0 +1,20 @@
{
"schema": "rtcp-program-library-browser.v1",
"status": "verified",
"checks": [
"AC machine defaults to 15 XYZAC/common programs",
"all-source scope retains 32 upstream programs plus 13 case-specific dry-run programs",
"support remap is source-readable and execution-disabled",
"mismatched XYZAB program is visible and execution-disabled",
"XYZAC switchkins test loaded through WASM with canonical source hash and preview",
"generated XYZAC native dry-run loaded and completed in the Web control panel",
"native Hexapod program switches to its generic WASM machine profile and loads"
],
"browser_errors": [],
"final": {
"coordinates": "linuxcnc/configs/sim/axis/vismach/hexapod-sim/hexapod.ini",
"program_path": "machine-cases/hexapod-genhexkins.ngc",
"program_status": "loaded",
"source_hash": "fnv1a64:33cc9e04e06ae391"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Some files were not shown because too many files have changed in this diff Show More