# Hearth 1.7: individual-building continuation

Glazed ridge lanterns now open real lightwells into furnished roof rooms. A host
fits a public mounting description, reserves the enclosing space, retains actual
bearings, and grants only a local roof cut. The lantern contains real wall and
window components, so inspection, replacement, removal and reload retain their
identities. The same addition is used by the new lightweight `lantern_house`
client, existing lodge clients and eligible long roofs in the default settlement.

The [pre-edit review](review.md) found no serious flaw in the requested
architecture. A failing cut/refill-removal test exposed an ordinary traversal bug
in the existing undo implementation; [the recorded repair](undo-defect.md) uses
history already present in the displacement journal. No authority, lifecycle,
seed, inspection or persistence protocol was weakened. The component additions
and bounded mounting interface are described in the [API delta](api-delta.md).
This is self-authored implementation and assessment evidence, not an audit.

## Executed validation

The final full suite passed **328 tests in 440.45 seconds**:
[full output](full-regression.txt). All 312 earlier cases remain; hashes confirm
all 12 existing test files are byte-unchanged. Sixteen new cases cover both roof
axes, four rotations, bounded mounting, compatible lower dormers, broken
bearings/caps/glass/daylight paths, incompatible bindings, authority overflow,
atomic rollback, independent random branches, current-cell removal and replay,
and complete semantic paired reload. See [source delta](module-delta.json),
[lantern tests](../../test/test_roof_lantern.py) and
[minimal undo regression](../../test/test_nested_restoration.py).

The [sampling recipe](SAMPLING.md) predates assessment. Every input and outcome
is retained, including rejected candidates and stress failures. The earlier
180 supported inputs are regression inputs; the new 40 comprise eight client
seeds and 32 independently frozen environment/building pairings. Sixteen of those
new pairings use the reserved transformed/masked field compositions. Fields were
frozen before building placement and checked unchanged afterward. Placement,
site relief, support height and edit limits were not enlarged.

| Final batch | Valid inputs | Accepted candidates | Sum of recorded seconds |
|---|---:|---:|---:|
| Earlier home/hall/high clients and 64 pairs | 88/88 | 132/176 | 246.051 |
| Roof-space regression | 32/32 | 45/64 | 94.167 |
| Domestic-detail regression | 20/20 | 35/40 | 80.893 |
| Historical holdout regression | 16/16 | 16/32 | 30.368 |
| Roof-form/furnishing regression | 24/24 | 38/48 | 118.120 |
| New lantern client and independent pairs | 40/40 | 57/80 | 236.891 |
| **Supported total** | **220/220** | **323/440 (73.41%)** | **806.488** |
| Stress, reported separately | **5/16** | **6/32 (18.75%)** | **10.004** |

There are no supported-input defects or exhausted searches. The eleven stress
incompatibilities are explicit `site-relief` violations: measured relief 6..19
against the locked limit of 5. Their expressions, seeds, positions and both
candidate diagnoses remain in [core results](release/core/results.json) and
[aggregate data](summary.json). This is established incompatibility with that
declared limit, not a claim that no other architecture could fit the site.

The planner evaluates two contact alternatives per input. There are 117 rejected
supported candidates and 26 rejected stress candidates, with zero additional
retry loops or resampled inputs. Candidate rejection is not an input failure.
Recorded supported runtimes range 0.993..13.627 seconds; they include validation
and, for selected inputs, export/reload. Sums are not wall-clock batch duration
because independent commands also ran concurrently. Actual supported site fill
is 0..257 cells, excavation 0, replacement 1..263 cells and new sitework 0..208
cells. The separate bearing-course contribution is 0..3 cells. Both existing
contact strategies occur; no new terrain engineering strategy is claimed.

## Observed structure and retained decisions

Seven lightweight clients at seeds 0..7 produce **55 principal signatures across
56 inputs**: home 7/8; hall, high, roof-home, garden-house, hearth-house and
lantern-house each 8/8. The signature algorithm is unchanged. It measures actual
normalized room footprints, connections, roof descendant geometry, porches and
chimneys; palettes, planting, instance names, translations and contact geometry
are excluded. Across all 220 supported inputs there are 65 principal and 187
separate contact signatures. These are finite observations, not counts or
estimates of a possible design space.

