flutter_flight_recorder 0.0.7
flutter_flight_recorder: ^0.0.7 copied to clipboard
Records a rolling timeline of app events (errors, network, navigation, actions, logs) so QA and developers get the complete story of what happened before a bug.
0.0.7 #
- Added
IncidentAnalyzer: a deterministic, offline analysis pipeline that turns anIncident's raw event timeline into a normalizedIncidentTimeline, an inferredList<ReproductionStep>, and a short, evidence-basedIncidentStory. New types:IncidentAnalysis,IncidentAnalyzer,IncidentTimeline,TimelineEntry,ReproductionStep,IncidentStory. SeeIncidentAnalyzer's class doc for exactly how event correlation works and its documented limits. - Added
IncidentMarkdownExporter: renders anIncidentand itsIncidentAnalysisas a single Markdown bug report — meant to be pasted directly into Jira, Linear, GitHub Issues, Slack, or email. A pure formatter over already-analyzed data (it never analyzes events itself); sections it can produce are What happened, QA report, Reproduction steps, Technical evidence, Network, Errors, Environment, and Incident metadata, each omitted entirely when there's nothing to show for it. Deterministic, no new dependency. - Added
FlightEvent.correlationId: an optional, opaque token an application can explicitly attach to two or more events (via a newcorrelationIdparameter onrecordAction,log,recordError,recordNavigation,recordNetwork, andrecordLifecycle) to declare they belong to the same interaction — states association, never causation.IncidentAnalyzernow prefers this explicit grouping when two or more surviving events share a usable id, falling back to its original chronological heuristic for everything else — fully backward compatible; every event recorded without acorrelationIdbehaves exactly as before. AddedFlightRecorder.newCorrelationId()to generate one. No Zones, no ambient/automatic propagation yet — seeIncidentAnalyzer's class doc for exactly how the two strategies interact.
0.0.6 #
Docs-only patch — no changes to lib/ or test/.
- Added the shake-to-report-demo GIF to this README (with a caption
noting it demonstrates the optional
flutter_flight_recorder_reporterpackage, not this core package alone). - Fixed stale
^0.0.3install-instruction version pins in this README and the repo-rootWALKTHROUGH.md— they hadn't tracked the last few version bumps.
0.0.5 #
Fix: the logo in the README used a relative path (docs/images/...),
which renders fine on GitHub but not on pub.flutter-io.cn, which serves the
README disconnected from the repo's file structure. Switched to
absolute raw.githubusercontent.com URLs.
0.0.4 #
Added package logo.
0.0.3 #
Docs/example-only patch — no changes to any public API or behavior.
- Added dartdoc comments to
FlightEvent's constructor,category,severity,timestamp, andtoJson, closing a pub.flutter-io.cn score gap (missing documentation on public members). - Added
example/(a minimal, runnable app showing this package in isolation —FlightRecorder.init(),recordAction/log, andcreateIncident()), required by pub.flutter-io.cn's scorer at this package's own path, separate from the repo-root example app that demonstrates all three packages together.
0.0.2 #
Documentation updates only — no changes to lib/ or test/. README
overhaul (pub.flutter-io.cn badges, published-package status, simplified
installation instructions), a new root-level WALKTHROUGH.md, and the
dio/reporter packages switching their dependency on this package from a
path dependency to the published, hosted version.
0.0.1 #
Work in progress — not yet published to pub.flutter-io.cn.
- Event model:
FlightEvent,EventCategory,EventSeverity. FlightRecorder:init,recordAction,log,recordError,setContext,recordNavigation,recordLifecycle,recordNetwork(used byflutter_flight_recorder_dio).- Bounded rolling buffer (
FlightRecorderConfig.maxEvents, default 500), backed by aListQueuefor O(1) add/evict. - Privacy sanitization: default sensitive-key masking (nested), custom
sanitizers, JSON-safety normalization of metadata. Full detail in
docs/privacy.md. - Application context capture (platform, locale) plus custom context via
setContext. - Incident system:
FlightRecorder.createIncident, immutableIncidentsnapshots,QaReportData/IncidentSeverity, versionedtoJsonexport (schema_version: 1). - Automatic uncaught-error capture (
FlutterError.onError+PlatformDispatcher.onError, always chained to any existing handler). FlightRecorderNavigatorObserver: Navigator 1.x push/pop/replace/remove recording, route names only.FlightRecorderLifecycleObserver: app lifecycle transition recording.- Fix:
defaultSensitiveKeysis now actually exported from the public barrel — it was documented (and used as a config default) but not reachable frompackage:flutter_flight_recorder/flutter_flight_recorder.dartbefore this. Found while building the Dio package, which needed it. - Fix:
createIncidentis confirmed and tested to work (with an empty timeline) when called on a session started withenabled: false— correctedFlightRecorderConfig.enabled's doc comment, which had described a scenario (an incident capturing events recorded before a live session was disabled) that the API doesn't actually support, sinceenabledis fixed per session and can only change via a freshinit()call, which resets the buffer. Found during a test-suite audit. - Fix:
QaReportData's doc comment no longer describes the reporter UI as not yet built — it exists, influtter_flight_recorder_reporter.
Not implemented, and not currently planned: Navigator 2.0 / go_router /
auto_route support, content-aware (as opposed to key-name) privacy
sanitization. Network recording, the QA reporter UI, and HTML/JSON
sharing live in the separate flutter_flight_recorder_dio and
flutter_flight_recorder_reporter packages, not here.