Commit graph

7718 commits

Author SHA1 Message Date
Khalim Conn-Kowlessar
92370504da Unknown is a selectable property-type bucket 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:41:19 +00:00
Khalim Conn-Kowlessar
4d0af87d5a Unknown is a selectable property-type bucket 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:40:46 +00:00
Khalim Conn-Kowlessar
ec7ba1f0d3 A property without override or EPC falls back to the legacy column 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:40:24 +00:00
Khalim Conn-Kowlessar
faea3209b2 A property without override or EPC falls back to the legacy column 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:39:54 +00:00
Khalim Conn-Kowlessar
bf0e9343b2 An EPC without property_type falls back to its dwelling_type 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:39:32 +00:00
Khalim Conn-Kowlessar
9b146dfaf4 An EPC without property_type falls back to its dwelling_type 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:39:10 +00:00
Khalim Conn-Kowlessar
dfe42a6374 Numeric RdSAP property-type codes map to their labels 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:38:47 +00:00
Khalim Conn-Kowlessar
302861309c Numeric RdSAP property-type codes map to their labels 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:38:18 +00:00
Khalim Conn-Kowlessar
e1dc0dc2f5 EPC-derived property type prefers lodged over predicted 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:37:45 +00:00
Khalim Conn-Kowlessar
45dab78f4e EPC-derived property type prefers lodged over predicted 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:37:18 +00:00
Khalim Conn-Kowlessar
4967ddfb3e Property-type override beats the lodged EPC 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:36:47 +00:00
Khalim Conn-Kowlessar
f40abcedeb Property-type override beats the lodged EPC 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:36:13 +00:00
Khalim Conn-Kowlessar
10b9015bce Postcode filter matches the canonical postcode exactly 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:34:07 +00:00
Khalim Conn-Kowlessar
b865e89195 Postcode filter matches the canonical postcode exactly 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:33:29 +00:00
Khalim Conn-Kowlessar
3836729f92 No filters resolves the whole portfolio minus deletions 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:32:53 +00:00
Khalim Conn-Kowlessar
84fb9884d6 No filters resolves the whole portfolio minus deletions 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:32:10 +00:00
Khalim Conn-Kowlessar
b008bcc6ba The tasks mirror declares the FE-owned inputs column
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:32:09 +00:00
Khalim Conn-Kowlessar
561b8b078b Test names state the surviving failure-recovery behaviors 🟪
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:12:12 +00:00
Khalim Conn-Kowlessar
9cbb8a95b5 Completing a re-run failed batch un-fails the task 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:11:52 +00:00
Khalim Conn-Kowlessar
d0439dd11e Completing a re-run failed batch un-fails the task 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:10:43 +00:00
Khalim Conn-Kowlessar
30e3054146 A failed batch sub_task restarts for a re-run 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:08:47 +00:00
Khalim Conn-Kowlessar
3d643965b5 A failed batch sub_task restarts for a re-run 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:05:34 +00:00
Khalim Conn-Kowlessar
5b60717133 A run with finished and queued batches rolls up in progress, not waiting 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:04:50 +00:00
Khalim Conn-Kowlessar
1c7b71bcce A run with finished and queued batches rolls up in progress, not waiting 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:03:28 +00:00
Khalim Conn-Kowlessar
71a86f87fc ADR-0055 + ADR-0056: Modelling Run distributor decisions and glossary
The distributor pre-creates batch sub_tasks under the app-owned task and
sub_task status is a record, not retry fuel; filter resolution is a shared
contract with the app's preview. Scenario immutability replaces the
Scenario Snapshot fiction; Modelling Run, Distributor and First Run terms
pinned in CONTEXT.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:03:28 +00:00
Jun-te Kim
9d4d764f48
Merge pull request #1476 from Hestia-Homes/fix/fastapi-landlord-overrides-sqs-wiring
fix(terraform): wire landlord-overrides SQS queue into FastAPI Lambda
2026-07-06 16:38:53 +01:00
Jun-te Kim
e0380123b6 fix(terraform): wire landlord-overrides SQS queue into FastAPI Lambda
The /v1/bulk-uploads/trigger-landlord-overrides endpoint reads
settings.LANDLORD_OVERRIDES_SQS_URL, but the fast-api Lambda's terraform
never set it, so it fell back to the config default "changeme" and
SendMessage failed with AWS.SimpleQueueService.NonExistentQueue.

The landlord-overrides queue (and its finaliser sibling) were added to the
router/config but only the finaliser was wired here. This adds the missing:
  - terraform_remote_state data source for the queue's state
  - LANDLORD_OVERRIDES_SQS_URL env var on the FastAPI Lambda
  - queue ARN in the fastapi-sqs-send IAM policy (else AccessDenied)

