@netpilot/skills 0.3.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/AGENTS.md +25 -9
  5. package/CHANGELOG.md +27 -0
  6. package/README.md +78 -112
  7. package/THIRD_PARTY_NOTICES.md +1 -1
  8. package/agents/codex/architecture-designer.toml +2 -1
  9. package/agents/codex/backend-reviewer.toml +3 -1
  10. package/agents/codex/frontend-reviewer.toml +3 -1
  11. package/agents/codex/test-verifier.toml +4 -1
  12. package/bin/netpilot-skills.mjs +130 -6
  13. package/docs/agent-authoring.md +15 -5
  14. package/package.json +1 -1
  15. package/scripts/sync.mjs +1304 -101
  16. package/scripts/validate.mjs +68 -14
  17. package/skills/ask/SKILL.md +51 -47
  18. package/skills/ask/agents/openai.yaml +3 -3
  19. package/skills/code-review/SKILL.md +68 -52
  20. package/skills/code-review/agents/openai.yaml +2 -2
  21. package/skills/codebase-design/SKILL.md +87 -50
  22. package/skills/codebase-design/agents/openai.yaml +2 -2
  23. package/skills/codebase-design/references/deepening.md +60 -0
  24. package/skills/codebase-design/references/design-it-twice.md +54 -0
  25. package/skills/diagnosing-bugs/SKILL.md +124 -54
  26. package/skills/diagnosing-bugs/agents/openai.yaml +2 -2
  27. package/skills/diagnosing-bugs/scripts/hitl-loop.template.mjs +52 -0
  28. package/skills/domain-modeling/SKILL.md +65 -55
  29. package/skills/domain-modeling/agents/openai.yaml +2 -2
  30. package/skills/domain-modeling/references/adr-format.md +47 -0
  31. package/skills/domain-modeling/references/context-format.md +60 -0
  32. package/skills/domain-modeling/references/domain-docs.md +53 -0
  33. package/skills/grill-me/SKILL.md +13 -0
  34. package/skills/grill-me/agents/openai.yaml +6 -0
  35. package/skills/grill-with-docs/SKILL.md +16 -63
  36. package/skills/grill-with-docs/agents/openai.yaml +3 -3
  37. package/skills/grilling/SKILL.md +10 -54
  38. package/skills/grilling/agents/openai.yaml +2 -2
  39. package/skills/handoff/SKILL.md +24 -42
  40. package/skills/handoff/agents/openai.yaml +3 -3
  41. package/skills/implement/SKILL.md +18 -55
  42. package/skills/implement/agents/openai.yaml +3 -3
  43. package/skills/improve-codebase-architecture/SKILL.md +88 -0
  44. package/skills/improve-codebase-architecture/agents/openai.yaml +6 -0
  45. package/skills/improve-codebase-architecture/references/html-report.md +158 -0
  46. package/skills/prototype/SKILL.md +21 -53
  47. package/skills/prototype/agents/openai.yaml +2 -2
  48. package/skills/prototype/references/logic.md +87 -0
  49. package/skills/prototype/references/ui.md +108 -0
  50. package/skills/research/SKILL.md +9 -66
  51. package/skills/research/agents/openai.yaml +2 -2
  52. package/skills/resolving-merge-conflicts/SKILL.md +94 -0
  53. package/skills/resolving-merge-conflicts/agents/openai.yaml +6 -0
  54. package/skills/tdd/SKILL.md +30 -46
  55. package/skills/tdd/agents/openai.yaml +2 -2
  56. package/skills/tdd/references/mocking.md +70 -0
  57. package/skills/tdd/references/tests.md +95 -0
  58. package/skills/teach/SKILL.md +115 -47
  59. package/skills/teach/agents/openai.yaml +3 -3
  60. package/skills/teach/references/glossary-format.md +35 -10
  61. package/skills/teach/references/learning-record-format.md +41 -11
  62. package/skills/teach/references/mission-format.md +20 -17
  63. package/skills/teach/references/resources-format.md +34 -16
  64. package/skills/to-spec/SKILL.md +56 -51
  65. package/skills/to-spec/agents/openai.yaml +3 -3
  66. package/skills/to-tickets/SKILL.md +84 -45
  67. package/skills/to-tickets/agents/openai.yaml +3 -3
  68. package/skills/triage/SKILL.md +171 -0
  69. package/skills/triage/agents/openai.yaml +6 -0
  70. package/skills/triage/references/agent-brief.md +168 -0
  71. package/skills/triage/references/issue-tracker-github.md +42 -0
  72. package/skills/triage/references/issue-tracker-gitlab.md +42 -0
  73. package/skills/triage/references/issue-tracker-local.md +28 -0
  74. package/skills/triage/references/out-of-scope.md +113 -0
  75. package/skills/triage/references/project-config.md +57 -0
  76. package/skills/triage/references/triage-labels.md +13 -0
  77. package/skills/wayfinder/SKILL.md +158 -51
  78. package/skills/wayfinder/agents/openai.yaml +3 -3
  79. package/skills/writing-great-skills/SKILL.md +96 -54
  80. package/skills/writing-great-skills/agents/openai.yaml +3 -3
  81. package/skills/writing-great-skills/references/glossary.md +279 -0
  82. package/agents/codex/code-reader.toml +0 -11
  83. package/skills/grill/SKILL.md +0 -54
  84. package/skills/grill/agents/openai.yaml +0 -6
