Update worklist: override now lands positionally, not skipped

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jun-te Kim 2026-06-23 17:09:47 +00:00
parent 9956df07ff
commit e8c3406901

View file

@ -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,