to-tickets
1. Bilingual SKILL.md
左右滑动可直接切换英文版与中文版;两种语言按段落自动对齐。英文中的蓝色虚线词语可点击查看解释。共标记 20 处。
Entry SHA-256: 5c9fba69845c2519b9b35b9af42ae5142c21f8ca15ac2123dc2722002c8058ae
2. Why This Skill Is Clever
一句话核心机制
把计划或规格编译成一张可执行的依赖图:节点是能独立演示的 tracer-bullet 垂直切片,边是真正阻塞开工的前置关系,并在发布前保留一次用户审批门。
触发与调用边界
直接来源: frontmatter 的 disable-model-invocation: true 表示技能必须由用户显式调用。它接受三类输入:当前对话、规格路径,以及 issue 编号或 URL;如果拿到引用,必须读取完整正文和评论。
直接来源: issue tracker 与 triage label vocabulary 是硬前置条件。缺失时不得临时猜测平台和标签,而要让用户先运行 /setup-matt-pocock-skills。
支持性上下文: companion docs 把 /to-tickets 放在主构建链 grill-with-docs → to-spec → to-tickets → implement → code-review 中,并明确:若整个改动能在一个 context window 内完成,应跳过拆票直接使用 implement。
信息架构 / 执行顺序
- 复用或补齐输入: 优先使用现有对话;外部引用必须读完正文与评论。
- 校准工程现场: 必要时探索代码库,继承领域词汇并遵守相关 ADR。
- 先清理路径: 寻找能让后续变更更容易的 prefactoring,并把它排在前面。
- 建立节点: 每张工单必须窄而完整、可独立演示或验证,并能放进一个全新 context window。
- 建立边: 只声明真正阻塞开工的 blocking edges;无阻塞节点组成当前 frontier。
- 处理结构例外: 无法保持单片绿色的 wide refactor 改用 expand–contract 与迁移批次。
- 人类校验: 用户确认粒度、阻塞边以及合并/拆分方案;批准前不得发布。
- 按依赖顺序发布: 本地模式一票一文件,真实 tracker 一票一 issue,并尽量使用平台原生关系。
最巧妙的设计点
1. 它拆的不是任务清单,而是可验证的价值路径
“Each slice cuts a narrow but COMPLETE path through every layer”
直接来源: 技能用 COMPLETE 与 NOT a horizontal slice 两个强约束对抗最自然却最危险的分层拆票。schema、API、UI、tests 不是四张票,而是一张票要贯穿的路径。
解释: 这把“票是否够小”升级为“票是否形成闭环”。每张票都拥有自己的行为和验证证据,降低了跨票验收与集成末期爆雷的概率。
2. 用 fresh context window 定义 agent 原生的容量单位
“Each slice is sized to fit in a single fresh context window”
直接来源: 规模上限不是人类工时或 story point,而是一个没有先前会话记忆的新上下文窗口。
解释: 这是明显的 agent-first 设计。它迫使工单自包含:标题、交付行为、验收标准与依赖必须足以让陌生执行者接手,而不能依赖“大家都知道”的隐性上下文。
3. 把依赖从排序提示提升为图的不变量
“does each ticket only depend on tickets that genuinely gate it?”
直接来源: 用户不仅检查拆分粒度,还要检查每条边是否真的构成门槛。发布又按 dependency order 进行,保证后创建的票能引用已存在的阻塞项。
解释: 许多计划把依赖当装饰性字段;这里则让它控制并行度、发布顺序和 frontier。删除虚假边能释放并行性,补上缺失边能防止过早开工。
4. 规则有一个按拓扑失败模式设计的窄例外
“Wide refactors are the exception to vertical slicing.”
直接来源: 共享符号或列重命名可能让任何单独垂直切片都无法保持绿色。技能没有硬套主规则,而是明确 expand、分批 migrate、contract 的阻塞关系;必要时再加入集成分支与最终验证票。
解释: 好例外不是“自行判断”,而是另一套完整算法。这里先描述识别信号(blast radius 与无法单片绿色),再规定迁移阶段、边和绿色承诺发生在哪里,因此例外仍然可审计。
5. 在不可逆外部写入前设置结构化审批门
“Iterate until the user approves the breakdown.”
直接来源: 发布前必须用编号列表呈现标题、Blocked by 与 What it delivers,并询问粗细、边和合并/拆分;只有批准后才能写入 tracker。
解释: 这把人类注意力集中在三项高杠杆决策,而不是逐字审稿。它也遵循外部副作用边界:草稿可以自主生成,污染 tracker 前必须得到明确批准。
6. 同一语义模型适配两种存储后端
“the tickets are the same either way, only the shape of the blocking edges changes”
直接来源: 本地 tracker 以一票一文件和文本 Blocked by 表达边;真实 tracker 则优先原生 blocking / sub-issue 关系。两者都按阻塞项优先发布。
解释: 技能把领域模型(票与边)和持久化适配器(文件或平台 API)分开。这样迁移 tracker 不会改变拆票算法,只改变边的编码方式。
防失败机制与显式不变量
直接来源:
- 缺少 tracker 或 triage label vocabulary 时停止并引导 setup;
- 外部引用必须读取完整正文和评论,不能只靠摘要;
- 工单使用项目领域词汇并尊重相关 ADR;
- 每个普通切片必须完整贯穿各层、可独立演示或验证;
- prefactoring 必须排在依赖它的实现之前;
- 只有真正 gate 下游的关系才能成为阻塞边;
- 用户批准前不得发布;
- 本地模式一票一文件,严禁合并成单一文件;
- 真实 tracker 按阻塞项优先创建,以便引用真实标识符;
- 不得关闭或修改父 issue;
- 默认禁止易过时的文件路径与代码片段,原型例外只保留 decision-rich parts。
取舍、可移植风险与宿主假设
解释: 垂直切片降低集成风险,却可能重复触碰相同层并增加部署开销;single fresh context window 也不是稳定的复杂度单位,会随模型、工具和上下文容量变化。阻塞图依赖执行者正确识别“相关”与“真正 gate”的差异,错误边会压低并行度或制造返工。技能还假设宿主能读取完整 issue、探索代码库、找到 glossary/ADR,并通过 tracker API 创建原生 blocking 或 sub-issue 关系。
支持性上下文: companion docs 记录了两个现实缺口:某些运行会把 GitHub 原生关系退化成正文文本,或没有把工单挂成父 issue 的 sub-issue;本地单文件方案也曾因并行写入发生竞争,后来改成一票一文件。这些是实现适配器的风险,不改变所选源文件定义的票与边模型。
可迁移原则
- 用可独立观察的结果拆工作,不用组织架构或技术层拆工作。
- 把依赖建模成可验证的边。 每条边都要回答“没有它,真的不能开始吗?”
- 选择与执行者匹配的容量单位。 对 agent 来说,fresh context window 比人类工时更贴近真实限制。
- 给主规则设计有识别条件、有步骤、有承诺点的窄例外。
- 先审批结构,再执行外部副作用。 人类只需盯住粒度、边和交付行为。
- 领域模型与存储适配器分离。 节点与边不随 GitHub、Linear 或本地文件而改变。
今日实践题
假设“把用户 ID 从整数迁移为 UUID”会横跨 schema、API 和数百个调用点:你会如何判断它应拆成普通 tracer bullets 还是 expand–contract,并画出最小的阻塞图?
Evidence note
本文关于触发方式、输入、前置配置、上下文读取、代码库探索、垂直切片、blocking edges、wide-refactor 例外、用户审批、tracker 发布、模板和禁止修改父 issue 的结论均来自所选 SKILL.md。关于主构建链、跳过条件、已知 GitHub 原生关系缺口及本地并发写入历史来自 docs/engineering/to-tickets.md,只作为支持性上下文。关于 agent-first 容量单位、图并行性、外部副作用边界和适配器分层的判断属于设计解释。
Source & provenance
- Repository path
- skills/engineering/to-tickets/SKILL.md
- Generated
- 2026-08-24 08:24 Asia/Shanghai
- Upstream commit
- 5b15a47f2d7150f545fbcacbfe381787fc0230dc
- Source
- View on GitHub