Split from the grouped rename and copy/paste report (#354, item 5 of 5).
Sibling issues already filed for other slices of that report: copy undo (#390), conflict dialog X (#391), destination selection (#392), rename caret (#394). This issue is the remaining product inconsistency between pasting into the current folder and pasting into a different folder — naming / collision policy — not those completion behaviors.
Strata version
Reproduced on Strata debug build at commit 183d744 with fixture source/report.txt and dest/report.txt.
What happened?
Copy/paste does not behave the same way when the destination is the current folder versus a different folder.
In practice:
- Pasting a file into the folder it already occupies silently creates
name (1).ext (then (2), …) and never asks.
- Pasting that same file into another folder that already has
name.ext raises “File already exists” with Replace / Skip / Cancel, and has no “keep both / unique name” choice.
That makes it hard to predict whether a paste will auto-rename, prompt, replace, or no-op.
Steps to reproduce
Use a writable fixture with source/report.txt and dest/report.txt (same basename, different files).
Same-folder paste (auto-duplicate)
- Open
source/.
- Copy
report.txt and paste into source/.
- Observe a new
report (1).txt with no dialog.
Cross-folder paste (conflict dialog)
- Copy
source/report.txt.
- Open
dest/ and paste.
- Observe the “File already exists” dialog instead of a generated unique name.
- Choose Replace, Skip, and Cancel on separate runs and compare outcomes.
Expected behavior
Same-folder and cross-folder paste share consistent naming and collision policy (auto unique name, prompt, or a prompt that includes “keep both”), and share the same dialog actions when a prompt is required.
Duplicate and clipboard paste into the source’s parent must stay on that shared path so Ctrl+V in the current folder and an explicit duplicate do not diverge again.
Selection / undo / dialog X belong to the sibling issues above; the unified paste path should use those once they exist.
Screenshots or video
Full walkthrough (~91s) — same-folder unique name, conflict dialog Cancel/Skip, Miller context check:
https://cursor.com/artifacts/v/art-86a1f3a7-9cee-47d1-8ac9-a381187a9b2b
Clean side-by-side (~28s) — silent report (1).txt, then conflict dialog → Replace:
https://cursor.com/artifacts/v/art-785334c0-28ba-46e3-b57f-36e626141119
Additional context
Paste enters BrowserState::start_transfer. transfer_has_collision returns false when the source equals the would-be target, so same-folder pastes bypass the dialog and take the path where local_operations allocates name (1).ext via duplicate_target. Only genuine cross-folder collisions reach confirm_replace_conflict, which offers Replace / Skip / Cancel with no generate-unique-name choice.
TransferConflict only has FailIfExists and ReplaceExisting — there is no keep-both / unique-name option for the cross-folder dialog.
Acceptance criteria
Labels suggestion: bug, UX
Split from the grouped rename and copy/paste report (#354, item 5 of 5).
Sibling issues already filed for other slices of that report: copy undo (#390), conflict dialog X (#391), destination selection (#392), rename caret (#394). This issue is the remaining product inconsistency between pasting into the current folder and pasting into a different folder — naming / collision policy — not those completion behaviors.
Strata version
Reproduced on Strata debug build at commit
183d744with fixturesource/report.txtanddest/report.txt.What happened?
Copy/paste does not behave the same way when the destination is the current folder versus a different folder.
In practice:
name (1).ext(then(2), …) and never asks.name.extraises “File already exists” with Replace / Skip / Cancel, and has no “keep both / unique name” choice.That makes it hard to predict whether a paste will auto-rename, prompt, replace, or no-op.
Steps to reproduce
Use a writable fixture with
source/report.txtanddest/report.txt(same basename, different files).Same-folder paste (auto-duplicate)
source/.report.txtand paste intosource/.report (1).txtwith no dialog.Cross-folder paste (conflict dialog)
source/report.txt.dest/and paste.Expected behavior
Same-folder and cross-folder paste share consistent naming and collision policy (auto unique name, prompt, or a prompt that includes “keep both”), and share the same dialog actions when a prompt is required.
Duplicate and clipboard paste into the source’s parent must stay on that shared path so Ctrl+V in the current folder and an explicit duplicate do not diverge again.
Selection / undo / dialog X belong to the sibling issues above; the unified paste path should use those once they exist.
Screenshots or video
Full walkthrough (~91s) — same-folder unique name, conflict dialog Cancel/Skip, Miller context check:
https://cursor.com/artifacts/v/art-86a1f3a7-9cee-47d1-8ac9-a381187a9b2b
Clean side-by-side (~28s) — silent
report (1).txt, then conflict dialog → Replace:https://cursor.com/artifacts/v/art-785334c0-28ba-46e3-b57f-36e626141119
Additional context
Paste enters
BrowserState::start_transfer.transfer_has_collisionreturns false when the source equals the would-be target, so same-folder pastes bypass the dialog and take the path wherelocal_operationsallocatesname (1).extviaduplicate_target. Only genuine cross-folder collisions reachconfirm_replace_conflict, which offers Replace / Skip / Cancel with no generate-unique-name choice.TransferConflictonly hasFailIfExistsandReplaceExisting— there is no keep-both / unique-name option for the cross-folder dialog.Acceptance criteria
Labels suggestion:
bug,UX