# Method, reproducibility and limits

Date: 2026-10-18. Python 3.13.9, pandas 2.3.3, NumPy 2.2.6, PyArrow 21.0.0 and local Shapely 2.2.0 (actual runtime metadata also in source_manifest.json). PyArrow writes normalized Parquet artifacts; Matplotlib renders scientific plan figures. Analysis uses CPU vectorization and bounded chunks. No GPU training, downloads, geometry repairs or Rhino operations were performed.

## Reproduce

Use this study folder as the working directory. `python analyze_dwellings.py --self-check` runs small known-answer checks. Then run in this order:

```
python analyze_dwellings.py
python research_relationships.py
python research_layouts.py
python build_research_report.py
```

Keep original CSVs and zip-tail.bin in place. Source size/CRC verification and SHA256 are performed first. The main script reuses geometry/simulation caches only when source manifests match. To change extraction logic, explicitly regenerate the relevant derived caches rather than assuming old caches incorporate code changes. Derived scripts should be run after the main script; the bounded topology script reuses its saved sample/floor context. If source files change, regenerate sample_floor_elements.parquet and topology_sample_keys.csv from the new source before rerunning it. These are research scripts for this fixed release, not a general-purpose ETL service.

The first wide context join exceeded available process memory when it attempted to duplicate over 500 fields across 522,183 rooms. The final method preserves full building context at building level and attaches only selected measures per room. No source change was needed. During topology refinement, one computation was interrupted to move repeated wall buffering outside the room-pair loop; the final scripts completed afterward. Runtime failures were not interpreted as dataset geometry defects.

## Measurement definitions

- Read every source row. Parse every WKT element with Shapely; count missing/unparseable/empty/invalid and geometric types. Validity is per-element 2D validity, not full floor-plan consistency.
- Derive exact area and perimeter, Polsby–Popper compactness, minimum rotated enclosing rectangle short/long sides, aspect and area fill for every valid area polygon. Geometry/elevation/height source fields remain unchanged.
- Normalize numeric ID representation only (`619311.0` to `619311`), retaining strings and missing values. Join on all six area identity fields and separately check apartment/usage agreement. Validate building many-to-one context joins; avoid record multiplication.
- Profile all 369 simulation fields, retaining nonmissing/zero counts and numeric ranges. The joined room artifact retains all layout measures and selected environment/connectivity fields; the complete simulations remain in the source CSV.
- Source apartment net area is the sum of `layout_net_area`, source room count is the sum of `layout_room_count`. Hall share uses matched CORRIDOR polygon area divided by source net area. Counts of toilet-containing rooms are not counts of toilet fixtures or a universal bathroom definition. Zero net contribution and semantic exterior are separate measures.
- Program/room budgets condition on the explicit cohort documented in FINDINGS.md and generation_reference.json. Overall room statistics retain apartment-instance weighting. Source area-set signatures remove some repeated-floor instances but do not establish unique architectural designs across different plans/sites.
- Context correlations use one observation per building, excluding cross-building apartment keys, and pairwise nonmissing Spearman ranks. No causal interpretation, significance screen or held-out prediction is claimed. Sparse amenity blanks remain missing. Room-area-weighted dBA averages are labeled descriptive indices; physical sound-energy aggregation would require a different model.
- Topology sampling is fixed at seed 42, up to 400 uniformly sampled eligible plans, then one eligible apartment per plan. The pool requires a single building/floor/unit, 20–250 m² and source rooms 1–7; simulated areas only form the graph. Door proximity is tested at 1/5/10 cm. Open candidates require 0.5 m nearby boundary after subtracting buffered WALL polygons. Entrance-rooted accessibility, door swings, furniture and complete shell coverage are not verified. Zero sample room overlap does not imply zero overlap of all semantic layers.
- Six examples are selected near median size in broad room-count bands among connected, nonoverlapping sample cases. They are illustrative examples, not random representative portraits of each family. Openings/context are selected by a 5 cm geometry proximity rule, so context associations can be incomplete or ambiguous. Exact WKT remains available for reevaluation.

## Verification

Four source files match saved ZIP member byte sizes and CRC32; local SHA256 recorded. The original full ZIP was not assembled or checked against its published MD5. Every simulation matches one area; no join key collisions or apartment/usage conflicts. Geometry/source simulation area agreement checked on all matched rooms. Independent shoelace-area checks cover 512 seed-42 geometries, in addition to synthetic rectangle/ID/graph checks. The six-panel source-plan figure was inspected visually. Browser verification results, when present, are in browser-verification.json.

## Remaining limits

Commercial-client selection and repeated plans prevent national inference. Publisher plan-area QA and default heights were not independently validated. Multi-floor/unit identifiers are not fully resolved into genuine duplexes versus labeling errors. Passage inference is a bounded sensitivity study. No native CAD import/export, generated geometry, physical feasibility, current legal/code compliance, annual environmental performance or trained-model generalization was tested. Nothing here retrains the assistant's underlying weights: reusable learning lives in these artifacts.

Quality confidence: 85/100 for the descriptive study and documented generation reference, not a probability or a generator-quality score. Calibration remains open until Theo reviews source exemplars and the proposed rules.
