@fitlab-ai/agent-infra 0.9.3 → 0.9.5

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 (203) hide show
  1. package/README.md +3 -1
  2. package/README.zh-CN.md +3 -1
  3. package/bin/cli.ts +12 -0
  4. package/dist/bin/cli.js +14 -0
  5. package/dist/bin/internal-cli.js +144 -123
  6. package/dist/lib/agent-clients/adapter.js +94 -4
  7. package/dist/lib/{sandbox/credentials.js → agent-clients/adapters/claude-code-credentials.js} +4 -14
  8. package/dist/lib/agent-clients/adapters/claude-code-refresh.js +85 -0
  9. package/dist/lib/agent-clients/adapters/claude-code-sandbox.js +247 -0
  10. package/dist/lib/agent-clients/adapters/claude-code.js +17 -3
  11. package/dist/lib/agent-clients/adapters/codex-lifecycle/app-server.js +382 -0
  12. package/dist/lib/agent-clients/adapters/codex-lifecycle/evidence.js +163 -0
  13. package/dist/lib/agent-clients/adapters/codex-lifecycle/store.js +211 -0
  14. package/dist/lib/agent-clients/adapters/codex.js +2 -2
  15. package/dist/lib/agent-clients/adapters/opencode-sandbox.js +108 -0
  16. package/dist/lib/agent-clients/adapters/opencode.js +15 -3
  17. package/dist/lib/agent-clients/adapters/runtimes/claude-code.dockerfile +65 -0
  18. package/dist/lib/agent-clients/registry.js +9 -1
  19. package/dist/lib/git/worktree-identity.js +64 -0
  20. package/dist/lib/internal/codex-lifecycle.js +202 -0
  21. package/dist/lib/internal/sandbox-control.js +24 -0
  22. package/dist/lib/internal/task-activity.js +45 -13
  23. package/dist/lib/internal/task-create.js +48 -0
  24. package/dist/lib/internal/task-ledger.js +12 -3
  25. package/dist/lib/internal/task-lifecycle.js +19 -1
  26. package/dist/lib/internal/task-orchestration.js +170 -27
  27. package/dist/lib/platform/github-client.js +19 -2
  28. package/dist/lib/platform/pr-checks.js +1 -1
  29. package/dist/lib/platform/pull-requests.js +47 -1
  30. package/dist/lib/platform/releases.js +13 -5
  31. package/dist/lib/process-data/index.js +239 -0
  32. package/dist/lib/process-data/normalize.js +198 -0
  33. package/dist/lib/process-data/privacy.js +33 -0
  34. package/dist/lib/process-data/reconcile.js +95 -0
  35. package/dist/lib/process-data/repair.js +58 -0
  36. package/dist/lib/process-data/sources.js +345 -0
  37. package/dist/lib/process-data/store.js +282 -0
  38. package/dist/lib/process-data/types.js +2 -0
  39. package/dist/lib/run/index.js +4 -3
  40. package/dist/lib/run/tui.js +7 -8
  41. package/dist/lib/sandbox/agent-client-reconciler.js +26 -2
  42. package/dist/lib/sandbox/capture.js +7 -2
  43. package/dist/lib/sandbox/commands/create.js +110 -228
  44. package/dist/lib/sandbox/commands/enter.js +15 -47
  45. package/dist/lib/sandbox/commands/list-running.js +16 -6
  46. package/dist/lib/sandbox/commands/ls.js +10 -6
  47. package/dist/lib/sandbox/commands/rebuild.js +4 -3
  48. package/dist/lib/sandbox/commands/refresh.js +4 -84
  49. package/dist/lib/sandbox/commands/rm.js +24 -3
  50. package/dist/lib/sandbox/commands/show.js +12 -3
  51. package/dist/lib/sandbox/commands/start.js +7 -4
  52. package/dist/lib/sandbox/config.js +2 -0
  53. package/dist/lib/sandbox/constants.js +6 -0
  54. package/dist/lib/sandbox/control/client.js +58 -0
  55. package/dist/lib/sandbox/control/protocol.js +54 -0
  56. package/dist/lib/sandbox/control/server.js +144 -0
  57. package/dist/lib/sandbox/dockerfile.js +36 -13
  58. package/dist/lib/sandbox/mounts.js +17 -4
  59. package/dist/lib/sandbox/recovery.js +128 -5
  60. package/dist/lib/sandbox/redaction.js +12 -0
  61. package/dist/lib/sandbox/runtimes/base.dockerfile +24 -74
  62. package/dist/lib/sandbox/workspace-identity.js +95 -0
  63. package/dist/lib/sandbox/workspace-view.js +109 -0
  64. package/dist/lib/task/activity-intent.js +257 -51
  65. package/dist/lib/task/activity-log.js +32 -5
  66. package/dist/lib/task/commit-finalization.js +278 -0
  67. package/dist/lib/task/commit-intent.js +165 -0
  68. package/dist/lib/task/create-service.js +137 -0
  69. package/dist/lib/task/create.js +333 -0
  70. package/dist/lib/task/decision-intents.js +31 -17
  71. package/dist/lib/task/delegation-receipts.js +2 -2
  72. package/dist/lib/task/implementation-inputs.js +54 -7
  73. package/dist/lib/task/ledger-intents.js +35 -1
  74. package/dist/lib/task/orchestration.js +505 -34
  75. package/dist/lib/task/resolve-ref.js +41 -1
  76. package/dist/lib/task/review-fingerprint.js +4 -0
  77. package/dist/lib/task/workspace-snapshot.js +78 -3
  78. package/lib/agent-clients/adapter.ts +130 -6
  79. package/lib/{sandbox/credentials.ts → agent-clients/adapters/claude-code-credentials.ts} +3 -18
  80. package/lib/agent-clients/adapters/claude-code-refresh.ts +128 -0
  81. package/lib/agent-clients/adapters/claude-code-sandbox.ts +295 -0
  82. package/lib/agent-clients/adapters/claude-code.ts +21 -3
  83. package/lib/agent-clients/adapters/codex-lifecycle/app-server.ts +442 -0
  84. package/lib/agent-clients/adapters/codex-lifecycle/evidence.ts +307 -0
  85. package/lib/agent-clients/adapters/codex-lifecycle/store.ts +250 -0
  86. package/lib/agent-clients/adapters/codex.ts +2 -2
  87. package/lib/agent-clients/adapters/opencode-sandbox.ts +136 -0
  88. package/lib/agent-clients/adapters/opencode.ts +18 -3
  89. package/lib/agent-clients/adapters/runtimes/claude-code.dockerfile +65 -0
  90. package/lib/agent-clients/registry.ts +9 -1
  91. package/lib/git/worktree-identity.ts +86 -0
  92. package/lib/internal/codex-lifecycle.ts +204 -0
  93. package/lib/internal/sandbox-control.ts +24 -0
  94. package/lib/internal/task-activity.ts +50 -14
  95. package/lib/internal/task-create.ts +49 -0
  96. package/lib/internal/task-ledger.ts +12 -3
  97. package/lib/internal/task-lifecycle.ts +22 -1
  98. package/lib/internal/task-orchestration.ts +117 -21
  99. package/lib/platform/github-client.ts +20 -2
  100. package/lib/platform/pr-checks.ts +1 -1
  101. package/lib/platform/pull-requests.ts +49 -1
  102. package/lib/platform/releases.ts +16 -4
  103. package/lib/process-data/index.ts +224 -0
  104. package/lib/process-data/normalize.ts +202 -0
  105. package/lib/process-data/privacy.ts +41 -0
  106. package/lib/process-data/reconcile.ts +110 -0
  107. package/lib/process-data/repair.ts +64 -0
  108. package/lib/process-data/sources.ts +354 -0
  109. package/lib/process-data/store.ts +315 -0
  110. package/lib/process-data/types.ts +135 -0
  111. package/lib/run/index.ts +5 -3
  112. package/lib/run/tui.ts +11 -8
  113. package/lib/sandbox/agent-client-reconciler.ts +44 -2
  114. package/lib/sandbox/capture.ts +9 -2
  115. package/lib/sandbox/commands/create.ts +127 -260
  116. package/lib/sandbox/commands/enter.ts +13 -59
  117. package/lib/sandbox/commands/list-running.ts +23 -6
  118. package/lib/sandbox/commands/ls.ts +22 -6
  119. package/lib/sandbox/commands/rebuild.ts +4 -3
  120. package/lib/sandbox/commands/refresh.ts +4 -126
  121. package/lib/sandbox/commands/rm.ts +24 -3
  122. package/lib/sandbox/commands/show.ts +29 -3
  123. package/lib/sandbox/commands/start.ts +6 -4
  124. package/lib/sandbox/config.ts +4 -0
  125. package/lib/sandbox/constants.ts +8 -0
  126. package/lib/sandbox/control/client.ts +79 -0
  127. package/lib/sandbox/control/protocol.ts +110 -0
  128. package/lib/sandbox/control/server.ts +155 -0
  129. package/lib/sandbox/dockerfile.ts +66 -13
  130. package/lib/sandbox/mounts.ts +24 -4
  131. package/lib/sandbox/recovery.ts +163 -6
  132. package/lib/sandbox/redaction.ts +14 -0
  133. package/lib/sandbox/runtimes/base.dockerfile +24 -74
  134. package/lib/sandbox/tool-types.ts +16 -0
  135. package/lib/sandbox/workspace-identity.ts +123 -0
  136. package/lib/sandbox/workspace-view.ts +150 -0
  137. package/lib/task/activity-intent.ts +350 -61
  138. package/lib/task/activity-log.ts +46 -7
  139. package/lib/task/commit-finalization.ts +376 -0
  140. package/lib/task/commit-intent.ts +230 -0
  141. package/lib/task/create-service.ts +171 -0
  142. package/lib/task/create.ts +372 -0
  143. package/lib/task/decision-intents.ts +32 -12
  144. package/lib/task/delegation-receipts.ts +2 -2
  145. package/lib/task/implementation-inputs.ts +62 -8
  146. package/lib/task/ledger-intents.ts +43 -3
  147. package/lib/task/orchestration.ts +673 -41
  148. package/lib/task/resolve-ref.ts +46 -1
  149. package/lib/task/review-fingerprint.ts +9 -0
  150. package/lib/task/workspace-snapshot.ts +98 -4
  151. package/package.json +7 -7
  152. package/templates/.agents/hooks/lifecycle-delegation.js +47 -3
  153. package/templates/.agents/rules/README.en.md +1 -1
  154. package/templates/.agents/rules/README.zh-CN.md +1 -1
  155. package/templates/.agents/rules/human-decision-context.en.md +11 -2
  156. package/templates/.agents/rules/human-decision-context.zh-CN.md +11 -2
  157. package/templates/.agents/rules/pr-checks-commands.en.md +1 -1
  158. package/templates/.agents/rules/pr-checks-commands.github.en.md +1 -1
  159. package/templates/.agents/rules/pr-checks-commands.github.zh-CN.md +2 -2
  160. package/templates/.agents/rules/pr-checks-commands.zh-CN.md +1 -1
  161. package/templates/.agents/rules/review-handshake.zh-CN.md +1 -1
  162. package/templates/.agents/rules/task-management.en.md +3 -0
  163. package/templates/.agents/rules/task-management.zh-CN.md +3 -0
  164. package/templates/.agents/skills/code-task/SKILL.en.md +1 -1
  165. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +1 -1
  166. package/templates/.agents/skills/commit/SKILL.en.md +21 -17
  167. package/templates/.agents/skills/commit/SKILL.zh-CN.md +28 -16
  168. package/templates/.agents/skills/commit/reference/commit-orchestration.en.md +50 -0
  169. package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +56 -0
  170. package/templates/.agents/skills/commit/reference/task-status-update.en.md +4 -4
  171. package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +4 -4
  172. package/templates/.agents/skills/complete-task/SKILL.en.md +1 -1
  173. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +1 -1
  174. package/templates/.agents/skills/create-pr/SKILL.en.md +4 -4
  175. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +4 -4
  176. package/templates/.agents/skills/create-task/SKILL.en.md +26 -43
  177. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +26 -43
  178. package/templates/.agents/skills/create-task/reference/context-capture.en.md +34 -0
  179. package/templates/.agents/skills/create-task/reference/context-capture.zh-CN.md +34 -0
  180. package/templates/.agents/skills/review-code/SKILL.en.md +2 -2
  181. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +2 -2
  182. package/templates/.agents/skills/review-code/reference/output-templates.en.md +1 -1
  183. package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +1 -1
  184. package/templates/.agents/skills/review-pr/SKILL.en.md +36 -8
  185. package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +36 -8
  186. package/templates/.agents/skills/review-pr/reference/report-template.en.md +1 -1
  187. package/templates/.agents/skills/review-pr/reference/report-template.zh-CN.md +1 -1
  188. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +67 -50
  189. package/templates/.agents/skills/watch-pr/SKILL.en.md +4 -4
  190. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +4 -4
  191. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +2 -2
  192. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +2 -2
  193. package/templates/.agents/templates/task.en.md +1 -1
  194. package/templates/.agents/templates/task.zh-CN.md +1 -1
  195. package/templates/.claude/commands/watch-pr.en.md +1 -1
  196. package/templates/.claude/commands/watch-pr.zh-CN.md +1 -1
  197. package/templates/.claude/rules/tool-preferences.en.md +20 -0
  198. package/templates/.claude/rules/tool-preferences.zh-CN.md +20 -0
  199. package/templates/.codex/hooks.json +50 -0
  200. package/templates/.opencode/commands/watch-pr.en.md +1 -1
  201. package/templates/.opencode/commands/watch-pr.zh-CN.md +1 -1
  202. package/templates/.gemini/commands/_project_/review-pr.en.toml +0 -10
  203. package/templates/.gemini/commands/_project_/review-pr.zh-CN.toml +0 -10
