v2026.07.1
What's Changed
- chore(make): add install target for local dogfooding by @sdebruyn in #384
- fix(sync): detect paused capacity body and stop misclassifying 403 as auth failure by @sdebruyn in #386
- chore(ci): Bump the github-actions group with 2 updates by @dependabot[bot] in #387
- docs: fix HTTP client and item-identifier inaccuracies by @sdebruyn in #388
- ci: run integration tests on real PR head for same-repo PRs by @sdebruyn in #389
- fix(config,auth): lenient account decode; purge tokens on identity mismatch by @sdebruyn in #392
- fix(sync): deliver remote deletions incrementally with tombstones and deletion-aware anchor by @sdebruyn in #394
- fix(fpe): apply telemetry opt-out and cache budget live on setConfig by @sdebruyn in #391
- fix(sync): stage uploads at a temp path, commit via rename by @sdebruyn in #390
- fix(auth): serialize in-process writers before cross-process fcntl lock by @sdebruyn in #393
- refactor(engine): remove dead per-engine OfemAuth, fix stale docs by @sdebruyn in #395
- fix(sync): bound Retry-After retries, jitter backoff, absorb replayed DELETE 404 by @sdebruyn in #396
- fix(hardening): clamp date/batch bounds, scrub event name, dedupe GUID check by @sdebruyn in #398
- refactor(fpe): share decode/delta logic; real empty trash enumerator by @sdebruyn in #399
- fix(menu): gate auto-refresh on visibility, dedupe debounced setters by @sdebruyn in #397
- fix(sync): gate discovery upserts to stop phantom workspace/item deltas by @sdebruyn in #400
- fix(cache): dedup blob eviction accounting and bound the scan by @sdebruyn in #401
- fix(sync): TTL-gate open() freshness HEAD, thread record through fetchContents by @sdebruyn in #403
- refactor(net): unify HTTPClientError mapping and request execution by @sdebruyn in #402
- fix(sync): prevent Int64 overflow traps in resume download and dateToNs by @sdebruyn in #404
- feat(sync): cache-first item(for:); refresh workspace items via Fabric listing by @sdebruyn in #407
- refactor(xpc): consolidate host/FPE XPC contract into Shared/ by @sdebruyn in #405
- refactor(fpe): unify entry-point scaffolding and cache-retry pattern by @sdebruyn in #410
- refactor(sync): decompose refreshFolder into orchestrated phases by @sdebruyn in #408
- feat(xpc): add first-class reloadEngine verb, fix version-check hang by @sdebruyn in #406
- refactor(fpe): move item resolution/creation into OfemKit (F8+S4) by @sdebruyn in #412
- refactor(sync): decompose refreshMaterialized + bulk-read subtree etags by @sdebruyn in #409
- docs: sync docs with landed code-review remediation by @sdebruyn in #414
- fix(sync): discard partial spill on resume overflow so download self-heals by @sdebruyn in #415
- test(cache): pin ws/ discovery-vs-real identifier collision by @sdebruyn in #417
- fix(cache): ensure shard dir exists before blob move; de-flake handoff tests by @sdebruyn in #416
- fix(telemetry,net): cancel all in-flight sends on opt-out; parse Content-Range total by @sdebruyn in #419
- perf(xpc): add slim getBadgeStatus verb to skip cache scan on badge poll by @sdebruyn in #418
- feat(cache): bound tombstone growth with a 30-day TTL purge + anchor-expiry guard by @sdebruyn in #420
- feat(sync): purge orphaned item rows and materialized entries when a Fabric item vanishes by @sdebruyn in #421
- perf(cache): advance tombstone watermark to max purged deletion, not cutoff by @sdebruyn in #422
- feat(cache): reclaim orphaned rows + status when a workspace is removed by @sdebruyn in #423
- ci: single source of truth for the pinned Xcode version by @sdebruyn in #431
- fix(onelake): honest doStreamRequest doc + temp-file cleanup on all failure paths by @sdebruyn in #434
- fix(cache): make subtree/prefix LIKE matching case-sensitive by @sdebruyn in #432
- fix(sync): commit refreshFolder upsert+delete atomically by @sdebruyn in #436
- fix(telemetry): rebuild sink on config reload for runtime opt-in by @sdebruyn in #435
- fix(file-provider): redact filenames/path identifiers logged at .public by @sdebruyn in #433
- ci(release): harden ordering, resumability and notarize budget (M12) by @sdebruyn in #444
- refactor(file-provider): XPC reply-scaffold helper + track/cancel Tasks by @sdebruyn in #440
- ci: lint the PR title so the squash-merge subject passes commitlint by @sdebruyn in #443
- test(file-provider): engine-facing seam for FPE happy paths + XPC allowlist tests by @sdebruyn in #446
- docs: reconcile contributor build/signing story + document build-ci by @sdebruyn in #439
- fix(cache): blob dedup index, readonly host handle, honest token-fallback docs by @sdebruyn in #452
- ci: distinct SPM cache keys, daily capacity-pause, regen on new source file by @sdebruyn in #455
- fix(net): RetryAfterRetrier idempotency gate + cap buffered response size by @sdebruyn in #451
- docs: fix SECURITY CLI ref, Discussions hedges, analytics comment, cask zap by @sdebruyn in #456
- refactor(config): centralize clamp bounds, reach 0=no-limit sentinel (M9) by @sdebruyn in #448
- docs(file-provider): record FPE watch-list items as design decisions by @sdebruyn in #460
- test: deterministic enumerator waits, honest throttle test, migration fixture by @sdebruyn in #458
- feat(file-provider): incremental fetchContents download progress by @sdebruyn in #462
- refactor: drop redundant @unchecked Sendable, doc AsyncPathMutex by @sdebruyn in #464
- refactor(cache): split CacheStore.swift into family extension files (M10b) by @sdebruyn in #467
- refactor(sync): split SyncEngine.swift into family extension files (M10a) by @sdebruyn in #468
- refactor(app): migrate host view models to @observable + extract doRefresh apply-block by @sdebruyn in #470
- refactor(file-provider): extract repeated modifyItem parse prologue into one helper by @sdebruyn in #472
- chore(ci): re-enable SwiftLint size/complexity + force_unwrapping, tighten line-length by @sdebruyn in #474
- chore(ci): bump github/codeql-action from 4.36.2 to 4.37.0 by @dependabot[bot] in #424
- refactor(daemon): extract setConfig per-key validation into helpers by @sdebruyn in #478
- refactor(file-provider): extract modifyItem rename/metadata/content branch helpers by @sdebruyn in #479
- test(sync): split SyncEngineTests by operation family and tighten test lint limits by @sdebruyn in #480
- chore(deps): Bump github.com/azuread/microsoft-authentication-library-for-objc from 2.13.0 to 2.13.1 in /Packages/OfemKit in the swift-packages group by @dependabot[bot] in #481
Full Changelog: v2026.06.16...v2026.07.1