to-tickets
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).
1How It Works & Mechanism
Pure prompt orchestration: The entire skill consists of a decomposition discipline for the model plus two output templates, with no scripts, no template files, and no runtime code. The artifact produced is not a document, but rather 'a set of tickets with blocking edges'.
Break a plan, spec, or conversation into a set of **tickets**: tracer-bullet vertical slices, each declaring the tickets that **block** it.
Name evolution: The queue slug `to-issues` was removed at pinned HEAD—v1.1 merged to-plan and to-issues into to-tickets, completely eliminating to-issues (its capabilities were absorbed into the new skill).
**`to-plan` and `to-issues` are merged into one `to-tickets` skill, and `to-issues` is deleted.**
The core mechanism is tracer-bullet vertical slicing combined with blocking edges: each ticket must cut through all layers (schema/API/UI/tests), be independently demonstrable, fit within a single fresh context window, and explicitly declare what blocks it; tickets with no blockers form the immediately workable frontier.
- Each slice cuts a narrow but COMPLETE path through every layer (schema, API, UI, tests): vertical, NOT a horizontal slice of one layer
Wide refactoring is an explicit exception to vertical slicing, scheduled instead via expand–contract: first add the new pattern, then migrate in batches by blast radius, and finally remove the old pattern; when even batched migrations cannot stay green, a shared integration branch is permitted where all batches block a final integration 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**.
Mandatory user quiz before publishing: the decomposition is listed by number (title / blocked by / delivered behavior), querying item by item about granularity, edge correctness, and whether to merge or split, writing to the tracker only after user approval.
Are the blocking edges correct: does each ticket only depend on tickets that genuinely gate it?
Output format adapts to the tracker switch, expressing blocking edges differently: local mode uses one file per ticket ordered by dependency (blockers first) and explicitly forbids combining them into a single file; real tracker mode creates issues in dependency order, prioritizing native blocking/subtask relationships and adding the ready-for-agent label.
- **Local files** → write one file per ticket under `.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.
2Core Capabilities
3External Dependencies
| Kind | Dependency / Endpoint |
|---|---|
| cli | gh(GitHub CLI)——条件依赖,真 tracker 模式下的发布与原生依赖关系操作 |
| cli | glab(GitLab CLI)——条件依赖 |
| network | GitHub Issues + 原生 issue dependencies API(经 gh 批量建票、加阻断边、打标签) |
| network | 用户以参数传入的任意 URL:skill 指示 fetch 该引用并读全文与评论(取数面由参数决定,未见主机白名单) |
| package | skills CLI / Claude Code 插件(分发渠道) |
4Recommended Governance & Evidence
- 外部 API: Executes posts, resource creation, or modification writes to external platforms
- 本地工作目录: File read/write and artifact output: Local mode: `.scratch/<feature-slug>/issues/<NN>-<slug>.md` one file per ticket, numbered in dependency order (combining into a single file is forbidden)
5Second-Pass Verification
- [discrepancy] 队列 slug `to-issues` 在 pin commit 是否作为目录存在 — 不存在。HEAD 树内无 skills/engineering/to-issues(也无 to-tickets 之外的 to-plan);CHANGELOG 明写 '`to-plan` and `to-issues` are merged into one `to-tickets` skill, and `to-issues` is deleted.'。本 JSON 以 HEAD 实名 to-tickets 记录,页面 slug 与文件名沿用任务书的 to-issues。
- [ok] 『to-issues 的功能确已并入 to-tickets』是否属实(而非删掉即失去) — CHANGELOG PR #469 记 to-issues 曾获得 wide-refactor(expand–contract)与 Co-located reference blocks;现行 to-tickets/SKILL.md line 40 完整保留该段(expand/migrate/contract 与集成分支兜底),说明能力是迁移而非丢失。
- [ok] 阻断边的落点是否真由 tracker 文档决定(而非 skill 硬编码路径) — to-tickets 正文只给形态要求('Use the platform's native blocking / sub-issue relationship where it has one')与本地路径约定;具体命令(gh api …/dependencies/blocked_by、gh issue edit --add-assignee 等)与 frontier 查询定义全在 setup-matt-pocock-skills/issue-tracker-github.md 内,两处措辞一致。
- [ok] 『无网络外发』类声明是否成立 — skill 文件 token 扫描无 http/curl/fetch 关键字;网络行为全部经 tracker 文档定义的 gh/glab 间接发生,已按条件性记入 network_calls。
- [discrepancy] 取参 fetch 是否有限制(主机白名单/大小/去指令化) — 定位不到任何限制:SKILL.md 只写 'fetch it and read its full body and comments',无主机白名单、无大小上限、无 untrusted/防注入条款;对超长 spec 的截断问题反倒在 docs 页被当作环境问题(建议同窗口不要 clear/compact)来描述,说明 skill 层面无防护。此点按「定位不到不硬写」只记事实,不升级档位。
- [ok] installs / stars 口径 — installs=353800 来自 skills.sh 注册表的旧 slug 记录(queue-100.json 的 to-issues 条目),仓库内无此数值;stars=262519 为 2026-09-15 gh api 实测。口径不同,页面并列时需标注来源。
6Verdict & Scenarios
0a4d30fcc2a2ce67…