crashtrack 0.1.0

Lightweight Windows crash reporter — uploads minidumps to a crashtrack server
Documentation
# crashtrack (Rust client)

Lightweight Windows crash reporter. Installs an unhandled-exception filter that
writes a minidump on crash, and uploads queued dumps to a crashtrack server on
the next launch.

## Add it

```toml
[dependencies]
crashtrack = "0.1"
```

## Use it

```rust
use crashtrack::Config;

fn main() {
    crashtrack::install(Config {
        api_key:  "ct_pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        app:      "myapp",
        version:  env!("CARGO_PKG_VERSION"),
        endpoint: "https://api.crashtrack.dev",
    }).expect("crashtrack install");

    // ... rest of your program
}
```

Get an API key at https://crashtrack.dev (create a project, copy the key from
settings).

## What it does

- On install: sets `SetUnhandledExceptionFilter` and spawns a background thread
  that scans `%LOCALAPPDATA%/<app>/crashtrack/pending` and uploads any queued
  minidumps from previous crashes.
- On crash: the filter calls `MiniDumpWriteDump` and writes the dump to the
  pending directory, then returns `EXCEPTION_CONTINUE_SEARCH` so Windows Error
  Reporting still runs and the process terminates as normal.

The crash is uploaded the *next* time the app starts. This is intentional —
the network stack is unreliable inside an exception filter.

## Tradeoffs

- Self-hosting: the server is open source — point `endpoint` at your own
  deployment if you don't want crashes going to crashtrack.dev.
- Stack overflow: not covered by `SetUnhandledExceptionFilter`. v0.2 will add a
  vectored exception handler + guard-page recovery for that case.
- OOM at crash time: the dump buffer is allocated lazily today. If the crash
  is from heap exhaustion the dump may fail to write. v0.2 will pre-allocate.

## License

MIT