Khalim Conn-Kowlessar
879581bb32
Stream a local file to S3 with managed multipart upload 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:50:34 +00:00
Khalim Conn-Kowlessar
79c8890d07
Stream a local file to S3 with managed multipart upload 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:50:10 +00:00
Khalim Conn-Kowlessar
79fa46d97c
Read document bytes from an arbitrary source bucket 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:42:37 +00:00
Khalim Conn-Kowlessar
0a09b56425
Read document bytes from an arbitrary source bucket 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:42:05 +00:00
Khalim Conn-Kowlessar
74732c6e5a
Send a document-download email to the requesting user over SES SMTP 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:27:09 +00:00
Khalim Conn-Kowlessar
7466b78e54
Send a document-download email to the requesting user over SES SMTP 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:25:56 +00:00
Khalim Conn-Kowlessar
da3e0cd4b4
Generate a presigned GET URL for an S3 object 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:18:54 +00:00
Khalim Conn-Kowlessar
ba13300ee1
Generate a presigned GET URL for an S3 object 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:18:10 +00:00
KhalimCK
9ff4de0563
Merge pull request #1481 from Hestia-Homes/feature/modelling-trigger-run
...
Modelling Run Distributor: POST /v1/modelling/trigger-run
2026-07-07 14:36:45 +01:00
Khalim Conn-Kowlessar
07190fc332
Legacy property columns no longer resolve type or built form 🟩
...
ADR-0056 amended: override and EPC own type/form facts; a property with
neither is Unknown whatever the legacy columns say. Mirror columns removed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 12:52:11 +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
Jun-te Kim
bc1cca77db
Merge pull request #1356 from Hestia-Homes/feature/historic-epc-repository
...
Historic EPC repository: DDD port + resolver for address→UPRN
2026-07-07 10:56:33 +01:00
Daniel Roth
ed08a6adfe
HubSpot clients share one scrubbed-retry call policy 🟪
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 16:02:22 +00:00
Daniel Roth
2ea9257036
A rate-limited HubSpot write is retried before succeeding 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:59:53 +00:00
Daniel Roth
049475ec96
A failed HubSpot write raises a scrubbed error carrying the orphaned job_no 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:58:36 +00:00
Daniel Roth
96f86aacac
A logged job's job_no is written to HubSpot and then the deal database 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:54:05 +00:00
Daniel Roth
98674ae895
Log an OpenHousing job from a confirmed survey booking's deal fields 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:50:07 +00: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
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
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
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
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
Daniel Roth
1752a6cf10
Contact carries the best-priority mobile and landline Abri lists 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:27:59 +00:00
Daniel Roth
76d0b4bac9
Abri tenancy signatory becomes an associated HubSpot deal contact 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:24:47 +00:00
Daniel Roth
78fcba45e5
Abri tenancy signatory becomes an associated HubSpot deal contact 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 13:22:52 +00:00
Khalim Conn-Kowlessar
246834fac0
Map shard rows to HistoricEpc field-by-field so every column is pyright-checked 🟩
...
The row→domain mapper now names all 93 constructor arguments explicitly
instead of splatting a lowercased dict, takes a plain Mapping (a
DataFrame.to_dict("records") row) instead of a pandas Series, and ignores
columns the domain type doesn't know. A missing/renamed CSV column fails
loudly as a KeyError at the row. Both iterrows() call sites move to
to_dict("records") — pandas-stubs types iterrows' Series unparameterized,
which strict mode rejects. pandas-stubs + boto3-stubs[s3] make the stack
check clean: pyright strict is now 0 errors across the PR's files.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:58:09 +00:00
Khalim Conn-Kowlessar
ab245de68d
Merge remote-tracking branch 'origin/main' into feature/historic-epc-repository
2026-07-04 11:19:59 +00:00
Daniel Roth
b5f7cc3548
Abri job logging and appointment amendment serialise bookings through one date rule 🟪
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:24:48 +00:00
Daniel Roth
096e4ae1f7
Abri amend_job treats an unconfirmed amendment response as retriable 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:23:10 +00:00
Daniel Roth
e363a1105a
Abri amend_job omits the surveyor resource so amendments cannot clobber Abri-side reassignments 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:21:06 +00:00
Daniel Roth
7bdba469fb
Abri amend_job serialises the spec's amendoptiappt envelope with the surveyor resource last 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:19:16 +00:00
Daniel Roth
c542a57ae5
Abri amend_job amends an OpenHousing appointment and returns the echoed booking 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:17:41 +00:00
Daniel Roth
2cfed0c33d
Abri amend_job amends an OpenHousing appointment and returns the echoed booking 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:15:44 +00:00
Daniel Roth
a86607e420
Abri relay exchange reads as serialise, post, parse, then dispatch on the failure document 🟪
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:12:44 +00:00
Daniel Roth
32b56050b0
Abri relay requests share one envelope, transport and rejection path across request types 🟪
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:37:40 +00:00
Daniel Roth
c23c74be6b
Abri log_job treats a logged-job response missing its job number as retriable 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:36:55 +00:00
Daniel Roth
62ad53df5a
Abri relay credentials and defaults hydrate from environment configuration 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:34:53 +00:00
Daniel Roth
fef69145da
Abri log_job treats an unexpectedly shaped relay response as retriable 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:30:29 +00:00
Daniel Roth
0df1d866fe
Abri log_job treats a malformed relay response as retriable, never as success or rejection 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:29:41 +00:00
Daniel Roth
95bb951b60
Abri log_job raises a retriable transport error when the relay is unreachable 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:28:39 +00:00
Daniel Roth
d002a3defc
Abri log_job raises a retriable transport error on an HTTP error status 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:27:43 +00:00
Daniel Roth
9fefdf81aa
Abri log_job raises a retriable transport error on an HTTP error status 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:27:14 +00:00
Daniel Roth
e0830169ad
Abri log_job surfaces an OpenHousing rejection as a typed result with verbatim code and message 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:26:23 +00:00
Daniel Roth
79ce9dc4b1
Abri log_job sends the spec's recorded LogJob envelope to the relay endpoint 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:24:57 +00:00
Daniel Roth
dd451a03a8
Abri log_job returns the OpenHousing job number from the relay success response 🟩
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:22:56 +00:00
Daniel Roth
b22afcde9f
Abri log_job returns the OpenHousing job number from the relay success response 🟥
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 14:22:09 +00:00
Daniel Roth
3b4415e773
Rename DB column energy_mains_gas → energy_gas_connection_available
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 11:22:29 +00:00
Daniel Roth
a174301136
rename mains_gas to gas_connection_available
2026-07-01 10:50:58 +00:00
Khalim Conn-Kowlessar
b9bec18f44
Round-trip a null Lodged Performance through persistence 🟩
...
The four lodged_* columns are nullable as a unit; from_domain writes them all
NULL when a predicted Property has no Lodged Performance, and to_domain
reconstructs lodged=None (lodged_sap_score is the read discriminator, mirroring
the bill block). The production lodged_* columns are FE-owned (Drizzle) and need
a companion ALTER ... DROP NOT NULL migration before the backend writes NULL.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:13:04 +00:00