@@ -17,7 +17,7 @@ description: >
17
17
  - 不要执行需求分析;分析由 `analyze-task` 独立完成
18
18
  - 不要直接实现所描述的功能
19
19
  - 不要跳过工作流直接进入计划/实现阶段
20
- - 仅执行:解析描述 -> 创建任务文件 -> 更新任务状态 -> 按 `.agents/rules/create-issue.md` 级联尝试创建 Issue -> 告知用户下一步
20
+ - 仅执行:解析描述 -> 一次性生成结构化 candidate -> 调用宿主 `task-create` 入口 -> 校验结果 -> 告知用户下一步
21
21
  - Issue 创建由 `.agents/rules/create-issue.md` 规则决定;自定义或空平台(未提供平台变体规则文件)时,规则会自然降级为 no-op
22
22
 
23
23
  用户的描述是一个**待办事项**,而不是**立即执行的指令**。
@@ -71,7 +71,7 @@ description: >
71
71
  - `bugfix` -> `bug-fix`
72
72
  - `refactor` -> `refactoring`
73
73
 
74
- ### 2. 创建任务目录和文件
74
+ ### 2. 生成不可变 candidate
75
75
 
76
76
  获取当前时间戳:
77
77
 
@@ -79,14 +79,17 @@ description: >
79
79
  date +%Y%m%d-%H%M%S
