@fitlab-ai/agent-infra 0.8.5 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/README.md +6 -1
  2. package/README.zh-CN.md +5 -1
  3. package/bin/cli.ts +2 -2
  4. package/dist/bin/cli.js +2 -2
  5. package/dist/bin/internal-cli.js +103 -0
  6. package/dist/lib/decide.js +81 -90
  7. package/dist/lib/defaults.json +1 -0
  8. package/dist/lib/git/review-snapshot.js +79 -0
  9. package/dist/lib/git/workflow.js +101 -0
  10. package/dist/lib/internal/git-workflow.js +42 -0
  11. package/dist/lib/internal/platform-checks.js +119 -0
  12. package/dist/lib/internal/platform-comment.js +129 -0
  13. package/dist/lib/internal/platform-context.js +46 -0
  14. package/dist/lib/internal/platform-issue.js +142 -0
  15. package/dist/lib/internal/platform-pr.js +146 -0
  16. package/dist/lib/internal/platform-release-notes.js +53 -0
  17. package/dist/lib/internal/release-workflow.js +320 -0
  18. package/dist/lib/internal/task-artifact.js +67 -0
  19. package/dist/lib/internal/task-context.js +43 -0
  20. package/dist/lib/internal/task-event.js +70 -0
  21. package/dist/lib/internal/task-ledger.js +114 -0
  22. package/dist/lib/internal/task-lifecycle.js +58 -0
  23. package/dist/lib/internal/task-short-id.js +83 -0
  24. package/dist/lib/internal/task-snapshot.js +47 -0
  25. package/dist/lib/internal/task-verify.js +50 -0
  26. package/dist/lib/internal/task-warning.js +74 -0
  27. package/dist/lib/platform/adapters.js +14 -0
  28. package/dist/lib/platform/context.js +146 -0
  29. package/dist/lib/platform/github-client.js +124 -0
  30. package/dist/lib/platform/github-release-notes.js +96 -0
  31. package/dist/lib/platform/issue-comments.js +409 -0
  32. package/dist/lib/platform/issue-metadata.js +183 -0
  33. package/dist/lib/platform/issues.js +619 -0
  34. package/dist/lib/platform/merged-pr-equivalence.js +54 -0
  35. package/dist/lib/platform/metadata-labels.js +28 -0
  36. package/dist/lib/platform/pr-checks.js +216 -0
  37. package/dist/lib/platform/pr-summary.js +88 -0
  38. package/dist/lib/platform/pull-request-metadata.js +38 -0
  39. package/dist/lib/platform/pull-requests.js +340 -0
  40. package/dist/lib/platform/release-notes.js +143 -0
  41. package/dist/lib/platform/releases.js +82 -0
  42. package/dist/lib/platform/types.js +22 -0
  43. package/dist/lib/platform/verification-required.js +102 -0
  44. package/dist/lib/platform/verification-sync.js +1014 -0
  45. package/dist/lib/platform/verification.js +6 -0
  46. package/dist/lib/release/channels.js +31 -0
  47. package/dist/lib/release/workflow.js +32 -0
  48. package/dist/lib/render.js +3 -2
  49. package/dist/lib/run/index.js +24 -7
  50. package/dist/lib/sandbox/build-proxy.js +63 -0
  51. package/dist/lib/sandbox/capture.js +25 -3
  52. package/dist/lib/sandbox/commands/create.js +93 -31
  53. package/dist/lib/sandbox/commands/enter.js +34 -11
  54. package/dist/lib/sandbox/commands/list-running.js +10 -8
  55. package/dist/lib/sandbox/commands/rebuild.js +24 -7
  56. package/dist/lib/sandbox/commands/show.js +2 -2
  57. package/dist/lib/sandbox/commands/start.js +53 -15
  58. package/dist/lib/sandbox/image-build.js +2 -1
  59. package/dist/lib/sandbox/index.js +6 -6
  60. package/dist/lib/sandbox/mounts.js +36 -0
  61. package/dist/lib/sandbox/recovery.js +562 -0
  62. package/dist/lib/sandbox/runtimes/ai-tools.dockerfile +24 -3
  63. package/dist/lib/sandbox/runtimes/base.dockerfile +8 -1
  64. package/dist/lib/sandbox/runtimes/java17.dockerfile +8 -1
  65. package/dist/lib/sandbox/runtimes/java21.dockerfile +8 -1
  66. package/dist/lib/sandbox/runtimes/node20.dockerfile +8 -1
  67. package/dist/lib/sandbox/runtimes/node22.dockerfile +8 -1
  68. package/dist/lib/sandbox/runtimes/python3.dockerfile +8 -1
  69. package/dist/lib/sandbox/shell.js +2 -1
  70. package/dist/lib/sandbox/task-resolver.js +5 -1
  71. package/dist/lib/sandbox/tools.js +19 -0
  72. package/dist/lib/server/protocol.js +5 -5
  73. package/dist/lib/task/activity-log.js +61 -0
  74. package/dist/lib/task/artifact-lifecycle.js +427 -0
  75. package/dist/lib/task/command-options.js +30 -0
  76. package/dist/lib/task/commands/cat.js +36 -6
  77. package/dist/lib/task/commands/decisions.js +80 -46
  78. package/dist/lib/task/commands/files.js +21 -7
  79. package/dist/lib/task/commands/grep.js +55 -7
  80. package/dist/lib/task/commands/issue-body.js +33 -19
  81. package/dist/lib/task/commands/log.js +27 -70
  82. package/dist/lib/task/commands/show.js +20 -7
  83. package/dist/lib/task/commands/status.js +18 -8
  84. package/dist/lib/task/decision-intents.js +154 -0
  85. package/dist/lib/task/decision-items.js +53 -0
  86. package/dist/lib/task/events.js +318 -0
  87. package/dist/lib/task/frontmatter.js +159 -1
  88. package/dist/lib/task/implementation-inputs.js +117 -0
  89. package/dist/lib/task/index.js +12 -9
  90. package/dist/lib/task/issue-form.js +21 -6
  91. package/dist/lib/task/ledger-intents.js +185 -0
  92. package/dist/lib/task/ledger.js +65 -35
  93. package/dist/lib/task/lifecycle.js +484 -0
  94. package/dist/lib/task/resolve-ref.js +152 -32
  95. package/dist/lib/task/review-artifacts.js +101 -0
  96. package/dist/lib/task/review-fingerprint.js +55 -0
  97. package/dist/lib/task/sections.js +358 -4
  98. package/dist/lib/task/short-id.js +292 -7
  99. package/dist/lib/task/snapshot.js +95 -0
  100. package/dist/lib/task/verification-checks.js +8 -0
  101. package/dist/lib/task/verification-config.js +14 -0
  102. package/dist/lib/task/verification-engine.js +923 -0
  103. package/dist/lib/task/verification-review.js +3 -0
  104. package/dist/lib/task/verification-types.js +2 -0
  105. package/dist/lib/task/verification.js +113 -0
  106. package/dist/lib/task/workflow-warning-intents.js +131 -0
  107. package/dist/lib/task/workflow-warnings.js +10 -78
  108. package/dist/lib/task/write.js +241 -0
  109. package/lib/decide.ts +57 -97
  110. package/lib/defaults.json +1 -0
  111. package/lib/git/review-snapshot.ts +73 -0
  112. package/lib/git/workflow.ts +101 -0
  113. package/lib/internal/git-workflow.ts +37 -0
  114. package/lib/internal/platform-checks.ts +101 -0
  115. package/lib/internal/platform-comment.ts +99 -0
  116. package/lib/internal/platform-context.ts +33 -0
  117. package/lib/internal/platform-issue.ts +116 -0
  118. package/lib/internal/platform-pr.ts +119 -0
  119. package/lib/internal/platform-release-notes.ts +55 -0
  120. package/lib/internal/release-workflow.ts +288 -0
  121. package/lib/internal/task-artifact.ts +47 -0
  122. package/lib/internal/task-context.ts +35 -0
  123. package/lib/internal/task-event.ts +51 -0
  124. package/lib/internal/task-ledger.ts +86 -0
  125. package/lib/internal/task-lifecycle.ts +41 -0
  126. package/lib/internal/task-short-id.ts +55 -0
  127. package/lib/internal/task-snapshot.ts +32 -0
  128. package/lib/internal/task-verify.ts +33 -0
  129. package/lib/internal/task-warning.ts +50 -0
  130. package/lib/platform/adapters.ts +30 -0
  131. package/lib/platform/context.ts +164 -0
  132. package/lib/platform/github-client.ts +146 -0
  133. package/lib/platform/github-release-notes.ts +132 -0
  134. package/lib/platform/issue-comments.ts +479 -0
  135. package/lib/platform/issue-metadata.ts +250 -0
  136. package/lib/platform/issues.ts +693 -0
  137. package/lib/platform/merged-pr-equivalence.ts +70 -0
  138. package/lib/platform/metadata-labels.ts +33 -0
  139. package/lib/platform/pr-checks.ts +247 -0
  140. package/lib/platform/pr-summary.ts +90 -0
  141. package/lib/platform/pull-request-metadata.ts +69 -0
  142. package/lib/platform/pull-requests.ts +386 -0
  143. package/lib/platform/release-notes.ts +167 -0
  144. package/lib/platform/releases.ts +71 -0
  145. package/lib/platform/types.ts +74 -0
  146. package/lib/platform/verification-required.ts +109 -0
  147. package/{runtime/platform-adapters/platform-sync.github.js → lib/platform/verification-sync.ts} +198 -367
  148. package/lib/platform/verification.ts +11 -0
  149. package/lib/release/channels.ts +30 -0
  150. package/lib/release/workflow.ts +31 -0
  151. package/lib/render.ts +3 -2
  152. package/lib/run/index.ts +25 -7
  153. package/lib/sandbox/build-proxy.ts +94 -0
  154. package/lib/sandbox/capture.ts +29 -3
  155. package/lib/sandbox/commands/create.ts +120 -36
  156. package/lib/sandbox/commands/enter.ts +38 -11
  157. package/lib/sandbox/commands/list-running.ts +10 -8
  158. package/lib/sandbox/commands/rebuild.ts +29 -7
  159. package/lib/sandbox/commands/show.ts +2 -2
  160. package/lib/sandbox/commands/start.ts +50 -16
  161. package/lib/sandbox/image-build.ts +4 -1
  162. package/lib/sandbox/index.ts +6 -6
  163. package/lib/sandbox/mounts.ts +55 -0
  164. package/lib/sandbox/recovery.ts +828 -0
  165. package/lib/sandbox/runtimes/ai-tools.dockerfile +24 -3
  166. package/lib/sandbox/runtimes/base.dockerfile +8 -1
  167. package/lib/sandbox/runtimes/java17.dockerfile +8 -1
  168. package/lib/sandbox/runtimes/java21.dockerfile +8 -1
  169. package/lib/sandbox/runtimes/node20.dockerfile +8 -1
  170. package/lib/sandbox/runtimes/node22.dockerfile +8 -1
  171. package/lib/sandbox/runtimes/python3.dockerfile +8 -1
  172. package/lib/sandbox/shell.ts +3 -1
  173. package/lib/sandbox/task-resolver.ts +5 -1
  174. package/lib/sandbox/tools.ts +31 -0
  175. package/lib/server/protocol.ts +5 -5
  176. package/lib/task/activity-log.ts +62 -0
  177. package/lib/task/artifact-lifecycle.ts +484 -0
  178. package/lib/task/command-options.ts +32 -0
  179. package/lib/task/commands/cat.ts +22 -9
  180. package/lib/task/commands/decisions.ts +49 -47
  181. package/lib/task/commands/files.ts +14 -6
  182. package/lib/task/commands/grep.ts +34 -7
  183. package/lib/task/commands/issue-body.ts +26 -21
  184. package/lib/task/commands/log.ts +17 -70
  185. package/lib/task/commands/show.ts +14 -6
  186. package/lib/task/commands/status.ts +17 -7
  187. package/lib/task/decision-intents.ts +163 -0
  188. package/lib/task/decision-items.ts +64 -0
  189. package/lib/task/events.ts +320 -0
  190. package/lib/task/frontmatter.ts +202 -2
  191. package/lib/task/implementation-inputs.ts +137 -0
  192. package/lib/task/index.ts +12 -9
  193. package/lib/task/issue-form.ts +24 -6
  194. package/lib/task/ledger-intents.ts +201 -0
  195. package/lib/task/ledger.ts +77 -31
  196. package/lib/task/lifecycle.ts +458 -0
  197. package/lib/task/resolve-ref.ts +197 -36
  198. package/{templates/.agents/scripts/lib/review-artifacts.js → lib/task/review-artifacts.ts} +11 -12
  199. package/{templates/.agents/scripts/lib/post-review-commit.js → lib/task/review-fingerprint.ts} +26 -12
  200. package/lib/task/sections.ts +486 -4
  201. package/lib/task/short-id.ts +403 -9
  202. package/lib/task/snapshot.ts +143 -0
  203. package/lib/task/verification-checks.ts +9 -0
  204. package/lib/task/verification-config.ts +20 -0
  205. package/{templates/.agents/scripts/validate-artifact.js → lib/task/verification-engine.ts} +230 -421
  206. package/lib/task/verification-review.ts +10 -0
  207. package/lib/task/verification-types.ts +29 -0
  208. package/lib/task/verification.ts +156 -0
  209. package/lib/task/workflow-warning-intents.ts +142 -0
  210. package/lib/task/workflow-warnings.ts +10 -78
  211. package/lib/task/write.ts +468 -0
  212. package/package.json +4 -2
  213. package/templates/.agents/README.en.md +4 -3
  214. package/templates/.agents/README.zh-CN.md +4 -3
  215. package/templates/.agents/rules/README.en.md +6 -5
  216. package/templates/.agents/rules/README.zh-CN.md +6 -5
  217. package/templates/.agents/rules/create-issue.en.md +1 -1
  218. package/templates/.agents/rules/create-issue.github.en.md +5 -184
  219. package/templates/.agents/rules/create-issue.github.zh-CN.md +12 -178
  220. package/templates/.agents/rules/create-issue.zh-CN.md +1 -1
  221. package/templates/.agents/rules/human-decision-context.en.md +36 -0
  222. package/templates/.agents/rules/human-decision-context.zh-CN.md +36 -0
  223. package/templates/.agents/rules/issue-fields.github.en.md +4 -148
  224. package/templates/.agents/rules/issue-fields.github.zh-CN.md +9 -144
  225. package/templates/.agents/rules/issue-pr-commands.en.md +43 -3
  226. package/templates/.agents/rules/issue-pr-commands.github.en.md +15 -220
  227. package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +23 -213
  228. package/templates/.agents/rules/issue-pr-commands.zh-CN.md +45 -3
  229. package/templates/.agents/rules/issue-sync.en.md +1 -1
  230. package/templates/.agents/rules/issue-sync.github.en.md +14 -301
  231. package/templates/.agents/rules/issue-sync.github.zh-CN.md +36 -287
  232. package/templates/.agents/rules/issue-sync.zh-CN.md +1 -1
  233. package/templates/.agents/rules/milestone-inference.en.md +1 -1
  234. package/templates/.agents/rules/milestone-inference.github.en.md +7 -119
  235. package/templates/.agents/rules/milestone-inference.github.zh-CN.md +8 -108
  236. package/templates/.agents/rules/milestone-inference.zh-CN.md +1 -1
  237. package/templates/.agents/rules/next-step-output.en.md +12 -11
  238. package/templates/.agents/rules/next-step-output.zh-CN.md +12 -11
  239. package/templates/.agents/rules/no-mid-flow-questions.en.md +3 -3
  240. package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +3 -3
  241. package/templates/.agents/rules/pr-checks-commands.en.md +16 -3
  242. package/templates/.agents/rules/pr-checks-commands.github.en.md +10 -54
  243. package/templates/.agents/rules/pr-checks-commands.github.zh-CN.md +19 -47
  244. package/templates/.agents/rules/pr-checks-commands.zh-CN.md +30 -3
  245. package/templates/.agents/rules/pr-sync.en.md +30 -3
  246. package/templates/.agents/rules/pr-sync.github.en.md +12 -115
  247. package/templates/.agents/rules/pr-sync.github.zh-CN.md +26 -104
  248. package/templates/.agents/rules/pr-sync.zh-CN.md +43 -3
  249. package/templates/.agents/rules/release-commands.en.md +2 -2
  250. package/templates/.agents/rules/release-commands.github.en.md +10 -40
  251. package/templates/.agents/rules/release-commands.github.zh-CN.md +9 -39
  252. package/templates/.agents/rules/release-commands.zh-CN.md +2 -2
  253. package/templates/.agents/rules/review-handshake.en.md +10 -6
  254. package/templates/.agents/rules/review-handshake.zh-CN.md +10 -6
  255. package/templates/.agents/rules/task-management.en.md +11 -2
  256. package/templates/.agents/rules/task-management.zh-CN.md +11 -3
  257. package/templates/.agents/rules/task-short-id.en.md +25 -29
  258. package/templates/.agents/rules/task-short-id.zh-CN.md +20 -23
  259. package/templates/.agents/rules/testing-discipline.en.md +20 -2
  260. package/templates/.agents/rules/testing-discipline.zh-CN.md +20 -2
  261. package/templates/.agents/scripts/lib/agent-infra-package.js +1 -9
  262. package/templates/.agents/scripts/task-short-id.js +71 -533
  263. package/templates/.agents/skills/analyze-task/SKILL.en.md +26 -56
  264. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +30 -60
  265. package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -3
  266. package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -3
  267. package/templates/.agents/skills/block-task/SKILL.en.md +21 -47
  268. package/templates/.agents/skills/block-task/SKILL.zh-CN.md +23 -47
  269. package/templates/.agents/skills/block-task/config/verify.json +1 -2
  270. package/templates/.agents/skills/cancel-task/SKILL.en.md +16 -45
  271. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +16 -45
  272. package/templates/.agents/skills/cancel-task/config/verify.json +1 -2
  273. package/templates/.agents/skills/check-task/SKILL.en.md +6 -3
  274. package/templates/.agents/skills/check-task/SKILL.zh-CN.md +6 -3
  275. package/templates/.agents/skills/close-codescan/SKILL.en.md +6 -24
  276. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +6 -24
  277. package/templates/.agents/skills/close-dependabot/SKILL.en.md +6 -24
  278. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +6 -24
  279. package/templates/.agents/skills/code-task/SKILL.en.md +22 -35
  280. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +28 -44
  281. package/templates/.agents/skills/code-task/config/verify.en.json +3 -3
  282. package/templates/.agents/skills/code-task/config/verify.zh-CN.json +3 -3
  283. package/templates/.agents/skills/code-task/reference/dual-mode.en.md +13 -9
  284. package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +13 -9
  285. package/templates/.agents/skills/code-task/reference/fix-mode.en.md +1 -1
  286. package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +1 -1
  287. package/templates/.agents/skills/code-task/reference/report-template.en.md +11 -1
  288. package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +11 -1
  289. package/templates/.agents/skills/commit/SKILL.en.md +13 -11
  290. package/templates/.agents/skills/commit/SKILL.zh-CN.md +13 -11
  291. package/templates/.agents/skills/commit/config/verify.json +1 -2
  292. package/templates/.agents/skills/commit/reference/commit-message.en.md +1 -11
  293. package/templates/.agents/skills/commit/reference/commit-message.zh-CN.md +1 -11
  294. package/templates/.agents/skills/commit/reference/issue-metadata-sync.en.md +4 -8
  295. package/templates/.agents/skills/commit/reference/issue-metadata-sync.zh-CN.md +4 -8
  296. package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +6 -18
  297. package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +5 -17
  298. package/templates/.agents/skills/commit/reference/task-status-update.en.md +13 -0
  299. package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +13 -0
  300. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +13 -36
  301. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +13 -36
  302. package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +1 -3
  303. package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +1 -3
  304. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +10 -54
  305. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +10 -79
  306. package/templates/.agents/skills/complete-task/SKILL.en.md +59 -63
  307. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +59 -63
  308. package/templates/.agents/skills/complete-task/config/verify.en.json +10 -7
  309. package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +10 -7
  310. package/templates/.agents/skills/create-pr/SKILL.en.md +19 -44
  311. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +19 -43
  312. package/templates/.agents/skills/create-pr/config/verify.json +1 -2
  313. package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +8 -12
  314. package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +7 -11
  315. package/templates/.agents/skills/create-release-note/SKILL.en.md +17 -38
  316. package/templates/.agents/skills/create-release-note/SKILL.zh-CN.md +16 -37
  317. package/templates/.agents/skills/create-task/SKILL.en.md +16 -13
  318. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +16 -13
  319. package/templates/.agents/skills/create-task/config/verify.json +1 -2
  320. package/templates/.agents/skills/create-task/reference/context-capture.en.md +29 -0
  321. package/templates/.agents/skills/create-task/reference/context-capture.zh-CN.md +29 -0
  322. package/templates/.agents/skills/import-codescan/SKILL.en.md +2 -2
  323. package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +2 -2
  324. package/templates/.agents/skills/import-codescan/config/verify.json +1 -2
  325. package/templates/.agents/skills/import-dependabot/SKILL.en.md +2 -2
  326. package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +2 -2
  327. package/templates/.agents/skills/import-dependabot/config/verify.json +1 -2
  328. package/templates/.agents/skills/import-issue/SKILL.en.md +9 -13
  329. package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +10 -14
  330. package/templates/.agents/skills/import-issue/config/verify.json +1 -2
  331. package/templates/.agents/skills/plan-task/SKILL.en.md +17 -42
  332. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +22 -49
  333. package/templates/.agents/skills/plan-task/config/verify.en.json +1 -3
  334. package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +1 -3
  335. package/templates/.agents/skills/post-release/SKILL.en.md +11 -81
  336. package/templates/.agents/skills/post-release/SKILL.zh-CN.md +8 -78
  337. package/templates/.agents/skills/refine-title/SKILL.en.md +1 -1
  338. package/templates/.agents/skills/refine-title/SKILL.zh-CN.md +1 -1
  339. package/templates/.agents/skills/release/SKILL.en.md +16 -163
  340. package/templates/.agents/skills/release/SKILL.zh-CN.md +15 -162
  341. package/templates/.agents/skills/restore-task/SKILL.en.md +11 -29
  342. package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +11 -29
  343. package/templates/.agents/skills/restore-task/config/verify.json +1 -2
  344. package/templates/.agents/skills/review-analysis/SKILL.en.md +13 -25
  345. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +13 -33
  346. package/templates/.agents/skills/review-analysis/config/verify.en.json +3 -4
  347. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +3 -4
  348. package/templates/.agents/skills/review-analysis/reference/output-templates.en.md +9 -12
  349. package/templates/.agents/skills/review-analysis/reference/output-templates.zh-CN.md +9 -12
  350. package/templates/.agents/skills/review-analysis/reference/report-template.en.md +9 -2
  351. package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +9 -2
  352. package/templates/.agents/skills/review-analysis/reference/review-criteria.en.md +7 -0
  353. package/templates/.agents/skills/review-analysis/reference/review-criteria.zh-CN.md +7 -0
  354. package/templates/.agents/skills/review-code/SKILL.en.md +22 -36
  355. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +23 -41
  356. package/templates/.agents/skills/review-code/config/verify.en.json +3 -4
  357. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +3 -4
  358. package/templates/.agents/skills/review-code/reference/output-templates.en.md +56 -18
  359. package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +56 -18
  360. package/templates/.agents/skills/review-code/reference/report-template.en.md +11 -4
  361. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +11 -4
  362. package/templates/.agents/skills/review-code/reference/review-criteria.en.md +7 -0
  363. package/templates/.agents/skills/review-code/reference/review-criteria.zh-CN.md +7 -0
  364. package/templates/.agents/skills/review-plan/SKILL.en.md +13 -25
  365. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +13 -33
  366. package/templates/.agents/skills/review-plan/config/verify.en.json +3 -4
  367. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +3 -4
  368. package/templates/.agents/skills/review-plan/reference/output-templates.en.md +9 -12
  369. package/templates/.agents/skills/review-plan/reference/output-templates.zh-CN.md +9 -12
  370. package/templates/.agents/skills/review-plan/reference/report-template.en.md +9 -2
  371. package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +9 -2
  372. package/templates/.agents/skills/review-plan/reference/review-criteria.en.md +7 -0
  373. package/templates/.agents/skills/review-plan/reference/review-criteria.zh-CN.md +7 -0
  374. package/templates/.agents/skills/update-agent-infra/SKILL.en.md +1 -2
  375. package/templates/.agents/skills/update-agent-infra/SKILL.zh-CN.md +1 -2
  376. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +3 -15
  377. package/templates/.agents/skills/watch-pr/SKILL.en.md +24 -14
  378. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +25 -15
  379. package/templates/.agents/skills/watch-pr/config/verify.json +1 -2
  380. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +2 -2
  381. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +2 -2
  382. package/templates/.agents/templates/task.en.md +24 -1
  383. package/templates/.agents/templates/task.zh-CN.md +24 -1
  384. package/templates/.claude/commands/analyze-task.en.md +1 -1
  385. package/templates/.claude/commands/analyze-task.zh-CN.md +1 -1
  386. package/templates/.claude/commands/block-task.en.md +1 -1
  387. package/templates/.claude/commands/block-task.zh-CN.md +1 -1
  388. package/templates/.claude/commands/cancel-task.en.md +1 -1
  389. package/templates/.claude/commands/cancel-task.zh-CN.md +1 -1
  390. package/templates/.claude/commands/check-task.en.md +1 -1
  391. package/templates/.claude/commands/check-task.zh-CN.md +1 -1
  392. package/templates/.claude/commands/code-task.en.md +1 -1
  393. package/templates/.claude/commands/code-task.zh-CN.md +1 -1
  394. package/templates/.claude/commands/commit.en.md +1 -0
  395. package/templates/.claude/commands/commit.zh-CN.md +1 -0
  396. package/templates/.claude/commands/complete-manual-validation.en.md +1 -1
  397. package/templates/.claude/commands/complete-manual-validation.zh-CN.md +1 -1
  398. package/templates/.claude/commands/complete-task.en.md +1 -1
  399. package/templates/.claude/commands/complete-task.zh-CN.md +1 -1
  400. package/templates/.claude/commands/create-pr.en.md +1 -1
  401. package/templates/.claude/commands/create-pr.zh-CN.md +1 -1
  402. package/templates/.claude/commands/plan-task.en.md +1 -1
  403. package/templates/.claude/commands/plan-task.zh-CN.md +1 -1
  404. package/templates/.claude/commands/review-analysis.en.md +1 -1
  405. package/templates/.claude/commands/review-analysis.zh-CN.md +1 -1
  406. package/templates/.claude/commands/review-code.en.md +1 -1
  407. package/templates/.claude/commands/review-code.zh-CN.md +1 -1
  408. package/templates/.claude/commands/review-plan.en.md +1 -1
  409. package/templates/.claude/commands/review-plan.zh-CN.md +1 -1
  410. package/templates/.claude/commands/watch-pr.en.md +1 -1
  411. package/templates/.claude/commands/watch-pr.zh-CN.md +1 -1
  412. package/templates/.gemini/commands/_project_/analyze-task.en.toml +2 -0
  413. package/templates/.gemini/commands/_project_/analyze-task.zh-CN.toml +2 -0
  414. package/templates/.gemini/commands/_project_/block-task.en.toml +2 -0
  415. package/templates/.gemini/commands/_project_/block-task.zh-CN.toml +2 -0
  416. package/templates/.gemini/commands/_project_/cancel-task.en.toml +2 -0
  417. package/templates/.gemini/commands/_project_/cancel-task.zh-CN.toml +2 -0
  418. package/templates/.gemini/commands/_project_/check-task.en.toml +2 -0
  419. package/templates/.gemini/commands/_project_/check-task.zh-CN.toml +2 -0
  420. package/templates/.gemini/commands/_project_/code-task.en.toml +2 -0
  421. package/templates/.gemini/commands/_project_/code-task.zh-CN.toml +2 -0
  422. package/templates/.gemini/commands/_project_/commit.en.toml +4 -0
  423. package/templates/.gemini/commands/_project_/commit.zh-CN.toml +4 -0
  424. package/templates/.gemini/commands/_project_/complete-manual-validation.en.toml +2 -0
  425. package/templates/.gemini/commands/_project_/complete-manual-validation.zh-CN.toml +2 -0
  426. package/templates/.gemini/commands/_project_/complete-task.en.toml +2 -0
  427. package/templates/.gemini/commands/_project_/complete-task.zh-CN.toml +2 -0
  428. package/templates/.gemini/commands/_project_/create-pr.en.toml +2 -0
  429. package/templates/.gemini/commands/_project_/create-pr.zh-CN.toml +2 -0
  430. package/templates/.gemini/commands/_project_/plan-task.en.toml +2 -0
  431. package/templates/.gemini/commands/_project_/plan-task.zh-CN.toml +2 -0
  432. package/templates/.gemini/commands/_project_/review-analysis.en.toml +2 -0
  433. package/templates/.gemini/commands/_project_/review-analysis.zh-CN.toml +2 -0
  434. package/templates/.gemini/commands/_project_/review-code.en.toml +2 -0
  435. package/templates/.gemini/commands/_project_/review-code.zh-CN.toml +2 -0
  436. package/templates/.gemini/commands/_project_/review-plan.en.toml +2 -0
  437. package/templates/.gemini/commands/_project_/review-plan.zh-CN.toml +2 -0
  438. package/templates/.gemini/commands/_project_/watch-pr.en.toml +2 -0
  439. package/templates/.gemini/commands/_project_/watch-pr.zh-CN.toml +2 -0
  440. package/templates/.git-hooks/check-large-files.cjs +92 -0
  441. package/templates/.git-hooks/check-version-format.sh +5 -1
  442. package/templates/.git-hooks/pre-commit +1 -0
  443. package/templates/.opencode/commands/analyze-task.en.md +1 -1
  444. package/templates/.opencode/commands/analyze-task.zh-CN.md +1 -1
  445. package/templates/.opencode/commands/check-task.en.md +1 -1
  446. package/templates/.opencode/commands/check-task.zh-CN.md +1 -1
  447. package/templates/.opencode/commands/code-task.en.md +1 -1
  448. package/templates/.opencode/commands/code-task.zh-CN.md +1 -1
  449. package/templates/.opencode/commands/commit.en.md +2 -0
  450. package/templates/.opencode/commands/commit.zh-CN.md +2 -0
  451. package/templates/.opencode/commands/complete-task.en.md +1 -1
  452. package/templates/.opencode/commands/complete-task.zh-CN.md +1 -1
  453. package/templates/.opencode/commands/plan-task.en.md +1 -1
  454. package/templates/.opencode/commands/plan-task.zh-CN.md +1 -1
  455. package/templates/.opencode/commands/review-analysis.en.md +1 -1
  456. package/templates/.opencode/commands/review-analysis.zh-CN.md +1 -1
  457. package/templates/.opencode/commands/review-code.en.md +1 -1
  458. package/templates/.opencode/commands/review-code.zh-CN.md +1 -1
  459. package/templates/.opencode/commands/review-plan.en.md +1 -1
  460. package/templates/.opencode/commands/review-plan.zh-CN.md +1 -1
  461. package/templates/.agents/scripts/platform-adapters/platform-sync.github.js +0 -40
  462. package/templates/.agents/scripts/platform-adapters/platform-sync.js +0 -13
  463. package/templates/.agents/scripts/review-diff-fingerprint.js +0 -170
  464. package/templates/.agents/scripts/workflow-warnings.js +0 -290
  465. package/templates/.agents/skills/code-task/scripts/detect-mode.js +0 -257
  466. package/templates/.agents/skills/release/scripts/manage-milestones.github.sh +0 -80
  467. package/templates/.agents/skills/release/scripts/manage-milestones.sh +0 -6
