feat(disney_ear_hanger): two-piece dovetail Multiconnect mount + slim 6mm plate (pst-j3ej) - #71
Conversation
… 6mm plate (pst-j3ej)
Operator-picked redesign (A1+B1) of the Multiconnect ear-hanger mount, which
was far too thick for a trivial load and could not print without heavy
supports (plate perpendicular to saddle).
A1 slim plate: the Multiconnect slot slab drops from 6.5mm (+4mm plate cap,
~10mm) to a slim 6.0mm — 4.15mm engaging recess + 1.85mm back wall — via
patch-0002's backThickness param, which keeps the engaging profile identical.
B1 two-piece dovetail: mount_type splits multiconnect into two fanned,
separately-printed STLs joined by a dovetail:
* multiconnect_plate — the slim slot plate + a male dovetail rail.
* multiconnect_saddle — the saddle with a solid wall-end backing and a
matching female socket (earHanger() untouched, so tab/opengrid stay
byte-identical; the arch is hollow through the wall cap, so a backing
refills the channel to host the socket).
The rail slides across the wall (horizontal slide) so gravity + the
cantilever lever-out both bear on the dovetail shoulders, not the slide
(operator's load rule). Friction fit (dovetail_clearance ~0.25mm @PARAM) +
optional glue dot. Joint dims are fixed so a tab/opengrid back could adopt
the same rail later (bead: don't preclude it).
Print (judgment call — flagged): a saddle-facing rail cannot coexist with
slot-openings-UP in a flat print (the rail would point below the bed), so the
plate prints FLAT slot-DOWN / rail-UP (the existing supportless sibling-backer
orientation), not the bead's literal "slot-up". Both parts print flat and
support-free.
Verified: all 4 variants watertight/1-solid/seated via the CGAL export
pipeline; tab default STL geometry unchanged; rail<->socket dims mate with
clearance; socket stays embedded in solid backing across hangerLength 15..60
and width/height 1..6; invariants sidecar rewritten (opengrid + mc_plate +
mc_saddle checks); wasm param-sweep 31/31; 218/218 unit tests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MhF6eqWoyMf6xSg25ZH2v2
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Codex gate review — changes requested One blocking defect; everything else verified solid. BLOCKING — the Multiconnect plate is printed slot-side up; it cannot engage a board. Smallest honest fix (verified on a patched copy): at Why CI missed it: Non-blocking notes:
Verified good: dovetail joint mates with zero interference; tab/opengrid byte-identical/unchanged; all exports watertight + seated; invariants and CI green; pins and license split untouched. |
…rd (pst-cu7n) The multiconnect_plate printed slot-side UP: rotate([-90,0,0]) mapped the vendored slot openings (recessed from the y=-t face) to build z=+t (the rail side), leaving a solid 1.85mm blind wall on the board-side face. Mounted flat on a Multiconnect board the plate presented a solid face to the rails and could not engage — the part failed its sole function. The header already described the intended slot-DOWN orientation; only the transform (and its inline comment) were inverted. Fix: translate([0,H,mc_thickness]) rotate([90,0,0]) lands the openings at build z=0 (board side, on the bed) with the blind wall tucked under the rail. Verified: watertight, 1 solid, seats z=0, footprint/height unchanged; slot void z[0,4.15] opening at the board side; CGAL clean at width/height extremes. - Correct the inverted transform comment. - Add a slot-direction invariant probe (AIR at [W/2,H/2,1.0], SOLID at [W/2,H/2,5.0]) — fails the old orientation, passes the new. The prior _check_mc_plate probes missed it (footprint/height/rail only). - Regenerate the multiconnect_plate renders; drop the orphan assembled_multiconnect.png (render-all does not produce it). Gates: npm test 218/218, disney sweep 31/31 (wasm), invariants ok, CGAL export watertight. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFxBnoNNfgTpDG8yrgnvi2 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…at flip (pst-j3ej) Supersedes the codex-gate flat fix in e4cd6eb (pst-cu7n): that flip made the plate functional but printed the slot RETENTION UNDERCUTS as ~107mm2 of severe (<25deg-from-horizontal) downward overhang — it needs support, which violates the bead's "zero-support both" hard rule. The operator (Sean, this session) chose the standing print instead: a flat orientation cannot both present the slots to the board AND stay support-free, because the slot openings and the dovetail rail are opposite faces of the same axis. The plate now prints in multiconnectBack's native frame — a wall in the X-Z plane standing on its z=0 edge, slot openings horizontal — the standard zero-support Multiconnect orientation the sibling backers (apple_tv) already use. The rail protrudes +Y off the solid back and adds no overhang. Its trapezoid is unchanged (24 x 4 x 8->12) so it still mates the saddle socket. Keeps e4cd6eb's correctness intent (slots face the board) and its slot-direction invariant, re-expressed for the standing frame: - mc_slab_standing / plate_rail_standing (native frame, rail out +Y). - Header + module comments rewritten for the standing print. - _check_mc_plate rewritten for the standing frame (footprint W x H in X-Z); mc_plate-slot-direction probe: AIR just inside the -Y board face at the central slot, SOLID behind it (verified: fires on a Y-mirrored mesh). Gates: invariants ok; unit 218/218; wasm sweep 31/31; CGAL watertight / 1 solid / seats z=0 across width/height 1..6, on_ramp, retention, clearance. tab byte-identical; opengrid/saddle untouched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014CAY86pxqsdqK2Lc6trRVH 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Codex gate review — pass
What I verified independently (fresh worktree, pinned engine 2025.06.12.ai25773, vendored libs re-cloned at their pins):
Non-blocking nits (not gate-worthy, suggesting a small follow-up if anyone wants):
Slot-down/rail-up print orientation judgment call is sound (a saddle-facing rail can't coexist with slot-up in a flat print) — flagging for operator awareness only. |
Codex gate review — pass
Verified independently (scratch worktree, pinned engine, libs re-vendored at their pins):
Non-blocking findings:
56mm-tall standing wall with a 72mm² bed footprint — brim if tippy is your call, and the header says so honestly. |
Codex gate review — changes requested
BLOCKING — the dovetail joint is an interference fit, not a clearance fitWhat: Exact cross-sections of both exported STLs (plane-slice, no probe ambiguity), plate centre x=14, mated at the wall face:
The rail is 0.16–0.24mm WIDER than the socket at every depth — the parts collide on the flanks and cannot slide together (the joint's entire purpose). At print tolerances of 0.1–0.15mm this is a hard bind, not a snug friction fit. Why: Smallest honest fix (pick one):
Either way, please verify post-fix with a plane-slice measurement (rail z-width at x=W/2 vs socket air gap at y=0 across depths 0..3.9) — a containment-probe check will not catch 0.2mm flank errors, which is how this slipped through the sidecar and two gate reviews. Consider adding that slice-based flank-clearance assertion to Non-blocking
Verified clean in this revision
|
What & why (pst-j3ej, operator-picked A1+B1)
Redesigns the Multiconnect ear-hanger mount, which the operator flagged as (1) far
too thick for a trivially light headband and (2) unprintable without heavy supports
(the one-piece welded the slot plate perpendicular to the saddle).
A1 — slim plate
The Multiconnect slot slab drops from 6.5mm slab + 4mm plate cap (~10mm) to a
slim 6.0mm slab (4.15mm engaging recess + 1.85mm back wall) via patch-0002's
backThicknessparam, which keeps the engaging profile identical.B1 — two-piece dovetail
mount_typesplitsmulticonnectinto two fanned, separately-printed STLs:multiconnect_platemulticonnect_saddleearHanger()is untouched, so tab stays byte-identical and opengrid is unchanged.Joint: the rail slides across the wall so gravity + the cantilever lever-out
bear on the dovetail shoulders, not the slide axis (operator's load rule).
Friction fit (
dovetail_clearance~0.25mm, @PARAM) + an optional glue dot.Plate orientation — bug fixed, then stood up (the last three commits)
The first cut of the plate had the slot slab's rotation inverted, so the exported
part met a Multiconnect board with a solid face — the slot openings pointed at the
rail instead of the board, and the plate could not engage at all. Codex-review caught
it; no machine invariant did.
e4cd6eb(codex-gate fix) flipped the slab so the slots face the board — but in aflat print that lands the retention undercuts as ~107 mm² of severe
(<25°-from-horizontal) downward overhang: functional but needs support, which
breaks the bead's "zero-support both" rule.
7d7207d(this branch head) resolves it per the operator's decision this session:print the plate STANDING — a wall in the X-Z plane on its z=0 edge, slot openings
horizontal — the standard zero-support Multiconnect orientation the sibling
backers (apple_tv) already use. The rail protrudes horizontally off the solid back and
adds no overhang; its trapezoid is unchanged (24 × 4 × 8→12) so it still mates the
socket. (A flat print can't both face the slots at the board and stay support-free —
openings and rail are opposite faces of the same axis.)
New machine guard so this can't regress:
mc_plate-slot-direction— AIR just insidethe -Y board face at the central slot, SOLID behind it (verified: fires on a Y-mirrored
mesh).
_check_mc_platewas rewritten for the standing frame.Verification
8→12 over 4mm depth × 24mm long, mates the socket; CGAL watertight/1-solid/seats
z=0 at width/height 1..6, on_ramp, retention, clearance extremes.
(render-all doesn't maintain it) — the per-part isos + the header assembly note cover
the two-piece.
🤖 Generated with Claude Code