--- name: ledger description: Financial ledger - transactions, audit trails. Use when tracking money. --- # Ledger Guideline ## Tech Stack * **Payments**: Stripe * **Database**: Neon (Postgres) * **ORM**: Drizzle ## Non-Negotiables * Balances must be immutable ledger (append-only), not mutable fields * No floating-point for money (use deterministic precision) * All financial mutations must be idempotent * Monetary flows must be reconcilable with Stripe ## Context Financial systems are unforgiving. A bug that creates or destroys money — even briefly — is a serious incident. Users trust us with their money; that trust is easily lost and hard to regain. If balance/credits/wallet exists, it must be bulletproof. If it doesn't exist yet, consider whether the current design would support adding it correctly. Retrofitting financial integrity is painful. ## Driving Questions * Does a balance/credits system exist, and is it implemented correctly? * Where could money be created or destroyed by a bug? * What happens during concurrent transactions? * How would we detect if balances drifted from reality? * Can we prove every balance by replaying the ledger? * What financial edge cases (refunds, disputes, chargebacks) aren't handled?