VaultSort 2.7.16
Directory organization, path predicates, exclude paths, bundle opacity, disk operation history, and i18n permission detection
What's New
- Directory file category for Advanced Organization — discover, evaluate, and act on directories with isEmpty predicate, childCount discovery, and safety guardrails that block move/copy/rename on folders
- Path predicate — new rule predicate kind to match against file paths (contains, starts_with, ends_with, matches, and negations)
- Exclude paths — per-job excludePaths field lets discovery skip entire directory trees
- macOS bundle opacity — .app, .framework, .bundle, .plugin, and .kext bundles are treated as opaque single entries, protecting installed applications from internal discovery
- AI rule tree node limit raised to 100 — complex multi-category jobs with 30-60+ nodes are no longer truncated
- Catch-all else clause for OR nodes — unmatched files now hit a default branch
- DIRECTORY_UNSAFE_ACTION validation — static schema check blocks save when directory predicates are paired with move/copy/rename actions
- Operation history and completion dialog — disk erase and FreeSpace Overwrite operations now record history and show a completion summary
- Changelog authoring step — release script opens a pre-filled template in the editor during release
Bug Fixes
- Permission errors detected in all locales — NSError domain/code tag replaces English-only string matching so non-English macOS users get proper Full Disk Access guidance
- FreeSpace Overwrite no longer leaves custom volume icons — default volume icon is restored after operations; root cause of icon persistence addressed
- Disk erase mount point detection on macOS 12 — partitions on Monterey are now correctly detected
- Privileged helper fallback for orphan cleanup — scan/remove of leftover .vaultsort_freespace_* dirs uses Node.js natively, falling back to the helper only on EACCES
- Directories pass staleness fingerprint check — doesSourceFingerprintMatch no longer hardcodes isFile===true
- Dry-run bypasses Spotlight/Rust for directory jobs — forces TypeScript discovery so directory entries actually appear in preview
- Quarantine no longer traps directory-aware jobs — DIRECTORY_UNSAFE_ACTION is a semantic warning exempt from quarantine; force-restore skips re-validation
- Trash marker excluded from scope lease validation — delete actions no longer fail lease checks
- Validation errors shown with structured detail — save errors list individual issues with bullets instead of a single generic message
