@fitlab-ai/agent-infra 0.9.11 → 0.9.12

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 (193) hide show
  1. package/README.md +6 -6
  2. package/README.zh-CN.md +6 -6
  3. package/dist/bin/internal-cli.js +5 -0
  4. package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +71 -10
  5. package/dist/lib/defaults.json +4 -0
  6. package/dist/lib/git/workflow.js +43 -1
  7. package/dist/lib/init.js +1 -0
  8. package/dist/lib/internal/git-workflow.js +8 -1
  9. package/dist/lib/internal/platform-pr.js +8 -2
  10. package/dist/lib/internal/task-delivery.js +59 -0
  11. package/dist/lib/platform/github-client.js +7 -1
  12. package/dist/lib/platform/pr-checks.js +8 -5
  13. package/dist/lib/platform/pr-summary.js +12 -8
  14. package/dist/lib/platform/pull-requests.js +393 -91
  15. package/dist/lib/platform/verification-required.js +13 -2
  16. package/dist/lib/platform/verification-sync.js +9 -4
  17. package/dist/lib/pr-review/evidence-grading.js +12 -4
  18. package/dist/lib/sandbox/config.js +5 -0
  19. package/dist/lib/sandbox/control/lifecycle.js +29 -7
  20. package/dist/lib/server/process-state.js +2 -2
  21. package/dist/lib/task/artifact-lifecycle.js +2 -2
  22. package/dist/lib/task/commit-intent.js +100 -0
  23. package/dist/lib/task/commit-operation.js +195 -101
  24. package/dist/lib/task/create.js +33 -7
  25. package/dist/lib/task/decision-details.js +3 -48
  26. package/dist/lib/task/delivery-target.js +97 -0
  27. package/dist/lib/task/delivery.js +153 -0
  28. package/dist/lib/task/human-override.js +5 -2
  29. package/dist/lib/task/lifecycle.js +106 -9
  30. package/dist/lib/task/orchestration.js +55 -62
  31. package/dist/lib/task/pr-delivery-fact.js +182 -0
  32. package/dist/lib/task/review-finalization.js +4 -8
  33. package/dist/lib/task/review-fingerprint.js +8 -0
  34. package/dist/lib/task/verification-engine.js +48 -24
  35. package/dist/lib/task/verification-review.js +1 -1
  36. package/dist/lib/update.js +9 -0
  37. package/dist/lifecycle-build-manifest.json +3 -3
  38. package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +105 -10
  39. package/lib/agent-clients/adapters/codex-lifecycle/manifest-files.json +12 -1
  40. package/lib/defaults.json +4 -0
  41. package/lib/git/workflow.ts +38 -1
  42. package/lib/init.ts +3 -0
  43. package/lib/internal/git-workflow.ts +7 -1
  44. package/lib/internal/platform-pr.ts +8 -1
  45. package/lib/internal/task-delivery.ts +53 -0
  46. package/lib/platform/github-client.ts +8 -1
  47. package/lib/platform/pr-checks.ts +7 -5
  48. package/lib/platform/pr-summary.ts +10 -7
  49. package/lib/platform/pull-requests.ts +425 -87
  50. package/lib/platform/verification-required.ts +12 -2
  51. package/lib/platform/verification-sync.ts +9 -4
  52. package/lib/pr-review/evidence-grading.ts +7 -4
  53. package/lib/sandbox/config.ts +7 -0
  54. package/lib/sandbox/control/lifecycle.ts +30 -8
  55. package/lib/server/process-state.ts +2 -2
  56. package/lib/task/artifact-lifecycle.ts +2 -2
  57. package/lib/task/commit-intent.ts +137 -0
  58. package/lib/task/commit-operation.ts +174 -87
  59. package/lib/task/create.ts +34 -9
  60. package/lib/task/decision-details.ts +2 -62
  61. package/lib/task/delivery-target.ts +130 -0
  62. package/lib/task/delivery.ts +160 -0
  63. package/lib/task/human-override.ts +5 -2
  64. package/lib/task/lifecycle.ts +93 -4
  65. package/lib/task/orchestration.ts +62 -65
  66. package/lib/task/pr-delivery-fact.ts +254 -0
  67. package/lib/task/review-finalization.ts +4 -14
  68. package/lib/task/review-fingerprint.ts +10 -0
  69. package/lib/task/verification-engine.ts +45 -28
  70. package/lib/task/verification-review.ts +2 -0
  71. package/lib/update.ts +10 -0
  72. package/package.json +1 -1
  73. package/templates/.agents/rules/README.en.md +4 -2
  74. package/templates/.agents/rules/README.zh-CN.md +4 -2
  75. package/templates/.agents/rules/create-issue.en.md +11 -2
  76. package/templates/.agents/rules/create-issue.zh-CN.md +24 -2
  77. package/templates/.agents/rules/issue-pr-commands.en.md +4 -17
  78. package/templates/.agents/rules/issue-sync.en.md +26 -5
  79. package/templates/.agents/rules/issue-sync.zh-CN.md +62 -5
  80. package/templates/.agents/rules/label-milestone-setup.en.md +15 -2
  81. package/templates/.agents/rules/label-milestone-setup.zh-CN.md +15 -2
  82. package/templates/.agents/rules/local-artifact-repair.en.md +46 -0
  83. package/templates/.agents/rules/local-artifact-repair.zh-CN.md +46 -0
  84. package/templates/.agents/rules/milestone-inference.en.md +12 -2
  85. package/templates/.agents/rules/milestone-inference.zh-CN.md +25 -3
  86. package/templates/.agents/rules/pr-sync.en.md +22 -13
  87. package/templates/.agents/rules/pr-sync.zh-CN.md +22 -1
  88. package/templates/.agents/rules/release-commands.en.md +42 -3
  89. package/templates/.agents/rules/release-commands.zh-CN.md +42 -3
  90. package/templates/.agents/rules/security-alerts.en.md +17 -2
  91. package/templates/.agents/rules/security-alerts.zh-CN.md +17 -2
  92. package/templates/.agents/rules/sync-content-generation.en.md +8 -0
  93. package/templates/.agents/rules/sync-content-generation.zh-CN.md +8 -0
  94. package/templates/.agents/rules/task-management.en.md +1 -1
  95. package/templates/.agents/rules/task-management.zh-CN.md +1 -1
  96. package/templates/.agents/scripts/security-alerts.github.sh +151 -0
  97. package/templates/.agents/scripts/security-alerts.sh +31 -0
  98. package/templates/.agents/skills/analyze-task/SKILL.en.md +1 -0
  99. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +1 -0
  100. package/templates/.agents/skills/close-codescan/SKILL.en.md +2 -2
  101. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +2 -2
  102. package/templates/.agents/skills/close-dependabot/SKILL.en.md +2 -2
  103. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +2 -2
  104. package/templates/.agents/skills/code-task/SKILL.en.md +5 -2
  105. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +6 -3
  106. package/templates/.agents/skills/commit/SKILL.en.md +3 -3
  107. package/templates/.agents/skills/commit/SKILL.zh-CN.md +3 -3
  108. package/templates/.agents/skills/commit/config/verify.json +1 -1
  109. package/templates/.agents/skills/commit/reference/commit-orchestration.en.md +3 -3
  110. package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +3 -3
  111. package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +1 -1
  112. package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +1 -1
  113. package/templates/.agents/skills/commit/reference/task-status-update.en.md +2 -2
  114. package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +2 -2
  115. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +2 -1
  116. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +2 -1
  117. package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +1 -1
  118. package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +1 -1
  119. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +1 -1
  120. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +1 -1
  121. package/templates/.agents/skills/complete-task/SKILL.en.md +10 -10
  122. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +10 -10
  123. package/templates/.agents/skills/complete-task/reference/external-delivery.en.md +2 -2
  124. package/templates/.agents/skills/complete-task/reference/external-delivery.zh-CN.md +2 -2
  125. package/templates/.agents/skills/create-pr/SKILL.en.md +4 -4
  126. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +4 -4
  127. package/templates/.agents/skills/create-task/SKILL.en.md +1 -0
  128. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +1 -0
  129. package/templates/.agents/skills/import-codescan/SKILL.en.md +1 -1
  130. package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +1 -1
  131. package/templates/.agents/skills/import-dependabot/SKILL.en.md +1 -1
  132. package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +1 -1
  133. package/templates/.agents/skills/init-labels/SKILL.en.md +9 -10
  134. package/templates/.agents/skills/init-labels/SKILL.zh-CN.md +9 -10
  135. package/templates/.agents/skills/init-labels/scripts/init-labels.github.sh +57 -1
  136. package/templates/.agents/skills/init-labels/scripts/init-labels.sh +27 -1
  137. package/templates/.agents/skills/init-milestones/SKILL.en.md +3 -5
  138. package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +3 -5
  139. package/templates/.agents/skills/plan-task/SKILL.en.md +1 -0
  140. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +1 -0
  141. package/templates/.agents/skills/review-analysis/SKILL.en.md +4 -3
  142. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +4 -3
  143. package/templates/.agents/skills/review-analysis/reference/output-templates.en.md +18 -0
  144. package/templates/.agents/skills/review-analysis/reference/output-templates.zh-CN.md +18 -0
  145. package/templates/.agents/skills/review-code/SKILL.en.md +7 -6
  146. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +7 -6
  147. package/templates/.agents/skills/review-code/reference/output-templates.en.md +19 -1
  148. package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +19 -1
  149. package/templates/.agents/skills/review-code/reference/report-template.en.md +4 -2
  150. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +4 -2
  151. package/templates/.agents/skills/review-plan/SKILL.en.md +4 -3
  152. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +4 -3
  153. package/templates/.agents/skills/review-plan/reference/output-templates.en.md +18 -0
  154. package/templates/.agents/skills/review-plan/reference/output-templates.zh-CN.md +18 -0
  155. package/templates/.agents/skills/review-pr/SKILL.en.md +1 -0
  156. package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +1 -0
  157. package/templates/.agents/skills/review-pr/reference/evidence-grading.en.md +2 -2
  158. package/templates/.agents/skills/review-pr/reference/evidence-grading.zh-CN.md +2 -2
  159. package/templates/.agents/skills/run-manual-validation/SKILL.en.md +1 -0
  160. package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +1 -0
  161. package/templates/.agents/skills/run-task/SKILL.en.md +1 -1
  162. package/templates/.agents/skills/run-task/SKILL.zh-CN.md +1 -1
  163. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +4 -0
  164. package/templates/.agents/skills/watch-pr/SKILL.en.md +4 -4
  165. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +4 -4
  166. package/templates/.agents/templates/task.en.md +5 -1
  167. package/templates/.agents/templates/task.zh-CN.md +5 -1
  168. package/templates/.agents/workflows/bug-fix.en.yaml +9 -8
  169. package/templates/.agents/workflows/bug-fix.zh-CN.yaml +9 -8
  170. package/templates/.agents/workflows/feature-development.en.yaml +9 -8
  171. package/templates/.agents/workflows/feature-development.zh-CN.yaml +9 -8
  172. package/templates/.agents/workflows/refactoring.en.yaml +9 -8
  173. package/templates/.agents/workflows/refactoring.zh-CN.yaml +9 -8
  174. package/templates/.agents/rules/create-issue.github.en.md +0 -14
  175. package/templates/.agents/rules/create-issue.github.zh-CN.md +0 -27
  176. package/templates/.agents/rules/issue-pr-commands.github.en.md +0 -34
  177. package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +0 -49
  178. package/templates/.agents/rules/issue-sync.github.en.md +0 -40
  179. package/templates/.agents/rules/issue-sync.github.zh-CN.md +0 -76
  180. package/templates/.agents/rules/label-milestone-setup.github.en.md +0 -60
  181. package/templates/.agents/rules/label-milestone-setup.github.zh-CN.md +0 -60
  182. package/templates/.agents/rules/milestone-inference.github.en.md +0 -15
  183. package/templates/.agents/rules/milestone-inference.github.zh-CN.md +0 -27
  184. package/templates/.agents/rules/pr-checks-commands.github.en.md +0 -18
  185. package/templates/.agents/rules/pr-checks-commands.github.zh-CN.md +0 -34
  186. package/templates/.agents/rules/pr-sync.github.en.md +0 -43
  187. package/templates/.agents/rules/pr-sync.github.zh-CN.md +0 -69
  188. package/templates/.agents/rules/release-commands.github.en.md +0 -44
  189. package/templates/.agents/rules/release-commands.github.zh-CN.md +0 -44
  190. package/templates/.agents/rules/security-alerts.github.en.md +0 -43
  191. package/templates/.agents/rules/security-alerts.github.zh-CN.md +0 -43
  192. /package/templates/.agents/rules/{issue-fields.github.en.md → issue-fields.en.md} +0 -0
  193. /package/templates/.agents/rules/{issue-fields.github.zh-CN.md → issue-fields.zh-CN.md} +0 -0