@@ -1,28 +1,46 @@
1
1
  # `RESOURCES.md` 格式
2
2
 
3
- `RESOURCES.md` 保存经过筛选的可信资料以及可选的真实实践社区。课程中的事实性知识优先来自这里。
3
+ `RESOURCES.md` 是本主题经过筛选的可信来源集合。课程中的 Knowledge 从这里获得,而不是来自参数化猜测;Wisdom 则通过这里记录的真实实践共同体获得。
4
4
 
5
- ```markdown
5
+ ## 模板
6
+
7
+ ```md
6
8
  # {主题} Resources
7
9
 
8
- ## Knowledge
10
+ ## 知识(Knowledge
11
+
12
+ - [{资料类型:标题 — 作者或机构}]({URL})
13
+ 内容:{它可靠回答什么问题}。使用时机:{哪些 lessons 或问题应查它}。版本/日期:{如适用}。
14
+ - [{规范、论文、书籍、官方课程或原始数据}]({URL})
15
+ 内容:{一句说明}。使用时机:{一句说明}。
9
16
 
10
- - [{资料标题} {作者或机构}]({URL})
11
- 适用:{它回答什么问题,何时使用}。版本或日期:{如适用}。
17
+ ## 判断力来源(Wisdom / Communities)
12
18
 
13
- ## Practice and community
19
+ - [{线上或线下共同体}]({URL 或地点})
20
+ 特点:{为什么它具有高质量反馈}。使用时机:{适合检验什么 skill 或判断}。
14
21
 
15
- - [{社区、课程或实践场所}]({URL})
16
- 适用:{能够获得什么真实反馈}。
22
+ ## 资料缺口(Gaps)
17
23
 
