@@ -5,9 +5,9 @@ checkpoints around meaningful interactions, compact structural anchors, route
55transitions, scrolling evidence, and optional viewport semantic maps. Capture
66can be sent to the local exploration WebSocket, the HTTP collector, or both.
77
8- The current package version is ` 0.4.18 ` . Session JSON uses schema version ` 8 `
9- (readers still accept ` 6 ` ), and structural fingerprints use fingerprint schema
10- version ` 6 ` .
8+ The current package version is ` 0.5.0 ` . Session JSON writers emit schema
9+ version ` 9 ` ; compatibility readers should accept versions ` 6 ` through
10+ ` 9 ` . Structural fingerprints use fingerprint schema version ` 6 ` .
1111
1212## Install
1313
@@ -19,6 +19,29 @@ import 'package:tugboat/tugboat.dart';
1919
2020The package requires Dart 3.9.2 or newer and Flutter 3.35.0 or newer.
2121
22+ ## Migrating to 0.5.0
23+
24+ This is a breaking release. Session JSON written by 0.5.0 uses schema version
25+ ` 9 ` and no longer includes ` controlValue ` , ` controlValueTransition ` , or
26+ ` semanticAnnotation ` in event ` data ` . Consumers reading historical schemas
27+ ` 6 ` –` 8 ` should treat those fields as optional historic data; new captures do
28+ not provide them.
29+
30+ The public ` package:tugboat/tugboat.dart ` barrel no longer exports:
31+
32+ - ` TugboatEncodedControlScalar ` , ` TugboatVisibleControlValue ` ,
33+ ` TugboatControlValueScope ` , ` TugboatControlValue ` , and
34+ ` TugboatSemanticAnnotation ` ;
35+ - ` tugboatControlValueSchemaVersion ` ,
36+ ` tugboatControlValueTransitionSchemaVersion ` , and
37+ ` tugboatSemanticAnnotationSchemaVersion ` ;
38+ - ` tugboatControlValueForWidget ` ,
39+ ` tugboatControlValueFromSemanticsProperties ` ,
40+ ` tugboatControlValueFromSemanticsNode ` ,
41+ ` tugboatSemanticAnnotationFromProperties ` ,
42+ ` tugboatSemanticAnnotationFromNode ` ,
43+ ` tugboatMergeSemanticAnnotations ` , and ` tugboatMergeControlValues ` .
44+
2245## Minimal integration
2346
2447Install both the app wrapper and navigator observer. Capture is dormant by
@@ -209,11 +232,10 @@ Available mask levels are `explicitOnly`, `allTextAndMedia`, `allText`,
209232stay visible; other custom-painted or decorated image surfaces are not
210233classified by this mode, so wrap them in ` TugboatSensitive ` when needed).
211234
212- Control values and semantic strings are retained verbatim so session summaries
213- and aggregate analysis can use values such as slider positions, video duration,
214- and selected templates. Dynamic list discriminators remain hashed before they
215- enter canonical paths. Telemetry also includes developer-authored routing and
216- identity strings where applicable:
235+ The structural telemetry does not retain arbitrary ` Text ` , accessibility,
236+ tooltip, or icon label strings. Dynamic list discriminators are hashed before
237+ they enter canonical paths. Telemetry does include developer-authored routing
238+ and identity strings where applicable:
217239
218240- route names in ` route_change.data ` and anchor ` routeKey ` fields;
219241- ` TugboatSubView.label ` in state/scroll context;
@@ -223,35 +245,10 @@ identity strings where applicable:
223245- normalized bounds, pointer coordinates, scroll metrics, and screenshot
224246 pixels after the configured masking policy is applied.
225247
226- Screenshots and telemetry can contain rendered or semantic user content. Choose
227- an explicit production masking policy and test custom widgets, platform views,
228- overlays, and semantic labels before enabling production capture.
229-
230- ### Explicit custom-control values
231-
232- Standard Flutter controls expose their typed state automatically. Wrap custom
233- controls when the app knows a more useful stable key, unit, or range:
234-
235- ``` dart
236- TugboatControlValueScope(
237- controlKey: 'video_duration',
238- role: 'slider',
239- unit: 'milliseconds',
240- min: 1_000,
241- max: 60_000,
242- step: 1_000,
243- value: TugboatVisibleControlValue.duration(
244- const Duration(seconds: 15),
245- ),
246- child: MyDurationSlider(),
247- )
248- ```
249-
250- For template or preset selection, use a stable enum identifier:
251-
252- ``` dart
253- value: TugboatVisibleControlValue.enumId('modern_minimal'),
254- ```
248+ Screenshots are the only captured surface that can contain rendered user
249+ content. Choose an explicit production masking policy and test custom widgets,
250+ platform views, and overlays in the target app before enabling production
251+ capture.
255252
256253## Event and frame model
257254
0 commit comments