80
80
  ```
81
81
 
82
- - 创建任务目录:`.agents/workspace/active/TASK-{yyyyMMdd-HHmmss}/`
83
- - 使用 `.agents/templates/task.md` 模板创建任务文件:`task.md`
84
- - 将步骤 1 捕获的结构化上下文写入 `## 任务输入`,确保任务文件脱离原会话后仍可理解
82
+ - 生成随机 UUID v4 作为 `idempotencyKey`,并把步骤 1 的结果写入单个 JSON 文件。
83
+ - candidate 必须符合宿主 `TaskCreateCandidateV1`:`version`、`idempotencyKey`、标准 `agent`、`title`、`type`、不带项目前缀的 `branchSlug`、`priority`、`effort`、`description` 和 `taskInput` 七类列表。
84
+ - 首次提交前只写一次 candidate;等待终态期间不得重新运行 AI 推导或改写文件。超时重试必须复用同一文件,由客户端生成新的 outer request ID。
85
85
 
86
- **重要**:
87
- - 目录命名:`TASK-{yyyyMMdd-HHmmss}`(**必须**包含 `TASK-` 前缀)
88
- - 示例:`TASK-20260306-143022`
89
- - 任务 ID = 目录名
86
+ 调用统一入口:
87
+
88
+ ```bash
89
+ agent-infra-internal task-create --input "$candidate_file"
90
+ ```
91
+
92
+ 宿主负责 TASK-id/时间戳/版本戳、workflow/branch 派生、模板渲染、原子持久化、短号、Issue 与 warning。技能不得自行 `mkdir`、复制任务模板、分配短号或直接调用平台子命令。
90
93
 
91
94
  任务元数据(task.md YAML front matter):
92
95
  ```yaml
@@ -108,7 +111,7 @@ assigned_to: {当前 AI 代理}
108
111
 
109
112
  priority / effort 必填:由 AI 从任务标题与描述推断后填入(候选值见 `.agents/rules/issue-fields.md`;中文输入按本地化映射规范化)。start_date / target_date 创建时保持留空:`start_date` 由 analyze 阶段写入、`target_date` 由 complete 阶段写入;不要臆测日期。
110
113
 
111
- ### 3. 更新任务状态
114
+ ### 3. 处理结构化结果
112
115
 
113
116
  获取当前时间:
114
117
 
@@ -116,43 +119,25 @@ priority / effort 必填:由 AI 从任务标题与描述推断后填入(候
116
119
  date "+%Y-%m-%d %H:%M:%S%z" | sed 's/\([+-][0-9][0-9]\)\([0-9][0-9]\)$/\1:\2/'
117
120
  ```
