← all branches

fix/dup-contracts

needs attentionviewing older commit
5d0ec62 · incrementalPR #298reviewed 2026-07-13 20:31 UTC2H · 4M · 3L · 2I
The branch
Purpose
Fix critical contract duplication bug — CFE persist pipeline used bills[0] (arbitrary position) as classification evidence, causing stale backfill batches to wrongly terminate active contracts (18 prod contracts deposed June 2026).
Goal
Newest-evidence guard: evidence always from newest bill with tariffCode; stale evidence creates terminated history row instead of deposing active contract; 23505 recovery adopts winning row without double-emitting outbox events.
Sub-goals
  • SG-1: selectEvidenceBill extracted to bill.decisions.ts
  • SG-2: insertContractRaceSafe returns adopted flag
  • SG-3: evidencePeriodEnd required at shell boundary
  • SG-4: serviceName added to utility.contract.created payloads (most branches)
  • SG-5: Historical contract dual-links to active contract site
  • SG-6: assertNever tail + barrel export
The changes (whole branch)
What
Incremental commit (5d0ec624) addressing 13 of 21 prior loop-review findings. Adds adopted flag, serviceName to outbox, site dual-linking, tightens type signatures.
Why
Addresses loop-review findings from prior commit. Rejected findings (org-scoping, TOCTOU, nil-UUID) documented with rationale.
Areas
domains/utility/src/bill+41313domains/utility/src/utility-contract+21970
Blast
9 files, +632/-83. No schema migrations, no API contract changes.
outbox-schema-drift missing-test-race-recovery pre-existing-bug-wizard-enrich
CI· Not accessible via personal access tokenCodeRabbit· No .coderabbit.yaml in repo

Findings · 11

correctness1

low

createdHistorical site-linking uses activeSites[0] — misses additional same-org sites

domains/utility/src/bill/bill.shells.ts:860

security2

medium

Race-adopted contract re-points subscriptions without org re-verification

domains/utility/src/utility-contract/utility-contract.shells.ts:77

info

findNewestXmlPeriodEnd trusts pipeline-ingested MAX(period_end)

domains/utility/src/utility-contract/utility-contract.shells.ts:671

conventions3

high

EnrichWizardContract outbox missing required serviceName and status

domains/utility/src/utility-contract/utility-contract.shells.ts:730

Emits utility.contract.created without serviceName/status — both required by ContractCreatedEventSchema. Commit claims to have fixed all branches but missed EnrichWizardContract. Fix: add serviceName: enriched.serviceName, status: enriched.status to eventData.

medium

Extra outbox fields not in ContractCreatedEventSchema

domains/utility/src/utility-contract/utility-contract.shells.ts:773

low

Active-contract SUC insert uses raw db outside wrapping transaction

domains/utility/src/bill/bill.shells.ts:904

tests3

high

23505 SAVEPOINT race recovery (adopted=true) has zero test coverage

domains/utility/src/utility-contract/utility-contract.shells.ts:760

adopted=true path exists in 3 branches but no test exercises it. Idempotency test hits UseExistingContract (pre-insertContractRaceSafe), not the SAVEPOINT path. Add a concurrent-insert simulation asserting exactly one outbox event.

medium

selectEvidenceBill: same-periodEnd tie-break not in test matrix

domains/utility/src/bill/__tests__/bill.decisions.test.ts:1664

medium

serviceName outbox assertion only covers CreateHistoricalContract

domains/utility/src/utility-contract/__tests__/ensure-contract-evidence.integration.test.ts:197

improvement2

low

siteDisplayName reads input.bills[0] (unordered) — use billsNewestFirst[0]

domains/utility/src/bill/bill.shells.ts:878

info

No shared assertNever helper — inline exhaustiveness tail is novel pattern

domains/utility/src/utility-contract/utility-contract.shells.ts:920

History · 4 commits

  1. a15a13asafeincremental0H · 0M · 2L2026-07-14 00:21
  2. 1521c70needs attentionincremental2H · 4M · 6L2026-07-14 00:00
  3. 5d0ec62needs attentionincremental2H · 4M · 3L2026-07-13 20:31current
  4. ec4a791needs attentionfull3H · 8M · 8L2026-07-13 19:42