@fitlab-ai/agent-infra 0.8.4 → 0.9.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 (443) hide show
  1. package/bin/cli.ts +2 -2
  2. package/dist/bin/cli.js +2 -2
  3. package/dist/bin/internal-cli.js +98 -0
  4. package/dist/lib/decide.js +81 -90
  5. package/dist/lib/defaults.json +9 -0
  6. package/dist/lib/git/review-snapshot.js +79 -0
  7. package/dist/lib/git/workflow.js +101 -0
  8. package/dist/lib/init.js +5 -0
  9. package/dist/lib/internal/git-workflow.js +42 -0
  10. package/dist/lib/internal/platform-checks.js +119 -0
  11. package/dist/lib/internal/platform-comment.js +129 -0
  12. package/dist/lib/internal/platform-context.js +46 -0
  13. package/dist/lib/internal/platform-issue.js +142 -0
  14. package/dist/lib/internal/platform-pr.js +146 -0
  15. package/dist/lib/internal/release-workflow.js +217 -0
  16. package/dist/lib/internal/task-artifact.js +67 -0
  17. package/dist/lib/internal/task-context.js +43 -0
  18. package/dist/lib/internal/task-event.js +70 -0
  19. package/dist/lib/internal/task-ledger.js +114 -0
  20. package/dist/lib/internal/task-lifecycle.js +58 -0
  21. package/dist/lib/internal/task-short-id.js +83 -0
  22. package/dist/lib/internal/task-snapshot.js +47 -0
  23. package/dist/lib/internal/task-verify.js +50 -0
  24. package/dist/lib/internal/task-warning.js +74 -0
  25. package/dist/lib/platform/adapters.js +14 -0
  26. package/dist/lib/platform/context.js +146 -0
  27. package/dist/lib/platform/github-client.js +124 -0
  28. package/dist/lib/platform/issue-comments.js +409 -0
  29. package/dist/lib/platform/issue-metadata.js +183 -0
  30. package/dist/lib/platform/issues.js +617 -0
  31. package/dist/lib/platform/metadata-labels.js +28 -0
  32. package/dist/lib/platform/pr-checks.js +216 -0
  33. package/dist/lib/platform/pr-summary.js +88 -0
  34. package/dist/lib/platform/pull-request-metadata.js +38 -0
  35. package/dist/lib/platform/pull-requests.js +338 -0
  36. package/dist/lib/platform/releases.js +82 -0
  37. package/dist/lib/platform/types.js +22 -0
  38. package/dist/lib/platform/verification-required.js +78 -0
  39. package/dist/lib/platform/verification-sync.js +1014 -0
  40. package/dist/lib/platform/verification.js +6 -0
  41. package/dist/lib/release/channels.js +31 -0
  42. package/dist/lib/release/workflow.js +32 -0
  43. package/dist/lib/render.js +3 -2
  44. package/dist/lib/run/index.js +24 -7
  45. package/dist/lib/sandbox/capture.js +25 -3
  46. package/dist/lib/sandbox/commands/create.js +66 -26
  47. package/dist/lib/sandbox/commands/enter.js +34 -11
  48. package/dist/lib/sandbox/commands/list-running.js +10 -8
  49. package/dist/lib/sandbox/commands/show.js +2 -2
  50. package/dist/lib/sandbox/commands/start.js +53 -15
  51. package/dist/lib/sandbox/engine.js +33 -3
  52. package/dist/lib/sandbox/engines/colima.js +2 -2
  53. package/dist/lib/sandbox/index.js +6 -6
  54. package/dist/lib/sandbox/mounts.js +36 -0
  55. package/dist/lib/sandbox/recovery.js +562 -0
  56. package/dist/lib/sandbox/runtimes/base.dockerfile +4 -0
  57. package/dist/lib/sandbox/task-resolver.js +5 -1
  58. package/dist/lib/sandbox/tools.js +19 -0
  59. package/dist/lib/server/daemon.js +9 -0
  60. package/dist/lib/server/process-control.js +66 -73
  61. package/dist/lib/server/process-state.js +168 -0
  62. package/dist/lib/server/protocol.js +5 -5
  63. package/dist/lib/task/activity-log.js +61 -0
  64. package/dist/lib/task/artifact-lifecycle.js +427 -0
  65. package/dist/lib/task/command-options.js +30 -0
  66. package/dist/lib/task/commands/cat.js +36 -6
  67. package/dist/lib/task/commands/decisions.js +80 -46
  68. package/dist/lib/task/commands/files.js +21 -7
  69. package/dist/lib/task/commands/grep.js +55 -7
  70. package/dist/lib/task/commands/issue-body.js +23 -14
  71. package/dist/lib/task/commands/log.js +27 -70
  72. package/dist/lib/task/commands/show.js +20 -7
  73. package/dist/lib/task/commands/status.js +18 -8
  74. package/dist/lib/task/decision-intents.js +154 -0
  75. package/dist/lib/task/decision-items.js +53 -0
  76. package/dist/lib/task/events.js +318 -0
  77. package/dist/lib/task/frontmatter.js +159 -1
  78. package/dist/lib/task/implementation-inputs.js +117 -0
  79. package/dist/lib/task/index.js +12 -9
  80. package/dist/lib/task/issue-form.js +19 -6
  81. package/dist/lib/task/ledger-intents.js +185 -0
  82. package/dist/lib/task/ledger.js +65 -35
  83. package/dist/lib/task/lifecycle.js +484 -0
  84. package/dist/lib/task/resolve-ref.js +152 -32
  85. package/dist/lib/task/review-artifacts.js +101 -0
  86. package/dist/lib/task/review-fingerprint.js +46 -0
  87. package/dist/lib/task/sections.js +358 -4
  88. package/dist/lib/task/short-id.js +292 -7
  89. package/dist/lib/task/snapshot.js +95 -0
  90. package/dist/lib/task/verification-checks.js +8 -0
  91. package/dist/lib/task/verification-config.js +14 -0
  92. package/dist/lib/task/verification-engine.js +906 -0
  93. package/dist/lib/task/verification-review.js +3 -0
  94. package/dist/lib/task/verification-types.js +2 -0
  95. package/dist/lib/task/verification.js +113 -0
  96. package/dist/lib/task/workflow-warning-intents.js +131 -0
  97. package/dist/lib/task/workflow-warnings.js +10 -78
  98. package/dist/lib/task/write.js +241 -0
  99. package/dist/lib/update.js +2 -0
  100. package/lib/decide.ts +57 -97
  101. package/lib/defaults.json +9 -0
  102. package/lib/git/review-snapshot.ts +73 -0
  103. package/lib/git/workflow.ts +101 -0
  104. package/lib/init.ts +9 -0
  105. package/lib/internal/git-workflow.ts +37 -0
  106. package/lib/internal/platform-checks.ts +101 -0
  107. package/lib/internal/platform-comment.ts +99 -0
  108. package/lib/internal/platform-context.ts +33 -0
  109. package/lib/internal/platform-issue.ts +116 -0
  110. package/lib/internal/platform-pr.ts +119 -0
  111. package/lib/internal/release-workflow.ts +186 -0
  112. package/lib/internal/task-artifact.ts +47 -0
  113. package/lib/internal/task-context.ts +35 -0
  114. package/lib/internal/task-event.ts +51 -0
  115. package/lib/internal/task-ledger.ts +86 -0
  116. package/lib/internal/task-lifecycle.ts +41 -0
  117. package/lib/internal/task-short-id.ts +55 -0
  118. package/lib/internal/task-snapshot.ts +32 -0
  119. package/lib/internal/task-verify.ts +33 -0
  120. package/lib/internal/task-warning.ts +50 -0
  121. package/lib/platform/adapters.ts +30 -0
  122. package/lib/platform/context.ts +164 -0
  123. package/lib/platform/github-client.ts +146 -0
  124. package/lib/platform/issue-comments.ts +479 -0
  125. package/lib/platform/issue-metadata.ts +250 -0
  126. package/lib/platform/issues.ts +691 -0
  127. package/lib/platform/metadata-labels.ts +33 -0
  128. package/lib/platform/pr-checks.ts +246 -0
  129. package/lib/platform/pr-summary.ts +90 -0
  130. package/lib/platform/pull-request-metadata.ts +69 -0
  131. package/lib/platform/pull-requests.ts +380 -0
  132. package/lib/platform/releases.ts +71 -0
  133. package/lib/platform/types.ts +74 -0
  134. package/lib/platform/verification-required.ts +83 -0
  135. package/{templates/.agents/scripts/platform-adapters/platform-sync.github.js → lib/platform/verification-sync.ts} +221 -363
  136. package/lib/platform/verification.ts +11 -0
  137. package/lib/release/channels.ts +30 -0
  138. package/lib/release/workflow.ts +31 -0
  139. package/lib/render.ts +3 -2
  140. package/lib/run/index.ts +25 -7
  141. package/lib/sandbox/capture.ts +29 -3
  142. package/lib/sandbox/commands/create.ts +75 -28
  143. package/lib/sandbox/commands/enter.ts +38 -11
  144. package/lib/sandbox/commands/list-running.ts +10 -8
  145. package/lib/sandbox/commands/show.ts +2 -2
  146. package/lib/sandbox/commands/start.ts +50 -16
  147. package/lib/sandbox/engine.ts +37 -3
  148. package/lib/sandbox/engines/colima.ts +2 -2
  149. package/lib/sandbox/index.ts +6 -6
  150. package/lib/sandbox/mounts.ts +55 -0
  151. package/lib/sandbox/recovery.ts +828 -0
  152. package/lib/sandbox/runtimes/base.dockerfile +4 -0
  153. package/lib/sandbox/task-resolver.ts +5 -1
  154. package/lib/sandbox/tools.ts +31 -0
  155. package/lib/server/daemon.ts +9 -0
  156. package/lib/server/process-control.ts +70 -71
  157. package/lib/server/process-state.ts +183 -0
  158. package/lib/server/protocol.ts +5 -5
  159. package/lib/task/activity-log.ts +62 -0
  160. package/lib/task/artifact-lifecycle.ts +484 -0
  161. package/lib/task/command-options.ts +32 -0
  162. package/lib/task/commands/cat.ts +22 -9
  163. package/lib/task/commands/decisions.ts +49 -47
  164. package/lib/task/commands/files.ts +14 -6
  165. package/lib/task/commands/grep.ts +34 -7
  166. package/lib/task/commands/issue-body.ts +16 -16
  167. package/lib/task/commands/log.ts +17 -70
  168. package/lib/task/commands/show.ts +14 -6
  169. package/lib/task/commands/status.ts +17 -7
  170. package/lib/task/decision-intents.ts +163 -0
  171. package/lib/task/decision-items.ts +64 -0
  172. package/lib/task/events.ts +320 -0
  173. package/lib/task/frontmatter.ts +202 -2
  174. package/lib/task/implementation-inputs.ts +137 -0
  175. package/lib/task/index.ts +12 -9
  176. package/lib/task/issue-form.ts +20 -6
  177. package/lib/task/ledger-intents.ts +201 -0
  178. package/lib/task/ledger.ts +77 -31
  179. package/lib/task/lifecycle.ts +458 -0
  180. package/lib/task/resolve-ref.ts +197 -36
  181. package/{templates/.agents/scripts/lib/review-artifacts.js → lib/task/review-artifacts.ts} +11 -12
  182. package/{templates/.agents/scripts/lib/post-review-commit.js → lib/task/review-fingerprint.ts} +20 -10
  183. package/lib/task/sections.ts +486 -4
  184. package/lib/task/short-id.ts +403 -9
  185. package/lib/task/snapshot.ts +143 -0
  186. package/lib/task/verification-checks.ts +9 -0
  187. package/lib/task/verification-config.ts +20 -0
  188. package/{templates/.agents/scripts/validate-artifact.js → lib/task/verification-engine.ts} +257 -451
  189. package/lib/task/verification-review.ts +9 -0
  190. package/lib/task/verification-types.ts +29 -0
  191. package/lib/task/verification.ts +156 -0
  192. package/lib/task/workflow-warning-intents.ts +142 -0
  193. package/lib/task/workflow-warnings.ts +10 -78
  194. package/lib/task/write.ts +468 -0
  195. package/lib/update.ts +6 -0
  196. package/package.json +5 -2
  197. package/templates/.agents/README.en.md +6 -3
  198. package/templates/.agents/README.zh-CN.md +6 -3
  199. package/templates/.agents/rules/README.en.md +6 -5
  200. package/templates/.agents/rules/README.zh-CN.md +6 -5
  201. package/templates/.agents/rules/create-issue.en.md +1 -1
  202. package/templates/.agents/rules/create-issue.github.en.md +5 -184
  203. package/templates/.agents/rules/create-issue.github.zh-CN.md +12 -178
  204. package/templates/.agents/rules/create-issue.zh-CN.md +1 -1
  205. package/templates/.agents/rules/human-decision-context.en.md +36 -0
  206. package/templates/.agents/rules/human-decision-context.zh-CN.md +36 -0
  207. package/templates/.agents/rules/issue-fields.github.en.md +4 -148
  208. package/templates/.agents/rules/issue-fields.github.zh-CN.md +9 -144
  209. package/templates/.agents/rules/issue-pr-commands.en.md +43 -3
  210. package/templates/.agents/rules/issue-pr-commands.github.en.md +15 -220
  211. package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +23 -213
  212. package/templates/.agents/rules/issue-pr-commands.zh-CN.md +45 -3
  213. package/templates/.agents/rules/issue-sync.en.md +1 -1
  214. package/templates/.agents/rules/issue-sync.github.en.md +14 -301
  215. package/templates/.agents/rules/issue-sync.github.zh-CN.md +36 -287
  216. package/templates/.agents/rules/issue-sync.zh-CN.md +1 -1
  217. package/templates/.agents/rules/milestone-inference.en.md +1 -1
  218. package/templates/.agents/rules/milestone-inference.github.en.md +7 -119
  219. package/templates/.agents/rules/milestone-inference.github.zh-CN.md +8 -108
  220. package/templates/.agents/rules/milestone-inference.zh-CN.md +1 -1
  221. package/templates/.agents/rules/next-step-output.en.md +12 -11
  222. package/templates/.agents/rules/next-step-output.zh-CN.md +12 -11
  223. package/templates/.agents/rules/no-mid-flow-questions.en.md +3 -3
  224. package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +3 -3
  225. package/templates/.agents/rules/pr-checks-commands.en.md +16 -3
  226. package/templates/.agents/rules/pr-checks-commands.github.en.md +10 -54
  227. package/templates/.agents/rules/pr-checks-commands.github.zh-CN.md +19 -47
  228. package/templates/.agents/rules/pr-checks-commands.zh-CN.md +30 -3
  229. package/templates/.agents/rules/pr-sync.en.md +30 -3
  230. package/templates/.agents/rules/pr-sync.github.en.md +12 -115
  231. package/templates/.agents/rules/pr-sync.github.zh-CN.md +26 -104
  232. package/templates/.agents/rules/pr-sync.zh-CN.md +43 -3
  233. package/templates/.agents/rules/review-handshake.en.md +13 -9
  234. package/templates/.agents/rules/review-handshake.zh-CN.md +13 -9
  235. package/templates/.agents/rules/task-management.en.md +11 -2
  236. package/templates/.agents/rules/task-management.zh-CN.md +11 -3
  237. package/templates/.agents/rules/task-short-id.en.md +25 -29
  238. package/templates/.agents/rules/task-short-id.zh-CN.md +20 -23
  239. package/templates/.agents/scripts/lib/agent-infra-package.js +141 -0
  240. package/templates/.agents/scripts/task-short-id.js +71 -533
  241. package/templates/.agents/skills/analyze-task/SKILL.en.md +22 -55
  242. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +26 -59
  243. package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -3
  244. package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -3
  245. package/templates/.agents/skills/block-task/SKILL.en.md +21 -47
  246. package/templates/.agents/skills/block-task/SKILL.zh-CN.md +23 -47
  247. package/templates/.agents/skills/block-task/config/verify.json +1 -2
  248. package/templates/.agents/skills/cancel-task/SKILL.en.md +16 -45
  249. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +16 -45
  250. package/templates/.agents/skills/cancel-task/config/verify.json +1 -2
  251. package/templates/.agents/skills/check-task/SKILL.en.md +6 -3
  252. package/templates/.agents/skills/check-task/SKILL.zh-CN.md +6 -3
  253. package/templates/.agents/skills/close-codescan/SKILL.en.md +6 -24
  254. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +6 -24
  255. package/templates/.agents/skills/close-dependabot/SKILL.en.md +6 -24
  256. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +6 -24
  257. package/templates/.agents/skills/code-task/SKILL.en.md +22 -35
  258. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +28 -44
  259. package/templates/.agents/skills/code-task/config/verify.en.json +3 -3
  260. package/templates/.agents/skills/code-task/config/verify.zh-CN.json +3 -3
  261. package/templates/.agents/skills/code-task/reference/dual-mode.en.md +13 -9
  262. package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +13 -9
  263. package/templates/.agents/skills/code-task/reference/fix-mode.en.md +1 -1
  264. package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +1 -1
  265. package/templates/.agents/skills/code-task/reference/report-template.en.md +11 -1
  266. package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +11 -1
  267. package/templates/.agents/skills/commit/SKILL.en.md +18 -14
  268. package/templates/.agents/skills/commit/SKILL.zh-CN.md +18 -14
  269. package/templates/.agents/skills/commit/config/verify.json +1 -2
  270. package/templates/.agents/skills/commit/reference/commit-message.en.md +1 -11
  271. package/templates/.agents/skills/commit/reference/commit-message.zh-CN.md +1 -11
  272. package/templates/.agents/skills/commit/reference/issue-metadata-sync.en.md +4 -8
  273. package/templates/.agents/skills/commit/reference/issue-metadata-sync.zh-CN.md +4 -8
  274. package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +6 -18
  275. package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +5 -17
  276. package/templates/.agents/skills/commit/reference/task-status-update.en.md +42 -2
  277. package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +42 -2
  278. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +13 -36
  279. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +13 -36
  280. package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +1 -3
  281. package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +1 -3
  282. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +10 -54
  283. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +10 -79
  284. package/templates/.agents/skills/complete-task/SKILL.en.md +59 -63
  285. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +59 -63
  286. package/templates/.agents/skills/complete-task/config/verify.en.json +11 -6
  287. package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +11 -6
  288. package/templates/.agents/skills/create-pr/SKILL.en.md +19 -44
  289. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +19 -43
  290. package/templates/.agents/skills/create-pr/config/verify.json +1 -2
  291. package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +8 -12
  292. package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +7 -11
  293. package/templates/.agents/skills/create-task/SKILL.en.md +12 -13
  294. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +12 -13
  295. package/templates/.agents/skills/create-task/config/verify.json +1 -2
  296. package/templates/.agents/skills/import-codescan/SKILL.en.md +2 -2
  297. package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +2 -2
  298. package/templates/.agents/skills/import-codescan/config/verify.json +1 -2
  299. package/templates/.agents/skills/import-dependabot/SKILL.en.md +2 -2
  300. package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +2 -2
  301. package/templates/.agents/skills/import-dependabot/config/verify.json +1 -2
  302. package/templates/.agents/skills/import-issue/SKILL.en.md +9 -13
  303. package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +10 -14
  304. package/templates/.agents/skills/import-issue/config/verify.json +1 -2
  305. package/templates/.agents/skills/init-milestones/SKILL.en.md +2 -2
  306. package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +2 -2
  307. package/templates/.agents/skills/init-milestones/scripts/init-milestones.github.sh +5 -4
  308. package/templates/.agents/skills/plan-task/SKILL.en.md +17 -42
  309. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +22 -49
  310. package/templates/.agents/skills/plan-task/config/verify.en.json +1 -3
  311. package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +1 -3
  312. package/templates/.agents/skills/post-release/SKILL.en.md +11 -81
  313. package/templates/.agents/skills/post-release/SKILL.zh-CN.md +8 -78
  314. package/templates/.agents/skills/refine-title/SKILL.en.md +1 -1
  315. package/templates/.agents/skills/refine-title/SKILL.zh-CN.md +1 -1
  316. package/templates/.agents/skills/release/SKILL.en.md +16 -163
  317. package/templates/.agents/skills/release/SKILL.zh-CN.md +15 -162
  318. package/templates/.agents/skills/restore-task/SKILL.en.md +11 -29
  319. package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +11 -29
  320. package/templates/.agents/skills/restore-task/config/verify.json +1 -2
  321. package/templates/.agents/skills/review-analysis/SKILL.en.md +13 -25
  322. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +13 -33
  323. package/templates/.agents/skills/review-analysis/config/verify.en.json +3 -4
  324. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +3 -4
  325. package/templates/.agents/skills/review-analysis/reference/output-templates.en.md +9 -12
  326. package/templates/.agents/skills/review-analysis/reference/output-templates.zh-CN.md +9 -12
  327. package/templates/.agents/skills/review-analysis/reference/report-template.en.md +9 -2
  328. package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +9 -2
  329. package/templates/.agents/skills/review-analysis/reference/review-criteria.en.md +7 -0
  330. package/templates/.agents/skills/review-analysis/reference/review-criteria.zh-CN.md +7 -0
  331. package/templates/.agents/skills/review-code/SKILL.en.md +22 -36
  332. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +23 -41
  333. package/templates/.agents/skills/review-code/config/verify.en.json +5 -5
  334. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +5 -5
  335. package/templates/.agents/skills/review-code/reference/output-templates.en.md +56 -18
  336. package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +56 -18
  337. package/templates/.agents/skills/review-code/reference/report-template.en.md +12 -4
  338. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +12 -4
  339. package/templates/.agents/skills/review-code/reference/review-criteria.en.md +7 -0
  340. package/templates/.agents/skills/review-code/reference/review-criteria.zh-CN.md +7 -0
  341. package/templates/.agents/skills/review-plan/SKILL.en.md +13 -25
  342. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +13 -33
  343. package/templates/.agents/skills/review-plan/config/verify.en.json +3 -4
  344. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +3 -4
  345. package/templates/.agents/skills/review-plan/reference/output-templates.en.md +9 -12
  346. package/templates/.agents/skills/review-plan/reference/output-templates.zh-CN.md +9 -12
  347. package/templates/.agents/skills/review-plan/reference/report-template.en.md +9 -2
  348. package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +9 -2
  349. package/templates/.agents/skills/review-plan/reference/review-criteria.en.md +7 -0
  350. package/templates/.agents/skills/review-plan/reference/review-criteria.zh-CN.md +7 -0
  351. package/templates/.agents/skills/update-agent-infra/SKILL.en.md +6 -3
  352. package/templates/.agents/skills/update-agent-infra/SKILL.zh-CN.md +6 -3
  353. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +177 -151
  354. package/templates/.agents/skills/watch-pr/SKILL.en.md +24 -14
  355. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +25 -15
  356. package/templates/.agents/skills/watch-pr/config/verify.json +1 -2
  357. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +2 -2
  358. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +2 -2
  359. package/templates/.agents/templates/task.en.md +6 -1
  360. package/templates/.agents/templates/task.zh-CN.md +6 -1
  361. package/templates/.claude/commands/analyze-task.en.md +1 -1
  362. package/templates/.claude/commands/analyze-task.zh-CN.md +1 -1
  363. package/templates/.claude/commands/block-task.en.md +1 -1
  364. package/templates/.claude/commands/block-task.zh-CN.md +1 -1
  365. package/templates/.claude/commands/cancel-task.en.md +1 -1
  366. package/templates/.claude/commands/cancel-task.zh-CN.md +1 -1
  367. package/templates/.claude/commands/check-task.en.md +1 -1
  368. package/templates/.claude/commands/check-task.zh-CN.md +1 -1
  369. package/templates/.claude/commands/code-task.en.md +1 -1
  370. package/templates/.claude/commands/code-task.zh-CN.md +1 -1
  371. package/templates/.claude/commands/commit.en.md +1 -0
  372. package/templates/.claude/commands/commit.zh-CN.md +1 -0
  373. package/templates/.claude/commands/complete-manual-validation.en.md +1 -1
  374. package/templates/.claude/commands/complete-manual-validation.zh-CN.md +1 -1
  375. package/templates/.claude/commands/complete-task.en.md +1 -1
  376. package/templates/.claude/commands/complete-task.zh-CN.md +1 -1
  377. package/templates/.claude/commands/create-pr.en.md +1 -1
  378. package/templates/.claude/commands/create-pr.zh-CN.md +1 -1
  379. package/templates/.claude/commands/plan-task.en.md +1 -1
  380. package/templates/.claude/commands/plan-task.zh-CN.md +1 -1
  381. package/templates/.claude/commands/review-analysis.en.md +1 -1
  382. package/templates/.claude/commands/review-analysis.zh-CN.md +1 -1
  383. package/templates/.claude/commands/review-code.en.md +1 -1
  384. package/templates/.claude/commands/review-code.zh-CN.md +1 -1
  385. package/templates/.claude/commands/review-plan.en.md +1 -1
  386. package/templates/.claude/commands/review-plan.zh-CN.md +1 -1
  387. package/templates/.claude/commands/watch-pr.en.md +1 -1
  388. package/templates/.claude/commands/watch-pr.zh-CN.md +1 -1
  389. package/templates/.gemini/commands/_project_/analyze-task.en.toml +2 -0
  390. package/templates/.gemini/commands/_project_/analyze-task.zh-CN.toml +2 -0
  391. package/templates/.gemini/commands/_project_/block-task.en.toml +2 -0
  392. package/templates/.gemini/commands/_project_/block-task.zh-CN.toml +2 -0
  393. package/templates/.gemini/commands/_project_/cancel-task.en.toml +2 -0
  394. package/templates/.gemini/commands/_project_/cancel-task.zh-CN.toml +2 -0
  395. package/templates/.gemini/commands/_project_/check-task.en.toml +2 -0
  396. package/templates/.gemini/commands/_project_/check-task.zh-CN.toml +2 -0
  397. package/templates/.gemini/commands/_project_/code-task.en.toml +2 -0
  398. package/templates/.gemini/commands/_project_/code-task.zh-CN.toml +2 -0
  399. package/templates/.gemini/commands/_project_/commit.en.toml +4 -0
  400. package/templates/.gemini/commands/_project_/commit.zh-CN.toml +4 -0
  401. package/templates/.gemini/commands/_project_/complete-manual-validation.en.toml +2 -0
  402. package/templates/.gemini/commands/_project_/complete-manual-validation.zh-CN.toml +2 -0
  403. package/templates/.gemini/commands/_project_/complete-task.en.toml +2 -0
  404. package/templates/.gemini/commands/_project_/complete-task.zh-CN.toml +2 -0
  405. package/templates/.gemini/commands/_project_/create-pr.en.toml +2 -0
  406. package/templates/.gemini/commands/_project_/create-pr.zh-CN.toml +2 -0
  407. package/templates/.gemini/commands/_project_/plan-task.en.toml +2 -0
  408. package/templates/.gemini/commands/_project_/plan-task.zh-CN.toml +2 -0
  409. package/templates/.gemini/commands/_project_/review-analysis.en.toml +2 -0
  410. package/templates/.gemini/commands/_project_/review-analysis.zh-CN.toml +2 -0
  411. package/templates/.gemini/commands/_project_/review-code.en.toml +2 -0
  412. package/templates/.gemini/commands/_project_/review-code.zh-CN.toml +2 -0
  413. package/templates/.gemini/commands/_project_/review-plan.en.toml +2 -0
  414. package/templates/.gemini/commands/_project_/review-plan.zh-CN.toml +2 -0
  415. package/templates/.gemini/commands/_project_/watch-pr.en.toml +2 -0
  416. package/templates/.gemini/commands/_project_/watch-pr.zh-CN.toml +2 -0
  417. package/templates/.git-hooks/check-large-files.cjs +92 -0
  418. package/templates/.git-hooks/check-version-format.sh +5 -1
  419. package/templates/.git-hooks/pre-commit +1 -0
  420. package/templates/.opencode/commands/analyze-task.en.md +1 -1
  421. package/templates/.opencode/commands/analyze-task.zh-CN.md +1 -1
  422. package/templates/.opencode/commands/check-task.en.md +1 -1
  423. package/templates/.opencode/commands/check-task.zh-CN.md +1 -1
  424. package/templates/.opencode/commands/code-task.en.md +1 -1
  425. package/templates/.opencode/commands/code-task.zh-CN.md +1 -1
  426. package/templates/.opencode/commands/commit.en.md +2 -0
  427. package/templates/.opencode/commands/commit.zh-CN.md +2 -0
  428. package/templates/.opencode/commands/complete-task.en.md +1 -1
  429. package/templates/.opencode/commands/complete-task.zh-CN.md +1 -1
  430. package/templates/.opencode/commands/plan-task.en.md +1 -1
  431. package/templates/.opencode/commands/plan-task.zh-CN.md +1 -1
  432. package/templates/.opencode/commands/review-analysis.en.md +1 -1
  433. package/templates/.opencode/commands/review-analysis.zh-CN.md +1 -1
  434. package/templates/.opencode/commands/review-code.en.md +1 -1
  435. package/templates/.opencode/commands/review-code.zh-CN.md +1 -1
  436. package/templates/.opencode/commands/review-plan.en.md +1 -1
  437. package/templates/.opencode/commands/review-plan.zh-CN.md +1 -1
  438. package/templates/.agents/scripts/platform-adapters/platform-sync.js +0 -13
  439. package/templates/.agents/scripts/review-diff-fingerprint.js +0 -99
  440. package/templates/.agents/scripts/workflow-warnings.js +0 -290
  441. package/templates/.agents/skills/code-task/scripts/detect-mode.js +0 -257
  442. package/templates/.agents/skills/release/scripts/manage-milestones.github.sh +0 -80
  443. package/templates/.agents/skills/release/scripts/manage-milestones.sh +0 -6
