PluginBench
Skill
Review
Audit score 70

to-tickets

vinvcn/mattpocock-skills-zh-cn

Break plans, specs, or conversations into tracer-bullet tickets with blocking dependencies for your issue tracker.

What is to-tickets?

Converts a plan, specification, or conversation into a set of vertical-slice tickets, each declaring which other tickets block it. Publishes to a configured tracker (local files or GitHub/Linear/etc.) with native blocking links. Use this when you need to decompose work into independently completable, context-window-sized chunks.

  • Analyzes plans, specs, or conversation context to identify work scope
  • Decomposes work into vertical-slice tickets that span all layers (schema, API, UI, tests)
  • Identifies blocking dependencies between tickets so work can proceed in parallel
  • Handles wide refactors via expand–contract sequencing to maintain CI green
  • Publishes tickets to local files or real issue trackers with native blocking relationships
  • Applies ready-for-agent labels for agent-friendly ticket assignment

How to install to-tickets

npx skills add https://github.com/vinvcn/mattpocock-skills-zh-cn --skill to-tickets
Prerequisites
  • Issue tracker configured via /setup-matt-pocock-skills (local files, GitHub, Linear, or similar)
  • Triage label vocabulary and domain glossary already defined in your project
Claude Code
Cursor
Windsurf
Cline

How to use to-tickets

  1. 1.Provide a plan, spec file path, issue number, or reference the current conversation
  2. 2.Let the skill explore your codebase to understand current state and identify prefactoring opportunities
  3. 3.Review the proposed ticket breakdown: titles, blocking edges, and end-to-end deliverables
  4. 4.Iterate with the skill on granularity (too coarse/fine), blocking dependencies, and merge/split decisions
  5. 5.Approve the decomposition and the skill publishes tickets to your configured tracker in dependency order

Use cases

Good for
  • Breaking down a feature spec into independently reviewable, shippable vertical slices
  • Planning a large refactor across the codebase while keeping CI passing at each step
  • Converting a conversation or design doc into actionable tickets with clear dependencies
  • Organizing work so multiple team members can work in parallel on non-blocking tickets
  • Ensuring each ticket fits in a fresh context window for agent or developer pickup
Who it's for
  • Engineering leads planning feature rollouts
  • Teams coordinating parallel development work
  • Agents or developers picking up pre-decomposed work
  • Projects using GitHub, Linear, or local file-based issue tracking

to-tickets FAQ

What's a vertical slice?

A vertical slice is a thin, complete path through all layers (schema, API, UI, tests) that delivers one end-to-end behavior. It's not a horizontal slice of one layer; it's independently demable and verifiable.

How does this handle wide refactors?

Wide refactors (e.g., renaming a column everywhere) use expand–contract sequencing: first expand (add new form alongside old), then migrate call sites in batches (each a ticket), then contract (remove old form). This keeps CI green at each step.

Can I use this with local files instead of a real tracker?

Yes. Tickets are written to .scratch/<feature-slug>/issues/ as individual markdown files, numbered in dependency order, with blocking edges listed as file references.

What if a ticket has no blockers?

It can start immediately. The skill identifies the frontier (all blockers complete) and orders tickets so non-blocked work is ready first.

Does this close or modify the parent issue?

No. The skill only creates new tickets; it never closes or modifies any parent issue or reference.

Full instructions (SKILL.md)

Source of truth, from vinvcn/mattpocock-skills-zh-cn.


name: to-tickets description: 把 plan、spec 或当前对话拆成一组 tracer-bullet tickets,每个 ticket 声明 blocking edges,并发布到已配置的 tracker;本地用每 ticket 一个文件中的文本 edge,真实 tracker 用 native blocking links。 disable-model-invocation: true

To Tickets

把 plan、spec 或 conversation 拆成一组 tickets:tracer-bullet vertical slices,每个 ticket 都声明 block 它的 tickets。

Issue tracker 和 triage label vocabulary 应该已经提供;如果没有,请让用户运行 /setup-matt-pocock-skills。

Process

1. Gather context

使用 conversation context 中已经存在的内容。如果用户把 reference(spec path、issue number 或 URL)作为参数传入,获取并完整读取其 body 和 comments。

2. Explore the codebase (optional)

如果还没有探索 codebase,先了解 code 当前状态。Ticket title 和 description 应使用项目 domain glossary vocabulary,并遵守相关 ADRs。

