11## 0.8.13
22
3- Patch release after ` 0.8.12 ` .
3+ Patch release after published ` 0.8.12 ` .
44
55### Fixed
66
@@ -15,6 +15,20 @@ Patch release after `0.8.12`.
1515
1616### Added
1717
18+ - Convert ` tugboat ` into a Flutter plugin with an experimental opt-in native
19+ CPU capture backend (` nativeCpuExperimental ` ) on Android (` PixelCopy ` ) and
20+ iOS (live Flutter-layer rendering). The default remains
21+ ` flutterRepaintBoundary ` , with automatic fallback when native capture is
22+ unavailable or fails safely.
23+ - Record a regenerable JPEG size envelope for the current Dart encoder so the
24+ native CPU capture path can compare codec output against the same buffers.
25+ - Native ` encodeMicros ` is the Pigeon capture round-trip only. Nested native
26+ stage timings stay on the backend trace so ` TugboatFrame.captureMicros ` does
27+ not double-count PixelCopy, dHash, JPEG, and SHA-256.
28+ - Published ` TugboatFrame ` records include ` requestedBackend ` ,
29+ ` resolvedBackend ` , and ` fallbackReason ` so production screenshots identify
30+ Flutter vs native without ` capture_diagnostic ` events. HTTP ` /v1/frames ` is
31+ still JPEG-only.
1832- ` route_change ` now splits route identity (` routeName ` , ` routeType ` ,
1933 ` routeNamed ` , and the matching ` from* ` fields) without changing ` route ` ,
2034 ` fromRoute ` , or ` navigation ` .
@@ -25,34 +39,22 @@ Patch release after `0.8.12`.
2539- Claimed route changes copy ` causeTargetFingerprint ` and ` causeGesture ` from
2640 the interaction. Overlay after-frames still capture under exploration
2741 screenshot suppression when ` overlayKind ` is not ` page ` .
42+ - Raise the example Android wrapper to Gradle 8.14 / AGP 8.11.1 / Kotlin 2.2.20
43+ so Flutter 3.47 can build a release APK for device-lab capture gates.
44+ - Document the mobile monorepo, native capture contracts, fallback, coverage,
45+ and path-aware version / license / API-surface checks. Native capture stays
46+ experimental.
2847
2948## 0.8.12
3049
3150Patch release after ` 0.8.11 ` .
3251
33- ### Added
52+ ### Fixed
3453
35- - Record a regenerable JPEG size envelope for the current Dart encoder so the
36- native CPU capture path can compare codec output against the same buffers.
37- - Convert ` tugboat ` into a Flutter plugin with an experimental opt-in Android
38- native CPU capture backend (` nativeCpuExperimental ` ). The default remains
39- ` flutterRepaintBoundary ` , with automatic fallback when native capture is
40- unavailable or fails safely.
41- - Add an experimental iOS native CPU path in ` TugboatCaptureRuntime ` 0.1.0
42- (SwiftPM + CocoaPod). It renders the live Flutter layer so Metal content is
43- present, then uses C++ masks/dHash and ImageIO JPEG. ` drawHierarchy ` remains
44- an optional UIKit compatibility mode. Unpublished.
45- - Native ` encodeMicros ` is the Pigeon capture round-trip only. Nested native
46- stage timings stay on the backend trace so ` TugboatFrame.captureMicros ` does
47- not double-count PixelCopy, dHash, JPEG, and SHA-256.
48- - Published ` TugboatFrame ` records include ` requestedBackend ` , ` resolvedBackend ` ,
49- and ` fallbackReason ` so production screenshots identify Flutter vs native
50- without ` capture_diagnostic ` events. HTTP ` /v1/frames ` is still JPEG-only.
51- - Raise the example Android wrapper to Gradle 8.14 / AGP 8.11.1 / Kotlin 2.2.20
52- so Flutter 3.47 can build a release APK for device-lab capture gates.
53- - Document the mobile monorepo, native capture contracts, fallback, coverage,
54- and path-aware version / license / API-surface checks. Native capture stays
55- experimental; Flutter remains on the 0.8.12 line.
54+ - Stamp the current runtime ` userId ` and traits snapshot on every session
55+ lifecycle POST (` session_start ` , ` session_identify ` , ` traits_updated ` ,
56+ ` user_changed ` , ` session_end ` ). Slim payloads had omitted identity from
57+ traits-only updates and omitted both fields from ` session_end ` .
5658
5759## 0.8.11
5860
0 commit comments