Reference · User-invoked · 编排层 / 主流程

to-tickets 速查

把定稿的计划 / spec / 对话拆成带 blocking edges 的 tracer-bullet 票,发布到配置好的工单系统。 完整教学见 Lesson 0010; 原文见 SKILL.mdagents/openai.yamldocs/engineering/to-tickets.md

一句话

拆成垂直切片的票(穿透 schema / API / UI / tests,各自可独立演示、 装得进一个 fresh context window),每张声明 Blocked by, 你批准后才发布;前置:跑过 /setup-matt-pocock-skills。 只能人手输入 /to-tickets 启动(disable-model-invocation: true + allow_implicit_invocation: false)。

何时伸手 / 何时别用

核心词汇

Tracer bullet / Vertical slice
窄但完整的路径,穿透所有层;完成即可独立演示或验证。反面:horizontal slice(整层做完,所有层落地前无物可用)。
Blocking edge
每张票声明「哪些票必须先完成」。无 blocker = 可立即开工。docs:边才是整套拆法的意义(the whole point)。
Frontier
所有 blocker 均已完成、现在可开工的票集合。纯线性链 = 从上往下。
Prefactor
拆票前排第一的准备性重构:「Make the change easy, then make the easy change.」
Wide refactor / Blast radius
单一机械改动(改列名、改共享符号类型)波及全库,无垂直切片能落地保持绿 → 垂直切片唯一例外。

五步流程

  1. Gather context:就地取材;传了引用就抓回正文 + 全部评论。
  2. Explore codebase(可选):票标题用领域术语表词汇、尊重 ADR;找 prefactor 机会。
  3. Draft vertical slices:四规则(窄而完整穿各层 / 独立可演示 / 装进一个 fresh window / prefactor 最先)+ 标 blocking edges。
  4. Quiz the user:编号列表展示 Title / Blocked by / What it delivers;问粒度、边、合并拆分;批准前不发布
  5. Publish:按 setup 配置的 tracker 发;票相同,只差边的形状。

宽重构:expand–contract

Expand   新形态加在旧形态旁边,并存不删
Migrate   按爆炸半径分批迁调用点(per package / directory),每批一票,
          都被 expand 阻塞;旧形态仍在 → 批间 CI 保持绿
Contract  无调用者后删旧形态;被每一张 migrate 票阻塞
变体:批次无法各自保绿 → 共享 integration branch,
      全部阻塞最后的 integrate-and-verify 票,绿只在那里兑现

发布:两种 tracker

本地 markdown远程 tracker(GitHub / Linear)
落在哪 .scratch/<feature-slug>/issues/<NN>-<slug>.md,一票一文件,绝不合并 一票一 issue;平台支持就用原生 blocking / sub-issue
顺序 01 按依赖顺序编号(blocker 在前) 按依赖顺序发(blocker 在前),后续票才能引用真实编号
标签 文件顶部 Status: ready-for-agent ready-for-agent 标签(除非另指示)
执行 按编号从上往下,手动逐票推进 前沿票可被多个 agent 并行领走(fleet)

模板字段:What to build(用户视角的端到端行为,非逐层清单)、 Blocked byStatus、验收标准复选框;远程版多一节 Parent(原料是已有 issue 时)。

三条铁规矩

  1. 不碰父 issue:Do NOT close or modify any parent issue.
  2. 不写文件路径 / 代码片段(过时快);例外:prototype 产出的决策片段(状态机、reducer、schema、类型形状)可内联并注明出处,只留决策浓度高的部分。
  3. 每票一个新会话执行:Work the frontier one ticket at a time with /implement, clearing context between tickets.

会改什么

下一步

微调入口(症状 → 改哪段)

症状改哪里
拆成水平切片SKILL.md 第 3 节 <vertical-slice-rules>
没问你就发布SKILL.md 第 4 节「Quiz the user」
票里全是路径 / 代码SKILL.md 末尾 no-paths 段 + prototype 例外
宽重构硬拆垂直切片SKILL.md 第 3 节 wide-refactor 段
发错位置 / 不知发哪setup 生成的 docs/agents/issue-tracker*.md(不是 skill 本身)
标签打错setup 生成的 docs/agents/triage-labels.md 映射
父 issue 被动了SKILL.md 第 5 步「Do NOT close or modify…」
agent 自行启动frontmatter disable-model-invocation + openai.yaml allow_implicit_invocation