@@ -1,135 +1,57 @@
1
1
  # PR 摘要同步
2
2
 
3
- 在同步 reviewer 面向的唯一 PR 摘要评论之前先读取本文件。
3
+ PR 摘要的语义聚合由模型完成;canonical 产物选择、marker、当前 HEAD、分页评论查找和 create/update/no-op 由 typed core 负责。
4
4
 
5
- ## 适用范围
6
-
7
- 当前调用方:
8
- - `create-pr`:首次创建或更新 PR 摘要评论
9
- - `commit`:在已有 PR 上按需刷新摘要评论
10
- - `complete-manual-validation`:人工验证完成后原地更新摘要评论,并写入可被后续聚合复用的验证产物
11
-
12
- 如果后续 skill 也需要刷新 PR 摘要,先在对应 skill 的 reference 中引用本 rule,再补充该 skill 自身的触发条件和失败语义。
13
-
14
- ## 隐藏标记
15
-
16
- 统一使用以下隐藏标记:
5
+ ## 聚合输入
17
6
 
18
- ```html
19
- <!-- sync-pr:{task-id}:summary -->
7
+ ```bash
8
+ agent-infra-internal platform-pr summary-context {task-id}
20
9
  ```
21
10
 
22
- 同一个 PR 中,同一个 `{task-id}` 只能维护一条带该标记的摘要评论。
11
+ 只使用返回的 canonical latest `plan*`、`review-plan*`、`code*`、`review-code*`、`manual-validation*`(包括 `manual-validation.md`)。模型据此生成 reviewer 摘要正文,至少包含:
23
12
 
24
- ## 聚合输入
13
+ - 变更摘要与实现范围
14
+ - 测试结果
15
+ - 审查历程与当前结论
16
+ - 人工校验三态:`### ⚠️ 需人工校验`、`### ✅ 人工验证已通过` 或 `### ✅ 无需人工校验`
17
+
18
+ 保留人工校验项时,每条写明校验内容、定位和只能人工完成的原因。
25
19
 
