Model/domain
Khalim Conn-Kowlessar 9ec7987e97 PR review: best-effort read path, true per-member streaming, race-safe 409, local email 🟩
Addresses PR #1498 review:
- A per-file read failure (missing/deleted object, or a bucket the role can't
  reach) is now a SkippedDocument(reason=unreadable), not a whole-run abort;
  an all-unreadable selection still fails (no empty package). Best-effort on
  the read path (ADR-0060).
- Each ZIP member is streamed to a temp file (S3DocumentDownloader.download,
  boto download_file) and added from disk, so a single multi-GB member never
  hits the heap — the 'never held whole in memory' claim is now true.
- The 409 double-submit guard is DB-arbitrated: the sub_task insert is
  conditional on the task having none, so a race creates only one.
- Local env gets a placeholder recipient email so the route is exercisable.
- PackageEntry carries landlord_property_id so a read failure can be reported.
- TODO noting the UploadedFile.s3_upload_timestamp typing fix.
Two new tests: per-file read failure skips-and-reports; address fallback flows
to the folder name.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 11:08:46 +00:00
..
abri Phone-number selection policy lives in the domain layer 🟪 2026-07-06 14:47:37 +00:00
addresses Both postcode batchers share one group-preserving packing core 🟪 2026-07-07 13:24:02 +00:00
billing Route an off-peak meter's electric end uses to the day/night carrier 🟩 2026-06-24 17:38:37 +00:00
bulk_document_download PR review: best-effort read path, true per-member streaming, race-safe 409, local email 🟩 2026-07-08 11:08:46 +00:00
data_transformation Let a deterministic guard override the fallback classifier per description 🟩 2026-07-01 09:39:50 +00:00
elmhurst more examples 2026-06-19 09:51:49 +00:00
epc A community override keeps an assessor-observed Group 3 control 🟩 2026-07-03 16:35:08 +00:00
epc_prediction The historic roof description conditions the cohort by form family 🟩 2026-07-06 12:05:56 +00:00
fuel_rates Expose an off-peak meter's standing charge and full day/night blend range 🟩 2026-06-24 17:14:51 +00:00
geospatial feat(geospatial): one-read spatial reference (coords + restrictions) 2026-06-04 17:13:39 +00:00
magicplan Mapper reads 'Individual Trickle Vent' label variant 🟩 2026-06-30 13:44:38 +00:00
modelling Merge pull request #1456 from Hestia-Homes/fix/electric-boiler-cpsu-companions 2026-07-06 12:07:25 +01:00
property feat: thread physical-state-change signal into rebaselining 🟩 2026-06-26 19:15:11 +00:00
property_baseline Persist no Lodged Performance for a predicted Property 🟩 2026-06-30 22:10:57 +00:00
sap10_calculator Electric underfloor codes resolve their SAP 10.2 Table 12a Grid 1 rows 🟩 2026-07-03 16:00:40 +00:00
sap10_ml fix(rdsap): RdSAP 10 Table 13 200/280mm solid-brick wall boundary 2026-07-03 12:25:07 +00:00
tasks A recorded batch failure carries structured details onto the sub_task outputs 🟩 2026-07-07 11:50:10 +00:00
building_geometry.py feat(modelling): floor Recommendation Generator + ground-floor-area geometry 2026-06-03 09:12:29 +00:00
postcode.py Add UK-postcode format validity to the Postcode value object 🟩 2026-06-29 15:24:18 +00:00