@@ -11,7 +11,7 @@ This file defines four **independent** rules for a skill's "notify-user / Next s
11
11
 
12
12
  | Placeholder | Meaning | Rendered form |
13
13
  |-------------|---------|---------------|
14
- | `{task-ref}` | Current task **short id** | `#`-prefixed, e.g. `#15`; falls back to the full `TASK-id` when unavailable |
14
+ | `{task-ref}` | Current task **short id** | Zero-padded bare digits, e.g. `15`; falls back to the full `TASK-id` when unavailable |
15
15
  | `{task-id}` | Current task **full id** | `TASK-YYYYMMDD-HHMMSS` |
16
16
 
17
17
  ## Scope
@@ -24,7 +24,7 @@ This file defines four **independent** rules for a skill's "notify-user / Next s
24
24
 
25
25
  The single source of truth for short ids is the registry `.agents/workspace/active/.short-ids.json` (via `task-short-id.js`). **Never** read the `short_id` field from task.md frontmatter (that field is not authoritative).
26
26
 
27
- Once the full `$task_id` is resolved, use the snippet below to look up the short id; it returns `#NN` on hit and falls back to the full `TASK-id` on miss:
27
+ Once the full `$task_id` is resolved, use the snippet below to look up the short id; it returns bare `NN` on hit and falls back to the full `TASK-id` on miss:
28
28
 
