MRSS: closing the loop on mobile release incidents
Mobile release incidents follow a predictable pattern. A new build ships, a flag lights up, crash rate spikes, on-call notices hours later, someone manually flips the kill-switch. Between “spike” and “flip” sits the entire user-impact window.
The gap was never detection. Crashlytics already sees the spike. The gap is the human loop between detection, correlation, and mitigation: someone has to notice, figure out whether it is a bad flag or a real bug, and then act. MRSS, the Mobile Release Stability System, closes that loop.

What it does
MRSS runs as a closed loop over every release:
- Ingest. Pulls crash and ANR telemetry from Firebase Crashlytics through BigQuery, partition-filtered, for effectively zero dollars a month.
- Correlate. Ties each new issue back to release-intent records, the feature flags a team declared before shipping, so a flag-driven regression is not confused with a code bug.
- Recommend. For a flag-related spike it proposes disabling the flag via Firebase Remote Config. For a code bug it hands off to an AI investigator.
- Act. One click flips the Remote Config flag. Or the AI agent produces an investigation report and, on human approval, opens a draft PR against the repo.
- Notify. Posts to Slack with deeplinks that apply the kill-switch straight from the message.
Architecture
- A TanStack Start dashboard, server functions plus React 19, on a Bun runtime.
- SQLite for local durable state.
- A sentinel process on a schedule that handles ingest and deviation detection.
- The Claude Agent SDK running two roles: the recommender, which emits structured JSON, and the two-phase fix agent that investigates, waits for approval, then opens the PR.
- Firebase Remote Config as the only actuator. Nothing else touches production.
Design choices worth calling out
- Two-phase AI fix. Investigation is automatic, code changes are not. The model produces a report, never a silent merge. A human approves before a PR opens.
- Flag correlation over raw crash counts. “Any new crash equals an incident” drowns you in false positives. Correlating to declared flags separates a regression a team can undo instantly from a bug that needs code.
- Pull-model ingest. BigQuery over push-based Firebase Alerts, because the pull path also exposes aggregate metrics like crash-free percentage and cold-start p95, at the same near-zero cost.
Impact
On real production apps, MRSS took incident response from roughly two hours of Slack triage and manual Remote Config work down to about five minutes end to end. Across the flag-correlated path in production trials, the kill-switch recommendations had zero false positives.
It is a Marrow in-house tool today, and it will be open sourced soon.