Model/packages
Khalim Conn-Kowlessar 380115e244 §5 slice 13: rooflight Z_L=1.0 closes 000516 to ≤5e-3 W on every line
Table 6d note 2: roof windows / rooflights use Z_L = 1.0 regardless of
the overshading bucket applied to the rest of the dwelling's glazing.

Before this slice the orchestrator approximated rooflights as average
overshading (Z_L=0.83), driving 000516's (67) lighting 0.18 W (0.54%)
high. All wall windows in our 6-fixture corpus were correctly handled;
000516 is the only fixture with a lodged rooflight (the 1.18 m² NE
"window" showing Z=1.0 in the worksheet §6).

  fixture | (67) max |err| before | after
  --------+----------------------+--------
  000516  | 0.1823 W (0.54%)     | <0.005 W (<0.02%)
  others  | <0.0003 W            | <0.0003 W

Changes:
  - internal_gains_from_cert gains rooflight_total_area_m2 (default 0).
    Rooflights summed at g_L=0.80 (Table 6b DG) × FF=0.7 (Table 6c PVC)
    × Z_L=1.0 alongside wall windows (which still use the dwelling's
    overshading-derived Z_L).
  - SECTION_5_ROOFLIGHT_AREAS_M2 added to every fixture (empty tuple
    except 000516 which carries (1.18,)).
  - Tolerances on the §5 parametrised e2e test tightened from 2e-1 W
    on (67) and 3e-1 W on (73) to 5e-3 W on both — every fixture now
    closes to display rounding.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 19:25:53 +00:00
..
domain §5 slice 13: rooflight Z_L=1.0 closes 000516 to ≤5e-3 W on every line 2026-05-20 19:25:53 +00:00
fetchers added potential file scaffolding: 2026-05-15 10:56:53 +00:00
repos added potential file scaffolding: 2026-05-15 10:56:53 +00:00
utils added potential file scaffolding: 2026-05-15 10:56:53 +00:00
README.md added potential file scaffolding: 2026-05-15 10:56:53 +00:00

Shared packages

Workspace packages consumed by services/*. Each package is its own Python distribution with its own pyproject.toml; services import via the workspace dependency mechanism ({ workspace = true }).

Package Purpose
domain/ Shared domain types — Property, BaselinePerformance, Plan, Scenario, EpcPropertyData, etc. No persistence, no IO, no business logic.
repos/ Persistence layer — one repo per aggregate. Owns the SQL. Depends on domain.
fetchers/ External API clients (gov EPC, Ofgem, Google Solar, etc.). Depend on domain for response shapes.
utils/ Cross-cutting infra — logging, S3, CloudWatch URL builders, SQS task helpers.

Adding a new shared package

Only when a real second consumer materialises. Don't pre-shatter (repos-epc, repos-property, ...) — split when a deployment needs to drop a dep, not before.

See ../ara_backend_design.md §11 for the broader monorepo layout and ../CONTEXT.md for the domain glossary that names the types living in domain/.