寻找 prefactor code、让 implementation 更容易的机会。“Make the change easy, then make the easy change.”

3. Draft vertical slices

把工作拆成 tracer bullet tickets。

<vertical-slice-rules>
  • 每个 slice 都要贯穿每一层(schema、API、UI、tests)形成窄而完整的路径;必须是 vertical slice,不是某一层的 horizontal slice
  • 完成的 slice 可独立 demo 或 verify
  • 每个 slice 的大小必须能放进一个 fresh context window
  • 任何 prefactoring 都应先完成
</vertical-slice-rules>

为每个 ticket 给出 blocking edges:它开始前必须完成的其他 tickets。没有 blockers 的 ticket 可以立即开始。

Wide refactors 是 vertical slicing 的例外。 Wide refactor 是一个影响整个 codebase 的 mechanical change,例如 rename column 或 retype shared symbol;一次 edit 会破坏成千上万 call sites,无法让任何 vertical slice 独立保持 green。不要强行做成 tracer bullet;应按 expand–contract 排序。先 expand:在旧形式旁加入新形式,保持一切正常。再按 blast radius 分批迁移 call sites(按 package、directory 等),每批一个 ticket,并被 expand block;旧形式仍存在,因此 CI 每批都保持 green。最后 contract:一旦没有 caller 残留,就在被所有 migrate batches block 的 ticket 中删除旧形式。如果连单独 batches 也不能保持 green,仍保留这个 sequence,但让它们共享 integration branch,并全部 block 最后的 integrate-and-verify ticket;只在最后承诺 green。

4. Quiz the user

把建议的拆分作为 numbered list 展示。每个 ticket 包含:

  • Title:简短的描述性名称
  • Blocked by:必须先完成的其他 tickets(如有)
  • What it delivers:这个 ticket 打通的 end-to-end behaviour

询问用户:

  • Granularity 是否合适(太粗或太细)?
  • Blocking edges 是否正确,每个 ticket 是否只依赖真正 gate 它的 tickets?
  • 是否应继续合并或拆分 tickets?

迭代到用户批准拆分。

5. Publish the tickets to the configured tracker

发布已批准的 tickets。具体方式取决于 /setup-matt-pocock-skills 配置的 tracker;tickets 相同,只有 blocking edges 的形状不同:

  • Local files → 在 .scratch/<feature-slug>/issues/<NN>-<slug>.md 下每 ticket 写一个文件,按 dependency order(blockers 优先)从 01 编号。每个文件的 “Blocked by” 列出它依赖的 number/title。使用下面的 per-ticket template;每个文件只放一个 ticket,绝不要写成一个 combined file。
  • 真实 issue tracker(GitHub、Linear 等) → 按 dependency order(blockers 优先)每 ticket 发布一个 issue,让 blocking edges 能引用真实 identifiers。平台支持时使用 native blocking/sub-issue relationship,否则把 blocking issues 写进每个 ticket 的 “Blocked by”。除非另有指示,应用 ready-for-agent triage label;这些 tickets 天生可被 agent 领取。

处理 frontier:所有 blockers 都完成的 tickets。纯 linear chain 就是从上到下。

不要 close 或 modify 任何 parent issue。

<local-ticket-template>

<NN> — <Ticket title>

What to build: 这个 ticket 从用户视角打通的 end-to-end behaviour,而不是逐层 implementation list。

Blocked by: gate 这个 ticket 的 numbers/titles,或 “None — can start immediately”。

Status: ready-for-agent

  • Acceptance criterion 1
  • Acceptance criterion 2
</local-ticket-template> <issue-template>

Parent

Tracker 上 parent issue 的 reference(如果来源是 existing issue;否则省略本 section)。

What to build

这个 ticket 从用户视角打通的 end-to-end behaviour,而不是逐层 implementation。

Acceptance criteria

  • Criterion 1
  • Criterion 2

Blocked by

  • 每个 blocking ticket 的 reference,或 “None — can start immediately”。
</issue-template>

无论哪种形式,都避免具体 file paths 或 code snippets;它们很快会过时。例外:如果 prototype 产出的 snippet 比 prose 更精确地编码了 decision(state machine、reducer、schema、type shape),可以内联,并简短说明来自 prototype。只保留 decision-rich parts,不要放 working demo。