Conversation
kyleve
added this pull request to stack #320
September 17, 2026 19:43
kyleve
added a commit
that referenced
this pull request
Sep 17, 2026
## Summary
- Require iOS 27.0 across the iOS apps, extensions, package products,
and test bundles. The macOS minimum stays at 26.0.
- Remove the iOS 26.1 tab-accessory availability branch and inline the
accessory in `MainTabs`.
- Update requirements and snapshot guidance. Native-glass settle floors
remain because the iOS 27 snapshot suite still depends on them.
## Why
The supported iOS runtime is now 27.0. The old deployment minimum kept
an unreachable iOS 26.0 presentation path and prevented the follow-on
SwiftData HistoryObserver migration.
## Compatibility
Devices on iOS 26 cannot install this app version. Persistence, CloudKit
schema, and backup formats do not change. `Package.swift` uses
`.iOS("27.0")` because the manifest's Swift tools version 6.2 does not
provide the `.v27` shorthand.
## Review focus
- The native tab accessory renders through the same existing status view
on iOS 27.
- Snapshot settling and the iOS 27 tile-and-stitch workaround remain in
place.
## Testing
- `./ide --no-open` — passed.
- `./swiftformat --lint` — passed.
- `BUMPER_EVALUATION_TIMEOUT_SECONDS=300 ./test --architecture-only` —
passed; the default 60-second budget timed out on the initial run.
- `./test --everything --skip-architecture` — 2,023 iOS unit tests and
50 snapshot suites passed.
- `mise exec -- tuist test Ledger-macOS-Tests --no-selective-testing --
-destination 'platform=macOS'` — passed.
## Stack
Base PR. [PR #319](#319) migrates
WhereCore to HistoryObserver on top of this minimum-version change.
Replace the Core Data remote-change notification bridge with a SwiftData HistoryObserver while preserving the external-author classifier, startup catch-up, coalescing, and store change streams. Exercise the production source with temporary on-disk containers and update its module contracts.
kyleve
force-pushed
the
codex/ios-27-history-observer
branch
from
September 17, 2026 21:55
9b8fa24 to
2ab4604
Compare
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.
Summary
HistoryObserver.changes()andremoteChanges()streams, author classification, event coalescing, startup catch-up, and logged failure behavior.Design decisions
HistoryObserveris scoped to Where'sModelContainer, so an unrelated Periscope store cannot trigger a Where refresh. Itsauthorsparameter only includes named authors; it cannot exclude the current store instance's author while accepting arbitrary CloudKit and sibling-process authors. The history classifier therefore remains responsible for suppressing local writes.The source observes
eventCounterthroughObservations. It compares the first emitted value with the counter captured during setup, then checks history once after registration to cover a transaction committed between the baseline and observation startup.Review focus
Testing
./ide --no-openand./swiftformat --lint— passed.StoreRemoteChangeSourceTests— 6 tests passed.BUMPER_EVALUATION_TIMEOUT_SECONDS=300 ./test --architecture-only— passed../test --everything --skip-architecture— 2,029 iOS unit tests and 50 snapshot suites passed.mise exec -- tuist test Ledger-macOS-Tests --no-selective-testing -- -destination 'platform=macOS'— passed.Stack
Second PR, based on PR #318. The iOS 27 minimum in that PR makes
HistoryObserveravailable to WhereCore.