# Crash reports

**Faultline** is s2script’s crash pipeline: the capture client spools incidents on the game server,
and the website hosts ingest + a viewer so operators can read them.

## Opt in

1. Sign in on s2script.com → **Account → Crash servers**.
2. Create a server and mint an `s2c_…` API key (shown once).
3. Write `addons/s2script/configs/crashreporter.json`:

```jsonc
{
	"enabled": true,
	"endpoint": "https://s2script.com/api/crash/v1/ingest",
	"api_key": "s2c_…",
	"include_minidump": true
}
```

`enabled` defaults to **false**. Hard faults upload on the next boot; JS/panic kinds are swept while
the process is still alive.

## Viewer

- **[/crashes](https://s2script.com/crashes)** — Faultline: crash ID lookup, 24h totals, your recent reports.
- **`/crashes/<id>`** — teaser for anyone with the ID; full stacks / plugins / minidump for the owner
  (or someone they shared with).

## Ingest API

```http
POST /api/crash/v1/ingest
Authorization: Bearer s2c_…
Content-Type: application/json
```

Body is a `schema_version: 1` incident envelope (native / js / panic). Multipart is also accepted:
part `envelope` (JSON) + optional part `minidump`.

Success responses are `201` (or `200` on idempotent re-upload of the same `incident_id`).

## Privacy

Minidumps can contain process memory. Keep crash reporting opt-in, prefer envelope-only
(`include_minidump: false`) when you don’t need a native dump, and only share reports with people you
trust.