29
29
  ```bash
30
30
  task_ref=$(node -e '
@@ -33,9 +33,9 @@ const out=cp.execSync("node .agents/scripts/task-short-id.js list",{encoding:"ut
33
33
  const ids=(JSON.parse(out).ids)||{};
34
34
  const full=process.argv[1];
35
35
  const hit=Object.entries(ids).find(([,v])=>v===full);
36
- process.stdout.write(hit?("#"+hit[0]):full);
36
+ process.stdout.write(hit?hit[0]:full);
37
37
  ' "$task_id")
38
- # Example: $task_id=TASK-20260613-225809 -> task_ref=#15
38
+ # Example: $task_id=TASK-20260613-225809 -> task_ref=15
39
39
  ```
40
40
 
41
41
  ## Fallback conditions
@@ -47,9 +47,9 @@ process.stdout.write(hit?("#"+hit[0]):full);
47
47
 
48
48
  `restore-task` re-allocates a short id when restoring a task (possibly different from before); the snippet picks up the new short id.
49
49
 
50
- ## `#` prefix and shell quoting
50
+ ## Bare digits and shell safety
51
51
 
52
- Short ids are always rendered with a `#` prefix as `#NN`, matching how task.md frontmatter renders `short_id`. `#` starts a comment in bash, so pasting example commands depends on the TUI (both the bare numeric `NN` and `#NN` are accepted by `task-short-id.js resolve`).
52
+ Short ids are always rendered as zero-padded bare digits `NN`. The removed `#NN` syntax must neither be generated nor accepted, avoiding bash comment interpretation.
53
53
 
