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
{{ message }}
Repository navigation
fix(aggregator): charges producer turns declined purchase alerts and outstanding invoices into charge candidates (PR #2149) #3120
PR #2149's Gmail charge producer turns two kinds of NOT-a-charge mail into charge candidates:
Declined/failed purchase alerts — a subject like "Your $20.00 purchase at OpenAI was declined" passes the query and isNotChargeSubject, the amount and merchant parse cleanly, and a payment that never occurred is recorded as a charge (Codex P2, comment 4409381650).
Outstanding invoices — a subject like "Your OpenAI invoice" with a body saying "Amount due $20.00 / Due Nov 1" is accepted; the body fallback extracts $20 with no evidence of payment, and when payment lands >3 days later the Plaid transaction is kept as a second charge (Codex P2, comment 4409467123).
Both merged unchanged and are still on main: isNotChargeSubject has no declined/failed pattern, and nothing requires payment evidence.
Current main: pm-stack/aggregator/scripts/produce-charge-candidates.ts:148-157 (isNotChargeSubject: cancellation/refund/payment-received/marketing only) and the body amount fallback at :208.
Why it matters
The producer's stated discipline is "never guessed at" — but declined and merely-due amounts are guesses that a charge occurred, and they flow into matched rows and the once-only attention strip as real spending.
Acceptance criteria
Subjects/bodies indicating a declined or failed purchase produce no candidate (counted as skipped).
An invoice whose only amount is an amount DUE (no paid/charged evidence) produces no candidate.
Tests pin both shapes; genuine receipts/alerts still produce candidates.
agent-note:v1 — Agent: pr-diff-review-b; state: filed. Filed from PR diff review lane B (late-arriving Codex P2 evidence on the source PR, verified against current main ada2d88; see the issue body for PR, comment, and file:line evidence). Enqueued as a repo-task/v1 triage packet on repo-health-code-pilot.
Agent: queue worker (repo-worker-code), lane E shift
Session / ID: queue task 4577
Task: PR fix(aggregator): charges producer — reject declined alerts and amount-due-only invoices (#3120) #3193 @d6dfa4c1d — tests verified first-hand at head this shift (producer 15/15, charges suites 42/42); parked 20m on the Codex re-review requested at ~20:05Z, which had not landed within the wait window. The earlier park reason (CI pending) is superseded: no CI workflow covers pm-stack/aggregator paths, so there is no CI gate to wait for.
Agent: queue worker (repo-worker-code), lane E shift
Session / ID: queue task 4577
Found via: queue claim (resume after park)
Task: PR 3193 merged — Codex re-review at head d6dfa4c clean ("Didn't find any major issues", has_unresolved_findings:false, 19:51Z), sole Codex P2 thread resolved, merge state CLEAN. Laptop tests at head verified first-hand previous shift (producer 15/15, charges 42/42); head SHA unchanged since. No CI workflow covers pm-stack/aggregator (CodeRabbit NEUTRAL only).
Activity
dezren39 commentedon Oct 31, 2026
agent-note:v1 — Agent: pr-diff-review-b; state: filed. Filed from PR diff review lane B (late-arriving Codex P2 evidence on the source PR, verified against current main ada2d88; see the issue body for PR, comment, and file:line evidence). Enqueued as a repo-task/v1 triage packet on repo-health-code-pilot.
38 remaining items
dezren39 commentedon Oct 31, 2026
🤖 Agent note · parked
dezren39 commentedon Oct 31, 2026
🤖 Agent note · picked up
Merge pull request #3193 from developing-today/queue/4577-3120-charge…
dezren39 commentedon Oct 31, 2026
🤖 Agent note · done