mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
An uninsulated stone wall of lodged thickness, age bands A-E, is billed by the RdSAP 10 §5.6 Table-12 formula on its measured thickness — sandstone / limestone U = 54.876·W^-0.561, granite / whinstone U = 45.315·W^-0.513. Two bugs suppressed it: 1. CAP: the as-built branch capped the formula result at the Table-6 typical-thickness default (`if u0 >= 1.7: return 1.7`). But the formula only dips below 1.7 past ~488 mm (sandstone) / ~640 mm (granite), so the cap nullified §5.6 for essentially every real-thickness stone wall, under-counting fabric loss and over-rating. A measured 400 mm sandstone age-B wall is 1.90 (Elmhurst-confirmed), not 1.70. 2. NO INSULATION-STATE GATE: the branch fired for any stone wall with a lodged thickness, including ones whose insulation is "Unknown". RdSAP treats an unknown-insulation wall via the Table-6 typical-thickness default, NOT as bare stone of the lodged thickness — so a 50 mm granite wall with Unknown insulation must read 1.70 (worksheet), not the formula's 6.09. Gated on `wall_insulation_type is not None`. Fixes the 2 long-standing stone-U unit tests (granite 120 mm → 3.8871, sandstone 120 mm → 3.7408 — they were correct red tests, not "known fails"). Corpus within-0.5 70.3% -> 71.6% (MAE 0.833 -> 0.822); ratcheted floors to 0.71 / 0.83. Worksheet fixture 000565 (granite 50 mm Unknown → 1.70) still passes via the insulation gate. The two stone groups (sandstone/limestone vs granite/whinstone) keep their distinct §5.6 coefficients. pyright not installed in this codespace (strict gate not run locally). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| applications | ||
| datatypes | ||
| domain | ||
| e2e | ||
| fixtures/epc_prediction | ||
| harness | ||
| infrastructure | ||
| magic_plan | ||
| orchestration | ||
| repositories | ||
| scripts | ||
| utilities | ||
| __init__.py | ||
| conftest.py | ||
| test_lambda_packaging.py | ||