The ledger, rendered
Findings, not vibes.
Rendered from your real JSON.
Point this dashboard at any labs/crashledger.json (or a run blob from a CI artifact): it normalizes the artifact, computes the section 7 gate with the exact functions the CLI uses, breaks findings down by module, and draws the cost-economics bars. All of it runs in your browser against a JSON the CLI wrote - the CLI collects nothing and makes no calls, and neither does the dashboard.
What you see is not sample data - it is crashtest eating its own cooking: the committed CI ledger of our own hardened demo app, baked into this page at build time. Point the loader below at your own labs/crashledger.json or a CI run blob to see yours instead.
exit(diff).Findings by module
Every row below is a receipt of an attack that did not land.
section auth3
section authz3
section governance10
section guards2
section input3
section memory9
section proto-hygiene2
section race2
section recursion2
section session4
section state2
section taxonomy2
section upload2
section volume3
Cost economics
Cost economics - every request is accounted in backend ops. Amplification is bounded by config, not vibes.
Accepted risks
Owner + bound on file. Accepted risks never re-alarm - they are reported, not failed.
No accepted risks on file - nothing finds its way around an owner + bound.
Want the gate in CI instead of on a page? That is the same verdict, computed inside npx crashtest run - see the exit rules and the ledger format. CI can emit exactly this artifact with npx crashtest run --json (the last stdout line is the same blob this page renders) - the pipeline recipe lives at run roots & recipes.