# roadmap_entry_move

Move Roadmap Entry

## Beschreibung

Moves a roadmap entry to a different roadmap **in the same
workspace**. The entry keeps its title, description, status, dates
and every linked project — only its parent roadmap (and a
fresh tail position) change. An `entry_moved` activity is
written to BOTH roadmaps' feeds.

Same-workspace only: an entry inherits its roadmap's workspace and its
project links are workspace-bound, so a cross-workspace target is
rejected. Move the projects' workspace or unlink first if you need
to reorganise across workspaces.

Two-step confirmation (the move is not silent): the first call
— with `confirm` omitted or false — performs NO change and
returns a preview (`confirm_required: true`) describing the
source and target. Repeat the call with `confirm: true` to
actually move the entry. Surface the preview to the user and
get their go-ahead before confirming.

Auth: the actor must be able to update both the entry's current
roadmap and the target roadmap.

## Zugriff

Zugriffsprofil: `gated`. Module: `projects_tasks`.
Die Freigabe im Profil ersetzt keine Account-, Workspace- oder Rollenberechtigung.

## Parameter

| Name | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- |
| `account_id` | string | Ja | Account prefix ID (acct_…). |
| `id` | string | Ja | Entry prefix ID (rent_…). |
| `target_roadmap_id` | string | Ja | Destination roadmap prefix ID (rmap_…). Must be in the same workspace as the entry. |
| `confirm` | boolean | Nein | Must be true to execute. Omit/false returns a dry-run preview and changes nothing. |

## Eingabeschema

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "account_id": {
      "type": "string",
      "description": "Account prefix ID (acct_…)."
    },
    "id": {
      "type": "string",
      "description": "Entry prefix ID (rent_…)."
    },
    "target_roadmap_id": {
      "type": "string",
      "description": "Destination roadmap prefix ID (rmap_…). Must be in the same workspace as the entry."
    },
    "confirm": {
      "type": "boolean",
      "description": "Must be true to execute. Omit/false returns a dry-run preview and changes nothing."
    }
  },
  "required": [
    "account_id",
    "id",
    "target_roadmap_id"
  ],
  "type": "object"
}
```

## Ausgabeschema

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "moved": {
      "type": "boolean",
      "description": "True once the move has been executed; false on a preview."
    },
    "confirm_required": {
      "type": "boolean",
      "description": "True on a preview — call again with confirm: true to execute."
    },
    "from": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "title"
      ]
    },
    "to": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "title"
      ]
    },
    "entry": {
      "type": "object",
      "description": "The entry payload (current state on preview, post-move state on execute)."
    }
  },
  "required": [
    "moved",
    "from",
    "to",
    "entry"
  ],
  "type": "object"
}
```