The new client varies frontage, rear rooms, upper levels, purposes, roof ends,
profile and lantern length. All 40 new inputs realize an actual lightwell, with
observed lengths 5, 7 and 9 and 146..222 current descendant cells. Across their
101 roof runs, 61 optional mounts are omitted because the run is below the
explicit minimum of 17; none of these inputs loses its required realized feature.
The records also retain 116 candidate positions screened out for end framing.
These local mount positions are not the contact-candidate denominator above.
Required attachment mode is separately tested to fail instead of omitting.

The first assessment and all development failures remain under
`first-assessment/`, alongside failed-test logs and the pre-refinement source
snapshot. Initial large mounting boxes unnecessarily excluded compatible lower
dormers. A failing test preceded the shared fix: separate body/high-cap occupied
envelopes and measured dormer height bounds. Every final batch was rerun after
that refinement. [Design notes](design-notes.md) describe the visual changes.

## Persistence, CLI and portability

The [complete-pair replay manifest](../../samples/building-lantern/release/manifest.json)
contains 47 selected artifacts: 46 preselected pairs and one additional export of
already-assessed seed 2 for visual contrast. It does not add another input to the
success or diversity denominator. Audits compare **13,494 complete nodes**, all
their exact current-cell sets, **12,135 nonempty-component coordinate queries**,
**2,572 NBT-bearing cells**, relations, dependencies, operations, port uses,
displacement records and reverse indexes. Digests and actual blockstates match
after reload. Cutaways are geometry-only previews, never substitutes for these
complete paired audits.

The unchanged default CLI generated **5 buildings, 128,194 blocks and 1,037
nodes** in one Java 1.21.1 region. Its semantic digest is
`88df4ca5e8918fe91ee8b8f0091507e68a0f4180e9337103b89b0a2248db04d8`.
Two seed-0 replays with `PYTHONHASHSEED=3` and `8675309` match. Seed 1 also
passes using an output path containing spaces: 3 buildings, 91,330 blocks,
679 nodes. [Both full CLI audits](cli-audit.json) include 1,716 exact descendant
queries. The current default pair is [output.litematic](../../output.litematic)
and [its companion](../../output.litematic.structure.json).

The new [public inspection example](../../examples/ridge_inspection.py) selects
real glass, prints its window/panel/lantern/roof/building chain and typed related
structures, retrieves exact cells, exports, reloads and repeats the queries:
[executed output](inspection.json). The generation-only native-import guard
passes for seed 0/environment 7107 with numpy, MCIO, PIL, scipy and litemapy
denied: [portability record](portability.json). **No new browser/Pyodide execution
was performed.** The user's earlier external browser evidence remains historical.

## Visual review and limits

All eight original lodge images were opened as aesthetic references. **42 final
images of six buildings** were rendered and inspected: 18 complete exterior views
and 24 ground-floor/loft/circulation/lightwell cuts. See the
[visual review](VISUAL-REVIEW.md) and [view manifest](render-manifest.json).
Seed 2 was added after the initially selected clients all showed taller massing;
the original selection was retained. This is an explicitly disclosed additional
view of an already assessed input, not a favorable replacement.

The lantern improves roof hierarchy, real interior daylight openings and local
dormer coexistence. The results remain below the reference quality: regular
square room bays, broad roof planes, heavy timber bands, sparse central floors
and simple rectangular landscapes remain visible. The wet fixture is an isolated
contact test, not a completed shore network. The numerical model is discrete;
daylight-path validation is not a Minecraft sky-light simulation. A lantern has
a fixed five-cell body, three length choices and one attachment per roof run.
Existing main-room bays remain 9/11/13, and contact still uses two strategies.

## Rerun

Run from the workspace root. Every batch accepts an explicit root seed. These
are persistent outputs, separate from unit-test temporary directories.

```sh
python -m examples.lantern_regression --seed 0 --output reports/my-lantern/release --artifacts samples/my-lantern/release
python -m examples.building_lantern --seed 0 --output reports/my-lantern/release/new --artifacts samples/my-lantern/release/new
python -m examples.lantern_house --seed 2 --environment-seed 2 --output "lantern house.litematic"
python -m examples.building_views --seed 2 --input "lantern house.litematic" --output previews/my-lantern --size 1100
python -m examples.ridge_inspection --seed 0 --environment-seed 7107 --output "inspection.litematic"
python -m examples.portable_lantern --seed 0 --environment-seed 7107
python -m pytest -q test
python generate.py
python generate.py --seed 1 --output "seed 1.litematic"
python -m examples.lantern_report --seed 0
```

The last command derives the delivered aggregate, source hashes and manifests
from the retained release records and auxiliary audits; it does not generate or
resample scenes. Earlier evidence remains in its original directories.
