move_content_block
Moves a content block (contentBlock) from one block to another, KEEPING its id and all its content (no manual retyping needed — that was the blind spot: without this tool, relocating a content block required retyping it by hand in both blocks, an action that has already destroyed a real label in production). sourceCellId===targetCellId is a successful no-op (the content block stays where it is). Exception: if the target block ALREADY carries a content block with that same id (two unrelated content blocks, identical id by coincidence — the content block id is unique per PROJECT, not per block), the moved content block is given a new id so nothing is lost; movedBlockId then reflects the id ACTUALLY persisted, and renamedBlockIds declares it. Any comment thread anchored on this content block (anchor_type='content_block') FOLLOWS the move: its anchor is rewritten to the target block (and to the id actually persisted in case of re-identification), best-effort — a failure on the comments never blocks the move itself.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| blockId | Yes | ID of the content block to move (must exist in sourceCellId). | |
| sourceCellId | Yes | ID of the block that currently CARRIES the content block to move. | |
| targetCellId | Yes | ID of the block that must RECEIVE the content block (at the end of its existing contentBlocks). | |
| expectedProjectId | No | UUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted. |