diff --git a/.claude/skills/expand-sap-accuracy-corpus/worklist.md b/.claude/skills/expand-sap-accuracy-corpus/worklist.md index cdd3abbd..681a2748 100644 --- a/.claude/skills/expand-sap-accuracy-corpus/worklist.md +++ b/.claude/skills/expand-sap-accuracy-corpus/worklist.md @@ -120,6 +120,46 @@ malformed cert (e.g. PV-as-list AttributeError) is skipped+reported too, not jus missing-field ValueErrors; transient `EpcApiError` (subclasses `Exception`) still propagates. +regression test. +### ๐Ÿ”ง๐Ÿ” modelling_e2e failure sweep โ€” later run (2026-06-23 14:48 BST, portfolio 796, scenario 1268) +A second `modelling_e2e` run (filter `task_source='modelling_e2e' AND job_started > +'2026-06-23 14:48:01.806 +0100'`): **200 tasks, 30 FAILED (15%) โ†’ 22 unique props** +(8 retried once). The DB only stores bare `property_id` in subtask `outputs` +(`cloud_logs_url` empty) โ€” root causes recovered by replaying each through +`scripts.run_modelling_e2e --scenario-id 1268`. Four root-cause clusters: + +**โ‘  โœ… 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): +710295/100020458237, 710482/100020450179, 713040/100020404702, 715575/100020397529, +715894/100020604961, 717435/22010468, 720142/100020383544, 720560/100021921443, +721241/100020453651, 724945/100021915421, 725415/100020404036, 726517/100020631307, +726592/100021918195, 730800/100021920273. (Observed post-fix eng: 720142 69.2, +710295 63.2โ†’69.8, 720560 61.8โ†’70.4 predicted.) + +**โ‘ก ๐Ÿ” mapper/cascade gap โ€” `UnmappedSapCode: fuel_code 10`** (1 prop, 730259 / uprn +100061905741). EPC-less โ†’ prediction synthesises a cohort EPC carrying `fuel_code 10`, +absent from the calculator's cascade dispatch dict โ†’ FATAL (it's the target prop's own +fuel, not a skippable cohort cert). FOR KHALIM: add fuel-code-10 to the cascade. + +**โ‘ข โ›” not-predictable โ€” empty/unresolved postcode cohort** (3 props): 714585/100020612517 +(`CR0 0DD`), 718580/10013149015 (`BR6 6BS`), 723881/22005280 (`BN41 2TP`). EPC-less AND +cohort empty after filtering โ†’ Prediction Path 3 can't fire. Coverage gap, not a crash bug. + +**โ‘ฃ โš  transient โ€” pass clean on replay** (4 props): 712401/100020394694 (eng 75.3), +718138/100020397707 (eng 63.5โ†’69.2), 720844/100020472603 (eng 71.8), 723648/100020480302 +(eng 70.8). Likely a flaky EPC/Solar API call during the batch โ€” no code defect. + +**E2E candidates to pin (best = the lodged-EPC ones, clean to build in Elmhurst):** +`[ ]` 100020383544 (pid 720142, eng 69.2) ยท `[ ]` 100020458237 (710295) ยท `[ ]` +100020404702 (713040) ยท `[ ]` 100020450179 (710482) ยท `[ ]` 100021915421 (724945) ยท +`[ ]` 100021920273 (730800) ยท `[ ]` 100020394694 (712401, eng 75.3) ยท `[ ]` +100020397707 (718138) ยท `[ ]` 100020472603 (720844, eng 71.8) ยท `[ ]` 100020480302 +(723648, eng 70.8). (Schema not populated on the gov-API objects โ€” confirm when keying +each into Elmhurst.) + ### ๐Ÿ“‹ PLAN โ€” close the 8 modelling_e2e mapping gaps (2026-06-23 run, portfolio 796) The 8 failed prediction targets reduce to **5 distinct mapper-gap classes** (the fix targets). Per class: fix the mapper GENERICALLY, guard with BOTH the RdSAP-21.0.1