@geeseeker/easyai-dev 3.0.0-alpha.1 → 3.0.1

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 (169) hide show
  1. package/README.md +90 -88
  2. package/README_AI.md +143 -0
  3. package/bin/easyai-dev.js +127 -1
  4. package/lib/init.js +425 -0
  5. package/lib/server/index.d.ts +14 -0
  6. package/lib/server/index.d.ts.map +1 -0
  7. package/lib/server/index.js +126 -0
  8. package/lib/server/index.js.map +1 -0
  9. package/lib/server/resources/journal-resource.d.ts +8 -0
  10. package/lib/server/resources/journal-resource.d.ts.map +1 -0
  11. package/lib/server/resources/journal-resource.js +46 -0
  12. package/lib/server/resources/journal-resource.js.map +1 -0
  13. package/lib/server/resources/spec-resource.d.ts +11 -0
  14. package/lib/server/resources/spec-resource.d.ts.map +1 -0
  15. package/lib/server/resources/spec-resource.js +126 -0
  16. package/lib/server/resources/spec-resource.js.map +1 -0
  17. package/lib/server/resources/status-resource.d.ts +8 -0
  18. package/lib/server/resources/status-resource.d.ts.map +1 -0
  19. package/lib/server/resources/status-resource.js +36 -0
  20. package/lib/server/resources/status-resource.js.map +1 -0
  21. package/lib/server/resources/subtask-context-resource.d.ts +8 -0
  22. package/lib/server/resources/subtask-context-resource.d.ts.map +1 -0
  23. package/lib/server/resources/subtask-context-resource.js +93 -0
  24. package/lib/server/resources/subtask-context-resource.js.map +1 -0
  25. package/lib/server/resources/task-context-resource.d.ts +8 -0
  26. package/lib/server/resources/task-context-resource.d.ts.map +1 -0
  27. package/lib/server/resources/task-context-resource.js +76 -0
  28. package/lib/server/resources/task-context-resource.js.map +1 -0
  29. package/lib/server/tools/conflict-check.d.ts +7 -0
  30. package/lib/server/tools/conflict-check.d.ts.map +1 -0
  31. package/lib/server/tools/conflict-check.js +242 -0
  32. package/lib/server/tools/conflict-check.js.map +1 -0
  33. package/lib/server/tools/context-budget.d.ts +7 -0
  34. package/lib/server/tools/context-budget.d.ts.map +1 -0
  35. package/lib/server/tools/context-budget.js +178 -0
  36. package/lib/server/tools/context-budget.js.map +1 -0
  37. package/lib/server/tools/context-generate.d.ts +7 -0
  38. package/lib/server/tools/context-generate.d.ts.map +1 -0
  39. package/lib/server/tools/context-generate.js +208 -0
  40. package/lib/server/tools/context-generate.js.map +1 -0
  41. package/lib/server/tools/framework-tools.d.ts +20 -0
  42. package/lib/server/tools/framework-tools.d.ts.map +1 -0
  43. package/lib/server/tools/framework-tools.js +412 -0
  44. package/lib/server/tools/framework-tools.js.map +1 -0
  45. package/lib/server/tools/journal-append.d.ts +7 -0
  46. package/lib/server/tools/journal-append.d.ts.map +1 -0
  47. package/lib/server/tools/journal-append.js +55 -0
  48. package/lib/server/tools/journal-append.js.map +1 -0
  49. package/lib/server/tools/journal-search.d.ts +7 -0
  50. package/lib/server/tools/journal-search.d.ts.map +1 -0
  51. package/lib/server/tools/journal-search.js +63 -0
  52. package/lib/server/tools/journal-search.js.map +1 -0
  53. package/lib/server/tools/plan-validate.d.ts +7 -0
  54. package/lib/server/tools/plan-validate.d.ts.map +1 -0
  55. package/lib/server/tools/plan-validate.js +146 -0
  56. package/lib/server/tools/plan-validate.js.map +1 -0
  57. package/lib/server/tools/spec-validate.d.ts +7 -0
  58. package/lib/server/tools/spec-validate.d.ts.map +1 -0
  59. package/lib/server/tools/spec-validate.js +170 -0
  60. package/lib/server/tools/spec-validate.js.map +1 -0
  61. package/lib/server/tools/subtask-tools.d.ts +12 -0
  62. package/lib/server/tools/subtask-tools.d.ts.map +1 -0
  63. package/lib/server/tools/subtask-tools.js +383 -0
  64. package/lib/server/tools/subtask-tools.js.map +1 -0
  65. package/lib/server/tools/task-append-log.d.ts +7 -0
  66. package/lib/server/tools/task-append-log.d.ts.map +1 -0
  67. package/lib/server/tools/task-append-log.js +108 -0
  68. package/lib/server/tools/task-append-log.js.map +1 -0
  69. package/lib/server/tools/task-cancel.d.ts +7 -0
  70. package/lib/server/tools/task-cancel.d.ts.map +1 -0
  71. package/lib/server/tools/task-cancel.js +104 -0
  72. package/lib/server/tools/task-cancel.js.map +1 -0
  73. package/lib/server/tools/task-create.d.ts +7 -0
  74. package/lib/server/tools/task-create.d.ts.map +1 -0
  75. package/lib/server/tools/task-create.js +98 -0
  76. package/lib/server/tools/task-create.js.map +1 -0
  77. package/lib/server/tools/task-get.d.ts +7 -0
  78. package/lib/server/tools/task-get.d.ts.map +1 -0
  79. package/lib/server/tools/task-get.js +152 -0
  80. package/lib/server/tools/task-get.js.map +1 -0
  81. package/lib/server/tools/task-list.d.ts +7 -0
  82. package/lib/server/tools/task-list.d.ts.map +1 -0
  83. package/lib/server/tools/task-list.js +66 -0
  84. package/lib/server/tools/task-list.js.map +1 -0
  85. package/lib/server/tools/task-transition.d.ts +7 -0
  86. package/lib/server/tools/task-transition.d.ts.map +1 -0
  87. package/lib/server/tools/task-transition.js +259 -0
  88. package/lib/server/tools/task-transition.js.map +1 -0
  89. package/lib/server/tools/worktree-tools.d.ts +17 -0
  90. package/lib/server/tools/worktree-tools.d.ts.map +1 -0
  91. package/lib/server/tools/worktree-tools.js +336 -0
  92. package/lib/server/tools/worktree-tools.js.map +1 -0
  93. package/lib/server/utils/capability-gate.d.ts +50 -0
  94. package/lib/server/utils/capability-gate.d.ts.map +1 -0
  95. package/lib/server/utils/capability-gate.js +146 -0
  96. package/lib/server/utils/capability-gate.js.map +1 -0
  97. package/lib/server/utils/git-utils.d.ts +33 -0
  98. package/lib/server/utils/git-utils.d.ts.map +1 -0
  99. package/lib/server/utils/git-utils.js +84 -0
  100. package/lib/server/utils/git-utils.js.map +1 -0
  101. package/lib/server/utils/hash-utils.d.ts +78 -0
  102. package/lib/server/utils/hash-utils.d.ts.map +1 -0
  103. package/lib/server/utils/hash-utils.js +153 -0
  104. package/lib/server/utils/hash-utils.js.map +1 -0
  105. package/lib/server/utils/journal-utils.d.ts +69 -0
  106. package/lib/server/utils/journal-utils.d.ts.map +1 -0
  107. package/lib/server/utils/journal-utils.js +387 -0
  108. package/lib/server/utils/journal-utils.js.map +1 -0
  109. package/lib/server/utils/status-utils.d.ts +58 -0
  110. package/lib/server/utils/status-utils.d.ts.map +1 -0
  111. package/lib/server/utils/status-utils.js +70 -0
  112. package/lib/server/utils/status-utils.js.map +1 -0
  113. package/lib/server/utils/task-utils.d.ts +104 -0
  114. package/lib/server/utils/task-utils.d.ts.map +1 -0
  115. package/lib/server/utils/task-utils.js +396 -0
  116. package/lib/server/utils/task-utils.js.map +1 -0
  117. package/lib/server/utils/uri-utils.d.ts +9 -0
  118. package/lib/server/utils/uri-utils.d.ts.map +1 -0
  119. package/lib/server/utils/uri-utils.js +21 -0
  120. package/lib/server/utils/uri-utils.js.map +1 -0
  121. package/package.json +30 -21
  122. package/skeleton/.agents/rules/anti-hallucination.md +42 -0
  123. package/skeleton/.agents/rules/coding-standards.md +41 -0
  124. package/skeleton/.agents/rules/project-identity.md +71 -0
  125. package/skeleton/.agents/skills/common-framework-evolve/.gitkeep +0 -0
  126. package/skeleton/.agents/skills/common-framework-evolve/SKILL.md +105 -0
  127. package/skeleton/.agents/skills/common-session-close/.gitkeep +0 -0
  128. package/skeleton/.agents/skills/common-session-close/SKILL.md +83 -0
  129. package/skeleton/.agents/skills/common-spec-update/.gitkeep +0 -0
  130. package/skeleton/.agents/skills/common-spec-update/SKILL.md +87 -0
  131. package/skeleton/.agents/skills/pm-brainstorm/.gitkeep +0 -0
  132. package/skeleton/.agents/skills/pm-brainstorm/SKILL.md +114 -0
  133. package/skeleton/.agents/skills/pm-session-start/.gitkeep +0 -0
  134. package/skeleton/.agents/skills/pm-session-start/SKILL.md +73 -0
  135. package/skeleton/.agents/skills/pm-task-planning/SKILL.md +200 -0
  136. package/skeleton/.agents/skills/pm-task-review/.gitkeep +0 -0
  137. package/skeleton/.agents/skills/pm-task-review/SKILL.md +144 -0
  138. package/skeleton/.agents/skills/worker-check/.gitkeep +0 -0
  139. package/skeleton/.agents/skills/worker-check/SKILL.md +194 -0
  140. package/skeleton/.agents/skills/worker-debug/.gitkeep +0 -0
  141. package/skeleton/.agents/skills/worker-debug/SKILL.md +241 -0
  142. package/skeleton/.agents/skills/worker-implement/.gitkeep +0 -0
  143. package/skeleton/.agents/skills/worker-implement/SKILL.md +192 -0
  144. package/skeleton/.agents/workflows/pm.md +81 -0
  145. package/skeleton/.agents/workflows/worker.md +100 -0
  146. package/skeleton/.docs/README.md +25 -0
  147. package/skeleton/.docs/archive/.gitkeep +0 -0
  148. package/skeleton/.docs/design/.gitkeep +0 -0
  149. package/skeleton/.docs/guides/.gitkeep +0 -0
  150. package/skeleton/.docs/notes/.gitkeep +0 -0
  151. package/skeleton/.docs/requirements/.gitkeep +0 -0
  152. package/skeleton/.trellis/config/config.yaml +48 -0
  153. package/skeleton/.trellis/spec/backend/.gitkeep +0 -0
  154. package/skeleton/.trellis/spec/frontend/.gitkeep +0 -0
  155. package/skeleton/.trellis/spec/guides/.gitkeep +0 -0
  156. package/skeleton/.trellis/spec/guides/external-cli-guide.md +253 -0
  157. package/skeleton/.trellis/spec/guides/task-workflow.md +34 -0
  158. package/skeleton/.trellis/spec/guides/testing.md +32 -0
  159. package/skeleton/.trellis/spec/spec-schema.json +64 -0
  160. package/skeleton/.trellis/tasks/.gitkeep +0 -0
  161. package/skeleton/.trellis/workspace/.gitkeep +0 -0
  162. package/skeleton/README.md +25 -0
  163. package/LICENSE +0 -21
  164. package/src/cli/index.js +0 -40
  165. package/src/commands/init.js +0 -37
  166. package/src/commands/update.js +0 -33
  167. package/templates/README.md +0 -22
  168. package/templates/agents/README.md +0 -4
  169. package/templates/trellis/README.md +0 -4
