v0.17.0
Erfana v0.17.0
Released: 2026-08-08
- Screenshots that macOS blocks now tell you how to fix it – when a capture is denied, Erfana opens a dialog that jumps straight to the Screen Recording privacy pane and offers to relaunch, which macOS requires before a fresh grant takes effect. The capture is always attempted first, so a stale permission record can no longer block someone who does have access. Other platforms keep the existing error toast.
- The camera preview now shows the real picture, and all of it – the preview used to be mirrored for every camera, so anything with text in it read backwards and never matched the photo you got; it was also cropped to a 4:3 window that hid parts of the frame you were still capturing. It is now un-mirrored and shows the whole 16:9 frame. If you prefer the selfie-style flipped view, tick Mirror preview below it – remembered per camera. Saved photos have never been mirrored and still aren't.
- A camera plugged in while Erfana is running now shows up reliably – a pending rescan could be silently discarded if the screen updated during the wait, leaving the camera missing from the list with no error and nothing in the logs until you reopened the dialog or hit Refresh.
- The Claude Code context meter scales correctly for Opus 5, Sonnet 5 and Fable 5 – it assumed a 200k context window for models that actually run 1M, so the used percentage climbed about five times too fast and the bar turned red while most of the window was still free. Model names are now read by one shared parser instead of three, so the label and the window can no longer disagree.
- Dialogs are easier to use with a keyboard and a screen reader – Enter now does what the focused button says instead of always firing the camera shutter, Tab stays inside the dialog rather than walking off into the page behind it, and the label on violet confirm buttons is now legible (contrast raised from 2.2:1 to 8.4:1).
Technical changes
Bug fixes
- correct context meter for Opus 5-era model ids
- stop hot-plug refresh being cancelled mid-debounce
- un-mirror the preview and make mirroring opt-in per camera
- restore the gitleaks allowlist dropped by the develop rewind
- cancel pending debounced search on unmount
- classify silent denied captures as PERMISSION_DENIED
Chores
- add the Windows-snapshot pre-flight gate and fix skill/agent contracts
- declare NSScreenCaptureUsageDescription
- bump claude workflows to checkout v6; soften CLA wording
- SHA-pin claude-code action workflows and add CODEOWNERS
Documentation
- record camera hot-plug fix, drop completed OSS plan
- correct errors introduced by the previous sweep, and two false claims in b62b79b
- resync docs/build and docs/windows with the code
- archive phase2-closure per its own declared lifecycle
- fix the release verification recipe, DR procedure and branch-protection facts
- resync documentation with the code after a full-repo staleness sweep
- resync documentation with the code the rewind left behind
- point develop at the graph branch and restore doc fixes lost in the rewind
- add nominative-use notes for LiteParse and named OSS components
- link SUPPORT.md from README
- sync CI docs with live pipeline (secret-scan, license job, required set)
- add SUPPORT.md help-routing guide
- remediate OSS-readiness review findings
- sync v0.16.3 release docs (version, AES-PFX runbook)
- align CONTRIBUTING + PR template with honest CLA wording
Features
- actionable permission dialog on denial (non-blocking)
- ScreenPermissionDialog (grant-and-relaunch)
- bridge screen-permission + system deep-link/relaunch
- sender-gated screen-recording deep link + graceful relaunch
- sender-gated screen-permission handler + test harness
- expose advisory macOS screen-permission status
- add screen-recording permission schema + channel