The file sync used by claude --cloud now explains why it refuses when the project folder:
- is linked from the Claude Code configuration
- sits inside the configuration folder
- cannot be examined, because it has too many entries, a path cannot be read, or it links to a network share
The committed_protected refusal now says that sync carries no commits that change protected files. The suffix "move its filter rules into a .gitattributes file or remove it" is no longer added to refusal messages.
On shutdown, a new tengu_dir_sync_exit event reports whether the final pull finished, was cut short or never happened. Files that sync moves aside now return an outcome with a discardCopy cleanup step, and a held file reports held.
When sync refuses a project folder, you now get a reason that points at the cause.