Mirrors the existing postcode-splitter / combiner / finaliser wiring.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 15:36:58 +00:00
Daniel Roth
6335796d6e
Merge pull request #1471 from Hestia-Homes/feature/abri-api-integration
Abri OpenHousing DomnaRelay — GetTenantData vertical (tenancy signatories to HubSpot)
2026-07-06 16:15:36 +01:00
Daniel Roth
06354a166e Phone-number selection policy lives in the domain layer 🟪
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:47:37 +00:00
Daniel Roth
859a7ec49a change fake contact details 2026-07-06 14:34:39 +00:00
Daniel Roth
de2a6d1d79 Add manual smoke script for the Abri tenant-contact HubSpot writes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:19:05 +00:00
Daniel Roth
76896f9a8e rename tenant data sync to abri tenant data sync 2026-07-06 14:05:42 +00:00
Daniel Roth
578de8845a Tenant-data fixtures carry fictional names and Ofcom-reserved phone numbers 🟪
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:02:38 +00:00
Daniel Roth
8fd808ffd9 HubSpot deal-contacts transport lives under infrastructure like the other API clients 🟪
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:01:47 +00:00
Jun-te Kim
1d3e8c2646
Merge pull request #1469 from Hestia-Homes/fix/fastapi-lambda-zip-size
Fix fastapi lambda exceeding AWS's 250MB unzipped size limit
2026-07-06 14:54:49 +01:00
Jun-te Kim
adb1bf4b56 Log GITHUB_SHA on /health; move zip-size gate to its own PR workflow
/health already returned GITHUB_SHA in its response but never logged
it, and the fastapi lambda's Terraform environment never actually set
GITHUB_SHA — so every health check response contained "unknown" in
production. Wire var.github_sha through the fastapi lambda module
(default "unknown" for local/other invocations) via a new
TF_VAR_github_sha env var set from `github.sha` in
_deploy_lambda.yml's Terraform Plan step, and log it on every /health
call so a request in CloudWatch can be tied back to the deploy that
served it.

Also fix the zip-size gate added for PR #1469: putting it in
tests/test_lambda_zip_size.py (run via the Docker-based ddd_tests.yml
suite) broke CI, because Dockerfile.test's build context excludes
deployment/* (.dockerignore), so check_lambda_zip_size.py couldn't
find variables.tf to read zip_excludes from inside that container.
Move the check to its own lightweight workflow,
check_lambda_zip_size.yml, triggered on pull_request into main — a
plain checkout (no Docker build) has the full repo, so the check
works, runs fast, and still gates merges to main before a regression
can roll into the dev deploy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 13:43:36 +00:00
Daniel Roth
b96aceaf7b HubSpot calls share one retry policy behind a single guarded entry point 🟪
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:42:58 +00:00
Daniel Roth
8d9fb0ade4 Transient HubSpot failures are retried under the shared rate-limit policy 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:38:20 +00:00
Daniel Roth
8d684c57c7 Transient HubSpot failures are retried under the shared rate-limit policy 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:36:43 +00:00
Daniel Roth
81d25caead A failed HubSpot write stops the sync and reports the orphaned contacts 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:35:47 +00:00
Daniel Roth
065217f8af A failed HubSpot write stops the sync and reports the orphaned contacts 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:35:20 +00:00
Daniel Roth
e3894b0309 HubSpot failures surface without the response body that echoes tenant PII 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:34:33 +00:00
Daniel Roth
2e19085875 HubSpot failures surface without the response body that echoes tenant PII 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:33:42 +00:00
Daniel Roth
3dd2dfe92c Empty tenancies, Abri rejections and ambiguous responses resolve like the other relay operations 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:32:13 +00:00
Daniel Roth
203ffac01f Empty tenancies, Abri rejections and ambiguous responses resolve like the other relay operations 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:31:55 +00:00
Daniel Roth
64d397e6b4 Tenant vulnerabilities are recorded on the tenant's own contact 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:31:00 +00:00
Daniel Roth
d4bdbf2e2f Tenant vulnerabilities are recorded on the tenant's own contact 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:30:22 +00:00
Daniel Roth
52f2286ee9 Runner-up number fills the contact's secondary phone number 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:29:38 +00:00
Daniel Roth
10636c1752 Runner-up number fills the contact's secondary phone number 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:28:56 +00:00
Jun-te Kim
e816972c45 Move the fastapi Lambda zip-size gate into the PR test suite
deploy_terraform.yml only triggers on push to dev/prod — by the time
it runs, the change has already merged to main and rolled into dev.
That's exactly how the size regression sat undetected for weeks: it
only ever surfaced deep inside terraform apply on dev.

Drop the fast_api_lambda_zip_size_check job from deploy_terraform.yml
and instead add tests/test_lambda_zip_size.py, which runs
backend/app/requirements/check_lambda_zip_size.py as part of the
existing pytest tests/ suite. ddd_tests.yml already runs that suite
on `pull_request: branches: ["**"]`, so this now fails the PR before
anything merges to main, rather than failing the dev deploy after.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 13:28:24 +00:00