Skip to content

Negative interrupted bolus #2322

Closed
Closed

Description

@rsammelson

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.

Screenshots
image

Phone

  • Hardware: iPhone 16 Pro
  • OS Version: iOS 18.5 (22F76)

Loop Version

Pump

  • Manufacturer: Omnipod
  • Model: DASH
  • Firmware version: 11.7.0

Additional context
Pump event:

10:48

Bolus

DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:48:18 +0000, endDate: 2025-06-29 14:48:53 +0000, value: 0.6499999999999999, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(-1.2000000000000002), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(false), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e3634393939393939393939393939393920323032352d30362d32395431343a34383a31385a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)

626f6c757320302e3634393939393939393939393939393920323032352d30362d32395431343a34383a31385a

Activity

  1. marionbarker commented on Jun 29, 2025

    @marionbarker
    Contributor

    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.

  2. rsammelson commented on Jun 29, 2025

    @rsammelson
    Author

    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

    • myId: 1793E610
    • podId: 1793E613
      delegate: true

    statusObservers.count: 1
    status: ## PumpManagerStatus

    • timeZone: GMT (-14400)
    • device: <<HKDevice: 0x1344bf250>, name:Omnipod-Dash, manufacturer:Insulet, model:Dash, software:1.0>
    • pumpBatteryChargeRemaining: nil
    • basalDeliveryState: Optional(LoopKit.PumpManagerStatus.BasalDeliveryState.active(0001-01-01 00:00:00 +0000))
    • bolusState: noBolus
    • insulinType: Optional(LoopKit.InsulinType.fiasp)
    • deliveryIsUncertain: false

    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

    ...

    • 2025-06-29 14:34:07 +0000 Omnipod-Dash 1793E612 connection Pod connected E5A9435F-AE89-6616-D58C-4AE58DE378CA
    • 2025-06-29 14:34:08 +0000 Omnipod-Dash 1793E612 send 1793e6121c030e01078101
    • 2025-06-29 14:34:08 +0000 Omnipod-Dash 1793E612 receive 1793e612200a1d190506a8010046c00081f3
    • 2025-06-29 14:34:33 +0000 G7CGMManager DXCMn7 connection Sensor connected
    • 2025-06-29 14:34:34 +0000 G7CGMManager DXCMn7 receive Sensor didRead G7GlucoseMessage(glucose:Optional(94), sequence:2087 glucoseIsDisplayOnly:false state:ok messageTimestamp:625442 age:3, data:4e00228b09002708000103005e0006fe55000f)
    • 2025-06-29 14:34:34 +0000 G7CGMManager DXCMn7 receive Sensor comms 320001770000000000000000000101000d010000
    • 2025-06-29 14:34:34 +0000 G7CGMManager DXCMn7 receive Sensor comms ea0003010200000000620000004dffffff
    • 2025-06-29 14:34:34 +0000 Omnipod-Dash 1793E612 send 1793e61224201a0e494e532e01007901384000000000160e000000016b49d2000001eb49d20003fd
    • 2025-06-29 14:34:35 +0000 Omnipod-Dash 1793E612 receive 1793e612280a1d290506c8010046c0008292
    • 2025-06-29 14:34:46 +0000 G7CGMManager DXCMn7 connection Sensor disconnected: suspectedEndOfSession=false
    • 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:37:53 +0000 Omnipod-Dash 1793E612 send 1793e61228030e010780b0
    • 2025-06-29 14:37:54 +0000 Omnipod-Dash 1793E612 receive 1793e6122c0a1d290506c8010046d000832b
    • 2025-06-29 14:39:36 +0000 G7CGMManager DXCMn7 connection Sensor connected
    • 2025-06-29 14:39:36 +0000 G7CGMManager DXCMn7 receive Sensor didRead G7GlucoseMessage(glucose:Optional(90), sequence:2088 glucoseIsDisplayOnly:false state:ok messageTimestamp:625745 age:6, data:4e00518c09002808000106005a0006fa55000f)
    • 2025-06-29 14:39:36 +0000 G7CGMManager DXCMn7 receive Sensor comms 320001770000000000000000000101000d010000
    • 2025-06-29 14:39:36 +0000 G7CGMManager DXCMn7 receive Sensor comms ea0003010200000000620000004dffffff
    • 2025-06-29 14:39:40 +0000 G7CGMManager DXCMn7 connection Sensor disconnected: suspectedEndOfSession=false
    • 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:41:12 +0000 Omnipod-Dash 1793E612 send 1793e6122c030e010701bb
    • 2025-06-29 14:41:12 +0000 Omnipod-Dash 1793E612 receive 1793e612300a1d290506c8010046dc0083cd
    • 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:44:46 +0000 G7CGMManager DXCMn7 connection Sensor connected
    • 2025-06-29 14:44:48 +0000 G7CGMManager DXCMn7 receive Sensor didRead G7GlucoseMessage(glucose:Optional(95), sequence:2089 glucoseIsDisplayOnly:false state:ok messageTimestamp:626057 age:18, data:4e00898d09002908000112005f00060059000f)
    • 2025-06-29 14:44:48 +0000 G7CGMManager DXCMn7 receive Sensor comms 320001770000000000000000000101000d010000
    • 2025-06-29 14:44:49 +0000 G7CGMManager DXCMn7 receive Sensor comms ea0003010200000000620000004dffffff
    • 2025-06-29 14:44:49 +0000 G7CGMManager DXCMn7 connection Sensor disconnected: suspectedEndOfSession=false
    • 2025-06-29 14:46:17 +0000 Omnipod-Dash 1793E612 connection Pod connected E5A9435F-AE89-6616-D58C-4AE58DE378CA
    • 2025-06-29 14:46:17 +0000 Omnipod-Dash 1793E612 send 1793e61230030e01070096
    • 2025-06-29 14:46:18 +0000 Omnipod-Dash 1793E612 receive 1793e612340a1d290506c8010046f00082d7
    • 2025-06-29 14:48:03 +0000 Omnipod-Dash 1793E612 send 1793e61234030e0107819d
    • 2025-06-29 14:48:03 +0000 Omnipod-Dash 1793E612 receive 1793e612380a1d290506c8010046f8008388
    • 2025-06-29 14:48:17 +0000 Omnipod-Dash 1793E612 send 1793e6123c1f1a0e494e532e02008801032000320032170d0001f400030d4000000000000081e6
    • 2025-06-29 14:48:17 +0000 Omnipod-Dash 1793E612 receive 1793e612000a1d690506f8320046f8000139
    • 2025-06-29 14:48:19 +0000 Omnipod-Dash 1793E612 send 1793e61200030e0107802c
    • 2025-06-29 14:48:20 +0000 Omnipod-Dash 1793E612 receive 1793e612040a1d69050778310046f800830b
    • 2025-06-29 14:48:34 +0000 Omnipod-Dash 1793E612 send 1793e61204030e01070127
    • 2025-06-29 14:48:34 +0000 Omnipod-Dash 1793E612 receive 1793e612080a1d69050af82a0046f80082a6
    • 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
    • 2025-06-29 14:48:53 +0000 Omnipod-Dash 1793E612 send 1793e6120c071f05494e532e070375
    • 2025-06-29 14:48:54 +0000 Omnipod-Dash 1793E612 receive 1793e61210180216020d0000250f0a1a1811be000011bf0000190000430f8303
    • 2025-06-29 14:48:54 +0000 Omnipod-Dash 1793E612 send 1793e61210030e01070304
    • 2025-06-29 14:48:54 +0000 Omnipod-Dash 1793E612 receive 1793e61214180216020d0000250f0a1a1811be000011bf00001900000f438010
    • 2025-06-29 14:48:59 +0000 Omnipod-Dash 1793E612 send 1793e61218030e015081fb
    • 2025-06-29 14:48:59 +0000 Omnipod-Dash 1793E612 receive 1793e6121ccd02cb500a1a44312d00497437004c712c005131370054302d00597539805c722f8061713a8000312e8005303a8008312c800d73368010312d801530358018302e801d75380020712d002573390028302f002d743a003070300035303b0038722f003d73390040302e004573380048752e004d72390050702d0055303a00587231805d753d806072328001723f8004723580097140800c30328011753f8014723280197240801c72318021723d0024733400297241002c7236003173420034723600397242003c733500417141008381
    • 2025-06-29 14:48:59 +0000 Omnipod-Dash 1793E612 send 1793e61220030e0151824a
    • 2025-06-29 14:49:00 +0000 Omnipod-Dash 1793E612 receive 1793e61224cd02cb51003244732a00497332004c702a005131310054742900597332805c732a806172338000732a8005713480083129800d74328010722b801572308018732b801d72330020722c002573340028702e002d30330030722b003574320038732b003d73320040722b0045733100487129004d31310050752a005573340058732b805d72358060732b800171358004302a80093132800c742b801173328014712980197432801c7229802172310024712b00293033002c722b003172350034312b00397336003c302d004172380081d0
    • 2025-06-29 14:49:00 +0000 Omnipod-Dash 1793E612 send 1793e61228061c04494e532e0143
    • 2025-06-29 14:49:01 +0000 Omnipod-Dash 1793E612 receive 1793e6122c180216020f0000250a0a1a1811be000011bf000019005429740222
    • 2025-06-29 14:49:01 +0000 Omnipod-Dash 1793E612 connection Pod disconnected E5A9435F-AE89-6616-D58C-4AE58DE378CA nil
    • 2025-06-29 14:49:33 +0000 G7CGMManager DXCMn7 connection Sensor connected
    • 2025-06-29 14:49:34 +0000 G7CGMManager DXCMn7 receive Sensor didRead G7GlucoseMessage(glucose:Optional(89), sequence:2090 glucoseIsDisplayOnly:false state:ok messageTimestamp:626342 age:3, data:4e00a68e09002a0800010300590006fc51000f)
    • 2025-06-29 14:49:34 +0000 G7CGMManager DXCMn7 receive Sensor comms 320001770000000000000000000101000d010000
    • 2025-06-29 14:49:34 +0000 G7CGMManager DXCMn7 receive Sensor comms ea0003010200000000620000004dffffff
    • 2025-06-29 14:49:42 +0000 G7CGMManager DXCMn7 connection Sensor disconnected: suspectedEndOfSession=false
      ...

    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

    • Reservoir(startDate, unitVolume)
    • 2025-06-29 09:03:26 +0000, 0.0
    • 2025-06-29 08:57:53 +0000, 0.45
    • 2025-06-29 08:48:00 +0000, 0.5
    • 2025-06-29 08:43:35 +0000, 0.8
      ...

    getPumpEventValues

    • PersistedPumpEvent(date: 2025-06-29 14:48:54 +0000, persistedDate: 2025-06-29 14:48:54 +0000, dose: Optional(LoopKit.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: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)), isUploaded: false, objectIDURL: x-coredata://A438C5F8-3235-4E1F-9E32-E2F64995DE20/PumpEvent/p52018, raw: Optional(32 bytes), title: Optional("Suspend"), type: Optional(LoopKit.PumpEventType.suspend), automatic: nil, alarmType: nil)
    • PersistedPumpEvent(date: 2025-06-29 14:48:18 +0000, persistedDate: 2025-06-29 14:48:54 +0000, dose: Optional(LoopKit.DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:48:18 +0000, endDate: 2025-06-29 14:48:53 +0000, value: 0.6499999999999999, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(-1.2000000000000002), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(false), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e3634393939393939393939393939393920323032352d30362d32395431343a34383a31385a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)), isUploaded: false, objectIDURL: x-coredata://A438C5F8-3235-4E1F-9E32-E2F64995DE20/PumpEvent/p52020, raw: Optional(45 bytes), title: Optional("Bolus"), type: Optional(LoopKit.PumpEventType.bolus), automatic: Optional(false), alarmType: nil)
    • PersistedPumpEvent(date: 2025-06-29 14:34:34 +0000, persistedDate: 2025-06-29 14:48:54 +0000, dose: Optional(LoopKit.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)), isUploaded: false, objectIDURL: x-coredata://A438C5F8-3235-4E1F-9E32-E2F64995DE20/PumpEvent/p52019, raw: Optional(34 bytes), title: Optional("Temp Basal"), type: Optional(LoopKit.PumpEventType.tempBasal), automatic: Optional(true), alarmType: nil)
    • PersistedPumpEvent(date: 2025-06-29 14:30:33 +0000, persistedDate: 2025-06-29 14:30:44 +0000, dose: Optional(LoopKit.DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:30:33 +0000, endDate: 2025-06-29 14:30:44 +0000, value: 0.3, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(0.25), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(false), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e3320323032352d30362d32395431343a33303a33335a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)), isUploaded: false, objectIDURL: x-coredata://A438C5F8-3235-4E1F-9E32-E2F64995DE20/PumpEvent/p52006, raw: Optional(30 bytes), title: Optional("Bolus"), type: Optional(LoopKit.PumpEventType.bolus), automatic: Optional(false), alarmType: nil)
    • PersistedPumpEvent(date: 2025-06-29 14:29:36 +0000, persistedDate: 2025-06-29 14:30:11 +0000, dose: Optional(LoopKit.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: Optional(0.05), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e303520323032352d30362d32395431343a32393a33365a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)), isUploaded: false, objectIDURL: x-coredata://A438C5F8-3235-4E1F-9E32-E2F64995DE20/PumpEvent/p52002, raw: Optional(31 bytes), title: Optional("Bolus"), type: Optional(LoopKit.PumpEventType.bolus), automatic: Optional(true), alarmType: nil)
    • PersistedPumpEvent(date: 2025-06-29 14:19:36 +0000, persistedDate: 2025-06-29 14:29:35 +0000, dose: Optional(LoopKit.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)), isUploaded: false, objectIDURL: x-coredata://A438C5F8-3235-4E1F-9E32-E2F64995DE20/PumpEvent/p52000, raw: Optional(34 bytes), title: Optional("Temp Basal"), type: Optional(LoopKit.PumpEventType.tempBasal), automatic: Optional(true), alarmType: nil)
      ...

    getNormalizedDoseEntries

    ...

    • DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:09:38 +0000, endDate: 2025-06-29 14:09:44 +0000, value: 0.15, unit: LoopKit.DoseUnit.units, deliveredUnits: nil, description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e313520323032352d30362d32395431343a30393a33385a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
    • 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: Optional(0.3 IU/hr))
    • 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: Optional(0.3 IU/hr))
    • 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 15:36:36 +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: Optional(0.3 IU/hr))

    getPumpEventDoseEntriesForSavingToInsulinDeliveryStore

    ...

    • DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 13:59:35 +0000, endDate: 2025-06-29 13:59:37 +0000, value: 0.05, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(0.05), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e303520323032352d30362d32395431333a35393a33355a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
    • DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:04:36 +0000, endDate: 2025-06-29 14:04:38 +0000, value: 0.05, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(0.05), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e303520323032352d30362d32395431343a30343a33365a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
    • DoseEntry(type: LoopKit.DoseType.bolus, startDate: 2025-06-29 14:09:38 +0000, endDate: 2025-06-29 14:09:44 +0000, value: 0.15, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(0.15), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e313520323032352d30362d32395431343a30393a33385a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
    • DoseEntry(type: LoopKit.DoseType.basal, startDate: 2025-06-29 12:44:40 +0000, endDate: 2025-06-29 13:39:35 +0000, value: 0.3, unit: LoopKit.DoseUnit.unitsPerHour, deliveredUnits: nil, description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("BasalRateSchedule 2025-06-29T12:44:40Z 2025-06-29T13:39:35Z"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: Optional(0.3 IU/hr))
    • DoseEntry(type: LoopKit.DoseType.tempBasal, startDate: 2025-06-29 13:39:35 +0000, endDate: 2025-06-29 13:59:34 +0000, value: 0.1, unit: LoopKit.DoseUnit.unitsPerHour, deliveredUnits: Optional(0.0), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("74656d70426173616c20302e303520323032352d30362d32395431333a33393a33355a"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: nil)
    • 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: Optional(0.05), 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.3, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(0.25), 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.basal, startDate: 2025-06-29 13:59:34 +0000, endDate: 2025-06-29 14:19:36 +0000, value: 0.3, unit: LoopKit.DoseUnit.unitsPerHour, deliveredUnits: nil, description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(true), manuallyEntered: false, syncIdentifier: Optional("BasalRateSchedule 2025-06-29T13:59:34Z 2025-06-29T14:19:36Z"), isMutable: false, wasProgrammedByPumpUI: false, scheduledBasalRate: Optional(0.3 IU/hr))
    • 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.bolus, startDate: 2025-06-29 14:48:18 +0000, endDate: 2025-06-29 14:48:53 +0000, value: 0.6499999999999999, unit: LoopKit.DoseUnit.units, deliveredUnits: Optional(-1.2000000000000002), description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), automatic: Optional(false), manuallyEntered: false, syncIdentifier: Optional("626f6c757320302e3634393939393939393939393939393920323032352d30362d32395431343a34383a31385a"), 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.3, unit: LoopKit.DoseUnit.unitsPerHour, deliveredUnits: nil, description: nil, insulinType: Optional(LoopKit.InsulinType.fiasp), 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.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.3, unit: LoopKit.DoseUnit.unitsPerHour, 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)

    getManuallyEnteredDoses

    InsulinDeliveryStore

    • cacheLength: 604800.0
    • HealthKitSampleStore: * observerQuery: Optional()
    • observationStart: 2025-06-27 15:42:07 +0000
    • observationEnabled: true
    • authorizationRequired: false
    • lastImmutableBasalEndDate: Optional(2025-06-29 14:48:54 +0000)

    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)

  3. rsammelson commented on Jun 29, 2025

    @rsammelson
    Author

    Is there a link/commit for the proposed fix?

  4. marionbarker commented on Jun 29, 2025

    @marionbarker
    Contributor

    Please just drag the report into a comment as an enclosure.

  5. itsmojo commented on Jun 29, 2025

    @itsmojo
    Contributor

    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.

  6. rsammelson commented on Jun 29, 2025

    @rsammelson
    Author

    @itsmojo would the correct display be "Interrupted Bolus: 0.65 of 2.5 U" or "Bolus: 0.65 U"?

  7. itsmojo commented on Jun 30, 2025

    @itsmojo
    Contributor

    This particular bolus should have been displayed as "Interrupted Bolus: 0.65 of 2.5 U".

  8. marionbarker commented on Jul 10, 2025

    @marionbarker
    Contributor

    close with fix provided in Loop release v3.6.3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions