@fitlab-ai/agent-infra 0.9.15 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.js +6 -2
  2. package/dist/lib/agent-clients/adapters/codex-lifecycle/store.js +43 -3
  3. package/dist/lib/fs/durable-write.js +2 -0
  4. package/dist/lib/internal/cli-route-inventory.js +1 -1
  5. package/dist/lib/internal/manual-validation.js +17 -8
  6. package/dist/lib/internal/task-artifact.js +1 -1
  7. package/dist/lib/internal/task-lifecycle.js +2 -2
  8. package/dist/lib/internal/task-operation-registry.js +0 -1
  9. package/dist/lib/internal/task-review.js +4 -4
  10. package/dist/lib/platform/issue-comments.js +16 -10
  11. package/dist/lib/platform/issues.js +1 -1
  12. package/dist/lib/platform/pr-change-report.js +5 -4
  13. package/dist/lib/platform/pr-summary.js +64 -32
  14. package/dist/lib/platform/pull-requests.js +3 -3
  15. package/dist/lib/platform/task-identities.js +2 -9
  16. package/dist/lib/platform/verification-sync.js +6 -2
  17. package/dist/lib/pr-review/evidence-grading.js +4 -8
  18. package/dist/lib/sandbox/commands/rm.js +21 -2
  19. package/dist/lib/sandbox/control/server.js +29 -9
  20. package/dist/lib/sandbox/control/state.js +7 -1
  21. package/dist/lib/sandbox/control/workflow-executor.js +4 -14
  22. package/dist/lib/sandbox/index.js +1 -2
  23. package/dist/lib/sandbox/removal.js +116 -1011
  24. package/dist/lib/sandbox/workspace-identity.js +17 -1
  25. package/dist/lib/task/artifact-command.js +6 -28
  26. package/dist/lib/task/artifact-operations.js +16 -230
  27. package/dist/lib/task/artifact-recovery.js +430 -0
  28. package/dist/lib/task/artifact-repair-intent.js +73 -39
  29. package/dist/lib/task/commit-operation.js +31 -4
  30. package/dist/lib/task/control-authority.js +38 -7
  31. package/dist/lib/task/control-recovery.js +14 -2
  32. package/dist/lib/task/create-service.js +1 -8
  33. package/dist/lib/task/delegation-receipts.js +64 -3
  34. package/dist/lib/task/events.js +164 -22
  35. package/dist/lib/task/human-override.js +5 -8
  36. package/dist/lib/task/intermediate-cleanup.js +66 -8
  37. package/dist/lib/task/lifecycle-recovery.js +549 -0
  38. package/dist/lib/task/lifecycle.js +12 -3
  39. package/dist/lib/task/local-artifact-finalization.js +148 -123
  40. package/dist/lib/task/manual-validation-receipt.js +5 -1
  41. package/dist/lib/task/orchestration.js +52 -2
  42. package/dist/lib/task/pr-delivery-fact.js +12 -56
  43. package/dist/lib/task/recovery-warning.js +19 -0
  44. package/dist/lib/task/review-command.js +1 -0
  45. package/dist/lib/task/review-finalization.js +104 -77
  46. package/dist/lib/task/short-id.js +15 -7
  47. package/dist/lib/task/task-execution-lock.js +1 -1
  48. package/dist/lib/task/verification-engine.js +3 -14
  49. package/dist/lib/task/workflow-command.js +0 -1
  50. package/dist/lib/version.js +1 -11
  51. package/dist/lifecycle-build-manifest.json +3 -3
  52. package/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.ts +7 -2
  53. package/lib/agent-clients/adapters/codex-lifecycle/store.ts +55 -3
  54. package/lib/fs/durable-write.ts +1 -0
  55. package/lib/internal/cli-route-inventory.ts +1 -1
  56. package/lib/internal/manual-validation.ts +17 -8
  57. package/lib/internal/task-artifact.ts +1 -1
  58. package/lib/internal/task-lifecycle.ts +4 -3
  59. package/lib/internal/task-operation-registry.ts +0 -1
  60. package/lib/internal/task-review.ts +4 -4
  61. package/lib/platform/issue-comments.ts +18 -10
  62. package/lib/platform/issues.ts +1 -1
  63. package/lib/platform/pr-change-report.ts +7 -5
  64. package/lib/platform/pr-summary.ts +64 -32
  65. package/lib/platform/pull-requests.ts +3 -3
  66. package/lib/platform/task-identities.ts +3 -14
  67. package/lib/platform/verification-sync.ts +6 -2
  68. package/lib/pr-review/evidence-grading.ts +4 -9
  69. package/lib/sandbox/commands/rm.ts +34 -2
  70. package/lib/sandbox/control/protocol.ts +5 -0
  71. package/lib/sandbox/control/server.ts +30 -10
  72. package/lib/sandbox/control/state.ts +9 -1
  73. package/lib/sandbox/control/workflow-executor.ts +4 -14
  74. package/lib/sandbox/index.ts +1 -2
  75. package/lib/sandbox/removal.ts +126 -1128
  76. package/lib/sandbox/workspace-identity.ts +19 -3
  77. package/lib/task/artifact-command.ts +8 -27
  78. package/lib/task/artifact-operations.ts +21 -251
  79. package/lib/task/artifact-recovery.ts +519 -0
  80. package/lib/task/artifact-repair-intent.ts +99 -51
  81. package/lib/task/commit-operation.ts +35 -4
  82. package/lib/task/control-authority.ts +47 -14
  83. package/lib/task/control-recovery.ts +13 -1
  84. package/lib/task/create-service.ts +1 -10
  85. package/lib/task/delegation-receipts.ts +73 -2
  86. package/lib/task/events.ts +187 -23
  87. package/lib/task/human-override.ts +5 -8
  88. package/lib/task/intermediate-cleanup.ts +50 -12
  89. package/lib/task/lifecycle-recovery.ts +691 -0
  90. package/lib/task/lifecycle.ts +13 -4
  91. package/lib/task/local-artifact-finalization.ts +176 -132
  92. package/lib/task/manual-validation-receipt.ts +5 -1
  93. package/lib/task/orchestration.ts +65 -0
  94. package/lib/task/pr-delivery-fact.ts +15 -62
  95. package/lib/task/recovery-warning.ts +21 -0
  96. package/lib/task/review-command.ts +1 -0
  97. package/lib/task/review-finalization.ts +106 -87
  98. package/lib/task/short-id.ts +27 -5
  99. package/lib/task/task-execution-lock.ts +1 -1
  100. package/lib/task/verification-engine.ts +3 -17
  101. package/lib/task/verification-types.ts +0 -2
  102. package/lib/task/workflow-command.ts +0 -1
  103. package/lib/version.ts +1 -15
  104. package/package.json +1 -1
  105. package/templates/.agents/rules/create-issue.en.md +1 -1
  106. package/templates/.agents/rules/create-issue.zh-CN.md +1 -1
  107. package/templates/.agents/rules/issue-sync.en.md +4 -2
  108. package/templates/.agents/rules/issue-sync.zh-CN.md +4 -3
  109. package/templates/.agents/rules/local-artifact-repair.en.md +46 -39
  110. package/templates/.agents/rules/local-artifact-repair.zh-CN.md +43 -36
  111. package/templates/.agents/skills/analyze-task/SKILL.en.md +6 -6
  112. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +6 -6
  113. package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -1
  114. package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -1
  115. package/templates/.agents/skills/block-task/SKILL.en.md +2 -2
  116. package/templates/.agents/skills/block-task/SKILL.zh-CN.md +2 -2
  117. package/templates/.agents/skills/block-task/config/verify.json +1 -1
  118. package/templates/.agents/skills/cancel-task/SKILL.en.md +3 -3
  119. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +3 -3
  120. package/templates/.agents/skills/cancel-task/config/verify.json +1 -1
  121. package/templates/.agents/skills/code-task/SKILL.en.md +7 -7
  122. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +7 -7
  123. package/templates/.agents/skills/code-task/config/verify.en.json +1 -1
  124. package/templates/.agents/skills/code-task/config/verify.zh-CN.json +1 -1
  125. package/templates/.agents/skills/commit/reference/issue-metadata-sync.en.md +1 -1
  126. package/templates/.agents/skills/commit/reference/issue-metadata-sync.zh-CN.md +1 -1
  127. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +1 -1
  128. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +1 -1
  129. package/templates/.agents/skills/complete-task/SKILL.en.md +2 -2
  130. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +2 -2
  131. package/templates/.agents/skills/complete-task/config/verify.en.json +2 -2
  132. package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +2 -2
  133. package/templates/.agents/skills/complete-task/reference/external-delivery.en.md +1 -1
  134. package/templates/.agents/skills/complete-task/reference/external-delivery.zh-CN.md +1 -1
  135. package/templates/.agents/skills/create-pr/SKILL.en.md +2 -2
  136. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +2 -2
  137. package/templates/.agents/skills/create-pr/config/verify.json +1 -1
  138. package/templates/.agents/skills/create-pr/reference/pr-body-template.en.md +2 -2
  139. package/templates/.agents/skills/create-pr/reference/pr-body-template.zh-CN.md +2 -2
  140. package/templates/.agents/skills/create-task/SKILL.en.md +5 -5
  141. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +5 -5
  142. package/templates/.agents/skills/create-task/config/verify.json +1 -1
  143. package/templates/.agents/skills/import-issue/SKILL.en.md +8 -8
  144. package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +8 -8
  145. package/templates/.agents/skills/import-issue/config/verify.json +2 -2
  146. package/templates/.agents/skills/plan-task/SKILL.en.md +4 -4
  147. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +4 -4
  148. package/templates/.agents/skills/plan-task/config/verify.en.json +1 -1
  149. package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +1 -1
  150. package/templates/.agents/skills/restore-task/SKILL.en.md +2 -2
  151. package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +2 -2
  152. package/templates/.agents/skills/restore-task/config/verify.json +1 -1
  153. package/templates/.agents/skills/review-analysis/SKILL.en.md +2 -2
  154. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +2 -2
  155. package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -1
  156. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -1
  157. package/templates/.agents/skills/review-analysis/reference/report-template.en.md +7 -7
  158. package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +6 -6
  159. package/templates/.agents/skills/review-code/SKILL.en.md +2 -2
  160. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +2 -2
  161. package/templates/.agents/skills/review-code/config/verify.en.json +1 -1
  162. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -1
  163. package/templates/.agents/skills/review-code/reference/report-template.en.md +12 -12
  164. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +12 -12
  165. package/templates/.agents/skills/review-plan/SKILL.en.md +2 -2
  166. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +2 -2
  167. package/templates/.agents/skills/review-plan/config/verify.en.json +1 -1
  168. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -1
  169. package/templates/.agents/skills/review-plan/reference/report-template.en.md +7 -7
  170. package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +7 -7
  171. package/templates/.agents/skills/review-pr/config/verify.en.json +1 -1
  172. package/templates/.agents/skills/review-pr/config/verify.zh-CN.json +1 -1
  173. package/templates/.agents/skills/review-pr/reference/evidence-grading.en.md +3 -3
  174. package/templates/.agents/skills/review-pr/reference/evidence-grading.zh-CN.md +3 -3
  175. package/templates/.agents/skills/run-manual-validation/config/verify.en.json +1 -1
  176. package/templates/.agents/skills/run-manual-validation/config/verify.zh-CN.json +1 -1
  177. package/templates/.agents/skills/run-task/SKILL.en.md +1 -1
  178. package/templates/.agents/skills/run-task/SKILL.zh-CN.md +1 -1
  179. package/templates/.agents/templates/task.en.md +1 -1
  180. package/templates/.agents/templates/task.zh-CN.md +1 -1
  181. package/templates/.claude/commands/import-issue.en.md +1 -1
  182. package/templates/.claude/commands/import-issue.zh-CN.md +1 -1
  183. package/templates/.claude/commands/restore-task.en.md +1 -1
  184. package/templates/.claude/commands/restore-task.zh-CN.md +1 -1
