Repository navigation
Daily analytics summary, settings state and device models - #2588
Conversation
Backport of #2574, #2578 and #2582 from next-dev. - Replace the per-cycle "Loop success", "Loop error" and "CGM Fetch" events with one "Daily summary" per local day: loop success count and mean/max duration, loop error counts by issue id, the count of stored CGM readings, the day's UTC offset, and the settings state (closed loop, dosing strategy, integral retrospective correction, glucose based partial application). Running totals are kept in UserDefaults and the summary is sent on the first loop or CGM reading of the next day. - Send that settings state as user properties at launch and whenever it changes, with "Closed loop enabled change", "Dosing strategy change" and "Algorithm experiment change" events. Also send Pump Type and CGM Type at launch, and set them to "None" when the device is removed. - Send Pump Model and CGM Model user properties from the managers' HKDevice.model at setup and launch, and when a status update reports a different model. - Stop sending health data: drop bolus units and carb grams, and send only the kind of override, and its duration, not preset names, targets or sensitivity. - Send "Override Ended" when a preset is deactivated and "Settings Screen" when Settings opens. - Carb and bolus events from the phone are now in session; from the watch and remote commands they stay out of session. - Replace "Alert Issued" with "Alert Displayed": immediate alerts when issued, delayed and repeating alerts after a loop once they have come due without being retracted, and loop-not-running notifications when Loop infers their delivery. dev's glucose samples don't record backfill, so the summary counts CGM readings but has no backfill counts. The summary and state are updated on the main queue, since dev reports loops and readings from other queues.
marionbarker
left a comment
There was a problem hiding this comment.
I rely on others for code review.
✅ successful build using Xcode 27 onto iOS 27.0.1 SE 3rd gen phone
❓ successful test local clone to iOS 26.5 simulator
❓ successful test local clone to iOS 27 simulator
Sometimes this test failed. Other times it did not.
testRescheduleMutedLoopNotLoopingAlerts
Failure was on the XCTAssertNil for line 509 of LoopTests/Managers/Alerts/AlertManagerTests.swift.
|
Thanks for testing, Marion. The intermittent It uses the simulator's real notification center, and it reads the pending notifications once, without waiting for the muted versions to replace the unmuted ones. When the simulator has been idle for a while, the notification service is slow on the first run, so the test can read the list too early and fail. It usually passes on later runs. I'll open a separate PR to make the test wait for the muted notifications. |
marionbarker
left a comment
There was a problem hiding this comment.
Approve since intermittent test issue will be solved in a different PR.
Backport of #2574, #2578 and #2582 from next-dev. dev's code had diverged, so this is a hand port in one commit rather than cherry-picks.
Differences from next-dev
glucoseCountbut nobackfillCountormaxBackfillAgeMinutes.@MainActor.Testing
testLookupScheduledAlertsDue, ported from next-dev.