26
- 聚合当前任务目录中的最新产物:
27
- - `plan.md` 或最新 `plan-r{N}.md`
28
- - `code.md` 或最新 `code-r{N}.md`
29
- - `review-code.md` 或最新 `review-code-r{N}.md`
30
- - `manual-validation.md` 或最新 `manual-validation-r{N}.md`
31
-
32
- 聚合规则:
33
- - 从 `plan*` 提取 2-4 条自包含的关键技术决策
34
- - 用 `review-code*` 与 `code*` 构建审查历程表
35
- - 从 `code*` 提取测试结果摘要
36
- - 如果最新 `manual-validation*` 产物结论为通过,需人工校验段落优先渲染为 `### ✅ 人工验证已通过`,并摘要验证时间、验证范围和验证说明
37
- - 某一类产物缺失时,按“无该阶段数据”处理并继续生成
38
- - 需人工校验段落:只收进入 code 阶段后仍需人实际执行或判断、AI 无法自行关闭的校验点。
39
- - **准入边界**:校验结论依赖真实环境、权限、账号、外部系统或人工判断,且无法通过 agent 重跑测试、补充检查或继续修复自行关闭。
40
- - **来源**:`review-code*` 的「人工校验项」,以及 `code*` 中满足上述边界的校验点。
41
- - **写法**:每条保留项至少写明「校验什么 + 定位(文件/改动/范围)+ 为什么只能由人校验」。
42
- - **渲染优先级**:
43
- 1. 最新 `manual-validation*` 产物结论为通过 -> 标题 `### ✅ 人工验证已通过` + 验证摘要。
44
- 2. 没有通过产物且有保留项 -> 标题 `### ⚠️ 需人工校验` + 条目列表。
45
- 3. 没有通过产物且无保留项 -> 标题 `### ✅ 无需人工校验`,正文一行 `本次改动无需人工确认事项。`,不带条目列表。
46
-
47
- ## 评论体模板
48
-
49
- 评论正文使用以下唯一权威模板:
20
+ core 最终包装出的 canonical 评论结构为:
50
21
 
