Q2 2026
Account Populations
73,517 accounts are flagged as bad debt. ~9,000 are in active drift at any time. Every one has invoices that lie about what they owe. These are the mechanisms that generate this, and what fixes each.
- 73,517
- accounts flagged as bad debt
- ~9,000
- in active drift at any time
- 529
- with stores that contradict each other
The honest invoicing migration affects every account with uncollectible invoices where debt is encoded as Stripe metadata instead of credit notes — 73,517 accounts. ~9,000 are in active drift at any time. Source: BigQuery cf-billing account-state query (Mar 2026).
Three data sources reveal a funnel, not independent populations. The top is wide and silent. The bottom is narrow and loud. Most of the damage is invisible.
- ~9,000
- accounts in drift at any time
- 384
- complaints per month (Salesforce)
- 5
- escalations per month (Jira)
Only 4% of drifted accounts complain. Of those who do, support resolves 99% manually via NinjaPanel. The risk is not the 5 who reach engineering — it's the 8,600 who are silently drifted and either don't notice or churn without reporting. The engineering work targets the mechanism, not the complaints.
| Layer | Size | Source | What it tells you |
|---|---|---|---|
| Drift state | ~9,000 | BQ drift_trends | Accounts where dunning state ≠ payment status. Daily churn ±50–200, spikes of +2,000–4,000. |
| Complaints | 384/mo | Salesforce RC2 + RC7 | Customers who notice and contact support. 4% of drifted. |
| Escalations | 5/mo | Jira CUSTESC | Cases support can't resolve. 1.3% of complaints. |
Drift is a flow, not a stock. Accounts enter and leave drift constantly. Point-in-time counts are snapshots of an unstable population — like measuring the water level instead of fixing the pipe. Four mechanisms generate drift. Each has a fix shipping this quarter.
Five paths, no synchronization, no transaction wrapping. Partial failures leave contradictory flags. Fixed by: Brain Expansion.
Provisions before payment confirms. ~700/month failed activations, up from ~200. Fixed by: Smart Checkout (incomplete-first).
Off-session invoices orphan silently. ~30 users/day enter bad debt. Fixed by: Void cron (shipped, proved 171→0).
Payment succeeds, flag persists. 14,849 stuck subscriptions. Fixed by: Brain flag lifting.
Every one of the 73,517 bad-debt accounts has invoices that lie. The invoice shows the original billed amount ($25.47). The real debt ($19.66) is buried in Stripe metadata — bad_debt_amount, bad_debt_paid, bad_debt_note. This is the honest invoicing problem, and it scales with the full bad-debt universe, not just the drifted subset.
- 73,517
- accounts with lying invoices
- $200
- typical invoice face value
- $32
- typical actual debt (metadata)
Credit notes fix this. A credit note adjusts the invoice for unused in-advance service. The amount_remaining becomes the real debt. No metadata. No two-button problem. No consolidated invoice. Going forward, credit notes are issued at uncollectible time (milestones M1–M4). Retroactively, the question is whether to issue credit notes against the existing 73,517 accounts' uncollectible invoices.
The forward mechanism (M1–M4) fixes new accounts. The migration fixes the existing 73,517. Every bad-debt account has uncollectible invoices where debt is encoded as metadata instead of credit notes. Retroactive credit notes make them truthful.
| Question | Sizing impact | How to answer |
|---|---|---|
| What % of bad-debt accounts ever reinstate? | If <1% reinstate, the migration fixes invoices nobody will see | BQ: paid bad-debt invoices / total bad-debt accounts over 12 months |
| What is the reinstatement rate by account age? | Fresh bad-debt may reinstate; years-old bad-debt won't | BQ: reinstatement rate by months-since-uncollectible |
| Can Stripe issue credit notes on uncollectible invoices? | Load-bearing unknown. If no, the entire approach is blocked | Stripe API test — milestone M1 |
| Does the brain recompute handle legacy metadata accounts? | If yes, the brain may make the migration unnecessary | Brain architecture review during Phase 1 |
| What ticket volume comes from legacy vs. new bad-debt accounts? | Tells us whether the forward fix alone kills the ticket category | Cross-reference Jira tickets with account creation/uncollectible dates |
Current measurements. Each has a BigQuery source and a refresh cadence. These replace the stale point-in-time counts used in previous documents.
| Metric | Value | Source | As Of | Trend |
|---|---|---|---|---|
| Accounts flagged bad debt | 73,517 | account-state query | Mar 2026 | — |
| Accounts in drift state | ~9,000 | drift_trends | Mar 2026 | Churns ±50–200/day |
| Inconsistent bad-debt state | 529 | account-state query | Mar 2026 | Down from 625 |
| Double-charged for bad debt | 1,277 | account-state query | Mar 2026 | Cumulative (FINPE-756) |
| Failed activations (30d) | ~700 | subscription-anomalies | Jan 2026 | Up from ~200 (Oct 2025) |
| Cycle uncollectibles (monthly) | 7–9K | uncollectible-trend | Mar 2026 | Stable post-crisis |
| Stale uncollectible face value | ~$980M | account-state query | Mar 2026 | Not real debt — accounting noise |
Which workstream fixes which mechanism. The mechanisms generate drift; the workstreams eliminate them.
| Mechanism | Workstream | Deliverable | Impact | Ships |
|---|---|---|---|---|
| Racing code paths | Honest Invoicing | Brain Expansion | Single decision maker stops new drift | Early–Mid Q2 |
| Wrong invoice amounts | Honest Invoicing | Credit Notes M1–M4 | New invoices become truthful | Mid–Late Q2 |
| Commit-before-pay | Smart Checkout | Incomplete-first | Activation failures → 0 | Early–Mid Q2 |
| PM gate blocking | Smart Checkout | Gate removal | ~20 tickets/mo killed | Mid–Late Q2 |
| Invoice void gap | Smart Checkout | Void cron | ~30 users/day saved | Shipped |
| Pay doesn't unflag | Honest Invoicing | Brain flag lifting | 14,849 stuck subs unblocked | Mid Q2 |
| Legacy lying invoices | Honest Invoicing | Retroactive migration | 73,517 accounts | Late Q2 |
Open questions that affect scope, priority, and whether the retroactive migration earns its keep. Each should be answered during Q2 execution, not upfront.
What % of the 73,517 ever come back? If <1%, the migration fixes invoices nobody will see.
A 3-year-old bad-debt account is dead. A 3-month-old might come back. Age gates scope.
Can Stripe issue credit notes on uncollectible invoices? Unknown. Load-bearing. Milestone M1.
Does the recompute engine handle metadata-based accounts? If yes, migration may be unnecessary.
73,517 accounts with lying invoices. ~9,000 in active drift at any time. Brain expansion, credit notes, and incomplete-first checkout fix the forward path. The retroactive migration fixes the existing stock — late Q2, after M1–M4 prove the mechanics.