@@ -15,7 +15,7 @@ Initialize the repository's standard labels taxonomy.
15
15
 
16
16
  Confirm that:
17
17
  - read `.agents/rules/label-milestone-setup.md` first
18
- - use its authentication commands to verify platform access
18
+ - the repository configuration and requested mapping are ready
19
19
 
20
20
  If any prerequisite fails, stop and report the matching error.
21
21
 
@@ -28,9 +28,9 @@ bash .agents/skills/init-labels/scripts/init-labels.sh
28
28
  ```
29
29
 
30
30
  The script and `.agents/rules/label-milestone-setup.md` are responsible for:
31
- - Capturing the current label snapshot before making changes
32
- - Creating or updating the standard label set with the platform-specific label command
33
- - Reporting unmatched platform-default labels such as `question` and `wontfix`
31
+ - Reading the configured `labels.in` mapping and preserving unrelated labels
32
+ - Selecting the provider leaf or returning a clear no-op/degraded result
33
+ - Creating or updating the standard label set and reporting the final summary
34
34
  - Printing the final execution summary
35
35
 
36
36
  ### 3. Standard taxonomy
@@ -69,8 +69,8 @@ Show the current mapping and ask whether it should be updated.
69
69
  #### 4.3 Write the mapping and create labels
70
70
 
71
71
  1. Write the final mapping to `.agents/.airc.json` under `labels.in`.
72
- 2. Create one `in: {key}` label for each mapping key by following the label-create command in `.agents/rules/label-milestone-setup.md`.
73
- 3. After user confirmation, delete stale `in:` labels that are no longer present in the final mapping.
72
+ 2. Run `bash .agents/skills/init-labels/scripts/init-labels.sh` to create or update one `in: {key}` label for each mapping key.
73
+ 3. After user confirmation, rerun the script with `--cleanup-stale-in` to delete stale `in:` labels that are no longer present in the final mapping.
74
74
 
75
75
  ### 5. Output and behavior guarantees
76
76
 
@@ -82,7 +82,7 @@ The summary must include:
82
82
  - Any unmatched platform-default labels still present
83
83
 
84
84
  Operational notes:
85
- - The operation is idempotent because the rule-file command updates or overwrites existing labels in place.
85
+ - The operation is idempotent because the provider leaf updates or overwrites existing labels in place.
86
86
  - `in:` labels are managed by the AI-guided step together with the `.airc.json` mapping.
87
87
 
88
88
  ### 6. Inform User
@@ -100,8 +100,7 @@ Next step - initialize milestones (optional):
100
100
 
101
101
  ## Error Handling
102
102
 
103
- - platform CLI not found: prompt "the platform CLI is not installed"
104
- - Authentication failed: prompt "the platform CLI is not authenticated"
105
- - Repository access failed: prompt "Unable to access the current repository with the platform CLI"
103
+ - Provider capability unavailable: report the script's `degraded` or `no-op` result without claiming remote changes.
104
+ - Provider authentication or repository access failure: report the script's non-zero exit status and diagnostic output; do not claim remote changes.
106
105
  - Permission error: prompt "No permission to manage labels in this repository"
107
106
  - API rate limit: prompt "platform API rate limit reached, please retry later"
@@ -15,7 +15,7 @@ description: >
15
15
 
16
16
  确认以下条件成立:
17
17
  - 执行前先读取 `.agents/rules/label-milestone-setup.md`
18
- - 按其中的认证命令验证平台访问能力
18
+ - 仓库配置和请求的映射已准备完成
19
19
 
20
20
  如果任一条件失败,停止并输出对应错误。
21
21
 
@@ -28,9 +28,9 @@ bash .agents/skills/init-labels/scripts/init-labels.sh
28
28
  ```