51
22
  ```markdown
52
23
  <!-- sync-pr:{task-id}:summary -->
53
24
  <!-- last-commit: {git-head-sha} -->
54
25
  ## 审查摘要
55
-
56
- > **{agent}** · {task-id}
57
-
58
- **更新时间**:{当前时间}
59
-
60
26
  {manual-validation-section}
61
-
62
27
  ### 关键技术决策
63
-
64
- - {decision-1}
65
- - {decision-2}
66
-
67
28
  ### 审查历程
68
-
69
- | 轮次 | 结论 | 问题统计 | 修复状态 |
70
- |------|------|----------|----------|
71
- | Round 1 | Pending | N/A | N/A |
72
-
73
29
  ### 测试结果
74
-
75
- - {test-summary}
76
-
77
- ---
78
- *由 {agent} 自动生成 · 内部追踪:{task-id}*
79
30
  ```
80
31
 
81
- > `{manual-validation-section}` 按上文「需人工校验段落」聚合规则渲染:已通过产物 → `### ✅ 人工验证已通过` 标题 + 验证摘要;有保留项 → `### ⚠️ 需人工校验` 标题 + 引用说明 + 条目列表;无保留项 → `### ✅ 无需人工校验` 标题 + 一行 `本次改动无需人工确认事项。`(不带 ⚠️、不带列表)。
82
-
83
- ## 评论查找与更新
84
-
85
- 已有评论必须通过 Issues comments API 获取,而不是单独的 PR comments API。
32
+ ## 发布
86
33
 
87
- 调用方在执行本章节前,必须先按 `.agents/rules/issue-pr-commands.md` / `.agents/rules/issue-sync.md` 完成 `upstream_repo` 检测。
88
-
89
- 处理顺序:
90
- 1. 获取 PR 上现有 comments,查找以 `<!-- sync-pr:{task-id}:summary -->` 开头的评论 ID
91
- 2. 渲染评论正文时,始终写入当前 `git rev-parse HEAD` 的结果到 `<!-- last-commit: {git-head-sha} -->`
92
- 3. 不存在时,POST 创建一条新评论作为兜底
93
- 4. 已存在且正文完全相同时,跳过写入
94
- 5. 已存在且正文有变化时,PATCH 原地更新
95
-
96
- 更新已有评论时,使用如下模式:
34
+ 把聚合后的纯正文写入 `{summary-body-file}`,不要自行添加 marker 或 commit SHA:
97
35
 
98
36
  ```bash
99
- gh api "repos/$upstream_repo/issues/comments/{comment-id}" -X PATCH -f body="$(cat <<'EOF'
100
- {comment-body}
101
- EOF
102
- )"
37
+ agent-infra-internal platform-pr summary-sync {task-id} \
38
+ --agent {agent} --body-file {summary-body-file}
103
39
  ```
104
40
 
105
- ## Shell 安全规则
41
+ core 会包装唯一 `<!-- sync-pr:{task-id}:summary -->` 和当前 `<!-- last-commit: ... -->`,分页查找 PR 普通评论:不存在则创建、正文变化则原地更新、无差异则 no-op、重复 marker 则稳定失败。正文通过文件输入,调用方不得拼 shell/heredoc。
106
42
 
107
- 1. 先读取本地产物内容,再将实际文本内联到 `<<'EOF'` heredoc 中。
108
- 2. 禁止在 heredoc 中使用命令替换或变量展开。
109
- 3. 构造含 `<!-- -->` 的正文时禁止使用 `echo`,统一使用 `cat <<'EOF'` 或 `printf '%s\n'`。
43
+ ## 结果回传
110
44
 
111
- ## 错误处理
45
+ - `applied`:`summary created` 或 `summary updated`
46
+ - `no-op`:`summary skipped (no diff)`
47
+ - `failed|blocked`:`summary failed: {error.code}: {error.message}`
112
48
 
113
- | 失败点 | 处理 |
114
- |--------|------|
115
- | `task.md` 无法读取 | 跳过同步,交由后续 verification gate 报错 |
116
- | 聚合输入缺失 | 记警告并按现有数据继续生成 |
117
- | `gh api` GET/PATCH/POST 失败 | 输出警告并继续;是否阻塞当前 skill 由调用方决定 |
118
- | `pr_number` 指向的 PR 不存在 | 输出 `PR #{pr-number} not found` 警告并继续 |
49
+ `create-pr` 中摘要失败不回滚已创建 PR;`commit` 中只记 warning,不回滚 commit;`complete-manual-validation` 在 canonical artifact 落盘后调用同一 intent 原地刷新。
119
50
 
120
- 当调用方存在 `{task-id}` / task 目录且 GET/PATCH/POST 失败时,记录 Workflow Warning:
51
+ 关联任务的摘要失败由调用方登记结构化告警:
121
52
 
122
53
  ```bash
123
- node .agents/scripts/workflow-warnings.js add .agents/workspace/active/{task-id} \
124
- --step pr-sync --severity ACTION_REQUIRED --code COMMENT_SYNC_FAILED \
125
- --target "pr-summary" --message "{reason}" \
126
- --action "修复 GitHub API / 网络问题后重跑触发 PR 摘要同步的 workflow 步骤"
54
+ agent-infra-internal task-warning {task-id} add --step {step} --severity WARNING \
55
+ --code COMMENT_SYNC_FAILED --target pr-summary --message "{reason}" \
56
+ --action "修复评论权限或平台连接后重跑当前步骤"
127
57
  ```
128
-
129
- ## 结果回传
130
-
131
- 统一回传以下结果之一,供调用方在 Activity Log 或用户输出中复用:
132
- - `summary created`
133
- - `summary updated`
134
- - `summary skipped (no diff)`
135
- - `summary failed: <reason>`
@@ -1,5 +1,45 @@
1
- # PR 同步
1
+ # PR 摘要同步
2
2
 
3
- 当前代码平台未内置 Pull Request 同步支持。
3
+ PR 摘要的语义聚合由模型完成;canonical 产物选择、marker、当前 HEAD、分页评论查找和 create/update/no-op 由 typed core 负责。
4
4
 
