Fillet rig: the owner's reports are report- cases; the G2 corner graded at its seams

The cases from the owner's reports in the app (no issue) were named and cited after issues they
only resemble (#9, #896, #1207). They are report-<name> now and list no sources; their `what`
says where they were reported. The README gives the convention (report- for a report with no
issue or pull request, cov- for a command with no source).

report-fillet-g2-corner-of-bar-running-into-cylinder was graded by a 3^3 volume band and a face
count, which say little about a G2 corner. It keeps the band (provable: the patch differs from the
rolling ball only within the setback cube) and adds the corner seams' curvature jump, as
fillets/9-fillet-corner-r1-curvature-default-setback scaled by r = 2 (at most 0.0025 / mm, clear
of the hole's corners by 0.48 mm, within 4.4 mm of the corner). A new
...-outside-setback case cuts the setback cube [-1, 3] x [-1, 3] x [7, 11] away and grades the
three rounds outside it exactly: V0 - 27 - (front spandrel from x = 3 to the wall + (1 - pi/4) r^2
over 7 and 13) = 9342.029541. The bare face counts are dropped.

The -solver-residues recipes now take the reported sketch's points exactly (the arc's end
x = 41.649711830726524); they fail as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jyviko
2026-10-30 06:36:17 -04:00
committed by Irakli Kourtis
parent de9c005f2b
commit a9755bdd23
20 changed files with 259 additions and 57 deletions
+3 -1
View File
@@ -48,7 +48,9 @@ One directory per area, one per case: `tests/kernel-cases/<area>/<id>/`.
Each area also has its gate files: `KNOWN_FAILING` and `PATHS` (see [the gate](#the-kernel-rig-gate)).
`<id>` is `<source number>-<short-name>`, such as `1894-prism-cut-touching-walls`.
`<id>` is `<source number>-<short-name>`, such as `1894-prism-cut-touching-walls`. A case from a report with no issue or pull request (a failure the maintainers met in the app) is
`report-<short-name>` and lists no `sources`; its `what` says where it was reported. A case that
covers a command with no source at all is `cov-<short-name>`.
Each case has:
@@ -1,11 +0,0 @@
{
"sources": [
"tangency-labs/solidcraft#1207"
],
"what": "as 1207-fillet-concave-arc-bar-top-into-cylinder, with the sketch solver's residues of the reported design: SMLib's Nx1 corner fails (status 1001)",
"source": "analytic",
"method": "the same bar with the sketch solver's residues of the reported design (~1e-10 mm: the front side's ends differ by 3.0e-10 in y, the arc's centre 5.7e-11 off the disc's), length 41.160417754, V0 = 41.160417754 * 16.0000000000762 * 10 + 960 pi; the concave arc where the bar's top meets the cylinder's wall rounded r2: the spandrel ring added, clipped by the bar's sides y = 0 and y = 16 (as 1207-fillet-concave-arc-at-boss): integral over rho in [8, 10] of [2 - sqrt(4 - (10 - rho)^2)] rho 2 asin(8 / rho) = 18.4553684491 (Simpson)",
"body_count": 1,
"faces": 8,
"volume_mm3": 9620.051156581294
}
@@ -1,11 +0,0 @@
{
"sources": [
"tangency-labs/solidcraft#1207"
],
"what": "as 1207-fillet-corner-after-round-running-into-cylinder, with the sketch solver's residues of the reported design",
"source": "analytic",
"method": "the same bar with the sketch solver's residues of the reported design (~1e-10 mm: the front side's ends differ by 3.0e-10 in y, the arc's centre 5.7e-11 off the disc's), length 41.160417754, V0 = 41.160417754 * 16.0000000000762 * 10 + 960 pi; the three r2 rounds at the bar's other top corner (0, 0, 10): the front round's spandrel from x = 2 to the wall (30.5896671706), the vertical edge's and the left top edge's (1 - pi/4) r^2 over 8 and 14, the corner cube of side 2 less the rolling ball's eighth, 8 - 4 pi/3: removed 53.2858385868; the bar being L = 41.160417754 long, the front round runs (L - 40) further: removed + (L - 40)(1 - pi/4) r^2",
"body_count": 1,
"faces": 12,
"volume_mm3": 9547.313838420392
}
+3
View File
@@ -49,3 +49,6 @@ every-hole-top-rim-r12-past-plate-bottom SMLib status 1001: a convex round past
every-pocket-floor-and-rim-edges-r2 a corner patch where two rim rounds meet at each concave pocket corner (23 faces, not 19) instead of the mitre the rounds make running into each other
every-pocket-rim-edges-r2 a corner patch where two rim rounds meet at each concave pocket corner (19 faces, not 15) instead of the mitre the rounds make running into each other
every-pocket-rim-edges-r5-as-deep-as-pocket a corner patch where two rim rounds meet at each concave pocket corner (15 faces, not 11) instead of the mitre the rounds make running into each other
report-fillet-concave-arc-bar-top-into-cylinder-solver-residues SMLib status 1001: SmFilletNx1Corner cannot make the topology at the arc's end (fillet error 3, corner type 8)
report-fillet-corner-after-round-running-into-cylinder-solver-residues SMLib's check refuses the round: its corner's surface of revolution is close to singular at its boundary (SmSurface test 5)
report-fillet-edge-tangent-at-one-end-into-cylinder SMLib's check refuses the round that fades out at the edge's tangent end: internal poles, coincident control points, cusps
@@ -1,11 +1,7 @@
{
"sources": [
"tangency-labs/solidcraft#1207"
],
"what": "an r2 round of a bar's top edge whose side runs tangent into a cylinder: the round seemed to build but its body could not be measured or changed (SMLib refused the cylinder's wall coming back as a cylinder over more than a turn)",
"what": "an r2 round of a bar's top edge whose side runs tangent into a cylinder: the round seemed to build but its body could not be measured or changed (SMLib refused the cylinder's wall coming back as a cylinder over more than a turn); reported from the app (2026-10-30, test-peg part)",
"source": "analytic",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the r2 round of the front top edge (y = 0, z = 10) runs into the cylinder's wall: removed = integral over y in [0, 2] of (2 - sqrt(4 - (2 - y)^2)) (40 - sqrt(64 - (8 - y)^2)) dy = 32.3064821881 (Simpson)",
"body_count": 1,
"faces": 9,
"volume_mm3": 9383.622465258068
}
@@ -0,0 +1,7 @@
{
"what": "as report-fillet-concave-arc-bar-top-into-cylinder, with the sketch solver's residues of the reported design: SMLib's Nx1 corner fails (status 1001); reported from the app (2026-10-30, test-peg part)",
"source": "analytic",
"method": "the same bar with the sketch solver's residues of the reported design (~1e-10 mm: the front side's ends differ by 3.0e-10 in y, the arc's centre 5.7e-11 off the disc's), corner (0.489294, 0.057925), length L = 41.160417754, V0 = L * 16.0000000000762 * 10 + 960 pi; the concave arc where the bar's top meets the cylinder's wall rounded r2: the spandrel ring added, clipped by the bar's sides y = 0 and y = 16 (as 1207-fillet-concave-arc-at-boss): integral over rho in [8, 10] of [2 - sqrt(4 - (10 - rho)^2)] rho 2 asin(8 / rho) = 18.4553684491 (Simpson)",
"body_count": 1,
"volume_mm3": 9620.051156581294
}
@@ -34,7 +34,7 @@
0.05792545083296555
],
"end": [
41.64971183161969,
41.649711830726524,
16.05792545083297
]
}
@@ -44,7 +44,7 @@
"params": {
"points": [
[
41.64971183161969,
41.649711830726524,
16.05792545083297
],
[
@@ -1,11 +1,7 @@
{
"sources": [
"tangency-labs/solidcraft#1207"
],
"what": "an r2 round of the concave arc where a bar's top meets a cylinder its sides run tangent into",
"what": "an r2 round of the concave arc where a bar's top meets a cylinder its sides run tangent into; reported from the app (2026-10-30, test-peg part)",
"source": "analytic",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the concave arc where the bar's top meets the cylinder's wall rounded r2: the spandrel ring added, clipped by the bar's sides y = 0 and y = 16 (as 1207-fillet-concave-arc-at-boss): integral over rho in [8, 10] of [2 - sqrt(4 - (10 - rho)^2)] rho 2 asin(8 / rho) = 18.4553684491 (Simpson)",
"body_count": 1,
"faces": 8,
"volume_mm3": 9434.384315895273
}
@@ -0,0 +1,7 @@
{
"what": "as report-fillet-corner-after-round-running-into-cylinder, with the sketch solver's residues of the reported design; reported from the app (2026-10-30, test-peg part)",
"source": "analytic",
"method": "the same bar with the sketch solver's residues of the reported design (~1e-10 mm: the front side's ends differ by 3.0e-10 in y, the arc's centre 5.7e-11 off the disc's), corner (0.489294, 0.057925), length L = 41.160417754, V0 = L * 16.0000000000762 * 10 + 960 pi; the three r2 rounds at the bar's other top corner (0, 0, 10): the front round's spandrel from x = 2 to the wall (30.5896671706), the vertical edge's and the left top edge's (1 - pi/4) r^2 over 8 and 14, the corner cube of side 2 less the rolling ball's eighth, 8 - 4 pi/3: removed 53.2858385868; the bar being L long, the front round runs (L - 40) further: removed + (L - 40)(1 - pi/4) r^2",
"body_count": 1,
"volume_mm3": 9547.313838420392
}
@@ -34,7 +34,7 @@
0.05792545083296555
],
"end": [
41.64971183161969,
41.649711830726524,
16.05792545083297
]
}
@@ -44,7 +44,7 @@
"params": {
"points": [
[
41.64971183161969,
41.649711830726524,
16.05792545083297
],
[
@@ -170,17 +170,17 @@
"params": {
"edges": [
[
0.4893,
0.4892940775280783,
0.0579,
4
],
[
0.4893,
0.4892940775280783,
9.058,
10
],
[
0.4893,
0.4892940775280783,
0.6437,
9.4142
]
@@ -1,11 +1,7 @@
{
"sources": [
"tangency-labs/solidcraft#1207"
],
"what": "after the round of a bar's top edge running into a cylinder, r2 rounds of the three edges at the bar's other top corner (the vertical edge, the left top edge and the round's end arc): 'one of its freeform faces can't be used'",
"what": "after the round of a bar's top edge running into a cylinder, r2 rounds of the three edges at the bar's other top corner (the vertical edge, the left top edge and the round's end arc): 'one of its freeform faces can't be used'; reported from the app (2026-10-30, test-peg part)",
"source": "analytic",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the three r2 rounds at the bar's other top corner (0, 0, 10): the front round's spandrel from x = 2 to the wall (30.5896671706), the vertical edge's and the left top edge's (1 - pi/4) r^2 over 8 and 14, the corner cube of side 2 less the rolling ball's eighth, 8 - 4 pi/3: removed 53.2858385868",
"body_count": 1,
"faces": 12,
"volume_mm3": 9362.643108859389
}
@@ -1,10 +1,6 @@
{
"sources": [
"tangency-labs/solidcraft#896",
"tangency-labs/solidcraft#1207"
],
"what": "after the round of a bar's top edge running into a cylinder, an r2 round of the edge where that round meets the cylinder's wall (tangent at its lower end only, a crease elsewhere) with its tangent chain (the concave arc of the top): it was refused as a smooth edge",
"what": "after the round of a bar's top edge running into a cylinder, an r2 round of the edge where that round meets the cylinder's wall (tangent at its lower end only, a crease elsewhere) with its tangent chain (the concave arc of the top): it was refused as a smooth edge; reported from the app (2026-10-30, test-peg part)",
"source": "invariants",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; then the front round (the r2 round of the front top edge (y = 0, z = 10) runs into the cylinder's wall: removed = integral over y in [0, 2] of (2 - sqrt(4 - (2 - y)^2)) (40 - sqrt(64 - (8 - y)^2)) dy = 32.3064821881 (Simpson)); the second round fades to nothing at the edge's tangent end, no closed form: one valid body, adding material (concave), so V > V0 - removed = 9383.622465 and below V0",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; then the front round (the r2 round of the front top edge (y = 0, z = 10) runs into the cylinder's wall: removed = integral over y in [0, 2] of (2 - sqrt(4 - (2 - y)^2)) (40 - sqrt(64 - (8 - y)^2)) dy = 32.3064821881 (Simpson)); the second round fades to nothing at the edge's tangent end, no closed form: one valid body",
"body_count": 1
}
@@ -0,0 +1,7 @@
{
"what": "report-fillet-g2-corner-of-bar-running-into-cylinder less its setback cube: the three rounds outside it, exactly; reported from the app (2026-10-30, test-peg part)",
"source": "analytic",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the body less the setback cube: a box [-1, 3] x [-1, 3] x [7, 11] about the corner (the patch starts 3 along each edge, so outside it each round is its whole section) cut away: V0 - 27 - removed outside the cube: the front round's spandrel from x = 3 to the wall (29.7312596618), the vertical and left rounds' (1 - pi/4) r^2 over 7 and 13: removed 46.8994065900",
"body_count": 1,
"volume_mm3": 9342.029540856203
}
@@ -0,0 +1,208 @@
{
"commands": [
{
"command": "sketch.create",
"params": {
"plane": "XY",
"name": "Peg"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
0,
0
],
[
40,
0
]
]
}
},
{
"command": "sketch.arc.center_point",
"params": {
"center": [
40,
8
],
"start": [
40,
0
],
"end": [
40,
16
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
40,
16
],
[
0,
16
]
]
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
0,
16
],
[
0,
0
]
]
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Peg",
"distance": 10,
"body_name": "Peg"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"origin": [
0,
0,
10
],
"x_dir": [
1,
0,
0
],
"y_dir": [
0,
1,
0
]
},
"name": "Top"
}
},
{
"command": "sketch.project",
"params": {
"refs": [
{
"face": [
2,
8,
10
]
}
]
}
},
{
"command": "sketch.circle.center",
"params": {
"center": [
40,
8
],
"radius": 8
}
},
{
"command": "sketch.finish",
"params": {}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Top",
"distance": 10,
"operation": "join",
"targets": [
"Peg"
],
"profiles": [
{
"point": [
40,
8
]
}
],
"exact_regions": true
}
},
{
"command": "solid.fillet",
"params": {
"edges": [
[
0,
0,
4
],
[
20,
0,
10
],
[
0,
8,
10
]
],
"radius": 2,
"corner": "g2",
"setbacks": [
{
"vertex": [
0,
0,
10
],
"distance": 3
}
],
"tangent_chain": false
}
},
{
"command": "solid.box",
"params": {
"corner": [
-1,
-1,
7
],
"length": 4,
"width": 4,
"height": 4,
"operation": "cut",
"targets": [
"Peg"
]
}
}
]
}
@@ -1,14 +1,20 @@
{
"sources": [
"tangency-labs/solidcraft#9"
],
"what": "three r2 rounds at a top corner of a bar whose far end runs tangent into a cylinder, with the curvature (g2) corner set back 3: SMLib refused the result coming back (a cylinder over more than a turn)",
"what": "three r2 rounds at a top corner of a bar whose far end runs tangent into a cylinder, with the curvature (g2) corner set back 3: SMLib refused the result coming back (a cylinder over more than a turn); reported from the app (2026-10-30, test-peg part)",
"source": "analytic",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the rolling-ball answer: the three r2 rounds at the bar's other top corner (0, 0, 10): the front round's spandrel from x = 2 to the wall (30.5896671706), the vertical edge's and the left top edge's (1 - pi/4) r^2 over 8 and 14, the corner cube of side 2 less the rolling ball's eighth, 8 - 4 pi/3: removed 53.2858385868; the G2 patch differs from the ball only within the setback cube of side 3 about the vertex, so V is graded as V0 - removed with 3^3 as its tolerance",
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's sides run tangent into the cylinder, V0 = 6400 + 960 pi; the rolling-ball answer: the three r2 rounds at the bar's other top corner (0, 0, 10): the front round's spandrel from x = 2 to the wall (30.5896671706), the vertical edge's and the left top edge's (1 - pi/4) r^2 over 8 and 14, the corner cube of side 2 less the rolling ball's eighth, 8 - 4 pi/3: removed 53.2858385868; the G2 patch differs from the ball only within the setback cube of side 3 about the vertex, so V is graded as V0 - removed with 3^3 as its tolerance (the rounds outside the cube exactly: ...-outside-setback); the patch meets the rounds and faces round it G2, graded as fillets/9-fillet-corner-r1-curvature-default-setback scaled by r = 2: at a hole corner the round is only tangent (G1) to the plane, so the curvature jump is bounded at stations at least 0.48 mm (0.24 r) from each turn, within 4.4 mm of the corner, at most 0.0025 per mm (0.5% of 1/r)",
"body_count": 1,
"faces": 12,
"volume_mm3": 9362.643108859389,
"tolerance": {
"rel": 0.002883801046998287
},
"continuity": {
"near": [
0,
0,
10
],
"within_mm": 4.4,
"clear_mm": 0.48,
"curvature_jump_per_mm": 0.0025
}
}