118
121
 
119
- 更新 `.agents/workspace/active/{task-id}/task.md`:
120
- - `current_step`:requirement-analysis
121
- - `assigned_to`:{当前 AI 代理}
122
- - `updated_at`:{当前时间}
123
- - `agent_infra_version`:按 `.agents/rules/version-stamp.md` 取值
124
- - `## 上下文` 中的 `- **分支**:`:更新为生成的分支名
125
- - **追加**到 `## Activity Log`(不要覆盖之前的记录):
126
- ```
127
- - {YYYY-MM-DD HH:mm:ss±HH:MM} — **Create Task** by {agent} — Task created from description
128
- ```
122
+ - `applied` / `no-op`:从响应读取 task ID、短号与可选 Issue 身份;不得从目录扫描推断。
123
+ - `degraded`:本地任务已经保留;展示响应中的 warning。
124
+ - `blocked`:保留 candidate 文件,修复暂态问题后用同一文件重试。
125
+ - `failed`:报告稳定错误码;幂等冲突时不得改写原 key 或原 candidate 后重试。
129
126
 
130
- ### 4. 级联创建并同步 Issue
127
+ ### 4. 平台失败兼容说明
131
128
 
132
- 在 task.md 落盘并记录 `Create Task` 后调用声明式 Issue intent;标题、正文、模板、身份校验、权限降级、幂等创建和 task.md 绑定均由 internal core 处理:
129
+ 平台级联由宿主服务完成。兼容的人工恢复命令仍由宿主 warning 指引,不在沙箱内执行:
133
130
 
134
131
  ```bash
135
- agent-infra-internal platform-issue create {task-id} --agent {standard-agent-token}
136
- agent-infra-internal platform-issue sync {task-id} --agent {standard-agent-token} --status waiting-for-triage --assignees current --milestone initial --issue-type --fields
132
+ agent-infra-internal task-warning {task-id} add --step create-task --severity ACTION_REQUIRED --code ISSUE_CREATE_FAILED --target issue --message "{error_code}: {error_message}" --action "修复认证/网络/模板问题后手动重试 Issue 创建,或手动创建/找到 Issue 后写入 issue_number"
133
+ agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}
137
134
  ```
138
135
 
139
- 处理结果:
140
- - intent 成功创建 Issue:`issue_number` 已由任务写入内核回写;调用 `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
141
- - 规则失败(认证 / 网络 / 模板解析等):不回滚 task.md;不追加额外 Activity Log;先调用 `agent-infra-internal task-warning {task-id} add --step create-task --severity ACTION_REQUIRED --code ISSUE_CREATE_FAILED --target issue --message "{error_code}: {error_message}" --action "修复认证/网络/模板问题后手动重试 Issue 创建,或手动创建/找到 Issue 后写入 issue_number"` 提交结构化 warning 意图(调用方不分配编号或写表格);再按"场景 C:Issue 创建失败"输出
142
- - intent 为 no-op/degraded:按结构化 operations 继续可执行部分;自定义或空平台不创建评论且不阻塞工作流
143
- - task.md 已存在有效 `issue_number`:create intent 校验绑定后返回 no-op,不重复创建
136
+ 技能只消费宿主返回的 Issue identity、operations 与 warnings;不得重复发起平台写入。
144
137
 
145
138
  ### 5. 完成校验
146
139
 
147
- **先调用短号分配**(保证注册表 entry 已分配;完成校验阶段会读取):
148
-
149
- ```bash
150
- node .agents/scripts/task-short-id.js alloc "$task_id"
151
- ```
152
-
153
- 如失败(退出码非 0),按提示「归档若干任务」或「调高 task.shortIdLength」处理;不要继续执行后续步骤。
154
-
155
- 运行完成校验,确认任务产物和同步状态符合规范:
140
+ 宿主 `task-create` 服务在返回前运行同一 typed 完成校验;技能从响应的 `task:verify` operation 取得当次结果。branch-only 不得尝试读取不可见的新任务。宿主直接诊断时可运行:
156
141
 
157
142
  ```bash
158
143
  agent-infra-internal task-verify {task-id} create-task.completed --format text
@@ -243,12 +228,10 @@ Issue 创建失败:
243
228
 
244
229
  ## 完成检查清单
245
230
 
246
- - [ ] 创建了任务文件 `.agents/workspace/active/{task-id}/task.md`
231
+ - [ ] 只生成一次结构化 candidate 并调用 `agent-infra-internal task-create`
232
+ - [ ] 宿主创建了任务文件 `.agents/workspace/active/{task-id}/task.md`
247
233
  - [ ] 已按 `reference/context-capture.md` 写入并复核 `## 任务输入` 的来源与状态语义
248
- - [ ] 更新了 task.md 中的 `current_step` 为 requirement-analysis
249
- - [ ] 更新了 task.md 中的 `updated_at` 为当前时间
250
- - [ ] 更新了 task.md 中的 `assigned_to`
251
- - [ ] 追加了 Activity Log 条目到 task.md
234
+ - [ ] 响应中的任务 ID 和短号已通过完成校验
252
235
  - [ ] 已按 `.agents/rules/create-issue.md` 尝试级联创建 Issue;失败时保留 task.md 并记录原因
253
236
  - [ ] 已通过统一 helper 渲染已选场景的下一步命令
254
237
  - [ ] **没有修改任何业务代码或配置文件**
@@ -18,6 +18,40 @@ Faithfully condense existing information into task.md under `## Task Input`:
18
18
 
19
19
  Leave missing categories empty rather than inferring content. Deduplicate repeated information without losing its source or state.
20
20
 
