Repository navigation
chore(deps): align Android tooling with Gradle 9.7 - #65
Merged
Merged
Conversation
shroominic
force-pushed
the
chore/gradle-9-compatible
branch
from
August 22, 2026 16:32
474b205 to
550ef90
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verification
Android draft-first release workflow contract passed.
External TestFlight review, upload-attempt, and provenance checks passed.
Notification receipt state-machine checks passed.
Internal TestFlight policy helper checks passed.
Internal TestFlight manual-signing contract checks passed.
==> packages/cgm_core: format-check
Formatted 29 files (0 changed) in 0.06 seconds.
==> packages/cgm_ble: format-check
Formatted 5 files (0 changed) in 0.01 seconds.
==> packages/cgm_ble_flutter: format-check
Formatted 5 files (0 changed) in 0.02 seconds.
==> packages/cgm_aidex: format-check
Formatted 5 files (0 changed) in 0.08 seconds.
==> openhealth: format-check
Formatted 70 files (0 changed) in 0.22 seconds.
==> packages/cgm_core: analyze
Analyzing cgm_core...
No issues found!
==> packages/cgm_ble: analyze
Analyzing cgm_ble...
No issues found!
==> packages/cgm_ble_flutter: analyze
Analyzing cgm_ble_flutter...
No issues found! (ran in 1.3s)
==> packages/cgm_aidex: analyze
Analyzing cgm_aidex...
No issues found!
==> openhealth: analyze
Analyzing openhealth...
No issues found! (ran in 2.3s)
==> packages/cgm_core: test-unit
00:00 +0: loading test/ai/ai_provider_test.dart
00:00 +0: test/ai/ai_provider_test.dart: NullAiProvider is disabled and never generates
00:00 +1: test/ai/insight_service_test.dart: GlucoseSummary computes aggregates and event counts
00:00 +2: test/ai/insight_service_test.dart: GlucoseSummary computes aggregates and event counts
00:00 +3: test/ai/insight_service_test.dart: GlucoseSummary computes aggregates and event counts
00:00 +4: test/ai_insight_test.dart: AiInsight exposes timeline contract via createdAt
00:00 +5: test/ai_insight_test.dart: AiInsight exposes timeline contract via createdAt
00:00 +6: test/ai_insight_test.dart: AiInsight exposes timeline contract via createdAt
00:00 +7: test/ai/ai_provider_test.dart: HttpChatAiProvider throws when disabled (no key)
00:00 +8: test/ai/ai_provider_test.dart: HttpChatAiProvider throws when disabled (no key)
00:00 +9: test/ai_insight_test.dart: AiInsight round-trips through JSON
00:00 +10: test/ai_insight_test.dart: AiInsight round-trips through JSON
00:00 +11: test/ai_insight_test.dart: AiInsight round-trips through JSON
00:00 +12: test/ai_insight_test.dart: AiInsight round-trips through JSON
00:00 +13: test/ai_insight_test.dart: AiInsight round-trips through JSON
00:00 +14: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight generates, tags disclaimer, and persists round-trip
00:00 +15: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight generates, tags disclaimer, and persists round-trip
00:00 +16: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight generates, tags disclaimer, and persists round-trip
00:00 +17: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight generates, tags disclaimer, and persists round-trip
00:00 +18: test/cgm_models_test.dart: mmol conversion uses standard divisor
00:00 +19: test/cgm_models_test.dart: mmol conversion uses standard divisor
00:00 +20: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight pulls journal events from the repo into the summary
00:00 +21: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight pulls journal events from the repo into the summary
00:00 +22: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight pulls journal events from the repo into the summary
00:00 +23: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight pulls journal events from the repo into the summary
00:00 +24: test/cgm_models_test.dart: session snapshot copyWith can clear lastError
00:00 +25: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight disabled provider returns null and does no I/O
00:00 +26: test/ai/insight_service_test.dart: InsightService.generateSummaryInsight empty window throws without persisting
00:00 +27: test/glucose_analytics_test.dart: readingsInTimeframe keeps readings inside the window and drops older ones
00:00 +28: test/glucose_analytics_test.dart: readingsInTimeframe keeps readings inside the window and drops older ones
00:00 +29: test/glucose_analytics_test.dart: readingsInTimeframe keeps readings inside the window and drops older ones
00:00 +30: test/glucose_analytics_test.dart: readingsInTimeframe excludes readings without a timestamp
00:00 +31: test/glucose_analytics_test.dart: readingsInTimeframe excludes readings in the future relative to now
00:00 +32: test/glucose_analytics_test.dart: readingsInTimeframe 7d and 14d windows widen inclusion
00:00 +33: test/glucose_analytics_test.dart: AnalyticsCoverage non-empty sparse windows are not sufficient patterns
00:00 +34: test/glucose_analytics_test.dart: AnalyticsCoverage duplicate timestamps cannot inflate coverage
00:00 +35: test/glucose_analytics_test.dart: AnalyticsCoverage 24h gate accepts its exact reading and span boundaries
00:00 +36: test/glucose_analytics_test.dart: AnalyticsCoverage 7d and 14d gates accept exact count and active-day boundaries
00:00 +37: test/glucose_analytics_test.dart: AnalyticsCoverage counts only readings inside the selected window
00:00 +38: test/glucose_analytics_test.dart: average / SD / CV average of a known series
00:00 +39: test/glucose_analytics_test.dart: average / SD / CV average is null for empty
00:00 +40: test/glucose_analytics_test.dart: average / SD / CV population standard deviation of a known series
00:00 +41: test/glucose_analytics_test.dart: average / SD / CV standard deviation is zero for a flat series
00:00 +42: test/glucose_analytics_test.dart: average / SD / CV coefficient of variation is SD/mean*100
00:00 +43: test/glucose_analytics_test.dart: average / SD / CV coefficient of variation is null when empty
00:00 +44: test/glucose_analytics_test.dart: estimated GMI uses the standard linear approximation
00:00 +45: test/glucose_analytics_test.dart: estimated GMI is null when empty
00:00 +46: test/glucose_analytics_test.dart: spikeCount counts each upward crossing of the high bound once
00:00 +47: test/glucose_analytics_test.dart: spikeCount sustained above-range counts as a single spike
00:00 +48: test/glucose_analytics_test.dart: spikeCount an already-high first sample is not an upward crossing
00:00 +49: test/glucose_analytics_test.dart: spikeCount no crossings yields zero
00:00 +50: test/glucose_analytics_test.dart: spikeCount respects custom high bound
00:00 +51: test/glucose_analytics_test.dart: spikeCount orders by timestamp before counting
00:00 +52: test/glucose_analytics_test.dart: summarize time-in-range / below / above sum to 100
00:00 +53: test/glucose_analytics_test.dart: summarize boundary values are inclusive in range
00:00 +54: test/glucose_analytics_test.dart: summarize reports min, max and average
00:00 +55: test/glucose_analytics_test.dart: summarize filters by timeframe before summarising
00:00 +56: test/glucose_analytics_test.dart: summarize preFiltered skips windowing
00:00 +57: test/glucose_analytics_test.dart: summarize empty window produces a null-metric empty result
00:00 +58: test/glucose_analytics_test.dart: summarize custom bounds change bucketing
00:00 +59: test/glucose_analytics_test.dart: summarize all-in-range synthetic day reads as 100% TIR with low CV
00:00 +60: test/glucose_analytics_test.dart: GlucoseRangeBounds rejects inverted bounds
00:00 +61: test/health_event_test.dart: HealthEvent construction & timeline exposes timeline contract
00:00 +62: test/health_event_test.dart: HealthEvent construction & timeline copyWith updates fields and can clear payload
00:00 +63: test/health_event_test.dart: HealthEvent JSON round-trip meal payload round-trips
00:00 +64: test/health_samples_test.dart: ActivitySample construction, duration & timeline contract
00:00 +65: test/health_samples_test.dart: ActivitySample construction, duration & timeline contract
00:00 +66: test/health_samples_test.dart: ActivitySample construction, duration & timeline contract
00:00 +67: test/health_samples_test.dart: ActivitySample construction, duration & timeline contract
00:00 +68: test/health_samples_test.dart: ActivitySample construction, duration & timeline contract
00:00 +69: test/health_samples_test.dart: ActivitySample construction, duration & timeline contract
00:00 +70: test/health_event_test.dart: HealthEvent edge cases v1 requires an explicit timestamp timezone
00:00 +71: test/health_event_test.dart: HealthEvent edge cases rejects unsupported format versions
00:00 +72: test/health_samples_test.dart: ActivitySample json round-trip
00:00 +73: test/health_samples_test.dart: ActivitySample json round-trip
00:00 +74: test/health_samples_test.dart: ActivitySample json round-trip
00:00 +75: test/health_samples_test.dart: ActivitySample json round-trip
00:00 +76: test/health_samples_test.dart: ActivitySample json round-trip
00:00 +77: test/health_samples_test.dart: ActivitySample json round-trip
00:00 +78: test/in_memory_health_repository_test.dart: events round-trips a single event
00:00 +79: test/in_memory_health_repository_test.dart: events round-trips a single event
00:00 +80: test/in_memory_health_repository_test.dart: events round-trips a single event
00:00 +81: test/in_memory_health_repository_test.dart: events round-trips a single event
00:00 +82: test/in_memory_health_repository_test.dart: events round-trips a single event
00:00 +83: test/in_memory_health_repository_test.dart: events round-trips a single event
00:00 +84: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +85: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +86: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +87: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +88: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +89: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +90: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +91: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +92: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +93: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +94: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +95: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +96: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +97: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +98: test/timeline_test.dart: TimelineSorting sortedByTime orders ascending and is stable on ties
00:00 +99: test/in_memory_health_repository_test.dart: AI insights upsert/replace, window+category filter, delete
00:00 +100: test/in_memory_health_repository_test.dart: AI insights upsert/replace, window+category filter, delete
00:00 +101: test/timeline_test.dart: mergeTimelines interleaves heterogeneous entries chronologically
00:00 +102: test/timeline_test.dart: mergeTimelines interleaves heterogeneous entries chronologically
00:00 +103: test/weekly_recap_test.dart: WeeklyRecapAnalytics.recap window covers today plus the previous six calendar days
00:00 +104: test/weekly_recap_test.dart: WeeklyRecapAnalytics.recap window covers today plus the previous six calendar days
00:00 +105: test/weekly_recap_test.dart: WeeklyRecapAnalytics.recap window covers today plus the previous six calendar days
00:00 +106: test/weekly_recap_test.dart: WeeklyRecapAnalytics.recap window empty week yields no data and null best/worst
00:00 +107: test/weekly_recap_test.dart: per-day bucketing assigns readings to the correct local day
00:00 +108: test/weekly_recap_test.dart: per-day bucketing readings outside the week are excluded
00:00 +109: test/weekly_recap_test.dart: per-day bucketing coverage uses the exact calendar recap window
00:00 +110: test/weekly_recap_test.dart: best / worst day by time-in-range picks highest and lowest TIR days
00:00 +111: test/weekly_recap_test.dart: best / worst day by time-in-range fewer than 24 readings do not rank a day as a pattern
00:00 +112: test/weekly_recap_test.dart: best / worst day by time-in-range a day at the 24-reading boundary is both best and worst
00:00 +113: test/weekly_recap_test.dart: week-over-week deltas computes average / TIR / variability deltas across weeks
00:00 +114: test/weekly_recap_test.dart: week-over-week deltas delta is null when one week has no data
00:00 +115: test/weekly_recap_test.dart: week-over-week deltas flat detection respects epsilon
00:00 +116: test/weekly_recap_test.dart: top spikes captures peak and amplitude, ordered by amplitude
00:00 +117: test/weekly_recap_test.dart: top spikes caps at maxTopSpikes
00:00 +118: test/weekly_recap_test.dart: top spikes no spikes when nothing exceeds the high bound
00:00 +119: te 8000 st/weekly_recap_test.dart: day-of-week averages groups readings by weekday Mon..Sun
00:00 +120: test/weekly_recap_test.dart: day-of-week averages weights weekday average by reading count
00:00 +121: test/weekly_recap_test.dart: partial weeks handles a week with a single day of readings
00:00 +122: test/weekly_recap_test.dart: partial weeks excludes readings later than now on the current day
00:00 +123: All tests passed!
==> packages/cgm_ble: test-unit
00:00 +0: loading test/ble_failure_test.dart
00:00 +0: test/ble_failure_test.dart: failure metadata round-trips without native error text
00:00 +1: test/ble_failure_test.dart: failure metadata round-trips without native error text
00:00 +2: test/ble_failure_test.dart: diagnostic codes cannot retain device identifiers
00:00 +3: test/ble_failure_test.dart: only transient failures permit automatic retry
00:00 +4: All tests passed!
==> packages/cgm_ble_flutter: test-unit
00:00 +0: loading /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart
00:00 +0: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android connection sequencing awaits scan shutdown before the initial connect and retry
00:00 +1: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android connection sequencing awaits scan shutdown before the initial connect and retry
00:00 +2: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android connection sequencing awaits scan shutdown before the initial connect and retry
00:00 +3: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_logging_test.dart: release policy propagates log suppression failures
00:00 +4: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_logging_test.dart: release policy propagates log suppression failures
00:00 +5: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: discovery timeout rounds up to whole plugin seconds
00:00 +6: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: notification setup uses the plugin-owned operation timeout
00:00 +7: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: write with response uses the plugin-owned operation timeout
00:00 +8: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: disconnect and remove-bond retain plugin timeout ownership
00:00 +9: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: plugin discovery timeout remains a retryable BLE timeout
00:00 +10: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android bond reconciliation accepts an OS bond persisted across a createBond disconnect
00:00 +11: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android bond reconciliation buffers immediate BONDING to NONE before createBond code 6
00:00 +12: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android bond reconciliation ignores stale none then preserves a real bond rejection
00:00 +13: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android bond reconciliation bounds reconciliation and reports a bond timeout
00:00 +14: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: Android bond reconciliation does not reconcile rejection, timeout, or unrelated failures
00:00 +15: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: classifies denied Android scan permissions
00:00 +16: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: classifies Bluetooth powered off
00:00 +17: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: classifies bond timeout separately from rejection
00:00 +18: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: classifies bond start failure as possible sensor contention
00:00 +19: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: protected subscribe authentication errors require pairing recovery
00:00 +20: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/packages/cgm_ble_flutter/test/flutter_blue_plus_failure_test.dart: classifies repeated Android GATT 133 without exposing native text
00:00 +21: All tests passed!
==> packages/cgm_aidex: test-unit
00:00 +0: loading test/aidex_protocol_test.dart
00:00 +0: test/aidex_protocol_test.dart: specific ops CRC matches confirmed vectors
00:00 +1: test/aidex_protocol_test.dart: session start payload matches confirmed example
00:00 +2: test/aidex_protocol_test.dart: advertisement parsing uses big-endian sfloat triplet
00:00 +3: test/aidex_protocol_test.dart: advertisement parsing skips unusable samples before displaying
00:00 +4: test/aidex_protocol_test.dart: cgm status parses structured fields and crc
00:00 +5: test/aidex_protocol_test.dart: vendor history range parses confirmed example
00:00 +6: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +7: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +8: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +9: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +10: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +11: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +12: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +13: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +14: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +15: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +16: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +17: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +18: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
00:00 +19: test/aidex_session_test.dart: session initializes, pairs, and syncs vendor history
OGBLE setup=f005-unpaired
00:00 +20: test/aidex_session_test.dart: session automatically resumes deferred history sync after warmup
OGBLE setup=f005-unpaired
00:00 +21: test/aidex_session_test.dart: automatic post-warmup history failures become safe session errors
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +22: test/aidex_session_test.dart: session enables vendor auto-update when the sensor reports disabled
OGBLE setup=f005-unpaired
00:00 +23: test/aidex_session_test.dart: session can sync raw vendor history when explicitly requested
OGBLE setup=f005-unpaired
00:00 +24: test/aidex_session_test.dart: legacy unsafe unpair is rejected without any bond operation
OGBLE setup=f005-unpaired
00:00 +25: test/aidex_session_test.dart: session can pair using the GATT serial when the BLE name lacks it
OGBLE setup=f005-unpaired
00:00 +26: test/aidex_session_test.dart: explicit connection may activate an uninitialised stopped sensor
OGBLE setup=f005-unpaired
00:00 +27: test/aidex_session_test.dart: restored connection never activates an uninitialised stopped sensor
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +28: test/aidex_session_test.dart: activation fails closed without explicit intent metadata
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +29: test/aidex_session_test.dart: malformed session start can never trigger activation
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +30: test/aidex_session_test.dart: ended prior session is never restarted even with explicit activation
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +31: test/aidex_session_test.dart: initialization failure never removes a local bond automatically
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +32: test/aidex_session_test.dart: session discovers before bonding and refreshes the GATT link
OGBLE setup=f005-unpaired
00:00 +33: test/aidex_session_test.dart: a pre-existing Android bond discovers without GATT churn
OGBLE setup=f005-unpaired
00:00 +34: test/aidex_session_test.dart: a discovery timeout gets one fresh bonded GATT retry
OGBLE setup=f005-unpaired
00:00 +35: test/aidex_session_test.dart: a discovery disconnect gets the same single recovery
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +36: test/aidex_session_test.dart: a second discovery timeout is final and remains P04
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +37: test/aidex_session_test.dart: disconnect cancels a pending discovery recovery
OGBLE setup=handle-error-start
OGBLE setup=handle-error-complete
00:00 +38: test/aidex_session_test.dart: pre-bond discovery recovery ignores the expected bond GATT drop
OGBLE setup=f005-unpaired
00:00 +39: test/aidex_session_test.dart: discovery recovery budget spans pre- and post-bond tables
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-no-link
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +40: test/aidex_session_test.dart: vendor authentication precedes protected notification setup
OGBLE setup=f005-unpaired
00:00 +41: test/aidex_session_test.dart: a pre-auth subscribe failure recovers before vendor pairing
OGBLE setup=f005-unpaired
00:00 +42: test/aidex_session_test.dart: a post-auth subscribe failure reauthenticates one fresh link
OGBLE setup=f005-unpaired
00:00 +43: test/aidex_session_test.dart: a second P05 failure is terminal with no third connection
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-no-link
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +44: test/aidex_session_test.dart: disconnect cancels a pending notification recovery
OGBLE setup=f005-unpaired
OGBLE setup=handle-error-start
OGBLE setup=handle-error-complete
00:00 +45: test/aidex_session_test.dart: a non-recoverable subscribe failure does not reconnect
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
OGBLE setup=f005-unpaired
00:00 +46: test/aidex_session_test.dart: P04 and P05 each use only their one bounded recovery
OGBLE setup=f005-unpaired
00:00 +47: test/aidex_session_test.dart: notification recovery reconnect failure remains in P03
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-no-link
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +48: test/aidex_session_test.dart: notification recovery rediscovery failure remains in P04
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +49: test/aidex_session_test.dart: setup emits only the closed phase set at exact boundaries
OGBLE setup=f005-unpaired
00:00 +50: test/aidex_session_test.dart: post-bond reconnect failure preserves a non-retryable BLE failure
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-no-link
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +51: test/aidex_session_test.dart: bond-time disconnect event is ignored until the fresh GATT link
OGBLE setup=f005-unpaired
00:00 +52: test/aidex_session_test.dart: post-bond reconnect cannot repeat explicit sensor activation
OGBLE setup=f005-unpaired
00:00 +53: test/aidex_session_test.dart: disconnect cancels a pending post-bond reconnect
OGBLE setup=f005-unpaired
OGBLE setup=handle-error-start
OGBLE setup=handle-error-complete
00:00 +54: test/aidex_session_test.dart: disconnect cancels setup while the initial connection is pending
OGBLE setup=handle-error-start
OGBLE setup=handle-error-complete
00:00 +55: test/aidex_session_test.dart: disconnect cancels setup before pairing can start
OGBLE setup=f005-unpaired
OGBLE setup=handle-error-start
OGBLE setup=handle-error-complete
00:00 +56: test/aidex_session_test.dart: bond failure exposes only safe structured recovery metadata
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +57: test/aidex_session_test.dart: sensor-paired F005 with no OS bond exposes asymmetric bond diagnostic
OGBLE setup=f005-paired
OGBLE setup=bms-delete-all-le-without-authorization-code-operand-supported
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +58: test/aidex_session_test.dart: sensor-paired F005 preserves an unrelated Bluetooth failure
OGBLE setup=f005-paired
OGBLE setup=bms-delete-all-le-without-authorization-code-operand-supported
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
00:00 +59: test/aidex_session_test.dart: debug BMS feature probe reports 00 04 00 supported safely
00:00 +60: test/aidex_session_test.dart: debug BMS feature probe reports 00 08 00 unsupported safely
00:00 +61: test/aidex_session_test.dart: debug BMS feature probe reports missing feature unavailable safely
00:00 +62: test/aidex_session_test.dart: debug BMS feature probe reports empty feature unavailable safely
00:00 +63: test/aidex_session_test.dart: debug BMS feature probe reports malformed feature unsupported safely
00:00 +64: test/aidex_session_test.dart: debug BMS feature probe reports read failure safely
00:00 +65: test/aidex_session_test.dart: debug BMS feature probe requires the asymmetric pair state
OGBLE setup=f005-unpaired
OGBLE setup=teardown-start
OGBLE setup=teardown-monitor-cleared
OGBLE setup=teardown-listeners-cleared
OGBLE setup=teardown-link-released
OGBLE setup=teardown-disconnect-start
OGBLE setup=teardown-disconnect-complete
OGBLE setup=handle-error-start
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=handle-error-complete
OGBLE setup=f005-paired
00:00 +66: test/aidex_session_test.dart: explicit transfer completes the requesting-device LE BMS flow
OGBLE setup=f005-unpaired
00:00 +67: test/aidex_session_test.dart: explicit transfer completes the all-LE BMS flow
OGBLE setup=f005-unpaired
00:00 +68: test/aidex_session_test.dart: accepted-state persistence failure disconnects without local removal
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +69: test/aidex_session_test.dart: transfer revalidates the BMS feature before its one write
OGBLE setup=f005-unpaired
00:00 +70: test/aidex_session_test.dart: ambiguous BMS write is terminal and never removes or retries
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +71: test/aidex_session_test.dart: accepted transfer never removes local bond before disconnect success
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +72: test/aidex_session_test.dart: accepted transfer reports local removal failure without a resend
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +73: test/aidex_session_test.dart: accepted transfer verifies Android removed the local bond
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +74: test/aidex_session_test.dart: non-Android setup and transfer do not read F005 or BMS
00:00 +75: test/aidex_session_test.dart: connection-state stream errors become safe session errors
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +76: test/aidex_session_test.dart: disconnect events expose safe structured recovery metadata
OGBLE setup=f005-unpaired
00:00 +77: test/aidex_session_test.dart: disconnect after pairing error preserves non-retryable failure
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +78: test/aidex_session_test.dart: notification stream errors become safe session errors
OGBLE setup=f005-unpaired
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
OGBLE setup=error-snapshot-set-start
OGBLE setup=error-snapshot-broadcast-start
OGBLE setup=error-snapshot-broadcast-complete
OGBLE setup=error-snapshot-set-complete
00:00 +79: All tests passed!
==> openhealth: test-unit
00:00 +0: loading /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart
00:00 +0: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettings serialization defaults are AI-off
00:00 +1: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettings serialization round-trips through encode/decode and never holds a key
00:00 +2: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettings serialization decode falls back to defaults on corrupt input
00:00 +3: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController stores key in secure storage, not in preferences
00:00 +4: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController iOS keys stay on this device and never synchronize
00:00 +5: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController empty key write deletes the stored key
00:00 +6: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +7: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +8: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +9: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +10: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +11: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +12: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +13: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +14: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +15: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +15: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: user-action BLE failure does not auto-retry or archive an unverified sensor
OGBLE ui=error-snapshot-received
OGBLE ui=error-snapshot-notified
00:00 +16: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +16: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: terminal P02 snapshot survives forced freshness during listener attachment
OGBLE ui=error-snapshot-reconciled
00:00 +17: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +17: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: attached terminal P02 snapshot blocks forced freshness
OGBLE ui=error-snapshot-received
OGBLE ui=error-snapshot-notified
00:00 +18: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Ad 8000 vanced is expanded
00:00 +18: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: refresh transition to P02 error cannot start history sync
OGBLE ui=error-snapshot-received
OGBLE ui=error-snapshot-notified
00:00 +19: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +19: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unclassified initial BLE setup failure does not auto-retry
OGBLE ui=error-snapshot-received
OGBLE ui=error-snapshot-notified
00:00 +20: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +21: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +22: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +23: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +24: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +25: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +26: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +27: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/ai/ai_settings_test.dart: AiSettingsStore + AiController cloud controls stay hidden until Advanced is expanded
00:00 +28: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/dashboard_chart_test.dart: shows multi-day timeframe controls for long history
00:00 +29: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/dashboard_chart_test.dart: shows multi-day timeframe controls for long history
00:00 +30: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +31: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +32: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +33: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +34: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +35: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +36: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +37: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +38: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +39: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +40: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +41: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +42: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +43: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +44: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unverified disconnect exposes manual BLE recovery actions
00:00 +45: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +46: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +47: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +47: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: activation-required state clears selection without creating an archive
OGBLE ui=error-snapshot-received
00:00 +48: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +49: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +50: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +51: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +52: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +53: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +54: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:00 +55: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +56: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +57: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +58: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +59: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +60: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +61: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +62: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +63: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +64: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/expired_sensor_archive_test.dart: expired persisted sensor is archived instead of restored as active
00:01 +65: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +66: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +67: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +68: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +69: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +70: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +71: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +72: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +73: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +74: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +75: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +76: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +77: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +78: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +79: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +80: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:01 +81: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +82: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +83: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +84: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +85: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +86: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +87: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +88: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +89: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +90: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +91: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +92: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: surfaces a debounced history persistence failure
00:02 +93: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +94: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +95: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +96: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +97: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +98: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +99: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +100: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +101: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +102: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +103: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/home_archive_feedback_test.dart: home keeps only compact expiry while Current sensor owns lifecycle card
00:02 +104: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +105: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +106: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +107: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +108: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +109: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +110: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +111: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +112: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +113: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +114: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +115: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +116: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +117: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +118: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +119: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +120: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +121: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +122: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +123: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +124: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +125: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +126: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +127: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +128: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +129: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +130: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +131: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +132: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +133: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +134: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +135: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +136: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +137: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +138: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +139: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +140: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +141: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +142: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +143: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +144: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +145: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:03 +146: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:04 +147: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:04 +148: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: a history write does not clear an unrelated deletion failure
00:04 +149: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +150: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +151: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +152: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +153: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +154: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +155: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +156: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +157: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +158: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +159: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +160: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +161: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +162: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +163: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +164: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +165: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/onboarding_test.dart: OnboardingFlow flows through all screens, picks a range, and finishes
00:04 +166: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sample_dashboard_test.dart: sample dashboard is explicit and leaves production state untouched
00:04 +167: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sample_dashboard_test.dart: sample dashboard is explicit and leaves production state untouched
00:04 +168: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sample_dashboard_test.dart: sample dashboard is explicit and leaves production state untouched
00:04 +169: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sample_dashboard_test.dart: sample dashboard is explicit and leaves production state untouched
00:04 +170: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unknown sensor transfer outcome stays selected and is privacy safe
00:04 +171: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unknown sensor transfer outcome stays selected and is privacy safe
00:04 +172: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unknown sensor transfer outcome stays selected and is privacy safe
00:04 +173: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: unknown sensor transfer outcome stays selected and is privacy safe
00:04 +174: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +175: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +176: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +177: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +178: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +179: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +180: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +181: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +182: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active sc 8000 enario shows lifecycle, %-used, and time remaining
00:04 +183: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +184: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +185: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +186: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +187: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +188: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +189: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +190: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +191: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +192: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +193: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +194: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +195: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +196: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +197: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +198: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +199: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:04 +200: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +201: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +202: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +203: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +204: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +205: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +206: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +207: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +208: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +209: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/sensor_lifecycle_card_test.dart: active scenario shows lifecycle, %-used, and time remaining
00:05 +210: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +211: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +212: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +213: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +214: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +215: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +216: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +217: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +218: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +219: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +220: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +221: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +222: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +223: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +224: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +225: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +226: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +227: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +228: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:05 +229: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:06 +230: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: accepted transfer tombstone blocks reconnect after process death
00:06 +231: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/weekly_recap_screen_test.dart: shows empty state when no readings
00:06 +232: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: normal disconnect cannot interrupt an executing transfer
00:06 +233: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: normal disconnect cannot interrupt an executing transfer
00:06 +234: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: normal disconnect cannot interrupt an executing transfer
00:06 +235: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: transfer confirmation cannot target a replacement session
00:06 +236: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: orphan unknown marker stays fail closed without a clear action
00:06 +237: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: BLE support copy action is private-build gated
00:06 +238: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: BLE support copy action is private-build gated
OGBLE ui=error-snapshot-reconciled
00:07 +239: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: BLE support copy action is private-build gated
00:07 +240: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/app_controller_persistence_test.dart: normal disconnect never invokes sensor bond transfer
00:07 +241: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: advanced settings route exposes the scenario picker
00:07 +242: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: demo driver renders scan results and dashboard
00:08 +243: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: warmup hides every history-derived dashboard section
00:08 +244: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: demo mode never reads or overwrites a real saved sensor
00:08 +245: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: Android sensor move locks Disconnect until the transfer ends
00:08 +246: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: restored accepted move needs explicit Bluetooth acknowledgment
00:08 +247: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: orphan accepted move requires local confirmation before Connect
00:08 +248: /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/widget_test.dart: unknown move stays fail closed with support guidance
00:08 +249: All tests passed!
==> openhealth: discovered integration tests
test/integration/demo_lifecycle_test.dart
00:00 +0: loading /Users/fungus/dev/_worktrees/OpenGlucose/chore/gradle-9-compatible/openhealth/test/integration/demo_lifecycle_test.dart
00:00 +0: demo lifecycle scans, connects, refreshes, and disconnects
00:00 +1: All tests passed!
Java 17.0.2 matches the repository pin.
Running Gradle task 'assembleDebug'... 2,508ms
✓ Built build/app/outputs/flutter-apk/app-debug.apk
Compiling lib/main.dart for the Web...
Compiling lib/main.dart for the Web... 22.8s
✓ Built build/web
Java 17.0.2 matches the repository pin.
Android release signing guard failed closed as expected.
Xcode 26.6 and CocoaPods 1.16.2 match repository pins.
Warning: Building for device with codesigning disabled. You will have to manually codesign before deploying to device.
Building com.openglucose.app for device (ios-release)...
Running Xcode build...
Xcode build done. 3.2s
✓ Built build/ios/iphoneos/Runner.app (27.9MB)
Xcode 26.6 and CocoaPods 1.16.2 match repository pins.
Testing started
Test suite 'RunnerTests' started on 'Clone 1 of iPhone 17 Pro - Runner (62746)'
Test case 'RunnerTests.testFailedLegacySynchronizationBlocksInitialization()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.008 seconds)
Test case 'RunnerTests.testFailedMigrationPurgesDefaultsAndLeavesNoUnexcludedState()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.010 seconds)
Test case 'RunnerTests.testLegacyDefaultsArePurgedAndOnlyTargetIsMigrated()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.008 seconds)
Test case 'RunnerTests.testLegacyPayloadIsPurgedBeforeAStoredFileIsLoaded()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.008 seconds)
Test case 'RunnerTests.testNativeMutationsStayInVersionedBackupExcludedFile()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.010 seconds)
Test suite 'LiveActivityLockScreenRedactionTests' started on 'Clone 1 of iPhone 17 Pro - Runner (62746)'
Test case 'LiveActivityLockScreenRedactionTests.testLiveGlucoseRequiresExplicitSensitiveContentConsent()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.001 seconds)
Test case 'LiveActivityLockScreenRedactionTests.testMalformedWarmupPayloadFailsClosed()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.001 seconds)
Test case 'LiveActivityLockScreenRedactionTests.testWarmupCountdownSurvivesDefaultRedaction()' passed on 'Clone 1 of iPhone 17 Pro - Runner (62746)' (0.001 seconds) (full repository gate)
Compatibility
Gradle's compatibility matrix tests Gradle 9.7 with AGP 9.0 through 9.4. The temporary flags are scoped to the current Flutter migration gap and should be removed when the pinned Flutter toolchain and plugins no longer use the legacy APIs.
Supersedes #61.