| name | triage |
| description | 通过分诊角色驱动的状态机分诊 tickets。当用户说"分诊"、"triage"、"看看有什么待处理"、 "哪些 ticket 可以做了"、"审查 tickets"、"管理任务状态"时使用。适用于 to-tickets 产出后 管理任务状态、推进 frontier、审查 incoming 需求。触发词:triage、分诊、任务分诊、 ticket 状态、frontier、ready-for-agent、needs-triage、任务状态管理。
|
| task_type | dev.triage |
Triage (triage)
通过一组小型 triage roles state machine,在 wip_tasks 表中移动 tickets。
改造说明(原版 → 本版)
原版(mattpocock/skills)在 issue tracker(GitHub Issues / Linear 等)上操作 issues 和 labels,依赖 /setup-matt-pocock-skills 配置 label 映射。本版改造为:
- ticket 存储:
wip_tasks 表(type=ticket 的记录)
- category role:
extra_data.category(bug / enhancement)
- state role:
extra_data.state(needs-triage / needs-info / ready-for-agent / ready-for-human / wontfix)
- 状态转移:
wip_update(extra_data={category, state}) 修改
- frontier 查询:
wip_list(type=ticket, status=active) + 按 extra_data.blocked_by 过滤
Triage 期间发布到 ticket 的每条 comment 或 note 必须以此 disclaimer 开头:
> *This was generated by AI during triage.*
Reference docs
Roles
两个 category roles:
bug — 某个东西坏了
enhancement — 新功能或改进
五个 state roles:
needs-triage — maintainer 需要评估
needs-info — 等待 reporter 提供更多信息
ready-for-agent — 已完整说明,准备给 AFK agent 接手
ready-for-human — 需要人工实现
wontfix — 不会处理
每个已 triage 的 ticket 应该刚好携带一个 category role 和一个 state role。如果 state roles 冲突,标记出来并先询问 maintainer,再做其他事。
State transitions:未标记的 ticket 通常先进入 needs-triage;之后移动到 needs-info、ready-for-agent、ready-for-human 或 wontfix。needs-info 在 reporter 回复后回到 needs-triage。Maintainer 可以随时 override;对看起来异常的 transitions 标记并在继续前询问。
Invocation
Maintainer 调用 /triage 或说"分诊一下",并用自然语言描述想要什么。解释请求并行动。示例:
- "Show me anything that needs my attention"
- "Let's look at ticket #42"(#42 是 wip_id)
- "Move ticket #42 to ready-for-agent"
- "What's ready for agents to pick up?"
Show what needs attention
查询 wip_list(type=ticket, status=active),按最旧优先展示三个 buckets:
- Unlabeled —
extra_data.state 为空或不存在,从未 triaged。
needs-triage — extra_data.state == "needs-triage",evaluation in progress。
needs-info with reporter activity since the last triage notes — extra_data.state == "needs-info" 且有新活动,需要重新评估。
显示每个 bucket 的数量,以及每个 ticket 的一行摘要。让 maintainer 选择。
Triage a specific ticket
-
Gather context. wip_get(wip_id=<id>) 读取完整 ticket(goal、acceptance_criteria、ticket_path、extra_data)。读 workspace/tickets/<feature-slug>/<NN>-<slug>.md 获取完整 body。解析任何之前的 triage notes(extra_data.triage_notes),避免重新询问已解决的问题。使用项目 domain glossary(CONTEXT.md)探索 codebase,并遵守相关 ADRs(docs/adr/)。读取 .out-of-scope/*.md(如有),并指出任何与此 ticket 相似的既往拒绝。
-
Recommend. 告诉 maintainer 你的 category 和 state 推荐及理由,并给出与 ticket 相关的简短 codebase summary。等待指示。
-
Reproduce(仅 bugs). 在任何 grilling 前尝试复现:读取 reporter 的步骤,追踪相关代码,运行 tests 或 commands。报告发生了什么:成功复现及 code path、复现失败,或细节不足(强烈的 needs-info 信号)。已确认复现会让 agent brief 更有力。
-
Grill(如果需要). 如果 ticket 需要进一步充实,运行一次 dev/grill-with-docs session。
-
Apply the outcome — 调用 wip_update 修改 extra_data.category 和 extra_data.state:
ready-for-agent — 在 extra_data.agent_brief 写 agent brief(AGENT-BRIEF.md)。
ready-for-human — 使用与 agent brief 相同的结构,但在 extra_data.human_only_reason 说明为什么不能委托(judgment calls、external access、design decisions、manual testing)。
needs-info — 在 extra_data.triage_notes 写 triage notes(见下方 template)。
wontfix(bug)— 礼貌解释(写进 extra_data.wontfix_reason),然后 wip_update(status=completed) 关闭。
wontfix(enhancement)— 写入 .out-of-scope/,从 extra_data.out_of_scope_ref 链接到它,然后 wip_update(status=completed) 关闭(OUT-OF-SCOPE.md)。
needs-triage — 应用 role。如果有部分进展,可选写 notes。
Quick state override
如果 maintainer 说 "move ticket #42 to ready-for-agent",相信他们并直接 wip_update(wip_id=42, extra_data={state: "ready-for-agent"})。确认你即将做什么(role changes、notes、close),然后执行。跳过 grilling。如果在没有 grilling session 的情况下移动到 ready-for-agent,询问他们是否想写 agent brief。
Needs-info template
写入 extra_data.triage_notes:
## Triage Notes
**What we've established so far:**
- point 1
- point 2
**What we still need from you (@reporter):**
- question 1
- question 2
把 grilling 期间已经解决的所有内容都捕获到 "established so far" 下,避免工作丢失。问题必须具体且可执行,而不是 "please provide more info"。
Resuming a previous session
如果 ticket 上已有 triage notes(extra_data.triage_notes),读取它们,检查 reporter 是否回答了任何 outstanding questions,并在继续前展示更新后的情况。不要重复询问已解决的问题。
关键规则
- AI disclaimer 必加:triage 期间发布的每条 comment/note 必须以
> *This was generated by AI during triage.* 开头
- category + state 成对:每个已 triage 的 ticket 必须同时有 category 和 state
- wip_update 修改状态:所有状态转移通过
wip_update(extra_data={...}) 实现,不直接改文件
- 不 close parent spec:triage 只管 ticket 状态,不修改 parent spec 的 wip 记录
与其他 skill 的关系
- 上游:
to-tickets 产出 tickets → triage 管理状态
- 内部调用:
dev/grill-with-docs(充实 ticket)
- 下游:
implement 从 ready-for-agent 的 frontier ticket 领取执行