Add the Axiom Relay windows group (10 models) and a shared axiom-window-kit - #3
reposlayer wants to merge 5 commits into
Conversation
Ten of the twelve briefs under docs/assets/reusable/architecture/windows had no model source. This adds all ten, built on one new support item rather than as ten independent props. axiom-window-kit treats the brief's 1.5 x 0.20 x 1.4 m envelope as a bay pitch rather than a fixed prop size, because the brief says long and curtain variants tile on the grid. That makes long-horizontal-window three bays and high-rise-curtain-glazing a 2x2 grid of the same bay, instead of one bay stretched — a stretched bay keeps its 50 mm reveal across a 3 m opening and reads as a slot cut in a panel. The kit carries the shared plate and reveal ring, glazing seat, cill and drip, aperture lamps, plate strips, control paddle, and actuator ram, plus lit lamps at a lower emissive tier than the cargo wave's. Modules: window-frame (the bay alone), observation-window, small-industrial-window, long-horizontal-window, high-rise-curtain-glazing, corner-window, laboratory-window, luxury-residential-window, damaged-broken-window, external-sunshade. Every module was iterated against its reference plate with `bun run vibe:model preview`. typecheck, build, and the 49 existing tests pass; the registry now builds 179 items from 174 models. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new Axiom Relay “windows” architecture group by introducing a shared axiom-window-kit support item and implementing 10 new procedural window modules that build on that kit, plus wiring the support item into the Sci-fi Kit registry build.
Changes:
- Register new
axiom-window-kitsupport item in the scifi-kit registry build. - Add
axiom-window-kit(contract + shared builders + preview/model scaffold) for window modules. - Add 10 new window module model implementations and a registry changeset entry.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| registries/scifi-kit/src/build.ts | Adds axiom-window-kit to the support items built into the registry. |
| assets/prototypes/axiom-window-kit/index.ts | Window kit entrypoint: shared model scaffold, preview helper, glazing + signal lamp utilities, and metadata. |
| assets/prototypes/axiom-window-kit/frame.ts | Shared bay/plate/reveal/cill/lighting/control/actuator construction helpers. |
| assets/prototypes/axiom-window-kit/contract.ts | Declares the window kit’s core datums (envelope, pitch, clips, etc.). |
| assets/prototypes/window-frame/model.ts | Implements the base unglazed frame module. |
| assets/prototypes/observation-window/model.ts | Implements the pressure-rated observation port variant. |
| assets/prototypes/small-industrial-window/model.ts | Implements the reduced-aperture industrial variant with grille/gussets. |
| assets/prototypes/long-horizontal-window/model.ts | Implements the 3-bay ribbon window variant. |
| assets/prototypes/high-rise-curtain-glazing/model.ts | Implements the 2×2 bay curtain wall variant with mullions/transoms/spandrels. |
| assets/prototypes/corner-window/model.ts | Implements the corner-return window variant. |
| assets/prototypes/laboratory-window/model.ts | Implements the sealed/cleanable lab variant with pass-through drawer. |
| assets/prototypes/luxury-residential-window/model.ts | Implements the residential variant with blind/cassette + ledge. |
| assets/prototypes/damaged-broken-window/model.ts | Implements the damaged/broken variant with shards, debris, and dead lamp behavior. |
| assets/prototypes/external-sunshade/model.ts | Implements the external brise-soleil accessory variant with articulated blades. |
| .changeset/architecture-windows-wave.md | Publishes a patch changeset describing the new windows group + kit. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
… footprint Review feedback on the windows wave. The bay pitch and the tiling rule contradicted each other. The bay is 1.5 m because the brief fixes the envelope, but production-rules.md requires modular architecture to terminate on the 1 m grid, and a run of 1.5 m bays only lands there on an even bay count - so the three-bay long window was 4.5 m wide and pushed everything placed after it half a metre off grid. Rather than break one rule to satisfy the other, the pitch stays at the brief's 1.5 m and tiled runs are constrained to even counts. A new tiledWidth() guard enforces that and throws rather than rounding, because a run that silently became 4.5 m would surface as a seam in a level instead of as an error. long-horizontal-window is now four bays at 6 m; the curtain wall's two columns were already 3 m and now go through the same guard. The contract prose and the module comments no longer claim a 1 m pitch. corner-window published the single-bay envelope, which was simply wrong for a module with two returns splayed 45 degrees each way: its mount sockets sat about a metre inside the geometry they are meant to bound. It now publishes the footprint it occupies, derived from the pitch rather than measured. Also applies the doors wave's part-naming fix here, since it is the same convention gap: articulated groups now carry the state token, so an exported open drawer, blind or shade is not full of parts claiming to be _CLOSED. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts: # registries/scifi-kit/src/build.ts
|
Conflict with Full explanation and a note on merge order in #5. 🤖 Posted by Claude Code |
Every batch appends its kit to one hardcoded array in this file, so two batches in flight always collide on that single line even though their kits have nothing to do with each other. That is what put four of these PRs into conflict the moment the interiors batch landed, and it would do it again for every batch after them. A prototype directory with no model.ts is a shared kit rather than a model, which the directory walk here already has to determine in order to collect the models. Registering those directly removes the hand-maintained list, so a batch that adds a kit no longer touches this file at all and there is nothing left to conflict on. Both lists are sorted, so the output stays deterministic. The registry builds the same items as before; only their order within the lib tier changes, since discovery is alphabetical where the list was chronological.
|
Updated: Details in #5. 🤖 Posted by Claude Code |
Absence of model.ts marks a shared kit, but it is equally true of a directory that is simply empty - one left behind by an abandoned model. Registering that published a support item with zero files, which the schema accepts and an install would silently resolve to nothing. Discovery now requires at least one TypeScript source, which is what actually distinguishes a kit from a leftover. Identical to the change on the other batch branches, so they still merge cleanly in any order.
PreviewsEvery model in this PR, rendered so you don't have to check out the branch and run the renderer. Individual previews (1024×1024)
Same deterministic rig for every model in the wave — that is what a contact sheet is for, since the defect that matters at pack scale is whether the props read as one catalogue rather than as individually plausible objects. Images live on the 🤖 Posted by Claude Code |











