ai-project-manage-cli 2.0.26 → 3.0.2

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 (293) hide show
  1. package/dist/index.js +500 -20
  2. package/package.json +27 -25
  3. package/template/apm.config.json +5 -0
  4. package/template/deploy/README.md +3 -0
  5. package/template/skills/apm-review/SKILL.md +38 -0
  6. package/template/skills/apm-review/apm-review-reference.md +89 -0
  7. package/template/workitems/README.md +19 -0
  8. package/README.md +0 -171
  9. package/dist/api/cli.d.ts +0 -228
  10. package/dist/api/cli.d.ts.map +0 -1
  11. package/dist/api/cli.js +0 -3
  12. package/dist/api/cli.js.map +0 -1
  13. package/dist/api/client.d.ts +0 -5
  14. package/dist/api/client.d.ts.map +0 -1
  15. package/dist/api/client.js +0 -30
  16. package/dist/api/client.js.map +0 -1
  17. package/dist/api/http.d.ts +0 -21
  18. package/dist/api/http.d.ts.map +0 -1
  19. package/dist/api/http.js +0 -108
  20. package/dist/api/http.js.map +0 -1
  21. package/dist/api/index.d.ts +0 -6
  22. package/dist/api/index.d.ts.map +0 -1
  23. package/dist/api/index.js +0 -13
  24. package/dist/api/index.js.map +0 -1
  25. package/dist/api/request-config.d.ts +0 -25
  26. package/dist/api/request-config.d.ts.map +0 -1
  27. package/dist/api/request-config.js +0 -73
  28. package/dist/api/request-config.js.map +0 -1
  29. package/dist/api/requirement.d.ts +0 -1
  30. package/dist/api/requirement.d.ts.map +0 -1
  31. package/dist/api/requirement.js +0 -2
  32. package/dist/api/requirement.js.map +0 -1
  33. package/dist/apm-dotenv.d.ts +0 -8
  34. package/dist/apm-dotenv.d.ts.map +0 -1
  35. package/dist/apm-dotenv.js +0 -73
  36. package/dist/apm-dotenv.js.map +0 -1
  37. package/dist/cli/agent-stream-log.d.ts +0 -41
  38. package/dist/cli/agent-stream-log.d.ts.map +0 -1
  39. package/dist/cli/agent-stream-log.js +0 -364
  40. package/dist/cli/agent-stream-log.js.map +0 -1
  41. package/dist/cli/commands/auth.d.ts +0 -3
  42. package/dist/cli/commands/auth.d.ts.map +0 -1
  43. package/dist/cli/commands/auth.js +0 -51
  44. package/dist/cli/commands/auth.js.map +0 -1
  45. package/dist/cli/commands/chat.d.ts +0 -3
  46. package/dist/cli/commands/chat.d.ts.map +0 -1
  47. package/dist/cli/commands/chat.js +0 -32
  48. package/dist/cli/commands/chat.js.map +0 -1
  49. package/dist/cli/commands/comment.d.ts +0 -3
  50. package/dist/cli/commands/comment.d.ts.map +0 -1
  51. package/dist/cli/commands/comment.js +0 -66
  52. package/dist/cli/commands/comment.js.map +0 -1
  53. package/dist/cli/commands/config.d.ts +0 -3
  54. package/dist/cli/commands/config.d.ts.map +0 -1
  55. package/dist/cli/commands/config.js +0 -39
  56. package/dist/cli/commands/config.js.map +0 -1
  57. package/dist/cli/commands/deploy-backend.d.ts +0 -7
  58. package/dist/cli/commands/deploy-backend.d.ts.map +0 -1
  59. package/dist/cli/commands/deploy-backend.js +0 -77
  60. package/dist/cli/commands/deploy-backend.js.map +0 -1
  61. package/dist/cli/commands/deploy-frontend.d.ts +0 -3
  62. package/dist/cli/commands/deploy-frontend.d.ts.map +0 -1
  63. package/dist/cli/commands/deploy-frontend.js +0 -167
  64. package/dist/cli/commands/deploy-frontend.js.map +0 -1
  65. package/dist/cli/commands/get.d.ts +0 -3
  66. package/dist/cli/commands/get.d.ts.map +0 -1
  67. package/dist/cli/commands/get.js +0 -145
  68. package/dist/cli/commands/get.js.map +0 -1
  69. package/dist/cli/commands/init.d.ts +0 -3
  70. package/dist/cli/commands/init.d.ts.map +0 -1
  71. package/dist/cli/commands/init.js +0 -179
  72. package/dist/cli/commands/init.js.map +0 -1
  73. package/dist/cli/commands/minio.d.ts +0 -3
  74. package/dist/cli/commands/minio.d.ts.map +0 -1
  75. package/dist/cli/commands/minio.js +0 -65
  76. package/dist/cli/commands/minio.js.map +0 -1
  77. package/dist/cli/commands/publish.d.ts +0 -3
  78. package/dist/cli/commands/publish.d.ts.map +0 -1
  79. package/dist/cli/commands/publish.js +0 -130
  80. package/dist/cli/commands/publish.js.map +0 -1
  81. package/dist/cli/commands/release.d.ts +0 -3
  82. package/dist/cli/commands/release.d.ts.map +0 -1
  83. package/dist/cli/commands/release.js +0 -37
  84. package/dist/cli/commands/release.js.map +0 -1
  85. package/dist/cli/commands/requirement.d.ts +0 -3
  86. package/dist/cli/commands/requirement.d.ts.map +0 -1
  87. package/dist/cli/commands/requirement.js +0 -169
  88. package/dist/cli/commands/requirement.js.map +0 -1
  89. package/dist/cli/commands/set.d.ts +0 -3
  90. package/dist/cli/commands/set.d.ts.map +0 -1
  91. package/dist/cli/commands/set.js +0 -103
  92. package/dist/cli/commands/set.js.map +0 -1
  93. package/dist/cli/commands/status.d.ts +0 -3
  94. package/dist/cli/commands/status.d.ts.map +0 -1
  95. package/dist/cli/commands/status.js +0 -42
  96. package/dist/cli/commands/status.js.map +0 -1
  97. package/dist/cli/commands/update.d.ts +0 -3
  98. package/dist/cli/commands/update.d.ts.map +0 -1
  99. package/dist/cli/commands/update.js +0 -36
  100. package/dist/cli/commands/update.js.map +0 -1
  101. package/dist/cli/commands/ws.d.ts +0 -3
  102. package/dist/cli/commands/ws.d.ts.map +0 -1
  103. package/dist/cli/commands/ws.js +0 -25
  104. package/dist/cli/commands/ws.js.map +0 -1
  105. package/dist/cli/credentials.d.ts +0 -30
  106. package/dist/cli/credentials.d.ts.map +0 -1
  107. package/dist/cli/credentials.js +0 -52
  108. package/dist/cli/credentials.js.map +0 -1
  109. package/dist/cli/exit-api-error.d.ts +0 -2
  110. package/dist/cli/exit-api-error.d.ts.map +0 -1
  111. package/dist/cli/exit-api-error.js +0 -18
  112. package/dist/cli/exit-api-error.js.map +0 -1
  113. package/dist/cli/instruction-log-stream-sink.d.ts +0 -31
  114. package/dist/cli/instruction-log-stream-sink.d.ts.map +0 -1
  115. package/dist/cli/instruction-log-stream-sink.js +0 -59
  116. package/dist/cli/instruction-log-stream-sink.js.map +0 -1
  117. package/dist/cli/session.d.ts +0 -26
  118. package/dist/cli/session.d.ts.map +0 -1
  119. package/dist/cli/session.js +0 -41
  120. package/dist/cli/session.js.map +0 -1
  121. package/dist/cli/utils/parse.d.ts +0 -2
  122. package/dist/cli/utils/parse.d.ts.map +0 -1
  123. package/dist/cli/utils/parse.js +0 -12
  124. package/dist/cli/utils/parse.js.map +0 -1
  125. package/dist/cli/ws-run-command.d.ts +0 -13
  126. package/dist/cli/ws-run-command.d.ts.map +0 -1
  127. package/dist/cli/ws-run-command.js +0 -330
  128. package/dist/cli/ws-run-command.js.map +0 -1
  129. package/dist/cli-version.d.ts +0 -9
  130. package/dist/cli-version.d.ts.map +0 -1
  131. package/dist/cli-version.js +0 -61
  132. package/dist/cli-version.js.map +0 -1
  133. package/dist/cli.d.ts +0 -3
  134. package/dist/cli.d.ts.map +0 -1
  135. package/dist/cli.js +0 -36
  136. package/dist/cli.js.map +0 -1
  137. package/dist/config-store.d.ts +0 -38
  138. package/dist/config-store.d.ts.map +0 -1
  139. package/dist/config-store.js +0 -131
  140. package/dist/config-store.js.map +0 -1
  141. package/dist/core/apm-config.d.ts +0 -81
  142. package/dist/core/apm-config.d.ts.map +0 -1
  143. package/dist/core/apm-config.js +0 -147
  144. package/dist/core/apm-config.js.map +0 -1
  145. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +0 -20
  146. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +0 -1
  147. package/dist/core/backend-deploy/backend-deploy-workflow.js +0 -86
  148. package/dist/core/backend-deploy/backend-deploy-workflow.js.map +0 -1
  149. package/dist/core/backend-deploy/command-runner.d.ts +0 -11
  150. package/dist/core/backend-deploy/command-runner.d.ts.map +0 -1
  151. package/dist/core/backend-deploy/command-runner.js +0 -47
  152. package/dist/core/backend-deploy/command-runner.js.map +0 -1
  153. package/dist/core/backend-deploy/dockerode-client/client.d.ts +0 -18
  154. package/dist/core/backend-deploy/dockerode-client/client.d.ts.map +0 -1
  155. package/dist/core/backend-deploy/dockerode-client/client.js +0 -114
  156. package/dist/core/backend-deploy/dockerode-client/client.js.map +0 -1
  157. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts +0 -6
  158. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts.map +0 -1
  159. package/dist/core/backend-deploy/dockerode-client/connection-options.js +0 -62
  160. package/dist/core/backend-deploy/dockerode-client/connection-options.js.map +0 -1
  161. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts +0 -3
  162. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts.map +0 -1
  163. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js +0 -23
  164. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js.map +0 -1
  165. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts +0 -4
  166. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts.map +0 -1
  167. package/dist/core/backend-deploy/dockerode-client/container-options.js +0 -44
  168. package/dist/core/backend-deploy/dockerode-client/container-options.js.map +0 -1
  169. package/dist/core/backend-deploy/dockerode-client/env.d.ts +0 -3
  170. package/dist/core/backend-deploy/dockerode-client/env.d.ts.map +0 -1
  171. package/dist/core/backend-deploy/dockerode-client/env.js +0 -40
  172. package/dist/core/backend-deploy/dockerode-client/env.js.map +0 -1
  173. package/dist/core/backend-deploy/dockerode-client/index.d.ts +0 -8
  174. package/dist/core/backend-deploy/dockerode-client/index.d.ts.map +0 -1
  175. package/dist/core/backend-deploy/dockerode-client/index.js +0 -17
  176. package/dist/core/backend-deploy/dockerode-client/index.js.map +0 -1
  177. package/dist/core/backend-deploy/dockerode-client/ports.d.ts +0 -9
  178. package/dist/core/backend-deploy/dockerode-client/ports.d.ts.map +0 -1
  179. package/dist/core/backend-deploy/dockerode-client/ports.js +0 -35
  180. package/dist/core/backend-deploy/dockerode-client/ports.js.map +0 -1
  181. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts +0 -7
  182. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts.map +0 -1
  183. package/dist/core/backend-deploy/dockerode-client/runtime.js +0 -26
  184. package/dist/core/backend-deploy/dockerode-client/runtime.js.map +0 -1
  185. package/dist/core/backend-deploy/dockerode-client/types.d.ts +0 -64
  186. package/dist/core/backend-deploy/dockerode-client/types.d.ts.map +0 -1
  187. package/dist/core/backend-deploy/dockerode-client/types.js +0 -3
  188. package/dist/core/backend-deploy/dockerode-client/types.js.map +0 -1
  189. package/dist/core/backend-deploy/image-tag.d.ts +0 -2
  190. package/dist/core/backend-deploy/image-tag.d.ts.map +0 -1
  191. package/dist/core/backend-deploy/image-tag.js +0 -15
  192. package/dist/core/backend-deploy/image-tag.js.map +0 -1
  193. package/dist/core/backend-deploy/index.d.ts +0 -3
  194. package/dist/core/backend-deploy/index.d.ts.map +0 -1
  195. package/dist/core/backend-deploy/index.js +0 -6
  196. package/dist/core/backend-deploy/index.js.map +0 -1
  197. package/dist/core/backend-deploy/local-docker-build.d.ts +0 -8
  198. package/dist/core/backend-deploy/local-docker-build.d.ts.map +0 -1
  199. package/dist/core/backend-deploy/local-docker-build.js +0 -25
  200. package/dist/core/backend-deploy/local-docker-build.js.map +0 -1
  201. package/dist/core/backend-deploy/logger.d.ts +0 -10
  202. package/dist/core/backend-deploy/logger.d.ts.map +0 -1
  203. package/dist/core/backend-deploy/logger.js +0 -22
  204. package/dist/core/backend-deploy/logger.js.map +0 -1
  205. package/dist/core/backend-deploy/registry-login-push.d.ts +0 -24
  206. package/dist/core/backend-deploy/registry-login-push.d.ts.map +0 -1
  207. package/dist/core/backend-deploy/registry-login-push.js +0 -37
  208. package/dist/core/backend-deploy/registry-login-push.js.map +0 -1
  209. package/dist/core/backend-deploy/remote-docker-client.d.ts +0 -11
  210. package/dist/core/backend-deploy/remote-docker-client.d.ts.map +0 -1
  211. package/dist/core/backend-deploy/remote-docker-client.js +0 -34
  212. package/dist/core/backend-deploy/remote-docker-client.js.map +0 -1
  213. package/dist/core/backend-deploy/remote-pull-image.d.ts +0 -9
  214. package/dist/core/backend-deploy/remote-pull-image.d.ts.map +0 -1
  215. package/dist/core/backend-deploy/remote-pull-image.js +0 -39
  216. package/dist/core/backend-deploy/remote-pull-image.js.map +0 -1
  217. package/dist/core/backend-deploy/resolve-dockerfile.d.ts +0 -7
  218. package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +0 -1
  219. package/dist/core/backend-deploy/resolve-dockerfile.js +0 -24
  220. package/dist/core/backend-deploy/resolve-dockerfile.js.map +0 -1
  221. package/dist/core/backend-deploy/run-docker-cli.d.ts +0 -9
  222. package/dist/core/backend-deploy/run-docker-cli.d.ts.map +0 -1
  223. package/dist/core/backend-deploy/run-docker-cli.js +0 -14
  224. package/dist/core/backend-deploy/run-docker-cli.js.map +0 -1
  225. package/dist/core/backend-deploy/types.d.ts +0 -23
  226. package/dist/core/backend-deploy/types.d.ts.map +0 -1
  227. package/dist/core/backend-deploy/types.js +0 -3
  228. package/dist/core/backend-deploy/types.js.map +0 -1
  229. package/dist/core/branch-name.d.ts +0 -8
  230. package/dist/core/branch-name.d.ts.map +0 -1
  231. package/dist/core/branch-name.js +0 -37
  232. package/dist/core/branch-name.js.map +0 -1
  233. package/dist/core/constants.d.ts +0 -4
  234. package/dist/core/constants.d.ts.map +0 -1
  235. package/dist/core/constants.js +0 -16
  236. package/dist/core/constants.js.map +0 -1
  237. package/dist/core/cursor-cmd.d.ts +0 -30
  238. package/dist/core/cursor-cmd.d.ts.map +0 -1
  239. package/dist/core/cursor-cmd.js +0 -193
  240. package/dist/core/cursor-cmd.js.map +0 -1
  241. package/dist/core/minio.d.ts +0 -37
  242. package/dist/core/minio.d.ts.map +0 -1
  243. package/dist/core/minio.js +0 -159
  244. package/dist/core/minio.js.map +0 -1
  245. package/dist/core/parse-testcase-md.d.ts +0 -17
  246. package/dist/core/parse-testcase-md.d.ts.map +0 -1
  247. package/dist/core/parse-testcase-md.js +0 -79
  248. package/dist/core/parse-testcase-md.js.map +0 -1
  249. package/dist/core/std-event-handler.d.ts +0 -25
  250. package/dist/core/std-event-handler.d.ts.map +0 -1
  251. package/dist/core/std-event-handler.js +0 -90
  252. package/dist/core/std-event-handler.js.map +0 -1
  253. package/dist/core/utils.d.ts +0 -19
  254. package/dist/core/utils.d.ts.map +0 -1
  255. package/dist/core/utils.js +0 -71
  256. package/dist/core/utils.js.map +0 -1
  257. package/dist/core/ws-client.d.ts +0 -29
  258. package/dist/core/ws-client.d.ts.map +0 -1
  259. package/dist/core/ws-client.js +0 -81
  260. package/dist/core/ws-client.js.map +0 -1
  261. package/dist/employee-ws-client.d.ts +0 -42
  262. package/dist/employee-ws-client.d.ts.map +0 -1
  263. package/dist/employee-ws-client.js +0 -99
  264. package/dist/employee-ws-client.js.map +0 -1
  265. package/dist/index.d.ts +0 -6
  266. package/dist/index.d.ts.map +0 -1
  267. package/dist/index.js.map +0 -1
  268. package/templates/commands/apm-auto-dev.md +0 -6
  269. package/templates/commands/apm-fixbug.md +0 -6
  270. package/templates/commands/apm-prd-review.md +0 -6
  271. package/templates/commands/apm-prd-sync.md +0 -6
  272. package/templates/skills/apm-apply-change/SKILL.md +0 -191
  273. package/templates/skills/apm-auto-dev/SKILL.md +0 -170
  274. package/templates/skills/apm-fixbug/SKILL.md +0 -97
  275. package/templates/skills/apm-propose/SKILL.md +0 -123
  276. package/templates/skills/apm-propose/design-instruction.md +0 -94
  277. package/templates/skills/apm-propose/propose-instruction.md +0 -81
  278. package/templates/skills/apm-propose/specs-instruction.md +0 -114
  279. package/templates/skills/apm-propose/tasks-instruction.md +0 -90
  280. package/templates/skills/apm-release/SKILL.md +0 -87
  281. package/templates/skills/code-change-summary/SKILL.md +0 -84
  282. package/templates/skills/code-change-summary/summary-template.md +0 -55
  283. package/templates/skills/code-deploy/SKILL.md +0 -39
  284. package/templates/skills/prd-review/SKILL.md +0 -48
  285. package/templates/skills/prd-review/output-template.md +0 -47
  286. package/templates/skills/prd-sync/SKILL.md +0 -74
  287. package/templates/skills/prd-sync/updated-requirement-template.md +0 -39
  288. package/templates/skills/prd-testcase/SKILL.md +0 -82
  289. package/templates/skills/prd-testcase/reference.md +0 -44
  290. package/templates/skills/product-capability-inventory/SKILL.md +0 -131
  291. package/templates/skills/product-capability-inventory/template.md +0 -80
  292. package/templates/skills/product-capability-inventory//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +0 -36
  293. package/templates/skills/product-capability-inventory//347/233/256/345/275/225/350/247/204/350/214/203.md +0 -58
