Skip to content

Tidepool sync 2026-05-11#450

Open
loopkitdev wants to merge 68 commits into
LoopKit:devfrom
loopkitdev:tidepool-sync/2026-05-11
Open

Tidepool sync 2026-05-11#450
loopkitdev wants to merge 68 commits into
LoopKit:devfrom
loopkitdev:tidepool-sync/2026-05-11

Conversation

@loopkitdev
Copy link
Copy Markdown

@loopkitdev loopkitdev commented May 20, 2026

Refreshed Tidepool → DIY sync for the whole workspace, from the tidepool-sync/2026-05-11 branch. Supersedes and replaces the previous Tidepool merge PR (#213).

See Tidepool → LoopKit DIY Sync — 2026-03-10 and Tidepool → LoopKit DIY Sync — 2026-05-11 for more details

Submodule gitlinks currently point at the unmerged per-repo tidepool-sync/2026-05-11 branches. They will be updated to the merged commits as each submodule PR below lands.

Submodule PRs

Repo PR Base
Loop LoopKit/Loop#2438 dev
LoopKit LoopKit/LoopKit#591 dev
CGMBLEKit LoopKit/CGMBLEKit#213 dev
dexcom-share-client-swift LoopKit/dexcom-share-client-swift#53 dev
RileyLinkKit LoopKit/RileyLinkKit#15 dev
NightscoutService LoopKit/NightscoutService#24 dev
LoopOnboarding LoopKit/LoopOnboarding#34 dev
AmplitudeService LoopKit/AmplitudeService#30 dev
LogglyService LoopKit/LogglyService#27 dev
OmniBLE LoopKit/OmniBLE#169 dev
NightscoutRemoteCGM LoopKit/NightscoutRemoteCGM#33 dev
LoopSupport LoopKit/LoopSupport#29 dev
TidepoolService LoopKit/TidepoolService#36 dev
G7SensorKit LoopKit/G7SensorKit#55 main
OmniKit LoopKit/OmniKit#70 main
MinimedKit LoopKit/MinimedKit#32 main
MixpanelService LoopKit/MixpanelService#6 main
LibreTransmitter LoopKit/LibreTransmitter#40 main

Notes

  • dev was merged into the Loop sync branch to resolve conflicts (WatchApp Info.plist Live Activity launch keys + project.pbxproj localization file references). Loop builds clean.

loopkitdev and others added 30 commits March 12, 2026 15:50
- Point all 18 submodule URLs to https://github.com/loopkitdev/* forks
- Minizip and TrueTime.swift retain LoopKit origin (no forks)
- Add docs/tidepool-sync-2026-03-10.md (Tidepool sync documentation)
…ce docs

- Update all 17 submodule commit pointers to reflect rewritten history
  (filter-branch changed SHAs when fixing author to LoopKit Developer)
- Add Loop build fix commit (LoopDataManager init ordering)
- Add LOOPKIT_SYNC_PROCESS.md, SYNC_PROGRESS.md, sync-docs/
Catches the superproject up to all submodule work that has accumulated
on tidepool-sync/2026-03-10 since the initial sync commit, including:

- Loop: restore manual dose entry "+" button on insulin delivery screen
- LoopKit, NightscoutService, TidepoolService, LibreTransmitter:
  string catalog updates from Xcode build
- OmniKit: fix reentrant lock crash in isSignalLost
- Various submodules: merge upstream/{dev,main} into tidepool-sync branch
Parallel fix to OmniKit 924f10d — OmniBLE had the identical bug where
isSignalLost() read state.lastPumpDataReportDate from inside a
lockedState.mutate closure, causing recursive lock acquisition.
Tier 1
- LoopKit: bd30c463 (409 commits from tidepool/dev; 18 source conflicts + 19
  pbxproj regions resolved; DIY divergence preserved at BasalRateScheduleEditor)
- Loop: 76b6b1e3 (14 commits from tidepool/dev; 3 pbxproj regions)

Tier 3 - CGM drivers
- CGMBLEKit: 69562e7
- G7SensorKit: d024513
- dexcom-share-client-swift: 541de2f
- NightscoutRemoteCGM: b1ea9ee
- LibreTransmitter: c99daf1

Tier 3 - Pump drivers
- RileyLinkKit: 19f5ae8
- OmniKit: b3b6080 (preserves reentrant lock fix; adopts mutateState)
- OmniBLE: 645e0fc (preserves reentrant lock fix and Pod Keep Alive suspend
  special case; adopts mutateState)
- MinimedKit: f994d6e (preserves CAGE/IAGE tracking)

Tier 3 - Services
- TidepoolService: 5f6a064 (incl. DoseEntry dedupe follow-up)
- NightscoutService: 1b5cded (preserves APNS response feature)
- AmplitudeService: 77dae3e
- LogglyService: 8e18081
- MixpanelService: unchanged (already up to date with tidepool)

Tier 3 - Support/Onboarding
- LoopSupport: a312dfb
- LoopOnboarding: fd7e410

Package.resolved
- LoopAlgorithm: tidepool-org/LoopAlgorithm bd1a879 (4 test-only commits)
docs/tidepool-sync-2026-05-11.md describes the merge, conflicts, and
divergences. SYNC_PROGRESS.md updated to reflect the new branch and the
divergences carried forward.
Pulls in 3 small origin/dev updates that landed after this sync started:
- Loop: PR #2410 Live activity plot fixes (manual merge to preserve our
  post-Tidepool-sync API: kept async/await sample fetch + LoopUnit
  signature, adopted upstream's presetStart<=presetEnd guard and the
  adjustedChartStart/End helpers)
