v3.7.6 - ACL enforcement on post-sync rematch + UI signals
Follow-up point release addressing two issues flagged in the v3.7.5 review.
๐ Bug Fixes
- Post-sync rematch now re-validates every path against
CONFIGURED_VOLUMES. v3.7.5's rematch hook snapshotted paths fromDATMatchand handed them toschedule_match_jobunchanged. Those paths were ACL-approved at write time, but a later tightening ofCONFIGURED_VOLUMES(a mount unmounted, a library removed) or a retargeted symlink would slip through undetected.schedule_match_jobnow runs every incoming path throughos.path.realpath+is_within_configured_volumesand drops denied entries with aWARNINGlog. The HTTP/dat/match-batch/jobhandler still pre-filters, so duplicate filtering is a no-op on the HTTP path. _background_match_tasksinvariant is now self-checking.schedule_match_joblogs a warning if the strong-ref set is non-empty when a new task is scheduled โ the concurrency guard should make that impossible, so surfacing it catches any future guard-bypass regression that would otherwise be silent.
โจ UX Improvements
- Sync status payload carries
rematch_status+rematch_job_id.GET /dat/sync/statusnow reportsscheduled(with a job_id the UI can poll),deferred(another match job holds the lock),failed(scheduling raised; DAT import still succeeded), orNone(sync had errors; no rematch attempted). Previously the UI had to infer rematch progress from log-tailing.
๐งช Tests
313 tests pass (+5 new):
- ACL filter tests (all-denied, mixed allow/deny).
- Rematch-status plumbing tests (scheduled / deferred / failed branches).
- Task-lifecycle assertion tightened to cover
_background_match_tasksmembership.
โ ๏ธ Upgrade Notes
- No action required. The ACL re-check is idempotent on already-admitted paths. Frontend consumers see two new optional keys in
progressโ old clients that ignore unknown keys keep working.