From f50195ac54ffc885c120db9f8474d776a1cbe25e Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Thu, 4 Jun 2026 00:00:23 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20handover=20=E2=80=94=20golden=20SAP=20d?= =?UTF-8?q?rive-to-zero=20priority=20(2130/7536);=200240=20architectural?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a CURRENT PRIORITY section: of 53 pinned golden certs, 3 have non-zero SAP residual. 2130 (+0.85 cont) + 7536 (+0.57 cont) are real multi-part-wall fabric over-predictions (the drive-to-zero targets, possibly one shared cause). 0240 (-1) is architectural — the lodged 73 needs an unpreserved 2013+ pump; document the cause, do NOT re-pin (user decision). Co-Authored-By: Claude Opus 4.8 --- .../docs/HANDOVER_MAPPER_BUGS.md | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md b/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md index 7237497e..b720c2c1 100644 --- a/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md +++ b/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md @@ -6,14 +6,47 @@ state after closing the 0240 investigation and fixing the first of several API-mapper/cascade bugs the audit surfaced. - **Branch:** `feature/per-cert-mapper-validation` -- **HEAD:** `ee484d9f` (S0380.213). Confirm with `git rev-parse HEAD`. +- **HEAD:** `b9bbcecb` (docs after S0380.213). Confirm with `git rev-parse HEAD`. - **Baseline:** `2386 passed, 1 skipped, 0 failed` (AGENT_GUIDE §4 suite command). ALSO run `domain/sap10_ml/tests/` when touching `rdsap_uvalues.py` — 2 PRE-EXISTING stone-formula failures there, see Thread 1. - **Next slice number:** **S0380.214**. -- **Open:** Thread 2 *demand* tail only — 9390 ~7% demand over-count (SAP -2, PE 220 vs - 205) = heat-source-efficiency-default / fabric residual. CO2/PE collision (S0380.212) + - standing charge (S0380.213) FIXED. Threads 1 + 3 **CLOSED**. + +--- + +## ★ CURRENT PRIORITY — drive golden-fixture SAP residuals to ZERO + +`_EXPECTATIONS` in `test_golden_fixtures.py` holds **53 pinned golden certs**. The suite +is GREEN. **Only 3 have a non-zero SAP integer residual**, and they split into two kinds: + +| cert | lodged | cont SAP | resid | nature | +|---|---|---|---|---| +| **2130-1033-4050** | 82 | **83.349** | **+1** | REAL +0.85 over-prediction — multi-part **solid-brick** wall fabric | +| **7536-3827-0600** | 68 | **69.071** | **+1** | REAL +0.57 over-prediction — multi-bp **D/L/F cavity** wall fabric | +| **0240-0200-5706** | 73 | **72.462** | **−1** | **ARCHITECTURAL — do NOT chase, do NOT re-pin** (see below) | + +**The two real targets are 2130 + 7536.** Both are fabric *over*-predictions on **multi-part +wall** geometry (a wall with alternative-construction sub-areas / multiple building parts), +so they may share a single root cause in the §3 per-part wall area/U handling — a fix to +one could close both. Method: walk the §3 heat-transmission cascade per-part vs the lodged +register subsystem ratings (the certs are API-only — no worksheet — so the bar is ±0.5 SAP +vs lodged, but the goal is the integer flip 83→82 / 69→68, i.e. shave ~0.85 / ~0.57 off the +continuous SAP). If a multi-part-wall U or area is over-counted, that is the lever. The user +generates Elmhurst worksheets on request — ASK for a simulated case mirroring 2130's wall +(multi-part solid brick) rather than guess a U-value (the session methodology lesson). + +**0240 (−1) is NOT driveable from the JSON and the user has decided NOT to re-pin it — +document the cause only.** Continuous SAP is 72.462; the true SAP is **72**. The lodged +**73 requires a "2013 or later" circulation pump (41 kWh)**; 0240's open-data API lodges +`central_heating_pump_age=0` = **Unknown → 115 kWh**. The encoding was proven across 13 +API+Summary pairs (`0`=Unknown, `2`=2013+). The export did not preserve the pump age that +produced the lodged 73, so 73 is unreachable without inventing data. Both fabric bugs that +masked it are now fixed (wall S0380.209 + roof S0380.211 → cont 72.462). **Leave the pin at +`actual_sap=73, expected_sap_resid=-1`; the notes already record this.** Driving it to zero +would mean fudging the pump age — don't. + +Latent (lower priority): **9390** (community, −2, **unpinned**/retired) ~7% demand +over-count — see Thread 2. ---