cancel-tasklisted
Install: claude install-skill fitlab-ai/agent-infra
# 取消任务
## 行为边界 / 关键规则
- 本命令用于终止一个不再需要继续执行的任务,并转移到 `completed/`
- 只有在确认该任务无需继续实现、审查或修复时才可取消
- 有效 `issue_number` 存在时,Issue 同步属于必做项
版本戳规则:创建或更新 `task.md` frontmatter 时,先读取 `.agents/rules/version-stamp.md`,并写入或刷新 `agent_infra_version`。
## 执行步骤
### 1. 验证任务存在
依次检查以下目录:
- `.agents/workspace/active/{task-id}/`
- `.agents/workspace/blocked/{task-id}/`
- `.agents/workspace/completed/{task-id}/`
处理规则:
- 如果在 `active/` 或 `blocked/` 中找到:继续
- 如果只在 `completed/` 中找到:告知用户任务已转移,停止
- 如果都不存在:提示 `Task {task-id} not found`
### 2. 判断取消标签
根据取消原因推断 Issue 关闭标签:
- `status: superseded`:原因包含“重复”、“替代”、“合并到”、“已由 #123 / PR 替代”等语义
- `status: invalid`:原因包含“误报”、“不存在”、“无法复现”、“排查后无问题”等语义
- `status: declined`:原因包含“不做”、“暂不实现”、“优先级调整”、“方案否决”等语义
- 以上都不匹配:回退到 `status: declined`
后续同步到 Issue 时,使用最终推断结果替换现有 `status:` labels。
### 3. 更新任务元数据
获取当前时间:
```bash
date "+%Y-%m-%d %H:%M:%S%:z"
```
更新任务目录中的 `task.md`:
- `status`:completed
- `cancelled_at`:{当前时间戳}
- `cancel_reason`:{取消原因}
- `updated_at`:{当前时间戳}
- `agent_infra_version`:按 `.agents/rules/version-stamp.md` 取值
- **追加**到 `## Activity Log`(不要覆盖之前记录):
```
- {YYYY-MM-DD HH:mm:ss±HH:MM} — **Cancelled** by {agent} — {一行取消原因}
```
### 4. 转移任务
将任务目录移动到 `.agents/workspace/completed/{task-id}`。
如果源目录在 `blocked/`,从 `blocked/` 移动;如果源目录在 `active/`,从 `active/` 移动。
### 5. 验证转移
```bash
ls .agents/workspace/completed/{task-id}/task.md
```
确认任务目录已成功移动。
### 6. 同步到 Issue
检查 `task.md` 中是否存在有效的 `issue_number`。如果没有,跳过此步骤。
> Issue 同步规则见 `.agents/rules/issue-sync.md`。