29
29
 
30
30
  脚本与 `.agents/rules/label-milestone-setup.md` 共同负责:
31
- - 在修改前保存当前 label 快照
32
- - 使用平台对应的 label 创建或更新命令维护标准 label 集合
33
- - 提示仍然存在的平台预置 labels,例如 `question` 和 `wontfix`
31
+ - 读取配置的 `labels.in` 映射并保留无关 label
32
+ - 选择 provider 叶子,或返回明确的 no-op/degraded 结果
33
+ - 创建或更新标准 label 集合并输出最终摘要
34
34
  - 输出最终执行摘要
35
35
 
36
36
  ### 3. 标准分类体系
@@ -69,8 +69,8 @@ bash .agents/skills/init-labels/scripts/init-labels.sh
69
69
  #### 4.3 写入配置并创建 label
70
70
 
71
71
  1. 将最终映射写入 `.agents/.airc.json` 的 `labels.in` 字段。
72
- 2. 为每个映射 key 按 `.agents/rules/label-milestone-setup.md` 的 label 创建命令创建 `in: {key}` label。
73
- 3. 询问用户确认后,清理不在最终映射中的旧 `in:` label。
72
+ 2. 执行 `bash .agents/skills/init-labels/scripts/init-labels.sh`,为每个映射 key 创建或更新 `in: {key}` label。
73
+ 3. 询问用户确认后,再使用 `--cleanup-stale-in` 重新执行脚本,清理不在最终映射中的旧 `in:` label。
74
74
 
75
75
  ### 5. 输出与行为保证
76
76
 
@@ -82,7 +82,7 @@ bash .agents/skills/init-labels/scripts/init-labels.sh
82
82
  - 仍然存在的未匹配平台预置 labels
83
83
 
84
84
  执行说明:
85
- - 整个操作具备幂等性,因为规则文件中的 label 创建命令按覆盖或更新方式执行。
85
+ - 整个操作具备幂等性,因为 provider 叶子会按覆盖或更新方式处理已有 label。
86
86
  - `in:` labels 由 AI 引导步骤和 `.airc.json` 映射统一管理。
87
87
 
88
88
  ### 6. 告知用户
@@ -100,8 +100,7 @@ bash .agents/skills/init-labels/scripts/init-labels.sh
100
100
 
101
101
  ## 错误处理
102
102
 
103
- - 未找到平台 CLI:提示 "the platform CLI is not installed"
104
- - 认证失败:提示 "the platform CLI is not authenticated"
105
- - 仓库访问失败:提示 "Unable to access the current repository with the platform CLI"
103
+ - provider 能力不可用:如实报告脚本的 `degraded` 或 `no-op` 结果,不得声称远端已变更。
104
+ - provider 认证或仓库访问失败:如实报告脚本的非零退出状态和诊断输出;不得声称远端已变更。
106
105
  - 权限不足:提示 "No permission to manage labels in this repository"
107
106
  - API 限流:提示 "platform API rate limit reached, please retry later"
@@ -2,6 +2,20 @@
2
2
 
3
3
  set -e
4
4
 
5
+ cleanup_stale_in=false
6
+ while [ "$#" -gt 0 ]; do
7
+ case "$1" in
8
+ --cleanup-stale-in)
9
+ cleanup_stale_in=true
10
+ ;;
11
+ *)
12
+ echo "Unknown option: $1" >&2
13
+ exit 2
14
+ ;;
15
+ esac
16
+ shift
17
+ done
18
+
5
19
  if ! command -v gh >/dev/null 2>&1; then
6
20
  echo "GitHub CLI (\`gh\`) is not installed"
7
21
  exit 1
@@ -53,11 +67,46 @@ help wanted 008672 Extra attention is needed
53
67
  dependencies 0366d6 Pull requests that update a dependency file
54
68
  EOF
55
69
 
70
+ node - ".agents/.airc.json" > "$tmpdir/in.tsv" <<'NODE'
71
+ const fs = require("node:fs");
72
+
73
+ const configPath = process.argv[2];
74
+ const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
75
+ const mapping = config.labels?.in;
76
+ if (mapping === undefined) process.exit(0);
77
+ if (!mapping || typeof mapping !== "object" || Array.isArray(mapping)) {
78
+ throw new Error("labels.in must be an object");
79
+ }
80
+
81
+ for (const key of Object.keys(mapping).sort()) {
82
+ if (!key || key.includes("\n") || key.includes("\r") || key.includes("\t")) {
83
+ throw new Error("labels.in keys must be non-empty single-line values");
84
+ }
85
+ process.stdout.write(`in: ${key}\tBFD4F2\tModule label for ${key}\n`);
86
+ }
87
+ NODE
88
+
89
+ cut -f1 "$tmpdir/in.tsv" > "$tmpdir/in-names.txt"
90
+
91
+ cat "$tmpdir/in.tsv" >> "$tmpdir/common.tsv"
92
+
56
93
  while IFS="$(printf '\t')" read -r name color description; do
57
94
  [ -n "$name" ] || continue
58
95
  gh label create "$name" --color "$color" --description "$description" --force
59
96
  done < "$tmpdir/common.tsv"
60
97
 
98
+ if [ "$cleanup_stale_in" = true ]; then
99
+ while IFS= read -r name; do
100
+ case "$name" in
101
+ in:*)
102
+ if ! grep -Fqx "$name" "$tmpdir/in-names.txt"; then
103
+ gh label delete "$name" --yes
104
+ fi
105
+ ;;
106
+ esac
107
+ done < "$tmpdir/existing-names.txt"
108
+ fi
109
+
61
110
  gh label list --limit 200 --json name --jq '.[].name' > "$tmpdir/final-names.txt"
62
111
  cp "$tmpdir/final-names.txt" "$tmpdir/final.txt"
63
112
 
@@ -69,11 +118,13 @@ for label in bug documentation duplicate enhancement invalid question wontfix; d
69
118
  done
70
119
 
71
120
  common_count="$(wc -l < "$tmpdir/common.tsv" | tr -d ' ')"
121
+ dynamic_count="$(wc -l < "$tmpdir/in.tsv" | tr -d ' ')"
72
122
 
73
123
  echo "GitHub Labels initialized."
74
124
  echo
75
125
  echo "Summary:"
