Skip to content

v0.9.2 — Second refactor patch (SaaSConfig extract + protocol alignment)

Choose a tag to compare

@hoangperry hoangperry released this 24 May 21:43

Second refactor patch

No new user-facing features. Clears the remaining HIGH + MED + LOW backlog items from the v0.9.0 deliver-phase review that v0.9.1 deferred. Risk-free upgrade — 319/69 tests stay GREEN with the same test bodies; UserDefaults + Keychain layout is byte-identical to v0.9.1 so every setting, hotkey, binding, and SaaS session round-trips clean.

Changed (internal)

  • SettingsStore god-object trimmed (W1, HIGH) — extracted the Supabase project URL + anon key + the 4 SaaS factory helpers (authConfig / makeSessionStore / translateEndpoint / deviceIdentity) into a new Auth/SaaSConfig.swift file. SettingsStore drops from 593 → 538 LOC and from owning 6 Supabase concepts down to 1 (just a saaSConfig reference). Future SaaS-only changes now live in one file.
  • ScreenCaptureService protocol shape aligned to OCREngine (MED-4) — dropped the unnecessary @MainActor + AnyObject requirements from the protocol. Production impl is still @MainActor where it needs to be; stubs in tests can now be plain structs. Cleans up the asymmetry the v0.9.0 review flagged.

Fixed

  • Picker + capture hotkey recorder sheets share one helper now (LOW-2) — centralised the synthetic Binding<HotkeyConfig> pattern into optionalHotkeyBinding(_:fallback:) on SettingsView. Pre-allocated HotkeyConfig.defaultPicker / .defaultCapture constants replace the per-render allocations.

Deferred to v0.9.3+

  • TranslationWorkflowClipboardRestoreTest — needs HUDPresenting + Pasteboarding protocol extractions (own refactor commit).
  • Hardcoded Supabase anon-key + URL move to build-time .xcconfig (now that SaaSConfig is its own file, this becomes a one-line init-default change + a CI secret wiring step).

Install

  • Sparkle OTA: v0.6.1+ users auto-update from inside the app — no action needed.
  • Fresh install: download the DMG below → drag to /Applications.

Verify

  • App: 319 Swift / 69 suites GREEN (unchanged from v0.9.1).
  • Build: signed (Developer ID), notarized + stapled (DMG + Sparkle zip), EdDSA-signed appcast.