5
- 自定义平台会跳过 PR 创建、元数据更新、标签、里程碑、负责人和摘要评论同步,除非你提供匹配的 `.{platform}.zh-CN.md` 规则模板和适配器。请保持本地任务产物更新。
5
+ ## 聚合输入
6
+
7
+ ```bash
8
+ agent-infra-internal platform-pr summary-context {task-id}
9
+ ```
10
+
11
+ 只使用返回的 canonical latest `plan*`、`review-plan*`、`code*`、`review-code*`、`manual-validation*`。模型据此生成 reviewer 摘要正文,至少包含:
12
+
13
+ - 变更摘要与实现范围
14
+ - 测试结果
15
+ - 审查历程与当前结论
16
+ - 人工校验三态:`### ⚠️ 需人工校验`、`### ✅ 人工验证已通过` 或 `### ✅ 无需人工校验`
17
+
18
+ 保留人工校验项时,每条写明校验内容、定位和只能人工完成的原因。
19
+
20
+ ## 发布
21
+
22
+ 把聚合后的纯正文写入 `{summary-body-file}`,不要自行添加 marker 或 commit SHA:
23
+
24
+ ```bash
25
+ agent-infra-internal platform-pr summary-sync {task-id} \
26
+ --agent {agent} --body-file {summary-body-file}
27
+ ```
28
+
29
+ core 会包装唯一 `<!-- sync-pr:{task-id}:summary -->` 和当前 `<!-- last-commit: ... -->`,分页查找 PR 普通评论:不存在则创建、正文变化则原地更新、无差异则 no-op、重复 marker 则稳定失败。正文通过文件输入,调用方不得拼 shell/heredoc。
30
+
31
+ ## 结果回传
32
+
33
+ - `applied`:`summary created` 或 `summary updated`
34
+ - `no-op`:`summary skipped (no diff)`
35
+ - `failed|blocked`:`summary failed: {error.code}: {error.message}`
36
+
37
+ `create-pr` 中摘要失败不回滚已创建 PR;`commit` 中只记 warning,不回滚 commit;`complete-manual-validation` 在 canonical artifact 落盘后调用同一 intent 原地刷新。
38
+
39
+ 关联任务的摘要失败由调用方登记结构化告警:
40
+
41
+ ```bash
42
+ agent-infra-internal task-warning {task-id} add --step {step} --severity WARNING \
43
+ --code COMMENT_SYNC_FAILED --target pr-summary --message "{reason}" \
44
+ --action "修复评论权限或平台连接后重跑当前步骤"
45
+ ```
@@ -62,33 +62,37 @@ The single source of truth for disagreement state is the fixed `## 审查分歧
62
62
  - `stage` ∈ `{analysis, plan, code}` (plus the reserved value `post-review-commit`, used only for post-review exemption rows).
63
63
  - `status` legal enum: `open` / `accepted` / `adjusted` / `refuted` / `cannot-judge` / `confirmed` / `needs-human-decision` / `closed` / `human-decided`.
64
64
  - **Terminal set (gate passes)**: `{confirmed, closed, human-decided}`; everything else is blocking.
65
- - **Write responsibility**: `review-*` raises a finding → upsert an `open` row; `*-task` responds → set four-state and fill `evidence`, `round` +1; next `review-*` → `confirmed` / back to `open` / `needs-human-decision`; an executor fix verified by the next review → `closed`; a human ruling → `human-decided`.
65
+ - **Same-round fix-and-close**: only when the reviewer fixes a `minor` finding during the current review round may `finding-review` move that row directly from `open` to `closed`. This transition does not increment `round`, and `evidence` must point to the fix in the current review artifact; it does not apply to `blocker` or `major` findings.
66
+ - **Severity is independent from advancement**: `blocker` / `major` / `minor` express impact only. Every formal finding blocks approval until terminal. After all writes, review verdicts, event counts, and next steps must be derived from `task-ledger stage-status --stage {stage}`.
67
+ - **Non-blocking advisories**: only future optimizations that do not affect the current artifact's completeness, correctness, or acceptance. Advisories stay in a separate report section and never enter this ledger, finding counts, or verdict; manual-validation remains a separate category.
68
+ - **Write responsibility**: callers submit structured intents only; they do not scan ids, assemble table rows, or decide mechanical transitions. `review-*` uses `agent-infra-internal task-ledger {task-id} finding-upsert|finding-review ...`; `*-task` uses `finding-respond ...`; `ai decide` applies human rulings atomically. The core validates and commits each intent through one task write.
66
69
  - **Backward compatible**: when task.md has no such section the gate treats it as no open disagreements and passes.
67
70
 
68
71
  ### Executor-raised human-ruling rows
69
72
 
70
- When an executor judges an item to be a key design decision that needs human ruling, it must write the detail block (background / options / impact / recommendation) into the artifact's `## 人工裁决待办` (Pending Human Decisions) section with a heading like `### HD-N:<title> [needs-human-decision]`, and upsert the matching `HD-` row in task.md `## Review Disagreement Ledger`:
73
+ When an executor judges an item to be a key design decision that needs human ruling, it must write a self-contained detail block per `.agents/rules/human-decision-context.md` into the artifact's `## 人工裁决待办` (Pending Human Decisions) section with a heading like `### HD-N:<title> [needs-human-decision]`, and upsert the matching `HD-` row in task.md `## Review Disagreement Ledger`:
71
74
 
72
75
  ```markdown
73
76
  | HD-1 | plan | - | decision | needs-human-decision | plan.md#HD-1 |
74
77
  ```
75
78
 
76
- - `id`: the `HD-N` number is **globally unique**. When adding a row, scan every `HD-(\d+)` in the ledger and take max+1 (start at `HD-1` when none exist); it increases monotonically across `analysis` / `plan` / `code` and is **never reused**, so selecting by `HD-id` is unambiguous.
79
+ - `id`: the `HD-N` number is **globally unique**. First run `agent-infra-internal task-ledger {task-id} decision-next-id` and read `entityId`; after writing the stable artifact heading, run `decision-upsert --id {HD-N} --stage {stage} --artifact {artifact}`. The model must not scan or allocate ids.
77
80
  - `stage` is the stage where the decision arose: `analysis` / `plan` / `code`.
78
81
  - `round` is `-` because this is not a review-finding handshake round.
79
82
  - `severity` is always `decision`.
80
83
  - `status` starts as `needs-human-decision`, so the existing gate blocks it.
81
84
  - `evidence` points to the stable anchor `<artifact>#HD-N` (e.g. `plan-r2.md#HD-1`), not a drift-prone line number.
82
- - After a human records the ruling in task.md `## Human Rulings`, flip the matching `HD-` row to `human-decided` and point `evidence` to that ruling.
85
+ - A human records the ruling with `ai decide <task-ref> <ordinal|ledger-id> <decision>`; the command flips the target row to `human-decided` and points `evidence` to an independent `HDR-N` ruling record.
83
86
 
84
- > View: `ai task decisions <task-ref>` lists all pending decisions; `ai task decisions <task-ref> <ordinal|HD-id>` expands a single item's detail block. This command shares the ledger parser `lib/task/ledger.ts` with `ai task log`; the gate parser in `.agents/scripts/validate-artifact.js` is a separate implementation and the two must be kept semantically in sync by hand.
87
+ > Viewing, deciding, and typed verification share the `lib/task/ledger.ts` domain semantics.
85
88
 
86
89
  ## post-review commit gate (code stage only)
87
90
 
88
- - `review-code` captures `Review Baseline Commit` (R, `git rev-parse HEAD`) once, computes `Reviewed Diff Fingerprint` (F, the full worktree diff fingerprint) from that same R, and records both in the highest-round report. When the round is Approved it also writes `last_reviewed_commit: R` (B) to task.md; a non-Approved round preserves the existing B.
89
- - `commit` reads only the highest-round `review-code` artifact. When that artifact is Approved, the pre-commit HEAD equals R, and the staged diff fingerprint equals F, it advances task.md B to the new commit SHA.
90
- - The `complete-task` `post-review-commit` gate prefers B; when B is absent or invalid, it falls back to R from the highest-round `review-code` artifact.
91
- - If new commits touch code / rule paths after B / R, the gate blocks and requires a fresh `review-code`.
91
+ - `review-code` captures the review baseline `R` (diff base), full-worktree diff fingerprint `F`, and normalized snapshot tree `T`. An Approved clean snapshot may set `B=R`; an Approved snapshot with uncommitted changes clears or omits `B`.
92
+ - `commit` reads only the highest-round Approved `review-code` artifact. Before committing it requires `pre_head == R`, complete worktree tree `W == T`, and normalized staged tree `S == T`; any mismatch blocks before `git commit` and reports added, missing, and different paths for both comparisons.
93
+ - After a successful commit it sets `B=last_reviewed_commit=<new_head>`; B means only a reviewed snapshot anchored to a Git commit.
94
+ - The `complete-task` `post-review-commit` gate uses only B. When B is absent, malformed, or missing as a Git object, it reports `reviewed snapshot was not anchored` and never falls back to R.
95
+ - If new commits touch code / rule paths after B, the gate blocks and requires a fresh `review-code`.
92
96
  - **Exemption**: append a ledger row `| PRC-1 | post-review-commit | - | - | human-decided | <ruling note> |` recording that a human explicitly allowed those commits without re-review.
93
97
 
94
98
  ## Gate behavior cheat sheet
@@ -62,33 +62,37 @@
62
62
  - `stage` ∈ `{analysis, plan, code}`(外加保留值 `post-review-commit`,仅用于 post-review 豁免行)。
63
63
  - `status` 合法枚举:`open` / `accepted` / `adjusted` / `refuted` / `cannot-judge` / `confirmed` / `needs-human-decision` / `closed` / `human-decided`。
64
64
  - **终态集合(gate 放行)**:`{confirmed, closed, human-decided}`;其余为阻塞态。