54
54
  ## Agent output trailing line (Completed at)
55
55
 
@@ -83,7 +83,7 @@ This section is a **third standalone rule, co-equal with the two above**, used o
83
83
  `{h}` has the same meaning as the count line in each review skill's `reference/output-templates.md`: the number of rows in task.md `## 审查分歧账本` (Review Disagreement Ledger) for **this stage** (`stage ∈ {analysis|plan|code}`) whose `status = needs-human-decision` — **pending items only, excluding rows already `human-decided`**.
84
84
 
85
85
  - **`{h} = 0`**: do not emit this block; render "Next steps" exactly as the selected output-templates scenario.
86
- - **`{h} > 0`**: insert the block below **before** the selected scenario's "Next steps - <stage>" commands; the next-stage commands are still listed after the block.
86
+ - **`{h} > 0`**: insert the block below **before** the selected scenario's "Next steps - <stage>" commands. This round may list only current-artifact revision and re-review commands, never cross-stage commands.
87
87
 
88
88
  ```text
89
89
  ⚠️ Pending human decisions ({h}) — please rule on each before continuing to the next stage:
@@ -93,13 +93,14 @@ This section is a **third standalone rule, co-equal with the two above**, used o
93
93
 
94
94
  View details:
95
95
  - All pending decisions: ai task decisions {task-ref}
96
- - A single item's full background/options/impact/recommendation: ai task decisions {task-ref} <ordinal|HD-id>
96
+ - A single item's full background/options/impact/recommendation: ai task decisions {task-ref} <ordinal|ledger-id>
97
97
 
98
98
  To resolve:
99
- 1. In the task.md `## 人工裁决` section, record your ruling and rationale for each item above.
100
- 2. Flip the status of the matching row in `## 审查分歧账本` from `needs-human-decision` to `human-decided`.
99
+ - ai decide {task-ref} <ordinal|ledger-id> <decision and rationale>
101
100
 
