# Hearth 1.6.0: roof form and furnished buildings

This continuation improves individual buildings through shared components and rules. It does not
expand the bridge or settlement-layout agenda. The [initial review](review.md) and
[baseline module hashes](baseline-hashes.json) precede implementation. No serious architectural
flaw was found, including during later debugging; the requested stop condition did not require
a redesign. The [API delta](api-delta.md) distinguishes public additions from implementation fixes.

The result includes bounded half-hip roof ends, fitted hearths and dining groups, supported rugs,
and less restrictive but accurate trunk/crown garden fitting. A new short
[hearth-house client](../../examples/hearth_house.py) varies its ground-room graph, upper wing,
ridge axis, roof ends, loft purpose and balcony. The existing lodge programs and default settlement
also use the shared improvements. Earlier evidence and supplied references remain unchanged.

## Executed results

The full suite passed **312 tests in 404.28 seconds**: all 266 earlier tests, unchanged, plus 46
new parameterized cases. See [the complete log](full-regression.txt) and
[test_building_craft.py](../../test/test_building_craft.py). New checks include both roof axes,
four rotations, actual cover and enclosure, six room functions, extinguished fire, removed hearth
masonry/support, blocked interaction headroom, failed-count rollback, whole-object removal,
independent policy substitution, regeneration, full paired records and NBT, and finial bases.

The [sampling policy](SAMPLING.md) was recorded before assessment. Each input is evaluated once,
with the same two bounded contact candidates. The final release uses root seed 0. All independent
terrain fields were frozen before placing structures; post-generation digests verify their preservation.
No seed was substituted, locked house moved, edit limit widened, or failed input omitted.

| Final group | Inputs validated | Contact candidates accepted | Measured seconds |
|---|---:|---:|---:|
| Core: 24 client seeds and 64 original independent pairs | 88/88 | 132/176 | 228.816 |
| Roof-space regression: 8 clients, 16 pairs, 8 prior holdouts | 32/32 | 45/64 | 110.195 |
| Garden regression: 8 clients and 12 pairs | 20/20 | 35/40 | 78.847 |
| Earlier held-out operation compositions | 16/16 | 16/32 | 31.826 |
| New hearth-house: 8 clients and 16 independent pairs | 24/24 | 38/48 | 143.123 |
| **Supported inputs** | **180/180 (100%)** | **266/360 (73.89%)** | **592.807** |
| Stress, including every unsuccessful input | **5/16 (31.25%)** | **6/32 (18.75%)** | **10.276** |

The final supported groups contain no defects, incompatibilities or budget exhaustion. Stress retains
11 `site-relief` incompatibilities: measured local relief 6..19 exceeds the unchanged limit of 5.
Both declared alternatives reject that same hard condition. This establishes incompatibility with
the stated inputs and bounds, not impossibility for every conceivable building technique. No final
case exhausted its search budget. Retries/resampling beyond the two declared candidates were zero.
All rejected candidate diagnostics and scores remain in each `results.json` under [release](release/).

Supported contact fill, including bearing courses, ranges from 0..257 cells; excavation is zero in
this corpus. Existing contact tests still exercise excavation and its authority. The number of
replaced cells ranges from 1..263; replacements are not synonymous with excavated volume. There
are 244 committed stepped-contact component uses and 128 pier uses across the 180 supported scenes;
these are component counts, not input counts. Stress successes use five pier contacts, fill 74..143,
and no excavation. Candidate policy and adaptation limits were not changed this round.

Per-input measured time ranges from 1.0036..9.6275 seconds for supported inputs and .2329..2.4034
for stress. These are sums of per-input generation/finalization/audit timers, including export for
selected samples. They exclude input freezing, rendering and pytest, and were collected while other
batches ran on the same CPU. They are reproducible workload records, not a portable performance bound.

The [aggregate JSON](summary.json) retains denominators and the per-group data. The final inputs and
principal signatures exactly match the archived pre-finial-fix assessment; the pedestal correction
changes block states and their constraints, not the counted architectural arrangements.

## Observed variety and actual persistence

There are **47 principal architectural signatures in 48 named-client inputs**: home, hall, high,
garden-house, roof-home and hearth-house, each at seeds 0..7. Across all 180 supported inputs there
are 55 principal signatures and 152 separate contact signatures. Principal measurements use actual
normalized room/floor/roof geometry, topology and structural decisions. They exclude names, global
transforms, furniture, palette, vegetation and contact geometry. The existing signature algorithm
was not changed. The preceding 1.5 release recorded 36 signatures in 40 client inputs; both sample
size and available roof forms differ, so this is not an exhaustive or statistical diversity claim.

The eight new client seeds have eight separately measured furnishing arrangements, 29..46 usable
stations across ordinary rooms and lofts, and two actual hearths each. Dining lengths 2, 3 and 4
all occur in the new corpus. Station counts are for entire buildings, not individual rooms. Counts
and optional omissions are retained under `furnishings`; mandatory room functions and minimums stay
hard. Substituting the previous furnishing policy leaves the principal architectural signature intact.