What this is
Ten of the twelve briefs under
docs/assets/reusable/architecture/windows/have no model source inassets/prototypes/. This adds all ten, built on one new support item in the same spirit asaxiom-cargo-kit.The kit
assets/prototypes/axiom-window-kit/treats the briefs'1.5 m W x 0.20 m D x 1.4 m Henvelope as a bay pitch, not a fixed prop size.long-horizontal-windowis four bays sharing one plate;high-rise-curtain-glazingis a 2x2 grid of the same bay. A stretched bay keeps its 50 mm reveal across a 6 m opening and reads as a slot cut in a panel; tiled bays keep the reveal, lamps and mullions at the size an eye expects.The bay pitch and the grid rule do not agree on their own, which review caught: the bay is 1.5 m because the brief fixes the envelope, but
production-rules.mdrequires modular architecture to terminate on the 1 m grid, and a run of 1.5 m bays only lands there on an even bay count. The pitch stays at the brief's figure and tiled runs are constrained to even counts, enforced by atiledWidth()guard that throws rather than rounding — a run that silently became 4.5 m would surface as a seam in a level rather than as an error.It carries the shared plate and reveal ring, glazing seat, cill and drip, aperture lamps, plate strips, control paddle, and actuator ram, plus lit signal lamps one emissive tier below the cargo wave's — a window lights the full head and cill of its aperture where a crate lights a 70 mm lens, and at the cargo tier that line clips to cream.
Modules
window-frameobservation-windowsmall-industrial-windowlong-horizontal-windowhigh-rise-curtain-glazingcorner-windowlaboratory-windowluxury-residential-windowdamaged-broken-windowexternal-sunshadeVerification
bun run vibe:model preview.bun run typecheck,bun run build, andbun test(49 pass, 0 fail) all pass.bun run build:registriesadds 10 models and 1 support item to the registry — 190 items from 184 models against the currentmain. Stated as a delta rather than a fixed pair, because the absolute count moves every time one of these batches lands.Notes for review
signalLamphelper (same approach, different kit) and both touch the onebuildSupportItemlist inregistries/scifi-kit/src/build.ts. They are cut independently frommainso either can land first; whichever is second will want a trivial merge on that list, and the two lamp helpers are worth collapsing into the cargo kit once both are in.🤖 Generated with Claude Code