102
- Note: until all those rows are flipped to `human-decided`, running the next-stage command directly will be blocked by gates such as complete-task (`needs-human-decision` is non-terminal). The next-stage commands are still listed below for use after the decisions are made.
101
+ This command atomically creates the `HDR-N` ruling record, flips the target ledger row to `human-decided`, and updates evidence and the activity log; do not manually edit only part of the transaction.
102
+
103
+ Note: until all those rows are flipped to `human-decided`, the stage gate blocks advancement (`needs-human-decision` is non-terminal). After the decisions, rerun the current review and let its new `stage-status` decide whether next-stage commands may be shown.
103
104
  ```
104
105
 
105
106
  Field values: `{ledger-id}` / `{stage}` / `{severity}` / `{evidence}` come from the same-named columns of the matching `## 审查分歧账本` row; `{summary}` comes from the artifact anchor referenced by `{evidence}` (e.g. the decision title at `plan.md#HD-1`), falling back to a one-line summary of the finding when no anchor title exists.
@@ -11,7 +11,7 @@
11
11
 
12
12
  | 占位符 | 含义 | 渲染形态 |
13
13
  |--------|------|----------|
14
- | `{task-ref}` | 当前任务**短号** | 带 `#` 前缀,如 `#15`;取不到时回退完整 `TASK-id` |
14
+ | `{task-ref}` | 当前任务**短号** | 零填充裸数字,如 `15`;取不到时回退完整 `TASK-id` |
15
15
  | `{task-id}` | 当前任务**完整 ID** | `TASK-YYYYMMDD-HHMMSS` |
16
16
 
17
17
  ## 适用范围
@@ -24,7 +24,7 @@
24
24
 
25
25
  短号唯一真源是注册表 `.agents/workspace/active/.short-ids.json`(经 `task-short-id.js`)。**禁止**读取 task.md frontmatter 的 `short_id` 字段(该字段不可信)。
26
26
 
27
- 在已解析出完整 `$task_id` 后,用以下片段反查短号;命中返回 `#NN`,未命中自动回退完整 `TASK-id`:
27
+ 在已解析出完整 `$task_id` 后,用以下片段反查短号;命中返回裸数字 `NN`,未命中自动回退完整 `TASK-id`:
28
28
 
29
29
  ```bash
30
30
  task_ref=$(node -e '
@@ -33,9 +33,9 @@ const out=cp.execSync("node .agents/scripts/task-short-id.js list",{encoding:"ut
33
33
  const ids=(JSON.parse(out).ids)||{};
34
34
  const full=process.argv[1];
35
35
  const hit=Object.entries(ids).find(([,v])=>v===full);
36
- process.stdout.write(hit?("#"+hit[0]):full);
36
+ process.stdout.write(hit?hit[0]:full);
37
37
  ' "$task_id")
38
- # 示例:$task_id=TASK-20260613-225809 -> task_ref=#15
38
+ # 示例:$task_id=TASK-20260613-225809 -> task_ref=15
39
39
  ```
40
40
 
41
41
  ## 回退条件
@@ -47,9 +47,9 @@ process.stdout.write(hit?("#"+hit[0]):full);
47
47
 
48
48
  `restore-task` 恢复任务时会重新分配短号(可能与历史不同),片段会取到新短号。
49
49
 
50
- ## `#` 前缀与 shell 引用
50
+ ## 裸数字与 shell 安全
51
51
 
52
- 短号统一渲染为带 `#` 前缀的 `#NN`,与 task.md frontmatter 的 `short_id` 渲染一致。`#` 在 bash 中是注释起始符,示例命令若直接粘贴需视 TUI 而定(裸数字 `NN` 与 `#NN` 都被 `task-short-id.js resolve` 接受)。
52
+ 短号统一渲染为零填充裸数字 `NN`。已移除的 `#NN` 语法不得生成或接受,避免 bash 将其解释为注释。
53
53
 
54
54
  ## Agent 输出收尾行(Completed at)
55
55
 
@@ -83,7 +83,7 @@ Completed at: YYYY-MM-DD HH:mm:ss
83
83
  `{h}` 含义与各 review 技能 `reference/output-templates.md` 计数行一致:task.md `## 审查分歧账本` 中**本阶段**(`stage ∈ {analysis|plan|code}`)`status = needs-human-decision` 的行数——**只含待裁决项,不含已 `human-decided`**。
84
84
 
85
85
  - **`{h} = 0`**:不输出本块,「下一步」按 output-templates 选定场景原样渲染。
86
- - **`{h} > 0`**:在选定场景的「下一步 - <阶段>」命令**之前**插入下面的块;下一阶段命令仍照常列在块之后。
86
+ - **`{h} > 0`**:在选定场景的「下一步 - <阶段>」命令**之前**插入下面的块;本轮只能列当前产物的修订与复审路径,不得列跨阶段命令。
87
87
 
88
88
  ```text
89
89
  ⚠️ 待人工裁决({h} 项)—— 请先逐项裁决,再继续下一阶段:
@@ -93,13 +93,14 @@ Completed at: YYYY-MM-DD HH:mm:ss
93
93
 
94
94
  查看详情:
95
95
  - 全部待裁决项:ai task decisions {task-ref}
96
- - 单项完整背景/选项/影响/建议:ai task decisions {task-ref} <序号|HD-id>
96
+ - 单项完整背景/选项/影响/建议:ai task decisions {task-ref} <序号|账本ID>
97
97
 
98
98
  完成裁决:
99
- 1. 在 task.md `## 人工裁决` 段,逐项记录你对上述裁决项的裁定与理由。
100
- 2. 把 `## 审查分歧账本` 中对应行的 status 由 `needs-human-decision` 翻为 `human-decided`。
99
+ - ai decide {task-ref} <序号|账本ID> <裁决内容与理由>
101
100
 
102
- 说明:在上述行全部翻为 `human-decided` 之前,直接执行下一阶段命令会被 complete-task 等 gate 拦截(`needs-human-decision` 为非终态)。下一阶段命令仍列在下方,供裁决完成后使用。
101
+ 该命令原子写入 `HDR-N` 裁定记录、把目标账本行翻为 `human-decided`、更新 evidence 与活动日志;不要手工只修改其中一部分。
102
+
103
+ 说明:在上述行全部翻为 `human-decided` 之前,阶段 gate 会拦截推进(`needs-human-decision` 为非终态);裁决完成后重新执行当前 review,由新的 `stage-status` 结果决定是否展示下一阶段命令。
103
104
  ```
104
105
 
105
106
  字段取值:`{ledger-id}` / `{stage}` / `{severity}` / `{evidence}` 直接取自 `## 审查分歧账本` 对应行的同名列;`{摘要}` 取自 `{evidence}` 指向的产物锚点条目(如 `plan.md#HD-1` 的决策标题),无锚点标题时用该 finding 的一句话概述。
@@ -57,8 +57,8 @@ For every SKILL execution context not covered by any exemption above, the defaul
57
57
 
58
58
  When an open question is a key design decision that needs human judgment, the executor must:
59
59
 
60
- 1. Write the decision's **detail block** (background / options / impact / recommendation) into the artifact's `## 人工裁决待办` (Pending Human Decisions) section, with a heading like `### HD-N:<title> [needs-human-decision]`; ordinary assumptions / open questions still go under `## Assumptions` / `## Open Questions` (`## 假设` / `## 未决问题`), and `## Open Questions` may keep a one-line pointer to the matching `### HD-N`.
61
- 2. Upsert the matching `HD-` row in task.md `## Review Disagreement Ledger` according to `.agents/rules/review-handshake.md`, with `evidence` pointing to the stable anchor `<artifact>#HD-N`. The `HD-N` number is **globally unique** (scan existing `HD-(\d+)` in the ledger and take max+1, monotonically increasing across analysis / plan / code, never reused); see review-handshake.md for the allocation rule.
60
+ 1. 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]`; ordinary assumptions / open questions still go under `## Assumptions` / `## Open Questions` (`## 假设` / `## 未决问题`), and `## Open Questions` may keep a one-line pointer to the matching `### HD-N`.
61
+ 2. Run `agent-infra-internal task-ledger {task-id} decision-next-id` to obtain the globally unique `HD-N`; after writing the detail block, run `decision-upsert --id {HD-N} --stage {stage} --artifact {artifact}`. The core writes the task.md ledger row and validates its evidence anchor; the model must not scan ids or assemble table rows.
62
62
 
63
63
  Use these checks together:
64
64
 
@@ -76,7 +76,7 @@ A mandatory human review checkpoint means:
76
76
  - Stop after producing the artifact: once the skill finishes an artifact such as `plan.md`, end the current invocation and wait for the user to explicitly trigger the next skill command
77
77
  - Do not pause mid-process to ask for input: do not insert interruptions such as "Do you prefer option A or B?" between execution steps
78
78
 
