Action matrix: every ordinary action on every face, edge, vertex and body of the design corpus (#553)
apps/solidcraft-cli/tests/action_matrix.rs tries sketch, offset/angle/mid planes, press pull, extrude from a face, hole, draft, shell, fillet, chamfer, axes, points, planes, projection, move, copy, mirror and pattern on the final bodies of 104 designs (the old design files, the examples, the 76 reference recipes, the enclosure demos, the Pi case built through the UI, eight typical parts), through the commands and picks the desktop sends, each design in its own process, with an edit round on a sample of passes. tests/action_matrix/baseline.json is a ratchet: an action that passed there and fails now fails the test; newly passing ones are reported for cargo xtask action-matrix --bless. Every CI run checks a fixed sample; the nightly Action matrix job runs the whole matrix in four parts. 30,567 of 35,576 actions pass (85.9%); results and causes in docs/action-matrix.md, one ignored reproduction per open cause (#556-#568). Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
9283d2b5bb
commit
736d9277b8
17 files changed
+14314
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,11 @@
|
||||
{"description": "A 70 x 50 x 30 box, its vertical edges rounded R6, shelled 2 mm open on top.",
|
||||
"commands": [
|
||||
{"command": "parameters.change", "params": {"name": "height", "expression": "30 mm"}},
|
||||
{"command": "parameters.change", "params": {"name": "wall", "expression": "2 mm"}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "name": "Outline"}},
|
||||
{"command": "sketch.rectangle.center", "params": {"center": [0, 0], "corner": [35, 25]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": "height"}},
|
||||
{"command": "solid.fillet", "params": {"edges": [[35, 25, 15], [-35, 25, 15], [35, -25, 15], [-35, -25, 15]], "radius": 6}},
|
||||
{"command": "solid.shell", "params": {"faces": [[0, 0, 30]], "thickness": "wall"}}
|
||||
]}
|
||||
@@ -0,0 +1,12 @@
|
||||
{"description": "An 80 x 50 x 10 plate: a counterbored hole patterned 3 x 2, its top outline chamfered 1 mm.",
|
||||
"commands": [
|
||||
{"command": "parameters.change", "params": {"name": "thick", "expression": "10 mm"}},
|
||||
{"command": "parameters.change", "params": {"name": "pitch", "expression": "25 mm"}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "name": "Plate"}},
|
||||
{"command": "sketch.rectangle.two_point", "params": {"p0": [0, 0], "p1": [80, 50]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": "thick"}},
|
||||
{"command": "solid.hole", "params": {"position": [15, 12, 10], "diameter": 5, "type": "counterbore", "cb_diameter": 9, "cb_depth": 3, "name": "Hole1"}},
|
||||
{"command": "solid.pattern.rectangular", "params": {"features": ["Hole1"], "dir1": [1, 0, 0], "count1": 3, "spacing1": "pitch", "dir2": [0, 1, 0], "count2": 2, "spacing2": "pitch"}},
|
||||
{"command": "solid.chamfer", "params": {"edges": [[40, 0, 10], [80, 25, 10], [40, 50, 10], [0, 25, 10]], "distance": 1}}
|
||||
]}
|
||||
@@ -0,0 +1,16 @@
|
||||
{"description": "A transition piece: a 40 x 30 rectangle lofted to a 12 mm circle 35 mm above it, on a 6 mm base plate.",
|
||||
"commands": [
|
||||
{"command": "parameters.change", "params": {"name": "rise", "expression": "35 mm"}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "name": "Plate"}},
|
||||
{"command": "sketch.rectangle.center", "params": {"center": [0, 0], "corner": [30, 25]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": "6 mm"}},
|
||||
{"command": "sketch.create", "params": {"plane": {"face": [0, 0, 6]}, "name": "Bottom"}},
|
||||
{"command": "sketch.rectangle.center", "params": {"center": [0, 0], "corner": [20, 15]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "construct.plane.offset", "params": {"base": "XY", "offset": "rise + 6 mm", "name": "TopPlane"}},
|
||||
{"command": "sketch.create", "params": {"plane": "TopPlane", "name": "Top"}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [0, 0], "radius": 6}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.loft", "params": {"sections": [{"sketch": "Bottom"}, {"sketch": "Top"}], "operation": "join"}}
|
||||
]}
|
||||
@@ -0,0 +1,9 @@
|
||||
{"description": "Three bodies combined: a block joined with a cylinder standing on it, then a second block cut from the result.",
|
||||
"commands": [
|
||||
{"command": "parameters.change", "params": {"name": "post_h", "expression": "25 mm"}},
|
||||
{"command": "solid.box", "params": {"corner": [0, 0, 0], "length": 50, "width": 30, "height": 12, "body_name": "Block"}},
|
||||
{"command": "solid.cylinder", "params": {"base": [25, 15, 6], "radius": 8, "height": "post_h", "operation": "new_body", "body_name": "Post"}},
|
||||
{"command": "solid.combine", "params": {"target": "Block", "tools": ["Post"], "operation": "join"}},
|
||||
{"command": "solid.box", "params": {"corner": [-5, 10, 6], "length": 20, "width": 10, "height": 10, "operation": "new_body", "body_name": "Slot"}},
|
||||
{"command": "solid.combine", "params": {"target": "Block", "tools": ["Slot"], "operation": "cut"}}
|
||||
]}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"description": "A stepped knob revolved about Z: a flange, a waist and a cap, then the cap's top edge rounded.",
|
||||
"commands": [
|
||||
{
|
||||
"command": "parameters.change",
|
||||
"params": {
|
||||
"name": "flange_r",
|
||||
"expression": "20 mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XZ",
|
||||
"name": "Profile"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
20,
|
||||
0
|
||||
],
|
||||
[
|
||||
20,
|
||||
6
|
||||
],
|
||||
[
|
||||
10,
|
||||
6
|
||||
],
|
||||
[
|
||||
10,
|
||||
24
|
||||
],
|
||||
[
|
||||
14,
|
||||
24
|
||||
],
|
||||
[
|
||||
14,
|
||||
34
|
||||
],
|
||||
[
|
||||
0,
|
||||
34
|
||||
]
|
||||
],
|
||||
"closed": true,
|
||||
"ids": [
|
||||
"l1",
|
||||
"l2",
|
||||
"l3",
|
||||
"l4",
|
||||
"l5",
|
||||
"l6",
|
||||
"l7",
|
||||
"l8"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.dimension",
|
||||
"params": {
|
||||
"entities": [
|
||||
"origin",
|
||||
"l1.end"
|
||||
],
|
||||
"type": "horizontal",
|
||||
"value": "flange_r"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.revolve",
|
||||
"params": {
|
||||
"axis": "Z"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"description": "A sheet metal L bracket: a 60 x 40 base flange, a 30 mm flange up one long edge, and two holes cut through the base.",
|
||||
"commands": [
|
||||
{
|
||||
"command": "parameters.change",
|
||||
"params": {
|
||||
"name": "flange_h",
|
||||
"expression": "30 mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.rectangle.two_point",
|
||||
"params": {
|
||||
"p0": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"p1": [
|
||||
60,
|
||||
40
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "sheet.flange",
|
||||
"params": {
|
||||
"type": "base",
|
||||
"sketch": "Base"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sheet.flange",
|
||||
"params": {
|
||||
"type": "edge",
|
||||
"edges": [
|
||||
[
|
||||
30,
|
||||
40,
|
||||
0
|
||||
]
|
||||
],
|
||||
"height": "flange_h"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Holes"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
15,
|
||||
20
|
||||
],
|
||||
"radius": 2.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
45,
|
||||
20
|
||||
],
|
||||
"radius": 2.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"through_all": true,
|
||||
"direction": "symmetric",
|
||||
"operation": "cut"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{"description": "Three extrudes stacked, each sketched on the top face of the last: a 60 x 40 base, a 40 x 24 step and a round boss.",
|
||||
"commands": [
|
||||
{"command": "parameters.change", "params": {"name": "base_h", "expression": "10 mm"}},
|
||||
{"command": "parameters.change", "params": {"name": "step_h", "expression": "12 mm"}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "name": "Base"}},
|
||||
{"command": "sketch.rectangle.two_point", "params": {"p0": [0, 0], "p1": [60, 40]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": "base_h"}},
|
||||
{"command": "sketch.create", "params": {"plane": {"face": [30, 20, 10]}, "name": "Step"}},
|
||||
{"command": "sketch.rectangle.two_point", "params": {"p0": [10, 8], "p1": [50, 32]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": "step_h", "operation": "join"}},
|
||||
{"command": "sketch.create", "params": {"plane": {"face": [30, 20, 22]}, "name": "Boss"}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [30, 20], "radius": 7}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": "8 mm", "operation": "join"}}
|
||||
]}
|
||||
@@ -0,0 +1,12 @@
|
||||
{"description": "A handle: an 8 x 5 rounded-off rectangle swept along a path of two lines and an arc.",
|
||||
"commands": [
|
||||
{"command": "sketch.create", "params": {"plane": "XZ", "name": "Path"}},
|
||||
{"command": "sketch.line", "params": {"points": [[0, 0], [0, 30]], "ids": ["l1"]}},
|
||||
{"command": "sketch.arc.three_point", "params": {"start": "l1.end", "through": [8.787, 51.213], "end": [30, 60], "id": "a1"}},
|
||||
{"command": "sketch.line", "params": {"points": ["a1.end", [60, 60]], "ids": ["l2"]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "name": "Section"}},
|
||||
{"command": "sketch.rectangle.center", "params": {"center": [0, 0], "corner": [4, 2.5]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.sweep", "params": {"sketch": "Section", "path_sketch": "Path", "path": ["l1", "a1", "l2"]}}
|
||||
]}
|
||||
Reference in new issue
Block a user