VaultSort 3.1.0

advanced-organizerule-builderrolling-datesrecursiveaiquality-of-life

Advanced Organize gains per-job recursive folder scanning, rolling-date conditions, smarter AI job drafting, and a round of visual polish across the Rule Builder.

What's New

Recursive folder scanning

  • Per-job subfolder control. Each Advanced Organize job now carries its own recursive flag — include or exclude subfolders on a job-by-job basis instead of relying on a single global toggle.
  • Wired end-to-end. The flag threads through schema validation, the renderer dry-run executor, the headless task executor, and the new "Include subfolders (recursive)" checkbox in both the main Advanced Organize modal and the Visual Rule Builder.

Rolling-date conditions

  • Relative date predicates. Date conditions (created, modified, lastOpened) can now use rolling windows — "created more than 6 months ago" or "modified within the last 2 weeks" — instead of hard-coded calendar dates.
  • Specific / Rolling toggle. The Predicate Editor presents a Date Type selector; choose Specific for a calendar picker or Rolling for an amount + unit + direction control (days, weeks, months, years × ago / from now).
  • Evaluated at run time. Rolling dates resolve against the current clock each time the job executes, so scheduled jobs stay evergreen without manual date updates.
  • Full parity. Both the renderer preview and the headless daemon evaluate rolling dates identically, verified by integration parity tests.

Smarter AI job drafting

  • Rolling-date awareness. The AI job builder now understands RelativeDateValue and will propose rolling windows (e.g. a 6-month cutoff) instead of hard-coded ISO dates when the user's intent is time-relative.
  • Rename find/replace guidance. The AI prompt now includes documentation and an example for the rename action's find/replace fields, reducing malformed drafts.

Improvements

  • Rolling-date node summaries render as human-readable text ("2 weeks ago", "1 day from now") in the Rule Builder tree and the evaluator logs, replacing the previous raw [object Object] output.
  • Predicate Editor metadata layout restructured: date-type selector no longer stretches to fill remaining width; rolling-date controls (amount, unit, direction, live preview) break onto their own full-width row, left-aligned with Field and Operator above.
  • Visual Rule Builder preview toolbar now stacks "Include hidden files" and "Include subfolders (recursive)" vertically with a tight 2 px gap, matching the main modal's checkbox density.
  • Main Advanced Organize modal checkbox stack tightened from gap: 0.5 to 2 px with compact padding, eliminating excess whitespace between the two options.

Bug Fixes

  • Rolling-date predicates no longer render as "created after [object Object]" in the Rule Builder node summary and evaluator brief description.
  • Predicate Editor: wrapped metadata fields no longer indent on the second row (replaced MUI Stack spacing with CSS columnGap / rowGap to avoid the marginLeft artifact on flex-wrap).
  • Schema validation now rejects RelativeDateValue objects with amount ≤ 0, amount > 3650, non-integer amounts, or unrecognised unit / direction values.

Tests

  • 21 unit tests for relativeDate.ts — resolution arithmetic, isRelativeDateValue type guard (boundary values, rejection cases), headless parity, and formatRelativeDate output.
  • 18 schema-validation tests covering valid and invalid RelativeDateValue shapes.
  • 6 headless evaluator tests for rolling-date predicate branches.
  • 6 renderer evaluator + parity tests confirming cross-realm instanceof Date safety.
  • 3 Predicate Editor UI tests for the Specific / Rolling mode toggle.
  • Pre-existing Visual Rule Builder and Predicate Editor test suites (14 tests) confirmed green after all changes.

Compatibility

  • macOS 12+ on Apple Silicon and Intel. Rolling dates and recursive scanning have no hardware requirements beyond the existing VaultSort 3 baseline.
  • Existing saved jobs and rules from VaultSort 3.0.0 load unchanged; the new recursive field defaults to true (preserving previous behaviour) when absent.

Stay Updated with VaultSort

Get the latest updates, security tips, and feature announcements delivered to your inbox.

🔒We respect your privacy. Unsubscribe at any time.