- CGMBLEKit: PR LoopKit#211 handle inactive CGM sensor sessions (clean merge)
- OmniBLE: Lokalise translation update (clean merge)
… charts

Picks up loopkitdev/Loop@4eea0b24 — widens the carbStatus.dynamicGlucoseEffects
sampling window in fetchCarbAbsorptionReview and getHistoricalChartsData from
`from: end` to `from: start` so the model-predicted line spans the full chart
again (was only generating samples in now+1h … now+7h, outside the visible
window). UI-only; no dosing-path impact.
@marionbarker
Copy link
Copy Markdown
Contributor

Test use of MinimedKit

✅ Successful addition of Medtronic pump to this PR.

Once I remembered that I needed to finish the rewind and prime after adding a battery, I got the expected: pump did not respond in time error, but the time on the pump was updated.

When this version of code, I was able to retry a couple of times from the same screen and have it connect whereas with previous version (Loop 3.14) I would have needed to cancel and then add back in the pump parameters again.

Got a green loop within a few minutes.

@marionbarker
Copy link
Copy Markdown
Contributor

marionbarker commented May 29, 2026

Test Continued

✅ An issue was found and fixed. Medtronic pump is now working. See #450 (comment)

I may have posted success and approved some PR too soon. I was getting the hang posted below and I thought it might have been an issue with building an earlier loop in the interim (by mistake). I deleted all Loop apps off the phone and built fresh, imported settings from Nightscout and attached an MDT pump (this time a 523 - before it was a 515).

I get this hang on my SE 3rd gen running vanilla tidepool-sync/2026-05-11 version of LoopWorkspace with an MDT pump attached using Nightscout as a CGM. I can't get to a green loop without this hang. If I rebuild after the hang, I am able to bolus but then it hangs again.

Screenshot 2026-05-29 at 4 06 24 PM

@marionbarker
Copy link
Copy Markdown
Contributor

marionbarker commented May 30, 2026

Test Continued

I built over the app again and was able to delete the MDT before Loop hung and then add a SImulator Pump.

The simulator pump ran with green loop for several hours.

I then deleted simulator pump and added MDT 523 again and go the same hang.

@marionbarker
Copy link
Copy Markdown
Contributor

marionbarker commented May 30, 2026

Favorite Foods Insights

Edited to add : this was fixed with a later version. see #450 (comment)

I noticed what looks like a nice feature for Favorite Foods, but when I tap on the box to see more, the app quits.

IMG_9138

@marionbarker
Copy link
Copy Markdown
Contributor

Test Remotes from LoopCaregiver

I installed LoopCaregiver from TestFlight (when testing another PR). Using that app, I issued some remote commands to my personal phone running what is substantially tidepool-sync/2026-05-11

✅ successful issue remote bolus of 0.11 U, Loop rounded it to 0.1 U and delivered it
✅ successful issue remote carbs of 5 g, Loop shows it in the display
✅ successful issue remote override of Low and successfully changed overrider duration from 1 hour to 15 min, Loop shows the active preset with the correct duration

@marionbarker
Copy link
Copy Markdown
Contributor

marionbarker commented May 30, 2026

Test Handling for Presets

I really like the fact that now when you tap on the active preset on the main screen (left side of graphic), the top row on the Presets screen shows the active preset. If you then tap on it, (right side of graphic), your have the choice of Adjusting the duration, ending or closing the screen. This should minimize accidentally turning off a preset.