65
- - **写入责任**:`review-*` 提 finding → upsert `open` 行;`*-task` 响应 → 改四态并填 `evidence`、`round` +1;下一轮 `review-*` → `confirmed` / 置回 `open` / `needs-human-decision`;执行方修复经下一轮 review 验证通过 → `closed`;人工裁决 → `human-decided`。
65
+ - **同轮 fix-and-close**:仅当检视方在当前审查轮当场修复 `minor` finding 时,可通过 `finding-review` 将该行从 `open` 直接置为 `closed`。此转换不增加 `round`,`evidence` 必须指向当前 review 产物中的修复证据;`blocker` / `major` 不适用。
66
+ - **severity 与推进解耦**:`blocker` / `major` / `minor` 只表示影响大小。任何正式 finding 只要尚未进入终态就阻止当前阶段通过;review 结论、事件计数与下一步必须在全部写入后通过 `task-ledger stage-status --stage {stage}` 从同一语义导出。
67
+ - **非阻塞 advisory**:仅限不影响当前产物完整性、正确性和验收的后续优化。advisory 只写入报告的独立段落,不进入本账本、不进入 finding 计数、不影响 verdict;manual-validation 仍是独立分类。
68
+ - **写入责任**:调用方只提交结构化意图,不扫描编号、不拼表格行、不自行判断机械状态迁移。`review-*` 用 `agent-infra-internal task-ledger {task-id} finding-upsert|finding-review ...`;`*-task` 用 `finding-respond ...`;人工裁决由 `ai decide` 原子完成。核心统一校验并通过一次任务写入提交。
66
69
  - **向后兼容**:task.md 无此段时,gate 视为无未决分歧而放行。
67
70
 
68
71
  ### 执行方自提人工裁决行
69
72
 
70
- 当执行方判定某项为需人工裁定的关键设计决策时,必须把详情块(背景 / 选项 / 影响 / 推荐)写入产物的 `## 人工裁决待办` 段,标题形如 `### HD-N:<标题> [needs-human-decision]`,并在 task.md `## 审查分歧账本` upsert 对应 `HD-` 行:
73
+ 当执行方判定某项为需人工裁定的关键设计决策时,必须按 `.agents/rules/human-decision-context.md` 把自足详情块写入产物的 `## 人工裁决待办` 段,标题形如 `### HD-N:<标题> [needs-human-decision]`,并在 task.md `## 审查分歧账本` upsert 对应 `HD-` 行:
71
74
 
72
75
  ```markdown
73
76
  | HD-1 | plan | - | decision | needs-human-decision | plan.md#HD-1 |
74
77
  ```
75
78
 
76
- - `id`:`HD-N` 编号**全局唯一**。新增行时扫描账本中所有 `HD-(\d+)`,取最大值 + 1(账本无 `HD-` 行则从 `HD-1` 起);跨 `analysis` / `plan` / `code` 单调递增,**禁止复用**既有编号,避免按 `HD-id` 定位时歧义。
79
+ - `id`:`HD-N` 编号**全局唯一**。先调用 `agent-infra-internal task-ledger {task-id} decision-next-id` 取得 `entityId`,产出稳定标题后调用 `decision-upsert --id {HD-N} --stage {stage} --artifact {artifact}`;不得由模型扫描或分配编号。
77
80
  - `stage` 填该决策产生的阶段:`analysis` / `plan` / `code`。
78
81
  - `round` 填 `-`,因为它不是 review finding 的握手轮次。
79
82
  - `severity` 固定填 `decision`。
80
83
  - `status` 初始填 `needs-human-decision`,因此会被现有 gate 阻塞。
81
84
  - `evidence` 指向稳定锚点 `<artifact>#HD-N`(如 `plan-r2.md#HD-1`),不依赖易漂移的行号。
82
- - 人工在 task.md `## 人工裁决` 段记录裁定后,把对应 `HD-` 行翻为 `human-decided`,`evidence` 指向该裁定记录。
85
+ - 人工使用 `ai decide <task-ref> <序号|账本ID> <裁决内容>` 记录裁定;命令把目标行翻为 `human-decided`,并让 `evidence` 指向独立 `HDR-N` 裁定记录。
83
86
 
84
- > 查看:`ai task decisions <task-ref>` 列出全部待裁决项;`ai task decisions <task-ref> <序号|HD-id>` 展开单项详情块。该命令的账本解析与 `ai task log` 共用 `lib/task/ledger.ts`;`.agents/scripts/validate-artifact.js` 的 gate 解析器是独立实现,二者语义须手工保持同步。
87
+ > 查看、裁决与 typed verification 共用 `lib/task/ledger.ts` 的领域语义。
85
88
 
86
89
  ## post-review commit 门禁(仅 code 阶段)
87
90
 
88
- - `review-code` 一次性捕获 `审查基线提交`(R,`git rev-parse HEAD`),以同一 R 计算 `审查差异指纹`(F,完整工作区 diff fingerprint)并写入最高轮报告;本轮 Approved 时同时在 task.md 写入 `last_reviewed_commit: R`(B),非 Approved 时保留既有 B。
89
- - `commit` 只读取最高轮 `review-code` 产物;当该产物 Approved、提交前 HEAD 等于 R、且 staged diff fingerprint 等于 F 时,把 task.md 的 B 推进为新提交 SHA。
90
- - `complete-task` 的 `post-review-commit` gate 优先使用 B;B 缺失或非法时回退最高轮 `review-code` 的 R。
91
- - 若 B / R 之后代码 / 规则路径出现新提交,gate 会拦截,要求重新 `review-code`。
91
+ - `review-code` 一次性捕获审查基线 `R`(diff base)、完整工作区差异指纹 `F` 与规范化快照树 `T`;Approved 且快照干净时可令 `B=R`,Approved 且含未提交差异时清除/不写 `B`。
92
+ - `commit` 只读取最高轮 Approved `review-code` 产物;提交前比较 `pre_head == R`、完整工作区树 `W == T`、规范化暂存树 `S == T`,任一失配都在 `git commit` 前阻断并报告两组 added/missing/different 路径。
93
+ - 成功提交后令 `B=last_reviewed_commit=<new_head>`;`B` 只表示已经落到 Git commit 的审查锚点。
94
+ - `complete-task` 的 `post-review-commit` gate 只使用 B;B 缺失、畸形或对象不存在时报告 `reviewed snapshot was not anchored`,不得回退 R。
95
+ - 若 B 之后代码 / 规则路径出现新提交,gate 会拦截,要求重新 `review-code`。
92
96
  - **豁免**:在账本追加一行 `| PRC-1 | post-review-commit | - | - | human-decided | <裁定说明> |`,记录人工明确允许该批提交免复审。
93
97
 
94
98
  ## gate 行为速查
@@ -19,6 +19,13 @@ Map user intent to the corresponding workflow command:
19
19
  - Before updating `agent_infra_version`, read `.agents/rules/version-stamp.md`
20
20
  - Activity Log entries are append-only and must never overwrite history
21
21
 
22
+ ## State Snapshot and Completion Verification Entrypoints
23
+
24
+ - Runtime skills that record git, task-directory, and task.md tail evidence must call `agent-infra-internal task-snapshot {task-id} --format text`; they must not resolve short ids, scan workspaces, or reconstruct the three observations themselves.
25
+ - Runtime skills that execute completion gates must call `agent-infra-internal task-verify {task-id} <verification-event> [--artifact <artifact>] --format text`; the typed verification catalog is the sole mapping from business event to skill, workspace, gate/check order, and artifact family.
26
+ - `task-verify` executes the typed catalog/check registry in-process; skills declare business events only.
27
+ - Both entrypoints are read-only. Verification exits remain `0=pass`, `1=fail`, and `2=blocked`; network or platform blocking must never be downgraded to success.
28
+
22
29
  ## Required State Updates by Command
23
30
 
24
31
  - `create-task`: create `branch`, `workflow`, `status`, `created_at`, `updated_at`, `assigned_to`, `agent_infra_version`
@@ -40,9 +47,11 @@ Map user intent to the corresponding workflow command:
40
47
 
41
48
  ## Activity Log started / done dual-marker convention (single source of truth)
42
49
 
43
- > This section is the sole authoritative definition of the started/done dual marker. The skills, the renderer (`lib/task/commands/log.ts`), and the validator (`.agents/scripts/validate-artifact.js`) all defer to it; keep this section in sync when changing any of them.
50
+ `analyze-task`, `review-analysis`, `plan-task`, `review-plan`, `code-task`, and `review-code` must declare business events through `agent-infra-internal task-event`. The event core generates `current_step`, `assigned_to`, `updated_at`, `agent_infra_version`, and the log text below. Other lifecycle skills not yet migrated continue to follow this textual protocol.
51
+
52
+ > This section is authoritative for skills, the renderer, and typed verification checks.
44
53
 
45
- **Line grammar is unchanged**: both started and done use the existing entry grammar `- {YYYY-MM-DD HH:mm:ss±HH:MM} — **{action}** by {agent} — {note}`, so the parsing regexes (`log.ts:ENTRY_RE` and `validate-artifact.js:ACTIVITY_LOG_PATTERN`) need no change.
54
+ **Line grammar is unchanged** and shared by the log renderer and verification activity parser.
46
55
 
47
56
  - **started line** (written when the step begins): the action suffixes the existing base with ` [started]`, note is `started`:
48
57
  `- {time} — **{base} [started]** by {agent} — started`
@@ -19,6 +19,13 @@
19
19
  - 更新 `agent_infra_version` 前,先读取 `.agents/rules/version-stamp.md`
20
20
  - Activity Log 只能追加,不能覆盖历史记录
21
21
 
22
+ ## 状态快照与完成验证入口
23
+
24
+ - 运行时 SKILL 需要记录 git、任务目录和 task.md tail 证据时,统一调用 `agent-infra-internal task-snapshot {task-id} --format text`;不得自行解析短号、扫描 workspace 或重新拼接三段状态命令。
25
+ - 运行时 SKILL 需要执行完成门禁时,统一调用 `agent-infra-internal task-verify {task-id} <verification-event> [--artifact <artifact>] --format text`;业务事件到 skill、workspace、gate/check 顺序和产物族的映射由 typed verification catalog 唯一维护。
26
+ - `task-verify` 在进程内执行 typed catalog/check registry;SKILL 只声明业务事件,不传 task-dir、skill 名或特殊 check 序列。
27
+ - 两个入口均保持只读;验证退出码固定为 `0=pass`、`1=fail`、`2=blocked`,网络或平台阻塞不得降格为成功。
28
+
22
29
  ## 常见命令的状态更新要求