@@ -114,7 +114,7 @@ Before writing this round's `{plan-artifact}`, create the controlled report skel
114
114
  agent-infra-internal task-artifact {task-id} init --family plan --artifact {plan-artifact} --locale en
115
115
  ```
116
116
 
117
- The skeleton contains identity metadata, stable section markers, and required headings only; real plan content is required before the completion gate can pass. If the finalizer returns one provably safe structural error, call `task-artifact {task-id} repair --family plan --artifact {plan-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`, then rerun the same finalizer.
117
+ The skeleton contains identity metadata, stable section markers, and required headings only; real plan content is required before the completion gate can pass. If the finalizer returns one provably safe structural error, it returns a controlled recovery candidate; edit only its `candidatePath`, then rerun `task-artifact {task-id} finalize-local --family plan --artifact {plan-artifact} --recovery-id {recovery-id}` with the same `recoveryId`. Candidate-only is a protocol authorization boundary, not OS isolation; arbitrary same-UID host writers are outside the protocol's protection claim, and fingerprint/state checks fail closed on anomalies.
118
118
 
119
119
  Create `.agents/workspace/active/{task-id}/{plan-artifact}`.
120
120
 
@@ -135,14 +135,14 @@ agent-infra-internal task-artifact {task-id} finalize-local --family plan --arti
135
135
  ```
136
136
 
137
137
  - On `status=passed`, save that result's `artifactSha256` and `semanticDigest`; the finalizer has recorded the matching one-shot local provenance intent.
138
- - On `status=failed` with `repairable=true`, apply only the diagnostic's `replace-line` operation once, then rerun the same command completely; count an attempt only after bytes change, up to 8 attempts.
139
- - The first repairable failure's `semanticDigest` is retained as the baseline; a retried `status=passed` result must match it. On baseline mismatch, any other failure, no progress, or a repeated diagnostic, stop without publishing a completed event.
138
+ - On `status=failed` with recovery context, edit only the returned `candidatePath` once after the completion gates pass, then rerun the finalizer completely with the same `recoveryId`; the formal artifact must remain unchanged until commit.
139
+ - The recovery candidate must match the recorded task, round, artifact, baseline, and request identity. On baseline conflict, unknown state, no progress, or repeated failure, stop without publishing a completed event.
140
140
 
141
141
  Use the digests from that same `status=passed` result in `agent-infra-internal task-event {task-id} plan.completed --agent {standard-agent-token} --initiator {trigger-initiator} --request-id {request-id} --reason-code {reason-code} --artifact {plan-artifact} --artifact-sha256 {artifact-sha256} --semantic-digest {semantic-digest} {execution-flag}` so the core records the link, stage, agent, metadata, and Activity Log atomically.
142
142
  - {YYYY-MM-DD HH:mm:ss±HH:MM} — **Plan Task (Round {N})** by {agent} — Plan completed, awaiting human review → {artifact-filename}
143
143
  ```
144
144
 
145
- If task.md contains a valid `issue_number`, perform these sync actions (skip and continue on any failure):
145
+ If task.md contains a valid `platform_issue_identity`, perform these sync actions (skip and continue on any failure):
146
146
  - Run `agent-infra-internal platform-issue sync {task-id} --agent {standard-agent-token} --status pending-design-work --fields`
147
147
  - Run `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
148
148
  - Run `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {plan-artifact} --agent {standard-agent-token}`
@@ -117,7 +117,7 @@ agent-infra-internal task-event {task-id} plan.started --agent {standard-agent-t
117
117
  agent-infra-internal task-artifact {task-id} init --family plan --artifact {plan-artifact}
118
118
  ```
119
119
 
120
- 骨架只包含身份元数据、稳定 section marker 和必需标题;必须填入真实方案内容后才能通过完成门禁。finalizer 返回可证明的单个结构错误时,使用其 SHA 和 semantic digest 调用 `task-artifact {task-id} repair --family plan --artifact {plan-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`,然后完整重跑 finalizer。
120
+ 骨架只包含身份元数据、稳定 section marker 和必需标题;必须填入真实方案内容后才能通过完成门禁。finalizer 返回可证明的单个结构错误时,会返回受控 recovery candidate;只能编辑返回的 `candidatePath`,然后使用同一个 `recoveryId` 重跑 `task-artifact {task-id} finalize-local --family plan --artifact {plan-artifact} --recovery-id {recovery-id}`。candidate-only 是协议授权边界,不是操作系统隔离;同 UID 的任意宿主写入者不在本协议的防护承诺内,异常由指纹/状态校验失败关闭。
121
121
 
122
122
  创建 `.agents/workspace/active/{task-id}/{plan-artifact}`。
123
123
 
@@ -134,11 +134,11 @@ agent-infra-internal task-artifact {task-id} init --family plan --artifact {plan
134
134
  agent-infra-internal task-artifact {task-id} finalize-local --family plan --artifact {plan-artifact}
135
135
  ```
136
136
  - `status=passed`:保存本次返回的 `artifactSha256` 和 `semanticDigest`;finalizer 已记录对应的一次性本地 provenance intent。
137
- - `status=failed` 且 `repairable=true`:仅按诊断中的 `replace-line` 操作做一次最小修改,然后完整重跑同一命令;实际字节发生变化才计一次 `repairAttempts`,最多 8 次。
138
- - 首次可修复失败的 `semanticDigest` 由 finalizer 保留为基线;重试后的 `status=passed` 必须匹配该基线。基线不匹配、其他失败、无进展或重复诊断:停止,不发布 completed 事件。
137
+ - `status=failed` 且返回 recovery context:完成门禁通过后,只编辑返回的 `candidatePath` 一次,然后使用同一个 `recoveryId` 完整重跑 finalizer;formal artifact 在 commit 前必须保持不变。
138
+ - recovery candidate 必须与记录的任务、轮次、产物、baseline 和 request identity 匹配;基线冲突、未知状态、无进展或重复失败:停止,不发布 completed 事件。
139
139
  - 使用同一次 `status=passed` 返回的摘要执行 `agent-infra-internal task-event {task-id} plan.completed --agent {standard-agent-token} --initiator {trigger-initiator} --request-id {request-id} --reason-code {reason-code} --artifact {plan-artifact} --artifact-sha256 {artifact-sha256} --semantic-digest {semantic-digest} {execution-flag}`,由核心登记链接、阶段、代理、时间、版本和 Activity Log。
140
140
 
141
- 如果 task.md 中存在有效的 `issue_number`,执行以下同步操作(任一失败则跳过并继续):
141
+ 如果 task.md 中存在有效的 `platform_issue_identity`,执行以下同步操作(任一失败则跳过并继续):
142
142
  - 调用 `agent-infra-internal platform-issue sync {task-id} --agent {standard-agent-token} --status pending-design-work --fields`
143
143
  - 调用 `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
144
144
  - 调用 `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {plan-artifact} --agent {standard-agent-token}`
@@ -28,7 +28,7 @@
28
28
  ]
29
29
  },
30
30
  "platform-sync": {
31
- "when": "issue_number_exists",
31
+ "when": "platform_issue_identity_exists",
32
32
  "expected_status_label": "status: pending-design-work",
33
33
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
34
  "verify_comment_content": true,
@@ -28,7 +28,7 @@
28
28
  ]
29
29
  },
30
30
  "platform-sync": {
31
- "when": "issue_number_exists",
31
+ "when": "platform_issue_identity_exists",
32
32
  "expected_status_label": "status: pending-design-work",
33
33
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
34
  "verify_comment_content": true,
@@ -33,7 +33,7 @@ Comment parsing must not write the formal active directory. Step 6 declares one
33
33
  ### 1. Verify Input and Environment
34
34
 
35
35
  Check:
36
- - required `{issue-number}`
36
+ - required `{issue-token}`
37
37
  - optional `{task-id}`
38
38
  - read `.agents/rules/issue-pr-commands.md` first and use its authentication commands to verify current platform access
39
39
 
@@ -41,7 +41,7 @@ If the user provided `{task-id}`, validate the `TASK-{yyyyMMdd-HHmmss}` format.
41
41
 
42
42
  ### 2. Fetch Issue Comments
43
43
 
44
- Run `agent-infra-internal platform-comment list --issue {issue-number}` to read all paginated comments while preserving order and comment IDs; the intent owns platform context, authentication, and upstream resolution.
44
+ Run `agent-infra-internal platform-comment list --issue {issue-token}` to read all paginated comments while preserving order and comment IDs; the intent owns platform context, authentication, and upstream resolution.
45
45
 
46
46
  ### 3. Determine the task-id and Files to Restore
47
47
 
@@ -32,7 +32,7 @@ description: >
32
32
  ### 1. 验证输入与环境
33
33
 
34
34
  检查:
35
- - 必填参数 `{issue-number}`
35
+ - 必填参数 `{issue-token}`
36
36
  - 可选参数 `{task-id}`
37
37
  - 执行前先读取 `.agents/rules/issue-pr-commands.md`,并按其中的认证命令验证当前平台访问能力
38
38
 
@@ -40,7 +40,7 @@ description: >
40
40
 
41
41
  ### 2. 获取 Issue 评论
42
42
 
43
- 调用 `agent-infra-internal platform-comment list --issue {issue-number}` 读取全部分页评论,保留原始顺序和评论 ID;平台上下文、认证和 upstream 由 internal intent 处理。
43
+ 调用 `agent-infra-internal platform-comment list --issue {issue-token}` 读取全部分页评论,保留原始顺序和评论 ID;平台上下文、认证和 upstream 由 internal intent 处理。
44
44
 
45
45
  ### 3. 确定 task-id 与待恢复文件
46
46
 
@@ -14,7 +14,7 @@
14
14
  "assigned_to"
15
15
  ],
16
16
  "expected_status": "active",
17
- "require_issue_number": true
17
+ "require_platform_issue_identity": true
18
18
  },
19
19
  "activity-log": {
20
20
  "expected_action_pattern": "Restore Task"
@@ -75,7 +75,7 @@ Before writing this round's `{review-artifact}`, create the controlled review sk
75
75
  agent-infra-internal task-artifact {task-id} init --family review-analysis --artifact {review-artifact} --locale en
76
76
  ```
77
77
 
78
- The skeleton contains identity metadata, stable section markers, and required headings only; complete review content is required before summary finalization. If structural finalization returns one provably safe error, call `task-artifact {task-id} repair --family review-analysis --artifact {review-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`, then rerun the original finalizer.
78
+ The skeleton contains identity metadata, stable section markers, and required headings only; complete review content is required before summary finalization. If structural finalization returns one provably safe error, it returns a controlled recovery candidate; edit only its `candidatePath`, then rerun the original finalizer with the same `recoveryId`. Candidate-only is a protocol authorization boundary, not OS isolation; arbitrary same-UID host writers are outside the protocol's protection claim, and fingerprint/state checks fail closed on anomalies.
79
79
 
80
80
  Create `.agents/workspace/active/{task-id}/{review-artifact}`.
81
81
 
@@ -97,7 +97,7 @@ The intent atomically finalizes the report summary and returns the same ledger s
97
97
 
98
98
  `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.
99
99
 
100
- 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}`.
100
+ If task.md has a valid `platform_issue_identity`, 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}`.
101
101
 
102
102
  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.
103
103
 
@@ -78,7 +78,7 @@ agent-infra-internal task-snapshot {task-id} --format text
78
78
  agent-infra-internal task-artifact {task-id} init --family review-analysis --artifact {review-artifact}
79
79
  ```
80
80
 
81
- 骨架不生成审查结论、发现或计数;完成审查内容后才能进入 summary finalizer。结构 finalizer 返回可证明的单个错误时,使用其 SHA 和 semantic digest 调用 `task-artifact {task-id} repair --family review-analysis --artifact {review-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`,再重跑原 finalizer。
81
+ 骨架不生成审查结论、发现或计数;完成审查内容后才能进入 summary finalizer。结构 finalizer 返回可证明的单个错误时,会返回受控 recovery candidate;只能编辑返回的 `candidatePath`,然后使用同一个 `recoveryId` 重跑原 finalizer。candidate-only 是协议授权边界,不是操作系统隔离;同 UID 的任意宿主写入者不在本协议的防护承诺内,异常由指纹/状态校验失败关闭。
82
82
 
83
83
  创建 `.agents/workspace/active/{task-id}/{review-artifact}`。
84
84
 
@@ -100,7 +100,7 @@ agent-infra-internal task-artifact {task-id} init --family review-analysis --art
100
100
 
101
101
  `manual-validation` 是 `ai task log` 中 review 行「人工校验点」(EN `Manual-validation`)计数的数据源;不要新增并行人工验证字段。
102
102
 
103
- 如果 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。
103
+ 如果 task.md 中存在有效的 `platform_issue_identity`,调用 `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。
104
104
 
105
105
  最终化 intent 会在写入摘要前检查详情块 ID;任何可见重复都返回结构化失败并保持 artifact 字节不变,由模型按共享规则判断是否进行最小编辑。无法通过安全门、诊断重复、没有实际字节变化或达到紧急熔断时,停止在完成事件之前;停止路径仍必须展示已有审查结果,不得吞掉 artifact 内容。
106
106
 
@@ -27,7 +27,7 @@
27
27
  "expected_action_pattern": "(Review Analysis|Analysis Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "issue_number_exists",
30
+ "when": "platform_issue_identity_exists",
31
31
  "expected_status_label": "status: pending-design-work",
32
32
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
33
  "verify_comment_content": true,
@@ -27,7 +27,7 @@
27
27
  "expected_action_pattern": "(Review Analysis|Analysis Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "issue_number_exists",
30
+ "when": "platform_issue_identity_exists",
31
31
  "expected_status_label": "status: pending-design-work",
32
32
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
33
  "verify_comment_content": true,
@@ -7,7 +7,7 @@ Use this template when writing `review-analysis.md` or `review-analysis-r{N}.md`
7
7
  ## Output Template
8
8
 
9
9
  ```markdown
10
- # Requirement Analysis Review Report
10
+ # Analysis Review Report
11
11
 
12
12
  - **Review Round**: Round {review-round}
13
13
  - **Artifact File**: `{review-artifact}`
@@ -16,6 +16,12 @@ Use this template when writing `review-analysis.md` or `review-analysis-r{N}.md`
16
16
 
17
17
  ## Review Summary
18
18
 
19
+ - **Reviewer**: {reviewer-name}
20
+ - **Review Time**: {timestamp}
21
+ - **Scope**: {file-count and major modules}
22
+ - **Overall Verdict**: {Approved / Changes Requested / Rejected}
23
+ - **Findings (AI-actionable)**: {unresolved-blockers} blockers, {unresolved-major} majors, {unresolved-minor} minors / **Manual validation**: 0
24
+
19
25
  ## Qualification Audit Review
20
26
 
21
27
  > Use `.agents/rules/decision-qualification.md` to review the five tables: constraint dependencies, candidate qualification, classification results, upstream relations, and dependency snapshot.
@@ -40,12 +46,6 @@ Use this template when writing `review-analysis.md` or `review-analysis-r{N}.md`
40
46
  | task_input_digest | non_constraint_input_digest | upstream_artifact_digest |
41
47
  | --- | --- | --- |
42
48
 
43
- - **Reviewer**: {reviewer-name}
44
- - **Review Time**: {timestamp}
45
- - **Scope**: {file-count and major modules}
46
- - **Overall Verdict**: {Approved / Changes Requested / Rejected}
47
- - **Findings (AI-actionable)**: {unresolved-blockers} blockers, {unresolved-major} majors, {unresolved-minor} minors / **Manual validation**: 0
48
-
49
49
  ## Inspection Coverage
50
50
 
51
51
  | pass_id | scope | evidence | result | gaps_or_assumptions |
@@ -16,6 +16,12 @@
16
16
 
17
17
  ## 审查摘要
18
18
 
19
+ - **审查者**:{reviewer-name}
20
+ - **审查时间**:{timestamp}
21
+ - **审查范围**:{file-count and major modules}
22
+ - **总体结论**:{通过 / 需要修改 / 拒绝}
23
+ - **发现(AI 可处理)**:{unresolved-blockers} 阻塞项,{unresolved-major} 主要,{unresolved-minor} 次要 / **人工校验**:0
24
+
19
25
  ## 资格审计复核
20
26
 
21
27
  > 按 `.agents/rules/decision-qualification.md` 复核:约束依赖、候选资格、分类结果、上游关系和依赖快照五张表。
@@ -40,12 +46,6 @@
40
46
  | task_input_digest | non_constraint_input_digest | upstream_artifact_digest |
41
47
  | --- | --- | --- |
42
48
 
43
- - **审查者**:{reviewer-name}
44
- - **审查时间**:{timestamp}
45
- - **审查范围**:{file-count and major modules}
46
- - **总体结论**:{通过 / 需要修改 / 拒绝}
47
- - **发现(AI 可处理)**:{unresolved-blockers} 阻塞项,{unresolved-major} 主要,{unresolved-minor} 次要 / **人工校验**:0
48
-
49
49
  ## 检视覆盖声明
50
50
 
51
51
  | pass_id | scope | evidence | result | gaps_or_assumptions |
@@ -102,7 +102,7 @@ Before writing this round's `{review-artifact}`, create the controlled review sk
102
102
  agent-infra-internal task-artifact {task-id} init --family review-code --artifact {review-artifact} --locale en
103
103
  ```
104
104
 
105
- The skeleton does not generate a verdict, findings, or counts; complete review content is required before summary finalization. If structural finalization returns one provably safe error, call `task-artifact {task-id} repair --family review-code --artifact {review-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`, then rerun the original finalizer.
105
+ The skeleton does not generate a verdict, findings, or counts; complete review content is required before summary finalization. If structural finalization returns one provably safe error, it returns a controlled recovery candidate; edit only its `candidatePath`, then rerun the original finalizer with the same `recoveryId`. Candidate-only is a protocol authorization boundary, not OS isolation; arbitrary same-UID host writers are outside the protocol's protection claim, and fingerprint/state checks fail closed on anomalies.
106
106
 
107
107
  Create `.agents/workspace/active/{task-id}/{review-artifact}`.
108
108
 
@@ -130,7 +130,7 @@ Update task.md:
130
130
  Always include the `Manual-validation: {n}` field in the done log, including when it is 0.
131
131
  `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.
132
132
 
133
- If task.md contains a valid `issue_number`, perform these sync actions (skip and continue on any failure):
133
+ If task.md contains a valid `platform_issue_identity`, perform these sync actions (skip and continue on any failure):
134
134
  - Run `agent-infra-internal platform-issue sync {task-id} --agent {standard-agent-token} --status in-progress`
135
135
  - Run `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
136
136
  - Run `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {review-artifact} --agent {standard-agent-token}`
@@ -101,7 +101,7 @@ agent-infra-internal task-snapshot {task-id} --format text
101
101
  agent-infra-internal task-artifact {task-id} init --family review-code --artifact {review-artifact}
102
102
  ```
103
103
 
104
- 骨架不生成审查结论、发现或计数;完成审查内容后才能进入 summary finalizer。结构 finalizer 返回可证明的单个错误时,使用其 SHA 和 semantic digest 调用 `task-artifact {task-id} repair --family review-code --artifact {review-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`,再重跑原 finalizer。
104
+ 骨架不生成审查结论、发现或计数;完成审查内容后才能进入 summary finalizer。结构 finalizer 返回可证明的单个错误时,会返回受控 recovery candidate;只能编辑返回的 `candidatePath`,然后使用同一个 `recoveryId` 重跑原 finalizer。candidate-only 是协议授权边界,不是操作系统隔离;同 UID 的任意宿主写入者不在本协议的防护承诺内,异常由指纹/状态校验失败关闭。
105
105
 
106
106
  创建 `.agents/workspace/active/{task-id}/{review-artifact}`。
107
107
 
@@ -128,7 +128,7 @@ agent-infra-internal task-artifact {task-id} init --family review-code --artifac
128
128
  完成日志必须始终写入 `Manual-validation: {n}` 字段,0 也保留。
129
129
  `manual-validation` 是 `ai task log` 中 review 行「人工校验点」(EN `Manual-validation`)计数的数据源;不要新增并行人工验证字段。
130
130
 
131
- 如果 task.md 中存在有效的 `issue_number`,执行以下同步操作(任一失败则跳过并继续):
131
+ 如果 task.md 中存在有效的 `platform_issue_identity`,执行以下同步操作(任一失败则跳过并继续):
132
132
  - 调用 `agent-infra-internal platform-issue sync {task-id} --agent {standard-agent-token} --status in-progress`
133
133
  - 调用 `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
134
134
  - 调用 `agent-infra-internal platform-comment sync {task-id} --kind artifact --artifact {review-artifact} --agent {standard-agent-token}`
@@ -28,7 +28,7 @@
28
28
  "expected_action_pattern": "(Review Code|Code Review) \\(Round \\d+\\)"
29
29
  },
30
30
  "platform-sync": {
31
- "when": "issue_number_exists",
31
+ "when": "platform_issue_identity_exists",
32
32
  "expected_status_label": "status: in-progress",
33
33
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
34
  "verify_comment_content": true,
@@ -28,7 +28,7 @@
28
28
  "expected_action_pattern": "(Review Code|Code Review) \\(Round \\d+\\)"
29
29
  },
30
30
  "platform-sync": {
31
- "when": "issue_number_exists",
31
+ "when": "platform_issue_identity_exists",
32
32
  "expected_status_label": "status: in-progress",
33
33
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
34
  "verify_comment_content": true,
@@ -16,6 +16,18 @@ Use this template when writing `review-code.md` or `review-code-r{N}.md`.
16
16
 
17
17
  ## Review Summary
18
18
 
19
+ - **Reviewer**: {reviewer-name}
20
+ - **Review Time**: {timestamp}
21
+ - **Scope**: {file-count and major modules}
22
+ - **Review Target Commit**: {target branch SHA M read once from the task-bound remote/base at review start; never overwritten by a later live target}
23
+ - **Reviewed Head**: {local HEAD R captured once for this round; must equal this round's HEAD}
24
+ - **Review Baseline Commit**: {compatibility display of R; must equal Reviewed Head}
25
+ - **Reviewed Diff Base**: {D used for the complete diff/fingerprint; must equal merge-base(R, saved M)}
26
+ - **Reviewed Diff Fingerprint**: {fingerprint field from git-workflow snapshot}
27
+ - **Reviewed Snapshot Tree**: {tree field from git-workflow snapshot}
28
+ - **Overall Verdict**: {Approved / Changes Requested / Rejected}
29
+ - **Findings (AI-actionable)**: {unresolved-blockers} blockers, {unresolved-major} majors, {unresolved-minor} minors / **Manual validation**: 0
30
+
19
31
  ## Qualification Audit Review
20
32
 
21
33
  > Use `.agents/rules/decision-qualification.md` to review the five tables: constraint dependencies, candidate qualification, classification results, upstream relations, and dependency snapshot.
@@ -40,18 +52,6 @@ Use this template when writing `review-code.md` or `review-code-r{N}.md`.
40
52
  | task_input_digest | non_constraint_input_digest | upstream_artifact_digest |
41
53
  | --- | --- | --- |
42
54
 
43
- - **Reviewer**: {reviewer-name}
44
- - **Review Time**: {timestamp}
45
- - **Scope**: {file-count and major modules}
46
- - **Review Target Commit**: {target branch SHA M read once from the task-bound remote/base at review start; never overwritten by a later live target}
47
- - **Reviewed Head**: {local HEAD R captured once for this round; must equal this round's HEAD}
48
- - **Review Baseline Commit**: {compatibility display of R; must equal Reviewed Head}
49
- - **Reviewed Diff Base**: {D used for the complete diff/fingerprint; must equal merge-base(R, saved M)}
50
- - **Reviewed Diff Fingerprint**: {fingerprint field from git-workflow snapshot}
51
- - **Reviewed Snapshot Tree**: {tree field from git-workflow snapshot}
52
- - **Overall Verdict**: {Approved / Changes Requested / Rejected} (pick exactly one; combined phrases will fail the verify gate)
53
- - **Findings (AI-actionable)**: {unresolved-blockers} blockers, {unresolved-major} majors, {unresolved-minor} minors / **Manual validation**: 0
54
-
55
55
  ## Inspection Coverage
56
56
 
57
57
  | pass_id | scope | evidence | result | gaps_or_assumptions |
@@ -16,6 +16,18 @@
16
16
 
17
17
  ## 审查摘要
18
18
 
19
+ - **审查者**:{reviewer-name}
20
+ - **审查时间**:{timestamp}
21
+ - **审查范围**:{file-count and major modules}
22
+ - **审查目标提交**:{本轮一次性从任务绑定 remote/base 读取的目标分支 SHA M;不可被后续实时目标覆盖}
23
+ - **审查已检视提交**:{本轮一次性捕获的本地 HEAD R;必须等于本轮 HEAD}
24
+ - **审查基线提交**:{R 的兼容显示字段;必须与审查已检视提交相同}
25
+ - **审查差异基线**:{用于完整 diff/fingerprint 的 D;必须等于 merge-base(R, saved M)}
26
+ - **审查差异指纹**:{git-workflow snapshot 输出的 fingerprint 字段}
27
+ - **审查快照树**:{git-workflow snapshot 输出的 tree 字段}
28
+ - **总体结论**:{通过 / 需要修改 / 拒绝}
29
+ - **发现(AI 可处理)**:{unresolved-blockers} 阻塞项,{unresolved-major} 主要,{unresolved-minor} 次要 / **人工校验**:0
30
+
19
31
  ## 资格审计复核
20
32
 
21
33
  > 按 `.agents/rules/decision-qualification.md` 复核:约束依赖、候选资格、分类结果、上游关系和依赖快照五张表。
@@ -40,18 +52,6 @@
40
52
  | task_input_digest | non_constraint_input_digest | upstream_artifact_digest |
41
53
  | --- | --- | --- |
42
54
 
43
- - **审查者**:{reviewer-name}
44
- - **审查时间**:{timestamp}
45
- - **审查范围**:{file-count and major modules}
46
- - **审查目标提交**:{本轮一次性从任务绑定 remote/base 读取的目标分支 SHA M;不可被后续实时目标覆盖}
47
- - **审查已检视提交**:{本轮一次性捕获的本地 HEAD R;必须等于本轮 HEAD}
48
- - **审查基线提交**:{R 的兼容显示字段;必须与审查已检视提交相同}
49
- - **审查差异基线**:{用于完整 diff/fingerprint 的 D;必须等于 merge-base(R, saved M)}
50
- - **审查差异指纹**:{git-workflow snapshot 输出的 fingerprint 字段}
51
- - **审查快照树**:{git-workflow snapshot 输出的 tree 字段}
52
- - **总体结论**:{通过 / 需要修改 / 拒绝}(恰取一个;禁止写组合短语,否则 verify gate 失败)
53
- - **发现(AI 可处理)**:{unresolved-blockers} 阻塞项,{unresolved-major} 主要,{unresolved-minor} 次要 / **人工校验**:0
54
-
55
55
  ## 检视覆盖声明
56
56
 
57
57
  | pass_id | scope | evidence | result | gaps_or_assumptions |
@@ -75,7 +75,7 @@ Before writing this round's `{review-artifact}`, create the controlled review sk
75
75
  agent-infra-internal task-artifact {task-id} init --family review-plan --artifact {review-artifact} --locale en
76
76
  ```
77
77
 
78
- The skeleton contains identity metadata, stable section markers, and required headings only; complete review content is required before summary finalization. If structural finalization returns one provably safe error, call `task-artifact {task-id} repair --family review-plan --artifact {review-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`, then rerun the original finalizer.
78
+ The skeleton contains identity metadata, stable section markers, and required headings only; complete review content is required before summary finalization. If structural finalization returns one provably safe error, it returns a controlled recovery candidate; edit only its `candidatePath`, then rerun the original finalizer with the same `recoveryId`. Candidate-only is a protocol authorization boundary, not OS isolation; arbitrary same-UID host writers are outside the protocol's protection claim, and fingerprint/state checks fail closed on anomalies.
79
79
 
80
80
  Create `.agents/workspace/active/{task-id}/{review-artifact}`.
81
81
 
@@ -97,7 +97,7 @@ The intent atomically finalizes the report summary and returns the same ledger s
97
97
 
98
98
  `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.
99
99
 
100
- 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}`.
100
+ If task.md has a valid `platform_issue_identity`, 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}`.
101
101
 
102
102
  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.
103
103
 
@@ -78,7 +78,7 @@ agent-infra-internal task-snapshot {task-id} --format text
78
78
  agent-infra-internal task-artifact {task-id} init --family review-plan --artifact {review-artifact}
79
79
  ```
80
80
 
81
- 骨架不生成审查结论、发现或计数;完成审查内容后才能进入 summary finalizer。结构 finalizer 返回可证明的单个错误时,使用其 SHA 和 semantic digest 调用 `task-artifact {task-id} repair --family review-plan --artifact {review-artifact} --expected-sha256 {artifact-sha256} --expected-semantic-digest {semantic-digest}`,再重跑原 finalizer。
81
+ 骨架不生成审查结论、发现或计数;完成审查内容后才能进入 summary finalizer。结构 finalizer 返回可证明的单个错误时,会返回受控 recovery candidate;只能编辑返回的 `candidatePath`,然后使用同一个 `recoveryId` 重跑原 finalizer。candidate-only 是协议授权边界,不是操作系统隔离;同 UID 的任意宿主写入者不在本协议的防护承诺内,异常由指纹/状态校验失败关闭。
82
82
 
83
83
  创建 `.agents/workspace/active/{task-id}/{review-artifact}`。
84
84
 
@@ -100,7 +100,7 @@ agent-infra-internal task-artifact {task-id} init --family review-plan --artifac
100
100
 
101
101
  `manual-validation` 是 `ai task log` 中 review 行「人工校验点」(EN `Manual-validation`)计数的数据源;不要新增并行人工验证字段。
102
102
 
103
- 如果 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。
103
+ 如果 task.md 中存在有效的 `platform_issue_identity`,调用 `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。
104
104
 
105
105
  最终化 intent 会在写入摘要前检查详情块 ID;任何可见重复都返回结构化失败并保持 artifact 字节不变,由模型按共享规则判断是否进行最小编辑。无法通过安全门、诊断重复、没有实际字节变化或达到紧急熔断时,停止在完成事件之前;停止路径仍必须展示已有审查结果,不得吞掉 artifact 内容。
106
106
 
@@ -27,7 +27,7 @@
27
27
  "expected_action_pattern": "(Review Plan|Plan Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "issue_number_exists",
30
+ "when": "platform_issue_identity_exists",
31
31
  "expected_status_label": "status: pending-design-work",
32
32
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
33
  "verify_comment_content": true,
@@ -27,7 +27,7 @@
27
27
  "expected_action_pattern": "(Review Plan|Plan Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "issue_number_exists",
30
+ "when": "platform_issue_identity_exists",
31
31
  "expected_status_label": "status: pending-design-work",
32
32
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
33
  "verify_comment_content": true,
@@ -7,7 +7,7 @@ Use this template when writing `review-plan.md` or `review-plan-r{N}.md`.
7
7
  ## Output Template
8
8
 
9
9
  ```markdown
10
- # Technical Plan Review Report
10
+ # Plan Review Report
11
11
 
12
12
  - **Review Round**: Round {review-round}
13
13
  - **Artifact File**: `{review-artifact}`
@@ -16,6 +16,12 @@ Use this template when writing `review-plan.md` or `review-plan-r{N}.md`.
16
16
 
17
17
  ## Review Summary
18
18
 
19
+ - **Reviewer**: {reviewer-name}
20
+ - **Review Time**: {timestamp}
21
+ - **Scope**: {file-count and major modules}
22
+ - **Overall Verdict**: {Approved / Changes Requested / Rejected}
23
+ - **Findings (AI-actionable)**: {unresolved-blockers} blockers, {unresolved-major} majors, {unresolved-minor} minors / **Manual validation**: 0
24
+
19
25
  ## Qualification Audit Review
20
26
 
21
27
  > Use `.agents/rules/decision-qualification.md` to review the five tables: constraint dependencies, candidate qualification, classification results, upstream relations, and dependency snapshot.
@@ -40,12 +46,6 @@ Use this template when writing `review-plan.md` or `review-plan-r{N}.md`.
40
46
  | task_input_digest | non_constraint_input_digest | upstream_artifact_digest |
41
47
  | --- | --- | --- |
42
48
 
43
- - **Reviewer**: {reviewer-name}
44
- - **Review Time**: {timestamp}
45
- - **Scope**: {file-count and major modules}
46
- - **Overall Verdict**: {Approved / Changes Requested / Rejected}
47
- - **Findings (AI-actionable)**: {unresolved-blockers} blockers, {unresolved-major} majors, {unresolved-minor} minors / **Manual validation**: 0
48
-
49
49
  ## Inspection Coverage
50
50
 
51
51
  | pass_id | scope | evidence | result | gaps_or_assumptions |
@@ -7,7 +7,7 @@
7
7
  ## 输出模板
8
8
 
9
9
  ```markdown
10
- # 代码审查报告
10
+ # 技术方案审查报告
11
11
 
12
12
  - **审查轮次**:第 {review-round} 轮
13
13
  - **产物文件**:`{review-artifact}`
@@ -16,6 +16,12 @@
16
16
 
17
17
  ## 审查摘要
18
18
 
19
+ - **审查者**:{reviewer-name}
20
+ - **审查时间**:{timestamp}
21
+ - **审查范围**:{file-count and major modules}
22
+ - **总体结论**:{通过 / 需要修改 / 拒绝}
23
+ - **发现(AI 可处理)**:{unresolved-blockers} 阻塞项,{unresolved-major} 主要,{unresolved-minor} 次要 / **人工校验**:0
24
+
19
25
  ## 资格审计复核
20
26
 
21
27
  > 按 `.agents/rules/decision-qualification.md` 复核:约束依赖、候选资格、分类结果、上游关系和依赖快照五张表。
@@ -40,12 +46,6 @@
40
46
  | task_input_digest | non_constraint_input_digest | upstream_artifact_digest |
41
47
  | --- | --- | --- |
42
48
 
43
- - **审查者**:{reviewer-name}
44
- - **审查时间**:{timestamp}
45
- - **审查范围**:{file-count and major modules}
46
- - **总体结论**:{通过 / 需要修改 / 拒绝}
47
- - **发现(AI 可处理)**:{unresolved-blockers} 阻塞项,{unresolved-major} 主要,{unresolved-minor} 次要 / **人工校验**:0
48
-
49
49
  ## 检视覆盖声明
50
50
 
51
51
  | pass_id | scope | evidence | result | gaps_or_assumptions |
@@ -24,7 +24,7 @@
24
24
  "expected_action_pattern": "Review PR \\(Round \\d+\\)"
25
25
  },
26
26
  "platform-sync": {
27
- "when": "issue_number_exists",
27
+ "when": "platform_issue_identity_exists",
28
28
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
29
29
  "verify_comment_content": true,
30
30
  "verify_task_comment_content": true,
@@ -24,7 +24,7 @@
24
24
  "expected_action_pattern": "Review PR \\(Round \\d+\\)"
25
25
  },
26
26
  "platform-sync": {
27
- "when": "issue_number_exists",
27
+ "when": "platform_issue_identity_exists",
28
28
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
29
29
  "verify_comment_content": true,
30
30
  "verify_task_comment_content": true,
@@ -17,13 +17,13 @@ Evidence scenario classification (S1/S2/S3) → freshness/alignment → risk gra
17
17
 
18
18
  - Exactly one hit → `unique`; multiple without a unique winner → `ambiguous` (candidate list); zero hits → `none`.
19
19
  - Ambiguous hosts fail closed and never enter evidence classification. `pr-review-grade resolve-host --pr <N>` returns a typed `HostResolution`, and `decide` explicitly rejects `ambiguous`.
20
- - `Closes/Fixes #N` in the PR body (case-insensitive, comma/space separated, lists supported) is parsed by `extractClosingIssueNumbers`; a local `active/*/task.md` verified `pr_delivery_fact.identity.number` hit takes priority over the `issue_number` reverse lookup, and a task hit via both paths deduplicates to a single candidate.
20
+ - `Closes/Fixes #N` in the PR body (case-insensitive, comma/space separated, lists supported) is parsed by `extractClosingIssueNumbers`; a local `active/*/task.md` canonical `platform_issue_identity` numeric projection and verified `pr_delivery_fact.identity.number` are used for matching, and a task hit via both paths deduplicates to a single candidate.
21
21
 
22
22
  ## Evidence Scenario Classification (S1 → S2 → S3)
23
23
 
24
24
  | Scenario | Criteria |
25
25
  |----------|----------|
26
- | S1 complete & trusted | unique task with matching issue_number + complete `analysis`/`plan`/`code` and all three review families + latest `pr-review*` reviewed head == current head + trusted source |
26
+ | S1 complete & trusted | unique task with a canonical Issue identity whose numeric projection matches + complete `analysis`/`plan`/`code` and all three review families + latest `pr-review*` reviewed head == current head + trusted source |
27
27
  | S2 partial / suspect | task exists but key artifacts are missing, or the head drifted, or the source is untrusted / cannot prove alignment with the current head |
28
28
  | S3 PR-only | no host; or unique task with no lifecycle artifacts at all and no prior `pr-review*` |
29
29
 
@@ -33,7 +33,7 @@ Evidence scenario classification (S1/S2/S3) → freshness/alignment → risk gra
33
33
  ## Freshness and Alignment
34
34
 
35
35
  - Freshness benchmark = the reviewed head SHA recorded by the latest `pr-review*`, compared character-for-character with the current head: match → `fresh`, otherwise → `stale`.
36
- - Alignment = freshness is `fresh` and the `issue_number` / verified `pr_delivery_fact.identity.number` match the resolution result.
36
+ - Alignment = freshness is `fresh` and the canonical Issue identity numeric projection / verified `pr_delivery_fact.identity.number` match the resolution result.
37
37
  - No prior `pr-review*` → `n/a` / `n/a` (first-review special case).
38
38
 
39
39
  ## Risk Grading (pure evidence)
@@ -17,13 +17,13 @@
17
17
 
18
18
  - 唯一命中 → `unique`;多个且无法唯一 → `ambiguous`(候选列表);零命中 → `none`。
19
19
  - 多宿主歧义即 fail closed:不进入证据分类;由 `pr-review-grade resolve-host --pr <N>` 返回 typed `HostResolution`,`decide` 对 `ambiguous` 显式拒绝。
20
- - PR body 的 `Closes/Fixes #N`(大小写不敏感、逗号/空格分隔、支持列表)经 `extractClosingIssueNumbers` 解析;本地 `active/*/task.md` 的 verified `pr_delivery_fact.identity.number` 命中优先于 `issue_number` 反查,同一任务经两条路径命中按单候选去重。
20
+ - PR body 的 `Closes/Fixes #N`(大小写不敏感、逗号/空格分隔、支持列表)经 `extractClosingIssueNumbers` 解析;本地 `active/*/task.md` 的 canonical `platform_issue_identity` numeric projection 与 verified `pr_delivery_fact.identity.number` 用于匹配,同一任务按单候选去重。
21
21
 
22
22
  ## 证据场景分类(S1 → S2 → S3)
23
23
 
24
24
  | 场景 | 判据 |
25
25
  |------|------|
26
- | S1 完整可信 | 唯一任务且 issue_number 与远端一致 + `analysis`/`plan`/`code` 及三族 review 齐全 + 最新 `pr-review*` 被审 head == 当前 head + 来源受信 |
26
+ | S1 完整可信 | 唯一任务且 canonical Issue identity 的 numeric projection 与远端一致 + `analysis`/`plan`/`code` 及三族 review 齐全 + 最新 `pr-review*` 被审 head == 当前 head + 来源受信 |
27
27
  | S2 部分/可疑 | 任务存在但 artifact 缺失关键产物,或 head 漂移,或来源不可信 / 无法证明与当前 head 对齐 |
28
28
  | S3 仅 PR | 无宿主;或任务唯一但无任何生命周期 artifact 且无先前 `pr-review*` |
29
29
 
@@ -33,7 +33,7 @@
33
33
  ## 新鲜度与对齐
34
34
 
35
35
  - 新鲜度基准 = 上一轮 `pr-review*` 记录的被审 head SHA,与当前 head 逐字符比对:一致 → `fresh`,否则 → `stale`。
36
- - 对齐 = freshness 为 fresh 且 `issue_number` / verified `pr_delivery_fact.identity.number` 与解析结果一致。
36
+ - 对齐 = freshness 为 fresh 且 canonical Issue identity 的 numeric projection / verified `pr_delivery_fact.identity.number` 与解析结果一致。
37
37
  - 无先前 `pr-review*` → `n/a` / `n/a`(首轮特例)。
38
38
 
39
39
  ## 风险分级(纯证据口径)
@@ -12,7 +12,7 @@
12
12
  "activity-log": { "expected_action_pattern": "Run Manual Validation \\(Round \\d+\\)" },
13
13
  "review-ledger": { "stage_scope": ["analysis", "plan", "code"] },
14
14
  "platform-sync": {
15
- "when": "issue_number_exists",
15
+ "when": "platform_issue_identity_exists",
16
16
  "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
17
17
  "verify_comment_content": true,
18
18
  "verify_task_comment_content": true,