AGENTS.md — persistent design context for dcm31/stl-creator

Reference data for AI agents working in this val. Keep hardware dimensions and hard-won calibration facts here so they survive across sessions.

Printer

  • Bambu Lab A1 Mini — bed 180 × 180 × 180 mm
  • Large plates print with ~99.9% slicer downscale (Charlie's habit for 180mm-flat superellipse parts)

Hardware objects

Donut plant light (small horizontal ring light)

  • Donut OD: 90 mm
  • Donut ID: 50 mm
  • Donut height: 15 mm
  • Support stick: attached at outer edge, runs full height and continues down (it's the pole that holds the light up)
    • Radial protrusion beyond OD: ~15 mm, but a wire runs down the BACK of the stick → design clearance 20 mm radial
    • Stick width: 10–15 mm (rounded profile) → design slot width ~16 mm
  • Related design: lampshade that drops over the top (keyed vase-mode shade)

Donut plant light — BIG (second ring light)

  • Donut OD: 160 mm
  • Donut ID: ~115 mm (measured 11.5cm-ish)
  • Donut height: 17-18 mm (design for 18)
  • Bulge: max 20 mm past OD, max 15 mm wide (looks like same equipment family as the small one)
  • Shade: donutShadeXL — 55 mm skirt below the light, 45°-rotated for bed fit (Ø163 + tab = 181.5 along the tab axis, so the tab must point diagonal)

LED stick lights

  • Small stick: Ø8.35 socket (ring-test confirmed) — used by ledLightBase*
  • Big stick: Ø15.5 socket (ring-test round 4) — used by ledLightBase15L*

M5Stack red four-digit clock

  • Hardware visually confirmed by Charlie: M5Stack Unit DigiClock, SKU U146.
  • Charlie's measured visible display window: approximately 50 mm wide × almost 20 mm tall. Diffuser tests use 60 × 30 mm coupons, preserving the centered 50 × 20 mm optical area and testing 0.20 / 0.40 / 0.60 mm face thickness.
  • Optical test protocol: print every coupon visible-face down, evaluate the build-plate side, and disable ironing. Keep filament, build plate, first-layer height, nozzle/bed temperatures, flow, speed, and cooling identical between coupons and final enclosure; STL cannot encode these slicer settings.
  • Coupon result (2026-09-07): Charlie selected level 2, so the enclosure defaults to FACE_LAYERS = 2 at 0.20 mm layers, for a 0.40 mm translucent front membrane. Level 1 (0.20 mm) and level 3 (0.60 mm) remain explicit alternatives; do not silently change the selected default.
  • Official product page: https://docs.m5stack.com/en/unit/digi_clock
    • Published product size: 50 × 31 × 14 mm.
    • Four mounting holes/tabs; official product photo labels the slots 3 × 4 mm and a 32 mm horizontal mounting-center relationship.
    • Official photos show mounting ears projecting beyond the display fascia and Grove connectors at both short ends. Do not use a plain 50 × 31 mm box as the fit pocket or assume the published envelope fully covers projections.
  • Enclosure geometry must keep separate parameters for fascia/body, tab projection and width, four hole locations, Grove connector bodies, plug insertion clearance, and cable bend/routing space. These remain provisional until physically measured.
  • Controller: AtomS3 Lite, SKU C124, official envelope 24 × 24 × 9.5 mm (official STL measures 24 × 24 × 9.507 mm). USB-C is centered on one edge. Source: https://docs.m5stack.com/en/core/AtomS3%20Lite
  • Charlie selected Concept A: a low, squat, elongated ellipsoid / rounded soap-bar body whose angled display face remains separate from the broad, horizontal stable base. Do not continue or present the overlapping Concept B.
  • The reviewed A envelope is approximately 124 × 84 × 48 mm in use. The display plane remains tunable at 55° and the exported model is automatically reoriented so the 0.40 mm visible clock face prints flat on the build plate.
  • The active U146 Grove port is on the left when viewed straight at the display. The plug insertion, bend pocket, Atom route, and service access must remain inside the shell; no side opening is allowed. The passive right connector body must remain internally accessible.
  • Enclosure exterior finish is slicer-only: Bambu fuzzy skin thickness 0.10 mm and point distance 0.10 mm, painted only onto exposed curved exterior side walls. Exclude the translucent membrane/build-plate face, stable flat base, internal pockets/cradles, Grove connector and cable-bend reliefs, USB-C notch, service-opening rim, and all mating/retention surfaces. Do not apply this setting to the diffuser coupon plate.
  • Concept A is not yet print-ready hardware. The official 50 × 31 × 14 mm U146 body envelope and 24 × 24 × 9.5 mm AtomS3 Lite envelope are represented, but the U146 ear projection/width/vertical centers, real left Grove plug overmold and bend envelope, USB-C center/overmold/insertion space, rear closure, display and Atom retention, assembly order, and local wall thickness around all cuts still require measurements or decisions. A slicer overhang/support review and an exported-mesh repair/manifold check are also required before print approval.

Traveler guitar → printed SKÅDIS adapter

  • Traveler guitar has two nominal Ø6 mm rod/hole locations.
  • Charlie measured 60 mm maximum outside-edge span across the two holes, not center-to-center. The current concept therefore infers 54 mm nominal centers; confirm with calipers before a fit print because both the diameter and span are approximate.
  • The SKÅDIS board plane contains the guitar rod axes and is perpendicular to the guitar's hole-opening plane, so the adapter is a 90° L-shaped transition.
  • Charlie's 3D-printed SKÅDIS slots run tight. Start with deliberately undersized test keys (current concept 4.20 × 9.20 mm) on 40 mm pitch rather than assuming official IKEA fit.
  • Current direct concept requires two assembly motions: approach normal to the board far enough to insert the hook caps, then slide about 4 mm in-plane to lock. Confirm the guitar/body leaves room for both motions and choose the slide direction before making this print-ready.
  • Current provisional board thickness is 5.0 mm. Measure the actual printed slot width/length, board thickness, rod OD, desired board offset, available insertion clearance, board/amp load, and orientation before final design.
  • If direct insert-and-slide clearance is blocked, prefer a two-piece design: standard SKÅDIS hooks on a board-side cleat plus a separate guitar-side dovetail/rail. That decouples board installation from attachment to the guitar.
  • Editable concept id: travelerSkadisAdapterConcept; presentation slug: traveler-skadis-adapter. It is a motion study, not print-ready hardware.
  • Hole-fit matrix printed 2026-09-12 in the active Bambu A1 Mini PLA Wood profile: nine 72 × 20 × 1.20 mm coupons, no brim/support, 0.20 mm layers. Left-edge notch count encodes centers: 1 = 53.5 mm, 2 = 54.0 mm, 3 = 54.5 mm. Right-edge notch count encodes bore diameter: 1 = 6.15 mm, 2 = 6.35 mm, 3 = 6.55 mm. Charlie selected 2 left notches / 3 right notches, confirming 54.0 mm nominal centers and Ø6.55 mm bores. Example id: travelerHoleFitTestPlate.
  • Equal-spacing plates steal the bent rods' spring/friction tension. Keep the fixed Ø6.55 mm bore and use the outward capsule slot from travelerReliefSlotTest: 54.0 mm inner-center position with 10.0 mm outward center travel (54–64 mm relationship).
  • KOKKO KG-10 cradle clearance matrix result (2026-09-12): only the loosest 99 × 67 mm profile fit at all, and it still required flexing. Treat that as the minimum measured envelope, not the basket size. The shallow basket study uses a provisional 101 × 69 mm internal opening for non-press-fit seating. Its 101 mm direction runs backward and its 69 mm direction runs outboard so the integrated 159 × 126 mm study fits the A1 Mini bed. Do not revert to the 97.5 × 65.5 or 98 × 66 openings.
  • The amp holder is a coplanar tray/basket, not an upright side-profile ring: its full floor shares the rod plate's plane and shallow walls rise normal to that floor. Direction convention for the integrated model is negative X = outboard beyond the guitar butt and positive Y = behind the guitar; do not offset the basket forward. The low placement/fit preview is deliberately built as one 4 mm carved solid with a 1.20 mm basket floor, 2 mm wall width, and 2.8 mm of wall above the floor. Its rod plate and basket are connected by a broad smooth fan, not a narrow diagonal neck or overlapping separate bodies. Reserve the available 30 mm behind-guitar height for later curved ribs/gussets. Intended final load version remains approximately 10 mm at the rod plate and 20 mm-high basket walls, after placement and clearance are confirmed.

Presentation views

  • For TVs, embedded reviews, and visual approval, use the control-free route /present/<model-slug>; never embed the full STL Creator editor.
  • Presentation views must reuse the registered example's generatorBody, fill the viewport, auto-fit the whole part after resize, and leave the editable root editor route unchanged.
  • Add a model to PRESENTATION_MODELS in main.ts with its title, note, generator body, and optional in-use pose correction. Supported query options are pose=in-use|print, labels=0|1, background=RRGGBB, and accent=RRGGBB. The legacy /preview/<model-slug> route is an alias.
  • For the DigiClock enclosure, use /present/digiclock-enclosure-a?pose=in-use for the selected Concept A; print pose is only for fabrication inspection.

Bottles / sleeves (foot diameters that matter for base clearances)

  • 0.5L mini sleeve foot: Ø84 (waterSleeveMiniV2Bottom)
  • 1.5L sleeve foot: Ø114 (waterSleeve15V2Bottom)
  • 5L jug: superellipse a=90 n=2.67 (~180 flat / ~196 diagonal)