Skip to content

37-arch: parametric walls, doors, windows and stairs (R3) - #318

Open
AlexZ005 wants to merge 4 commits into
feat/1.27from
feat/37-arch
Open

AlexZ005 wants to merge 4 commits into
feat/1.27from
feat/37-arch

Conversation

@AlexZ005

@AlexZ005 AlexZ005 commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Roadmap 37 R3 (P1, release 1.27): parametric architecture primitives.

What

  • Add ▸ Architecture: Wall, Wall with door / windows / door + windows, Door, Double door, Window, Casement window, Stairs (straight, L, U, spiral).
  • src/lib/arch/archGeometry.js (three only): build specs in GEOMETRY_PARAMS (the 21-C1 Terrain precedent). The existing geometry message, the 'geometry' history kind and userData.geometryParams carry them; there is no new wire type. cleanParams clamps every param at the wire boundary. fromArgs maps /create numbers to variants.
  • Inspector: every parameter is editable. ParamSpec.show hides rows that don't apply. Geometry rows now follow external edits (a peer's edit or an undo); they used to stay stale.
  • Doors and casements open on the 33 functional-behaviour runtime. arch/archParts.js rebuilds leaves and sashes idempotently on every scene poke, so restores, duplicates and syncs never double them. Registration goes through animatedImports.registerProceduralBehavior, which has no file bytes. The open/shut state replicates via the existing behavior message, and late joiners get it on the getanim reply.
  • Colliders: walls and stairs use a trimesh (36 X2), a window uses a box, and a door uses the 33 frame slabs plus a kinematic leaf.
  • 1 m grid: a wall's origin is its start end. Opening centres sit on half metres, and Add-menu placement rounds to whole metres.

Proof

  • vitest archGeometry 37/37, including real-rapier checks, each with a counterfactual:
    • a ball rolls through a wall's doorway, and a wall without a door stops it;
    • the walker climbs the stair with the app's autostep, and a block of the same height stops it.
  • e2e arch-primitives 39/39 (two peers + a late joiner, self-hosted signaling). Counterfactuals:
    • without the old-part removal, duplicates and rebuilds double the leaf;
    • without the getanim reply, the joiner's door stays shut.
  • svelte-check 318/47 (baseline); build green.
  • Screenshots in lanes-30/after-37/37-arch/ (dark + light).

Owed on device

Quest: door click/proximity feel, walking the stairs. A VR radial "Build" ring is not added (Add menu only).

🤖 Generated with Claude Code

AlexZ005 and others added 4 commits October 6, 2026 02:08
…s (37 R3 phase 1)

- src/lib/arch/archGeometry.js (three only): Wall (length/height/thickness, doors
  and windows as openings on half-metre centres with a pier kept), Door (frame +
  leaves with hinge/swing/angle/panes/sill), Window (frame, ledge, sash with
  cols x rows panes, fixed or casement), Staircase (straight / L / U / spiral,
  steps/rise/run, solid or open treads)
- registered as GEOMETRY_PARAMS build specs (the 21-C1 Terrain precedent): the
  existing geometry message, history kind and userData.geometryParams carry them
- cleanParams is the wire boundary: every param clamped, ints rounded, unknown
  choices and keys dropped (a 10^6-step staircase from a peer builds the 40-step one)
- ParamSpec gains `show` (the Inspector hides rows that do not apply)
- vitest archGeometry (37): plain group-free soups, determinism, frames on the 1 m
  grid, openings are real holes, swing directions, and in real rapier a ball rolls
  through a wall doorway (a wall without one stops it) and the walker climbs the
  stair on its trimesh with the app's autostep (a block of the same height stops it)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ehaviour runtime (37 R3 phase 2-3, WIP: not yet e2e-verified)

- createGeometry builds Wall/Door/Window/Staircase from fromArgs params; collider hints
- Add menu Architecture group (12 variants); placement rounds to the 1 m grid
- Inspector hides rows whose show() is false; edits store cleaned params
- arch/archParts.js: door leaves / window sashes rebuilt idempotently per scene poke,
  registered via animatedImports.registerProceduralBehavior; late joiners get door
  state on the getanim reply; object list hides part children

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…st run pending)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…reen (39)

- geoParams depended only on the Inspector's own edit tick, so a peer's edit or an
  undo left the rows (and which rows show) on the old params
- arch-primitives: connection premise, polling waits, GPU args for the third page

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant