Retest: joints mate face to face and Drive Joints takes the keyboard (4c3a5d9): s07/s20 type the angle straight away and check B sits on A's top (z 10..20); harness bbox check measures bodies as placed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
This commit is contained in:
bherbruckandClaude Opus 5.5 committed 2026-10-08 11:45:44 +00:00
1 parent 6653db806e
commit 3d384c7de7
3 files changed
+32 -17

No files matched your search

+15
View File
@@ -446,6 +446,21 @@ pub fn check(h: &mut Harness, e: &Value) -> Result<(), String> {
return Err(format!("named views: got {n}, want {v}"));
}
}
"bbox" => {
// {body, min?: [x|null, y|null, z|null], max?: […]}: where a body is (±1e-3 mm).
let name = v["body"].as_str().unwrap_or_default();
// Where it is in the assembly (measured as placed).
let m = h.call("engine.execute", json!({"command": "MeasureCommand", "params": {"bodies": [name]}}))["result"].clone();
let b = m["bodies"].as_array().and_then(|a| a.first()).cloned().ok_or_else(|| format!("no body {name}: {m}"))?;
for side in ["min", "max"] {
for (i, want) in v[side].as_array().into_iter().flatten().enumerate() {
let (Some(w), Some(g)) = (want.as_f64(), b["bbox"][side].get(i).and_then(Value::as_f64)) else { continue };
if (w - g).abs() > 1e-3 {
return Err(format!("{name} bbox {side}[{i}]: got {g}, want {w}"));
}
}
}
}
"home" => {
if ui["home"] != *v {
return Err(format!("start page open: got {}, want {v}", ui["home"]));
@@ -187,16 +187,26 @@
}
}
},
{
"expect": {
"bbox": {
"body": "Body2",
"min": [
null,
null,
10
],
"max": [
null,
null,
20
]
}
}
},
{
"start": "FusionMoveJointsCommand"
},
{
"widget": "0 deg"
},
{
"key": "A",
"cmd": true
},
{
"text": "90"
},
@@ -192,9 +192,6 @@
"plane": "XZ"
}
},
{
"debug": 1
},
{
"key": "Enter"
},
@@ -210,13 +207,6 @@
{
"start": "FusionMoveJointsCommand"
},
{
"widget": "0 deg"
},
{
"key": "A",
"cmd": true
},
{
"text": "90"
},