23
30
 
24
31
  - `create-task`:创建 `branch`、`workflow`、`status`、`created_at`、`updated_at`、`assigned_to`、`agent_infra_version`
@@ -40,12 +47,13 @@
40
47
 
41
48
  ## Activity Log started / done 双标记约定(单一事实源)
42
49
 
43
- > 本节是 started/done 双标记的唯一权威定义。各 SKILL、渲染器(`lib/task/commands/log.ts`)、
44
- > 校验脚本(`.agents/scripts/validate-artifact.js`)的相关行为都以本节为准;改动任一端时同步本节。
50
+ `analyze-task`、`review-analysis`、`plan-task`、`review-plan`、`code-task`、`review-code` 必须通过 `agent-infra-internal task-event` 声明业务事件;事件核心统一生成 `current_step`、`assigned_to`、`updated_at`、`agent_infra_version` 和下述日志文本。其余尚未迁移的生命周期 SKILL 继续遵循本节文本协议。
51
+
52
+ > 本节是 started/done 双标记的唯一权威定义。各 SKILL、渲染器与 typed verification check 都以本节为准。
45
53
 
46
54
  **行语法不变**:started 与 done 都沿用既有条目语法
47
55
  `- {YYYY-MM-DD HH:mm:ss±HH:MM} — **{action}** by {agent} — {note}`,因此解析正则
48
- (`log.ts:ENTRY_RE` 与 `validate-artifact.js:ACTIVITY_LOG_PATTERN`)无需改动。
56
+ (`log.ts:ENTRY_RE` 与 verification activity parser)无需改动。
49
57
 
50
58
  - **started 行**(步骤开始时写):action 在既有基名末尾加后缀 ` [started]`,note 用 `started`:
51
59
  `- {time} — **{基名} [started]** by {agent} — started`
@@ -1,36 +1,34 @@
1
1
  # Task short id
2
2
 
3
3
  Task short ids let mobile-style SKILL invocations replace the full 22-char
4
- `TASK-YYYYMMDD-HHMMSS` with bare numeric `N` (recommended) or `#NN` while a
5
- task is active.
4
+ `TASK-YYYYMMDD-HHMMSS` with bare numeric `N` while a task is active.
6
5
 
7
6
  ## Syntax
8
7
 
9
- - Two equivalent literal forms are accepted:
10
- - **Bare numeric `N`** (recommended; no shell quoting needed): e.g. `1`, `7`, `42`.
11
- - **`#`-prefixed `#N` / `#NN`** (also accepted; bash needs `'...'` quoting): e.g. `#1`, `#01`, `#42`.
8
+ - Only **bare numeric `N`** is accepted (no shell quoting needed): e.g. `1`, `7`, `42`.
12
9
  - Resolution: drop leading zeros and take the numeric value `n`; if `n == 0`,
13
10
  reject (reserved); if `n > 10^shortIdLength - 1`, reject (over capacity);
14
- otherwise canonicalize to `#${n.padStart(shortIdLength, '0')}` as the
11
+ otherwise canonicalize to `${n.padStart(shortIdLength, '0')}` as the
15
12
  registry key.
16
13
  - With the default `shortIdLength=2`, capacity is `n ∈ [1, 99]`; registry keys
17
14
  look like `01`, `07`, `42`.
18
- - `#00` (or `#0` when `shortIdLength=1`) is reserved and never allocated; digits
15
+ - `00` (or `0` when `shortIdLength=1`) is reserved and never allocated; digits
19
16
  only, no letters.
20
- - The plain `TASK-…` form keeps working everywhere; bare numeric / `#NN` is an
21
- alias, not the persisted task id.
17
+ - The plain `TASK-…` form keeps working everywhere; bare numeric is an alias,
18
+ not the persisted task id.
19
+ - Removed `#N` / `#NN` syntax is consistently rejected as an invalid task ref.
22
20
 
23
21
  ## Lifecycle
24
22
 
25
23
  | Action | When | Effect on registry |
26
24
  |------------|-----------------------------------------------------------------------|---------------------------------------------------------------|
27
- | alloc | `create-task`, `import-issue`, `import-codescan`, `import-dependabot` | Assigns lowest free `#NN` in the registry. |
28
- | resolve | Lifecycle SKILLs (`analyze-task`, `plan-task`, `code-task`, …) | Looks up `#NN` → full task id. Does not allocate. |
25
+ | alloc | `create-task`, `import-issue`, `import-codescan`, `import-dependabot` | Assigns lowest free `NN` in the registry. |
26
+ | resolve | Lifecycle SKILLs (`analyze-task`, `plan-task`, `code-task`, …) | Looks up `NN` → full task id. Does not allocate. |
29
27
  | release | `complete-task`, `cancel-task`, `block-task`, `close-codescan`, `close-dependabot` | Removes the registry entry. |
30
- | re-alloc | `restore-task` | Re-allocates a (possibly new) `#NN` in the registry. |
28
+ | re-alloc | `restore-task` | Re-allocates a (possibly new) `NN` in the registry. |
31
29
 
32
30
  Short ids are valid only while a task lives in `.agents/workspace/active/`.
33
- Once it is moved to `completed/`, `blocked/`, or `archive/`, the `#NN` slot is
31
+ Once it is moved to `completed/`, `blocked/`, or `archive/`, the `NN` slot is
34
32
  freed and may be reused by a new task.
35
33
 
36
34
  ## Configuration
@@ -39,7 +37,7 @@ freed and may be reused by a new task.
39
37
  // .agents/.airc.json
40
38
  {
41
39
  "task": {
42
- "shortIdLength": 2 // default; capacity = 99 (#01–#99). Set to 3 for #001–#999.
40
+ "shortIdLength": 2 // default; capacity = 99 (01–99). Set to 3 for 001–999.
43
41
  }
44
42
  }
45
43
  ```
@@ -49,12 +47,12 @@ error suggesting either archiving some tasks or raising `task.shortIdLength`.
49
47
  There is no silent extension or truncation. Changing `shortIdLength` requires
50
48
  archiving all active tasks first (the registry key width depends on it).
51
49
 
52
- ## `#NN` resolution scope (split by entrypoint)
50
+ ## Short-id resolution scope (split by entrypoint)
53
51
 
54
52
  | Entrypoint | Hit | Miss |
55
53
  |-------------------------------------------------------------|----------------------|------------------------------------------------------|
56
54
  | SKILL parameter resolver (lifecycle SKILLs) | resolve to full id | **strict error** — short id not found / invalid |
57
- | `ai sandbox exec <N \| '#N'>` / `ai sandbox create <N \| '#N'>` | resolve to full id, then read `branch` from task.md | **strict error** — no ls-index fallback, no literal-branch fallback; hint the user to pass a short id / `TASK-id` / branch name |
55
+ | `ai sandbox exec <N>` / `ai sandbox create <N>` | resolve to full id, then read `branch` from task.md | **strict error** — no ls-index fallback, no literal-branch fallback; hint the user to pass a short id / `TASK-id` / branch name |
58
56
 
59
57
  `list --verify` is strictly read-only: it reports discrepancies between the
60
58
  active dir and the registry, but never writes.
@@ -64,10 +62,10 @@ active dir and the registry, but never writes.
64
62
  Any SKILL (alloc / resolve / release / re-alloc lifecycle entry-points) that
65
63
  receives a `{task-id}` argument must follow this contract:
66
64
 
67
- 1. If `{task-id}` matches `^[#]?[0-9]+$` (bare numeric `N` or `#`-prefixed `#N`):
65
+ 1. If `{task-id}` matches `^[0-9]+$` (bare numeric `N`):
68
66
 
69
67
  ```bash
70
- if [[ "{task-id}" =~ ^[#]?[0-9]+$ ]]; then
68
+ if [[ "{task-id}" =~ ^[0-9]+$ ]]; then
71
69
  # The script writes the full error message (covering reserved / exceeds
72
70
  # shortIdLength capacity / malformed input) to stderr; callers only forward
73
71
  # the exit.
@@ -102,7 +100,7 @@ Short ids are pure local state, persisted only in the registry
102
100
  registry entry is deleted immediately and the short id may be reused; archived
103
101
  tasks are referenced by their full `TASK-…` id.
104
102
 
105
- `resolve(<N|'#N'>)` workflow: ① validate arg matches `^[#]?[0-9]+$` →
103
+ `resolve(<N>)` workflow: ① validate arg matches `^[0-9]+$` →
106
104
  ② strip leading zeros and take the numeric value `n`; classify as reserved
107
105
  (`n == 0`) / over capacity (`n > 10^shortIdLength - 1`) / normal → ③ on
108
106
  normal, use `n.padStart(shortIdLength, '0')` as the registry `ids` key
@@ -116,18 +114,16 @@ repair hint.
116
114
  wrong. Exit code 1.
117
115
  - **Registry corruption** (duplicate registry entries for the same task id, or
118
116
  the JSON is unparsable): exit code 2; manual cleanup required.
119
- - **Reserved key**: the resolved `n == 0` (inputs like `0`, `#0`, `#00`). Exit code 1.
117
+ - **Reserved key**: the resolved `n == 0` (inputs like `0`, `00`). Exit code 1.
120
118
  - **Over capacity**: the resolved `n > 10^shortIdLength - 1` (e.g. `100` or
121
- `#100` when `shortIdLength=2`). Exit code 1.
122
- - **Parameter format error**: input matches neither `^[#]?[0-9]+$` nor a
123
- `TASK-id` (e.g. `#abc`, `#`, `5.5`). Exit code 1.
119
+ `100` when `shortIdLength=2`). Exit code 1.
120
+ - **Parameter format error**: input matches neither `^[0-9]+$` nor a
121
+ `TASK-id` (e.g. `#1`, `#abc`, `#`, `5.5`). Exit code 1.
124
122
 
