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.

LayerSizeSourceWhat it tells you
Drift state~9,000BQ drift_trendsAccounts where dunning state ≠ payment status. Daily churn ±50–200, spikes of +2,000–4,000.
Complaints384/moSalesforce RC2 + RC7Customers who notice and contact support. 4% of drifted.
Escalations5/moJira CUSTESCCases 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.

QuestionSizing impactHow to answer
What % of bad-debt accounts ever reinstate?If <1% reinstate, the migration fixes invoices nobody will seeBQ: 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'tBQ: reinstatement rate by months-since-uncollectible
Can Stripe issue credit notes on uncollectible invoices?Load-bearing unknown. If no, the entire approach is blockedStripe API test — milestone M1
Does the brain recompute handle legacy metadata accounts?If yes, the brain may make the migration unnecessaryBrain 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 categoryCross-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.

MetricValueSourceAs OfTrend
Accounts flagged bad debt73,517account-state queryMar 2026
Accounts in drift state~9,000drift_trendsMar 2026Churns ±50–200/day
Inconsistent bad-debt state529account-state queryMar 2026Down from 625
Double-charged for bad debt1,277account-state queryMar 2026Cumulative (FINPE-756)
Failed activations (30d)~700subscription-anomaliesJan 2026Up from ~200 (Oct 2025)
Cycle uncollectibles (monthly)7–9Kuncollectible-trendMar 2026Stable post-crisis
Stale uncollectible face value~$980Maccount-state queryMar 2026Not real debt — accounting noise

Which workstream fixes which mechanism. The mechanisms generate drift; the workstreams eliminate them.

MechanismWorkstreamDeliverableImpactShips
Racing code pathsHonest InvoicingBrain ExpansionSingle decision maker stops new driftEarly–Mid Q2
Wrong invoice amountsHonest InvoicingCredit Notes M1–M4New invoices become truthfulMid–Late Q2
Commit-before-paySmart CheckoutIncomplete-firstActivation failures → 0Early–Mid Q2
PM gate blockingSmart CheckoutGate removal~20 tickets/mo killedMid–Late Q2
Invoice void gapSmart CheckoutVoid cron~30 users/day savedShipped
Pay doesn't unflagHonest InvoicingBrain flag lifting14,849 stuck subs unblockedMid Q2
Legacy lying invoicesHonest InvoicingRetroactive migration73,517 accountsLate Q2

Open questions that affect scope, priority, and whether the retroactive migration earns its keep. Each should be answered during Q2 execution, not upfront.

Reinstatement rate

What % of the 73,517 ever come back? If <1%, the migration fixes invoices nobody will see.

Age distribution

A 3-year-old bad-debt account is dead. A 3-month-old might come back. Age gates scope.

Stripe credit note limits

Can Stripe issue credit notes on uncollectible invoices? Unknown. Load-bearing. Milestone M1.

Brain coverage of legacy

Does the recompute engine handle metadata-based accounts? If yes, migration may be unnecessary.