Skip to content

fix(credit): make credit reversal atomic and idempotent - #15

Merged
iamparmjeet merged 1 commit into
integ/phase-a-baselinefrom
fix/atomic-credit-reversal
Sep 5, 2026
Merged

iamparmjeet merged 1 commit into
integ/phase-a-baselinefrom
fix/atomic-credit-reversal

Conversation

@iamparmjeet

Copy link
Copy Markdown
Owner

Implements remediation slice B06 (docs/Fix-Plan-2026-09-05.md). Terra High review owed before [x].

Scope: one reversal per credit + atomic reversal-insert/original-update on Node and Neon paths. One migration (0028, partial unique index), no data rewrite.

Changes:

  • reverseCredit: idempotent pre-check returns existing pair; uniform insert, catch 23505, adopt winner, complete original (abort-safe on tx path); insert-first order kept
  • extracted markCreditReversed + findReversalByCredit + wrap-aware violationCode
  • credit-reversal.test.ts: 5 tests (written first)

Behavior change: retry returns the pair instead of CONFLICT Already reversed (nothing depended on it).

Verification: db:generate no drift, check-types --force 6/6, Biome clean, db:migrate:test, full suite 236/236, local build 5/5. Dev has zero credit reversals.

Rollback: tag pre-atomic-credit-reversal on integ/phase-a-baseline@be7aca91.

@vercel

vercel Bot commented Sep 5, 2026

Copy link
Copy Markdown

Deployment failed for project rently-dashboard with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/parmjeet-mishras-projects?upgradeToPro=build-rate-limit

@iamparmjeet
iamparmjeet merged commit d79dba8 into integ/phase-a-baseline Sep 5, 2026
2 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant