docs(skill): bank corpus-1000 findings (cost triangulation, software divergences, assumed-roof rule)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jun-te Kim 2026-07-02 19:12:48 +00:00
parent c380377948
commit a11b10f427

View file

@ -169,6 +169,34 @@ Pattern: `with E.session() as (ctx,page): E.goto(...); E.set_text/set_select(...
lines 17/18). This drove the first campaign mapper fix — see Banked findings.
## Banked findings (fold new ones in here as the corpus grows)
- **Register cost-triangulation (no Elmhurst needed):** the register lodges
`heating_cost_current` / `hot_water_cost_current` / `lighting_cost_current`
at RETAIL prices — absolute £ never match SAP Table-12 spec prices, but for
same-fuel end-uses the RATIOS localize a divergence without a worksheet.
Normalize by lighting: `(lodged_hw/lodged_light) / (our_hw/our_light)` ≈ 1
means our water cascade agrees with the lodging software; »1 flags the
divergent end-use. CAVEAT: the register's "hot water cost" INCLUDES the
SAP (64a) electric-shower electricity — add `instant_shower` cost to our
hw bucket before comparing on any electric-shower cert, else every
shower-outlet-type-2 cert false-positives at ratio ~2 (corpus-1000 band
triage, 36 certs, mean ratio 2.0 → 1.04 after adding (64a)).
- **Lodging-software conventions diverge from Elmhurst on two known axes**
(mark such corpus certs ⚠, don't tune): (a) out-of-range-PSR database
heat pumps — SAP 10.2 N2 footnotes 44/45 mandate the reciprocal extension
toward 100% at 2× the record's largest PSR (Elmhurst does this, golden
case 56); at least one software bills 100% direct electric + standard
schedule instead (corpus 4510053280, lodged 51 vs engine/Elmhurst-method
75). (b) a lodged 0 extract fans — Elmhurst renders 0 as "unknown" →
Table 5 age-band default (worksheet case 46); LIG-21.0 lodgements
(calculation_software_version 10.2.2.0) honour the 0 literally (corpus
quadruplet at Δ 2.56, fans account for 1.42).
- **"insulated (assumed)" roof ≠ observed retrofit:** RdSAP renders
"(assumed)" when insulation PRESENCE is an age-band assumption — Table 18
age default governs, for BOTH the "ND" and "NI" thickness sentinels
(which are lodging-software noise). The §5.11.4 50 mm row (U 0.68) is
only for the bare "insulated" description (observed retrofit, depth
unknown). Fixed in u_roof (corpus 74.2% → 75.5%); unit-pinned in
test_rdsap_uvalues.
- **MAPPER GAP — cylinder insulation thickness dropped (RdSAP-17.0+):** the mapper
carries `cylinder_size` + `cylinder_insulation_type` but NOT
`cylinder_insulation_thickness` → `EpcPropertyData.sap_heating.cylinder_