18
- ## Gaps
19
- - {当前缺少可靠资料的问题}
24
+ - {mission 需要、但目前没有找到可靠来源的问题}
20
25
  ```
21
26
 
22
- 规则:
27
+ ## 完整条目示例
28
+
29
+ ```md
30
+ ## 知识(Knowledge)
31
+
32
+ - [Node.js File system documentation — Node.js project](https://nodejs.org/api/fs.html)
33
+ 内容:Node.js `fs` API 的官方 contract、异常与平台差异。使用时机:课程需要核验文件读取、写入或路径行为时。版本/日期:记录教学工作区实际使用的 Node.js major version。
34
+ ```
35
+
36
+ 示例展示注释的完整度;只有主题确实涉及 Node.js 文件系统且已打开核验时,才把它加入真实 `RESOURCES.md`。
37
+
38
+ ## 规则
23
39
 
24
- - 优先官方文档、规范、原始论文、数据、维护者声明和公认专业资料。
25
- - 每条都写清用途;无注释链接不进入清单。
26
- - 标注版本、日期和适用边界,区分事实、推断与经验。
27
- - 发现资料错误、过时或偏离目标时删除或替换,不用数量掩盖质量。
28
- - 社区仅作建议;记录用户拒绝参与的偏好,不重复推动。
40
+ - **只收录高可信来源。** 优先官方文档、标准、原始研究、原始数据、公认专家和治理严格的共同体。把营销包装成教育的内容留在清单之外。
41
+ - **每条都注释。** 裸链接几个月后没有价值;说明它覆盖什么、为什么可信、何时使用,并在适用时记录版本或日期。
42
+ - **区分 Knowledge 与 Wisdom。** 资料可以只属于一组。Knowledge 支撑可核验主张;共同体用于把 skills 放进真实世界检验。
43
+ - **显式暴露缺口。** mission 需要但没有可靠资料时,新增 `Gaps`,让后续 research 有清楚问题和停止条件。
44
+ - **无情裁剪。** 发现资料错误、浅薄、过期或偏离 mission 时删除或替换;五个锋利来源胜过三十个一般链接。
45
+ - **记录共同体偏好。** 用户不想参与共同体时在这里记录,后续会话不再反复推动。
46
+ - **不伪造来源。** 模板占位符不是可用引用;加入清单前必须实际打开并核验目标资料。
@@ -1,76 +1,81 @@
1
1
  ---
2
2
  name: to-spec
3
- description: 当需求、访谈或研究结论已经基本明确,需要整理成范围清楚、决策完整、可实现且可验收的规格时使用。它消除剩余歧义并定义行为与边界;探索阶段的大想法或已经存在合格规格时不使用。
3
+ description: 当当前对话与代码库理解已经足够明确,需要综合成可实现、可验收的 spec(也可称 PRD)并发布到项目 tracker 时使用。它不重新访谈或探索产品方向;关键决策仍缺失时返回 grilling、research 或 prototype。
4
+ disable-model-invocation: true
4
5
  ---
5
6
 
6
7
  # To Spec
7
8
 
8
- 把已确认的意图转换成实现团队和 AI 可以独立执行的规格(specification)。规格描述问题、行为和约束,不预写未经论证的代码实现。
9
+ 把当前对话和代码库理解综合成 spec,并发布到项目 issue tracker。不要重新采访用户;本 skill 负责整理已经讨论清楚的内容。
9
10
 
10
- ## 输入门禁
11
+ ## 动作授权
11
12
 
12
- 先确认已有:目标用户或调用方、要解决的问题、范围、主要约束和成功信号。缺少会改变方案的信息时调用 `grilling`;方向仍模糊时返回 `wayfinder`;事实或可行性未知时调用 `research` `prototype`。
13
+ 用户显式调用本 skill,且仓库、tracker 与来源工作项唯一时,可以在一句话预告后创建或更新 spec issue,并应用 `ready-for-agent` label。目标、tracker mapping 或待覆盖 issue 不唯一时,先只读加载并展示目标。
13
14
 
14
- 读取仓库中的规则、相邻功能、领域文档和现有接口,避免规格与实际系统脱节。
15
+ 先按 `triage` 的 [项目 tracker 配置](../triage/references/project-config.md) 发现目标,再读取对应的 [GitHub](../triage/references/issue-tracker-github.md)、[GitLab](../triage/references/issue-tracker-gitlab.md) 或 [Local Markdown](../triage/references/issue-tracker-local.md) 参考。永不自动 push、创建 PR、merge、deploy 或发布软件。
15
16
 
16
- ## 编写规格
17
+ ## 流程
17
18
 
18
- 使用与项目匹配的结构,至少包含:
19
+ 1. 若尚未完成,探索仓库当前状态。全文使用项目 glossary 的 canonical terms,并遵守相关 ADR。
20
+ 2. 草拟测试 feature 的 Seams:
21
+ - 优先复用现有 Seam;
22
+ - 必须增加时,尽可能放在最高层;
23
+ - Seam 越少越好,理想情况只有一个。
19
24
 
20
- ```markdown
21
- # 标题
22
- ## 背景与问题
23
- ## 目标与成功指标
24
- ## 范围内
25
- ## 范围外
26
- ## 用户或系统场景
27
- ## 功能需求
28
- ## 业务规则与不变量
29
- ## 数据、接口与状态变化
30
- ## 错误与边界情况
31
- ## 权限、安全、隐私与审计影响
32
- ## 兼容、迁移与回退
33
- ## 可观测性与运维要求
34
- ## 验收标准
35
- ## 未决问题
25
+ 向用户校准这些 Seams 是否符合预期。这是规格发布前的定向确认,不重新开始需求访谈。
26
+ 3. 使用下面的结构写 spec,然后发布到 tracker。应用 `ready-for-agent` 后无需再次 triage。
27
+
28
+ ## Spec 结构
29
+
30
+ ### Problem Statement
31
+
32
+ 从用户视角描述其面对的问题。
33
+
34
+ ### Solution
35
+
36
+ 从用户视角描述解决方案。
37
+
38
+ ### User Stories
39
+
40
+ 使用足够详尽的编号列表覆盖所有用户可观察行为;每条都能独立检查,合在一起覆盖 feature 的全部方面:
41
+
42
+ ```text
43
+ 1. As a <actor>, I want a <feature>, so that <benefit>.
36
44
  ```
37
45
 
38
- 与任务无关的章节可以标记“不适用”并说明原因,不要填充空泛模板文字。
46
+ ### Implementation Decisions
47
+
48
+ 记录已经形成的实施决定,包括:
49
+
50
+ - 要新增或修改的 Modules;
51
+ - 这些 Modules 的 Interfaces;
52
+ - 来自开发者的技术澄清;
53
+ - 架构决定;
54
+ - schema changes;
55
+ - API contracts;
56
+ - 具体 interactions;
57
+ - 相关时才加入兼容性、迁移、安全、回滚或观测决定。
39
58
 
40
- ## 写作规则
59
+ 不要写具体文件路径或工作代码,它们很快会过时。唯一例外:prototype 产生的 state machine、reducer、schema 或 type shape 比文字更精确时,可以只嵌入承载 decision 的最小片段,并注明来自 prototype。
41
60
 
42
- - 每项需求使用可观察、可验证的语言,避免“快速”“友好”“智能”等未定义形容词。
43
- - 清楚区分事实、已批准决策、暂定假设和未决问题。
44
- - 用 Given/When/Then 或等价场景描述关键行为,包括失败和边界路径。
45
- - 公共 API、schema、权限、计费、迁移、部署等高风险变更要明确兼容和回退策略。
46
- - 只包含当前范围需要的设计约束。代码结构由 `codebase-design` 负责,任务拆分由 `to-tickets` 负责。
47
- - 发现现有行为与目标冲突时,展示证据并请求决策,不悄悄选择一方。
61
+ ### Testing Decisions
48
62
 
49
- ## 验收标准检查
63
+ 至少说明:
50
64
 
51
- 每条验收标准都应:
65
+ - 好测试只通过外部 Interface 验证 behavior;
66
+ - 哪些 Modules / Seams 要测试;
67
+ - 代码库中可复用的同类测试先例。
52
68
 
53
- - 能由测试、可观察运行结果或人工验收直接判断;
54
- - 包含必要前置条件和预期结果;
55
- - 不依赖“实现得合理”之类主观判断;
56
- - 覆盖至少一个关键失败或边界场景;
57
- - 能追溯到某项目标或业务规则。
69
+ ### Acceptance Criteria
58
70
 
59
- ## 交付
71
+ 用可观察、可验证的条件定义完成。适合时使用 Given / When / Then;不要把“修改某文件”当作用户行为的验收条件。
60
72
 
61
- 默认在回答中给出规格,或写入用户指定/项目约定的本地文档位置。未经明确授权,不创建远程文档、issue 或项目任务。
73
+ ### Out of Scope
62
74
 
63
- ## 完成标准
75
+ 明确与当前 spec 相邻但不包含的事项。
64
76
 
65
- - 目标、范围、非目标和验收标准一致且可追溯。
66
- - 关键业务规则、状态、失败路径和风险边界已定义。
67
- - 未决问题不阻塞拆票;若阻塞,明确指出并停止进入 `to-tickets`。
68
- - 规格足以让另一位执行者在不猜核心决策的情况下实施。
77
+ ### Further Notes
69
78
 
70
- ## 反模式
79
+ 只放无法归入以上章节、但实施者确实需要的补充信息;没有内容时省略。
71
80
 
72
- - 不要把会议纪要重新排版后称为规格。
73
- - 不要隐藏未决问题或把假设写成要求。
74
- - 不要把具体文件改动列表冒充产品行为。
75
- - 不要在规格中提前锁定没有证据的复杂架构。
76
- - 不要用大而模糊的“完成所有功能”作为验收标准。
81
+ 发布前确认文档足以让实现 agent 无需额外产品 triage 即可开始。
@@ -1,6 +1,6 @@
1
1
  interface:
2
2
  display_name: "To Spec"
3
- short_description: "将已澄清需求整理为范围明确、决策完整且可验收的实现规格"
4
- default_prompt: "请使用 $to-spec 把当前讨论整理成可实现、可审查且有验收标准的规格。"
3
+ short_description: "把已确认的讨论综合为可验收规格,并发布到明确的任务系统"
4
+ default_prompt: "请使用 $to-spec 把当前已确认结论综合成规格,并发布到明确的 tracker。"
5
5
  policy:
6
- allow_implicit_invocation: true
6
+ allow_implicit_invocation: false
@@ -1,69 +1,108 @@
1
1
  ---
2
2
  name: to-tickets
3
- description: 当已有经过确认且不存在关键阻塞问题的规格,需要拆成可独立交付、可验证和可排序的垂直任务时使用。它建立依赖关系与完成证据;需求仍在探索、只有模糊想法或用户只要高层路线时不使用。
3
+ description: 当已有经过确认的 plan、spec 或对话结论,需要拆成 tracer-bullet tickets、声明 blocking edges 并发布到项目 tracker 时使用。需求仍在探索或关键决定缺失时不使用。
4
+ disable-model-invocation: true
4
5
  ---
5
6
 
6
7
  # To Tickets
7
8
 
8
- 把规格拆成小而完整的价值切片。每个任务应让执行者知道为什么做、做什么、如何验证,同时避免把核心设计决策下放成猜测。
9
+ 把 plan、spec 或当前对话拆成一组 **tracer-bullet vertical slices**。每个 ticket 都声明阻塞它的 **blocking edges**。
9
10
 
10
- ## 前置检查
11
+ ## 动作授权
11
12
 
12
- 1. 读取完整规格、仓库规则和相关代码结构。
13
- 2. 确认规格中的阻塞问题已经解决。若关键行为、范围或契约仍未定,返回 `to-spec` 或 `grilling`。
14
- 3. 提取目标、业务规则、外部契约、迁移要求和验收标准,建立追踪关系。
13
+ skill 先给用户校准拆分;用户批准后,且 tracker 与 parent 唯一时,可以自动创建远程 issues 或本地 ticket 文件、添加 `ready-for-agent` label、建立 native blocking / sub-issue 关系并返回 frontier。目标不唯一或 tracker mapping 不清时先只读展示。
15
14
 
16
- ## 拆分原则
15
+ 不得关闭或改写 parent issue。永不自动 push、创建 PR、merge、deploy 或发布。
17
16
 
18
- - **垂直切片**:优先交付一个可观察的端到端行为,不按数据库、后端、前端机械拆成孤立层任务。
19
- - **单一结果**:每票只有一个清楚的业务或工程结果。
20
- - **独立验证**:每票有可执行的测试、命令、截图、检查或其他证据。
21
- - **最少依赖**:明确真实先后关系,能并行的任务不要人为串行。
22
- - **可回退**:高风险变化包含兼容、迁移、开关或恢复步骤。
23
- - **边界完整**:把安全、权限、数据、观测和文档要求放进相关切片,不留到模糊的“收尾票”。
17
+ 先按 `triage` 的 [项目 tracker 配置](../triage/references/project-config.md) 发现目标,再读取对应的 [GitHub](../triage/references/issue-tracker-github.md)、[GitLab](../triage/references/issue-tracker-gitlab.md) 或 [Local Markdown](../triage/references/issue-tracker-local.md) 参考。
24
18
 
25
- 必要时先用 `codebase-design` 明确模块与契约,再拆票。
19
+ ## 流程
26
20
 
27
- ## 任务格式
21
+ ### 1. 收集上下文
28
22
 
29
- ```markdown
30
- ## T01 — 动词开头的结果标题
31
- - 目的:这项工作支持哪个目标?
32
- - 范围:包含哪些行为和边界?
33
- - 不包含:明确避免范围漂移。
34
- - 依赖:无 / Txx / 外部决策。
35
- - 实现提示:必须遵守的契约与约束,不预写全部代码。
36
- - 验收标准:可观察结果。
37
- - 验证:具体测试、命令或人工检查。
38
- - 风险与回退:仅在相关时填写。
23
+ 使用当前对话已有信息。用户传入 spec 路径、issue 编号或 URL 时,读取完整 body 与 comments。
24
+
25
+ ### 2. 按需探索代码库
26
+
27
+ 尚不了解当前实现时再探索。Ticket 标题和描述使用项目 glossary 词汇,并遵守相关 ADR。
28
+
29
+ 寻找能让后续工作更简单的 prefactoring:“make the change easy, then make the easy change”。需要 prefactoring 时先建独立 ticket,并让后续 slices 被它阻塞。
30
+
31
+ ### 3. 草拟垂直切片
32
+
33
+ 每个 tracer bullet 必须:
34
+
35
+ - 以狭窄但完整的路径穿过所需层次,例如 schema、API、UI 与 tests;不能只横切某一层;
36
+ - 独立完成后可演示或验证;
37
+ - 能在一个新鲜上下文窗口中完成;
38
+ - 声明真正阻塞它的 tickets;没有 blockers 的 ticket 可立即开始。
39
+
40
+ **Wide refactor 是垂直切片的例外。** 识别信号不是“改动文件很多”,而是一次不可避免的机械变化——例如 **rename a column** 或 **retype a shared symbol**——会同时打破大量调用点,使普通垂直切片无法先 green。此时使用 **expand–migrate–contract**:
41
+
42
+ 1. **Expand**:让新旧形式并存,不破坏现有调用者;
43
+ 2. **Migrate**:按 package、目录或其他 blast-radius 边界拆成批次,每批一个 ticket,均被 expand 阻塞,并保持每批 CI green;
44
+ 3. **Contract**:所有 migrate batches 完成后删除旧形式,该 ticket 被全部 batches 阻塞。
45
+
46
+ 若连单批也无法独立 green,仍保留上述顺序,但让批次共享 integration branch,并全部阻塞最终 integrate-and-verify ticket;只有最终节点承诺 green。
47
+
48
+ ### 4. 向用户校准
49
+
50
+ 以编号列表展示每票:
51
+
52
+ - **Title**:简短描述;
53
+ - **Blocked by**:真正的 blockers;
54
+ - **What it delivers**:该 ticket 独立带来的端到端 behavior。
55
+
56
+ 询问粒度是否合适、blocking edges 是否真实、哪些 tickets 应合并或拆分。迭代到用户批准。
57
+
58
+ ### 5. 发布
59
+
60
+ **Local Markdown**:在 `.scratch/<feature-slug>/issues/` 下按依赖顺序从 `01` 开始,每票一个文件:
61
+
62
+ ```md
63
+ # <NN> — <Ticket title>
64
+
65
+ **What to build:** 从用户视角描述该 ticket 使其工作的端到端 behavior。
66
+
67
+ **Blocked by:** 阻塞它的编号/标题,或 `None — can start immediately`。
68
+
69
+ **Status:** ready-for-agent
70
+
71
+ ## Acceptance criteria
72
+
73
+ - [ ] Criterion 1
74
+ - [ ] Criterion 2
75
+
76
+ ## Verification
77
+
78
+ - 验证该独立 slice 的命令或观察方式。
39
79
  ```
40
80
 
41
- 推荐每票可在一次专注工作周期内完成并审查。如果任务标题包含多个无关“以及”,继续拆分;如果拆分后没有独立价值或无法验证,则合并回垂直切片。
81
+ **远程 tracker**:按依赖顺序创建一票一个 issue,拿到真实标识符后再建立 blocking edges。平台支持时使用 native blocking / sub-issue;否则在 body 中记录 `Blocked by`。除非用户另有指示,应用 `ready-for-agent`。
82
+
83
+ ```md
84
+ ## Parent
42
85
 
43
- ## 排序
86
+ 来源 parent 的链接;没有 parent 时省略。
44
87
 
45
- 先做能够降低未知、建立必要契约或形成最小端到端路径的任务。排序时说明:
88
+ ## What to build
46
89
 
47
- - 阻塞关系;
48
- - 风险降低价值;
49
- - 是否可以并行;
50
- - 哪些任务在某项验证失败时应取消。
90
+ 从用户视角描述该 ticket 使其工作的端到端 behavior。
51
91
 
52
- ## 本地与远程
92
+ ## Acceptance criteria
53
93
 
54
- 默认在回答或用户指定的本地 Markdown 文件中输出任务。只有用户明确授权、指定仓库/项目和目标系统后,才创建或修改 GitHub、Jira 等远程任务;创建前先展示拟写入内容和数量。
94
+ - [ ] Criterion 1
95
+ - [ ] Criterion 2
55
96
 
56
- ## 完成标准
97
+ ## Verification
57
98
 
58
- - 规格中的每项验收标准都能追溯到至少一个任务。
59
- - 每个任务都有明确范围、依赖和验证方式。
60
- - 任务以垂直价值切分,没有孤立的“建表”“写接口”“做页面”层票。
61
- - 执行顺序和可并行部分清楚。
99
+ - 验证该独立 slice 的命令或观察方式。
100
+
101
+ ## Blocked by
102
+
103
+ - Blocking ticket,或 `None — can start immediately`。
104
+ ```
62
105
 
63
- ## 反模式
106
+ 只有确实需要防止相邻范围混入时才增加 `Out of scope`。避免具体文件路径和工作代码;prototype 的 decision-rich snippet 是唯一例外,且只保留必要片段并注明来源。
64
107
 
65
- - 不要在规格未确认时用拆票掩盖决策缺失。
66
- - 不要创建无法独立验收的技术层任务堆。
67
- - 不要把测试、安全和迁移全部推迟到最后。
68
- - 不要未经授权写入远程 tracker。
69
- - 不要用任务数量代表计划质量。
108
+ 发布后返回 **frontier**:所有 blockers 已完成、当前可领取的 tickets。纯线性依赖图就是从上到下工作。
@@ -1,6 +1,6 @@
1
1
  interface:
2
2
  display_name: "To Tickets"
3
- short_description: "将确认后的规格拆分为独立、可交付并且可验证的垂直任务"
4
- default_prompt: "请使用 $to-tickets 将这份规格拆成有依赖关系和验收方式的垂直任务。"
3
+ short_description: "把规格拆成 tracer-bullet tickets,建立依赖并发布到 tracker"
4
+ default_prompt: "请使用 $to-tickets 把已确认规格拆成可独立验证的 tickets,并在我批准后发布。"
5
5
  policy:
6
- allow_implicit_invocation: true
6
+ allow_implicit_invocation: false
@@ -0,0 +1,171 @@
1
+ ---
2
+ name: triage
3
+ description: 把原始 issue 或外部 PR 通过分类、核验、追问和 agent brief 推进到明确状态。
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Triage
8
+
9
+ 把 issue 和配置允许的外部 PR 推进通过一套小型状态机。外部 PR 是“附带代码的 issue”:共享分类、状态和决策流程,但验证时还要检查 diff。
10
+
11
+ 每段由本 skill 写入 tracker 的 comment、issue body 或 brief 必须以此开头:
12
+
13
+ ```markdown
14
+ > *此内容由 AI 在分诊过程中生成。*
15
+ ```
16
+
17
+ 使用前读取:
18
+
19
+ - [项目 tracker 配置与零配置发现](references/project-config.md)
20
+ - [Agent brief reference](references/agent-brief.md)
21
+ - [Out-of-scope reference](references/out-of-scope.md)
22
+ - [Triage label mapping](references/triage-labels.md)
23
+ - 当前仓库对应的 tracker 参考:[GitHub](references/issue-tracker-github.md)、[GitLab](references/issue-tracker-gitlab.md) 或 [Local Markdown](references/issue-tracker-local.md)
24
+
25
+ ## 动作门禁
26
+
27
+ 用户显式调用且 tracker、item 与目标状态清楚时,可以自动读取、评论、改 label、指派、创建 brief、关闭 item、按规则更新 `.out-of-scope/`,并在访谈确认稳定领域语言或满足 ADR 门禁的决定时,对唯一相关的领域文档做最小更新。
28
+
29
+ 执行前用一句话列出拟进行的状态变化和写入,无需再次确认。
30
+
31
+ 若只是“triage 这个 item”但最终状态仍需维护者判断,先给 recommendation 并等待。bare number 无法唯一解析、label mapping 不明或状态冲突时,只读检查并询问。
32
+
33
+ 永不自动 push、创建 PR、merge、deploy 或发布。若 `.out-of-scope/` 更新需要 commit,只能在明确本地 branch 上提交;不自动 push。
34
+
35
+ ## 分类与状态
36
+
37
+ 两个 category:
38
+
39
+ - **bug**:已有行为损坏;
40
+ - **enhancement**:新增功能或改进。
41
+
42
+ 五个 state:
43
+
44
+ - **needs-triage**:等待维护者评估;
45
+ - **needs-info**:等待 reporter 补充;
46
+ - **ready-for-agent**:合同完整,AFK agent 可执行;
47
+ - **ready-for-human**:需要人工判断、权限或操作;
48
+ - **wontfix**:不会实施。
49
+
50
+ 每个已 triage item 必须恰好有一个 category 和一个 state。实际 label 字符串按项目 tracker 配置解析;没有自定义映射时直接使用 canonical labels,只有映射冲突或 tracker 不唯一时才询问。不能引用 setup 指令。
51
+
52
+ PR 的 **ready-for-agent** 表示 agent brief 描述了 diff 还需要完成什么;**ready-for-human** 表示代码已具备人工 merge 判断条件。Triage 本身不 merge。
53
+
54
+ 状态机:
55
+
56
+ - unlabeled → needs-triage;
57
+ - needs-triage → needs-info / ready-for-agent / ready-for-human / wontfix;
58
+ - reporter 回复后 needs-info → needs-triage;
59
+ - 维护者可以覆盖,但异常转换应指出原因。
60
+
61
+ state labels 冲突时停止写入,先请求维护者决定。
62
+
63
+ ## 模式一:显示需要关注的内容
64
+
65
+ 按最旧优先查询三个 bucket:
66
+
67
+ 1. unlabeled;
68
+ 2. needs-triage;
69
+ 3. needs-info 且 reporter 在最后一条 triage note 之后有新活动。
70
+
71
+ 若 tracker 配置把外部 PR 纳入 triage,发现列表只包含外部作者 PR,并标记 `[PR]` 或 `[issue]`。显式指定的 PR 不受该发现过滤限制。
72
+
73
+ 输出每个 bucket 的数量与每项一行摘要,让维护者选择。
74
+
75
+ ## 模式二:Triage 一个 item
76
+
77
+ ### 收集上下文
78
+
79
+ 读取完整 body、comments、labels、author、dates;PR 还需读取 diff 与 checks。解析过去 triage notes,避免重复提问。
80
+
81
+ 读取领域 glossary、相关 ADR 和代码。
82
+
83
+ 执行两项代码库检查:
84
+
85
+ - **Redundancy**:按领域概念搜索现有实现,而不只搜索 reporter 原话,并说明查过哪里。已实现则进入 wontfix,但不写 `.out-of-scope/`。
86
+ - **Prior rejection**:读取 `.out-of-scope/*.md`,按概念相似性寻找以前的拒绝。
87
+
88
+ ### 给出建议
89
+
90
+ 给出:
91
+
92
+ - category recommendation;
93
+ - state recommendation;
94
+ - 相关代码路径与现状摘要;
95
+ - 是否已实现;
96
+ - 是否命中 prior rejection;
97
+ - recommendation 的证据和仍缺信息。
98
+
99
+ 若用户只要求评估,在这里等待方向。若用户显式授权“按最佳判断应用结果”,且目标唯一,可以继续。
100
+
101
+ ### 核验 claim
102
+
103
+ 在 grilling 前核验:
104
+
105
+ - bug:按 reporter 步骤复现,记录命令、输入、结果和代码路径;
106
+ - PR:把 attached code 检出到隔离 worktree,或读取确定对应该 head SHA 的 CI/check artifact,再针对该代码运行相关检查,验证它是否实现声称行为。仅阅读 diff 可以形成 review evidence,不能形成 verified claim;无法安全检出或取得对应 artifact 时报告 verification unavailable / insufficient detail;
107
+ - enhancement:确认当前系统确实没有该能力和等价路径。
108
+
109
+ 结果只能是 confirmed、failed to reproduce / claim not supported,或 insufficient detail。
110
+
111
+ ### 必要时深入访谈
112
+
113
+ 请求仍缺关键决定时调用 `$grilling`;术语、状态或不变量需要沉淀时同时调用 `$domain-modeling`。
114
+
115
+ 一次一个问题。已确认内容写入 triage notes,后续 session 不重问。
116
+
117
+ ### 应用结果
118
+
119
+ - **ready-for-agent**
120
+ - 按 Agent brief reference 写权威 brief;
121
+ - comment;
122
+ - 应用 category 和 state。
123
+ - **ready-for-human**
124
+ - 使用同样结构;
125
+ - 明确为什么不能交给 AFK agent:人工判断、外部权限、设计选择或手工验证。
126
+ - **needs-info**
127
+ - 写 triage notes;
128
+ - 应用状态。
129
+ - **wontfix**
130
+ - 已实现:指出实现位置,关闭;不写 out-of-scope。
131
+ - 拒绝 bug:礼貌解释并关闭;不写 out-of-scope。
132
+ - 拒绝 enhancement:创建或更新 out-of-scope knowledge entry,comment 链接理由,应用状态并关闭。
133
+ - **needs-triage**
134
+ - 应用状态;
135
+ - 有部分进展时可附 triage notes。
136
+
137
+ ## 直接覆盖状态
138
+
139
+ 用户明确说“把 item 移到某状态”时,信任该指令并直接执行,不启动 grilling。
140
+
141
+ 若目标是 ready-for-agent:
142
+
143
+ - 已有合格 brief:直接应用;
144
+ - 现有上下文足以生成 brief:自动生成后应用;
145
+ - 信息不足以形成可验证 brief:展示缺口并询问,不能把空壳 item 标为 agent-ready。
146
+
147
+ ## Needs-info 模板
148
+
149
+ ```markdown
150
+ > *此内容由 AI 在分诊过程中生成。*
151
+
152
+ ## Triage Notes
153
+
154
+ **已经确认:**
155
+ - 事实一
156
+ - 事实二
157
+
158
+ **仍需要 @reporter 提供:**
159
+ - 具体、可执行的问题一
160
+ - 具体、可执行的问题二
161
+ ```
162
+
163
+ ## 恢复分诊
164
+
165
+ 已有 triage notes 时:
166
+
167
+ 1. 读取已确认内容和未答问题;
168
+ 2. 检查 reporter 后续回复;
169
+ 3. 标出哪些问题已解决;
170
+ 4. 展示更新后的 picture;
171
+ 5. 只询问仍未解决的问题。
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "Triage"
3
+ short_description: "通过分类、核验、追问和 agent brief 推进 issue 与外部 PR"
4
+ default_prompt: "请使用 $triage 检查并推进这个 issue 或外部 PR 的分诊状态。"
5
+ policy:
6
+ allow_implicit_invocation: false