# Case: `reassign-cancels-old-thread-and-dispatches-new-attempt` ## 用例意义 验证 `reassign` 会取消旧的阻塞线程,并为新 worker 创建新的尝试与线程。 ## 前置条件 - 已创建运行 `run_blog_reassign_001` - 已创建任务 `T1` - `T1` 已通过严格 worktree 模式完成首次 `dispatch` - `worker-a` 已 `claim` 首次尝试线程,并通过 `inbox update --status blocked` 写入问题 - 最近一次 `reconcile` 已执行,使任务进入 `blocked` - 已知旧线程为 `OLD_THREAD_ID` ## 输入 ```bash orch --db TMPDIR/coord.db --json reassign --run run_blog_reassign_001 --task T1 --to worker-b --reason "Try another worker with clearer ownership." inbox --db TMPDIR/coord.db --json show --thread OLD_THREAD_ID ``` ## 预期输出 - `reassign` 退出码为 `0` - `reassign.data.attempt.assigned_to == "worker-b"` - `reassign.data.attempt.attempt_no == 2` - `reassign.data.attempt.thread_id != OLD_THREAD_ID` - `show.data.thread.status == "cancelled"`,指向旧线程 ## 断言结论 - `reassign` 不是简单修改 `assigned_to` 字段,而是显式终止旧尝试并派生新尝试 - 旧线程被取消后,worker 侧不会继续在过期上下文上执行 ## 补充约束 - `reassign` 只接受 `blocked` 或 `failed` 任务 - `--to` 是必填参数;`--reason` 建议始终填写,便于审计和人工排障