125
- ## Cross-TUI quoting
123
+ ## Cross-TUI use
126
124
 
127
- Bare numeric `N` is safe in every shell and TUI without quoting (recommended):
125
+ Bare numeric `N` is safe in every shell and TUI without quoting:
128
126
  `ai sandbox exec 11 'npm test'`, `/review-analysis 11`.
129
127
 
130
- The `#N` / `#NN` form is also accepted; but bash treats `#` as a comment
131
- marker, so it must be single-quoted: `ai sandbox exec '#03' 'npm test'`.
132
- Claude Code / Codex / Gemini CLI / OpenCode all forward `#NN` to SKILL
133
- `ARGUMENTS` literally when quoted.
128
+ Starting with the next major version, migrate the old `#NN` form to `NN`;
129
+ even a quoted value delivered intact to the CLI is rejected.
@@ -1,25 +1,24 @@
1
1
  # 任务短号
2
2
 
3
- 短号让所有 SKILL 在 active 任务生命周期内可以用 `#NN` 或裸数字 `N`(推荐)替代
3
+ 短号让所有 SKILL 在 active 任务生命周期内可以用裸数字 `N` 替代
4
4
  完整的 22 字符 `TASK-YYYYMMDD-HHMMSS`。
5
5
 
6
6
  ## 语法
7
7
 
8
- - 字面接受两种等价形式:
9
- - **裸数字 `N`**(推荐,无需 shell 引号):如 `1`、`7`、`42`。
10
- - **`#`-前缀 `#N` / `#NN`**(也接受;但 bash 需 `'...'` 引号):如 `#1`、`#01`、`#42`。
8
+ - 只接受**裸数字 `N`**(无需 shell 引号):如 `1`、`7`、`42`。
11
9
  - 解析规则:去前导零后取数值 `n`,若 `n == 0` 报错(保留);若 `n > 10^shortIdLength - 1`
12
- 报错(超容量);否则归一化为 `#${n.padStart(shortIdLength, '0')}`,作为注册表 key。
10
+ 报错(超容量);否则归一化为 `${n.padStart(shortIdLength, '0')}`,作为注册表 key。
13
11
  - 默认 `shortIdLength=2` 时容量 `n ∈ [1, 99]`,注册表 key 形如 `01`、`07`、`42`。
14
- - `#00`(或 `shortIdLength=1` 时 `#0`)保留、永不分配;纯数字、不引入字母。
15
- - 完整 `TASK-…` 入参在所有路径下行为与现状等价;`#NN` / 裸数字只是别名,不是持久化任务 ID。
12
+ - `00`(或 `shortIdLength=1` 时 `0`)保留、永不分配;纯数字、不引入字母。
13
+ - 完整 `TASK-…` 入参在所有路径下行为与现状等价;裸数字只是别名,不是持久化任务 ID。
14
+ - 已移除的 `#N` / `#NN` 语法作为无效任务引用稳定拒绝。
16
15
 
17
16
  ## 生命周期
18
17
 
19
18
  | 动作 | 触发时机 | 注册表效应 |
20
19
  |-----------|---------------------------------------------------------------------------------------------|------------------------------------------------------------------|
21
- | alloc | `create-task`、`import-issue`、`import-codescan`、`import-dependabot` | 分配最小可用 `#NN`,写入注册表。 |
22
- | resolve | 生命周期 SKILL(`analyze-task` / `plan-task` / `code-task` / `review-*` / `commit` / …) | `#NN` → 完整 task id 查询,不分配。 |
20
+ | alloc | `create-task`、`import-issue`、`import-codescan`、`import-dependabot` | 分配最小可用 `NN`,写入注册表。 |
21
+ | resolve | 生命周期 SKILL(`analyze-task` / `plan-task` / `code-task` / `review-*` / `commit` / …) | `NN` → 完整 task id 查询,不分配。 |
23
22
  | release | `complete-task`、`cancel-task`、`block-task`、`close-codescan`、`close-dependabot` | 从注册表移除。 |
24
23
  | re-alloc | `restore-task` | 重新分配(可能与历史不同),写入注册表。 |
25
24
 
@@ -32,7 +31,7 @@
32
31
  // .agents/.airc.json
33
32
  {
34
33
  "task": {
35
- "shortIdLength": 2 // 默认;容量 = 99(#01–#99)。改为 3 时容量 = #001–#999。
34
+ "shortIdLength": 2 // 默认;容量 = 99(01–99)。改为 3 时容量 = 001–999。
36
35
  }
37
36
  }
38
37
  ```
@@ -41,12 +40,12 @@
41
40
  `task.shortIdLength`」两种修复路径;不静默扩位、不静默截断。
42
41
  切换 `shortIdLength` 配置需要先归档所有 active 任务(注册表 key 宽度依赖配置)。
43
42
 
44
- ## `#NN` 解析作用域(按入口二分)
43
+ ## 短号解析作用域(按入口二分)
45
44
 
46
45
  | 入口 | 注册表命中 | 注册表未命中 |
47
46
  |-----------------------------------------------------------|----------------------|--------------------------------------------------------|
48
47
  | SKILL 入参解析器(生命周期 SKILL) | 解析为完整 task id | **严格报错** —— 短号不存在 / 格式错误 |
49
- | `ai sandbox exec <N \| '#N'>` / `ai sandbox create <N \| '#N'>` | 解析为完整 task id 后查 task.md 取 `branch` | **严格报错** —— 不再回退到 ls 行号或字面分支名;提示用任务短号 / `TASK-id` / 分支名 |
48
+ | `ai sandbox exec <N>` / `ai sandbox create <N>` | 解析为完整 task id 后查 task.md 取 `branch` | **严格报错** —— 不再回退到 ls 行号或字面分支名;提示用任务短号 / `TASK-id` / 分支名 |
50
49
 
51
50
  `list --verify` 严格只读:报告 active 目录 / 注册表 两者差异,但不修改任何状态。
52
51
 
@@ -55,10 +54,10 @@
55
54
  任意 SKILL(含 alloc / resolve / release / re-alloc 四类生命周期入口)在收到
56
55
  `{task-id}` 入参后,必须按以下契约处理:
57
56
 
58
- 1. 如果 `{task-id}` 字面匹配 `^[#]?[0-9]+$`(裸数字 `N` 或 `#`-前缀 `#N`):
57
+ 1. 如果 `{task-id}` 字面匹配 `^[0-9]+$`(裸数字 `N`):
59
58
 
60
59
  ```bash
61
- if [[ "{task-id}" =~ ^[#]?[0-9]+$ ]]; then
60
+ if [[ "{task-id}" =~ ^[0-9]+$ ]]; then
62
61
  # 脚本本身已输出完整错误(含 reserved / exceeds shortIdLength capacity 等场景);
63
62
  # 调用方只需透传退出码
64
63
  task_id=$(node .agents/scripts/task-short-id.js resolve "{task-id}") || exit 1
@@ -82,7 +81,7 @@ fi
82
81
  - 短号只由显式 `alloc`(`create-task` / `import-*` / `restore-task`)分配;`resolve` / `list` / `release` 不分配,仅在执行时自动清理指向非 active 任务的 stale entry
83
82
  - 归档(complete-task / cancel-task / block-task / close-*)后注册表 entry 立即删除,短号可被新任务复用;归档后引用任务一律用完整 `TASK-…` id
84
83
 
85
- `resolve(<N|'#N'>)` 工作流:① 校验入参匹配 `^[#]?[0-9]+$` → ② 去前导零取
84
+ `resolve(<N>)` 工作流:① 校验入参匹配 `^[0-9]+$` → ② 去前导零取
86
85
  数值 `n`,按 `n` 是否 `== 0`(保留)/ `> 10^shortIdLength - 1`(超容量)/
87
86
  正常 三类处理 → ③ 正常时以 `n.padStart(shortIdLength, '0')` 作为 key 查
88
87
  注册表 `ids` → ④ 命中返回完整 task id,未命中按 `list --verify` 给出修复指引退出 1。
@@ -91,15 +90,13 @@ fi
91
90
 
92
91
  - **短号不存在**:注册表中无对应 key。可能是任务已归档(短号已释放)或输入错误。退出码 1。
93
92
  - **注册表损坏**(同一 taskId 出现多次或 JSON 无法解析):退出码 2,需人工处理。
94
- - **保留键**:解析后 `n == 0`(输入如 `0`、`#0`、`#00`)。退出码 1。
95
- - **超容量**:解析后 `n > 10^shortIdLength - 1`(如 `shortIdLength=2` 下 `100` 或 `#100`)。退出码 1。
96
- - **参数格式错误**:入参既不是 `^[#]?[0-9]+$` 也不是 `TASK-id`(如 `#abc`、`#`、`5.5`)。退出码 1。
93
+ - **保留键**:解析后 `n == 0`(输入如 `0`、`00`)。退出码 1。
94
+ - **超容量**:解析后 `n > 10^shortIdLength - 1`(如 `shortIdLength=2` 下 `100`)。退出码 1。
95
+ - **参数格式错误**:入参既不是 `^[0-9]+$` 也不是 `TASK-id`(如 `#1`、`#abc`、`#`、`5.5`)。退出码 1。
97
96
 
98
- ## 跨 TUI 引号要求
97
+ ## 跨 TUI 使用
99
98
 
100
- 裸数字 `N` 在所有 shell 与 TUI 中都安全无需引号,推荐写法:
99
+ 裸数字 `N` 在所有 shell 与 TUI 中都安全无需引号:
101
100
  `ai sandbox exec 11 'npm test'`、`/review-analysis 11`。
102
101
 
103
- `#N` / `#NN` 写法也接受;但 bash 中 `#` 是注释起始符,必须单引号:
104
- `ai sandbox exec '#03' 'npm test'`。Claude Code / Codex / Gemini CLI / OpenCode
105
- 在加引号时都能把 `#NN` 字面传递到 SKILL 的 `ARGUMENTS`。
102
+ 从下一个大版本起,原 `#NN` 写法必须迁移为 `NN`;即使引用后完整传入 CLI 也会被拒绝。