79
- If a key decision needs human judgment during execution, follow the "Key Design Decision Marking And Ledgering" rule above: write the detail block into the artifact's `## 人工裁决待办` (Pending Human Decisions) section as `### HD-N` and upsert the `HD-` ledger row, for the user to address at the review checkpoint; ordinary open questions still go to `## Open Questions` / `未决问题`.
79
+ If a key decision needs human judgment during execution, follow the rule above and register the detail identity through the structured `decision-next-id` / `decision-upsert` commands for the user to address at the review checkpoint; ordinary open questions still go to `## Open Questions` / `未决问题`.
80
80
 
81
81
  ## Anchor Location
82
82
 
@@ -57,8 +57,8 @@
57
57
 
58
58
  当未决问题属于需要人工裁定的关键设计决策时,执行方必须:
59
59
 
60
- 1. 把该决策的**详情块**(背景 / 选项 / 影响 / 推荐)写入产物的 `## 人工裁决待办` 段,标题形如 `### HD-N:<标题> [needs-human-decision]`;普通假设 / 未决问题仍分别写 `## 假设` / `## 未决问题`(`## Assumptions` / `## Open Questions`),`## 未决问题` 可保留一行指针指向对应 `### HD-N`。
61
- 2. 按 `.agents/rules/review-handshake.md` 在 task.md `## 审查分歧账本` upsert 对应 `HD-` 行,evidence 指向稳定锚点 `<artifact>#HD-N`。`HD-N` 编号**全局唯一**(扫描账本已有 `HD-(\d+)` 取 max+1,跨 analysis / plan / code 单调递增、禁止复用),分配规则详见 review-handshake.md。
60
+ 1. 按 `.agents/rules/human-decision-context.md` 写出自足的详情块,放入产物的 `## 人工裁决待办` 段,标题形如 `### HD-N:<标题> [needs-human-decision]`;普通假设 / 未决问题仍分别写 `## 假设` / `## 未决问题`(`## Assumptions` / `## Open Questions`),`## 未决问题` 可保留一行指针指向对应 `### HD-N`。
61
+ 2. 先调用 `agent-infra-internal task-ledger {task-id} decision-next-id` 取得全局唯一 `HD-N`,写出详情块后调用 `decision-upsert --id {HD-N} --stage {stage} --artifact {artifact}`;由核心写入 task.md 账本并校验证据锚点,模型不得扫描编号或拼表格行。
62
62
 
63
63
  判定时同时使用以下检查:
64
64
 
@@ -76,7 +76,7 @@
76
76
  - **产出后停止**:技能完成产物(如 `plan.md`)后立即结束本轮调用,等待用户主动触发下一个技能命令
77
77
  - **不是过程中暂停征求意见**:不允许在执行步骤之间插入「请问您倾向 A 还是 B?」之类的中断
78
78
 
79
- 如果在执行过程中发现需要用户裁定的关键决策,按上文「关键设计决策标记与落账」处理:详情块写入产物 `## 人工裁决待办` 的 `### HD-N`、回写 `HD-` 账本行,由用户在审查检查点统一回应;普通未决问题仍写 `## 未决问题` / `Open Questions`。
79
+ 如果在执行过程中发现需要用户裁定的关键决策,按上文「关键设计决策标记与落账」处理:通过 `decision-next-id` / `decision-upsert` 结构化命令登记详情块与账本身份,由用户在审查检查点统一回应;普通未决问题仍写 `## 未决问题` / `Open Questions`。
80
80
 
81
81
  ## 锚点位置
82
82
 
@@ -1,5 +1,18 @@
1
- # PR Checks Platform Commands
1
+ # Required-checks Platform Intents
2
2
 
3
- This code platform does not provide built-in pull request check commands.
3
+ Typed intents own required-only selection, polling deadlines, run/job resolution, and log retrieval. The skill/model owns failure classification, root-cause analysis, minimum fixes, tests, and authorized commit/push actions.
4
4
 
5
- Platform-specific check monitoring is skipped for custom platforms unless you provide matching `.{platform}.en.md` rule templates. Keep local task artifacts as the source of truth, or install a platform-specific template pack before running the `watch-pr` skill.
5
+ ```bash
6
+ agent-infra-internal platform-checks inspect {task-id}
7
+
8
+ agent-infra-internal platform-checks watch {task-id} \
9
+ --interval-seconds 30 --deadline-seconds 1800
10
+
11
+ agent-infra-internal platform-checks resolve-run {task-id} \
12
+ --check-name {check-name} [--details-url {details-url}]
13
+
14
+ agent-infra-internal platform-checks logs {task-id} \
15
+ --run {run-id} [--job {job-id}]
16
+ ```
17
+
18
+ `checks.state` is `passed|failed|pending|timed-out|cancelled|no-required`. Green/no-required exits 0; definite failure/cancellation exits 1; pending, timeout, or network blocking exits 2. Each platform adapter validates its own dependencies before operations and preserves dependency or deterministic platform errors without compatibility degradation. Run resolution prefers a validated details URL and otherwise requires one exact PR-head/check-name match. Platform intents never edit business code or push.
@@ -1,62 +1,18 @@
1
- # PR Checks Platform Commands (GitHub)
1
+ # Required-checks Platform Intents
2
2
 
3
- Read this file before watching a PR's required checks, resolving a failing run, pulling failure logs, or reading the current branch's PR. The `watch-pr` skill's platform-specific commands live here; the skill body and `reference/` stay platform-agnostic.
4
-
5
- ## Current Branch PR / Repository Info
3
+ The GitHub adapter requires `gh >= 2.16.0`. Platform context checks this dependency before any GitHub API, PR, or checks operation. Projects that do not select GitHub neither probe nor depend on `gh`.
6
4
 
7
5
  ```bash
8
- gh pr view --json number -q .number # PR number for the current branch
9
- gh pr view {pr#} --json headRefOid -q .headRefOid # PR head SHA
10
- gh repo view --json nameWithOwner -q .nameWithOwner # {owner}/{repo}
11
- ```
6
+ agent-infra-internal platform-checks inspect {task-id}
12
7
 
13
- If `gh` is not authenticated or a command fails, stop or degrade per the calling skill's error handling.
8
+ agent-infra-internal platform-checks watch {task-id} \
9
+ --interval-seconds 30 --deadline-seconds 1800
14
10
 
15
- ## Watch Required Checks
11
+ agent-infra-internal platform-checks resolve-run {task-id} \
12
+ --check-name {check-name} [--details-url {details-url}]
16
13
 
17
- ```bash
18
- gh pr checks {pr#} --required --watch --fail-fast -i 30 \
19
- --json name,bucket,link,workflow
14
+ agent-infra-internal platform-checks logs {task-id} \
15
+ --run {run-id} [--job {job-id}]
20
16
  ```
21
17
 
22
- - `--required`: include only checks the repository's branch protection marks as required.
23
- - `--watch`: block until those checks finish; `--fail-fast`: exit watch on the first failure.
24
- - `-i 30`: poll every 30 seconds (backoff). **Overall time cap default 30 minutes (1800 seconds)**: use the timeout mechanism that matches the execution environment; on timeout, treat as "pending" (exit code 8).
25
- - POSIX shell: `timeout 1800 gh pr checks {pr#} --required --watch --fail-fast -i 30 …`
26
- - PowerShell (Windows): use a job timeout —
27
- ```powershell
28
- $job = Start-Job { gh pr checks {pr#} --required --watch --fail-fast -i 30 }
29
- if (Wait-Job $job -Timeout 1800) { Receive-Job $job } else { Stop-Job $job; <treat as "pending"> }
30
- ```
31
- - Platform-neutral fallback (no external timeout tool): record the start time, loop `gh pr checks {pr#} --required --json name,bucket,link,workflow` **without** `--watch`, sleeping `-i` seconds each round and checking whether any `bucket` is still `pending`; if the elapsed time reaches 1800 seconds without finishing, exit the loop and treat as "pending".
32
- - The `bucket` field of `--json` classifies each check as `pass` / `fail` / `pending` / `skipping` / `cancel`.
33
-
34
- Exit code semantics:
35
-
36
- | Exit code | Meaning | Outcome class |
37
- |-----------|---------|---------------|
38
- | 0 | all required checks passed | all green |
39
- | 1 | at least one failed / errored | failure |
40
- | 8 | still pending (watch timed out or was cut off by `timeout`) | pending |
41
-
42
- Old `gh` (< 2.93) without `--required`: fall back to `gh pr checks {pr#} --watch --fail-fast` (i.e. "all checks must succeed"), and note this degradation in the help/report and suggest upgrading `gh`.
43
-
44
- ## Resolve a Failing Run id and Pull Logs
45
-
46
- `gh pr checks --json` does not return a run id directly, but it returns each failing check's `link` (a URL to the run/job). Resolve in this deterministic order:
47
-
48
- 1. Extract from the failing check's `link` via regex: `https://github.com/{owner}/{repo}/actions/runs/(\d+)(?:/job/(\d+))?` → group 1 is the run id (optional group 2 is the job id).
49
- 2. When `link` is not a run URL or cannot be parsed, query check-runs by head SHA:
50
- ```bash
51
- sha=$(gh pr view {pr#} --json headRefOid -q .headRefOid)
52
- gh api "repos/{owner}/{repo}/commits/$sha/check-runs" \
53
- --jq '.check_runs[] | select(.name=="{failed-check-name}") | .details_url'
54
- ```
55
- then extract the run id from `details_url` the same way.
56
- 3. If neither path yields a run id → treat as "unlocatable" and use the skill's help exit; do not self-heal blindly.
57
-
58
- Once the run id is known, pull the failure logs:
59
-
60
- ```bash
61
- gh run view {run-id} --log-failed
62
- ```
18
+ The core owns required-only selection, deadlines, exact run/job resolution, and faithful logs. Green/no-required exits 0; definite failure exits 1; pending, timeout, or network blocking exits 2. Missing dependencies, unsupported versions, and deterministic platform failures preserve their structured errors without compatibility degradation. The skill/model still owns diagnosis, fixes, tests, and authorized commit/push actions.
@@ -1,62 +1,34 @@
1
- # PR 检查平台命令(GitHub)
1
+ # PR required checks 平台意图
2
2
 