21
+ ## Observable Acceptance Extraction
22
+
23
+ The following language-neutral contract is the stable boundary for capturing observable acceptance information:
24
+
25
+ ```text
26
+ # observable-acceptance-contract
27
+ sources: current-request,necessary-prior-discussion
28
+ scan-entire-visible-context: true
29
+ recognize-without-acceptance-label: true
30
+ components: observable-input,action,expected-result
31
+ combine-distributed-evidence: true
32
+ preserve-source-state: true
33
+ missing-components: preserve-as-gaps
34
+ agent-inference-as-confirmed: false
35
+ destination: task-input.acceptance-criteria
36
+ scenario-explicit: capture-supported-components
37
+ scenario-distributed: combine-supported-components
38
+ scenario-insufficient: preserve-supported-components-and-gaps
39
+ ```
40
+
41
+ Execution order:
42
+
43
+ 1. Scan the complete visible context of the current request and necessary prior discussion. Recognize observable information even when the user did not label it as acceptance criteria.
44
+ 2. Identify observable inputs, user or system actions, and expected results. These components may be distributed across turns.
45
+ 3. Combine supported components that describe the same behavior into a self-contained item, preserving the source and confirmation state of each piece of information.
46
+ 4. Preserve unexpressed components as gaps. Do not invent thresholds, scenarios, actions, or results, and do not mark agent inference as user-confirmed information.
47
+ 5. Write the items under `## Task Input / ### Acceptance Criteria`. If the context provides no observable criterion, leave that category empty and retain genuine unknowns in the existing categories.
48
+
49
+ Boundary examples:
50
+
51
+ - **Single-turn explicit information**: when the current request provides an input, action, and result, capture every supported component and identify the current request as its source.
52
+ - **Distributed information**: when the current request describes an action and necessary prior discussion provides an input or result, combine only components for the same behavior and preserve their source states separately.
53
+ - **Insufficient information**: when the user only says that something "should be faster" without an observable condition or threshold, do not invent a performance target; preserve the stated concern and gaps, leaving the acceptance category empty when no criterion can be formed.
54
+
21
55
  ## Safety and Compression
22
56
 
23
57
  - Exclude secrets, tokens, credentials, and unrelated personal information.
@@ -18,6 +18,40 @@
18
18
 
19
19
  缺失类别保持为空,不推导补齐。相同信息去重,但不得丢失来源或状态语义。
20
20
 
21
+ ## 可观察验收提取
22
+
23
+ 以下语言无关契约是可观察验收信息的稳定捕获边界:
24
+
25
+ ```text
26
+ # observable-acceptance-contract
27
+ sources: current-request,necessary-prior-discussion
28
+ scan-entire-visible-context: true
29
+ recognize-without-acceptance-label: true
30
+ components: observable-input,action,expected-result
31
+ combine-distributed-evidence: true
32
+ preserve-source-state: true
33
+ missing-components: preserve-as-gaps
34
+ agent-inference-as-confirmed: false
35
+ destination: task-input.acceptance-criteria
36
+ scenario-explicit: capture-supported-components
37
+ scenario-distributed: combine-supported-components
38
+ scenario-insufficient: preserve-supported-components-and-gaps
39
+ ```
40
+
41
+ 执行顺序:
42
+
43
+ 1. 扫描当前请求及必要前序讨论的完整可见上下文;即使用户没有使用“验收标准”标签,也要识别其中的可观察信息。
44
+ 2. 找出可观察输入、用户或系统执行的动作以及预期结果。这些组成可以分散在不同轮次。
45
+ 3. 将描述同一行为且有上下文证据的组成合并为自足条目,并保留每项信息的来源和确认状态。
46
+ 4. 未表达的组成保持为缺口;不得补造阈值、场景、动作或结果,也不得把 Agent 推导标记为用户已确认。
47
+ 5. 将条目写入 `## 任务输入 / ### 验收标准`。如果上下文没有提供可观察标准,该分类保持为空,真实的待确认信息继续保留在既有分类中。
48
+
49
+ 边界样例:
50
+
51
+ - **单轮显式信息**:当前请求同时给出输入、动作和结果时,捕获全部有证据的组成并注明来自当前请求。
52
+ - **跨轮分散信息**:当前请求描述动作、必要前序讨论提供输入或结果时,只合并属于同一行为的组成,并分别保留来源状态。
53
+ - **信息不足**:用户只说“应该更快”但没有可观察条件或阈值时,不得编造性能目标;保留已表达的关注点和缺口,无法形成标准则让验收分类为空。
54
+
21
55
  ## 安全与压缩
22
56
 
23
57
  - 排除密钥、Token、凭据和与任务无关的个人信息。
@@ -97,7 +97,7 @@ Create `.agents/workspace/active/{task-id}/{review-artifact}`.
97
97
  ### 6. Update Task Status
98
98
 
99
99
  Update task.md:
100
- - 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}`. Do not scan ids or edit ledger rows
100
+ - 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
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
102
 
103
103
  Bind and reuse this structured mapping from that one response:
@@ -110,7 +110,7 @@ Update task.md:
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
112
  - 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
- - For an Approved exit, collect PR and required-checks 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
113
+ - 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
114
  - 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}`
115
115
 
116
116
  Always include the `Manual-validation: {n}` field in the done log, including when it is 0.
@@ -95,7 +95,7 @@ agent-infra-internal task-snapshot {task-id} --format text
95
95
 
96
96
  ### 6. 更新任务状态
97
97
 