preset-active
You cannot modify the Insulin needs or target for the currently running preset. In a previous version of Loop, when you changed insulin needs for a running preset - Loop remodeled the entire history. The new version of Loop changes the behavior of ISF - ISF is no longer tied to the preset adjusted value when a dose was given and the ISF associated with that insulin dose no longer remains in effect until the dose activity ends (about 6 hours). There should not be a need to modify the values in a running preset.

When you begin a preset, you have access to all the options for editing before you start it, but those changes are then saved with the named preset.

Preset History

The preset enable and disable times are now part of the treatment history that shows up in when you touch the Active Insulin plot on the main screen. The graphic below shows a couple of screens of history.

treatment-history

ps2 added 4 commits May 31, 2026 12:59
Includes tidepool-org/TidepoolKit#79 so sessions persisted before
userRoles was added decode cleanly on upgrade -- preserves the
TidepoolService configuration across the dev->sync upgrade instead
of forcing the user to re-authenticate.
@marionbarker
Copy link
Copy Markdown
Contributor

Test

The Favorite Foods Insights mentioned here is fixed.

Configuration

  • in local clone pull the updates for tidepool-sync/2026-05-11 and then merge them into my special version for my looping phone. This is up to commit f03461f

Screenshot

The graphics below show insights for the last two times I used the "Lunch" Favorite Food. I will be exploring this more in the future - pretty nice.

favorite-insights

@marionbarker
Copy link
Copy Markdown
Contributor

Test

✅ The loss of Tidepool connection mentioned here is fixed.

Configuration

build Loop-dev 3.14.2 onto a test phone (SE 2nd gen running iOS 18.7.8).
Connect to Tidepool and let it run for over an hour

The build using the tidepool-sync clone mentioned here, up to commit f03461f was built onto the test phone - transition went smoothly.

Screenshot

There are two notes icons in this screenshot

  • This first was added when I connected Loop 3.14 to Tidepool and entered carbs
  • The second was added at the time I build the tidepool-sync branch over the app on the phone
  • I added additional carbs which were reflected in the Tidepool disply

✅ The tidepool connection remained through the transitiion.

tidepool-connection-through-transition

@marionbarker
Copy link
Copy Markdown
Contributor

marionbarker commented Jun 2, 2026

Test

✅ The hang when trying to read history from Medtronic pump reported here has been fixed.

Configuration

Same build on the SE 2nd gen as used for the Tidepool transition test.

Test Narrative

  • Deleted the rPi DASH pump
  • Add MDT 523 pump
  • Wait to get next CGM reading
  • ✅ Green loop

Leave the pump connected to this build overnight.

edited to add - the Medtronic worked flawlessly with this PR version of Loop overnight.

@marionbarker
Copy link
Copy Markdown
Contributor

Test

❌ Manual Temp Basal is canceled at next Loop cycle

Using the version on my personal phone, which is at commit 1b894f (the watch fix, but not the Tidepool update), I noticed that Manual Temp Basal ended at the next Loop cycle.

Glucose was rising and I was trying to decide if it is a site failure or not so I increased basal from scheduled rate of 0.65 U/hr to 1 U/hr. But when I looked later, it was back at scheduled. I confirmed on Nightscout that I just had a small blip of basal above scheduled rate. So I set it again and watched. The next CGM reading, it returned to scheduled.

@marionbarker
Copy link
Copy Markdown
Contributor

Test

❌ Repeat Manual Temp Basal test

Configuration

Continue with the configuration described here and with phone used for the successful overnight test with Medtronic.

Test Details

  • Delete the Minimed pump manager
  • Add the OmnipodKit (All Omnipod Types) pump manager and select DASH
  • Pair with an rPi DASH pod
  • 06:32 Set Manual Temp Basal of 1.0 U/hr for 30 minutes
    • main screen shows Manual Basal icon
    • Pod UI shows 1.0 U/hr
    • Nightscout shows 1.0 U/hr basal rate
    • Tidepool says it cannot show the duration of the basal, but it does not report the temp basal that is running
  • ❌ 06:36 Loop returns to automatic temp basal rate of 0.0 U/hr

To make sure it has nothing to do with OmnipodKit, repeat the test with OmniBLE

  • Deactivate rPi pod and delete pump
  • Add the OmniBLE pump manager
  • Pair with an rPi DASH pod
  • Repeat the test
  • 1 minute after Loop cycle, set MTB to 2 U/hr for 30 min
  • next loop cycle back to TBR of 0 U/hr set by Loop

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants