Tidepool sync 2026-05-11#450
Conversation
- 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.
Document that upgrading dev→sync migrates the shared store to Modelv6 and cannot be reverted: dev ships only up to Modelv4 and can't open a v6 store, so reverting leaves the app unable to load its data store (no on-disk data loss, but dev needs a delete+reinstall, rebuilding from HealthKit). Also records that the forward migration now preserves dose amounts (value→deliveredUnits). Includes the earlier 2026-03-10 LoopAlgorithm-packaging callout.
TestNot all of the updates listed below were tested in this comment. Summary of recent updatesA few more changes came in after my last test:
ConfigurationiPhone SE 3rd gen running iOS 26.5
Events and Report from 3.14.0Loop_v3.14.0_Export-20260521T163630Z.zip Loop_v3.14.0_Loop Report 2026-05-21 093645-0700.md Test Transition from Loop 3.14 to 3.15.0Build LoopWorkspace tidepool-sync/2026-05-11, commit 14d1987
Events and Report from 3.15.0Loop_v3.15.0_Export-20260521T163957Z.zip Loop_v3.15.0_Loop Report 2026-05-21 094014-0700.md Screenshotsmain and setting screen for 3.14.0 immediately before transition
main and setting screen for 3.15.0 immediately after transition
Browser Build Test✅ The browser build succeeded again. This time there were no warning messages about some items not being supported by Siri. |
|
Thanks @marionbarker ! Also did you see the new Health page in settings? |
Test Live ActivityPart of the testing from #450 (comment) The Live Activity shows up, but the button to always allow was really had to see. I knew it was there so I kept hitting it until I hit the right spot.
|
Repoint workspace LoopAlgorithm package to LoopKit/LoopAlgorithm (main) and bump LoopKit pin.
TestThe test build includes up through commit fc9293e from tidepool-merge/2026-05-11. This was a fresh build of an independent Loop-TP app on my looping phone (different bundle ID) ConfigurationiPhone 15 pro running iOS 26.5 (my personal Looping phone)
Build an independent version on the same phone
Allow Loop-TP (test build) to run in parallel with Loop (app controlling my pump). Attempt to remember to match manual entries of carbs on the test Loop-TP app. |
Test✅ Side-by-side comparison of Loop with G7/Pod with Loop-TP (3.15) with G7/Simulated Pump on same phone looks qualitatively the same
ConfigurationSee #450 (comment) for configuration Morning CoffeeI entered 10 g for 1 hour for my morning coffee. Both Loop and Loop-TP recommended the same 1.15 U dose. Overnight ReviewCompare a few screenshots. Lock ScreenBoth Loop (upper plot) and Loop-TP (lower plot) show the same Live Activity on the lock screen
NightscoutThe graphic on the left is my real Nightscout site and the one on the right is the test site. Because I was previously running a glucose trace uploaded to the test site, the vertical scaling is different. But qualitatively the dosing response is the same.
G7 Sensor transitionThere are 2 grey dots visible in the Loop-TP nightscout site.
|
Add LoopAlgorithm as a git submodule (tracking LoopKit/LoopAlgorithm) and reference it as a local Swift package, removing the remote package pin from the workspace. LoopAlgorithm can now be edited in place like the other workspace components. Bump LoopKit pin for the local package reference.
Add LoopAlgorithm to the workspace so the LoopWorkspace owns and versions it (via the submodule gitlink); projects consume the product. Bump LoopKit pin.
Test StatusThere have been a couple of issues I reported to Pete via DM and he fixed but I have not had time to thoroughly test. In addition, he provided one feature request. Issue with the Build Order
Issue with Nightscout as a CGM
Request LoopAlgorithm be provided as a submodule
Issue: could not build onto a phone with an existing Loop app of an earlier vintage
|
Test Summary✅ Looks like I can build Loop 3.14 over Loop-TP 3.15 (will be confirming this)
ConfigurationiPhone SE 3rd gen running iOS 26.5
Test backward compatibilityAttempt to buiild Loop (3.14) dev branch over Loop-TP (3.15)
Repeat the attempt to build Loop (3.14) dev branch over Loop-TP (3.15)
Test Nightscout as a CGMWhile testing for backward compatibility, I wanted to let Loop-TP run for a while. This doubles as a test for Nightscout as a CGM. Previously, the value only updated once every 30 minutes (starting at commit abad56f).
|
Test Summary✅ Live Activity responds to the Enable/Disable flag ConfigurationRun parallel version on my personal Looping phone, iPhone 15 pro running iOS 26.5
Test Live Activity
Edited because later - both Live Activites were showing again. Continue parallel AppsContinue entering carbs and bolusing with the Loop-TP (3.15) version when I do it for real with my pump. As of 2026-05-25 19:00 PDT, stop uploading the parallel data to Nightscout so I can use the site for a different test. Screenshot below shows real Loop on the left and Loop-TP running a simulated pump on the right. I mostly entered carbs at the same time into the two apps over the last 24 hour.
|
The 'one-way / forward-only' claim was wrong. Core Data lightweight migration downgrades the v6 store to dev's Modelv4 in place (verified by round-trip test). It only fails once a v6 row has a null deliveredUnits (dev's 'value' is mandatory -> NSCocoaError 134110), which is why an immediately-reverted tester saw it work but a long-running sync store would not.






Refreshed Tidepool → DIY sync for the whole workspace, from the
tidepool-sync/2026-05-11branch. 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-11branches. They will be updated to the merged commits as each submodule PR below lands.Submodule PRs
Notes
devwas merged into the Loop sync branch to resolve conflicts (WatchAppInfo.plistLive Activity launch keys +project.pbxprojlocalization file references). Loop builds clean.