You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to #440 (Phase 1: receipt intake core). The Codex gate APPROVED round 24 (2026-09-03 19:43Z on 763d40dd): the cleanup claim is renewed under the per-path lock immediately before deletion, outlives the bounded storage call, and uses the invocation deadline. Nothing blocking remains; this issue holds the non-blocking items so they are not lost.
From the approving round (non-blocking)
Strengthen the claim-expiry regression. Pause an actual deletion past the ORIGINAL claim expiry while a publisher attempts takeover, and assert the publisher is refused until the renewed claim lapses (real Postgres, two connections, pre-fix control). The current test proves the renewal happens; this one would prove the takeover cannot interleave.
Follow-up to #440 (Phase 1: receipt intake core). The Codex gate APPROVED round 24 (2026-09-03 19:43Z on
763d40dd): the cleanup claim is renewed under the per-path lock immediately before deletion, outlives the bounded storage call, and uses the invocation deadline. Nothing blocking remains; this issue holds the non-blocking items so they are not lost.From the approving round (non-blocking)
Companion work outside this repo
/startrequiressha256and returns a union (uploadwithuploadUrl+uploadLease, orsettled);/finalizemust echouploadLeaseand handle409 lease-stale/409 lease-conflictby restarting.Ops
APPLY_EXPECT_PROJECT_REF=<ref> node scripts/apply-receipt-intake.mjs --target prod(creates the intake table that feat(expenses): project + phase attribution, tax paid at source (pipeline v2 phase 3) #442 and feat(receipts): Receipts tab, missing-receipt chaser, Chat cards, nightly QBO bank pull (pipeline v2 phase 2) #443 build on; both must merge after this PR).