diff --git a/.claude/skills/expand-sap-accuracy-corpus/worklist.md b/.claude/skills/expand-sap-accuracy-corpus/worklist.md index 681a2748..58f3b984 100644 --- a/.claude/skills/expand-sap-accuracy-corpus/worklist.md +++ b/.claude/skills/expand-sap-accuracy-corpus/worklist.md @@ -130,9 +130,16 @@ A second `modelling_e2e` run (filter `task_source='modelling_e2e' AND job_starte **① ✅ FIXED — `KeyError: BuildingPartIdentifier.EXTENSION_1` (14 props, the dominant failure).** A **Landlord Override** targeted `extension_1` but the lodged/predicted EPC had no such part; `overlay_applicator.apply_simulations` indexed `parts_by_id[identifier]` -unguarded → crashed the whole property. Fixed: skip the orphaned part (`.get` + `None` -guard). +regression test `test_override_targeting_a_part_absent_from_the_epc_is_skipped`. -Not a mapper gap — a modelling-overlay bug. The 14 (pid / uprn): +unguarded → crashed the whole property. Root cause is a **numbering mismatch**: the +override's `building_part` is a positional index (0=main, 1=extension 1…, ADR-0004), but +the gov-API EPC can label that slot differently (720142's 2nd part lodged as `other`, no +`extension_1`). Fix (per product decision — *honour the override, don't drop it*): +`_resolve_part` falls back to the EPC's part **at that position** when the semantic label +is absent, so the landlord's correction lands; only a position the EPC models no part at +is skipped (no geometry to model a wholly-absent part). +regression tests +`test_override_for_an_absent_semantic_part_lands_on_the_part_at_that_position` / +`test_override_with_no_part_at_that_position_is_skipped`. Not a mapper gap — a +modelling-overlay bug. The 14 (pid / uprn): 710295/100020458237, 710482/100020450179, 713040/100020404702, 715575/100020397529, 715894/100020604961, 717435/22010468, 720142/100020383544, 720560/100021921443, 721241/100020453651, 724945/100021915421, 725415/100020404036, 726517/100020631307,