Payments
Getting Stripe into production, and what happened after.
List Customers API Lookup Lets Anyone Overwrite a Customer2026-10-27Unconditional Update Resets a Date Column on No-op Saves2026-10-25Unique Constraint Hash Missing direction Drops a Refund2026-10-22A Bare Await Lost Receipts Forever on Webhook Retry2026-10-21reconcilePayment Never Checks Amount, Marks Contracts Paid2026-10-19company_id Survives Contract End, Owner Check Isn't Enough2026-10-18email_exists on createUser Hides a Silent Signup Failure2026-10-17durationSec 300s Cap Missed at Input, Fails as Permanent 4002026-10-16snapshotSignedPolicies Guard Blocks Contract Resign2026-10-15Stripe fallbackToInvoice counted an unsent email as issued2026-10-15Bundle Application Partial Failure Not Communicated to User2026-10-14signed_terms_source_version Unchecked, Terms Shown as Agreed2026-10-14company_id Is Always Null on Public/Share Links2026-10-08term_months Display Drifts From Amount After Term Extension2026-09-25amount_unset: Stripe's 7-Day Auto-Switch Never Fires2026-09-24sp.units Query Param Shows 5x Price for a 1-Unit Invite2026-09-23fail-closed Guard Was Missing From Two Other Write Paths2026-09-21start_month Missing Lets a Contract's Period Go NULL2026-09-17Two PaymentIntents: a Losing webhook Reverts the Winner2026-09-09An Empty contractId Gives invalid input syntax uuid2026-09-07A Ledger INSERT Failure Swallowed as a Duplicate2026-09-03Re-consent to Revised Terms Does Not Reset auto_renew2026-08-30A Post-Charge DB Failure Read as a Card Decline2026-08-28Duplicating a Placement Without Ending the Old One2026-08-26Holding-Only Checks Reapply a Bundle Discount2026-08-24Stripe Checkout Session expires_at: 24h Default Holds Seats2026-08-22A CHECK Rewrite Erased Another Branch's Value2026-08-18A Conditional UPDATE Needs error, Not Just data2026-08-16