76
126
  echo "- Common labels created or updated: $common_count"
127
+ echo "- in: labels created or updated: $dynamic_count"
77
128
  echo "- Exact-match GitHub defaults overwritten: good first issue, help wanted"
78
129
 
79
130
  if [ -s "$tmpdir/unmatched-defaults.txt" ]; then
@@ -87,4 +138,9 @@ echo
87
138
  echo "Notes:"
88
139
  echo "- theme: labels were intentionally not created."
89
140
  echo "- The operation is idempotent because every label uses gh label create --force."
90
- echo "- in: labels are managed by the AI-guided step in the SKILL."
141
+ echo "- in: labels are derived from .agents/.airc.json labels.in."
142
+ if [ "$cleanup_stale_in" = true ]; then
143
+ echo "- Stale in: labels were removed only for labels absent from the confirmed mapping."
144
+ else
145
+ echo "- Stale in: labels were preserved; pass --cleanup-stale-in after mapping confirmation to remove them."
146
+ fi
@@ -2,5 +2,31 @@
2
2
 
3
3
  set -e
4
4
 
5
- echo "Label initialization skipped: this code platform does not provide a built-in label adapter." >&2
5
+ cleanup_stale_in=false
6
+ while [ "$#" -gt 0 ]; do
7
+ case "$1" in
8
+ --cleanup-stale-in)
9
+ cleanup_stale_in=true
10
+ ;;
11
+ *)
12
+ echo "Unknown option: $1" >&2
13
+ exit 2
14
+ ;;
15
+ esac
16
+ shift
17
+ done
18
+
19
+ node - "$cleanup_stale_in" <<'NODE'
20
+ const cleanupStaleIn = process.argv[2] === "true";
21
+ process.stdout.write(`${JSON.stringify({
22
+ status: "degraded",
23
+ operation: "init-labels",
24
+ error: {
25
+ code: "PLATFORM_LABELS_UNSUPPORTED",
26
+ message: cleanupStaleIn
27
+ ? "The current platform does not provide a label adapter; stale labels were not removed."
28
+ : "The current platform does not provide a label adapter."
29
+ }
30
+ })}\n`);
31
+ NODE
6
32
  exit 0
@@ -15,7 +15,7 @@ Initialize the repository's standard milestones taxonomy.
15
15
 
16
16
  Confirm that:
17
17
  - read `.agents/rules/label-milestone-setup.md` first
18
- - use its authentication commands to verify platform access
18
+ - the requested milestone arguments are ready
19
19
 
20
20
  If any prerequisite fails, stop and report the matching error.
21
21
 
@@ -31,7 +31,7 @@ The script and `.agents/rules/label-milestone-setup.md` are responsible for:
31
31
  - Creating and cleaning up a temporary workspace
32
32
  - Detecting whether `--history` was requested
33
33
  - Scanning all `v*` Git tags, selecting the highest valid version by SemVer precedence, and using compatibility default `0.1.0` when none is valid, without reading ecosystem manifests
34
- - Listing current milestones with the platform-specific milestone query command
34
+ - Letting the provider leaf list and write current milestones
35
35
  - Building the desired milestone set and creating only the missing titles
36
36
  - Printing the final execution summary
37
37
 
@@ -78,9 +78,7 @@ Next step - initialize labels (optional):
78
78
 
79
79
  ## Error Handling
80
80
 
81
- - platform CLI not found: prompt "the platform CLI is not installed"
82
- - Authentication failed: prompt "the platform CLI is not authenticated"
83
- - Repository access failed: prompt "Unable to access the current repository with the platform CLI"
81
+ - Provider capability, authentication, or repository access failure: report the script's non-zero exit status and diagnostic output; do not claim remote changes.
84
82
  - Version detection failed: prompt "Unable to determine current version baseline"
85
83
  - No valid SemVer `v*` tags found in `--history` mode: prompt "No valid SemVer history tags found matching v*; only standard milestones will be created"
86
84
  - Permission error: prompt "No permission to manage milestones in this repository"
@@ -15,7 +15,7 @@ description: >
15
15
 
16
16
  确认以下条件成立:
17
17
  - 执行前先读取 `.agents/rules/label-milestone-setup.md`
18
- - 按其中的认证命令验证平台访问能力
18
+ - 请求的 milestone 参数已准备完成
19
19
 
20
20
  如果任一条件失败,停止并输出对应错误。
21
21
 
@@ -31,7 +31,7 @@ bash .agents/skills/init-milestones/scripts/init-milestones.sh "$ARGUMENTS"
31
31
  - 创建并清理临时工作目录
32
32
  - 检测是否传入 `--history`
33
33
  - 扫描所有 `v*` Git tag,按 SemVer precedence 选择最高合法版本;没有合法版本时使用兼容默认值 `0.1.0`,且不读取任何生态 manifest
34
- - 使用平台对应的 milestones 查询命令读取当前里程碑
34
+ - 由 provider 叶子读取并写入当前里程碑
35
35
  - 构建目标里程碑集合,并且只创建缺失标题
36
36
  - 输出最终执行摘要
37
37
 
@@ -78,9 +78,7 @@ bash .agents/skills/init-milestones/scripts/init-milestones.sh "$ARGUMENTS"
78
78
 
79
79
  ## 错误处理
80
80
 
81
- - 未找到平台 CLI:提示 "the platform CLI is not installed"
82
- - 认证失败:提示 "the platform CLI is not authenticated"
83
- - 仓库访问失败:提示 "Unable to access the current repository with the platform CLI"
81
+ - provider 能力、认证或仓库访问失败:如实报告脚本的非零退出状态和诊断输出;不得声称远端已变更。
84
82
  - 版本解析失败:提示 "Unable to determine current version baseline"
85
83
  - `--history` 模式下未找到合法 SemVer `v*` git tags:提示 "No valid SemVer history tags found matching v*; only standard milestones will be created"
86
84
  - 权限不足:提示 "No permission to manage milestones in this repository"
@@ -15,6 +15,7 @@ If the entry operands contain `--orchestrated`, bind `{execution-flag}` to `--or
15
15
 
16
16
  - This skill only outputs a technical plan document (`plan.md` or `plan-r{N}.md`) and does not modify any business code
17
17
  - This is a **mandatory human review checkpoint**; do not automatically proceed to implementation
18
+ - Before generating task or lifecycle Markdown that will be synchronized to an Issue, read `.agents/rules/sync-content-generation.md` and apply its producer-side constraints; the sync path does not parse or rewrite the body
18
19
  - When the plan touches compatibility, migration, old formats, or old entry points, read `.agents/rules/compatibility-policy.md` first. Do not design adapters, shims, dual writes, or parallel state machines without passing its admission gate
19
20
  - After executing this skill, you **must** immediately update task status in task.md
20
21
 
@@ -14,6 +14,7 @@ description: >
14
14
  ## 行为边界 / 关键规则
15
15
 
16
16
  - 本技能仅产出技术方案文档(`plan.md` 或 `plan-r{N}.md`)—— 不修改任何业务代码
17
+ - 生成会同步到 Issue 的任务或生命周期 Markdown 前,先读取 `.agents/rules/sync-content-generation.md` 并遵循其中的生成端约束;同步端不解析或改写正文
17
18
  - 这是一个**强制性的人工审查检查点** —— 不要自动进入实现阶段
18
19
  - 方案涉及兼容、迁移、旧格式或旧入口时,先读取 `.agents/rules/compatibility-policy.md`;未通过准入门槛时不得设计 adapter、shim、双写或并行状态机
19
20
  - 执行本技能后,你**必须**立即更新 task.md 中的任务状态
@@ -16,6 +16,7 @@ Review the latest analysis artifact and produce `review-analysis.md` or `review-
16
16
  ## Boundary / Critical Rules
