Previously --subfolder only repointed .josh-sync.yml, leaving the working tree out of sync with the new path until a later filter-change reconciliation happened to catch it. Now validates the old subfolder exists and is tracked by git (proof it's actually managed by josh-sync) and the new one doesn't already exist, then git mv's it — staged, not committed, alongside the config edit. Idempotent on resume. Bumps to v2.4.0. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TNXgcFWVgSh3wkQS55cCX6