feat(lego): PerpendicularHolesLiftarm — studless liftarm with perpendicular pin holes#79
Open
fa-mc wants to merge 3 commits into
Open
feat(lego): PerpendicularHolesLiftarm — studless liftarm with perpendicular pin holes#79fa-mc wants to merge 3 commits into
fa-mc wants to merge 3 commits into
Conversation
…icular pin holes Add a parametric thick studless liftarm that bores each hole position along either the flat-face axis (+Z, "main") or the narrow side-face axis (±Y, "perp"), generalizing the LEGO 6435016 / design-2391 "perpendicular holes" liftarm family. hole_axes=None defaults to the alternating [perp, main, ...] pattern. - New sibling class vibe_cading.lego.technic_beam_perp.PerpendicularHolesLiftarm - Extract shared stadium_beam_body() helper from LegoTechnicBeam (no behavior change) - Generalize _HoleMouthSelector with an additive axis="z"|"y" knob (existing LegoTechnicBeam + LegoTechnicLLiftarm call sites unchanged) - Counterbored pin holes + lead-in chamfers on both axes; single-solid + no-cross-drill intersection guards - Tests, iso_ne/front visual contracts (registered), build.toml entry, engine_api.json refresh; version 0.1.4 → 0.1.5 (public-surface addition) Design flow artifacts under docs/design_plans/2026-06-26-perpendicular-holes-liftarm_*; independent TL+developer review caught a CI-red engine_api omission and a selector doc-honesty defect, both fixed and re-verified. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…wed-values registry Adding the new public class introduced a new engine_api allowed-values emitted site (PerpendicularHolesLiftarm.__init__.fit, a Literal["free","slip","press"]). tests/tools/test_engine_api_allowed_values.py keeps a hardcoded registry of every emitted site + a count literal; both must track new Literal-param classes. Add the Group-E entry and bump the count 35→36 (+ docstring E(3)→E(4)). Caught by CI full-suite (the engine-api workflow only checks JSON regenerability, not this registry). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
Summary
Adds a parametric thick studless liftarm where each hole position bores along either the flat-face axis (+Z,
"main") or the narrow side-face axis (±Y,"perp") — generalizing the LEGO 6435016 / design-2391 "Liftarm Thick with Perpendicular Holes" family.hole_axes=Nonedefaults to the alternating[perp, main, …]pattern (the reference image's layout).Default 5-hole part: 3 perpendicular (±Y) + 2 main (+Z) counterbored pin holes, single solid, lead-in chamfers on all 10 mouths. Visual contracts:
visual_contracts/2026-06-26-perpendicular-holes-liftarm_design_{iso_ne,front}.svg.Architecture
vibe_cading/lego/technic_beam_perp.PerpendicularHolesLiftarm— not a widening ofLegoTechnicBeam's narrow(length_in_studs)contract (dual-lens deletion-test reasoning in the design doc).stadium_beam_body()helper fromLegoTechnicBeam— removes body duplication, zero behavior change._HoleMouthSelectorgained a purely-additiveaxis="z"|"y"knob; the existingLegoTechnicBeamandLegoTechnicLLiftarmcall sites are unchanged.main ∩ perp == 0intersection guards.Design flow
Artifacts under
docs/design_plans/2026-06-26-perpendicular-holes-liftarm_*(requirements + design with human gates). Independent fresh-context TL + developer review plus a 6-dimension adversarial verification pass caught two real defects:LegoTechnicLLiftarm(a second consumer with non-zero-Y rims) — reworked to be purely additive.engine_api.jsonomission (falsely reported as done) + a "lying" selector comment (perp rims claimed off-center; they're at mid-height for n≥2) — both fixed and independently re-verified.Validation
tests/test_technic_beam_perp.py+ NFC on beam & L-liftarm)PerpendicularHolesLiftarm(N, all-main)==LegoTechnicBeam(N)at 0.00% volume delta (boolean-residual checked)flake8/ no-__main__clean;engine_api.jsondeterministicbuild.pymanifest pipeline builds the registered entry (897 KB STEP)Reviewer notes
build.tomlentry added (user-approved):lego/perpendicular_holes_liftarm_5hole.step.main; an unrelated concurrentcrossed-helical-mesh_review.mdfrom a parallel session is intentionally not included.🤖 Generated with Claude Code