Model/domain
Khalim Conn-Kowlessar 3f6129afc6 Bill a sheltered wall to a stairwell at Ru 2.1, not the corridor 0.5 🟩
RdSAP 10 §5.9 "U-values of sheltered walls" (PDF p.43): a wall between a
flat/maisonette and an unheated buffer takes SAP 10.2 §3.3's U = 1/(1/U0 + Ru),
and Ru depends on the BUFFER TYPE — "Use Ru = 0.5 m²K/W for corridors and
Ru = 2.1 m²K/W for stairwell."

The buffer type is lodged on `SapFlatDetails.heat_loss_corridor` (0-based per
item 1-11, PDF p.70: 0 none, 1 heated, 2 unheated corridor, 3 unheated
stairwell). That field was read NOWHERE under domain/ — corridor presence was
inferred only from a lodged sheltered alternative wall — so every sheltered wall
took the corridor 0.5 and every stairwell flat over-billed its sheltered wall,
under-rating the dwelling.

Distinct from `_SHELTERED_GABLE_ADDED_RESISTANCE_M2K_W`, which is RdSAP 10
Table 4 (p.22) for a room-in-roof sheltered gable — same 0.5, different rule,
deliberately untouched.

Corpus gauge ratcheted UP: within-0.5 78.8% -> 79.8% (+10 certs), SAP MAE
0.626 -> 0.613, PE MAE 2.9 -> 2.8. Failure set and pyright count identical to
main. Portfolio 824 is stairwell-heavy (60 properties at code 3); property
749898 over-bills 4.44 W/K on a 48 m2 flat.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 22:02:31 +00:00
..
abri send AM or PM instead of trying to parse morning or afternoon 2026-07-10 10:45:57 +00:00
addresses Both postcode batchers share one group-preserving packing core 🟪 2026-07-07 13:24:02 +00:00
billing Route an off-peak meter's electric end uses to the day/night carrier 🟩 2026-06-24 17:38:37 +00:00
bulk_document_download Bulk download: match uploaded_files via hubspot_deal_id bridge + add worker observability 2026-07-08 13:58:46 +00:00
data_transformation Let a deterministic guard override the fallback classifier per description 🟩 2026-07-01 09:39:50 +00:00
elmhurst more examples 2026-06-19 09:51:49 +00:00
epc A community override keeps an assessor-observed Group 3 control 🟩 2026-07-03 16:35:08 +00:00
epc_prediction The historic roof description conditions the cohort by form family 🟩 2026-07-06 12:05:56 +00:00
fuel_rates Expose an off-peak meter's standing charge and full day/night blend range 🟩 2026-06-24 17:14:51 +00:00
geospatial feat(geospatial): one-read spatial reference (coords + restrictions) 2026-06-04 17:13:39 +00:00
magicplan Mapper reads 'Individual Trickle Vent' label variant 🟩 2026-06-30 13:44:38 +00:00
modelling Recommend loft insulation for a loft below the building-regs depth 🟩 2026-07-10 16:06:44 +00:00
property feat: thread physical-state-change signal into rebaselining 🟩 2026-06-26 19:15:11 +00:00
property_baseline Persist no Lodged Performance for a predicted Property 🟩 2026-06-30 22:10:57 +00:00
sap10_calculator Bill a sheltered wall to a stairwell at Ru 2.1, not the corridor 0.5 🟩 2026-07-21 22:02:31 +00:00
sap10_ml fix(rdsap): RdSAP 10 Table 13 200/280mm solid-brick wall boundary 2026-07-03 12:25:07 +00:00
tasks A recorded batch failure carries structured details onto the sub_task outputs 🟩 2026-07-07 11:50:10 +00:00
building_geometry.py feat(modelling): floor Recommendation Generator + ground-floor-area geometry 2026-06-03 09:12:29 +00:00
postcode.py Add UK-postcode format validity to the Postcode value object 🟩 2026-06-29 15:24:18 +00:00