98
- - 报告完成后,新 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 {相称证据}`。不得扫描编号或手写账本行
98
+ - 报告完成后,新 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
99
  - 全部账本写入完成后只调用一次 `agent-infra-internal task-review {task-id} finalize-summary --stage code --artifact {review-artifact} {execution-flag}`
100
100
 
101
101
  从该次返回值绑定并复用以下结构化映射:
@@ -108,7 +108,7 @@ agent-infra-internal task-snapshot {task-id} --format text
108
108
 
109
109
  该 intent 原子最终化报告摘要并返回同一次账本快照;不得再调用 `stage-status`、手工替换占位符或扫描问题清单。最终化失败或返回字段缺失时,停止在完成事件之前。以同一次返回的 `stageStatus.canAdvance` 决定 verdict 和下一步;仅 `canAdvance=true` 可用 Approved
110
110
  - 仅当 `canAdvance=true`、本轮结论为 Approved 且 `T == R^{tree}` 时写入 `last_reviewed_commit: {R}`;Approved 快照包含未提交差异时清除旧值。否则保留既有值,不得推进或清空
111
- - Approved 出口继续按 `reference/output-templates.md` 采集 PR 与 required-checks 事实:未提交/未推送走 `commit`,无 PR 走 `create-pr`(无 PR 流程除外),checks 未终态走 `watch-pr`,仅 `HEAD == last_reviewed_commit == PR head` 且 checks 为 `passed|no-required` 时走 `complete-task`;不得仅按审查轮次分流
111
+ - 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
112
  - 完成 `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}`
113
113
 
114
114
  完成日志必须始终写入 `Manual-validation: {n}` 字段,0 也保留。
@@ -59,7 +59,7 @@ Next step - create a Pull Request:
59
59
  {next-step-commands}
60
60
  ```
61
61
 
62
- #### Branch A3: Watch Required Checks
62
+ #### Branch A3: Watch All Checks
63
63
 
64
64
  Populate `{next-step-commands}` for this scenario by running `agent-infra-internal agent-client next-steps --skill watch-pr --task-ref {task-ref}`.
65
65
 
@@ -59,7 +59,7 @@
59
59
  {next-step-commands}
60
60
  ```
61
61
 
62
- #### 场景 A3:监控 required checks
62
+ #### 场景 A3:监控全部 checks
63
63
 
64
64
  使用 `agent-infra-internal agent-client next-steps --skill watch-pr --task-ref {task-ref}` 生成本场景的 `{next-step-commands}`。
65
65
 
@@ -55,13 +55,32 @@ agent-infra-internal pr-review-grade resolve-host --pr {pr-number} [--cwd <path>
55
55
 
56
56
  `resolve-host` returns a typed `HostResolution` (`unique` / `ambiguous` / `none`). Branch as follows:
57
57
 
58
- - **Unique host**: bind `{task-id}` and enumerate `analysis*`/`plan*`/`code*`/`review-*`/`pr-review*` presence (go to step 2).
58
+ - **Unique host**: bind `{task-id}`, call `task-activity pr-review-inspect` to obtain the canonical round, prepared/open state, and latest successful review identity, then start this round using the recovery rules below (go to step 2).
59
59
  - **Ambiguous hosts**: `resolve-host` returns `ambiguous` and `decide` refuses to classify (fail closed). Stop and ask a human to pin the unique host; do not enter evidence classification.
60
60
  - **No host**: block by default and require linking an Issue/task first (show linking guidance); never auto-create/import an Issue. Only when the user explicitly chooses a "one-shot review" do process files land in `.agents/workspace/reviews/{pr-number}/` (`recoverable: false`).
61
61
 
62
+ After the task-anchored path resolves the host and remote head, run:
63
+
64
+ ```bash
65
+ agent-infra-internal task-activity {task-id} pr-review-inspect
66
+ ```
67
+
68
+ - `prepared`: reuse that artifact; `open` with an unchanged head: replay start for the same artifact/head (a no-op) and resume the round.
69
+ - `open` with a changed head: first set the old artifact Formal Review Status to `superseded`, then terminate it using the old artifact/head; continue with the next round returned by inspect.
70
+ - No prepared/open round: create the next artifact skeleton from `reference/report-template.md`, initially recording the state check, identity, reviewed head, and `Formal Review Status: pending`.
71
+
72
+ After this branch and before step 2 evidence grading, write started:
73
+
74
+ ```bash
75
+ agent-infra-internal task-activity {task-id} pr-review-start --agent {agent} \
76
+ --artifact {pr-review-artifact} --head {head-sha}
77
+ ```
78
+
79
+ The one-shot path never calls `task-activity`. For a controlled failure after started where the formal Review is known not to have been published, first set the artifact status to `aborted`, then call `pr-review-terminate --outcome aborted --reason <single-line>` with the same artifact/head. If publication outcome is uncertain, leave the round open rather than guessing aborted.
80
+
62
81
  ### 2. Single decide: evidence enumeration + classification + risk + mode
63
82
 
64
- Write the host, artifact presence, head state, and the six pure-evidence risk factors to an input JSON, then call once:
83
+ Write the host, artifact presence, head state, and the six pure-evidence risk factors to an input JSON. Use only the highest `applied` / `no-op` artifact returned by inspect as the prior review; pending/aborted/superseded/failed artifacts count only toward round continuity. Then call once:
65
84
 
66
85
  ```bash
67
86
  agent-infra-internal pr-review-grade decide --input-file {decide-input.json} [--cwd <path>]
