NEXO 7.17.7 — guided macOS Full Disk Access recovery
Published 2026-05-12. Patch release over v7.17.6.
Why this patch exists
macOS grants Full Disk Access to the exact executable that opens protected data. On some installs the user had granted Desktop or a Homebrew shell, while the launchd job still ran /bin/bash. That made tcc-approve fail while opening the user TCC database, but the failure looked like a broken background cron instead of a missing privacy permission.
What changed
nexo-tcc-approve.sh now classifies authorization denied, Operation not permitted, and protected TCC database open failures as a macOS privacy state. It writes runtime/state/full-disk-access-required.json, updates schedule config with full_disk_access_status="later", keeps approval markers unset, and exits successfully with a wrapper-visible message so the runtime can ask the user for the right permission.
runtime_power.detect_full_disk_access_reasons() now reads tcc-auto-approve.log as well as cron stderr logs, so Desktop and support reports can surface the concrete reason instead of guessing.
Validation
bash -n src/scripts/nexo-tcc-approve.sh
python3 -m py_compile src/runtime_power.py
python3 -m pytest -q tests/test_tcc_approve.py tests/test_runtime_power.py
# 20 passed
python3 -m pytest -q tests/test_cron_wrapper_contract.py tests/test_cron_recovery.py \
tests/test_cron_sync.py tests/test_runtime_power.py tests/test_tcc_approve.py
# 59 passed