You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
This morning a manual bolus was interrupted by an empty reservoir, but the entry left in the bolus history shows that -1.2 units were delivered. I believe the requested bolus was originally around 2 units, so I think the requested bolus amount showing 0.65 U may also be incorrect.
Attach an Issue Report
Let me know if this would be useful.
To Reproduce
No reproduction available at this time.
Expected behavior
Negative insulin quantities can never be delivered.
I only deactivated the pod, although due to #2318 that took multiple tries. On one of the tries Loop gave an alert that the pod reservoir empty alarm occurred, but failed to deactivate the pod, and I had to try a couple more times before the pod successfully deactivated.
I believe these are the relevant parts of the report, let me know if I missed anything:
2025-06-29 14:37:35 +0000 Omnipod-Dash 1793E612 connection Pod disconnected E5A9435F-AE89-6616-D58C-4AE58DE378CA Optional(Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us." UserInfo={NSLocalizedDescription=The specified device has disconnected from us.})
2025-06-29 14:37:53 +0000 Omnipod-Dash 1793E612 connection Pod connected E5A9435F-AE89-6616-D58C-4AE58DE378CA
2025-06-29 14:40:54 +0000 Omnipod-Dash 1793E612 connection Pod disconnected E5A9435F-AE89-6616-D58C-4AE58DE378CA Optional(Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us." UserInfo={NSLocalizedDescription=The specified device has disconnected from us.})
2025-06-29 14:41:11 +0000 Omnipod-Dash 1793E612 connection Pod connected E5A9435F-AE89-6616-D58C-4AE58DE378CA
2025-06-29 14:44:12 +0000 Omnipod-Dash 1793E612 connection Pod disconnected E5A9435F-AE89-6616-D58C-4AE58DE378CA Optional(Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us." UserInfo={NSLocalizedDescription=The specified device has disconnected from us.})
2025-06-29 14:48:44 +0000 Omnipod-Dash 1793E612 connection Pod disconnected E5A9435F-AE89-6616-D58C-4AE58DE378CA Optional(Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us." UserInfo={NSLocalizedDescription=The specified device has disconnected from us.})
2025-06-29 14:48:53 +0000 Omnipod-Dash 1793E612 connection Pod connected E5A9435F-AE89-6616-D58C-4AE58DE378CA
There was a 2.5U bolus started at 14:48:17 and a pod empty fault return from a cancel all done at 14:48:54 which had 1.85U bolus not delivered. Because of some currently flawed logic handling pod faults with bolus remaining, the 1.85U bolus remaining was incorrectly subtracted twice: once making the 2.5U bolus an actual interrupted 0.65U bolus (which was correct), but with the second inappropriate adjustment this became 0.65U - 1.85U = -1.2U (obviously incorrect). This type of mishandling should definitely be handled with the "Fixes to handle unacknowledged command with pod faults correctly" changes.
Activity
marionbarker commentedon Jun 29, 2025
Please post your Loop Report.
This is the second report of this type. The other was in Trio which uses the same pod manager.
Did you happen to interrupt the bolus upon hearing a screaming pod?
We have a proposed fix for this that I need to test and make into a PR. Tagging @itsmojo.
rsammelson commentedon Jun 29, 2025
I only deactivated the pod, although due to #2318 that took multiple tries. On one of the tries Loop gave an alert that the pod reservoir empty alarm occurred, but failed to deactivate the pod, and I had to try a couple more times before the pod successfully deactivated.
I believe these are the relevant parts of the report, let me know if I missed anything:
OmniBLEPumpManager
provideHeartbeat: false
connected: false
podComms: ## PodComms
delegate: true
statusObservers.count: 1
status: ## PumpManagerStatus
podStateObservers.count: 1
state: ## OmniBLEPumpManagerState
isOnboarded: true
timeZone: GMT (-14400)
basalSchedule: BasalSchedule(entries: [OmniBLE.BasalScheduleEntry(rate: 0.3, startTime: 0.0)])
maximumTempBasalRate: 1.45
unstoredDoses: []
suspendEngageState: stable
bolusEngageState: stable
tempBasalEngageState: stable
lastPumpDataReportDate: Optional(2025-06-29 14:48:54 +0000)
isPumpDataStale: true
silencePod: false
confirmationBeeps: silent
controllerId: 1793E610
podId: 1793E613
insulinType: Optional(LoopKit.InsulinType.fiasp)
scheduledExpirationReminderOffset: Optional("2h")
defaultExpirationReminderOffset: 2h
lowReservoirReminderValue: 8.0
podAttachmentConfirmed: false
activeAlerts: []
alertsWithPendingAcknowledgment: []
acknowledgedTimeOffsetAlert: false
initialConfigurationCompleted: true
PodState: nil
PreviousPodState: ### PodState
address: 1793E612
bleIdentifier: E5A9435F-AE89-6616-D58C-4AE58DE378CA
activatedAt: Optional(2025-06-26 11:05:04 +0000)
expiresAt: Optional(2025-06-29 11:05:54 +0000)
podTime: 75h43m
podTimeUpdated: Optional(2025-06-29 14:48:54 +0000)
setupUnitsDelivered: 2.75 U
firmwareVersion: 11.7.0
bleFirmwareVersion: 1.6.0
lotNo: 140056721
lotSeq: 1000387
suspendState: suspended(2025-06-29 14:48:54 +0000)
unacknowledgedCommand: nil
unfinalizedBolus: nil
unfinalizedTempBasal: nil
unfinalizedSuspend: Optional(Suspend: 2025-06-29, 10:48:54 Certain)
unfinalizedResume: Optional(Resume: 2025-06-26, 07:09:40 Certain)
finalizedDoses: []
activeAlertsSlots: No alerts
delivered: 126.55 U
reservoirLevel: 0.00 U
messageTransportState: ## MessageTransportState
eapSeq: 989
msgSeq: 13
nonceSeq: 15
messageNumber: 12
setupProgress: completed
primeFinishTime: Optional(2025-06-26 11:06:59 +0000)
configuredAlerts: Low reservoir @ 8U, Pod expired @ 72h, Shutdown imminent @ 79h, Expiration reminder @ 70h
insulinType: fiasp
pdmRef: 14-02575-12900-024
Fault: ## DetailedStatus
rawHex: 020d0000250f0a1a1811be000011bf0000190000430f
podProgressStatus: Fault event occurred
deliveryStatus: Suspended
bolusNotDelivered: 1.85 U
lastProgrammingMessageSeqNum: 15
totalInsulinDelivered: 129.30 U
reservoirLevel: 0.00 U
timeActive: 75h43m
unacknowledgedAlerts: No alerts
faultEventCode: Fault Event Code 0x18: Reservoir empty or exceeded maximum pulse delivery
faultAccessingTables: false
faultEventTimeSinceActivation: 75h42m
errorEventInfo: rawValue: 0x19, insulinStateTableCorruption: false, occlusionType: 0, immediateBolusInProgress: true, podProgressStatus: Low reservoir
previousPodProgressStatus: Low reservoir
possibleFaultCallingAddress: 0x430f
Device Communication Log
...
...
DoseStore
insulinModelProvider: LoopKit.PresetInsulinModelProvider(defaultRapidActingModel: nil)
basalProfile: ["items": [["value": 0.3, "startTime": 0.0]], "timeZone": -14400]
basalProfileApplyingOverrideHistory ["items": [["value": 0.3, "startTime": 0.0]], "timeZone": -14400]
insulinSensitivitySchedule: ["items": [["value": 50.0, "startTime": 0.0]], "unit": "mg/dL", "timeZone": -14400]
insulinSensitivityScheduleApplyingOverrideHistory ["items": [["value": 50.0, "startTime": 0.0]], "unit": "mg/dL", "timeZone": -14400]
overrideHistory: TemporaryScheduleOverrideHistory(recentEvents: [], taintedEventLog: [])
egpSchedule: ["items": [["value": 15.0, "startTime": 0.0]], "unit": "mg·IU/dL·hr", "timeZone": -14400]
areReservoirValuesValid: false
lastPumpEventsReconciliation: Optional(2025-06-29 14:48:54 +0000)
lastStoredReservoirValue: Optional(LoopKit.StoredReservoirValue(startDate: 2025-06-29 09:03:26 +0000, unitVolume: 0.0, objectIDURL: x-coredata:///Reservoir/t7370F9E9-273A-47A0-881E-4D47E7772CCB51432))
pumpEventQueryAfterDate: 2025-06-29 14:48:54 +0000
lastRecordedPrimeEventDate: Optional(0001-01-01 00:00:00 +0000)
pumpRecordsBasalProfileStartEvents: false
device: Optional(<<HKDevice: 0x133495590>, name:Omnipod-Dash, manufacturer:Insulet, model:Dash, software:1.0>)
insulinOnBoard: InsulinValue(startDate: 2025-06-29 15:35:00 +0000, value: 0.058670502260874724)
getReservoirValues
...
getPumpEventValues
...
getNormalizedDoseEntries
...
getPumpEventDoseEntriesForSavingToInsulinDeliveryStore
...
getManuallyEnteredDoses
InsulinDeliveryStore
cachedDoseEntries
...
DoseEntry(type: LoopKit.DoseType.tempBasal, startDate: 2025-06-29 14:19:36 +0000, endDate: 2025-06-29 14:29:35 +0000, value: 0.0, unit: LoopKit.DoseUnit.unitsPerHour, deliveredUnits: Optional(0.0), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("74656d70426173616c20302e3020323032352d30362d32395431343a31393a33365a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
DoseEntry(type: LoopKit.DoseType.basal, startDate: 2025-06-29 14:29:35 +0000, endDate: 2025-06-29 14:34:34 +0000, value: 0.0, unit: LoopKit.DoseUnit.units, deliveredUnits: nil, description: nil, insulinType: nil, automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("BasalRateSchedule 2025-06-29T14:29:35Z 2025-06-29T14:34:34Z"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: Optional(0.3 IU/hr))
DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:29:36 +0000, endDate: 2025-06-29 14:29:38 +0000, value: 0.05, unit: LoopKit.DoseUnit.units, deliveredUnits: nil, description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e303520323032352d30362d32395431343a32393a33365a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:30:33 +0000, endDate: 2025-06-29 14:30:44 +0000, value: 0.25, unit: LoopKit.DoseUnit.units, deliveredUnits: nil, description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(false), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e3320323032352d30362d32395431343a33303a33335a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
DoseEntry(type: LoopKit.DoseType.tempBasal, startDate: 2025-06-29 14:34:34 +0000, endDate: 2025-06-29 14:48:53 +0000, value: 0.0, unit: LoopKit.DoseUnit.unitsPerHour, deliveredUnits: Optional(0.0), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("74656d70426173616c20302e3020323032352d30362d32395431343a33343a33345a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
DoseEntry(type: LoopKit.DoseType.basal, startDate: 2025-06-29 14:48:53 +0000, endDate: 2025-06-29 14:48:54 +0000, value: 0.0, unit: LoopKit.DoseUnit.units, deliveredUnits: nil, description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("BasalRateSchedule 2025-06-29T14:48:53Z 2025-06-29T14:48:54Z"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: Optional(0.3 IU/hr))
DoseEntry(type: LoopKit.DoseType.suspend, startDate: 2025-06-29 14:48:54 +0000, endDate: 2025-06-29 14:48:54 +0000, value: 0.0, unit: LoopKit.DoseUnit.units, deliveredUnits: nil, description: nil, insulinType: nil, automatic: nil, manuallyEntered: false, syncIdentifier: Optional("73757370656e6420302e3020323032352d30362d32395431343a34383a35345a"), isMutable: true, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
rsammelson commentedon Jun 29, 2025
Is there a link/commit for the proposed fix?
marionbarker commentedon Jun 29, 2025
Please just drag the report into a comment as an enclosure.
itsmojo commentedon Jun 29, 2025
There was a 2.5U bolus started at 14:48:17 and a pod empty fault return from a cancel all done at 14:48:54 which had 1.85U bolus not delivered. Because of some currently flawed logic handling pod faults with bolus remaining, the 1.85U bolus remaining was incorrectly subtracted twice: once making the 2.5U bolus an actual interrupted 0.65U bolus (which was correct), but with the second inappropriate adjustment this became 0.65U - 1.85U = -1.2U (obviously incorrect). This type of mishandling should definitely be handled with the "Fixes to handle unacknowledged command with pod faults correctly" changes.
rsammelson commentedon Jun 29, 2025
@itsmojo would the correct display be "Interrupted Bolus: 0.65 of 2.5 U" or "Bolus: 0.65 U"?
itsmojo commentedon Jun 30, 2025
This particular bolus should have been displayed as "Interrupted Bolus: 0.65 of 2.5 U".
marionbarker commentedon Jul 10, 2025
close with fix provided in Loop release v3.6.3.