@@ -71,7 +90,7 @@ Returns the full `DecisionRecord` (`scenario` / `freshness` / `alignment` / `ris
71
90
 
72
91
  ### 3. Generate `pr-review-rN.md`
73
92
 
74
- Generate this round's artifact per `reference/report-template.md`. In `reconstruct` mode (or `audit` with insufficient evidence), write a "Reconstruction Context" section (requirement boundary / architecture choices / impact surface / validation coverage, see `reference/evidence-grading.md`) before the line-level findings. Record `recoverable: true|false` in the frontmatter or header (the one-shot path sets `false`).
93
+ Complete this round's artifact per `reference/report-template.md`; the task-anchored path preserves the identity/head/pending status written in step 1 and does not reallocate the round. In `reconstruct` mode (or `audit` with insufficient evidence), write a "Reconstruction Context" section (requirement boundary / architecture choices / impact surface / validation coverage, see `reference/evidence-grading.md`) before the line-level findings. Record `recoverable: true|false` in the frontmatter or header (the one-shot path sets `false`). After finalizing the findings list, freeze `{verdict, blockers, major, minor}` once; the formal Review body and step 6 complete payload must consume that same object directly, never recounting report prose.
75
94
 
76
95
  ### 4. Sync the Issue artifact comments (task-anchored path)
77
96
 
@@ -99,18 +118,27 @@ agent-infra-internal platform-pr-review publish --pr {pr-number} --scope {taskId
99
118
  --commit {head-sha} --event {COMMENT|APPROVE|REQUEST_CHANGES} --body-file {review-body.md} [--dry-run] [--cwd <path>]
100
119
  ```
101
120
 
102
- `publish` generates and validates the marker (first line) in core and is idempotent per marker + commit (replay is a no-op; marker hit on a different commit fails stably). On head drift, stop and start a new round (re-run step 1 with round `{round}+1`).
121
+ `publish` generates and validates the marker (first line) in core and is idempotent per marker + commit (replay is a no-op; marker hit on a different commit fails stably). On head drift, first set the old artifact status to `superseded`, then close the old round:
122
+
123
+ ```bash
124
+ agent-infra-internal task-activity {task-id} pr-review-terminate --agent {agent} \
125
+ --artifact {pr-review-artifact} --head {head-sha} \
126
+ --outcome superseded --reason "head changed before publish"
127
+ ```
128
+
129
+ After closure, re-run step 1 for the next canonical round; never start the new round first. If the remote outcome of `publish` is uncertain, keep the round open and recover through marker + commit idempotency on retry.
103
130
 
104
131
  ### 6. Write back the publication result and task state
105
132
 
106
- - **Task-anchored path**: write the Review ID/URL into the `pr-review-rN.md` "Publication Result" section and append the Activity Log entry:
133
+ - **Task-anchored path**: after publish returns `applied` / `no-op`, write the Review ID/URL and matching Formal Review Status into the `pr-review-rN.md` "Publication Result" section, then close the Activity Log with the exact verdict/counts frozen in step 3:
107
134
 
108
135
  ```bash
109
- agent-infra-internal task-activity {task-id} append --step "Review PR (Round {round})" --agent {agent} \
110
- --note "receipt {receipt} · Review URL {review-url}" --artifact {pr-review-artifact}
136
+ agent-infra-internal task-activity {task-id} pr-review-complete --agent {agent} \
137
+ --artifact {pr-review-artifact} --head {head-sha} --verdict {approved|changes-requested|commented} \
138
+ --blockers {blockers} --major {major} --minor {minor}
111
139
  ```
112
140
 
113
- `task-activity` atomically completes the Activity Log append, the `## Review Feedback` link, and the version-stamp refresh via `writeTask`; it never changes `current_step`.
141
+ `task-activity` generates `Verdict: <result>, blockers: N, major: N, minor: N → {pr-review-artifact}` from the typed payload and atomically writes the Activity Log, `## Review Feedback` link, and version stamp through `writeTask`. It never changes `current_step` or puts receipt/head/Review URL into the NOTE.
114
142
 
115
143
  - **One-shot path (no task)**: write the Review ID/URL only into the `pr-review-rN.md` "Publication Result" section; do not call `task-activity`.
116
144
 
@@ -55,13 +55,32 @@ agent-infra-internal pr-review-grade resolve-host --pr {pr-number} [--cwd <path>
55
55
 
56
56
  `resolve-host` 输出 `HostResolution`(`unique` / `ambiguous` / `none`),按以下策略分流:
57
57
 
58
- - **唯一宿主**:绑定 `{task-id}`,用 artifact 枚举确定 `analysis*`/`plan*`/`code*`/`review-*`/`pr-review*` 的存在性(进入步骤 2)。
58
+ - **唯一宿主**:绑定 `{task-id}`,调用 `task-activity pr-review-inspect` 取得 canonical round、prepared/open 状态和最近成功审查身份,再按下述恢复规则开始本轮(进入步骤 2)。
59
59
  - **多宿主歧义**:`resolve-host` 返回 `ambiguous`,`decide` 会拒绝分类(fail closed)。立即停止并提示人工指定唯一宿主;不进入证据分类。
60
60
  - **无宿主**:默认阻塞,要求先建立 Issue/task 关联(给出关联指引),不自动创建/导入 Issue。仅当用户显式选择「仅一次性检视」时,过程文件写入 `.agents/workspace/reviews/{pr-number}/`(`recoverable: false`)。
61
61
 
62
+ 任务锚定路径在宿主与远端 head 确定后执行:
63
+
64
+ ```bash
65
+ agent-infra-internal task-activity {task-id} pr-review-inspect
66
+ ```
67
+
68
+ - `prepared`:复用该 artifact;`open` 且 head 未变:对同一 artifact/head 重放 start(no-op)并恢复该轮。
69
+ - `open` 且 head 已变:先把旧 artifact 的正式 Review 状态写为 `superseded`,再用旧 artifact/head 执行 terminate;随后使用 inspect 返回的 next round。
70
+ - 无 prepared/open:按 `reference/report-template.md` 创建 next artifact 骨架,先写状态核对、身份信息、被审 head 与 `正式 Review 状态: pending`。
71
+
72
+ 在上述分流完成后、步骤 2 证据分级开始前写 started:
73
+
74
+ ```bash
75
+ agent-infra-internal task-activity {task-id} pr-review-start --agent {agent} \
76
+ --artifact {pr-review-artifact} --head {head-sha}
77
+ ```
78
+
79
+ 一次性路径不调用 `task-activity`。任意 started 后、正式 Review 明确尚未发布的受控失败,都先把 artifact 状态写为 `aborted`,再以同一 artifact/head 调用 `pr-review-terminate --outcome aborted --reason <single-line>`;发布结果不确定时保持 open,不臆断 aborted。
80
+
62
81
  ### 2. 单次 decide:证据枚举 + 场景分类 + 风险分级 + 模式选择
63
82
 
64
- 把宿主、artifact 存在性、head 状态与六个纯证据风险因素写入输入 JSON,调用一次:
83
+ 把宿主、artifact 存在性、head 状态与六个纯证据风险因素写入输入 JSON。prior review 只使用 inspect 返回的最高 `applied` / `no-op` artifact;pending/aborted/superseded/failed 只参与 round 连续性,不作为既有结论。调用一次:
65
84
 
66
85
  ```bash
67
86
  agent-infra-internal pr-review-grade decide --input-file {decide-input.json} [--cwd <path>]
@@ -71,7 +90,7 @@ agent-infra-internal pr-review-grade decide --input-file {decide-input.json} [--
71
90
 
72
91
  ### 3. 生成 `pr-review-rN.md`
73
92
 
74
- 按 `reference/report-template.md` 生成本轮产物。`reconstruct`(或 `audit` 证据不足)时,在行级 finding 之前先写「重建上下文」段(需求边界 / 架构选择 / 影响面 / 验证覆盖,见 `reference/evidence-grading.md`)。frontmatter 或首部记录 `recoverable: true|false`(一次性路径为 `false`)。
93
+ 按 `reference/report-template.md` 完成本轮产物;任务锚定路径保留步骤 1 已写入的身份/head/pending 状态,不重新分配 round。`reconstruct`(或 `audit` 证据不足)时,在行级 finding 之前先写「重建上下文」段(需求边界 / 架构选择 / 影响面 / 验证覆盖,见 `reference/evidence-grading.md`)。frontmatter 或首部记录 `recoverable: true|false`(一次性路径为 `false`)。完成最终问题清单后,一次性冻结 `{verdict, blockers, major, minor}`;正式 Review 正文与步骤 6 的 complete payload 必须直接复用该对象,不从报告文案反向统计。
75
94
 
76
95
  ### 4. 同步 Issue artifact 评论(任务锚定路径)
77
96
 
@@ -99,18 +118,27 @@ agent-infra-internal platform-pr-review publish --pr {pr-number} --scope {taskId
99
118
  --commit {head-sha} --event {COMMENT|APPROVE|REQUEST_CHANGES} --body-file {review-body.md} [--dry-run] [--cwd <path>]
100
119
  ```
101
120
 
102
- `publish` 由 core 生成并校验 marker(首行),按 marker + commit 幂等(重放 no-op;marker 命中但 commit 不一致稳定失败)。head 漂移则停止并转入新轮次(重新执行步骤 1,轮次 `{round}+1`)。
121
+ `publish` 由 core 生成并校验 marker(首行),按 marker + commit 幂等(重放 no-op;marker 命中但 commit 不一致稳定失败)。head 漂移时,先把旧 artifact 状态写为 `superseded`,再闭合旧轮:
122
+
123
+ ```bash
124
+ agent-infra-internal task-activity {task-id} pr-review-terminate --agent {agent} \
125
+ --artifact {pr-review-artifact} --head {head-sha} \
126
+ --outcome superseded --reason "head changed before publish"
127
+ ```
128
+
129
+ 闭合成功后重新执行步骤 1,进入下一 canonical round;不得先写新轮 started。若 publish 调用的远端结果不确定,保留 open 并在重试时依赖 marker + commit 恢复。
103
130
 
104
131
  ### 6. 回写发布结果与任务状态
105
132
 
106
- - **任务锚定路径**:把 Review ID/URL 写入 `pr-review-rN.md`「发布结果」段,并追加活动日志:
133
+ - **任务锚定路径**:publish 返回 `applied` / `no-op` 后,把 Review ID/URL 与同名正式 Review 状态写入 `pr-review-rN.md`「发布结果」段,再以步骤 3 冻结的同一组 verdict/counts 闭合活动日志:
107
134
 
108
135
  ```bash
109
- agent-infra-internal task-activity {task-id} append --step "Review PR (Round {round})" --agent {agent} \
110
- --note "receipt {receipt} · Review URL {review-url}" --artifact {pr-review-artifact}
136
+ agent-infra-internal task-activity {task-id} pr-review-complete --agent {agent} \
137
+ --artifact {pr-review-artifact} --head {head-sha} --verdict {approved|changes-requested|commented} \
138
+ --blockers {blockers} --major {major} --minor {minor}
111
139
  ```
112
140
 
113
- `task-activity` 经 `writeTask` 原子完成 Activity Log 追加、`## 审查反馈` 链接与版本戳刷新;不改 `current_step`。
141
+ `task-activity` 由 typed payload 生成 `Verdict: <结论>, blockers: N, major: N, minor: N → {pr-review-artifact}`,并经 `writeTask` 原子完成 Activity Log、`## 审查反馈` 链接与版本戳刷新;不改 `current_step`,也不把 receipt/head/Review URL 写入 NOTE。
114
142
 
115
143
  - **一次性路径(无任务)**:Review ID/URL 只写 `pr-review-rN.md`「发布结果」段,不调用 `task-activity`。
116
144
 
@@ -69,7 +69,7 @@ Land the following in order before the line-level findings, without impersonatin
69
69
 
70
70
  ## Publication Result
71
71
 
72
- - **Formal Review Status**: {applied / no-op / blocked / failed}
72
+ - **Formal Review Status**: {pending / applied / no-op / aborted / superseded / blocked / failed}
73
73
  - **Review ID**: {review-id or N/A}
74
74
  - **Review URL**: {review-url or N/A}
75
75
  - **Issue Artifact Comment URL**: {comment-url or N/A}
@@ -69,7 +69,7 @@
69
69
 
70
70
  ## 发布结果
71
71
 
72
- - **正式 Review 状态**:{applied / no-op / blocked / failed}
72
+ - **正式 Review 状态**:{pending / applied / no-op / aborted / superseded / blocked / failed}
73
73
  - **Review ID**:{review-id 或 N/A}
74
74
  - **Review URL**:{review-url 或 N/A}
75
75
  - **Issue artifact 评论 URL**:{comment-url 或 N/A}