# case: cancel-marks-thread-cancelled ### 用例意义 验证 `cancel` 可以把非终态线程推进到 `cancelled` 终态,并生成控制消息。 ### 前置条件 - 已存在一个非终态线程 `THREAD_ID` ### 输入 ```bash inbox --db TMPDIR/coord.db --json cancel --agent leader --thread THREAD_ID --reason "Task superseded by a larger refactor" ``` ### 预期输出 - 命令退出码为 `0` - `thread.status == "cancelled"` - `message.kind == "control"` ### 断言结论 - `cancel` 是线程级终态转换 - 取消时会释放活跃 lease - `cancel` 不要求调用方持有活跃 lease;只要线程存在且尚未进入终态,就可以被取消 - 如果线程已经是 `done`、`failed` 或 `cancelled`,应返回 `invalid_state`,而不是 `lease_conflict`