Fix readiness_absent Crashlytics noise and map-tile FATAL misclassification - #116
Conversation
…cation - Gate the readiness_absent Crashlytics non-fatal to only fire when at least one input genuinely had a value with an adequate baseline (the true "should have computed" case), not on an honest no-sleep/no-HR day where every input is legitimately absent. Also record each input's baseline stddev in the diagnostic so a future hit is immediately distinguishable from readinessComposite's intentional zero-dispersion abstain (see wellness_test.dart) instead of another round of guessing. - Respect Flutter's FlutterErrorDetails.silent flag in the global FlutterError.onError hook: errors the framework itself marks silent (e.g. an image/tile network fetch failing after its widget was disposed — seen live as a FATAL crash while viewing a workout route map with no connectivity) are now recorded as non-fatal instead of unconditionally fatal, so they stop inflating the crash-free-users metric. No kAlgoVersion bump — telemetry/diagnostics only, no scoring change.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughReadiness-absent diagnostics now report baseline standard deviation and condition non-fatal alerts on available inputs. Flutter error handling classifies silent errors as non-fatal and stores the silent flag in queued crash context. ChangesDiagnostics and telemetry updates
Estimated code review effort: 2 (Simple) | ~15 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
lib/telemetry/telemetry_service.dart (1)
92-95: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUpdate the nearby Crashlytics visibility comment.
The new handler now records silent Flutter errors as non-fatal, but the comment at Line 119 still says Crashlytics “only ever sees FATAL errors” from
installErrorHandlers. Revise it to distinguish fatal and non-fatal framework reports.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@lib/telemetry/telemetry_service.dart` around lines 92 - 95, Update the comment near installErrorHandlers to accurately state that Crashlytics receives fatal reports for non-silent Flutter errors and non-fatal reports for silent errors. Leave the recordFlutterError behavior unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@lib/telemetry/telemetry_service.dart`:
- Around line 92-95: Update the comment near installErrorHandlers to accurately
state that Crashlytics receives fatal reports for non-silent Flutter errors and
non-fatal reports for silent errors. Leave the recordFlutterError behavior
unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 66fb17cd-62f6-4678-820a-408e0bcd84fb
📒 Files selected for processing (3)
lib/compute/derivation_engine.dartlib/compute/onehz_pipeline.dartlib/telemetry/telemetry_service.dart
Comment said Crashlytics only ever sees FATAL errors from installErrorHandlers — no longer true since FlutterError.onError now files silent framework errors as non-fatal. PlatformDispatcher.onError is still always fatal; clarify both.
Summary by CodeRabbit
baseline_sdto readiness “absent” details for each input, improving interpretation of missing readiness results.