17
17
 
18
18
  - This skill only reviews analysis artifacts and writes a report; it does not modify product code.
19
+ - Before generating task or lifecycle Markdown that will be synchronized to an Issue, read `.agents/rules/sync-content-generation.md` and apply its producer-side constraints; the sync path does not parse or rewrite the body
19
20
  - After executing this skill, you **must** immediately update task.md.
20
21
 
21
22
  Version stamp rule: when creating or updating `task.md` frontmatter, read `.agents/rules/version-stamp.md` first and write or refresh `agent_infra_version`.
@@ -69,7 +70,7 @@ Create `.agents/workspace/active/{task-id}/{review-artifact}`.
69
70
 
70
71
  ### 6. Update Task Status
71
72
 
72
- After the report, submit each new finding with `agent-infra-internal task-ledger {task-id} finding-upsert --stage analysis --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}`; submit prior-response dispositions with `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {evidence}`. Do not scan ids or edit ledger rows. After all ledger writes, call `agent-infra-internal task-review {task-id} finalize-summary --stage analysis --artifact {review-artifact} {execution-flag}` exactly once.
73
+ After the report, submit each new finding with `agent-infra-internal task-ledger {task-id} finding-upsert --stage analysis --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}`; submit prior-response dispositions with `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {evidence}`. Do not scan ids or edit ledger rows. After all ledger writes, make the initial call to `agent-infra-internal task-review {task-id} finalize-summary --stage analysis --artifact {review-artifact} {execution-flag}`; after a failure, follow `.agents/rules/local-artifact-repair.md` to decide whether to edit and rerun, and never treat an error type or `changed=false` as automatic authorization.
73
74
 
74
75
  Bind and reuse this structured mapping from that one response:
75
76
 
@@ -79,13 +80,13 @@ Bind and reuse this structured mapping from that one response:
79
80
  {unresolved-minor} = stageStatus.unresolvedFindingCounts.minor
80
81
  ```
81
82
 
82
- The intent atomically finalizes the report summary and returns the same ledger snapshot. Do not call `stage-status`, replace placeholders manually, or rescan the finding list. If finalization fails or a response field is missing, stop before the completion event. Derive the verdict and next-step branch from the same response's `stageStatus.canAdvance`: only `canAdvance=true` permits `approved`; otherwise use `changes-requested` or `rejected`. Then run `agent-infra-internal task-event {task-id} review-analysis.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`.
83
+ The intent atomically finalizes the report summary and returns the same ledger snapshot. Do not call `stage-status`, replace placeholders manually, or rescan the finding list. After a failure, the model may edit the same controlled artifact and rerun the same intent only when the shared rule's mechanical gates pass; reassess convergence after every failure. The final complete result determines the verdict and counts from that same snapshot: `stageStatus.canAdvance=true` with an Approved conclusion permits cross-stage advancement; `stageStatus.canAdvance=false` still requires `agent-infra-internal task-event {task-id} review-analysis.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`, using `changes-requested` and routing to same-stage revision/review (use `rejected` when the report explicitly rejects). On failure, model stop, lack of progress, or the emergency cap, do not publish a completion event or cross-stage command; use the `repair-stop` scenario in `reference/output-templates.md` to show existing summary/findings, the artifact, actual repair attempts, the last diagnostic, and the stop reason.
83
84
 
84
85
  `manual-validation` is the data source for the `Manual-validation` count folded into review rows in `ai task log`; do not add a parallel manual-verification field.
85
86
 
86
87
  If task.md has a valid `issue_number`, run `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`, then `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {review-artifact} --agent {standard-agent-token}`.
87
88
 
88
- Before writing the summary, the finalization intent checks decision-detail ids; it auto-removes a duplicate only when exactly one formal `[needs-human-decision]` block remains and every other same-id block is clearly short and informal, then reruns the read-only check. Ambiguous duplicates fail closed. If this check or repair fails, stop before the completion event.
89
+ Before writing the summary, the finalization intent checks decision-detail ids; any visible duplicate returns a structured failure and preserves the artifact bytes, while the model decides whether a minimal edit is safe under the shared rule. If the safety gates fail, diagnostics repeat, no byte-level progress occurs, or the emergency cap is reached, stop before the completion event; the stop path must still show the existing review result instead of hiding the artifact.
89
90
 
90
91
  ### 7. Run Completion Gate
91
92
 
@@ -16,6 +16,7 @@ description: >
16
16
  ## 行为边界 / 关键规则
17
17
 
18
18
  - 本技能只审查分析产物并写报告,不修改业务代码
19
+ - 生成会同步到 Issue 的任务或生命周期 Markdown 前,先读取 `.agents/rules/sync-content-generation.md` 并遵循其中的生成端约束;同步端不解析或改写正文
19
20
  - 执行本技能后,你**必须**立即更新 task.md
20
21
 
21
22
  版本戳规则:创建或更新 `task.md` frontmatter 时,先读取 `.agents/rules/version-stamp.md`,并写入或刷新 `agent_infra_version`。
@@ -72,7 +73,7 @@ agent-infra-internal task-snapshot {task-id} --format text
72
73
 
73
74
  ### 6. 更新任务状态
74
75
 
75
- 报告完成后,新 finding 逐条调用 `agent-infra-internal task-ledger {task-id} finding-upsert --stage analysis --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}`;复核上一轮响应时调用 `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {相称证据}`。不得扫描编号或手写账本行。全部账本写入完成后只调用一次 `agent-infra-internal task-review {task-id} finalize-summary --stage analysis --artifact {review-artifact} {execution-flag}`。
76
+ 报告完成后,新 finding 逐条调用 `agent-infra-internal task-ledger {task-id} finding-upsert --stage analysis --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}`;复核上一轮响应时调用 `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {相称证据}`。不得扫描编号或手写账本行。全部账本写入完成后首次调用 `agent-infra-internal task-review {task-id} finalize-summary --stage analysis --artifact {review-artifact} {execution-flag}`;失败后是否继续编辑并重跑,必须遵循 `.agents/rules/local-artifact-repair.md`,不能把失败类型或 `changed=false` 当作自动授权。
76
77
 
77
78
  从该次返回值绑定并复用以下结构化映射:
78
79
 
@@ -82,13 +83,13 @@ agent-infra-internal task-snapshot {task-id} --format text
82
83
  {unresolved-minor} = stageStatus.unresolvedFindingCounts.minor
83
84
  ```
84
85
 
85
- 该 intent 原子最终化报告摘要并返回同一次账本快照;不得再调用 `stage-status`、手工替换占位符或扫描问题清单。最终化失败或返回字段缺失时,停止在完成事件之前。以同一次返回的 `stageStatus.canAdvance` 决定 verdict 和下一步:仅 `canAdvance=true` 可用 `approved`,否则必须用 `changes-requested` 或 `rejected`。随后执行 `agent-infra-internal task-event {task-id} review-analysis.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`。
86
+ 该 intent 原子最终化报告摘要并返回同一次账本快照;不得再调用 `stage-status`、手工替换占位符或扫描问题清单。失败后,模型只能在共享规则的机械安全门通过时修改同一个受控 artifact,并完整重跑相同 intent;每次失败都重新判断是否收敛。最终一次完整成功返回决定同一快照的 verdict 和计数:`stageStatus.canAdvance=true` 且结论为 Approved 时允许跨阶段推进;`stageStatus.canAdvance=false` 时仍须执行 `agent-infra-internal task-event {task-id} review-analysis.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`,使用 `changes-requested` 并路由到同阶段修订/复审(报告明确拒绝时使用 `rejected`)。失败、模型停止、无进展或紧急熔断时,不发布完成事件或跨阶段命令,但必须按 `reference/output-templates.md` 的 `repair-stop` 场景展示已有 summary/findings、artifact、实际修复次数、最后诊断和停止原因。
86
87
 
