Model/domain/property_baseline
Khalim Conn-Kowlessar 741993270e feat(baseline): run Sap10Calculator in shadow on Property Baseline (ADR-0013)
Wire Sap10Calculator into PropertyBaselineOrchestrator as a non-load-bearing
shadow runner. For each property it scores the Effective EPC beside the
load-bearing Lodged/Effective write, catches any strict-raise -> log.error
(never aborts the batch), and on success log.warning's divergence from Lodged:
SAP |continuous - lodged| > 0.5; PEUI/CO2 > 1% relative (CO2 after kg->tonnes).
Every line is tagged with sap_version so SAP-10.2 signal separates from
older-spec drift (ADR-0010 Validation Cohort).

Per ADR-0013, Calculated SAP10 Performance is not a persisted third value-set:
effective = calculated in every baselining scenario, so the calculator IS the
mechanism that produces Effective Performance (the Rebaseliner). It runs in
shadow only while being hardened; when overrides/estimation land it is promoted
to drive Effective and the failure posture flips to abort (ADR-0012, calculator
now load-bearing). No table change.

- ADR-0013 + CONTEXT (Calculated SAP10 Performance / Effective Performance /
  Rebaselining) record the decision.
- CalculatorShadow port + LoggingCalculatorShadow + Calculator protocol.
- FakeCalculatorShadow for orchestrator unit tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 15:40:26 +00:00
..
__init__.py refactor(property-baseline): rename baseline → property_baseline aggregate (PR #1139 review) 2026-06-01 14:54:59 +00:00
calculator_shadow.py feat(baseline): run Sap10Calculator in shadow on Property Baseline (ADR-0013) 2026-06-04 15:40:26 +00:00
performance.py refactor(property-baseline): rename baseline → property_baseline aggregate (PR #1139 review) 2026-06-01 14:54:59 +00:00
property_baseline_performance.py refactor(property-baseline): rename baseline → property_baseline aggregate (PR #1139 review) 2026-06-01 14:54:59 +00:00
rebaseliner.py refactor(property-baseline): rename baseline → property_baseline aggregate (PR #1139 review) 2026-06-01 14:54:59 +00:00