Commit graph

7886 commits

Author SHA1 Message Date
Daniel Roth
fcdab30b73 Abri confirmed time before midday books the morning slot 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:31:51 +00:00
Daniel Roth
992ac243ba Abri booking with no confirmed time books an all-day appointment 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:31:33 +00:00
Daniel Roth
da4caea407 Abri booking with no confirmed time books an all-day appointment 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:31:12 +00:00
Daniel Roth
fef69145da Abri log_job treats an unexpectedly shaped relay response as retriable 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:30:29 +00:00
Daniel Roth
a325f65bf0 Abri log_job treats an unexpectedly shaped relay response as retriable 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:30:02 +00:00
Daniel Roth
0df1d866fe Abri log_job treats a malformed relay response as retriable, never as success or rejection 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:29:41 +00:00
Daniel Roth
ff34872c24 Abri log_job treats a malformed relay response as retriable, never as success or rejection 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:29:08 +00:00
Daniel Roth
95bb951b60 Abri log_job raises a retriable transport error when the relay is unreachable 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:28:39 +00:00
Daniel Roth
6b9f5a0140 Abri log_job raises a retriable transport error when the relay is unreachable 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:28:19 +00:00
Daniel Roth
d002a3defc Abri log_job raises a retriable transport error on an HTTP error status 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:27:43 +00:00
Daniel Roth
9fefdf81aa Abri log_job raises a retriable transport error on an HTTP error status 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:27:14 +00:00
Daniel Roth
e0830169ad Abri log_job surfaces an OpenHousing rejection as a typed result with verbatim code and message 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:26:23 +00:00
Daniel Roth
e473ea8a4f Abri log_job surfaces an OpenHousing rejection as a typed result with verbatim code and message 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:25:49 +00:00
Daniel Roth
79ce9dc4b1 Abri log_job sends the spec's recorded LogJob envelope to the relay endpoint 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:24:57 +00:00
Khalim Conn-Kowlessar
77110f2260 Record ADR-0053: companion taxonomy complete, incomplete set raises 🟪
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:23:44 +00:00
Daniel Roth
4803ae40e1 Abri log_job sends the spec's recorded LogJob envelope to the relay endpoint 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:23:42 +00:00
Daniel Roth
dd451a03a8 Abri log_job returns the OpenHousing job number from the relay success response 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:22:56 +00:00
Khalim Conn-Kowlessar
6707ab084f An incomplete heating companion set raises instead of logging 🟩
ADR-0048's intended end-state (#1444 Part C): every mapped archetype now
resolves confident companions, so an incomplete set can only mean a new
archetype landed without choosing them — fail loudly at overlay time.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:22:40 +00:00
Daniel Roth
b22afcde9f Abri log_job returns the OpenHousing job number from the relay success response 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:22:09 +00:00
Khalim Conn-Kowlessar
1925cdd65d An incomplete heating companion set raises instead of logging 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:21:34 +00:00
Khalim Conn-Kowlessar
61f9a63b66 Community-heating overrides drag the conservative Group 3 control (2301) 🟩
The last real archetype on the companion-gap log; the log test now
simulates a future incomplete archetype (warm-air heat pump, Group 5
control deliberately unmapped).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:21:03 +00:00
Khalim Conn-Kowlessar
950ec31d84 Community-heating overrides drag the conservative Group 3 control (2301) 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:19:52 +00:00
Khalim Conn-Kowlessar
6bad3a216a Air-source heat-pump overrides drag the conservative Group 2 control (2201) 🟩
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:19:20 +00:00
Khalim Conn-Kowlessar
6d414c7b51 Air-source heat-pump overrides drag the conservative Group 2 control (2201) 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:18:16 +00:00
Khalim Conn-Kowlessar
7a99c7eccb Electric boiler overrides no longer log an incomplete companion set 🟩
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:08:30 +00:00
Khalim Conn-Kowlessar
077dcf6bac Electric boiler and CPSU overrides drag the conservative Group 1 control (2101) 🟩
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:08:06 +00:00
Khalim Conn-Kowlessar
afa781719d Electric boiler and CPSU overrides drag the conservative Group 1 control (2101) 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:07:22 +00:00
Khalim Conn-Kowlessar
82cb567a1d Electric boiler and CPSU overrides stamp the Table 4a boiler category (2) 🟩
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:06:52 +00:00
Khalim Conn-Kowlessar
6d8139e47e Electric boiler and CPSU overrides stamp the Table 4a boiler category (2) 🟥
Supersedes the "direct-acting electric drags no control/category" pin:
None does not mean unset — it means inherit the replaced system's value
(ADR-0048 bug class), verified suppressing HHRSH on portfolio 796.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:06:06 +00:00
Khalim Conn-Kowlessar
0f091e3ab1 Record ADR-0052: electric boiler/CPSU overrides drag category 2 + conservative Group 1 control 🟪
#1444 Parts A+B for codes 191/192, diagnosed on portfolio 796: 30 of the
first 40 live overrides inherit a replaced system's category (6/4/7) —
suppressing HHRSH or billing direct-acting heat as storage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 14:06:05 +00:00
Daniel Roth
41d46e3910
Merge pull request #1454 from Hestia-Homes/feature/extend-sharepoint-renamer
Extend sharepoint renamer to work for batch subfolders
2026-07-03 14:48:07 +01:00
Daniel Roth
7852928181 delete test data file 2026-07-03 13:38:09 +00:00
Daniel Roth
0c3fbe5853 rename dodgy address 2026-07-03 13:37:58 +00:00
Jun-te Kim
71b970a697 Map API roof_construction code 9 ("another premises above") to None
Same party-ceiling semantics as the already-mapped code 7 ("another
dwelling above" / "same dwelling above") — the unit has no exposed
roof, so there's nothing for the cascade to compute a U-value for.
Confirmed against the live cert (uprn 10013320122): roofs[].description
= "(another premises above)", roof_insulation_location = "ND" (the
codebase's established "no exposed roof" signal).

Surfaced by 1 failed modelling_e2e subtask on portfolio 817
(task_source='modelling_e2e', job_completed > '2026-07-03 12:50:37.555+01:00').
2026-07-03 13:24:10 +00:00
Jun-te Kim
1144b1e7b1 Make nested SapHeating.has_fixed_air_conditioning optional across all RdSAP schemas
Some lodged certs omit the sap_heating.has_fixed_air_conditioning key,
which the generic from_dict loader treats as a required field and
rejects outright. Two prior commits (26651ca71, 8074f4152) fixed the
duplicate top-level field of the same name but left this nested copy
untouched; a third pass (44991bed0) missed it too. The mapper already
reads it defensively (== "true", which is False on None), so this is
a safe default.

Surfaced by 7 failed modelling_e2e subtasks on portfolio 817.
2026-07-03 13:09:17 +00:00
Jun-te Kim
f629b42bd2
Merge pull request #1448 from Hestia-Homes/fix/full-sap-export-capable-mapping
Full-SAP certs carry their lodged PV export-capability flag (WS3 of #1435)
2026-07-03 13:32:53 +01:00
Jun-te Kim
23ebd5e637
Merge pull request #1446 from Hestia-Homes/fix/ashp-size-to-dwelling-heat-loss
Size the ASHP to the dwelling's design heat loss (fix undersized fixed pump scoring below baseline)
2026-07-03 13:32:30 +01:00
Daniel Roth
dc188ca3c5 SharePoint 404s raise ResourceNotFoundError without error-level logging 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:26:33 +00:00
Jun-te Kim
5cae4a0ce5 fix(rdsap): RdSAP 10 Table 13 200/280mm solid-brick wall boundary
_u_brick_thin_wall_age_a_to_e's `<= 280` check put an uninsulated solid-
brick wall of exactly 280mm in the "200 to 280mm -> 1.7" row; RdSAP 10
§5.7 Table 13 (spec PDF p.41) shares 280 as an unlabelled edge between
that row and "280 to 420mm -> 1.4", so the table text alone doesn't say
which row owns it.

Found by building cert 100031768368 (280mm exactly, band C) in Elmhurst
and comparing every worksheet line to the calculator: volume/ACH/floor/
doors matched exactly, but the wall didn't (1.70 vs Elmhurst's 1.40)
despite an identical input crosswalk. Initially reverted a first attempt
at this fix when it appeared to regress an already-pinned cert
(217091901, band A, also nominally 280mm, previously "confirmed" at
U=1.70) — but that cert's build script never actually set a wall
thickness field, so its shared Elmhurst assessment had silently
inherited a stale 260mm from an earlier build. Fixed that build script
and rebuilt with the correct 280mm entry: Elmhurst's worksheet now also
gives U=1.40, matching 100031768368 and confirming the fix rather than
contradicting it.

Both certs move to (near-)exact lodged matches: 100031768368 59.12 ->
61.21 (lodged 61, within 0.5); 217091901 60.82 -> 61.59 (lodged 62,
exact). Corpus gauge 77.8% -> 78.6% within-0.5, MAE 0.636 -> 0.627 (14
corpus certs lodge exactly 280mm solid brick). TDD'd, 46 pins + full
suite green (2310 passed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:25:07 +00:00
Khalim Conn-Kowlessar
4fcd23455b The multi-measure trigger fixture is a cert the sized ASHP alone cannot clear 🟩
Golden cert 0330 now reaches band C on the dwelling-sized ASHP alone
(ADR-0049), dropping its solid_floor_insulation companion; cert 0390
still fires three measures, so the per-measure trigger-attribute
assertions move there (and gain the lighting triggers).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 12:25:03 +00:00
Daniel Roth
4a71c555fa SharePoint 404s raise ResourceNotFoundError without error-level logging 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:22:26 +00:00
KhalimCK
ebca28f704
Merge pull request #1447 from Hestia-Homes/fix/electric-underfloor-pathway-and-noop-walls
Electric underfloor gets its heating pathway; wall insulation gated on derived U (WS2 of #1435)
2026-07-03 13:17:36 +01:00
Daniel Roth
87ac00d499 Correct St Helier Avenue spelling to match SharePoint folder names
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:14:46 +00:00
Khalim Conn-Kowlessar
325c0ea257 Merge remote-tracking branch 'origin/main' into fix/full-sap-export-capable-mapping 2026-07-03 12:11:25 +00:00
Daniel Roth
e533316771 UPRN-prefixed property folders rename to a single-UPRN filename 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:09:32 +00:00
Khalim Conn-Kowlessar
c5b55197b4 Full-SAP certs carry their lodged PV export-capability flag 🟩
`from_sap_schema_17_1` hardcoded is_dwelling_export_capable=False, so
SAP 10.2 Appendix M1 zeroed the PV export credit on every export-capable
full-SAP cert. Cert 0380-3044-6070-2305-5925 (property 741840, PRD #1435
WS3) now reproduces its lodged 92 exactly (was 89); the existing
19.1.0 pin 10096028301 closes its documented -1 residual (84 -> 85 =
lodged). The full-SAP top-level pv_connection is deliberately NOT
carried: its enum disagrees with the RdSAP one the calculator gates on.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 12:09:04 +00:00
Daniel Roth
787f7731b2 UPRN-prefixed property folders rename to a single-UPRN filename 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:09:02 +00:00
Khalim Conn-Kowlessar
6656d8dec2 A full-SAP export-capable PV cert reproduces its lodged SAP 10.2 score 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 12:05:04 +00:00
Daniel Roth
781251eb07 updated address list 2026-07-03 11:59:01 +00:00
Jun-te Kim
5c510e1b15
Merge pull request #1439 from Hestia-Homes/feat/sap-corpus-campaign
test(accuracy): corpus-1000 — 74.2% → 77.7% within-0.5, MAE 0.721 → 0.637 (8 fixes; mapper+calc validated vs Elmhurst)
2026-07-03 12:52:57 +01:00