Sync aborts with a clear message if anything in the sync path looks tampered with.
What's wrong with this entry?
Before writing, sync now checks every path component from the config home down to the sync root and its staging and staging_pid folders, and aborts the whole round if any of them is a symlink or not a directory. Failures show up as "sync root refused (a symlink or stray file is in the way, or it was removed mid-round)" instead of silently writing through.
- The root is re-verified partway through each round, when files are landed.
- Replacing an existing plugin directory now moves the old one aside, either renaming it to a
.replaced-<pid>-<rand>directory or moving it to a trash directory under the config home, and restores it if the replacement fails. - New warning telemetry:
plugins_sync_root_refused,skills_sync_root_refused,plugins_sync_trash_move_failed,plugins_sync_promotion_failed,skills_sync_manifest_unreadable. - No flag guards this; it is the sync path for everyone on this build.
sync root refused (a symlink or stray file is in the way, or it was removed mid-round)
Strings lifted out of the shipped bundle, so the claim above can be checked against them.