revenue-checklisted
Install: claude install-skill Silex-Research/DontPanic
# revenue-check
## Purpose
Aggregate product revenue per app and write `dashboard/state/revenue.json` so cost-model can compute net cash-flow positions. Source-aware: each app declares an adapter (`glam` reads Firestore `creatorEarningsLedger`; `spindine` is deferred to a follow-up — see D001 in the parent plan). Stub mode reads fixtures so fresh-clone tests need zero credentials.
## Arguments
| Argument | Required | Description |
|---|---|---|
| `--stub` | no | Use the FixtureAdapter for every app instead of live Firestore. Fresh-clone tests use this. |
| `--live` | no | Explicitly opt in to live adapters that may require ADC. Mutually exclusive with `--stub` / `--fixtures`. |
| `--apps` | no | Comma-separated list of apps to query (default: `Styln`). SpinDine is intentionally not in the default list — see D001. |
| `--out` | no | Path for revenue.json output (default: `dashboard/state/revenue.json`) |
| `--evidence-dir` | no | Where to write the cash-flow report (default: `evidence/revenue-check/`) |
| `--costs` | no | Path to costs.json for the cash-flow report (default: `dashboard/state/costs.json`) |
| `--as-of` | no | ISO-8601 timestamp to override "now" (deterministic tests) |
| `--fixtures` | no | Directory containing per-app fixture subdirectories. Implies `--stub`. |
If no mode is supplied: refuses to run live (avoids surprising network calls). Use `--stub` for fresh-clone testing or `--live` for operator-approved Firestore/deferred adapters.
## Prerequisites