3
- 在监控 PR 的 required checks、解析失败 run、拉取失败日志或读取当前分支 PR 前先读取本文件。`watch-pr` 技能的平台专属命令集中在此,技能正文与 `reference/` 保持平台无关。
3
+ required checks 的筛选、轮询 deadline、失败 run/job 定位和日志获取统一由 typed internal intent 执行。SKILL/模型只负责失败分类、根因分析、最小修复和授权后的提交推送。
4
4
 
5
- ## 当前分支 PR / 仓库信息
5
+ GitHub adapter 要求 `gh >= 2.16.0`。平台上下文会在任何 GitHub API、PR 或 checks 操作前检查该依赖;未选择 GitHub 平台时不探测也不依赖 `gh`。
6
+
7
+ ## 快照与监控
6
8
 
7
9
  ```bash
8
- gh pr view --json number -q .number # 当前分支对应的 PR 号
9
- gh pr view {pr#} --json headRefOid -q .headRefOid # PR head SHA
10
- gh repo view --json nameWithOwner -q .nameWithOwner # {owner}/{repo}
10
+ agent-infra-internal platform-checks inspect {task-id}
11
+
12
+ agent-infra-internal platform-checks watch {task-id} \
13
+ --interval-seconds 30 --deadline-seconds 1800
11
14
  ```
12
15
 
13
- `gh` 未认证或命令失败时,按调用方技能的错误处理停止或降级。
16
+ 结构化 `checks.state` 为 `passed|failed|pending|timed-out|cancelled|no-required`。`passed|no-required` 退出 0;确定失败/取消退出 1;pending、timeout 或网络阻塞退出 2。依赖缺失、版本过低和确定性平台错误直接返回其原始结构化错误,不执行兼容降级。
14
17
 
15
- ## 监控 required checks
18
+ ## 定位失败 run/job
16
19
 
17
20
  ```bash
18
- gh pr checks {pr#} --required --watch --fail-fast -i 30 \
19
- --json name,bucket,link,workflow
21
+ agent-infra-internal platform-checks resolve-run {task-id} \
22
+ --check-name {check-name} [--details-url {details-url}]
20
23
  ```
21
24
 
22
- - `--required`:只纳入仓库分支保护标记为 required 的 checks。
23
- - `--watch`:阻塞直到这些 checks 全部跑完;`--fail-fast`:出现首个失败即退出 watch。
24
- - `-i 30`:轮询间隔 30 秒(退避)。**总时长上限默认 30 分钟(1800 秒)**:按执行环境选用对应的超时方式,超时即按「挂起」处理(退出码 8)。
25
- - POSIX shell:`timeout 1800 gh pr checks {pr#} --required --watch --fail-fast -i 30 …`
26
- - PowerShell(Windows):用作业超时——
27
- ```powershell
28
- $job = Start-Job { gh pr checks {pr#} --required --watch --fail-fast -i 30 }
29
- if (Wait-Job $job -Timeout 1800) { Receive-Job $job } else { Stop-Job $job; <按「挂起」处理> }
30
- ```
31
- - 平台中立回退(无外部超时工具时):记录开始时间,循环执行**不带** `--watch` 的 `gh pr checks {pr#} --required --json name,bucket,link,workflow`,每轮 sleep `-i` 秒并检查 `bucket` 是否仍有 `pending`;累计时长 ≥ 1800 秒仍未结束 → 退出循环按「挂起」处理。
32
- - `--json` 的 `bucket` 字段把每个 check 归类为 `pass` / `fail` / `pending` / `skipping` / `cancel`。
33
-
34
- 退出码语义:
35
-
36
- | 退出码 | 含义 | 结果分类 |
37
- |--------|------|----------|
38
- | 0 | 全部 required checks 通过 | 全绿 |
39
- | 1 | 至少一个失败 / 出错 | 失败 |
40
- | 8 | 仍有 pending(watch 超时或被 `timeout` 截断) | 挂起 |
41
-
42
- 旧版 `gh`(< 2.93)若不支持 `--required`:回退为 `gh pr checks {pr#} --watch --fail-fast`(即「所有 check 必须 success」),并在求助/报告中注明该降级、建议升级 `gh`。
25
+ core 优先验证详情链接;否则按 PR head SHA 与 exact check name 查询。零个或多个候选均 fail closed,不选择其他 run。
43
26
 
44
- ## 解析失败 run id 并拉日志
45
-
46
- `gh pr checks --json` 不直接返回 run id,但返回失败 check 的 `link`(指向 run/job 的 URL)。按确定性顺序解析:
47
-
48
- 1. 从失败 check 的 `link` 用正则提取:`https://github.com/{owner}/{repo}/actions/runs/(\d+)(?:/job/(\d+))?` → 第 1 组为 run id(可选第 2 组为 job id)。
49
- 2. `link` 非 run URL 或无法解析时,用 head SHA 查 check-runs:
50
- ```bash
51
- sha=$(gh pr view {pr#} --json headRefOid -q .headRefOid)
52
- gh api "repos/{owner}/{repo}/commits/$sha/check-runs" \
53
- --jq '.check_runs[] | select(.name=="{failed-check-name}") | .details_url'
54
- ```
55
- 再从 `details_url` 同法提取 run id。
56
- 3. 两路都拿不到 run id → 视为「不可定位」,按技能的求助出口处理,不盲目自愈。
57
-
58
- 拿到 run id 后拉失败日志:
27
+ ## 获取失败日志
59
28
 
60
29
  ```bash
61
- gh run view {run-id} --log-failed
30
+ agent-infra-internal platform-checks logs {task-id} \
31
+ --run {run-id} [--job {job-id}]
62
32
  ```
33
+
34
+ 日志结果保真返回;缺失、权限、网络和资源不存在使用稳定错误码区分。平台 intent 不修改业务代码、不测试、不提交也不推送。
@@ -1,5 +1,32 @@
1
- # PR 检查平台命令
1
+ # PR required checks 平台意图
2
2
 
3
- 当前代码平台未内置 Pull Request 检查命令支持。
3
+ required checks 的筛选、轮询 deadline、失败 run/job 定位和日志获取统一由 typed internal intent 执行。SKILL/模型只负责失败分类、根因分析、最小修复和授权后的提交推送。
4
4
 
5
- 自定义平台会跳过平台专属的检查监控,除非你提供匹配的 `.{platform}.zh-CN.md` 规则模板。请以本地任务产物作为事实来源,或先安装平台专属模板包再运行 `watch-pr` 技能。
5
+ ## 快照与监控
6
+
7
+ ```bash
8
+ agent-infra-internal platform-checks inspect {task-id}
9
+
10
+ agent-infra-internal platform-checks watch {task-id} \
11
+ --interval-seconds 30 --deadline-seconds 1800
12
+ ```
13
+
14
+ 结构化 `checks.state` 为 `passed|failed|pending|timed-out|cancelled|no-required`。`passed|no-required` 退出 0;确定失败/取消退出 1;pending、timeout 或网络阻塞退出 2。平台 adapter 必须在操作前验证自身依赖;依赖或确定性平台错误直接透传,不执行兼容降级。
15
+
16
+ ## 定位失败 run/job
17
+
18
+ ```bash
19
+ agent-infra-internal platform-checks resolve-run {task-id} \
20
+ --check-name {check-name} [--details-url {details-url}]
21
+ ```
22
+
23
+ core 优先验证详情链接;否则按 PR head SHA 与 exact check name 查询。零个或多个候选均 fail closed,不选择其他 run。
24
+
25
+ ## 获取失败日志
26
+
27
+ ```bash
28
+ agent-infra-internal platform-checks logs {task-id} \
29
+ --run {run-id} [--job {job-id}]
30
+ ```
31
+
32
+ 日志结果保真返回;缺失、权限、网络和资源不存在使用稳定错误码区分。平台 intent 不修改业务代码、不测试、不提交也不推送。
@@ -1,5 +1,32 @@
1
- # PR Sync
1
+ # PR Summary Synchronization
2
2
 
3
- This code platform does not provide built-in pull request synchronization.
3
+ The model writes the semantic reviewer summary. Typed core owns canonical artifact selection, the marker, current HEAD, paginated comment lookup, and create/update/no-op reconciliation.
4
4
 