@@ -0,0 +1,200 @@
1
+ ---
2
+ name: pm-task-planning
3
+ description: PM 任务规划(约束集驱动)— PM 完成需求澄清后激活,将设计文档转化为约束集格式的任务定义。新任务创建前必须经过此流程。
4
+ ---
5
+
6
+ # PM 任务规划(约束集驱动)
7
+
8
+ ## 适用场景
9
+
10
+ PM 完成 `pm-brainstorm`(需求澄清 + 设计确认)后,**必须**激活本 Skill 将设计转化为可执行的约束集任务。
11
+
12
+ ## 核心理念
13
+
14
+ > 来源:ccg-workflow spec-research / spec-plan
15
+
16
+ - PM 产出的**不是** TODO List,而是**约束集**
17
+ - 每条约束缩小执行者的解空间,使执行者可"零决策"机械执行
18
+ - 所有技术决策**必须**在规划阶段完成,禁止推迟到实现阶段
19
+ - 约束集必须精准到可验证:含具体参数、明确边界、可测量标准
20
+
21
+ ## HARD-GATE
22
+
23
+ ```
24
+ 1. 设计文档未持久化到 .docs/design/ 前,不得进入本流程。
25
+ 2. plan_validate() 检测到反面模式时,必须修正后才能创建任务。
26
+ 3. conflict_check() 检测到文件冲突时,必须解决后才能创建任务。
27
+ ```
28
+
29
+ ## 流程
30
+
31
+ ### Step 1:需求聚焦
32
+
33
+ - 读取已确认的设计文档(来自 `pm-brainstorm` 的 `.docs/design/{name}.md`)
34
+ - 提取功能边界、技术约束、验收标准草案
35
+ - 确认设计文档路径,后续 `task_create()` 将引用此路径
36
+
37
+ ### Step 2:约束集生成
38
+
39
+ 将需求转化为约束集格式。约束集分三层:
40
+
41
+ #### 硬约束(不可违反)
42
+
43
+ 技术选型、接口规范、安全要求等确定性决策——执行者必须遵守,无商量余地。
44
+
45
+ 示例:
46
+ - C1: 使用 JWT,TTL=15min,刷新机制=sliding window
47
+ - C2: API 端点遵循 RESTful 规范,路径前缀 `/api/v1/`
48
+ - C3: 密码存储使用 bcrypt,cost=12
49
+
50
+ #### 软约束(建议遵守)
51
+
52
+ 代码风格偏好、辅助性建议——执行者有小幅调整空间,偏离时需说明理由。
53
+
54
+ 示例:
55
+ - C4: 优先复用 `src/utils/` 中的现有函数
56
+ - C5: 单个函数不超过 30 行
57
+
58
+ #### 验收标准
59
+
60
+ 可验证的成功判据——每条必须是 yes/no 可判定的。
61
+
62
+ 示例:
63
+ - [ ] 登录成功返回有效 JWT token
64
+ - [ ] 无效凭证返回 401 + 标准错误格式
65
+ - [ ] token 过期后请求返回 401
66
+
67
+ ### Step 3:反面模式自检(HARD-GATE #2)
68
+
69
+ **必须**在约束集完成后调用 `plan_validate()` 检测以下反面模式:
70
+
71
+ 1. **多方案未选择** — 列出方案但未决定 → 必须选定一个并说明理由
72
+ 2. **无决策标准** — 使用"都可以""均可"等模糊词 → 必须给出选择依据
73
+ 3. **推迟决策** — 标记"待定""TBD" → 所有决策在此阶段完成
74
+ 4. **信息堆砌无结论** — 列举信息无总结 → 以约束或决策收尾
75
+
76
+ ```
77
+ 调用方式:plan_validate(content: "约束集完整内容")
78
+ ```
79
+
80
+ - `valid: true` → 继续 Step 4
81
+ - `valid: false` → 修正检测到的反面模式,重新调用直到通过
82
+
83
+ ### Step 4:任务拆分
84
+
85
+ 按约束集拆分为**原子任务**,每个任务满足:
86
+
87
+ - **单一职责**:一个任务做一件事
88
+ - **可独立验收**:有明确的完成判据
89
+ - **文件范围明确**:列出所有涉及文件/目录
90
+ - **依赖显式化**:如有前置依赖,声明依赖任务 ID
91
+ - **粒度适中**:每个任务执行者在 1-2 个会话内可完成
92
+
93
+ 每个任务包含:
94
+ ```
95
+ 标题:简洁描述
96
+ 约束集:从 Step 2 筛选该任务相关约束
97
+ 文件范围:涉及的文件/目录 glob 列表
98
+ 验收标准:从 Step 2 筛选该任务相关标准
99
+ 设计文档:引用 .docs/design/{name}.md 路径
100
+ ```
101
+
102
+ ### Step 5:冲突预检(HARD-GATE #3)
103
+
104
+ **必须**在创建任务前调用 `conflict_check()` 检测文件范围重叠:
105
+
106
+ ```
107
+ 调用方式:conflict_check(files: ["src/auth/*.ts", ...], role: "pm")
108
+ ```
109
+
110
+ - 无冲突 → 继续 Step 6
111
+ - 有冲突 → 向用户呈现冲突报告,解决方案:
112
+ - 调整文件范围避开冲突
113
+ - 建立任务依赖(先完成冲突任务)
114
+ - 使用 `worktree_create()` 物理隔离
115
+
116
+ ### Step 6:任务创建
117
+
118
+ 调用 `task_create()` 创建任务:
119
+
120
+ ```text
121
+ task_create(
122
+ role: "pm",
123
+ title: "实现用户认证 API",
124
+ description: "参见设计文档:.docs/design/user-auth.md\n\n## 约束集\n...",
125
+ acceptance_criteria: "1. 登录返回 JWT\n2. ...",
126
+ file_scope: "src/auth/*.ts, src/middleware/jwt.ts",
127
+ assign_strategy: "independent"
128
+ )
129
+ ```
130
+
131
+ ### Step 7:上下文配置
132
+
133
+ 任务创建成功后,为每个任务调用 `context_generate()` 生成 context.jsonl 推荐清单:
134
+
135
+ ```text
136
+ 调用方式:context_generate(task_id: "T001", phase: "implement")
137
+ ```
138
+
139
+ 审核推荐清单——添加遗漏的必要规范,移除不相关的推荐。
140
+
141
+ 创建完成后向用户汇报:
142
+
143
+ - 任务 ID 和标题
144
+ - 执行指引(如"请开新会话执行 `/worker T001`")
145
+
146
+ ## 约束集输出模板
147
+
148
+ ```markdown
149
+ ## 约束集
150
+
151
+ ### 硬约束(不可违反)
152
+ - C1: [具体技术决策 + 参数]
153
+ - C2: [接口规范 + 格式要求]
154
+
155
+ ### 软约束(建议遵守)
156
+ - C3: [代码风格偏好]
157
+ - C4: [辅助性建议]
158
+
159
+ ### 文件范围
160
+ - path/to/dir/*.ext
161
+ - path/to/specific-file.ext
162
+
163
+ ### 验收标准
164
+ - [ ] [可验证的成功判据 1]
165
+ - [ ] [可验证的成功判据 2]
166
+
167
+ ### 设计文档
168
+ - .docs/design/{feature-name}.md
169
+ ```
170
+
171
+ ## 关键原则
172
+
173
+ - **缩小解空间** — 每条约束都让执行者少做一个决策
174
+ - **具体可验证** — "使用 bcrypt cost=12"而非"使用安全的密码存储"
175
+ - **YAGNI 无情** — 移除所有"以后可能用到"的约束
176
+ - **原子化拆分** — 任务粒度以 1-2 个执行者会话为标准
177
+
178
+ ## PATEOAS 导航
179
+
180
+ ```markdown
181
+ ### 下一步行动
182
+
183
+ 1. [ ] 读取设计文档,提取功能边界和技术约束
184
+ 2. [ ] 生成约束集(硬约束 + 软约束 + 验收标准)
185
+ 3. [ ] 调用 `plan_validate()` 自检反面模式
186
+ 4. [ ] 拆分为原子任务(单一职责 + 文件范围 + 验收标准)
187
+ 5. [ ] 调用 `conflict_check()` 检测文件冲突
188
+ 6. [ ] 调用 `task_create()` 创建任务
189
+ 7. [ ] 调用 `context_generate()` 配置上下文
190
+
191
+ ### 状态快照
192
+
193
+ - 当前角色:PM
194
+ - 当前阶段:TASK_PLANNING
195
+ - 设计文档:{已读取/未读取}
196
+ - 约束集:{未开始/生成中/已完成}
197
+ - 反面模式自检:{未开始/通过/未通过}
198
+ - 冲突检测:{未开始/通过/有冲突}
199
+ - 任务创建:{未开始/已创建 x 个}
200
+ ```
@@ -0,0 +1,144 @@
1
+ ---
2
+ name: pm-task-review
3
+ description: PM 任务验收 — 双阶段验收流程(Stage 1 Spec 合规 → Stage 2 代码质量)。PM 审查执行者完成的任务时激活。
4
+ ---
5
+
6
+ # PM 任务验收(双阶段)
7
+
8
+ ## 适用场景
9
+
10
+ PM 审查执行者提交验收的任务时,**必须**激活本 Skill。
11
+
12
+ ## 验收原则
13
+
14
+ - **双阶段不可颠倒**:必须先 Spec 合规,再代码质量
15
+ - **Stage 1 不过不进 Stage 2**:节省审查时间,避免在不合规产出上花费精力
16
+ - **公正客观**:基于证据而非印象
17
+
18
+ ## Stage 1:Spec 合规审查
19
+
20
+ ### 检查清单
21
+
22
+ 1. **读取任务约束集**
23
+ - 调用 `task_get({ task_id })` 获取 task.md
24
+ - 逐条列出验收标准
25
+
26
+ 2. **检查验证标记完整性**
27
+ - 读取 `dev/verification.md`
28
+ - 确认每个验证类别为 `_PASS` 或 `_NA`(附说明):
29
+ - `LINT_PASS ✅` / `LINT_NA ⚠️`(附说明)
30
+ - `TEST_PASS ✅` / `TEST_NA ⚠️`(附说明)
31
+ - `MANUAL_PASS ✅` / `MANUAL_NA ⚠️`(附说明)
32
+ - **不接受 `_FAIL` 或缺失标记 → 直接打回**
33
+ - **PM 必须验证每个 `_NA` 标记是否有合理说明**
34
+
35
+ 3. **逐条验收标准对照**
36
+
37
+ | # | 验收标准 | 对应产出 | 结果 |
38
+ | --- | -------- | --------------- | ----- |
39
+ | 1 | {标准1} | {对应代码/文件} | ✅/❌ |
40
+ | 2 | {标准2} | {对应代码/文件} | ✅/❌ |
41
+
42
+ 4. **约束集遵守度**
43
+ - 执行者是否只做了约束集要求的事?
44
+ - 是否存在范围蔓延(做了约束集之外的事)?
45
+ - 是否存在遗漏(约束集要求但未做的事)?
46
+
47
+ ### Stage 1 判定
48
+
49
+ - **全部通过** → 进入 Stage 2
50
+ - **任何项不通过** → 打回,附带具体不合规项和修复建议
51
+ - 调用 `task_transition({ task_id, new_status: "rejected", role: "pm" })`
52
+ - 在 task.md 追加打回原因
53
+
54
+ ## Stage 2:代码质量审查
55
+
56
+ ### 检查清单
57
+
58
+ 1. **代码风格一致性**
59
+ - 命名约定是否遵循 `coding-standards.md`?
60
+ - 缩进、格式是否统一?
61
+
62
+ 2. **架构一致性**
63
+ - 新代码是否与项目架构保持一致?
64
+ - 模块划分是否合理?
65
+ - 依赖方向是否正确?
66
+
67
+ 3. **边界情况处理**
68
+ - 空值 / 异常输入是否处理?
69
+ - 错误信息是否有意义?
70
+ - 并发 / 竞态条件是否考虑?
71
+
72
+ 4. **可维护性**
73
+ - 代码是否易理解?
74
+ - 是否有适当注释?
75
+ - 是否有重复代码可提取?
76
+
77
+ 5. **外部 CLI 独立审查(可选)**
78
+ - 如果任务复杂度高,可调用外部 CLI(Codex / Claude Code)做独立审查
79
+ - 外部 CLI 产出写入 `cli/` 目录
80
+ - 综合各方意见形成最终判断
81
+
82
+ ### Stage 2 判定
83
+
84
+ - **全部通过** → 验收通过
85
+ - 调用 `task_transition({ task_id, new_status: "completed", role: "pm" })`
86
+ - **存在问题** → 打回并附带具体改进建议
87
+ - 问题分级:Critical(必须修复)/ Important(建议修复)/ Minor(可后续优化)
88
+ - 调用 `task_transition({ task_id, new_status: "rejected", role: "pm" })`
89
+
90
+ ### PM Push Back 权利
91
+
92
+ 如果审查者认为执行者的判断有疑问,PM 有权 Push Back:
93
+
94
+ 1. **技术论证**:提供理由说明为何当前实现不够好
95
+ 2. **证据支撑**:展示代码/测试证明替代方案可行
96
+ 3. **请求澄清**:要求执行者解释具体设计决策
97
+
98
+ 执行者收到 Push Back 后:
99
+ 1. 理解审查者的技术关切
100
+ 2. 如审查者正确 → 接受建议并修改
101
+ 3. 如坚持原方案 → 提供完整技术论证(非"我觉得没问题")
102
+
103
+ ## 验收结果输出
104
+
105
+ ```markdown
106
+ ## 验收报告
107
+
108
+ ### 任务信息
109
+
110
+ - 任务 ID:{task_id}
111
+ - 审查时间:{timestamp}
112
+ - 审查者:PM
113
+
114
+ ### Stage 1: Spec 合规 — {PASS/FAIL}
115
+
116
+ {逐条结果}
117
+
118
+ ### Stage 2: 代码质量 — {PASS/FAIL}
119
+
120
+ {审查发现}
121
+
122
+ ### 最终判定:{通过 / 打回}
123
+
124
+ {如果打回,列出具体修改要求}
125
+ ```
126
+
127
+ ## PATEOAS 导航
128
+
129
+ ```markdown
130
+ ### 下一步行动
131
+
132
+ 1. [ ] 如果通过 → 调用 `task_transition({ task_id, new_status: "completed", role: "pm" })` 标记完成
133
+ 2. [ ] 如果通过 → 确认是否需要归档(`task_transition({ task_id, new_status: "archived", role: "pm" })`)
134
+ 3. [ ] 如果打回 → 在 task.md 追加打回原因和修复建议
135
+ 4. [ ] 如果打回 → 通知用户开新会话执行 `/worker {task_id}` 继续修复
136
+
137
+ ### 状态快照
138
+
139
+ - 当前角色:PM
140
+ - 当前阶段:REVIEW
141
+ - Stage 1: {PASS/FAIL}
142
+ - Stage 2: {PASS/FAIL/未进入}
143
+ - 最终判定:{通过/打回/审查中}
144
+ ```
File without changes
@@ -0,0 +1,194 @@
1
+ ---
2
+ name: worker-check
3
+ description: 执行者自检与验证标记 — 完成编码后的强制验证流程。生成 dev/verification.md,每个验证类别必须为 _PASS 或 _NA(附说明)。在 worker-implement 完成后由 Worker 激活。
4
+ ---
5
+
6
+ # 执行者自检 & 验证标记
7
+
8
+ ## 适用场景
9
+
10
+ Worker 完成所有编码工作后,提交验收前,**必须**执行本 Skill。
11
+
12
+ ## Iron Law
13
+
14
+ ```
15
+ 没有新鲜验证证据,不准声称完成
16
+ NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
17
+ ```
18
+
19
+ 如果你没有在本轮消息中运行过验证命令,你就不能声称它通过了。
20
+
21
+ ## Gate 函数
22
+
23
+ ```
24
+ 在声称任何状态或表达满意之前:
25
+
26
+ 1. 识别:什么命令能证明这个声明?
27
+ 2. 运行:执行完整命令(新鲜的、完整的)
28
+ 3. 阅读:完整输出 + 检查退出码 + 数失败数
29
+ 4. 验证:输出是否确认了声明?
30
+ - 如果否:报告实际状态 + 证据
31
+ - 如果是:带证据声明结果
32
+ 5. 然后才能:做出声明
33
+
34
+ 跳过任何步骤 = 欺骗,不是验证
35
+ ```
36
+
37
+ ## 三标记验证流程
38
+
39
+ ### 步骤 1:Lint 验证
40
+
41
+ ```bash
42
+ # 运行 lint 检查
43
+ npm run lint # 或项目实际的 lint 命令
44
+ ```
45
+
46
+ - 粘贴 **完整** 终端输出到 verification.md
47
+ - 根据输出标记:`LINT_PASS ✅`、`LINT_FAIL ❌` 或 `LINT_NA ⚠️`(附说明)
48
+ - 如果失败:修复后重新运行,直到通过
49
+
50
+ ### 步骤 2:测试验证
51
+
52
+ ```bash
53
+ # 运行所有测试
54
+ npm test # 或项目实际的测试命令
55
+ ```
56
+
57
+ - 粘贴 **完整** 终端输出到 verification.md
58
+ - 根据输出标记:`TEST_PASS ✅`、`TEST_FAIL ❌` 或 `TEST_NA ⚠️`(附说明)
59
+ - 确认:0 failures, 0 errors
60
+ - 如果失败:修复后重新运行,直到通过
61
+
62
+ ### 步骤 3:手动验证
63
+
64
+ 手动验证产出是否满足约束集中的验收标准:
65
+
66
+ - 逐条对照 task.md 中的验收标准
67
+ - 描述每条标准的验证方式和结果
68
+ - 标记:`MANUAL_PASS ✅`、`MANUAL_FAIL ❌` 或 `MANUAL_NA ⚠️`(附说明)
69
+
70
+ ## 生成 verification.md
71
+
72
+ 将以上三步结果写入 `dev/verification.md`:
73
+
74
+ ```markdown
75
+ # 验证报告
76
+
77
+ ## 任务信息
78
+
79
+ - 任务 ID:{task_id}
80
+ - 验证时间:{timestamp}
81
+ - 验证者:Worker
82
+
83
+ ## Lint 验证
84
+
85
+ ### 命令
86
+
87
+ {实际运行的命令}
88
+
89
+ ### 输出
90
+
91
+ {完整终端输出}
92
+
93
+ ### 标记
94
+
95
+ LINT_PASS ✅
96
+
97
+ ## 测试验证
98
+
99
+ ### 命令
100
+
101
+ {实际运行的命令}
102
+
103
+ ### 输出
104
+
105
+ {完整终端输出}
106
+
107
+ ### 标记
108
+
109
+ TEST_PASS ✅
110
+
111
+ ## 手动验证
112
+
113
+ ### 验收标准检查
114
+
115
+ | # | 验收标准 | 验证方式 | 结果 |
116
+ | --- | -------- | -------- | ---- |
117
+ | 1 | {标准1} | {方式} | ✅ |
118
+ | 2 | {标准2} | {方式} | ✅ |
119
+
120
+ ### 标记
121
+
122
+ MANUAL_PASS ✅
123
+
124
+ ## 标记汇总
125
+
126
+ - LINT_PASS ✅
127
+ - TEST_PASS ✅
128
+ - MANUAL_PASS ✅
129
+ ```
130
+
131
+ ### 不适用示例
132
+
133
+ 如果某验证类别不适用,使用 `_NA` 标记并附说明:
134
+
135
+ ```markdown
136
+ ## Lint 验证
137
+
138
+ ### 命令
139
+
140
+ (无命令)
141
+
142
+ ### 输出
143
+
144
+ 项目未配置 lint 工具。
145
+
146
+ ### 标记
147
+
148
+ LINT_NA ⚠️ — 项目未配置 lint 工具
149
+ ```
150
+
151
+ ## Red Flags — 立即停下
152
+
153
+ | 信号 | 含义 |
154
+ | ---------------------------------------- | ------------------------- |
155
+ | 使用 "should"、"probably"、"seems to" | 没有运行验证 |
156
+ | 在验证前说 "Great!"、"Done!"、"Perfect!" | 没有证据的满足感 |
157
+ | "lint 通过了所以应该没问题" | lint ≠ 测试 ≠ 手动验证 |
158
+ | "我很自信" | 信心 ≠ 证据 |
159
+ | "之前运行过了" | 之前 ≠ 现在,必须重新运行 |
160
+ | "部分检查够了" | 部分证明不了什么 |
161
+
162
+ ## 不适用场景
163
+
164
+ 当某验证类别确实不适用时,使用 `_NA` 标记(而非 `_PASS`):
165
+
166
+ - **项目无 lint 配置**:声明 `LINT_NA`,附说明「项目未配置 lint 工具」
167
+ - **项目无测试框架**:声明 `TEST_NA`,附说明「项目未配置测试框架」
168
+ - **手动验证不可行**:声明 `MANUAL_NA`,附说明原因及替代验证方案
169
+
170
+ > ⚠️ `_NA` 标记需 PM 在验收阶段确认合理性。不可用 `_NA` 替代实际验证。
171
+
172
+ Evidence Gate 接受 `_PASS` 和 `_NA`,拒绝 `_FAIL` 和缺失标记。
173
+
174
+ **无论是否使用 `_NA` 标记,`verification.md` 必须始终生成。**
175
+
176
+ ## PATEOAS 导航
177
+
178
+ 验证完成后输出:
179
+
180
+ ```markdown
181
+ ### 下一步行动
182
+
183
+ 1. [ ] 确认 dev/verification.md 已生成且三标记全部 _PASS 或 _NA(附说明)
184
+ 2. [ ] 调用 `task_transition({ task_id, new_status: "under_review" })` 提交验收
185
+ 3. [ ] 激活 `common-session-close` Skill 完成会话收尾
186
+ 4. [ ] 告知用户回 PM 会话验收
187
+
188
+ ### 状态快照
189
+
190
+ - 当前角色:Worker
191
+ - 当前阶段:CHECK
192
+ - 标记状态:LINT*{status} | TEST*{status} | MANUAL_{status}
193
+ - 验证文件:dev/verification.md {已生成/未生成}
194
+ ```
File without changes