87
88
  `manual-validation` 是 `ai task log` 中 review 行「人工校验点」(EN `Manual-validation`)计数的数据源;不要新增并行人工验证字段。
88
89
 
89
90
  如果 task.md 中存在有效的 `issue_number`,调用 `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`,再调用 `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {review-artifact} --agent {standard-agent-token}`;失败按 `.agents/rules/issue-sync.md` 记录 warning。
90
91
 
91
- 最终化 intent 会在写入摘要前检查详情块 ID;只有“一个正式 `[needs-human-decision]` 块 + 明确的简短非正式重复块”才会自动删除重复块并重新做只读检查,无法唯一判断时失败关闭。该检查或自动修复失败时,停止在完成事件之前。
92
+ 最终化 intent 会在写入摘要前检查详情块 ID;任何可见重复都返回结构化失败并保持 artifact 字节不变,由模型按共享规则判断是否进行最小编辑。无法通过安全门、诊断重复、没有实际字节变化或达到紧急熔断时,停止在完成事件之前;停止路径仍必须展示已有审查结果,不得吞掉 artifact 内容。
92
93
 
93
94
  ### 7. 完成校验
94
95
 
@@ -18,6 +18,24 @@ Rules:
18
18
  - The selected scenario must generate `{next-step-commands}` through the shared helper
19
19
  - The count line shows 4 numbers. `Human-decision` (`{h}`) counts this stage's `needs-human-decision` rows; because those rows are unresolved, `{h} > 0` means `canAdvance=false`. Expand the "Pending human-decision pre-block" from `.agents/rules/next-step-output.md` and show revision and re-review paths only.
20
20
 
21
+ ### Scenario R: Finalization stopped with results visible
22
+
23
+ When the finalizer fails, or the model stops because of a safety gate, lack of progress, repeated diagnostics, or the emergency cap, use this scenario. Do not call the shared helper or output cross-stage commands.
24
+
25
+ ```text
26
+ Task {task-id} review results were generated, but lifecycle advancement stopped.
27
+ - Review artifact: .agents/workspace/active/{task-id}/{review-artifact}
28
+ - Last valid summary/findings: {last-readable-review-result}
29
+ - Local repair attempts: {repairAttempts}
30
+ - Last diagnostic: {last-structured-diagnostic}
31
+ - Stop reason: {stop-reason}
32
+ - Completion event: not published | Cross-stage commands: not generated
33
+
34
+ Note: only lifecycle advancement stopped; the existing review result remains available. Handle it manually or rerun the current review skill.
35
+ ```
36
+
37
+ If the summary cannot be parsed safely, set `{last-readable-review-result}` to "summary could not be parsed safely" and retain the artifact path and raw structured diagnostic; do not infer counts or add a conclusion.
38
+
21
39
  ### Scenario A: Approved with no findings
22
40
 
23
41
  Populate `{next-step-commands}` for this scenario by running `agent-infra-internal agent-client next-steps --skill plan-task --task-ref {task-ref}`.
@@ -18,6 +18,24 @@
18
18
  - 所选场景必须通过统一 helper 生成 `{next-step-commands}`
19
19
  - 计数行固定显示 4 个数字。`人工裁决`(`{h}`)是本阶段 `needs-human-decision` 行数;它属于未闭环账本状态,因此 `{h} > 0` 时 `canAdvance=false`,必须按 `.agents/rules/next-step-output.md` 的「人工裁决待办前置块」展开详情,并只输出修订与复审路径。
20
20
 
21
+ ### 场景 R:最终化停止但结果可见
22
+
23
+ 当 finalizer 失败,或模型因安全门、无进展、重复诊断或紧急熔断停止时,使用本场景,不调用统一 helper,也不输出跨阶段命令。
24
+
25
+ ```text
26
+ 任务 {task-id} 审查结果已生成,但生命周期未推进。
27
+ - 审查产物:.agents/workspace/active/{task-id}/{review-artifact}
28
+ - 最后有效 summary/findings:{last-readable-review-result}
29
+ - 本地修复次数:{repairAttempts}
30
+ - 最后诊断:{last-structured-diagnostic}
31
+ - 停止原因:{stop-reason}
32
+ - 完成事件:未发布 | 跨阶段命令:未生成
33
+
34
+ 说明:本次仅停止生命周期推进,已有审查结果仍可查看。请先进行人工处理,或重新运行当前审查技能。
35
+ ```
36
+
37
+ 如果 summary 无法安全解析,`{last-readable-review-result}` 必须改为“摘要不可安全解析”,并保留 artifact 路径和原始结构化诊断;不得推算计数或补写结论。
38
+
21
39
  ### 场景 A:通过且无问题
22
40
 
23
41
  使用 `agent-infra-internal agent-client next-steps --skill plan-task --task-ref {task-ref}` 生成本场景的 `{next-step-commands}`。
@@ -16,6 +16,7 @@ Review the latest code round and produce `review-code.md` or `review-code-r{N}.m
16
16
  ## Boundary / Critical Rules
17
17
 
18
18
  - This skill reviews code and writes a report; it does not modify product code
19
+ - Before generating task or lifecycle Markdown that will be synchronized to an Issue, read `.agents/rules/sync-content-generation.md` and apply its producer-side constraints; the sync path does not parse or rewrite the body
19
20
  - After executing this skill, you **must** immediately update task.md
20
21
 
21
22
  Version stamp rule: when creating or updating `task.md` frontmatter, read `.agents/rules/version-stamp.md` first and write or refresh `agent_infra_version`.
@@ -70,11 +71,11 @@ Read the highest-round code artifact and, if present, the highest-round fix arti
70
71
  ### 4. Perform the Review
71
72
 
72
73
  Follow `.agents/workflows/feature-development.yaml` and inspect the full change context:
73
- - Capture the reviewed commit `R=$(git rev-parse HEAD)` exactly once; reuse R for this round's report, snapshot tree, and task review fact, and do not re-read HEAD later as a substitute
74
- - Call `agent-infra-internal platform-pr inspect {task-id}`. When a bound PR provides a base SHA, set the diff base to `D=$(git merge-base "$R" "{base-sha}")`. Without a PR, set `D=$R` only when tracked or untracked worktree changes exist. A clean worktree without a bound PR has no reliable complete committed range: stop and require a bound PR instead of reviewing an empty diff
74
+ - Resolve the task's bound delivery remote/base and read the target SHA once at review start, `M=$(git ls-remote --refs {remote} refs/heads/{baseRef})`; then capture the reviewed commit `R=$(git rev-parse HEAD)` once and compute `D=$(git merge-base "$R" "$M")`. Save M/D/R as historical evidence and never overwrite them with a later live target value
75
+ - If the delivery target cannot be resolved or its target commit is unavailable, stop and record the target error; M/D/R must come from one fact-collection round and must not be replaced by PR-existence evidence
75
76
  - `git diff --binary "$D" -- <post-review-globs>` covers committed and uncommitted tracked changes from D to the current worktree
76
77
  - `git ls-files -o --exclude-standard -z -- <post-review-globs>` for untracked new files
77
- - Write `mode=worktree`, `baseline=R`, and `diffBase=D` to a temporary JSON file, then call `agent-infra-internal git-workflow snapshot --input {file}` to generate a reviewed diff fingerprint `F` for the complete committed range and a reviewed snapshot tree `T` for the current worktree; write R, D, F, and T into the report
78
+ - Write `mode=worktree`, `baseline=R`, and `diffBase=D` to a temporary JSON file, then call `agent-infra-internal git-workflow snapshot --input {file}` to generate a reviewed diff fingerprint `F` for the complete committed range and a reviewed snapshot tree `T` for the current worktree; write M, R, D, F, and T into the report
78
79
 
79
80
  > After collecting those facts, read `.agents/rules/review-method.md`, use them as readiness evidence, and run Passes 2–5 for traceability, risk lenses, counterevidence, and classification; the report must record all five passes.
80
81
  > Detailed review criteria, severity rules, and reviewer expectations live in `reference/review-criteria.md`. Read `reference/review-criteria.md` before reviewing.
@@ -98,7 +99,7 @@ Create `.agents/workspace/active/{task-id}/{review-artifact}`.
98
99
 
99
100
  Update task.md:
100
101
  - After the report, submit each new finding with `agent-infra-internal task-ledger {task-id} finding-upsert --stage code --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}`; submit prior-response dispositions with `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {evidence}`. When escalating to `needs-human-decision`, append `--needs-implementation true|false` using the judgment recorded in the detail block. Do not scan ids or edit ledger rows
101
- - After all ledger writes, call `agent-infra-internal task-review {task-id} finalize-summary --stage code --artifact {review-artifact} {execution-flag}` exactly once
102
+ - After all ledger writes, make the initial call to `agent-infra-internal task-review {task-id} finalize-summary --stage code --artifact {review-artifact} {execution-flag}`; after a failure, follow `.agents/rules/local-artifact-repair.md` to decide whether to edit and rerun, and never treat an error type or `changed=false` as automatic authorization
102
103
 
103
104
  Bind and reuse this structured mapping from that one response:
104
105
 
@@ -108,7 +109,7 @@ Update task.md:
108
109
  {unresolved-minor} = stageStatus.unresolvedFindingCounts.minor
109
110
  ```