5
- PR creation, metadata updates, labels, milestones, assignees, and summary comments are skipped for custom platforms unless you provide matching `.{platform}.en.md` rule templates and adapters. Keep local task artifacts up to date.
5
+ ## Inputs
6
+
7
+ ```bash
8
+ agent-infra-internal platform-pr summary-context {task-id}
9
+ ```
10
+
11
+ Use only the returned latest canonical `plan*`, `review-plan*`, `code*`, `review-code*`, and `manual-validation*`. The summary covers scope, tests, review history, and exactly one manual-validation state.
12
+
13
+ ## Publish
14
+
15
+ Write only the summary body to a file, without marker or SHA:
16
+
17
+ ```bash
18
+ agent-infra-internal platform-pr summary-sync {task-id} \
19
+ --agent {agent} --body-file {summary-body-file}
20
+ ```
21
+
22
+ The core wraps `<!-- sync-pr:{task-id}:summary -->` and current `<!-- last-commit: ... -->`, then creates, updates in place, or returns no-op. Duplicate markers fail deterministically. Callers never assemble shell/heredoc comment commands.
23
+
24
+ `create-pr` does not roll back the PR on summary failure; `commit` records a warning without rolling back; manual validation refreshes after its canonical artifact is written.
25
+
26
+ For a linked task, the caller records a structured warning:
27
+
28
+ ```bash
29
+ agent-infra-internal task-warning {task-id} add --step {step} --severity WARNING \
30
+ --code COMMENT_SYNC_FAILED --target pr-summary --message "{reason}" \
31
+ --action "Restore comment permission or connectivity and rerun this step"
32
+ ```
@@ -1,135 +1,32 @@
1
- # PR Summary Sync
1
+ # PR Summary Synchronization
2
2
 
3
- Read this file before syncing the single reviewer-facing PR summary comment.
3
+ The model writes the semantic reviewer summary. Typed core owns canonical artifact selection, marker/HEAD wrapping, paginated comment lookup, and reconciliation.
4
4
 
5
- ## Scope
6
-
7
- Current callers:
8
- - `create-pr`: create or update the summary comment when the PR is opened
9
- - `commit`: refresh the summary comment on an existing PR when needed
10
- - `complete-manual-validation`: update the summary comment in place after manual validation passes, and write a validation artifact that later aggregation can reuse
11
-
12
- If another skill needs to refresh the PR summary later, point that skill's reference file at this rule first, then document only the skill-specific trigger and failure behavior there.
13
-
14
- ## Hidden Marker
15
-
16
- Use this hidden marker:
5
+ ```bash
6
+ agent-infra-internal platform-pr summary-context {task-id}
17
7
 
18
- ```html
19
- <!-- sync-pr:{task-id}:summary -->
8
+ agent-infra-internal platform-pr summary-sync {task-id} \
9
+ --agent {agent} --body-file {summary-body-file}
20
10
  ```
21
11
 
22
- Within one PR, a given `{task-id}` must have only one summary comment with this marker.
23
-
24
- ## Aggregation Inputs
25
-
26
- Aggregate the latest artifacts in the task directory:
27
- - `plan.md` or the latest `plan-r{N}.md`
28
- - `code.md` or the latest `code-r{N}.md`
29
- - `review-code.md` or the latest `review-code-r{N}.md`
30
- - `manual-validation.md` or the latest `manual-validation-r{N}.md`
31
-
32
- Aggregation rules:
33
- - extract 2-4 self-contained technical decisions from `plan*`
34
- - build the review-history table from `review-code*` and `code*`
35
- - extract the test summary from `code*`
36
- - if the latest `manual-validation*` artifact has a passed verdict, render the manual-validation section first as `### ✅ Manual Validation Passed`, with a concise validation time, scope, and notes summary
37
- - if one artifact class is missing, treat it as "no data for this stage" and continue
38
- - Manual verification section: include only post-code-stage checks that still require a human to execute or judge and that the AI cannot close on its own.
39
- - **Admission boundary**: the verification result depends on a real environment, permissions, account, external system, or human judgment, and cannot be closed by an agent rerunning tests, adding checks, or continuing the fix loop.
40
- - **Sources**: `review-code*` "Manual Validation Items", plus `code*` items that satisfy the boundary above.
41
- - **Wording**: each retained item must state at least "what to verify + location (file/change/scope) + why only a human can verify it".
42
- - **Rendering priority**:
43
- 1. the latest `manual-validation*` artifact has a passed verdict -> heading `### ✅ Manual Validation Passed` + validation summary.
44
- 2. no passed artifact and retained items exist -> heading `### ⚠️ Manual Verification Required` + item list.
45
- 3. no passed artifact and no retained items -> heading `### ✅ No Manual Verification Needed` and a single line `No items in this change require manual confirmation.`, with no item list.
12
+ Use only canonical inputs returned by the context command. Write the plain body without marker or SHA. The core owns `<!-- sync-pr:{task-id}:summary -->`, current `<!-- last-commit: ... -->`, create/update/no-op behavior, and duplicate-marker conflicts. Summary failure never rolls back a PR or commit.
46
13
 
47
- ## Comment Body Template
48
-
49
- Use this canonical comment body template:
14
+ The canonical comment envelope produced by the core is:
50
15
 
51
16
  ```markdown
52
17
  <!-- sync-pr:{task-id}:summary -->
53
18
  <!-- last-commit: {git-head-sha} -->
54
19
  ## Review Summary
55
-
56
- > **{agent}** · {task-id}
57
-
58
- **Updated At**: {current-time}
59
-
60
20
  {manual-validation-section}
61
-
62
21
  ### Key Technical Decisions
63
-
64
- - {decision-1}
65
- - {decision-2}
66
-
67
22
  ### Review History
68
-
69
- | Round | Verdict | Finding Counts | Fix Status |
70
- |-------|---------|----------------|------------|
71
- | Round 1 | Pending | N/A | N/A |
72
-
73
23
  ### Test Results
74
-
75
- - {test-summary}
76
-
77
- ---
78
- *Generated by {agent} · Internal tracking: {task-id}*
79
24
  ```
80
25
 
81
- > Render `{manual-validation-section}` per the "manual verification section" aggregation rule above: passed artifact → `### ✅ Manual Validation Passed` heading + validation summary; retained items → `### ⚠️ Manual Verification Required` heading + quote + item list; none → `### ✅ No Manual Verification Needed` heading + a single line `No items in this change require manual confirmation.` (no ⚠️, no list).
82
-
83
- ## Comment Lookup And Update
84
-
85
- Fetch existing comments through the Issues comments API, not the dedicated PR comments API.
86
-
87
- Before this section runs, the caller must resolve `upstream_repo` by following `.agents/rules/issue-pr-commands.md` / `.agents/rules/issue-sync.md`.
88
-
89
- Process:
90
- 1. Fetch existing PR comments and locate the comment ID that starts with `<!-- sync-pr:{task-id}:summary -->`
91
- 2. When rendering the body, always write the current `git rev-parse HEAD` result into `<!-- last-commit: {git-head-sha} -->`
92
- 3. If it does not exist, create it once as a fallback
93
- 4. If it exists and the body is identical, skip the write
94
- 5. If it exists and the body changed, PATCH it in place
95
-
96
- When updating an existing comment, use:
26
+ Canonical inputs include `manual-validation.md`. The manual-validation section is one of `### ✅ Manual Validation Passed`, `### ⚠️ Manual Verification Required`, or `### ✅ No Manual Verification Needed`; `complete-manual-validation` refreshes the same summary in place.
97
27
 
98
28
  ```bash
99
- gh api "repos/$upstream_repo/issues/comments/{comment-id}" -X PATCH -f body="$(cat <<'EOF'
100
- {comment-body}
101
- EOF
102
- )"
29
+ agent-infra-internal task-warning {task-id} add --step {step} --severity WARNING \
30
+ --code COMMENT_SYNC_FAILED --target pr-summary --message "{reason}" \
31
+ --action "Restore comment permission or connectivity and rerun this step"
103
32
  ```
104
-
105
- ## Shell Safety Rules
106
-
107
- 1. Read local artifact content first, then inline the actual text into a `<<'EOF'` heredoc.
108
- 2. Do not use command substitution or variable expansion inside the heredoc.
109
- 3. Do not use `echo` to construct bodies that contain `<!-- -->`; use `cat <<'EOF'` or `printf '%s\n'`.
110
-
111
- ## Error Handling
112
-
113
- | Failure Point | Handling |
114
- |--------|------|
115
- | `task.md` cannot be read | skip sync and let the later verification gate report it |
116
- | aggregation input is missing | warn and continue with the available data |
117
- | `gh api` GET/PATCH/POST fails | warn and continue; whether the current skill should block is decided by the caller |
118
- | `pr_number` points to a missing PR | warn with `PR #{pr-number} not found` and continue |
119
-
120
- When the caller has a `{task-id}` / task directory and GET/PATCH/POST fails, record a Workflow Warning:
121
-
122
- ```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 "Fix GitHub API / network issues and rerun the workflow step that triggers PR summary sync"
127
- ```
128
-
129
- ## Result Reporting
130
-
131
- Return one of these normalized results so callers can reuse it in Activity Log entries or user output:
132
- - `summary created`
133
- - `summary updated`
134
- - `summary skipped (no diff)`
135
- - `summary failed: <reason>`