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 #211 handle inactive CGM sensor sessions (clean merge) - OmniBLE: Lokalise translation update (clean merge)
Pulls in the new loopkitdev/LibreLoop repo (initial scaffold at 55b65d6), registers its xcodeproj in the workspace, and adds LibreLoopPlugin to the LoopWorkspace scheme so copy-plugins.sh embeds the .loopplugin bundle into Loop.app/Frameworks. With this in place Loop's CGM picker surfaces a "FreeStyle Libre 3" entry and runs the plugin's onboarding flow. No changes to Loop or LoopKit are required — discovery is purely via PluginManager's Info.plist scan.
Bumps the LibreLoop submodule pointer to the head of main, covering: - onboarding restructure (Apply -> Scan) - LibreCRKit SwiftPM dep + vendored phone_cert_162b - candidate Phase 5 handshake - BLE PIN persisted before BLE auth - in-session glucose streaming + monitor - redesigned status screen, lifecycle bar, last-N readings table - always-retrying reconnect + per-attempt scan timeout - post-pair backfill via PatchControlCommand - adopted upstream Libre3GlucoseQualityAssessment API - Pair-new-sensor flow, persisted latestSample - BLE state restoration via shared scanner + retrievePeripherals
LoopKit GlucoseStore now skips corrupt CachedGlucoseObject rows (NULL startDate) instead of trapping in Date._unconditionallyBridgeFromObjectiveC.
The fix assumed the trapping non-optional Date read was CachedGlucoseObject.startDate, which is inferred but not proven (the LoopKit crash frames were not symbolicated). Back it out until we can confirm the actual object/attribute from a reproduced, fully-symbolicated crash.
Fixes the intermittent watchOS crash where a freshly-inserted CachedGlucoseObject read a nil startDate (Date._unconditionallyBridgeFromObjectiveC) — caused by GlucoseStore (async context.perform) sharing one context with CarbStore (performAndWait). Glucose now uses a dedicated Core Data stack.
feat: create new build_loop_auto file to prevent disabling by GitHub
…k mark is shown (#472)
* Merge pull request #461 from daghaian-loop-org/add-build-autotrigger feat: create new build_loop_auto file to prevent disabling by GitHub * improve clarity: when build is skipped, run is canceled no green check mark is shown (#472) * update to fastlane 2.236.1 * update fastlane to 2.237.0 --------- Co-authored-by: David Aghaian <16483722+daghaian@users.noreply.github.com>
… wording (#6) Expired Libre 3 sensors now show 'Expired' (not 'Sensor failed'), surface a prominent Pair New Sensor button, and the expiry alerts set the warmup-gap expectation instead of implying a gap can be avoided by replacing early.
Carb screen and favorite-food insights now compute carb absorption with the same mid-absorption ISF model as the algorithm, so their COB agrees with the home screen (fixes the carb-screen-vs-home discrepancy under an ISF-changing override).
Advances OmnipodKit next-dev d3a55a4 -> 4b84508. Headline is #123, which stops a stale fresh-discovery fallback timer from cancelling a live connection and spinning a connect -> cancel -> "reconnecting after drop" loop. Also pulls the other OmnipodKit next-dev commits since our last pin: heartbeat stale-target fix, MIT license, README updates.
…ix (#601) Regenerated golden fixtures to match LoopAlgorithm's continuousDeliveryInsulinOnBoard midpoint-integration change; values-only, time grid unchanged. Clears the next-dev CI failure introduced with the LoopAlgorithm bump.
Third and final InsulinMathTests fixture affected by the LoopAlgorithm basal-ripple IOB change; full InsulinMathTests suite passes. Completes the next-dev CI fix.
… Glass (#2464) Advances Loop next-dev 48f8a921 -> c4d89c03.
The workspace build consumes LibreCRKit via the local 'group:LibreCRKit' package override (not LibreLoop's remote pin), so bumping the submodule gitlink is what lands the change in next-dev builds. a86b92f reworks the system NFC scan prompt to 'Hold the TOP of your iPhone very close to the Sensor' (+ a CustomStringConvertible addition in bbfa2f1).
Fixes a re-entrant managerQueue deadlock when surfacing a pod alert from an advert.
Picks up the display-only forward throttle (#7, e5c159f). With the experimental "Send every reading" toggle off, display-only samples -- a new sensor's warmup readings, for instance -- bypassed the ~5 minute throttle and streamed to Loop at about one per minute, against what the toggle promises. The fix drops the isActionable requirement from the throttle guard and advances the throttle clock on every forward.
OmnipodKit 4763ce6 -> 366380d eager connect watchdog (#133) LoopKit c4a8f64 -> 011a3db persistent store (#606), override loop (#608) G7SensorKit 468eefc -> fb87aa9 suspected session end grace (#63) Loop c4d89c0 -> 3ab37d5 CarbMath preconditionFailure (#2489) LibreTransmitter a38975d -> c192a2f device manufacturer field (#41), configurable glucose smoothing LOOP_MARKETING_VERSION 3.15.1 -> 3.15.2. CURRENT_PROJECT_VERSION left at 58.
Picks up "Xcode 27 Fix" (#605): isDurationPickerExpanded in CreatePresetNameAndScheduledEdit is declared without an inline initial value, which Xcode 27 requires here.
Building with Xcode 27 (27A5237l) failed before reaching any of our code: TrueTime.xcodeproj: error: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 12.0, but the range of supported deployment target versions is 15.0 to 27.0.x. (in target 'TrueTime-iOS') Upstream fixed this in "bump deployment (#3)", which raises the target from 12.0 to 15.0 and changes nothing else. Testers already building with Xcode 27 are on that commit. Xcode 26 was unaffected, which is why this went unnoticed.
Picks up #609: LoopKitTests now declares its dependency on LoopKitUI. Test-target wiring only, 15 lines of project file, no source or product change.
OmnipodKit 366380d -> d58b11f InPlay connection strings (#140) LibreTransmitter c192a2f -> 6058dd2 glucose smoothing and every-minute reading strings (#50) Both were added by earlier work but never had the regenerated catalog committed, so the strings had not reached translation. Raised by @marionbarker in review. Catalog content only, no source change.
LibreLoop e4a4642 -> 9e5c3fc 18 new keys plus a one-time serialiser
normalisation (#10)
Loop 3ab37d5 -> bc4d79ff two removed pre-meal strings marked stale
(#2500)
Completes the catalog cleanup @marionbarker raised. All four submodules
now regenerate clean: a rebuild after these bumps leaves no catalog
dirty.
Picks up #16: shouldConnect(to:) and connectingCount read autoConnectIDs from the main thread while centralQueue mutates it, which tore the Set and crashed with "unrecognized selector sent to instance 0x8000000000000000" when a RileyLink switch was toggled repeatedly (LoopKit/Loop#2462). The property is now backed by a lock. Affects MinimedKit, OmniKit and OmnipodKit with Omnipod Classic, which share the provider.
Pod Keep Alive mode switch bug fix and cleanup (#138) Improved dose handling on faults for more consistent state (#139) Always display updated informational text at start of Omnipod 5 Setup (#136) Pump manager and setup UI only; the Bluetooth layer is untouched, so the eager connect work in this bump is unaffected. The string catalog stays clean after a rebuild.
Bump submodules and version to 3.15.2
Scan help now says to hold the TOP of the phone against the sensor, not the back. The NFC antenna is at the top, so the old instruction did not work, and it contradicted the sibling screen which already said "top" (#11, reported by Mike Plante). Also enables Swift string extraction on the LibreLoop and LibreLoopUI targets, matching MinimedKit and OmnipodKit. LibreLoop already declared LocalizedString as an extractable macro and preferred string catalogs but never switched extraction on, so new strings did not reach the catalog. The first build after enabling it harvested 15 strings that had never been available for translation, from the stream debug view and the chart labels.
Bump LibreLoop to 1eeb710
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This branch is a holding ground for the next major set of features to land in dev.
It includes the Tidepool Sync (#450) and OmnipodKit, and new Libre 3 integration.