110
111
 
111
- The intent atomically finalizes the report summary and returns the same ledger snapshot. Do not call `stage-status`, replace placeholders manually, or rescan the finding list. If finalization fails or a response field is missing, stop before the completion event. Derive the verdict and next-step branch from the same response's `stageStatus.canAdvance`; only `canAdvance=true` permits Approved
112
+ The intent atomically finalizes the report summary and returns the same ledger snapshot. Do not call `stage-status`, replace placeholders manually, or rescan the finding list. After a failure, the model may edit the same controlled artifact and rerun the same intent only when the shared rule's mechanical gates pass; reassess convergence after every failure. The final complete result determines the verdict and counts from that same snapshot: `stageStatus.canAdvance=true` with an Approved conclusion permits cross-stage advancement; `stageStatus.canAdvance=false` still requires `agent-infra-internal task-event {task-id} review-code.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`, using `changes-requested` and routing to same-stage revision/review (use `rejected` when the report explicitly rejects). On failure, model stop, lack of progress, or the emergency cap, do not publish a completion event or cross-stage command; use the `repair-stop` scenario in `reference/output-templates.md` to show existing summary/findings, the artifact, actual repair attempts, the last diagnostic, and the stop reason
112
113
  - Only when `canAdvance=true`, the verdict is Approved, and `T == R^{tree}`, write `last_reviewed_commit: {R}`. Clear an old value for an Approved snapshot with uncommitted differences; otherwise preserve the existing value and do not advance it
113
114
  - For an Approved exit, collect PR and all-check facts as defined in `reference/output-templates.md`: route uncommitted/unpushed code to `commit`, no PR to `create-pr` (except no-PR flow), non-terminal checks to `watch-pr`, and route to `complete-task` only when `HEAD == last_reviewed_commit == PR head` with checks `passed|no-required`; never route by review round alone
114
115
  - After handling `last_reviewed_commit`, run `agent-infra-internal task-event {task-id} review-code.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`
@@ -121,7 +122,7 @@ If task.md contains a valid `issue_number`, perform these sync actions (skip and
121
122
  - Run `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
122
123
  - Run `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {review-artifact} --agent {standard-agent-token}`
123
124
 
124
- Before writing the summary, the finalization intent checks decision-detail ids; it auto-removes a duplicate only when exactly one formal `[needs-human-decision]` block remains and every other same-id block is clearly short and informal, then reruns the read-only check. Ambiguous duplicates fail closed. If this check or repair fails, stop before the completion event.
125
+ Before writing the summary, the finalization intent checks decision-detail ids; any visible duplicate returns a structured failure and preserves the artifact bytes, while the model decides whether a minimal edit is safe under the shared rule. If the safety gates fail, diagnostics repeat, no byte-level progress occurs, or the emergency cap is reached, stop before the completion event; the stop path must still show the existing review result instead of hiding the artifact.
125
126
 
126
127
  ### 7. Verification Gate
127
128
 
@@ -16,6 +16,7 @@ description: >
16
16
  ## 行为边界 / 关键规则
17
17
 
18
18
  - 本技能只审查代码并写报告,不修改业务代码
19
+ - 生成会同步到 Issue 的任务或生命周期 Markdown 前,先读取 `.agents/rules/sync-content-generation.md` 并遵循其中的生成端约束;同步端不解析或改写正文
19
20
  - 执行本技能后,你**必须**立即更新 task.md
20
21
 
21
22
  版本戳规则:创建或更新 `task.md` frontmatter 时,先读取 `.agents/rules/version-stamp.md`,并写入或刷新 `agent_infra_version`。
@@ -69,11 +70,11 @@ agent-infra-internal task-snapshot {task-id} --format text
69
70
  ### 4. 执行审查
70
71
 
71
72
  遵循 `.agents/workflows/feature-development.yaml`,并同时检查完整变更上下文:
72
- - 一次性记录审查提交 `R=$(git rev-parse HEAD)`;本轮报告、快照树和任务审查事实都复用该 R,禁止稍后重新读取 HEAD 代替
73
- - 调用 `agent-infra-internal platform-pr inspect {task-id}`:已绑定 PR 且返回 base SHA 时,令差异基线 `D=$(git merge-base "$R" "{base-sha}")`;无 PR 时仅在存在已跟踪或未跟踪工作区变化的前提下令 `D=$R`。无 PR 且工作区干净时无法可靠确定完整提交范围,必须停止并要求先绑定 PR,不得用空 diff 继续审查
73
+ - 在审查开始时解析任务绑定的 delivery remote/base,并一次性读取目标分支 SHA `M=$(git ls-remote --refs {remote} refs/heads/{baseRef})`;随后一次性记录审查提交 `R=$(git rev-parse HEAD)`,计算 `D=$(git merge-base "$R" "$M")`。报告保存 M/D/R,不能用后续实时目标值覆盖本轮历史证据
74
+ - 若 delivery target 无法解析或目标 commit 不可用,停止并记录 target 错误;M/D/R 必须来自同一轮事实采集,不以 PR 是否存在替代 delivery target 证据
74
75
  - `git diff --binary "$D" -- <post-review-globs>` 覆盖 `D` 到当前工作区的已提交与未提交跟踪变更
75
76
  - `git ls-files -o --exclude-standard -z -- <post-review-globs>` 覆盖未跟踪新文件
76
- - 把 `mode=worktree`、`baseline=R`、`diffBase=D` 写入临时 JSON,调用 `agent-infra-internal git-workflow snapshot --input {file}` 一次生成覆盖完整提交范围的审查差异指纹 `F` 与当前工作区审查快照树 `T`;把 `R`、`D`、`F`、`T` 全部写入报告
77
+ - 把 `mode=worktree`、`baseline=R`、`diffBase=D` 写入临时 JSON,调用 `agent-infra-internal git-workflow snapshot --input {file}` 一次生成覆盖完整提交范围的审查差异指纹 `F` 与当前工作区审查快照树 `T`;把 M、R、D、F、T 全部写入报告
77
78
 
78
79
  > 上述事实采集完成后,先读取 `.agents/rules/review-method.md`,以其作为 readiness 证据并按 Pass 2–5 完成追踪、风险镜头、反证和归类;报告必须记录全部五遍覆盖。
79
80
  > 详细审查标准、严重程度划分和 reviewer 关注点见 `reference/review-criteria.md`。执行此步骤前先读取 `reference/review-criteria.md`。
@@ -96,7 +97,7 @@ agent-infra-internal task-snapshot {task-id} --format text
96
97
  ### 6. 更新任务状态
97
98
 
98
99
  - 报告完成后,新 finding 逐条调用 `agent-infra-internal task-ledger {task-id} finding-upsert --stage code --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}`;复核上一轮响应时调用 `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {相称证据}`。升级为 `needs-human-decision` 时,按详情块中的判断追加 `--needs-implementation true|false`。不得扫描编号或手写账本行
99
- - 全部账本写入完成后只调用一次 `agent-infra-internal task-review {task-id} finalize-summary --stage code --artifact {review-artifact} {execution-flag}`
100
+ - 全部账本写入完成后首次调用 `agent-infra-internal task-review {task-id} finalize-summary --stage code --artifact {review-artifact} {execution-flag}`;失败后是否继续编辑并重跑,必须遵循 `.agents/rules/local-artifact-repair.md`,不能把失败类型或 `changed=false` 当作自动授权
100
101
 
101
102
  从该次返回值绑定并复用以下结构化映射:
102
103
 
@@ -106,7 +107,7 @@ agent-infra-internal task-snapshot {task-id} --format text
106
107
  {unresolved-minor} = stageStatus.unresolvedFindingCounts.minor
107
108
  ```
