A plan job (scripts/ci/kernel_rig_plan.py, with its self-test) maps a pull request's changed files
to the areas: tests/kernel-cases/<area>/PATHS for each area, tests/kernel-cases/PATHS-ALL for the
shared core, the ladder whenever any area runs. Areas come from the folders, so a new one needs no
workflow edit. Pushes, merge groups, the release gate and runs by hand run every area. The
kernel-rig check counts a skipped build or shard as passed only when the plan selected none.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kernel-rig.yml builds solidcraft-cli once (release, SMLib prebuilt; sccache on a sticky disk
that only pushes to main and develop commit) and hands it, with the rig's runner, to a matrix
of eleven shards: the ten areas of tests/kernel-cases/, each against its KNOWN_FAILING, and
the ladder against its golden. One path filter covers the kernel surface; drafts skip; a new
push cancels a pull request's old run; merge groups always run it, and the release gate calls
it. The areas other than fillets get a KNOWN_FAILING with only its header, to be seeded from
develop after the SMLib pin bump.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
solid.shell refused an empty face list ("select 1…1000 faces"), and the
shell feature found its body from the first face picked. SMLib shells with no
face opened (the void sealed inside, its own shell): the command now takes
`faces: []`, the feature shells the one body there is or the one named
(`body`), and an outside or both-ways shell pushes no open face out of the
cavity. Rig shell/4009 declares the void's shell (`shells: 2`), as its method
says.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rig case shell/4711 (a 60 x 40 x 10 block, an r3 through hole at (22.5, 7), a 10 x 10 notch on
the front edge, shelled 2 open at the bottom) failed with "SMLib shell: operation: SMLib failed
(status 1027)". The hole is 4 = 2 x 2 from the front face: the hole wall's offset (r5) is tangent
to the front's at (22.5, 2), the walls meet along a line and the cavity would pinch to zero
thickness there, which is no solid. Refusing it is right; the refusal did not say why.
SMLib now refuses an offset whose walls would meet with its own status, SMLIB_ERR_WALLS_TOUCH
(-1110). The smlib crate reads it as Error::WallsTouch; the kernel's offset backend turns it into
a sentence with the wall, as blends turn NoRoom into one: "shell: the 2 mm walls would meet along
a line (between a hole and the side, for example), which leaves no solid there; use a thinner or
thicker wall, or move the feature". Thicker builds too (SMLib shells 4711 at 2.5, the walls
crossing and merging between the hole and the front), so the sentence offers both.
4711 expects that refusal and its message ("outcome": "refused", "refusal"), its "what" and
"method" saying why: the wall is 4 = 2 x 2, the walls meet along a line. Tests: the smlib crate
shells 4711 built from primitives (2 refused as WallsTouch, 1.5 and 2.5 valid), the kernel a
plate whose hole is 3 from its side at 1.5 (refused, with "the 1.5 mm walls would meet along a
line").
Results (run-sc.sh against SMLib a759622's code, which differs from the tree run only in
comments and docs; baseline 858f381fc-5448b9a): rig 410/447 (409
before; 4711 fail -> pass as the refusal, nothing else changed), ladder 109/116 (unchanged),
kernel lib 535 passed / 202 failed (one new test; the same failing set), smlib crate 53 / 2
(one new test; the same failing set).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0113gDVmStT5tCGKW9Fxgc5K
Cases from the issues filed after #4160, each a synthetic recipe with its own answer
(analysis or invariants); every other issue in the range is listed with why it was skipped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cases from the issues filed after #4160, each a synthetic recipe with its own answer
(analysis or invariants); every other issue in the range is listed with why it was skipped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cases from the issues filed after #4160, each a synthetic recipe with its own answer
(analysis or invariants); every other issue in the range is listed with why it was skipped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cases from the issues filed after #4160, each a synthetic recipe with its own answer
(analysis or invariants); every other issue in the range is listed with why it was skipped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Added: 451 (block inside / crossing a hollow spherical-shell tool), 1107 (hollow hub joined
with nine blades), 1140 (spiral hollow lofted tube cut in half and joined), 2928 (cap-touching
lips with 0.0001 mm offset walls), 3850 with 3741 (cross cut touching a round side, and the
hole after it), 1984 (near-coaxial pin and rivet overlaps). #3573 is now a source of
shell/3576. Their lines are gone from the skipped files; #2259, #3518 and #3602 stay skipped
with corrected reasons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4009 closed shell, 4010 shell open at a hole wall, 2531 point pick after an edit,
3468/3898 offset next to a fillet, 12 split face piece, 566 swept bar, 745/3893
freeform boss (two variants), 3103 tapered cylinder, 3669/2990 loft, 3283/3650
and 2939 curved offsets, 3506 and 1972 split then shell, 3576, 391, 1494, 1525.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>