Repository navigation
Cut screw pockets at least as wide as the size typed, and raise the clearance ceilings a sweep allows - #81
Merged
Merged
Conversation
A plate's screw counterbore is 14-sided and its shank 12-sided, and both had their corners on the size typed, so across their flats they were narrower than it at every size: the default 6 mm counterbore was 5.85 mm and the 3 mm hole 2.90. Now their corners go out until the flats stand on the size, as #61 did for the magnet pocket. No allowance on top: a screw head drops into its counterbore rather than being pressed in. The limits measure the pocket as it is now cut, so each screw size is the room times cos(pi/12) for the hole and cos(pi/14) for the head. At 42 mm the widest hole goes from 8.3 to 8 mm and the widest head from 14 to 13.6; the cap between a cell's four pockets from 25 to 24.3 (head) and 24.1 (hole); the default 3 mm hole now needs a 36.81 mm pitch rather than 36.7, and the 6 mm head 34.16 rather than 34. Designs without screws are unchanged. The plate audit's pinned digest for magnets and screws moves with the pocket, and the 22.2 mm shank row keeps the pocket it was written about (22.2 mm across its corners). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…he limits alike MOUNT_BORE holds each bore's sides, how far its corners stand for a size, and the largest size whose corners fit a room. fastenerCutter and screwCutter cut what it says, and mountLimits reads its sizes back from it, so a pocket and its limit cannot drift apart. Nothing built changes: the same bytes for the plates tried, and the same limits over 19,404 configurations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…ttle note Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…s, and say what holds the other ceilings Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…he fit clearance at 0.3 up to 20.7 mm Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
… corners, so the plate stays watertight Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…sizes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…at of its screw's shank Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…cket's corner up with one of its flats Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
… a screw is measured against the bore as it is now cut Main measures every pocket against a joint's cut by its own polygon, through a BORE table in mountLimits; that table now reads MOUNT_BORE, so a screw's counterbore and shank are measured with their flats on the size, as they are cut. The magnet's pocket is main's. The robustness case for a snap clip's screw head at 42 mm keeps this branch's 7.6 mm (main's measure gave 7.8 with the corners on the size), and the no-room case keeps 34.5 mm, where the dovetail's tabs now hold the head to 4.7. sw.js is this branch's, and the pages are rebuilt from the merged sources. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…ide it sets its size Where a counterbore's corner would stand on a flat of its shank, fastenerCutter turns the shank a little (#74), and a turned shank reaches a joint's cut a little sooner or later than one that is not. MOUNT_BORE.screw now says, for the cutter and for mountLimits alike, whether the counterbore is cut and how far the shank is turned, and mountLimits measures that shank turned (boreReach takes the turn). On 400 random designs with a turned shank its limit moved by a tenth in 2; no design whose head and magnet the limits also take changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
sw.js and plates-robustness.spec.js conflicted: the spec keeps #73's cases and takes main's comment and name for the failed-build case. The pages are rebuilt from the merged sources. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…for a counterbore's MOUNT_BORE.hole.turn looked at the magnet pocket's corners only once the counterbore's already called for a turn. So a shank no counterbore corner came near was cut unturned even with a magnet's corner on a flat's plane, and the BSP split there: the review's 41.24 mm jigsaw link, a 3 mm shank under a 7.3 mm magnet from above whose corner stands 0.4 microns off a flat, built both pieces with 26 open edges and Download on, where main fails to build. The magnet's corners now call for the turn as the counterbore's do. The link, its 2.264 mm magnet and the 7.4 mm head beside it build whole, and #78's rows keep their test, with the 7.4 mm head added. Heads 7.3 to 7.7, depths 3 to 3.25, magnets 2.15 to 2.35 thick and pitches 41.2 to 41.34 close, but for 7.31 mm, #77's coincidence. The turn moves none of the 3,846 one-cell plates or 1,800 designs it was measured on, and of 1,500 random designs it now turns, 54 close and 1 opens, at that one size. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…1.24 mm link builds With its shank turned, the review's 41.24 mm jigsaw link no longer runs out of passes here, so #78's rows build whole and no longer reach the second run's guard. A fourth row cuts main's bores for it, 7.504 cos(pi/14) and 3 cos(pi/12), which still run out of passes and throw, here as on main. The comments that said the plate fails here now say where it still does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
mountLimits measures a corner boss's pockets against the joint's cuts now, with the seam 2·NUDGE·√2 wider in a boss; the shank is measured turned there as in the cells (reach), since the boss's fastener is the same fastenerCutter. NUDGE is top-level on main, so buildPiece's local one goes. sw.js and the pages rebuilt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
… is cut as none A head wider than the hole that does not clear the shank's corners has been cut as no counterbore since #73, and only the README said so. A line under the screw fields now says it, and from what size a counterbore is cut, while neither size is refused. The README line reads the same helpers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
A shank has to clear the magnet pocket on its axis as it would a counterbore, its corners 0.005 mm inside the pocket's flats. Any wider, the 14 flats cross the 12 corners and the walls weave, and no turn of the shank kept them closed: 5 mm under a 5.1 mm magnet and a 5.4 mm head left 47 open edges at 42 mm turned for the magnet's corners, and turning for the shank's corners on the pocket's flats as well, which closed it, opened 3.0177 under a 3 mm magnet at 43.43 mm (58 edges). So mountLimits caps the shank there (throughMagnet), the field says why, and the turn stays as it was: the magnet pocket's corners and the counterbore's call for it alike. That also takes the shanks the turn's clearance did not hold for (a magnet narrower than the shank) and #77's 5.85 mm shanks under a 6 mm magnet at 55 mm. The page reads the shank again after the head and the magnet, whose sizes its turn and that cap go by; read before them only, a magnet pasted in was measured against the one before it. A turned shank's reach is kept on each site, so the second read on the same cuts is quick (3.6 ms to 0.7 on a 30 x 30 puzzle plate). The figures in MOUNT_BORE's comment are re-measured on the merged tree: 3,846 one-cell plates 546 open to 1, none worse; 1,800 designs a counterbore's corner turns 85 to 10 (80 closed, 5 opened); 1,500 that only a magnet's corner turns 41 open or folded to 6 (40 closed, 5 opened, each for a size or two). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…aken, as measured The turn's comment said no corner comes within 0.0039 mm of a flat on every shank mountLimits takes. Searched again (every 0.001 mm round the sizes that put a corner on a flat, 6.7 million sizes drawn at random round them, and a local search for the least), the nearest is 0.0032 mm, at 1.0197 under 1.0748 with a 3.72 mm magnet; under 0.0039 only with a magnet and a shank under 1.2 mm, and with no magnet 0.00399. The nearest ten build closed at 42 and 49.02 mm, the magnet either way up. MOUNT_BORE's comment and ENGINE.md say 0.003, and where the 0.0039 holds. The sweeps the comment quotes are run again on the merged tree, the 1,800 and 1,500 on new draws: 3,846 one-cell plates 546 open to 1, none worse, as before; 1,800 designs a counterbore's corner turns 75 open or folded to 15 (72 closed, 12 opened, 11 of them the known 6 x 2 from beneath under a 3 mm counterbore); 1,500 that only a magnet's corner turns 47 to 5 (43 closed, 1 opened). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
5 of 6 tasks
…ther stands on the other's The counterbore and the magnet pocket are 14-gons on the same rays, so at some sizes a corner of one stands on the plane of one of the other's flats. The head at its 13.6 mm cap at 42 mm, under the default 6 x 2 magnet from above, has a corner 0.004 mm off such a plane, and the default plate came out with 160, 120, 128 and 96 coplanar folds a piece; the head at its cap folded the same way at 40, 43, 44 and 46 mm. Where a corner of either comes within 0.005 mm of a plane of the other, the counterbore is now turned pi/252 about its axis (MOUNT_BORE.head.turn), which leaves every corner 0.007 mm or more off. Its flats stay where they were, so the head fits as typed and the caps do not move. The shank's turn and mountLimits go by the counterbore turned. pi/84 and pi/126 each opened designs that pi/252 builds closed; the audit holds two of them, with the review's rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…e S-1 rows as the STL stores them Turned pi/252, the counterbore's corners stood 0.007 mm off the pocket's flats and every cell built closed, but the rays its roof is fanned along passed 0.04 mm from the pocket's corners. Where a socket's sloped facet crossed there, at sites away from the origin, the roof split into slivers with no width, and single precision in the STL folded them: 48, 36, 36 and 27 on the default plate's four pieces with the 13.6 mm head 1.5 deep under a 6 x 2 magnet from above. The counterbore is turned half a facet, pi/14, now, its corners midway between the pocket's and 0.18 mm or more off its flats. That plate builds closed with no folds in the STL, as does the 13.582 head pi/252 left open. The S-1 rows read the STL back and count its folds too, and four rows build plates of several cells: a 2 x 2, a 3 x 2 in two pieces, the default plate, and the 13.582 head on a 2 x 2. Each fails on the parent commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
The class sweep on plates of several cells now leaves out the edges where corner bosses meet, the audit's known class, as round 4's sweeps did: 138 before, 7 now, where pi/252 left 10 and main 23. Round 4's one-cell designs and head-at-cap sweeps, rebuilt with the folds in the STL counted, go in too. ENGINE.md says the 0.18 mm holds under a magnet of 3 mm or more. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
The S-1 comment said pi/84 opened 4 of the 600 designs, counted with the edges where corner bosses meet. Counted as the rest of the paragraph is, it opened 5, and 14 of round 4's 900 one-cell designs, all of which pi/14 builds closed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…runs through does not set it, and give the rim's screw-hole cost with the hole sized across its flats Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…s to the S-1 rows, and say what the folds and limits measure The counterbore's turn (head.turn) and the shank's (hole.turn) are taken where a corner comes within 0.01 mm of a plane, not 0.005: at 0.005 a 38.97 mm cell under a 3.96 x 1.5 magnet from above, a corner 0.006 mm off a plane, folded 3 times unturned. The review's five designs near that bound are S-1 rows now, the test tile among them (buildAll builds the tile the page would print). The S-1 rows count folds as the audits do, in the mesh. The folds round 5 read back from the STL where the mesh had none were triangles with no area, which single precision gives a direction; stlFolds is removed. The comments in core.js, the audit and ENGINE.md say which count is which, why the counterbore is still turned pi/14 rather than pi/252, and that the limits are measured on the bore as cut, so a head that turns can be given another cap than one that does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…es open (a comment) Only the 38.97 mm cell and the test tile have a corner between 0.005 and 0.01 mm off a plane; the other three are turned at either bound, and pi/252 left them open away from the corners. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…then the shank on the head as held readControls read the head against limits measured with the head before it, and a counterbore that turns off the magnet pocket's flats is measured turned, so its cap and gaps go by the head's own size. A 14.05 mm head pasted over a 6 at 46.45 mm with a jigsaw and a 6.2 mm magnet from beneath took the 6's 14.1 cap and built with Download on, and 14.1 pasted over a 14 was held to the 14's cap at every read after. The head is now measured as typed and read again; the shank is read last, measured again on the head where the head was held to its cap or a gap's end. Two page tests: the first fails on e1e542c, the second fails without the second measure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…a face turned over Turned half a facet off the magnet pocket, two of a counterbore's flats can stand square to the cell's x edges, and the BSP split one into a strip 3.3 microns wide that came out folded: a 3.89 mm head 1 deep over a 1.01 mm shank under a 3 x 2 magnet from above folded 3 times a cell at 45.16 mm with a dovetail and at 44 mm on one cell, where main builds both closed. With screws, the fastener cut in buildPiece now tries again on such a cell as it does on open edges, and keeps the first try that is closed with nothing turned over; the cutters turned a 28th more close both. Over 2,366 designs with screws drawn round the counterbore's turn, 49 were cut again, 47 came out other bytes, 4 that folded build closed (the 8.798 head MOUNT_BORE named among them), none came out worse, and building them all took 1.5% longer. Without screws nothing is cut again for it: 500 random designs build the same bytes as main 326cc48. The plate audit has rows for both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
An 8.86 mm head at 42 mm with snap clips in the floor and a 3.85 mm magnet from beneath turns and stops at 7.8, but 7.8 does not turn and stops at 7.6: the page named 7.8 and then refused it. readControls now measures a held head again and holds it again on its own limits until they take it, at most four passes (of 3,124 heads pasted over 781 random designs, 1,286 were held once and 33 twice, none more), and reads the shank on the head as finally held. A page test opens that design and checks the page names 7.6. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…agnet cannot leave the head above its own cap The hole is read after the head, and a hole held to the magnet pocket's ledge is another hole for the head to be measured on: a head only a hair wider than its hole is cut as no counterbore, over a smaller one it is cut and turned, and its cap changes with that. Pasting a 6.35 mm magnet over a 7.97 mm head and a 7.71 mm hole at 42 mm with a jigsaw held the hole to 6.1 and left the head at 7.97, where its cap is 7.9, with Download off and Checks naming only the hole. When the read moves the hole, the head is now read again from what was typed on the hole as held, and the hole again on that head, until the hole stays where it was, so the sizes the page ends on are each taken by their own limits measured on the other, and Checks names both. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
…at it changes the bytes of the designs it fires on Comment only. The trigger is healCsgSeams' own count of turned faces on the cut as it was built, not test/orientation.js on the final mesh. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY
This was referenced Oct 10, 2026
Closed
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Oliver · project thread
What this changes
Before. A screw's counterbore and shank were cut with their corners on the size typed, so a 6 mm head printed 5.85 mm across its flats and a 3 mm shank 2.90. The fit clearance stopped at 0.3 for a bowtie in the floor under 20 mm, and five audit rows one step past a ceiling built clean and said the ceiling waited on a sweep. A screw head a hair wider than its shank left hundreds of bad edges (#73), and a counterbore whose corner lined up with a flat of its shank left the plate open round every screw (#74).
After. Every screw bore is at least the size typed across its flats, as the magnet pocket has been since #61 (but a counterbore within 0.05 mm of the magnet pocket at its corners, which is cut as the pocket, up to 0.1 mm wider or narrower across its flats than typed), and the screw limits shrink to match: at 42 mm the default plate takes an 8 mm shank, from 8.3; its head still stops at the dovetail's tab, 13.1 mm, and the sizes refused just short of the notch move down from 12.83 to 12.85, 12.94 and 12.95 mm to 12.51, 12.52, 12.61 and 12.62. A bowtie in the floor takes clearances up to 1 mm at any pitch. A puzzle holds 0.3 up to 20.7 mm, not 20, since its leak line runs on past 20 mm and leaves the field at 20.53. A screw head too narrow to clear its shank's corners (under 1.0353 times the hole, plus 0.01 mm) is cut as no counterbore, as a head no wider than the hole always was, and a line under the screw fields says so; it left hundreds of bad edges at some sizes. Where a corner of the counterbore or of the magnet pocket would line up with a flat of its shank, the shank is turned 15/7 degrees (or less, so as not to line another corner up instead), by the pocket's corners alone where no counterbore is cut, and the plate no longer comes out open round every screw (136 edges a piece for the design in #74, 26 for #78's 41.24 mm jigsaw link, 12 for a 4.18 mm shank under a 5 mm magnet from beneath that holds a 5.12 mm head whole, and 30 for that shank under the magnet from above with no counterbore). Where a corner of the counterbore or of the magnet pocket would stand within 0.01 mm of the plane of one of the other's flats, the counterbore is turned half a facet (90/7 degrees) about its axis, its corners midway between the pocket's and its flats where they were, and the plate no longer folds there (the head at its 13.6 mm cap at 42 mm, 1.5 deep under the default 6 x 2 magnet from above, folded the default plate's mesh 160, 120, 128 and 96 times a piece). Turned so, two of its flats can stand square to a cell's x edges, and a cell whose pockets come out with a face turned over is cut again, as one left with open edges is: a 3.89 mm head 1 deep over a 1.01 mm shank under a 3 x 2 magnet from above folded 3 times a cell at 45.16 mm with a dovetail and at 44 mm on one cell, where main builds both closed. The limits are measured on the counterbore as cut, so a head that turns is held to its turned bore, and its cap and the sizes refused beside a joint's cut can differ from those of a head that does not turn: 14.0 mm against 14.1 at 46.45 mm with a jigsaw and a 3 x 2.4 magnet from beneath, for a 3.89 mm head that turns. The page measures the head as typed: it read the head against the limits of the one before it, so a 14.05 mm head pasted over a 6 there, under a 6.2 x 2.4 magnet from beneath, took the 6's 14.1 and built, and 14.1 pasted over a 14 was refused at every read after. A head held to its cap or a gap's end is measured and held again on its own limits until they take it, and the page names that size: an 8.86 mm head at 42 mm with snap clips in the floor and a 3.85 mm magnet from beneath turns and stops at 7.8, but 7.8 does not turn and stops at 7.6, and the page said 7.8 and then refused it. The hole is read last and can be held as well, to the ledge the magnet pocket leaves it, and a head's cap goes by the hole it is measured on, so a hole the read moves is another hole to read the head on: the head is read again from what was typed, on the hole as held, and the hole again on that head, until the hole stays. A 7.97 mm head over a 7.71 mm hole at 42 mm with a jigsaw and an 8.1 mm magnet from beneath builds, but with a 6.35 mm magnet pasted in the hole was held to 6.1 and the head left at 7.97, where its cap is 7.9, with Checks naming the hole alone. A screw hole too wide for the magnet pocket it runs through to clear, as a counterbore has to, is refused at the field: the two walls weave and no turn kept them closed (47 open edges for a 5 mm hole under a 5.1 mm magnet), and the magnet would have nothing to rest on over the hole. At 42 mm that holds the hole to 5.8 mm under a 6 mm magnet. The test tile with magnets and screws is watertight again at every counterbore depth. The default 6 mm counterbore's corners stood 0.022 mm inside the 6 mm magnet pocket's, and deeper than the magnet from beneath it left 6 open edges a cell at 42 mm, where main built closed. It is cut as the pocket now, one prism with it, and the shank's turn and the limits go by it as cut. The other ceilings stay, each with the leak that earns it built in the audit, and the page says "not watertight" where it said the joint opened holes.
How. One helper,
MOUNT_BORE, decides each bore's sides and corner radius. The cutters read it, andmountLimitsmeasures each bore by it as #69's polygon, the shank turned where it is cut turned (MOUNT_BORE.screw). The ceilings were swept every 0.01 mm of pitch and every 0.05 of the field on 2 x 2 and 1-cell pieces (about 160,000 builds); only the bowtie in the floor was clean a step past a new ceiling, and the puzzle's line was followed past 20 mm to where it leaves the field. Heads near the shank's corner circle were swept on 7,028 one-cell plates, and test tiles with screws and magnets on 2,986. The #74 sizes were swept on 3,846 one-cell plates with a magnet from above (569 closed, none opened), on 1,800 random designs a counterbore's corner turns (71 closed, 11 opened, 1,718 unchanged) and on 1,500 that only a magnet's corner turns (41 closed, 1 opened, 1,458 unchanged); designs it does not move build the same bytes. Of the 11 opened, 10 have a 6 x 2 magnet from beneath under a 3 mm counterbore, 9 of them at 42 mm. There the turn opens more than it closes (9 against 5), and main builds those sizes closed but one; that mount also leaks at sizes the turn leaves alone: of 300 random sizes at 42 mm, 21 of the 273 it does not turn leak here, and 17 on main. Counterbores near the magnet pocket's corners were swept on 240 random designs that reach the pocket: 2 of the 223 taken build bad here, against 12 at 6bdb7f4 and 7 of 225 on main. Of 600 random designs with screws, the 560 whose counterbore is not near the pocket build 6bdb7f4's bytes. The default 6 mm head is near the default 6 mm magnet: from beneath it stays inside the pocket and builds the same bytes, and from above it is cut with the pocket as one prism. A bare magnet pocket, with no counterbore cut and a corner within 0.0045 mm of a flat of its shank, was swept on 1,000 random designs from beneath and 800 from above. From beneath, 6 of the 859 taken built bad unturned and 2 turned (6 open edges each under a 4.16 x 2 magnet at 42 mm, as unturned). From above, 11 of the 566 taken built bad unturned (351 open edges) and 3 turned, test tiles with a face turned over and no open edge. The turn opens one size known from beneath, 2.58 mm under a 4.34 mm head the 4.16 x 2 magnet holds whole at 42 mm: 9 open edges, where main leaves 10. Of 700 random designs with screws, the 7 that build other bytes than b0f37a4 are the ones it turns, each with a magnet and no counterbore cut. The counterbore's turn off the pocket's flats was swept counting folds as the audits count them: two faces with area back to back in the mesh (test/orientation.js leaves out a face with no area). On 600 random designs with a head within 0.012 mm of a size that puts a corner of either on a plane of the other, on plates of several cells and split pieces (2 x 2, 3 x 2 in two, 3 x 3 in four, two pieces with dovetails or jigsaws, 2 x 2 on corner bosses), 48 of the 354 taken built bad unturned (b7ffea3) and 1 here, against 1 turned π/252 and 5 of 356 on main; that one leaks on all of them. An 8.798 mm head 0.592 deep under a 7.037 x 2.5 magnet from above at 42 mm, which π/252 and main build closed, had an edge shared four ways and two folds a cell until a cell whose pockets come out with a face turned over was cut again. On round 4's 900 designs (one cell, the test tile, 2 x 2, corner bosses, two pieces), held to what the page takes, 56 of 498 built bad unturned and none of 496 here, against 2 at π/252 and 2 of 504 on main. With the head at its cap, under each magnet that puts a counterbore corner on a flat's plane, every 1 mm of pitch from 34 to 56 mm on 2 x 2 and 3 x 2 in two, 18 of 108 from above and 8 of 186 from beneath built bad unturned and none here or at π/252 (6 and 2 on main); every 0.5 mm on one cell, 28 of 216 and 14 of 360, and none here or at π/252 (21 and 8 on main). Read back from the STL in single precision, 14 of these designs show a fold here, 30 at π/252 and 114 on main, but here and at π/252 every fold the mesh does not have is a triangle with no area in the mesh, which rounding gives a direction. Those are not folds in the solid: the 48, 36, 36 and 27 given before for π/252 on the default plate were 147 of them over a mesh with none. Half a facet is kept over π/252, both turned from 0.01 mm, because π/252 leaves designs open that half a facet builds closed: a 13.582 mm head 0.251 deep under a 6 x 3 magnet from above at 42 mm (12 open edges a cell), and three found in review (3 and 12 open edges, and two shells touching along 8). Half a facet moves the limits of a head that turns more than π/252 does: of 1,034 designs drawn with a head near a size that turns, 302 against 102, the head's cap by up to 0.4 mm up or 0.3 down against a tenth down. Measured both ways with the tighter kept, the limits would not move with the head typed, but 28 of 140 page designs at five pitches would lose 0.1 to 0.3 mm of the head's cap (8.1 to 7.9 on a 2 x 2 at 42 mm with a jigsaw) and 12 dovetails would refuse more sizes, so the limits stay measured on the bore as cut. The turns are taken where a corner comes within 0.01 mm, where the sweeps of #74's sizes above took them from 0.005: at 0.005 a 38.97 mm cell under a 3.96 x 1.5 magnet from above, a corner 0.006 mm off a plane, folded 3 times unturned, and π/252 left a 53.72 mm test tile open by 15 edges round a shank whose flat a corner missed by 0.00502 mm. Of 600 random designs whose turns that changes, the 511 the page takes build bad on one at either bound (6 open edges where 0.005 and main leave 3), and main leaves 4 open. Of 800 random designs with screws, the 54 that build other bytes than at 0.005 are the ones whose turn it changes (48 the shank's, 6 the counterbore's), and all 800 keep their limits. Cutting a cell again where its pockets come out with a face turned over was swept on 2,366 of the designs with screws above (both classes, the heads at their cap and the shank sweep): 49 were cut again, 47 build other bytes, 4 that folded build closed (the 8.798 mm head and three test tiles the page does not take), none came out worse in the mesh, and building them all took 1.5% longer. On the page, of 3,124 heads pasted near their cap over 781 random designs, 1,286 were held once and 33 twice, none more (four passes are allowed), and every one ends on a size its own limits take, where 100f9f1 held 33 to a size they refuse. Of 43,536 heads, magnets and holes pasted near their caps over random screw designs with each joint (eight seeds), 16,006 took a second round, none a third (four are allowed), and each ends on a head and a hole that their own limits take measured on each other, and a second read changes nothing, where 8bc63fe leaves 499 for a second read to change, 4 of them with the head above its own cap.Designs with no screws build the same bytes as main 326cc48 (500 of 500). With #69's dovetail rule, of 1,400 random designs with screws into or beside a joint's cut, 7 built bad at 0e12f68, each a single size that builds the same bytes as main f319c83 with the same bores. On 2,000 random dovetail designs with screws, drawn the same on main f319c83, 9 of 2,083 built bad at 0e12f68 and 12 of 2,101 on main (6 and 11 at the notch, folded edges); each bad one here is a single size, clean 0.005 mm either side, that main builds with the same flaws from the same bores, and no measured feature sets them apart from the clean ones, so the limits add no guard for them. On 320 random designs with corner pockets and screws, with no joint and with each joint cut from beneath, none has an open edge, a fold or a turned face here; main f9873f5 builds 4 of them open at the same sizes. #80's design builds closed here at every head the page takes there (its default 6 mm head is now over the 5.8 mm cap), where main leaves 24 open edges a piece.
New top-level names:
MOUNT_BOREin core.js (withMOUNT_BORE.screw), andheadCutAsNoneandheadClearsFromin ui.js, none of them on main 64f91bd (checked with #65 in).screwCutter, which nothing called, is removed.MOUNT_BOREis exported for the audit's row that still reaches the seam repair's guard. This branch contains main 64f91bd (#78, #79, #82, #84 and #65), merged in 8c7f8dd, 81c83ac, b0f37a4, ac8da72 and 8bc63fe; #82's one-line clash keeps both fields,jointCuts.push({ top: ceiling, bottom, segs, sites }). With #84 in, the rim'sscrewHoleDflag inmountLimitsis now false where the magnet pocket the shank runs through sets the hole's cap, asbeside's is, and ENGINE.md gives the rim's screw-hole cost with the hole sized across its flats (6.2 to 3.8 at 34.5 mm).Closes #73.
Closes #74.
Checks
src/, not the generatedindex.html/bins/index.htmlnode build.jsand committed the regenerated pages alongside the sourcesnpm run test:allpasses (run here on 002df36:npm test, ci-sim, the plate UI specs plates-input, plates-robustness, export, keys and half-cells, 186 passed; the whole UI suite with two workers passed 826 of 826 on 002df36, 43 minutes)If this touches geometry
node test/bin-audit.jsreportsall cases cleannode test/plate-audit.jsreportsall plates watertight, and no case has picked up bad edges that were not already named as known🤖 Generated with Claude Code
https://claude.ai/code/session_01Uqqb1cvhXxrpb3P6y6ykBY