108
109
 
109
- 该 intent 原子最终化报告摘要并返回同一次账本快照;不得再调用 `stage-status`、手工替换占位符或扫描问题清单。最终化失败或返回字段缺失时,停止在完成事件之前。以同一次返回的 `stageStatus.canAdvance` 决定 verdict 和下一步;仅 `canAdvance=true` 可用 Approved
110
+ 该 intent 原子最终化报告摘要并返回同一次账本快照;不得再调用 `stage-status`、手工替换占位符或扫描问题清单。失败后,模型只能在共享规则的机械安全门通过时修改同一个受控 artifact,并完整重跑相同 intent;每次失败都重新判断是否收敛。最终一次完整成功返回决定同一快照的 verdict 和计数:`stageStatus.canAdvance=true` 且结论为 Approved 时允许跨阶段推进;`stageStatus.canAdvance=false` 时仍须执行 `agent-infra-internal task-event {task-id} review-code.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`,使用 `changes-requested` 并路由到同阶段修订/复审(报告明确拒绝时使用 `rejected`)。失败、模型停止、无进展或紧急熔断时,不发布完成事件或跨阶段命令,但必须按 `reference/output-templates.md` 的 `repair-stop` 场景展示已有 summary/findings、artifact、实际修复次数、最后诊断和停止原因
110
111
  - 仅当 `canAdvance=true`、本轮结论为 Approved 且 `T == R^{tree}` 时写入 `last_reviewed_commit: {R}`;Approved 快照包含未提交差异时清除旧值。否则保留既有值,不得推进或清空
111
112
  - Approved 出口继续按 `reference/output-templates.md` 采集 PR 与全部 checks 事实:未提交/未推送走 `commit`,无 PR 走 `create-pr`(无 PR 流程除外),checks 未终态走 `watch-pr`,仅 `HEAD == last_reviewed_commit == PR head` 且 checks 为 `passed|no-required` 时走 `complete-task`;不得仅按审查轮次分流
112
113
  - 完成 `last_reviewed_commit` 处理后执行 `agent-infra-internal task-event {task-id} review-code.completed --agent {standard-agent-token} --artifact {review-artifact} --verdict {approved|changes-requested|rejected} --blockers {unresolved-blockers} --major {unresolved-major} --minor {unresolved-minor} --manual-validation {n} {execution-flag}`
@@ -119,7 +120,7 @@ agent-infra-internal task-snapshot {task-id} --format text
119
120
  - 调用 `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
120
121
  - 调用 `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {review-artifact} --agent {standard-agent-token}`
121
122
 
122
- 最终化 intent 会在写入摘要前检查详情块 ID;只有“一个正式 `[needs-human-decision]` 块 + 明确的简短非正式重复块”才会自动删除重复块并重新做只读检查,无法唯一判断时失败关闭。该检查或自动修复失败时,停止在完成事件之前。
123
+ 最终化 intent 会在写入摘要前检查详情块 ID;任何可见重复都返回结构化失败并保持 artifact 字节不变,由模型按共享规则判断是否进行最小编辑。无法通过安全门、诊断重复、没有实际字节变化或达到紧急熔断时,停止在完成事件之前;停止路径仍必须展示已有审查结果,不得吞掉 artifact 内容。
123
124
 
124
125
  ### 7. 完成校验
125
126
 
@@ -20,9 +20,27 @@ Prohibitions:
20
20
  - generate `{next-step-commands}` for the selected branch through the shared helper
21
21
  - The count line shows 5 numbers. Manual-validation (`{e}`) does not affect selection. `Human-decision` (`{h}`) counts this stage's `needs-human-decision` rows; because those rows are unresolved, `{h} > 0` means `canAdvance=false`. Expand the "Pending human-decision pre-block" from `.agents/rules/next-step-output.md` and show revision and re-review paths only.
22
22
 
23
+ ### Branch R: Finalization stopped with results visible
24
+
25
+ When the finalizer fails, or the model stops because of a safety gate, lack of progress, repeated diagnostics, or the emergency cap, use this branch. Do not call the shared helper or output cross-stage commands.
26
+
27
+ ```text
28
+ Task {task-id} review results were generated, but lifecycle advancement stopped.
29
+ - Review artifact: .agents/workspace/active/{task-id}/{review-artifact}
30
+ - Last valid summary/findings: {last-readable-review-result}
31
+ - Local repair attempts: {repairAttempts}
32
+ - Last diagnostic: {last-structured-diagnostic}
33
+ - Stop reason: {stop-reason}
34
+ - Completion event: not published | Cross-stage commands: not generated
35
+
36
+ Note: only lifecycle advancement stopped; the existing review result remains available. Handle it manually or rerun the current review skill.
37
+ ```
38
+
39
+ If the summary cannot be parsed safely, set `{last-readable-review-result}` to "summary could not be parsed safely" and retain the artifact path and raw structured diagnostic; do not infer counts or add a conclusion.
40
+
23
41
  ### Branch A: Approved with No Findings
24
42
 
25
- Do not route by review round. Compare reviewed snapshot tree `T` with the tree of baseline `R`, then read `prFlow` / `pr_number`; when a PR exists, call `agent-infra-internal platform-checks inspect {task-id}`. Select exactly one mutually exclusive exit:
43
+ Do not route by review round. Compare reviewed snapshot tree `T` with the tree of baseline `R`, then read `prFlow` / verified `pr_delivery_fact`; when a PR exists, call `agent-infra-internal platform-checks inspect {task-id}`. Select exactly one mutually exclusive exit:
26
44
 
27
45
  - `T != R^{tree}`: Branch A1 (commit).
28
46
  - `T == R^{tree}` without a PR: Branch A4 for `prFlow=disabled`, otherwise Branch A2 (create PR).