The Crash Diary
When the game falls over, we’d like to hear about it. Up to now the only feedback loop has been the goodwill of players willing to write the bug down somewhere; from this release the game tells us itself, scrubbed of anything we don’t need to see. Default-on, opt-out, EU storage, 90 days, no chat, no IPs, no save data. Privacy policy on resinhead.au updated to match.
- Crash reporting: wire the Sentry .NET SDK across
Client.Desktop,Client.Android, andFacilitatorvia a sharedSentryBootstraphelper inShared. Locked down to no-PII defaults (SendDefaultPii=false, IPs scrubbed, no environment vars, breadcrumbs filtered to drop chat + Lua source); tagged per binary (app=client.desktop|client.android|facilitator) and per RID so a Windows crash is one filter click from an Android one. Release tag isblight@$VERSIONso dashboard rows line up withgh releaserows. - Lua loader errors: wrap the auto-load loops in
LuaApi(songs) andQuestLuaApi(quests) withSentryBootstrap.CaptureLuaError, so a malformed script ships a real ticket instead of just aprint()line nobody reads. Dev-console input and runtimeload()calls stay un-instrumented; those are dogfooding noise, not crashes. - Opt-out path: new
Shared.BlightSettingsreads/writes a JSON file at%LOCALAPPDATA%\Blight\settings.json(and the Linux/macOS/Android equivalents) with asendCrashReportstoggle, default ON. Editing the file tofalsedisables crash reporting on next launch. An in-game toggle UI is on the TODO list (Stuff Ken cares about right now). - GHA release: new
sentry-releasejob creates the Sentry release, uploads managed PDBs for every RID (desktop + Android) with--include-sources, and finalises. Gated onvars.SENTRY_ORGso forks without Sentry configured skip cleanly. Build jobs embed the DSN via-p:SentryDsn=$SENTRY_DSN;Directory.Build.propswrites it onto the entry assembly asAssemblyMetadata, so user devices have a DSN even when env vars aren’t around. - Privacy policy on resinhead.au: disclose crash reporting and Sentry (Functional Software, Inc.) as a data subprocessor, document EU storage and 90-day retention, document the settings.json opt-out path. “No analytics or telemetry” softened to “crash reports only”; effective date bumped.
docs/sentry.md: design note covering plan/region/data model/integration phases/release pipeline, plus the privacy-policy diff that just landed.