@@ -1,97 +0,0 @@
1
- ---
2
- name: apm-fixbug
3
- description: 基于 requirementId 与 `.apm/workitems/<id>/bugs/` 下的 status.yaml、缺陷 Markdown 执行标准化缺陷修复:开发前准备 → 按「待处理」循环修复并落盘复盘 → 推送 → 调用 code-deploy 部署测试环境;当用户明确声明使用该技能时触发。
4
- ---
5
-
6
- # 缺陷修复流程
7
-
8
- ## 目的
9
-
10
- 使用本技能可基于以下输入执行一致的端到端缺陷修复流程:
11
- - `requirementId`:需求 id(与 `.apm/workitems/<requirementId>/` 目录一致)
12
- - 缺陷清单以 `apm get defect <requirementId>` 同步后的本地文件为准(见步骤 1)
13
-
14
- **主 Agent 收尾(必选)**:在协调子 Agent 完成各步骤后,**必须在面向用户的最终回复中附上一张 Markdown 表格**,逐行对应每个步骤,汇总**执行状态**(如:已完成 / 已跳过 / 失败)与**简要说明**(关键结果、commit、失败原因等),便于审阅者核对流程是否闭环。
15
-
16
- ## 输入
17
-
18
- **输入(必填)** `requirementId`:需求 id
19
-
20
- ## 本地缺陷文件约定(必读)
21
-
22
- 同步命令 `apm get defect <requirementId>` 会在如下路径落盘(**不要**臆造路径):
23
-
24
- - 状态汇总:`.apm/workitems/<requirementId>/bugs/status.yaml`
25
- - 结构示例:根键 `defects`,下挂 `"<缺陷数字 id>"`,每项含 `status`,取值为中文:**已创建**、**待处理**、**处理中**、**待验证**、**已解决**、**重新打开**(与 CLI 生成一致)。
26
- - 缺陷正文:`.apm/workitems/<requirementId>/bugs/<id>.md`(`<id>` 与 `status.yaml` 中键一致)
27
-
28
- 本流程**仅将「待处理」视为待修复队列**;循环直至不存在状态为「待处理」的缺陷后,进入部署步骤。
29
-
30
- ## 执行步骤
31
-
32
- 严格按以下顺序执行,且每一步都必须由子 Agent 独立执行并回传结果。
33
-
34
- ### 步骤 1 — 子 Agent:开发前的准备
35
-
36
- 1. 执行 `apm get branchName <requirementId>` 获取目标开发分支名 `branchName`。
37
- 2. 开发工作区准备
38
- 1. 执行 `git fetch origin`,确保可获取最新远程分支信息。
39
- 2. 记录 `TARGET=<branchName>` 与当前分支 `CURRENT`,并检查工作区是否有未提交变更(staged/unstaged/untracked)。
40
- 3. 若 `CURRENT != TARGET` 且工作区有变更:先执行 `git stash push -u` 保存现场,再切换到 `TARGET`。
41
- 4. 若 `CURRENT == TARGET` 且工作区有变更:不要 stash,直接将当前改动作为「修复前检查点」提交,提交文案需明确说明这是 bugfix 前的检查点(例如:`chore: checkpoint before bugfix on <branchName>`)。
42
- 5. 切换到 `TARGET`:本地分支不存在时,从远程跟踪分支创建并切换。
43
- 6. 若在第 3 步执行过 stash,切换成功后不要自动 `stash pop`,避免与后续修复流程冲突。
44
- 7. 最终必须确认当前分支与 `branchName` 完全一致。
45
- 3. 执行 `apm get defect <requirementId>` 同步 BUG 状态与内容到 `.apm/workitems/<requirementId>/bugs/`(含 `status.yaml` 与各 `<id>.md`)。
46
-
47
- **完成判定**:已在目标分支上,且本地 bugs 目录已与远端缺陷列表同步。
48
-
49
- ### 步骤 2 — 子 Agent:按 bugs 清单循环修复
50
-
51
- #### 2.1 每轮开始:确定队列并登记 Todo
52
-
53
- 1. 使用 **Read** 读取 `.apm/workitems/<requirementId>/bugs/status.yaml`,解析 `defects` 下各缺陷的 `status`,**仅**将状态为 **「待处理」** 的缺陷 id 列入本轮待办。
54
- 2. 调用 **TodoWrite**,为当前所有仍处于「待处理」的缺陷各建一条 todo(标题或内容中写明缺陷 id),用于跟踪处理进度;后续每完成一个缺陷的闭环(至「待验证」并已推送)后,须将该缺陷对应 todo 标为已完成,并在下一轮开始时可按最新 `status.yaml` 刷新待办列表。
55
-
56
- 若**没有任何**「待处理」缺陷:跳过 2.2,直接进入**步骤 3**。
57
-
58
- #### 2.2 单个缺陷处理(对其中一个「待处理」缺陷执行;完成后回到 2.1)
59
-
60
- 1. **读取缺陷文档**:根据 `status.yaml` 中的缺陷 id,用 Read 读取同目录下的 `<id>.md`(例如 `123.md`)。
61
- 2. **标为处理中**:将该缺陷在 `status.yaml` 中的 `status` 改为 **「处理中」**;并在同一 `<id>.md` 中同步该状态(例如在文首增加一行 `**状态**:处理中`,或新增 `## 状态` 小节——全仓库保持一致即可),保证 YAML 与 Markdown 一致。**随后**执行 `apm status defect <id>`(`<id>` 与 `status.yaml` 键、文件名一致),由服务端按当前状态自动流转(此处应为「待处理」→「处理中」);若命令失败,不得进入本缺陷的代码修复,须先排查登录/权限或与服务端状态是否一致。
62
- 3. **修复代码**:依据 `<id>.md` 中的缺陷描述复现、定位并实施**最小化**修复;运行相关验证(tests / lint / build 或项目最接近的校验命令),失败则迭代直至通过或明确输出阻塞信息。
63
- 4. **复盘落盘**:在**同一** `<id>.md` 中**新增**二级标题 `## 复盘`,将根因分析、结论与必要说明写在**该标题下**(勿覆盖「缺陷内容」等与同步相关的固定段落)。
64
- 5. **标为待验证**:将该缺陷在 `status.yaml` 中的 `status` 改为 **「待验证」**;并同步更新 `<id>.md` 中的状态展示,与 YAML 一致。**随后**执行 `apm status defect <id>`,由服务端按当前状态自动流转(此处应为「处理中」→「待验证」);若命令失败,不得进入提交推送步骤,须先修复阻塞(含服务端状态与本流程不一致的情况)。
65
- 6. **提交并推送**:执行 `git add -A`(或按项目规范纳入本次改动),`git commit`,提交说明须能识别对应缺陷(含 id 或标题关键词);将当前分支推送到远程(`git push` 或 `git push -u origin "<branchName>"`)。推送失败则本流程标记失败并停止,不得宣称该缺陷已闭环。
66
- 7. **循环**:回到 **2.1**(重新 Read `status.yaml`、更新 TodoWrite),继续处理剩余的「待处理」缺陷,直至不存在「待处理」。
67
-
68
- **完成判定**:`status.yaml` 中已无非预期的「待处理」项(全部已按流程进入「待验证」或同步结果本身无待处理项);且每次提交均已推送成功。
69
-
70
- ### 步骤 3 — 子 Agent:部署测试环境
71
-
72
- 1. 本步骤须在**步骤 2 的循环结束后**执行(所有待处理缺陷已处理完毕,或同步后本就没有待处理项)。
73
- 2. 调用**Read**工具阅读 `.apm/skills/code-deploy/SKILL.md`,严格按照其要求执行部署;**未说明目标环境时,以 `code-deploy` 技能为准,默认部署到测试环境**。
74
- 3. 若部署失败,输出失败原因并将流程标记为失败,不得宣称全流程完成。
75
-
76
- **完成判定**:`code-deploy` 按该技能约定执行完毕且未判定为失败。
77
-
78
- ### 汇总表格式(主 Agent 最终输出)
79
-
80
- 主 Agent 在流程结束时的表格应至少包含以下列,行数覆盖**步骤 1~3**:
81
-
82
- | 步骤 | 内容概要 | 状态 | 说明 |
83
- |------|----------|------|------|
84
- | 1 | 分支与工作区准备、同步 defect | 已完成 | 例:已在 `feat/xxx`,已 `apm get defect` |
85
- | 2 | 读取 status.yaml、TodoWrite、循环修复与推送 | 已完成 | 例:3 个缺陷已待验证,commit `abc123`,已 push |
86
- | 3 | code-deploy 测试环境 | 已完成 | 例:已按 `.apm/deploy/README.md` 执行 |
87
-
88
- 状态列建议统一用语:`已完成`、`已跳过`(并写明跳过原因)、`失败`(并附报错或阻塞点)。
89
-
90
- ## 约束
91
-
92
- - 主 Agent 交付本流程结果时,应以「步骤汇总表」为主、文字为辅;禁止仅用零散叙述代替逐步状态说明。
93
- - 存在未提交变更时,禁止跳过步骤 1 中的工作区与分支整理(除非该步已明确处理)。
94
- - 当前分支与 `branchName` 不一致时,禁止进入步骤 2 的修复循环。
95
- - **仅**根据 `status.yaml` 中 **「待处理」** 驱动修复队列,不要跳过 Read / TodoWrite 的登记与更新。
96
- - 修复须保持最小改动,并与 `<id>.md` 中的缺陷描述一致。
97
- - 步骤 3 完成前,不得宣称「缺陷修复与部署全流程」已完成。
@@ -1,123 +0,0 @@
1
- ---
2
- name: apm-propose
3
- description: 由 PRD 在 .apm/workitems/<requirementId>/ 按依赖顺序生成 proposal、design、specs、tasks,当用于主动声明使用该技能时触发。
4
- ---
5
-
6
- # APM 工作项:规划工件
7
-
8
- 在 **`.apm/workitems/<requirementId>/prd.md`** 上生成实现前规划工件。每个文件**生成前须读哪些依赖、与谁对齐**,以对应 **`propose-instruction.md` / `design-instruction.md` / `specs-instruction.md` / `tasks-instruction.md`** 里的 **「依赖」** 小节为**唯一清单**(本 SKILL 不重复展开)。本 SKILL 只约定**撰写顺序**与 **「单会话读取策略」**;落笔前须已掌握该工件 instruction 所列依赖(是否重复全文 Read 见策略)。
9
-
10
- ---
11
-
12
- ## 输入
13
-
14
- | 字段 | 规则 |
15
- | --- | --- |
16
- | **`requirementId`** | **必填**。与 `.apm/workitems/<requirementId>/` 目录名一致。 |
17
- | **需求正文** | **唯一权威**:`.apm/workitems/<requirementId>/prd.md`。进入流程时须至少 **Read** 一次全文(是否在同一会话中重复读见「单会话读取策略」)。 |
18
-
19
- 若 `prd.md` 不存在或不可读:先在仓库根目录执行 **`apm get requirement <requirementId>`**,该命令会下载最新的需求文档,再 **`Read`** 一次;仍不存在则**停止**并说明。**不要**用开放式提问代替 PRD;**不要**在缺 PRD 时继续生成工件。
20
-
21
- 用户在本轮对话中的补充:仅在与 PRD 兼容时写入;若写入,在相关段落标注 **「会话补充(PRD 未载明)」**。
22
-
23
- ---
24
-
25
- ## Steps
26
-
27
- ### 1. 锚定工作项与 PRD
28
-
29
- - 根路径:`.apm/workitems/<requirementId>/`。
30
- - 若尚无 `prd.md`:在仓库根目录执行 **`apm get requirement <requirementId>`**,再 **`Read` `prd.md` 全文**。若仍缺失则停止。
31
- - 已有则直接 `Read`:`prd.md` 全文。提取:目标用户/场景、范围、非目标、约束、验收口径。
32
- - PRD 未写明的:**不反问用户**;在后续工件的「假设 / 风险 / 待确认」中写明。
33
- - 必要时 **SemanticSearch** / **Read** 仓库代码,便于 `tasks.md` 中 **预期改动路径** 可落地;**不要**臆造 PRD 未给出的业务范围。
34
-
35
- ### 2. 编排顺序与依赖出处
36
-
37
- - **依赖明细**(每个产出写入前须掌握哪些文件、不读哪些):**只以**各 **`*-instruction.md`** 的 **「依赖」** 为准;不要在未读 instruction 的情况下凭记忆补依赖。
38
- - **撰写顺序(编排)**:
39
- 1. 先 **`proposal`**;再 **`design`** 与 **`specs`**(二者均只在 **`proposal` 落盘之后**撰写,**无**先后顺序要求,**互不**等待;**`specs` 是否读 `design`** 以 **`specs-instruction.md`** 为准)。
40
- 2. 最后 **`tasks`**:解锁条件以 **`tasks-instruction.md`**「依赖」为准(通常为 **`design` 与 `specs` 均已就绪**)。
41
- - **何时调用 Read**、如何避免重复读:下节 **「单会话读取策略」**。
42
-
43
- ### 单会话读取策略(推荐)
44
-
45
- 同一 Agent **连续一次跑完** proposal → design/specs → tasks 时,在**不违背各 instruction「依赖」、不少引用**的前提下减少重复 Read:
46
-
47
- | 类型 | 建议 |
48
- | --- | --- |
49
- | **`prd.md`** | 进入流程时 **Read 至少一次全文**。若本会话内已完整读过且无疑虑,写后续工件时**不必**为仪式感再次全文 Read;若 PRD **很长**、会话已很长、或需核对某条款,可对相关段落 **Read(偏移)** 或再读全文。 |
50
- | **`proposal.md`** | 落盘后,后续步骤以**磁盘文件**为准;若会话内已含刚写入的 proposal 全文,写 **design / specs** 时**可不重复 Read**,除非发现与磁盘不一致或需对账 Capabilities。 |
51
- | **`design.md` / `specs/`** | 写完并落盘后,写 **tasks** 时若会话内已无可靠记忆,应对 **`design.md`** 与 **`specs/` 下有关文件**执行 **Read**(至少覆盖 tasks 要引用的需求编号与路径);若会话内仍完整持有二者内容,可直接撰写 tasks,**以落盘文件为最终依据**。 |
52
- | **`*-instruction.md`** | 每类工件在**首次**进入该工件撰写前 **Read** 对应 instruction **全文**一次即可;**不要**在同一轮流程里重复 Read 同一 instruction 文件,除非文件曾被改动或你从其他会话恢复。 |
53
- | **新会话 / 断点续写** | **不以**上表省略 Read:按各 **`*-instruction.md`「依赖」** 对**缺失或未确认的**文件重新 **Read**(通常以磁盘为准)。 |
54
-
55
- **不变原则**:**省略的是重复 Read**,不是省略各 instruction 写明的依赖关系;若本 SKILL 的编排顺序与某 **`*-instruction.md`「依赖」**冲突,**以该 instruction 为准**。
56
-
57
- 使用 **TodoWrite** 跟踪四工件状态(`ready` / `blocked` / `done`);**每完成一工件即落盘并标 `done`**,再解锁下一可写工件。**tasks** 条目中如何对照 specs、对齐 design 路径,以 **`tasks-instruction.md`** 为准。
58
-
59
- ### 3. 生成各工件(按依赖解锁顺序)
60
-
61
- 对当前工件:
62
-
63
- a. **掌握依赖内容**(见当前工件对应的 **`*-instruction.md`「依赖」** 与「单会话读取策略」):按需 **Read**;**不要**把内部思考用标签(如 `<context>`)写进产出文件。
64
-
65
- b. **按各类工件的说明与模板**组织正文,内容严格以 **PRD** 为范围;说明文字**不**复制进产出文件。
66
-
67
- #### `proposal` → `proposal.md`
68
-
69
- - **Instruction**:按「单会话读取策略」读取 **`.apm/skills/apm-propose/propose-instruction.md`**(每个流程一次)。
70
- - **依赖**:以该文件 **「依赖」** 为准(**Read** 时机见「单会话读取策略」)。
71
- - **再写**:`.apm/workitems/<requirementId>/proposal.md`,严格遵循其中的 **Instruction** 与 **Template**(Why / What Changes / Capabilities / Impact)。
72
- - **Capabilities** 与后续 **`specs/*.md`** 一一可追溯;填写前可 **Read** `.apm/product-capability-inventory/` 等本仓库能力文档,避免与既有 CAP/命名冲突(路径以仓库实际为准)。
73
- - PRD 中有但 instruction 未列出的要点:在 **What Changes** 或 **Impact** 中体现;缺口/假设写在 **Why** 或 **Capabilities** 注释性短句中,**不反问用户**。
74
-
75
- #### `design` → `design.md`
76
-
77
- - **Instruction**:**`.apm/skills/apm-propose/design-instruction.md`**(每个流程一次)。
78
- - **依赖**:以该文件 **「依赖」** 为准(**Read** 时机见「单会话读取策略」)。
79
- - **再写**:`.apm/workitems/<requirementId>/design.md`,严格遵循其中的 **Instruction** 与 **Template**(Context、Goals/Non-Goals、Decisions、Risks/Trade-offs、Migration Plan、Open Questions)。
80
- - 说明「何时写满 / 可写精简版」的条件以 **design-instruction** 为准;与本仓库 **`tasks.md`** 的分工是:design 定方案与取舍,tasks 拆可执行步与 **预期改动路径**。
81
-
82
- #### `specs` → `specs/*.md`
83
-
84
- - **Instruction**:**`.apm/skills/apm-propose/specs-instruction.md`**(每个流程一次)。
85
- - **依赖**:以该文件 **「依赖」** 为准(**Read** 时机见「单会话读取策略」)。
86
- - **再写**:`.apm/workitems/<requirementId>/specs/` 下文件,严格遵循 **specs-instruction** 中的写作说明与模板(新增/变更/移除/重命名分块、`### 需求` / `#### 场景`、须/必须、**当**/**则** 等)。
87
- - **与 proposal 对齐**:**proposal** 能力列表中每一项须在 `specs/` 有对应;命名与 **`propose-instruction.md`** 短横线文件名约定一致;细则以 **specs-instruction** 为准。
88
-
89
- #### `tasks` → `tasks.md`
90
-
91
- - **Instruction**:**`.apm/skills/apm-propose/tasks-instruction.md`**(每个流程一次)。
92
- - **依赖**:以该文件 **「依赖」** 为准;写 **tasks** 时对**需求编号、路径、spec 条目**须有可靠依据,若会话内记忆不足则按「单会话读取策略」对相关落盘文件 **Read**。
93
- - **再写**:`.apm/workitems/<requirementId>/tasks.md`,严格遵循 **tasks-instruction**(**`- [ ]`**、分组 **`## 1.`**、编号 **1.1 / 2.1**、四条元数据子列表等)。
94
- - **口径**:做什么以 **specs** 为准,落在哪里以 **design** 为准;**预期改动路径** 与 design 一致。
95
-
96
- c. 每完成一个工件并落盘后,简短提示,如:`已创建 proposal` / `design` / `specs` / `tasks`。
97
-
98
- d. **不要**在依赖未满足时写下一工件(例如:`tasks` 不能在 `design` 或 `specs` 任一缺失时开写)。
99
-
100
- ### 4. 全部就绪
101
-
102
- 当 TodoWrite 中四个工件均为完成态,且无缺文件:
103
-
104
- - 汇总:工作项路径、已创建文件、PRD 与各工件的对应关系(一两句)。
105
- ---
106
-
107
- ## Output(对话中)
108
-
109
- 完成全部工件后,回复须包含:
110
- - **工件列表**及各自一句话用途
111
- - **PRD 如何**映射到 proposal / design / specs / tasks
112
-
113
- ---
114
-
115
- ## Guardrails(对应原 Guardrails)
116
-
117
- - **跨工件一致**:后写须与 **PRD** 及已落盘的前序规划文件一致;各文件写什么、依赖谁、如何对齐 **proposal/specs/design**,**只以**各 **`*-instruction.md`** 为准(与 §3 相同来源,此处不重复展开)。
118
- - **产出纯净**:工作项下的 Markdown **不**夹带本 SKILL/对话中的内部推理、标签式草稿(参见 §3 步骤 a)。
119
- - **四个工件缺一不可**(specs 至少一个 `.md`);遗漏则补全后再宣布完成。
120
- - **每写一个文件**:确认路径存在、内容非空后再进入下一工件。
121
- - **默认不覆盖**已存在的规划文件;若用户明确要求「整目录覆盖重生成」,可重写并声明覆盖范围。
122
- - **同名工作项目录**:以 `requirementId` 为唯一锚点。
123
- - **不向用户追问**需求细节以推进度;歧义写入假设或「待确认」。
@@ -1,94 +0,0 @@
1
- # design 工件:写作说明
2
-
3
- 生成 **`design.md`** 时说明 **如何实现**(HOW):架构与决策为主,不写逐行代码。动机与范围以 **`proposal.md`** 为准,需求细节以 **`prd.md`** 与后续 **`specs/`** 为准。
4
-
5
- **工件 DAG、单会话减少重复 Read**:见 **`.apm/skills/apm-propose/SKILL.md`**(「工件依赖」「单会话读取策略」)。
6
-
7
- ---
8
-
9
- ## 依赖(写入前须 Read 完)
10
-
11
- | 文件 | 说明 |
12
- | --- | --- |
13
- | `.apm/workitems/<requirementId>/prd.md` | 约束、验收、业务事实 |
14
- | `.apm/workitems/<requirementId>/proposal.md` | Why / What / Capabilities / Impact |
15
-
16
- 若 **`proposal.md` 不存在**,**不得**单独写 `design.md`(与 DAG 一致)。
17
-
18
- ---
19
-
20
- ## 输出路径
21
-
22
- - **`.apm/workitems/<requirementId>/design.md`**
23
-
24
- ---
25
-
26
- ## 何时需要写满设计文档
27
-
28
- 若以下任一条成立,应写完整 **`design.md`**;若均不成立且变更极小,可写精简版,但仍建议保留 **Context** 与 **Decisions** 要点。
29
-
30
- - 跨模块/多服务,或引入新的架构模式
31
- - 新外部依赖,或数据模型/API 有显著变更
32
- - 安全、性能、迁移复杂度值得关注
33
- - 需要先拍板技术方案再编码的模糊点
34
-
35
- ---
36
-
37
- ## Instruction
38
-
39
- 撰写技术设计:**偏架构与取舍**,不要替代 **`tasks.md`** 里的实现步骤枚举。
40
-
41
- **须覆盖的小节**:
42
-
43
- - **Context**:背景、当前状态、约束、干系人(可简写)
44
- - **Goals / Non-Goals**:本设计要达到什么、**明确不做什么**
45
- - **Decisions**:关键技术与选型,**每项**说明取舍与备选方案(为何 X 而非 Y)
46
- - **Risks / Trade-offs**:风险与妥协,格式建议:`[风险] → 缓解措施`
47
- - **Migration Plan**:上线/灰度/回滚步骤(不适用则写「无」或「不适用」)
48
- - **Open Questions**:尚未决定或待验证项
49
-
50
- 写作时:**引用 proposal 的动机**;规格层行为以 **prd / specs** 为准,不在 design 里重复抄 specs 全文。重点是决策的 **why**。
51
-
52
- ---
53
-
54
- ## Template(产出 `design.md` 时按此结构填空)
55
-
56
- 小节标题可使用英文如下,或改为中文等价(如 **Context** → **上下文**,**Decisions** → **技术决策** 等)。
57
-
58
- ```markdown
59
- ## Context
60
-
61
- <!-- 背景、现状、约束、干系人 -->
62
-
63
- ## Goals / Non-Goals
64
-
65
- **Goals:**
66
-
67
- <!-- 本设计要达成什么 -->
68
-
69
- **Non-Goals:**
70
-
71
- <!-- 明确不做的范围 -->
72
-
73
- ## Decisions
74
-
75
- <!-- 关键选型:备选方案 + 取舍理由 -->
76
-
77
- ## Risks / Trade-offs
78
-
79
- <!-- [风险] → 缓解 -->
80
-
81
- ## Migration Plan
82
-
83
- <!-- 部署/迁移/回滚;无则说明 -->
84
-
85
- ## Open Questions
86
-
87
- <!-- 待决问题;无则写 无 -->
88
- ```
89
-
90
- ---
91
-
92
- ## Unlocks
93
-
94
- 完成并落盘 **`design.md`** 后,与已完成的 **`specs/`** 一起解锁 **`tasks.md`**(`tasks` 须同时依赖二者)。
@@ -1,81 +0,0 @@
1
- # proposal 工件:写作说明
2
-
3
- 生成 **`proposal.md`** 时须建立 **「为何要做」**,并与后续 **`specs/`** 对齐:**Capabilities** 段落是 proposal 与 specs 之间的契约。
4
-
5
- **工件 DAG、单会话减少重复 Read**:见 **`.apm/skills/apm-propose/SKILL.md`**(「工件依赖」「单会话读取策略」)。
6
-
7
- ---
8
-
9
- ## 输出路径
10
-
11
- - 工作项目录:`.apm/workitems/<requirementId>/`
12
- - 写入:**`.apm/workitems/<requirementId>/proposal.md`**
13
-
14
- ---
15
-
16
- ## 依赖(写入前须 Read 完)
17
-
18
- | 文件 | 说明 |
19
- | --- | --- |
20
- | **`.apm/workitems/<requirementId>/prd.md`** | **唯一权威需求来源**;须全文阅读后再写 `proposal.md`。 |
21
-
22
- 若工作项下尚无 **`prd.md`**:先在仓库根目录执行 **`apm get requirement <requirementId>`**,再 **Read**;仍缺失则**不得**生成 proposal(以 apm-propose **SKILL** 为准)。
23
-
24
- ---
25
-
26
- ## Instruction
27
-
28
- 以 **`prd.md`** 为事实来源撰写变更提案(**Why**,不写实现细节;实现放在 `design.md`)。
29
-
30
- **篇幅**:精短,约 1~2 页等效内容均可。
31
-
32
- ### 必含小节
33
-
34
- - **Why**:1~2 句话说明问题或机会——解决什么、为何是现在。
35
- - **What Changes**:要点列表,写清新增/修改/删除的能力;**破坏性变更**标注 **BREAKING**。
36
- - **Capabilities**:标明后续 **`specs/`** 要如何落文件——这是 proposal 与 specs 阶段的**契约**,填写前可检索仓库内既有能力文档(如 `.apm/product-capability-inventory/`)或相关 PRD/CAP 引用,避免与已有命名脱节。
37
- - **New Capabilities**:新增能力,每一条对应本工作项下后续将新增的 **`specs/<kebab-name>.md`** 文件(例如 `user-auth`、`api-rate-limit`)。用 kebab-case 作文件名主干。
38
- - **Modified Capabilities**:已有「规格层行为」将变更的能力(不仅是实现细节)。每条对应后续 **delta 规格**写法(可与 New 一样落在 `specs/<name>.md`,在文中标明相对既有行为的增量变更)。若无行为规格变化则留空或写「无」。
39
- - **Impact**:受影响的代码区域、API、依赖、系统或运维面。
40
-
41
- **注意**:Capabilities 里列出的每一项,都应在后续 **`specs/`** 中有可追溯对应(可一文件多条能力,但须在 specs 中写清)。
42
-
43
- ---
44
-
45
- ## Template(产出 `proposal.md` 时按此结构填空)
46
-
47
- 小节标题可使用英文如下,或改为中文等价(如 **Why** → **背景与动机**,**What Changes** → **变更内容**,**Capabilities** → **能力范围**,**Impact** → **影响面**)。
48
-
49
- ```markdown
50
- ## Why
51
-
52
- <!-- 动机:解决什么问题?为何是现在? -->
53
-
54
- ## What Changes
55
-
56
- <!-- 具体变更要点;BREAKING 标注破坏性变更 -->
57
-
58
- ## Capabilities
59
-
60
- ### New Capabilities
61
-
62
- <!-- 每条对应后续 `specs/<kebab-name>.md` -->
63
-
64
- - `<name>`: <brief description>
65
-
66
- ### Modified Capabilities
67
-
68
- <!-- 既有能力在规格层的行为变化;无则写 无 -->
69
-
70
- - `<existing-name>`: <what requirement behavior changes>
71
-
72
- ## Impact
73
-
74
- <!-- 受影响代码、API、依赖、系统 -->
75
- ```
76
-
77
- ---
78
-
79
- ## Unlocks
80
-
81
- 完成并落盘 **`proposal.md`** 后,方可编写 **`design.md`** 与 **`specs/`**(二者仅依赖 proposal,可并行)。
@@ -1,114 +0,0 @@
1
- # specs 工件:写作说明(供 apm-propose 读取)
2
-
3
- 在工作项目录下生成 **`specs/`** 内的规格文件,定义系统 **应做什么**,与 **`design.md`**(如何实现)区分。内容须可验证:**每条「需求」下须有至少一个「场景」**。
4
-
5
- **工件 DAG、单会话减少重复 Read**:见 **`.apm/skills/apm-propose/SKILL.md`**(「工件依赖」「单会话读取策略」)。
6
-
7
- ---
8
-
9
- ## 依赖(写入前须全文阅读)
10
-
11
- | 文件 | 说明 |
12
- | --- | --- |
13
- | **`.apm/workitems/<requirementId>/prd.md`** | 业务事实、约束、验收;**唯一权威需求来源**。 |
14
- | **`.apm/workitems/<requirementId>/proposal.md`** | **能力范围**(新增能力 / 变更能力);每项能力须在 `specs/` 中有对应文档;文件名用**短横线小写**(如 `user-auth`、`data-export`)。 |
15
-
16
- 若无 **`proposal.md`**,不得编写 specs。若无 **`prd.md`**,按 apm-propose **SKILL** 先执行 **`apm get requirement <requirementId>`** 再读。
17
-
18
- **不依赖** **`design.md`**:specs 可与设计文档并行撰写,但须与 **proposal 中的能力约定**、**prd** 一致。
19
-
20
- ---
21
-
22
- ## 输出位置
23
-
24
- - 根目录:**`.apm/workitems/<requirementId>/specs/`**
25
- - 文件组织(须与 **`propose-instruction.md`** 及 proposal 中的能力列表一致):
26
- - **常用**:一能力一文件 **`specs/<短横线名称>.md`**
27
- - **也可**:**`specs/<短横线名称>/规格.md`**(同一工作项内择一风格,勿混用)
28
-
29
- ---
30
-
31
- ## 写作说明
32
-
33
- ### 与 proposal 对齐
34
-
35
- 按 **`proposal.md`「能力范围」**逐条落地:
36
-
37
- - **新增能力**:每个名称对应一个上述路径下的文件,以 **「新增需求」** 类内容为主。
38
- - **变更能力**:在对应文件中用 **变更需求 / 移除需求 / 重命名需求** 等章节描述相对旧行为的变化。若仓库有既有能力说明,可先阅读 **`.apm/product-capability-inventory/`** 或相关能力文档以核对名称,**不得**虚构 prd、proposal 未出现的能力。
39
-
40
- ### 变更分块(均使用二级标题 `##`)
41
-
42
- 可按需组合多个分块:
43
-
44
- | 二级标题 | 用途 |
45
- | --- | --- |
46
- | **新增需求** | 全新能力或新需求条款。 |
47
- | **变更需求** | 行为有变:须写入**修改后的完整段落**(从「### 需求:」到其下全部场景),禁止只贴片段,以免后续对账丢失上下文。 |
48
- | **移除需求** | 下线或废弃:每条须写 **原因**、必要时写 **迁移说明**。 |
49
- | **重命名需求** | 仅名称变化:写清 **原名称**、**新名称**。 |
50
-
51
- 若整份文件均为新能力,可只保留 **新增需求** 分块。纯新增内容放在 **新增需求**,不要用 **变更需求** 代替。
52
-
53
- ### 单条需求结构
54
-
55
- - 需求标题:`**### 需求:<名称>**`,其下为正文。
56
- - **措辞**:对行为约束用 **须、必须** 等明确用语,避免「尽量、可以」之类除非 prd 明确要求弱化。
57
- - 场景标题:`**#### 场景:<名称>**`(场景标题固定用 **四个井号**,勿用三个,以免与需求层级混淆)。
58
- - 场景正文建议采用:
59
- - `- **当** …`
60
- - `- **则** …`
61
- - **每条需求至少包含一个场景。**
62
-
63
- ### 变更类特别注意
64
-
65
- 若产品清单或仓库中已有该能力的旧规格,应先找到旧全文,再整体放入 **变更需求** 下改写,**保持标题与结构便于对照**。
66
-
67
- 若只是补充新条款、不改变已有行为,在 **新增需求** 中增加条目,勿用 **变更需求**。
68
-
69
- ### 可验证性
70
-
71
- 每个 **场景** 都能对应测试或验收步骤;后续 **`tasks.md`** 中的 **需求编号** 可与 **需求 / 场景** 标题互相对照。
72
-
73
- ---
74
-
75
- ## 单文件模板示例
76
-
77
- ```markdown
78
- ## 新增需求
79
-
80
- ### 需求:<需求名称>
81
- 系统须 <规范性行为,一条或多句表述清楚>。
82
-
83
- #### 场景:<场景名称>
84
- - **当** <前置或触发条件>
85
- - **则** <预期结果>
86
-
87
- ## 变更需求
88
-
89
- ### 需求:<与既有需求同一标题>
90
- <!-- 此处放完整替换后的需求正文及全部场景 -->
91
-
92
- #### 场景:<场景名称>
93
- - **当** …
94
- - **则** …
95
-
96
- ## 移除需求
97
-
98
- ### 需求:<需求名称>
99
- **原因**:……
100
- **迁移说明**:……
101
-
102
- ## 重命名需求
103
-
104
- - **原名称:** …
105
- - **新名称:** …
106
- ```
107
-
108
- 按实际只保留需要的 `##` 分块;不需要的整块省略。
109
-
110
- ---
111
-
112
- ## 与后续工件的关系
113
-
114
- 本目录与 **`design.md`** 均完成后,方可编写 **`.apm/workitems/<requirementId>/tasks.md`**。
@@ -1,90 +0,0 @@
1
- # tasks 工件:写作说明(供 apm-propose 读取)
2
-
3
- 生成 **`tasks.md`**:把实现工作拆成**可勾选、可追踪**的条款。后续 **apm-apply-change** 依赖 **`- [ ]` / `- [x]`** 勾选推进,格式须严格遵守。
4
-
5
- **工件 DAG、单会话减少重复 Read**:见 **`.apm/skills/apm-propose/SKILL.md`**(「工件依赖」「单会话读取策略」)。
6
-
7
- ---
8
-
9
- ## 依赖(写入前须 Read 完)
10
-
11
- | 文件 | 说明 |
12
- | --- | --- |
13
- | **`.apm/workitems/<requirementId>/prd.md`** | 范围与验收 |
14
- | **`.apm/workitems/<requirementId>/proposal.md`** | 动机与能力边界 |
15
- | **`.apm/workitems/<requirementId>/design.md`** | 如何做、模块与路径 |
16
- | **`.apm/workitems/<requirementId>/specs/`** | 须做什么、需求与场景 |
17
-
18
- 若 **`design.md` 或 `specs/`**(至少一个规格文件)尚未就绪,**不得**编写 **tasks.md**。
19
-
20
- ---
21
-
22
- ## 输出路径
23
-
24
- **`.apm/workitems/<requirementId>/tasks.md`**
25
-
26
- ---
27
-
28
- ## 写作说明
29
-
30
- ### 格式(须严格遵守)
31
-
32
- - **每一条待办必须是复选框**:行首 **`- [ ]`**(半角方括号、半角空格)。**不用** `- [ ]` 的行在实现阶段**无法被可靠追踪**。
33
- - **按主题分组**:使用带序号的二级标题,例如 **`## 1. 环境准备`**、**`## 2. 核心实现`**。
34
- - **任务编号**:组内序号 **`组号.序号`**,与描述同一行,例如 **`- [ ] 1.1 初始化数据模型`**、**`- [ ] 2.1 实现导出接口`**。
35
- - **粒度**:每项宜在一次会话内能做完;过粗则拆,过细可按模块合并。
36
- - **顺序**:按**技术依赖**排列(例如契约/数据先于接口/UI)。
37
-
38
- ### 每条任务须带的元数据(缩进子列表)
39
-
40
- 紧接在 **`- [ ]` 行下方**,用无序列表写出(便于人工与 Agent 对照):
41
-
42
- | 字段 | 说明 |
43
- | --- | --- |
44
- | **需求编号** | 对应 **specs** 中 **### 需求:** 或 **#### 场景:** 的可识别标题/编号 |
45
- | **预期改动路径** | 计划修改或新增的文件/目录(可多条) |
46
- | **验证用例编号** | 可选;与测试或验收条目对应 |
47
- | **完成标准** | 可观察的完成判据(与 specs 场景可对照) |
48
-
49
- 示例:
50
-
51
- ```markdown
52
- ## 1. 数据层
53
-
54
- - [ ] 1.1 新增合同状态字段
55
- - **需求编号**:需求:合同状态同步(见 specs/contract.md)
56
- - **预期改动路径**:`servers/be/prisma/schema.prisma` …
57
- - **完成标准**:迁移可执行;已有合同默认状态正确
58
- ```
59
-
60
- ### 内容来源
61
-
62
- - **做什么、验收什么**:以 **specs** 为主,**prd** 补业务约束。
63
- - **改哪里、怎么迁**:以 **design** 为主,**预期改动路径**须与 design 中的模块划分**一致**;必要时 **SemanticSearch** 仓库以填路径。
64
-
65
- ### 可验证性
66
-
67
- 每条任务应有明确「做完」的样子;**完成标准** 应能让评审者或自己判断无需再猜。
68
-
69
- ---
70
-
71
- ## 模板示例
72
-
73
- ```markdown
74
- ## 1. <!-- 分组名称,如:准备 -->
75
-
76
- - [ ] 1.1 <!-- 简短任务说明 -->
77
- - **需求编号**:…
78
- - **预期改动路径**:…
79
- - **验证用例编号**:(可选)…
80
- - **完成标准**:…
81
-
82
- ## 2. <!-- 分组名称,如:核心实现 -->
83
-
84
- - [ ] 2.1 …
85
- - **需求编号**:…
86
- - **预期改动路径**:…
87
- - **完成标准**:…
88
- ```
89
-
90
- ---