Releases: sdebruyn/onelake-explorer-macos
Releases · sdebruyn/onelake-explorer-macos
Release list
v2026.07.2
What's Changed
- fix(cask): alphabetize zap trash array to satisfy brew style by @sdebruyn in #485
- fix(cache): spare concurrently-written blobs from the init-time orphan sweep by @sdebruyn in #483
- feat(logging): route warn/error to ofem.log and add error-taking overloads (#486) by @sdebruyn in #491
- fix(onelake): detect CapacityNotActive on 404 and log all non-2xx responses (#487) by @sdebruyn in #494
- feat(logging): log background activity and token lifecycle (#489) by @sdebruyn in #493
- feat(file-provider): log FP errors and mutating-op outcomes (#488) by @sdebruyn in #492
Full Changelog: v2026.07.1...v2026.07.2
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 ...
v2026.06.16
What's Changed
- ci: add weekly job to pause the CI Fabric capacity by @sdebruyn in #278
- fix(fp): map workspace and root cache rows correctly in DomainItem.from(record:) by @sdebruyn in #282
- fix(host): periodically signal root container so the workspace list refreshes by @sdebruyn in #281
- feat(cache): add debug-level OfemLogger to CacheStore and CacheReader by @sdebruyn in #287
- feat(fpe): debug logging at enumeration boundaries by @sdebruyn in #288
- fix(host): legible needs-sign-in status color + rename action to "Sign In…" by @sdebruyn in #290
- feat(net): debug logging for Fabric/OneLake client requests & pagination by @sdebruyn in #289
- feat(logging): write un-redacted log files in DEBUG builds by @sdebruyn in #295
- fix(host+fpe): refresh workspace list via working set instead of no-op root signal by @sdebruyn in #293
- fix(fabric): hide Fabric item types without OneLake storage from workspace listing by @sdebruyn in #297
- build(project): adopt safe recommended build settings by @sdebruyn in #301
- fix(auth): document FPE redirect URI; classify invalid_client distinctly from interaction-required by @sdebruyn in #300
- chore(deps): bump MSAL, GRDB, and GitHub Actions to latest by @sdebruyn in #303
- chore(fpe): silence Sendable + unused-result warnings in OneLakeFileProvider by @sdebruyn in #304
- refactor(fabric): use a strict allowlist for OneLake-backed item types by @sdebruyn in #306
- build(project): enable REGISTER_APP_GROUPS for app-group registration by @sdebruyn in #310
- feat(fpe): make items read-only except inside a Lakehouse's Tables/Files by @sdebruyn in #308
- refactor(net): replace custom HTTP stack with Alamofire by @sdebruyn in #314
- refactor(build): migrate app and FPE to Swift 6 language mode by @sdebruyn in #311
- fix(net): accept empty 2xx response bodies in Alamofire serializer by @sdebruyn in #316
- fix(fpe): cancel enumerator tasks that race with invalidate() by @sdebruyn in #318
- fix(onelake): map tokenAcquisitionFailed to unauthorized in OneLakeError.from by @sdebruyn in #319
- feat(fpe): add ContainerSignaller and EngineProviding.signal(container:) hook by @sdebruyn in #323
- feat(sync): stale-while-revalidate folder listings with debounced background refresh by @sdebruyn in #324
- feat(fpe): wire revalidation callback to per-container signal; fixes stale/duplicate folders by @sdebruyn in #325
- perf(sync): drain quiesceRevalidations concurrently instead of sequentially by @sdebruyn in #328
- fix(fpe): harden signalEnumerator continuation with resume-once guard by @sdebruyn in #329
- feat(build): inject build timestamp into About window and startup logs by @sdebruyn in #331
- feat(fpe): track materialized container set in cache by @sdebruyn in #335
- docs: add MVP tracking param to Microsoft Learn links by @sdebruyn in #338
- refactor(fpe): replace ad-hoc CH structs with generic UncheckedSendable by @sdebruyn in #339
- feat(engine): refresh materialized container set with etag diff by @sdebruyn in #334
- ci: add CodeQL static analysis for Swift by @sdebruyn in #337
- feat(fpe): working-set poll loop refreshing materialized containers via .workingSet by @sdebruyn in #347
- test(fpe): gated live integration test for working-set freshness (#346) by @sdebruyn in #348
- refactor(fpe): remove per-container signalling (no-op on replicated extension) by @sdebruyn in #349
- refactor(sync): drop stale-while-revalidate; cache = delta baseline + blob cache by @sdebruyn in #351
- chore(ci): add SwiftFormat lint gate and reformat codebase by @sdebruyn in #352
- chore(ci): add SwiftLint gate and fix violations by @sdebruyn in #353
- chore(ci): add periphery 3.7.4 dead-code detection gate by @sdebruyn in #354
- fix(ui): show Dock icon for About; right-align refresh-interval stepper by @sdebruyn in #357
- fix(sync): ignore directory lastModified in change detection; conditional upsert by @sdebruyn in #361
- perf(fpe): O(1) alias→domain lookup in materialized poll loop by @sdebruyn in #355
- test(sync): gated live poll-quiescence test for Delta tables by @sdebruyn in #363
- perf(fpe): exclude Delta internals from materialized poll set by @sdebruyn in #360
- fix(ofemkit): enable warnings-as-errors and fix package warnings by @sdebruyn in #366
- ci: consolidate to a single per-PR build; fold periphery in; tighten CodeQL queries by @sdebruyn in #367
- fix(fpe): stop empty-filename crash-loop + phantom parent-row deltas by @sdebruyn in #369
- fix(fpe): populate created/modified dates so Finder stops showing 1970 by @sdebruyn in #371
- ci: upload JUnit test results to Codecov Test Analytics by @sdebruyn in #373
- fix(fpe): fall back created date to modified and capture real creation time on HEAD/GET by @sdebruyn in #376
- fix(fpe): implement same-directory rename via DFS x-ms-rename-source by @sdebruyn in #377
- fix(sync): ignore directory etag and contentLength in entryChanged by @sdebruyn in #379
- feat(sync): subtree-etag skip-gate for materialized refresh by @sdebruyn in #381
- feat(config): configurable self-heal full-refresh interval (advanced) by @sdebruyn in #382
Full Changelog: v2026.06.15...v2026.06.16
v2026.06.15
What's Changed
- ci(integration): auto-run on push to main (skip docs); drop weekly cron (#242) by @sdebruyn in #243
- fix(sync): stop double-stripping itemGUID prefix so refreshFolder reconciles children (#244) by @sdebruyn in #245
- chore(ci+tests): silence Homebrew tap/hint noise and fix test compiler warnings (#246) by @sdebruyn in #248
- chore(host+fpe): fix safe compiler warnings; keep Swift-6-mode Sendable noise (#247) by @sdebruyn in #249
- fix(fpe): implement getProtocolVersion so the control XPC service stops crash-looping (#252) by @sdebruyn in #253
- fix(cache): use write transaction in orphan sweep to prevent storeBlob race (#250) by @sdebruyn in #251
- fix(xpc): give Shared payload classes explicit @objc names so XPC replies decode (#254) by @sdebruyn in #255
- fix(host+fpe): create log dir so Reveal-in-Finder works and the engine writes its log (#256) by @sdebruyn in #258
- feat(host): show Dock icon while a window is open and focus existing Preferences on re-open (#257) by @sdebruyn in #259
- chore(logging): DEBUG-only public os_log + write+flush engine file log (#261) by @sdebruyn in #263
- fix(fabric+auth): Fabric token missing after OneLake-only sign-in causes empty Finder mount by @sdebruyn in #264
- feat(host+fpe): surface per-account sign-in-required state in menu bar by @sdebruyn in #265
- fix(menu): replace sendAction with openSettings for reliable Preferences by @sdebruyn in #270
- fix(net+fabric): disable URLCache so a stale 404 never bypasses a live HTTP round-trip by @sdebruyn in #271
- feat(host): add Sign In Again action to per-account submenu by @sdebruyn in #267
- fix(host): gate Sign-In-Again and per-account status on needsSignIn state by @sdebruyn in #274
- fix(auth): per-process MSAL redirect URI + map all token failures to .unauthorized by @sdebruyn in #275
Full Changelog: v2026.06.14...v2026.06.15
v2026.06.14
What's Changed
- ci(integration): use runner's preinstalled az via azure/login, drop broken pip pin (#236) by @sdebruyn in #237
- ci(integration): re-authenticate azure before capacity suspend (#238) by @sdebruyn in #240
- ci(release): commit rendered cask before brew style/audit so validation hits the new cask (#239) by @sdebruyn in #241
Full Changelog: v2026.06.13...v2026.06.14
v2026.06.13
What's Changed
- fix(cache): address all 25 cache-layer code review findings (cache-01–25) by @sdebruyn in #215
- fix(net): structured gate-slot guarantee + retry/gate correctness (WP-NET) by @sdebruyn in #214
- fix(logging+telemetry): privacy / redaction hardening by @sdebruyn in #213
- refactor(config): WP-CONFIG — split god-object, fix concurrency, add validation by @sdebruyn in #216
- fix(sync): address sync-layer code review findings (sync-01–29) by @sdebruyn in #217
- fix(clients): OneLake + Fabric + streaming download (net-19, onelake-01–12, fabric-01–07) by @sdebruyn in #218
- fix(fp+engine+buildinfo): FP models + Engine/BuildInfo sweep (fp-01–09, engine-01–06, tests-02) by @sdebruyn in #219
- fix(auth): MSAL review findings — coalescing, locking, seams, hardening (auth-01–17) by @sdebruyn in #220
- fix(shared): XPC correctness — error bridging, strict decode, Sendable, versioning by @sdebruyn in #221
- fix(fpe): WP-FPE — testability seam, engine lifecycle fixes, callback correctness by @sdebruyn in #222
- refactor(host): WP-Host sweep — ViewModel/seams, error surfacing, dedup (host-01–27) by @sdebruyn in #223
- ci: address build review findings (build-01..35) by @sdebruyn in #224
- test(kit): WP-Tests infra sweep — stub races, force-cast, mock locking, dedup (tests-04–23) by @sdebruyn in #225
- docs(fpe): correct back-off clock comment to monotonic uptime (fpe-11) by @sdebruyn in #227
- ci: pin GitHub Actions by version tag instead of commit SHA by @sdebruyn in #228
- test(helpers): consolidate duplicated gate/temp-file/auth helpers (tests-15) by @sdebruyn in #229
- ci(build): build/CI hygiene sweep (build-04/06/08/10/16/23/30/35) by @sdebruyn in #234
- fix(fpe): engine-lifecycle + blob-handoff sweep (fpe-06/12/14/15) by @sdebruyn in #233
- chore(host): reveal mounts via getUserVisibleURL, drop CloudStorage sandbox exception (#231) by @sdebruyn in #232
- ci(release): audit rendered cask and retry tap push race before publishing (build-15) by @sdebruyn in #235
- chore(ci): Bump the github-actions group across 1 directory with 2 updates by @dependabot[bot] in #230
Full Changelog: v2026.06.12...v2026.06.13
v2026.06.12
What's Changed
Full Changelog: v2026.06.11...v2026.06.12
v2026.06.11
What's Changed
- feat(architecture): kick off Swift migration with ADR and OfemKit skeleton by @sdebruyn in #167
- feat(ofemkit): port config and file token store to Swift by @sdebruyn in #168
- feat(ofemkit): port MSAL multi-account auth from Go by @sdebruyn in #169
- feat(ofemkit): port OneLake DFS client and HTTP infra to Swift by @sdebruyn in #170
- feat(ofemkit): port Fabric REST client to Swift by @sdebruyn in #171
- feat(ofemkit): port SQLite cache to GRDB.swift by @sdebruyn in #172
- feat(ofemkit): port logging telemetry and buildinfo to Swift by @sdebruyn in #173
- feat(ofemkit): port FP domain model and sync engine by @sdebruyn in #174
- build(xcodegen): integrate OfemKit as host app and FPE dependency by @sdebruyn in #175
- feat(apple): host OfemEngine in FPE with XPC for host integration by @sdebruyn in #176
- feat(apple): implement add-account end-to-end via OfemKit and XPC by @sdebruyn in #177
- refactor(apple): replace CoreBridge consumers with Swift-native paths by @sdebruyn in #178
- chore(architecture): remove Go daemon and complete Swift migration by @sdebruyn in #179
- chore(structure): move Swift sources from apple/ to repo root by @sdebruyn in #180
- docs: rewrite user-facing docs from current-product perspective by @sdebruyn in #182
- chore(ofemkit): remove unused socketPath from OfemPaths by @sdebruyn in #181
- feat(apple): observe workspace pause state for menu icon by @sdebruyn in #183
- chore: strip pre-stable architecture residue across repo by @sdebruyn in #185
- refactor(xpc): drop redundant control-protocol methods by @sdebruyn in #186
- fix(net): correct HTTPGate token drain, FIFO, cancellation and registry race by @sdebruyn in #188
- chore: harden CI/CD pipeline, packaging, and build reproducibility (WP-D) by @sdebruyn in #189
- test(ofemkit): align identifier tests with shipped slash-less parser contract by @sdebruyn in #192
- fix(telemetry+logging): WP-E — close store-12 through store-25 / tests-08 by @sdebruyn in #191
- fix(cache): blob lifecycle hardening (store-01…11, store-26, tests-15/16/20) by @sdebruyn in #190
- fix(config): WP-B — config ownership, cross-process safety, engine reload by @sdebruyn in #193
- fix(fp): pin item identifier sentinels to FileProvider framework constants by @sdebruyn in #187
- fix(host+fpe): WP-J — host app + XPC hardening by @sdebruyn in #195
- fix(auth): WP-K auth correctness + MainActor decoupling by @sdebruyn in #196
- docs: forbid piping test/build output to head/tail by @sdebruyn in #198
- fix(sync): WP-H — SyncEngine correctness + testability by @sdebruyn in #194
- fix(fpe): WP-I — protocol correctness + remote-change propagation by @sdebruyn in #197
- refactor(engine+tests): WP-M — per-domain engine dedup + test-quality sweep by @sdebruyn in #199
- fix(sync+net): WP-G streaming data plane + net-client correctness by @sdebruyn in #200
- docs(contributing): describe the test setup as it actually is by @sdebruyn in #201
- test(integration): live Fabric integration suite + CI by @sdebruyn in #202
- ci(integration): seed warehouse via go-sqlcmd instead of mssql-python by @sdebruyn in #203
- test(integration+unit): cover remaining Fabric API operations and error branches by @sdebruyn in #204
- ci(coverage): report OfemKit coverage to Codecov by @sdebruyn in #205
- ci(coverage): report host-app (OneLakeHostTests) coverage to Codecov by @sdebruyn in #206
- test(engine): raise OfemKit coverage
77%→86% by @sdebruyn in #207 - fix(cache): count CacheStore.wipe() from the DB, not a racy filesystem scan by @sdebruyn in #209
- fix(sync): short-circuit hard-offline errors so the offline fallback fires by @sdebruyn in #208
- fix(release): assess the DMG as "open", not "install", for Gatekeeper by @sdebruyn in #210
- fix(release): verify the DMG via stapler validate (it is unsigned) by @sdebruyn in #211
Full Changelog: v2026.06.10...v2026.06.11
v2026.06.9
What's Changed
Full Changelog: v2026.06.8...v2026.06.9
v2026.06.8
What's Changed
Full Changelog: v2026.06.7...v2026.06.8