# Continued building-detail API delta, version 1.4.0

This continuation addresses individual buildings. The initial [review](review.md) found no serious
flaw in the original requested architecture. The failures encountered were component planning and
binding mistakes, resolved without redesigning the kernel or relaxing its checks. This is a
self-authored implementation and assessment, not an independent audit.

The [pre-edit hashes](baseline-hashes.json) and [final comparison](module-delta.json) establish that
the kernel, persistence, geometry, block-state services, random scopes, validators, extension package
and all 200 pre-existing tests remain unchanged. `generate.py` remains the same thin client. No new
dependency was added. Version 1.4 intentionally changes generated content; it does not promise the
same geometry as version 1.3. The preceding default pair is archived under
`samples/building-detail/baseline-default/`.

## Public additions

| Interface | Meaning and limits |
|---|---|
| `Blueprint.facade_design`, `.rail_material` | Optional public facade policy and explicit spruce/dark-oak guards. Existing defaults remain supported. Lodge clients and the default settlement explicitly request the richer policy. |
| `FacadeDesign.openings(length, frame, access, exclusions)` | Bounded wall-opening planner using shared local service reservations. Width 1/2, height 2/3, sill at least 1, sill + height at most 4. It preserves door landings and fits flush or projecting openings. |
| `Window.planter`, `.garden_depth` | Optional internal box and one- or two-cell projected mount. The larger bound is explicitly negotiated by the window, room and building. |
| `window-garden` port / `WindowBox` | Discoverable frame, region, width/depth, capacity and scoped sill replacement. Actual soil, flowers, boards and wall anchor are validated. The box is an atomic logical object. |
| `ceiling-decoration` port / `CeilingTimbers` | Late installation after supporting floors exist. Zero replacement authority, actual overhead bearing, one-cell projection, and protection of stair headroom and existing lights. Skipped cells are recorded. |
| `footprint-boundary` port / `BoundaryPlanting` | Port-local outline geometry. It grants no terrain authority. Planting separately binds to terrain, measures actual soil/clearance/protection, and uses a clustered preference field. Density 0-1, Manhattan distances 1-6, optional minimum zero. |
| `GardenPlant` | Supported fern, azalea, flowering azalea, poppy, allium or paired rose bush. Whole-object replacement and substrate dependencies use existing rules. |
| `DomesticSuite` | Width 2/3, purposes gathering/study/cooking/craft/cabinet, with the existing `interaction` apron convention. Actual function, support, access and inventory NBT are retained. |
| `examples.garden_house.garden_house(seed)` | Short U-shaped room-graph client with variable upper wings, a longer optional wing, bay/profile choices and balcony intent. No geometry edits, private coordinates or owner maps. |

## Shared rules changed

The facade planner fits rear openings around the chimney reservation instead of blanking the entire
wall. All facade children consume the same exclusion geometry. Lower roof profiles are considered
across every lower storey: a steep gable can reach a window two levels above it. Conservative gable
occlusions omit only optional openings and record the reason in
`room.contract.decisions['omitted_optional_facades']`. Required rooms and locked principal intent
are preserved. Explicitly supplied window implementations are not silently replaced.

Wider rooms use domestic stations in addition to their primary furniture groups. Seeded station
ordering has its own scope. The circulation cross remains protected. Ceiling timbers bind with
installation semantics, so their primary structural chain includes the real room even when the
building schedules them later. Calling a helper does not introduce a semantic ancestor.

Porch guards can contrast with their deck. Tree crowns use tapered, separated branch tiers within
their original accepted height/radius domains. `GardenCourt` adds boundary planting after its
required trees, preserving the existing minimum count. These are reusable component changes, not
per-artifact repairs.

## Evidence and boundaries

Thirty new tests exercise transformed public installation, whole objects, actual support/function,
clearance, failed-candidate rollback, stale ownership, paired reload and independent branches. The
full [230-test run](full-regression.txt) retains every earlier test. All components submit `Plan`
effects; no production component mutates the scene store. Deliberate test corruption is confined to
negative validation cases.

No new private implementation knowledge is required by ordinary clients. Component implementers
still need the documented port kinds, frames, spatial grants and physical-model semantics. The
building planner remains a regular 9/11/13-cell bay system with six-cell storey spacing, bounded roof
profiles, conservative roof contacts and the two existing contact strategies. Its nonhabitable
attics are not finished rooms. The open garden is accessible from outside; this client does not add
a direct interior garden door. Reload preserves recorded policy inputs but cannot execute a Python
policy without the corresponding implementation supplied for regeneration.

The [native import guard](portability.json) exercises the new garden-house program without MCIO or
native array/image packages. It is not a browser run. The user's earlier Pyodide report remains
historical external evidence.
