mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
Record ADR-0053: companion taxonomy complete, incomplete set raises 🟪
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6707ab084f
commit
77110f2260
1 changed files with 89 additions and 0 deletions
|
|
@ -0,0 +1,89 @@
|
|||
# The heating-override companion taxonomy is complete; an incomplete set now raises
|
||||
|
||||
## Status
|
||||
|
||||
accepted
|
||||
|
||||
## Context
|
||||
|
||||
[ADR-0048](0048-heating-override-forces-category-and-control-defers-fuel-and-meter.md)
|
||||
set the invariant — a system-replacing heating override emits a complete
|
||||
category + control companion set, never inheriting the replaced system's — and
|
||||
intended, once the taxonomy was covered, to "flip the log to a raise, so the
|
||||
coherence invariant is enforced" (#1444 Part C).
|
||||
[ADR-0050](0050-electric-underfloor-override-drags-category-8-and-conservative-group-7-control.md)
|
||||
(underfloor) and
|
||||
[ADR-0052](0052-electric-boiler-and-cpsu-overrides-drag-category-2-and-conservative-group-1-control.md)
|
||||
(electric boilers) filled two families. Two archetype families remained on the
|
||||
gap-log, and with them Part C stayed blocked:
|
||||
|
||||
- **"Air source heat pump" (SAP 211)** — category 4 already forced, control
|
||||
`None` (Table 4e Group 2 unmapped). No live overrides today (census across
|
||||
all portfolios: 0), so this is taxonomy completion, not a live defect.
|
||||
- **"Community heating, boilers" / "…, CHP and boilers" (301/302)** — category
|
||||
6 already forced, control `None` (Group 3 unmapped). **2,220 live
|
||||
overrides** — the largest population on the log. The inherited control is
|
||||
doubly load-bearing for heat networks: it feeds the Table 4e temperature
|
||||
adjustment *and* the SAP 10.2 Table 4c(3) charging factors (worksheet
|
||||
(305)/(305a)).
|
||||
|
||||
## Decision
|
||||
|
||||
1. **Wet heat pumps (Table 4a 211-224) drag control 2201** — Table 4e Group 2
|
||||
"no time or thermostatic control of room temperature", **+0.3 °C**, the
|
||||
largest Group 2 adjustment: the conservative in-group default (the heat-pump
|
||||
mirror of storage 2401 / room-heater 2601 / underfloor 2701 / boiler 2101).
|
||||
Warm-air heat pumps (521-527) are deliberately left unmapped — no archetype
|
||||
reaches them, and the raise below is the guard that a future warm-air
|
||||
archetype cannot land without choosing its Group 5 control.
|
||||
|
||||
This is the *existing-system* fill policy: the ASHP **Measure** overlay
|
||||
installs 2210 (time-and-temperature zone control) because a measure designs
|
||||
a modern end-state (ADR-0024); a landlord override describes an existing
|
||||
pump whose control was never observed, so the conservative default applies.
|
||||
|
||||
2. **Community heating (301/302) drags control 2301** — Table 4e Group 3
|
||||
"flat rate charging, no thermostatic control of room temperature". It is
|
||||
the never-over-crediting default on **both** axes the control drives: the
|
||||
largest Group 3 temperature adjustment (**+0.3 °C**, tied with 2302) and
|
||||
the worst Table 4c(3) charging factors (space **1.10**, DHW **1.05** — an
|
||||
unobserved charging arrangement is never assumed to be usage-linked).
|
||||
As with every forced companion (ADR-0035/0048 pattern), this overwrites a
|
||||
better control lodged for the replaced system: the override asserts the
|
||||
system afresh and synthesis owns coherence.
|
||||
|
||||
3. **An incomplete companion set now raises** (`ValueError`) instead of
|
||||
logging. Every archetype in `_MAIN_HEATING_CODES` resolves a complete
|
||||
category + control (gas boilers via their dedicated overlay; all others via
|
||||
`_category_for`/`_control_for`), so the log-and-continue mitigation has no
|
||||
remaining population — and a silent log was only ever a stop-gap
|
||||
(ADR-0048: "the intended end-state is to fill each archetype's
|
||||
category/control … and then flip the log to a raise"). A future archetype
|
||||
added without companions now fails loudly at overlay time rather than
|
||||
shipping a silently-incoherent cert.
|
||||
|
||||
## Consequences
|
||||
|
||||
- The companion-gap error log is gone; #1444 closes.
|
||||
- Community overrides re-model against the conservative 2301: dwellings whose
|
||||
replaced-system control was inherited converge on one defensible assumption.
|
||||
Live sample (portfolio 796, 12 properties): baseline shifts of **0 to −3
|
||||
SAP** (typically −1 to −2). The inherited controls were unobserved
|
||||
usage-linked credits (2306/2307/2309) or outright group-incoherent — two
|
||||
dwellings carried a Group-1 *boiler* zone control (2110) on a heat network —
|
||||
so the shift removes credit that was never evidenced.
|
||||
- Adding a heating archetype now *requires* choosing its category + control
|
||||
(or extending the family sets) — the raise turns the ADR-0048 checklist into
|
||||
an enforced contract.
|
||||
|
||||
### Alternatives rejected
|
||||
|
||||
- **A zero-adjustment / usage-linked community default (2307+).** Rejected:
|
||||
credits a charging arrangement and thermostat the landlord never reported;
|
||||
the conservative default is the established pattern.
|
||||
- **Keep log-and-continue indefinitely.** Rejected: the log was the interim
|
||||
mitigation while the taxonomy was incomplete; leaving it means the next
|
||||
archetype ships the ADR-0048 inheritance bug silently again.
|
||||
- **Raise on warm-air heat-pump codes' missing control now.** Not applicable —
|
||||
no archetype maps to 521-527; the raise fires exactly when one is added
|
||||
without its Group 5 control, which is the point.
|
||||
Loading…
Add table
Reference in a new issue