renameFolder + moveFolder enforce sibling-name uniqueness via the shared isSiblingNameConflict helper and reject cross-port leakage at the service boundary. moveFolder walks the destination's ancestor chain to refuse cycles before the write. deleteFolderSoftRescue re-parents every child folder and document up to the deleted folder's parent (or to root) inside a transaction, then drops the folder row. Children never disappear silently — a wrong click moves work up the tree, never deletes it. Audit-logged with rescuedTo metadata. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.0 KiB
3.0 KiB