40 lines
1.3 KiB
Markdown
40 lines
1.3 KiB
Markdown
# 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` 建议始终填写,便于审计和人工排障
|