Slice 83: 1:1 windows expansion in cohort 000490 (3 → 6 entries)

Closes the final `sap_windows: LEN 6 vs 3` divergence by replacing
the cohort 000490 hand-built's 3-window collapsed encoding with 6
SapWindow entries mirroring the Summary §11 1:1. Single glazing-type
group (PVC double / g⊥=0.76 / U=2.8); per-bp totals preserved:

  Main NW (orient=8): 2.70 m² split 1.26 + 1.44 (2 rows)
  Main NE (orient=2): 0.81 m² (1 row, unchanged)
  Ext1 SE (orient=4): 5.52 m² split 1.92 + 2.16 + 1.44 (3 rows)

Cascade output unchanged: all 11 `_FIXTURE_PINS["000490"]` SapResult
pins remain GREEN at 1e-4 against worksheet `SAP value 57.3979`.

**Cohort 000490 is now fully Layer-2 GREEN** — 4 of 6 cohort certs
(000474, 000477, 000480, 000487, 000490) now zero-diff Layer-2;
000516 is the last cohort cert before returning to cert 001479.

Pyright net-zero.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-05-25 18:11:12 +00:00
parent 3d315a0d90
commit 9fa98428d0

View file

@ -359,12 +359,30 @@ LINE_73_M_TOTAL_INTERNAL_GAINS_W: tuple[float, ...] = (
# ============================================================================
# §6 Solar gains — cert-derived inputs + expected outputs
# ============================================================================
# 3 wall windows: NE 0.81, SE 5.52, NW 2.70 — all DG pre-2002 / PVC / 12 mm
# with manufacturer g⊥=0.76. No roof windows, no rooflights.
# 6 wall windows mirroring the Summary §11 1:1, matching the Elmhurst
# mapper's per-row extraction. All DG pre-2002 / PVC / 12 mm with
# manufacturer g⊥=0.76 / U=2.8 — single glazing-type group, per-bp
# totals preserved (cascade-equivalent):
# Main NW (orient=8): 2.70 m² split 1.26 + 1.44 (2 rows)
# Main NE (orient=2): 0.81 m² (1 row)
# Ext1 SE (orient=4): 5.52 m² split 1.92 + 2.16 + 1.44 (3 rows)
# No roof windows, no rooflights.
SECTION_6_VERTICAL_WINDOWS: tuple[SapWindow, ...] = (
make_window(orientation=2, width=0.81, height=1.0, solar_transmittance=0.76),
make_window(orientation=4, width=5.52, height=1.0, solar_transmittance=0.76),
make_window(orientation=8, width=2.70, height=1.0, solar_transmittance=0.76),
# Windows on Main — NW (orient=8)
make_window(orientation=8, width=1.26, height=1.0, solar_transmittance=0.76,
u_value=2.8, window_location="Main"),
make_window(orientation=8, width=1.44, height=1.0, solar_transmittance=0.76,
u_value=2.8, window_location="Main"),
# Window on Main — NE (orient=2)
make_window(orientation=2, width=0.81, height=1.0, solar_transmittance=0.76,
u_value=2.8, window_location="Main"),
# Windows on Ext1 — SE (orient=4)
make_window(orientation=4, width=1.92, height=1.0, solar_transmittance=0.76,
u_value=2.8, window_location="1st Extension"),
make_window(orientation=4, width=2.16, height=1.0, solar_transmittance=0.76,
u_value=2.8, window_location="1st Extension"),
make_window(orientation=4, width=1.44, height=1.0, solar_transmittance=0.76,
u_value=2.8, window_location="1st Extension"),
)
SECTION_6_ROOF_WINDOWS: tuple[RoofWindowInput, ...] = ()
SECTION_6_ROOFLIGHTS: tuple[RooflightInput, ...] = ()