@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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/AGENTS.md +25 -9
- package/CHANGELOG.md +27 -0
- package/README.md +78 -112
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/agents/codex/architecture-designer.toml +2 -1
- package/agents/codex/backend-reviewer.toml +3 -1
- package/agents/codex/frontend-reviewer.toml +3 -1
- package/agents/codex/test-verifier.toml +4 -1
- package/bin/netpilot-skills.mjs +130 -6
- package/docs/agent-authoring.md +15 -5
- package/package.json +1 -1
- package/scripts/sync.mjs +1304 -101
- package/scripts/validate.mjs +68 -14
- package/skills/ask/SKILL.md +51 -47
- package/skills/ask/agents/openai.yaml +3 -3
- package/skills/code-review/SKILL.md +68 -52
- package/skills/code-review/agents/openai.yaml +2 -2
- package/skills/codebase-design/SKILL.md +87 -50
- package/skills/codebase-design/agents/openai.yaml +2 -2
- package/skills/codebase-design/references/deepening.md +60 -0
- package/skills/codebase-design/references/design-it-twice.md +54 -0
- package/skills/diagnosing-bugs/SKILL.md +124 -54
- package/skills/diagnosing-bugs/agents/openai.yaml +2 -2
- package/skills/diagnosing-bugs/scripts/hitl-loop.template.mjs +52 -0
- package/skills/domain-modeling/SKILL.md +65 -55
- package/skills/domain-modeling/agents/openai.yaml +2 -2
- package/skills/domain-modeling/references/adr-format.md +47 -0
- package/skills/domain-modeling/references/context-format.md +60 -0
- package/skills/domain-modeling/references/domain-docs.md +53 -0
- package/skills/grill-me/SKILL.md +13 -0
- package/skills/grill-me/agents/openai.yaml +6 -0
- package/skills/grill-with-docs/SKILL.md +16 -63
- package/skills/grill-with-docs/agents/openai.yaml +3 -3
- package/skills/grilling/SKILL.md +10 -54
- package/skills/grilling/agents/openai.yaml +2 -2
- package/skills/handoff/SKILL.md +24 -42
- package/skills/handoff/agents/openai.yaml +3 -3
- package/skills/implement/SKILL.md +18 -55
- package/skills/implement/agents/openai.yaml +3 -3
- package/skills/improve-codebase-architecture/SKILL.md +88 -0
- package/skills/improve-codebase-architecture/agents/openai.yaml +6 -0
- package/skills/improve-codebase-architecture/references/html-report.md +158 -0
- package/skills/prototype/SKILL.md +21 -53
- package/skills/prototype/agents/openai.yaml +2 -2
- package/skills/prototype/references/logic.md +87 -0
- package/skills/prototype/references/ui.md +108 -0
- package/skills/research/SKILL.md +9 -66
- package/skills/research/agents/openai.yaml +2 -2
- package/skills/resolving-merge-conflicts/SKILL.md +94 -0
- package/skills/resolving-merge-conflicts/agents/openai.yaml +6 -0
- package/skills/tdd/SKILL.md +30 -46
- package/skills/tdd/agents/openai.yaml +2 -2
- package/skills/tdd/references/mocking.md +70 -0
- package/skills/tdd/references/tests.md +95 -0
- package/skills/teach/SKILL.md +115 -47
- package/skills/teach/agents/openai.yaml +3 -3
- package/skills/teach/references/glossary-format.md +35 -10
- package/skills/teach/references/learning-record-format.md +41 -11
- package/skills/teach/references/mission-format.md +20 -17
- package/skills/teach/references/resources-format.md +34 -16
- package/skills/to-spec/SKILL.md +56 -51
- package/skills/to-spec/agents/openai.yaml +3 -3
- package/skills/to-tickets/SKILL.md +84 -45
- package/skills/to-tickets/agents/openai.yaml +3 -3
- package/skills/triage/SKILL.md +171 -0
- package/skills/triage/agents/openai.yaml +6 -0
- package/skills/triage/references/agent-brief.md +168 -0
- package/skills/triage/references/issue-tracker-github.md +42 -0
- package/skills/triage/references/issue-tracker-gitlab.md +42 -0
- package/skills/triage/references/issue-tracker-local.md +28 -0
- package/skills/triage/references/out-of-scope.md +113 -0
- package/skills/triage/references/project-config.md +57 -0
- package/skills/triage/references/triage-labels.md +13 -0
- package/skills/wayfinder/SKILL.md +158 -51
- package/skills/wayfinder/agents/openai.yaml +3 -3
- package/skills/writing-great-skills/SKILL.md +96 -54
- package/skills/writing-great-skills/agents/openai.yaml +3 -3
- package/skills/writing-great-skills/references/glossary.md +279 -0
- package/agents/codex/code-reader.toml +0 -11
- package/skills/grill/SKILL.md +0 -54
- 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
|
-
|
|
5
|
+
## 模板
|
|
6
|
+
|
|
7
|
+
```md
|
|
6
8
|
# {主题} Resources
|
|
7
9
|
|
|
8
|
-
## Knowledge
|
|
10
|
+
## 知识(Knowledge)
|
|
11
|
+
|
|
12
|
+
- [{资料类型:标题 — 作者或机构}]({URL})
|
|
13
|
+
内容:{它可靠回答什么问题}。使用时机:{哪些 lessons 或问题应查它}。版本/日期:{如适用}。
|
|
14
|
+
- [{规范、论文、书籍、官方课程或原始数据}]({URL})
|
|
15
|
+
内容:{一句说明}。使用时机:{一句说明}。
|
|
9
16
|
|
|
10
|
-
|
|
11
|
-
适用:{它回答什么问题,何时使用}。版本或日期:{如适用}。
|
|
17
|
+
## 判断力来源(Wisdom / Communities)
|
|
12
18
|
|
|
13
|
-
|
|
19
|
+
- [{线上或线下共同体}]({URL 或地点})
|
|
20
|
+
特点:{为什么它具有高质量反馈}。使用时机:{适合检验什么 skill 或判断}。
|
|
14
21
|
|
|
15
|
-
|
|
16
|
-
适用:{能够获得什么真实反馈}。
|
|
22
|
+
## 资料缺口(Gaps)
|
|
17
23
|
|
|
18
|
-
|
|
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
|
+
- **不伪造来源。** 模板占位符不是可用引用;加入清单前必须实际打开并核验目标资料。
|
package/skills/to-spec/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
9
|
+
把当前对话和代码库理解综合成 spec,并发布到项目 issue tracker。不要重新采访用户;本 skill 负责整理已经讨论清楚的内容。
|
|
9
10
|
|
|
10
|
-
##
|
|
11
|
+
## 动作授权
|
|
11
12
|
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
19
|
+
## 流程
|
|
26
20
|
|
|
27
|
-
|
|
21
|
+
### 1. 收集上下文
|
|
28
22
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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:
|
|
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. 只询问仍未解决的问题。
|