The [selected-artifact manifest](../../samples/building-craft/release/manifest.json) identifies
**38 complete schematic/companion pairs**. Their audits compare **10,393 nodes, 9,342 component
queries and 2,024 NBT-bearing cells**, including complete contracts, relations, dependencies,
operations, port uses, displaced records and reverse indexes. Semantic geometry digests and explicit
blockstate mappings match after reload. Selection follows the predeclared policy, not visual ranking.

`python generate.py` produces the current five-building `output.litematic`: 128,174 occupied cells
and 1,034 components, in one region. The seed-1 spaced-path command produces three buildings,
91,330 cells and 679 components. [Fresh-generation CLI audits](cli-audit.json) match both complete
pairs and all **1,713 descendant-cell queries**. Two seed-0 processes using `PYTHONHASHSEED=3` and
`8675309` match the current semantic digest:
`dfb1b63ad3cefc6694146c47864102cf8be546f950ba0b47e7fe57220adac8da`.
See [replay.json](replay.json), [default.txt](default.txt) and [seed-1.txt](seed-1.txt).

The unchanged [headless example](../../examples/lodge_inspection.py), run at seed 0/environment 7,
recovers glass -> window -> dormer wall -> dormer -> roof -> building, typed relations and exact
current cells, then verifies the same query after reload; see [inspection.json](inspection.json).
The [native import guard](portability.json) generates and inspects the new client with numpy, MCIO,
PIL, scipy and litemapy prohibited. No new dependency was added. This preserves the intended pure
Python generation boundary; **no new browser/Pyodide execution is claimed**. The user's earlier
external browser results remain historical evidence.

## Retained development failures and their repairs

The [first new-client assessment](first-assessment/new/results.json) retained all 24 inputs:
13 validated, 6 geometry defects and 5 exhausted candidate searches. The exhausted cases had mixed
contact and geometry rejections; they were not called proven incompatibilities. Projecting shutters
on clipped gables intersected later neighboring roofs. The reusable correction is flush glazing for
clipped gable faces. The final assessment reruns exactly those inputs: 24/24 now validate.

Other retained probes exposed an overly broad dormer exclusion band, a compact garden that failed
its tree minimum, an unrecognized campfire source, and mutable cached blockstate properties.
The fixes use the actual dormer footprint, separate public trunk/crown regions, state-aware emission,
and an independent returned property mapping. See the probe logs, [lighting-delta.md](lighting-delta.md)
and [API delta](api-delta.md). A few new test-fixture errors (an identifier typo and an overly strict
reused-path assertion) were repaired; no previous test was edited or weakened.

The first complete 180-input assessment and 30-view set remain under `before-finial-review` in
reports, samples and previews. Visual inspection found ridge finials floating above bottom slabs.
The failing [finial test](finial-first.txt) precedes the full-height pedestal correction; deliberately
putting back the slab now fails [the repaired check](finial-fixed.txt). The entire assessment, suite,
CLI exports/replays and all final views were refreshed after that change.

## Visual result and remaining limits

All eight original lodge reference images were opened for aesthetic review; no reference program
was invoked or copied. **Thirty final images were rendered and inspected**: five selected complete
compositions, each with front/rear/side views and ground-interior, loft and circulation cuts.
[Visual notes and every image link](VISUAL-REVIEW.md) identify successes and remaining weaknesses.
Cuts are geometry-only diagnostic artifacts; persistence audits use complete originals.

The buildings have better roof-end variety, more useful interiors, coherent clipped joins and
supported ridge details. They remain below the reference lodges' visual richness. Repeated bay
rhythms, heavy timber bands, broad roof faces, generous central aisles and simple surrounding gardens
are still visible. The isolated wet specimen is an adaptation fixture without a landscaped public
shore network; it is not offered as a finished settlement.

Public domains remain bounded 9/11/13 room bays, six-cell storeys, cardinal building axes, half-hip
depths 0..3 with a four-cell residual gable, finite furnishing vocabulary and two contact strategies.
Component authors must honor documented local-frame, interaction-apron and roof-interior conventions.
Ordinary clients need no private-state access, geometry repair, block ownership maps or hidden ancestry.
A custom furnishing vocabulary currently uses another public policy, rather than a station plugin
registry in FittedInterior. Arbitrary roof intersections, full Minecraft collision/lighting/fluids,
smoke/ventilation/combustion and reference-level bespoke massing remain outside the implementation.
No finite test set or render selection proves universal validity or aesthetic quality.

See [GENERATOR.md](../../GENERATOR.md) for rerunnable explicit-seed generation, assessment, render,
inspection and test commands, and the complete R01–R30 continuation ledger.
