# case: cancel-persists-reason-and-artifact

### 用例意义

验证 `cancel` 的原因文本与附件会被完整持久化。

### 前置条件

- 已存在一个非终态线程 `THREAD_ID`
- `TMPDIR/cancel.md` 已存在

### 输入

```bash
inbox --db TMPDIR/coord.db --json cancel --agent leader --thread THREAD_ID --reason "Task superseded by a larger refactor" --artifact TMPDIR/cancel.md --artifact-kind brief
inbox --db TMPDIR/coord.db --json show --thread THREAD_ID
```

### 预期输出

- `cancel` 成功
- 取消消息 `summary` 与 `body` 都保留取消原因
- 取消消息包含 1 个 artifact

### 断言结论

- `cancel` 既保留人类可读原因，也支持附带上下文材料
- 当 `--reason` 为空时，取消消息的 `summary` 会回退为 `thread cancelled`，而 `body` 保持空字符串
- `--artifact-kind` 与 `--artifact-metadata-json` 需要至少一个 `--artifact`，且多值数量必须是 `1` 或与 artifact 数量一致；否则应返回 `invalid_input`

