Conversation
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00d3965266
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (!isPortableVaultPath(path)) { | ||
| return false; |
There was a problem hiding this comment.
Apply tombstones for legacy incompatible paths
When an incompatible path was synced before this upgrade, deletes remain publishable because PushMutationPreparer.prepareMutationForCommit returns for delete operations before validating portability. This unconditional predicate then rejects that tombstone during pull; PullEntryStateApplier merely records its remote state and never removes the existing local file. Consequently, upgraded macOS/Linux clients retain a file that another client deleted while advancing past the deletion, so tombstones for already-tracked incompatible paths need distinct handling from live writes.
AGENTS.md reference: AGENTS.md:L10-L10
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in d4d8887. Remote tombstones now bypass portability filtering, while live remote writes remain blocked, so upgraded clients can remove legacy incompatible paths correctly.
| // TODO: Refresh decorations when an existing blocked file becomes syncable. | ||
| if (blockedSyncFiles > 0) { | ||
| this.deps.onFileSizeBlockedFilesChange?.(); |
There was a problem hiding this comment.
Refresh warnings when an incompatible-path block is cleared
After an incompatible file has been blocked, renaming it to a portable path replaces the blocked mutation with a pending one and the subsequent successful push leaves blockedSyncFiles at zero. Because this callback fires only when the current drain creates a block, neither the settings warning nor the decorator is notified that the old blocked row disappeared; the settings count can remain stale until the pane is reopened, and deleting an unsynced blocked file has the same problem. Emit a blocked-files change when a blocked mutation is replaced or removed as well as when one is created.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Thanks for pointing this out. As I understand it, refreshing the UI when a blocked mutation is replaced or removed was not implemented for the existing file-size-blocked flow either, so this appears to be a pre-existing lifecycle-notification gap rather than a regression introduced by incompatible-path blocking. I would prefer to address that broader behavior separately and keep this PR focused on preventing incompatible paths from syncing. Do you think there is a reason this needs to be included in this PR?
Problem
macOS allows users to create file and folder paths that cannot be applied on Windows.
Previously, these paths could be added to sync, causing errors when a Windows client attempted to apply them.
Summary
Details
incompatible_pathas a blocked reasonlistBlockedSyncFiles()listFileSizeBlockedFiles()API and related types as deprecated aliases for backward compatibilityValidation
||are blocked and not synced