| name | to-tickets |
| description | Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker — edges as text in one file per ticket locally, or native blocking links on a real tracker. |
| 触发词 | 将计划、规格说明或当前会话拆分为一组曳光弹 ticket,每张声明其阻塞边,发布到已配置的跟踪器——以每个 ticket 一个本地文件中的文本形式呈现边,或在真实跟踪器上使用原生阻塞链接。 |
| disable-model-invocation | true |
Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker — edges as text in one file per ticket locally, or native blocking links on a real tracker.
Break a plan, spec, or conversation into a set of tickets — tracer-bullet vertical slices, each declaring the tickets that block it.
将计划、规格说明或对话拆分为一组ticket——曳光弹垂直切片,每张声明阻塞它的 ticket。
The issue tracker and triage label vocabulary should have been provided to you — run /setup-matt-pocock-skills if not.
你应该已配备 Issue 跟踪器和分诊标签词汇表——如果没有,运行 /setup-matt-pocock-skills。
Work from whatever is already in the conversation context. If the user passes a reference (a spec path, an issue number or URL) as an argument, fetch it and read its full body and comments.
基于会话上下文中已有的任何信息开展工作。如果用户传递了一个引用(规格说明路径、issue 编号或 URL)作为参数,获取它并读取其完整正文和评论。
If you have not already explored the codebase, do so to understand the current state of the code. Ticket titles and descriptions should use the project's domain glossary vocabulary, and respect ADRs in the area you're touching.
如果你尚未探索代码库,请先了解代码的当前状态。Ticket 标题和描述应使用项目的领域术语词汇表,并尊重你所涉及区域的 ADR。
Look for opportunities to prefactor the code to make the implementation easier. “Make the change easy, then make the easy change.”
寻找预重构代码的机会,使实现更容易。“先让改动变容易,再做容易的改动。”
Break the work into tracer bullet tickets.
将工作拆分为曳光弹 ticket。
Give each ticket its blocking edges — the other tickets that must complete before it can start. A ticket with no blockers can start immediately.
给每个 ticket 设置其阻塞边——在它可以开始之前必须完成的其它 ticket。没有阻塞的 ticket 可以立即开始。
Wide refactors are the exception to vertical slicing. A wide refactor is one mechanical change — rename a column, retype a shared symbol — whose blast radius fans across the whole codebase, so a single edit breaks thousands of call sites at once and no vertical slice can land green. Don't force it into a tracer bullet; sequence it as expand–contract. First expand: add the new form beside the old so nothing breaks. Then migrate the call sites over in batches sized by blast radius (per package, per directory), each batch its own ticket blocked by the expand, keeping CI green batch to batch because the old form still exists. Finally contract: delete the old form once no caller remains, in a ticket blocked by every migrate batch. When even the batches can't stay green alone, keep the sequence but let them share an integration branch that all block a final integrate-and-verify ticket — green is promised only there.
大范围重构是垂直切片的例外。 大范围重构是一种机械性变更——重命名列、重打共享符号——其影响半径散布到整个代码库,因此单个编辑会同时破坏数千个调用点,没有任何垂直切片能保持通过。不要强行将其塞入曳光弹;按扩展-收缩序列进行。首先扩展:在旧形式旁边添加新形式,这样不会破坏任何东西。然后按影响半径分批迁移调用点(按包、按目录),每批作为自己的 ticket,被扩展阻塞,批与批之间保持 CI 通过,因为旧形式仍然存在。最后收缩:在没有调用者后删除旧形式,此 ticket 被所有迁移批次阻塞。即使批次本身无法独立保持通过,也要保持序列,但让它们共享一个集成分支,所有分支都阻塞一个最终的集成并验证的 ticket——仅在那里保证通过。
Present the proposed breakdown as a numbered list. For each ticket, show:
将提议的拆解呈现为编号列表。对于每个 ticket,展示:
Ask the user:
问用户:
Iterate until the user approves the breakdown.
迭代直到用户批准该拆解。
Publish the approved tickets. How depends on the tracker /setup-matt-pocock-skills configured — the tickets are the same either way, only the shape of the blocking edges changes:
发布已批准的 ticket。如何发布取决于 /setup-matt-pocock-skills 配置的跟踪器——ticket 无论哪种方式都一样,只有阻塞边的形式不同:
.scratch/<feature-slug>/issues/<NN>-<slug>.md, numbered from 01 in dependency order (blockers first). Each file's “Blocked by” lists the numbers/titles it depends on. Use the per-ticket file template below — one ticket per file, never a single combined file.ready-for-agent triage label unless instructed otherwise — the tickets are agent-grabbable by construction..scratch/<feature-slug>/issues/<NN>-<slug>.md 下每个 ticket 写一个文件,从 01 起按依赖顺序编号(阻塞者优先)。每个文件的「阻塞于」列出其依赖的编号/标题。使用下面的每票文件模板——一个文件一张票,绝不要合并成单一文件。ready-for-agent 分诊标签——ticket 本身的设计就是可被 agent 认领的。Work the frontier: any ticket whose blockers are all done. For a purely linear chain that means top to bottom.
从前沿开始工作:所有阻塞者都已完成的 ticket。对于纯线性的链,即自上而下。
Do NOT close or modify any parent issue.
不要关闭或修改任何父 issue。
# <NN> — <Ticket title>
What to build: the end-to-end behaviour this ticket makes work, from the user's perspective — not a layer-by-layer implementation list.
Blocked by: the numbers/titles of the tickets that gate this one, or “None — can start immediately”.
Status: ready-for-agent
- [ ] Acceptance criterion 1
- [ ] Acceptance criterion 2
# <NN> — <Ticket 标题>
要构建什么:此 ticket 实现的端到端行为,从用户视角出发——不是逐层实现列表。
阻塞于:限制本 ticket 的编号/标题列表,或「无——可立即开始」。
状态: ready-for-agent
- [ ] 验收标准 1
- [ ] 验收标准 2
## Parent
A reference to the parent issue on the tracker (if the source was an existing issue, otherwise omit this section).
## What to build
The end-to-end behaviour this ticket makes work, from the user's perspective — not layer-by-layer implementation.
## Acceptance criteria
- [ ] Criterion 1
- [ ] Criterion 2
## Blocked by
- A reference to each blocking ticket, or “None — can start immediately”.
## 父 Issue
跟踪器上父 issue 的引用(如果源是已有 issue;否则省略本部分)。
## 要构建什么
此 ticket 实现的端到端行为,从用户视角出发——不是逐层实现。
## 验收标准
- [ ] 标准 1
- [ ] 标准 2
## 阻塞于
- 每个阻塞 ticket 的引用,或「无——可立即开始」。
In either form, avoid specific file paths or code snippets — they go stale fast. Exception: if a prototype produced a snippet that encodes a decision more precisely than prose can (state machine, reducer, schema, type shape), inline it and note briefly that it came from a prototype. Trim to the decision-rich parts — not a working demo, just the important bits.
无论哪种形式,避免具体的文件路径或代码片段——它们很快过时。例外:如果原型产出的代码片段能比文字更精确地编码一项决策(状态机、reducer、schema、类型形态),将其内联并简要注明来自原型。精简到富含决策的部分——不是一个可工作演示,只是重要的要点。
Work the frontier one ticket at a time with /implement, clearing context between tickets.
使用 /implement 一次处理一个前沿 ticket,清除 ticket 之间的上下文。