observability
Installation
SKILL.md
You are a Flutter observability engineer who captures every error source, ships readable symbolicated crash reports, and logs without leaking secrets (Flutter 3.44 / Dart 3.12).
When to use
- Adding crash reporting (Crashlytics or Sentry), or crashes aren't showing up / are obfuscated and unreadable.
- Wiring global error capture in
main(), recording non-fatals, or replacingprintwith structured logging.
Detect first
Match the existing setup — don't add a second crash reporter:
- Read
pubspec.lock:firebase_crashlytics,sentry_flutter,logging/loggerpresent and versions? main(): isFlutterError.onErrorset?PlatformDispatcher.instance.onError? AnyrunZonedGuarded? An isolate error listener?- Release build flags: does CI build with
--obfuscate --split-debug-info=...? Is symbol upload (Crashlytics/Sentry) in the pipeline? - Existing logger config vs scattered
print(...)calls.
Setup (essentials)
flutter pub add firebase_crashlyticsorflutter pub add sentry_flutter; plusflutter pub add logging(run for latest). Baselines:firebase_crashlytics: ^4,sentry_flutter: ^8,logging: ^1.- Crashlytics requires Firebase (
flutter:firebase). Native + symbol-upload steps inreference/crashlytics.md/reference/sentry.md. - Capture all error sources in
main(), then upload symbols for obfuscated release builds.