docs: record predicted-property display fixes (item 4) 🟪

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-06-26 10:54:53 +00:00
parent a88b550234
commit 5fc8bd3b3d

View file

@ -68,5 +68,32 @@ issue before trusting the cohort.
## 4. Predicted-property display path (e.g. property 721167)
721167 has **no lodged EPC** (predicted). Its Heating-Control / Main-Fuel /
Ventilation Unknowns come from the prediction + landlord-override **overlay** not
populating the display fields — a separate path from the lodged-cert mappers.
Ventilation Unknowns come from the prediction synthesis path
(`domain/epc_prediction/epc_prediction.py`), **not** the lodged-cert mappers and
**not** the landlord-override overlay (`overlays_from` is simulation-time only,
ADR-0032 — it never writes the persisted/displayed EPC). Investigated and fixed
on `fix/predicted-property-display-unknowns`:
- **Heating Control — FIXED (Model).** `_apply_heating_donor` copied the donor's
*calc* `sap_heating` cluster but left the *display* rows (`main_heating`,
`main_heating_controls`) on the size-representative structural template —
incoherent with the donated system, and "Unknown" whenever the template lodged
no control row (exactly 721167: no `main_heating_controls` energy element
persisted). Now carries the donor's display heating + control alongside the
calc cluster.
- **Ventilation — FIXED (Model).** The prediction never synthesised ventilation
— it kept the template's `sap_ventilation`, so a predicted dwelling in an
MEV/MVHR neighbourhood was scored + displayed as natural. New
`_apply_ventilation_mode` modes `mechanical_ventilation_kind` across the cohort
(recency/geo-weighted, mirroring glazing). Natural-vent cohorts mode to None
and stay natural (§2 default) — so a genuinely natural dwelling like 721167
correctly stays natural; the fix moves only real MEV/MVHR neighbourhoods.
- **Main Fuel — NOT a prediction gap.** `epc_main_heating_detail.main_fuel_type`
*is* persisted for predicted properties (721167 → `26` = mains gas, carried
from the heating donor). The "Unknown" is the **same FE code→name gap as item
2** (the Drizzle/Next repo not mapping the fuel code), not a Model issue.
Both fixes are display-only for the calculator (component-accuracy gate, corpus
harness, and prediction e2e all green); persistence already carries
`main_heating_controls` (energy element) and `ventilation_mechanical_ventilation_kind`,
so the synthesised values reach the passport on the next prediction run.