@fitlab-ai/agent-infra 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/lib/internal/manual-validation.js +6 -2
  2. package/dist/lib/platform/issues.js +3 -4
  3. package/dist/lib/platform/verification-sync.js +142 -154
  4. package/dist/lib/sandbox/control/workflow-executor.js +7 -1
  5. package/dist/lib/task/artifact-lifecycle.js +15 -52
  6. package/dist/lib/task/artifact-operations.js +27 -1
  7. package/dist/lib/task/capabilities.js +0 -2
  8. package/dist/lib/task/events.js +60 -43
  9. package/dist/lib/task/gate-policy.js +94 -0
  10. package/dist/lib/task/local-artifact-finalization.js +7 -4
  11. package/dist/lib/task/orchestration.js +8 -6
  12. package/dist/lib/task/review-artifacts.js +12 -6
  13. package/dist/lib/task/review-finalization.js +3 -9
  14. package/dist/lib/task/verification-engine.js +28 -17
  15. package/dist/lib/task/verification.js +25 -9
  16. package/dist/lifecycle-build-manifest.json +3 -3
  17. package/lib/internal/manual-validation.ts +6 -2
  18. package/lib/platform/issues.ts +3 -4
  19. package/lib/platform/verification-sync.ts +159 -177
  20. package/lib/sandbox/control/workflow-executor.ts +11 -1
  21. package/lib/task/artifact-lifecycle.ts +12 -49
  22. package/lib/task/artifact-operations.ts +27 -1
  23. package/lib/task/capabilities.ts +0 -1
  24. package/lib/task/events.ts +49 -32
  25. package/lib/task/gate-policy.ts +133 -0
  26. package/lib/task/local-artifact-finalization.ts +6 -4
  27. package/lib/task/orchestration.ts +12 -7
  28. package/lib/task/review-artifacts.ts +8 -2
  29. package/lib/task/review-finalization.ts +3 -9
  30. package/lib/task/verification-engine.ts +24 -14
  31. package/lib/task/verification-types.ts +7 -0
  32. package/lib/task/verification.ts +25 -9
  33. package/package.json +1 -1
  34. package/templates/.agents/rules/issue-sync.en.md +2 -0
  35. package/templates/.agents/rules/issue-sync.zh-CN.md +5 -8
  36. package/templates/.agents/rules/local-artifact-repair.en.md +11 -3
  37. package/templates/.agents/rules/local-artifact-repair.zh-CN.md +11 -3
  38. package/templates/.agents/skills/analyze-task/SKILL.en.md +2 -2
  39. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +2 -2
  40. package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -10
  41. package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -10
  42. package/templates/.agents/skills/block-task/config/verify.json +1 -3
  43. package/templates/.agents/skills/cancel-task/config/verify.json +1 -4
  44. package/templates/.agents/skills/code-task/SKILL.en.md +3 -3
  45. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +3 -3
  46. package/templates/.agents/skills/code-task/config/verify.en.json +1 -12
  47. package/templates/.agents/skills/code-task/config/verify.zh-CN.json +1 -12
  48. package/templates/.agents/skills/code-task/reference/dual-mode.en.md +1 -1
  49. package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +1 -1
  50. package/templates/.agents/skills/code-task/reference/report-template.en.md +11 -0
  51. package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +11 -0
  52. package/templates/.agents/skills/commit/config/verify.json +1 -5
  53. package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +6 -6
  54. package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +6 -6
  55. package/templates/.agents/skills/complete-task/config/verify.en.json +3 -14
  56. package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +3 -14
  57. package/templates/.agents/skills/create-pr/config/verify.json +1 -10
  58. package/templates/.agents/skills/create-task/config/verify.json +1 -4
  59. package/templates/.agents/skills/import-issue/config/verify.json +1 -2
  60. package/templates/.agents/skills/plan-task/SKILL.en.md +2 -2
  61. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +2 -2
  62. package/templates/.agents/skills/plan-task/config/verify.en.json +1 -10
  63. package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +1 -10
  64. package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +4 -4
  65. package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -10
  66. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -10
  67. package/templates/.agents/skills/review-analysis/reference/report-template.en.md +2 -0
  68. package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +2 -0
  69. package/templates/.agents/skills/review-code/config/verify.en.json +1 -10
  70. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -10
  71. package/templates/.agents/skills/review-code/reference/report-template.en.md +2 -0
  72. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +2 -0
  73. package/templates/.agents/skills/review-plan/config/verify.en.json +1 -10
  74. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -10
  75. package/templates/.agents/skills/review-plan/reference/report-template.en.md +2 -0
  76. package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +2 -0
  77. package/templates/.agents/skills/review-pr/config/verify.en.json +1 -8
  78. package/templates/.agents/skills/review-pr/config/verify.zh-CN.json +1 -8
  79. package/templates/.agents/skills/run-manual-validation/config/verify.en.json +38 -13
  80. package/templates/.agents/skills/run-manual-validation/config/verify.zh-CN.json +38 -13
@@ -31,17 +31,17 @@
31
31
  "expected_action_pattern": "Complete Manual Validation"
32
32
  },
33
33
  "review-ledger": {
34
- "stage_scope": ["analysis", "plan", "code"]
34
+ "stage_scope": [
35
+ "analysis",
36
+ "plan",
37
+ "code"
38
+ ]
35
39
  },
36
40
  "platform-sync": {
37
41
  "when": "pr_fact_bound",
38
- "expected_pr_comment_marker_key": "prSummary",
39
42
  "expected_pr_comment_required_patterns": [
40
43
  "^### ✅ (?:人工验证已通过|Manual Validation Passed)$"
41
- ],
42
- "verify_task_comment_content": true,
43
- "verify_issue_type": true,
44
- "verify_issue_fields": false
44
+ ]
45
45
  }
46
46
  }
47
47
  }
@@ -15,8 +15,7 @@
15
15
  "completed_at"
16
16
  ],
17
17
  "expected_status": "completed",
18
- "require_completed_at": true,
19
- "require_target_date": true
18
+ "require_completed_at": true
20
19
  },
21
20
  "activity-log": {
22
21
  "expected_action_pattern": "(Complete Task|Completed)"
@@ -28,21 +27,11 @@
28
27
  "manual-validation": {},
29
28
  "post-review-commit": {},
30
29
  "platform-sync-preflight": {
31
- "when": "platform_issue_identity_exists",
32
- "expected_comment_marker": "<!-- sync-issue:{task-id}:summary -->",
33
- "verify_task_comment_content": false,
34
- "sync_checked_requirements": true,
35
- "verify_issue_type": true,
36
- "verify_issue_fields": false,
37
- "verify_milestone": true,
38
- "verify_closed_issue_has_no_status_labels": false,
39
- "expected_comment_marker_key": "summary"
30
+ "when": "platform_issue_identity_exists"
40
31
  },
41
32
  "required-pr-delivery": {},
42
33
  "platform-sync": {
43
- "when": "platform_issue_identity_exists",
44
- "verify_task_comment_content": true,
45
- "verify_closed_issue_has_no_status_labels": true
34
+ "when": "platform_issue_identity_exists"
46
35
  },
47
36
  "artifact": {
48
37
  "file_pattern": "task.md",
@@ -15,8 +15,7 @@
15
15
  "completed_at"
16
16
  ],
17
17
  "expected_status": "completed",
18
- "require_completed_at": true,
19
- "require_target_date": true
18
+ "require_completed_at": true
20
19
  },
21
20
  "activity-log": {
22
21
  "expected_action_pattern": "(Complete Task|Completed)"
@@ -28,21 +27,11 @@
28
27
  "manual-validation": {},
29
28
  "post-review-commit": {},
30
29
  "platform-sync-preflight": {
31
- "when": "platform_issue_identity_exists",
32
- "expected_comment_marker": "<!-- sync-issue:{task-id}:summary -->",
33
- "verify_task_comment_content": false,
34
- "sync_checked_requirements": true,
35
- "verify_issue_type": true,
36
- "verify_issue_fields": false,
37
- "verify_milestone": true,
38
- "verify_closed_issue_has_no_status_labels": false,
39
- "expected_comment_marker_key": "summary"
30
+ "when": "platform_issue_identity_exists"
40
31
  },
41
32
  "required-pr-delivery": {},
42
33
  "platform-sync": {
43
- "when": "platform_issue_identity_exists",
44
- "verify_task_comment_content": true,
45
- "verify_closed_issue_has_no_status_labels": true
34
+ "when": "platform_issue_identity_exists"
46
35
  },
47
36
  "artifact": {
48
37
  "file_pattern": "task.md",
@@ -18,16 +18,7 @@
18
18
  "expected_action_pattern": "(Create PR|PR Created)"
19
19
  },
20
20
  "platform-sync": {
21
- "when": "platform_issue_identity_exists",
22
- "expected_pr_comment_marker": "<!-- sync-pr:{task-id}:summary -->",
23
- "verify_in_labels_match_pr": true,
24
- "verify_in_labels_computed": true,
25
- "verify_pr_type_label": true,
26
- "verify_pr_assignee": true,
27
- "verify_issue_fields": true,
28
- "verify_milestone": true,
29
- "verify_milestone_specific": true,
30
- "expected_pr_comment_marker_key": "prSummary"
21
+ "when": "platform_issue_identity_exists"
31
22
  }
32
23
  }
33
24
  }
@@ -22,10 +22,7 @@
22
22
  },
23
23
  "platform-sync": {
24
24
  "when": "platform_issue_identity_exists",
25
- "issue_must_exist": true,
26
- "verify_task_comment_content": true,
27
- "verify_milestone": true,
28
- "expected_status_label_key": "waitingForTriage"
25
+ "issue_must_exist": true
29
26
  }
30
27
  }
31
28
  }
@@ -22,8 +22,7 @@
22
22
  },
23
23
  "platform-sync": {
24
24
  "when": "platform_issue_identity_exists",
25
- "issue_must_exist": true,
26
- "verify_task_comment_content": true
25
+ "issue_must_exist": true
27
26
  }
28
27
  }
29
28
  }
@@ -135,8 +135,8 @@ 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 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.
138
+ - On `status=failed` with recovery context, after the completion gates pass, edit the returned `candidatePath` only once for this attempt, then rerun the finalizer completely with the same `recoveryId`; if it still fails with a new diagnostic and fingerprint while the gates continue to pass, continue to the next attempt; 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, an unsafe repair, repeated diagnostics or fingerprints, no progress, or the shared edit limit, 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}
@@ -134,8 +134,8 @@ 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` 且返回 recovery context:完成门禁通过后,只编辑返回的 `candidatePath` 一次,然后使用同一个 `recoveryId` 完整重跑 finalizer;formal artifact 在 commit 前必须保持不变。
138
- - recovery candidate 必须与记录的任务、轮次、产物、baseline 和 request identity 匹配;基线冲突、未知状态、无进展或重复失败:停止,不发布 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
141
  如果 task.md 中存在有效的 `platform_issue_identity`,执行以下同步操作(任一失败则跳过并继续):
@@ -28,16 +28,7 @@
28
28
  ]
29
29
  },
30
30
  "platform-sync": {
31
- "when": "platform_issue_identity_exists",
32
- "expected_status_label": "status: pending-design-work",
33
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
- "verify_comment_content": true,
35
- "verify_task_comment_content": true,
36
- "verify_issue_type": true,
37
- "verify_issue_fields": false,
38
- "verify_milestone": true,
39
- "expected_status_label_key": "pendingDesignWork",
40
- "expected_comment_marker_key": "artifact"
31
+ "when": "platform_issue_identity_exists"
41
32
  }
42
33
  }
43
34
  }
@@ -28,16 +28,7 @@
28
28
  ]
29
29
  },
30
30
  "platform-sync": {
31
- "when": "platform_issue_identity_exists",
32
- "expected_status_label": "status: pending-design-work",
33
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
- "verify_comment_content": true,
35
- "verify_task_comment_content": true,
36
- "verify_issue_type": true,
37
- "verify_issue_fields": false,
38
- "verify_milestone": true,
39
- "expected_status_label_key": "pendingDesignWork",
40
- "expected_comment_marker_key": "artifact"
31
+ "when": "platform_issue_identity_exists"
41
32
  }
42
33
  }
43
34
  }
@@ -44,14 +44,14 @@ description: >
44
44
 
45
45
  ### 3. 确定 task-id 与待恢复文件
46
46
 
47
- 按 `.agents/rules/issue-sync.md` 中定义的 task、artifact、分片 artifact 和 recovery 标记筛选评论。
47
+ 按 `.agents/rules/issue-sync.md` 中定义的 task、artifact 与分片 artifact 标记筛选评论。
48
48
 
49
49
  处理规则:
50
50
  - 用户提供了 `{task-id}` 时,仅匹配该任务
51
51
  - 未提供时,优先从 task 评论标记推断
52
52
  - 若找不到唯一 task-id,立即停止并告知用户
53
53
  - 忽略 `summary` 标记评论;它是 complete-task 的聚合产物,不对应本地任务文件
54
- - `task` 评论仅用于确定当前投影和 snapshot 身份;`recovery-action`、`recovery-prepare`、`recovery-commit` 由受控 recovery core 验证并重建完整 `task.md`
54
+ - `task`、artifact 和交付摘要评论顶部的折叠恢复元数据由受控 recovery core 验证并重建活动日志。
55
55
  - 将 `{file-stem}` 映射回文件名:
56
56
  - `task` -> `task.md`
57
57
  - `analysis` / `analysis-r{N}` -> 对应 `.md`
@@ -68,9 +68,9 @@ description: >
68
68
 
69
69
  对每个文件执行:
70
70
  - 收集单条评论或分片评论
71
- - 不直接把投影 task 评论反向拆成 `task.md`;完整 task 内容必须来自匹配当前投影的 recovery commit
71
+ - 从 task 评论恢复当前任务投影,再只从通过校验的 artifact 恢复元数据重建活动日志;不得根据缺失记录推测过程状态
72
72
  - 如分片标记中存在 part 和 total 序号,按 part 升序排序并校验分片完整
73
- - 从评论正文中提取文件内容,去掉隐藏标记、标题和页脚
73
+ - 从评论正文中提取文件内容,去掉隐藏标记、标题、恢复元数据和页脚
74
74
  - 拼接得到最终文件内容
75
75
 
76
76
  在写文件前检查:
@@ -27,16 +27,7 @@
27
27
  "expected_action_pattern": "(Review Analysis|Analysis Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "platform_issue_identity_exists",
31
- "expected_status_label": "status: pending-design-work",
32
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
- "verify_comment_content": true,
34
- "verify_task_comment_content": true,
35
- "verify_issue_type": true,
36
- "verify_issue_fields": false,
37
- "verify_milestone": true,
38
- "expected_status_label_key": "pendingDesignWork",
39
- "expected_comment_marker_key": "artifact"
30
+ "when": "platform_issue_identity_exists"
40
31
  }
41
32
  }
42
33
  }
@@ -27,16 +27,7 @@
27
27
  "expected_action_pattern": "(Review Analysis|Analysis Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "platform_issue_identity_exists",
31
- "expected_status_label": "status: pending-design-work",
32
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
- "verify_comment_content": true,
34
- "verify_task_comment_content": true,
35
- "verify_issue_type": true,
36
- "verify_issue_fields": false,
37
- "verify_milestone": true,
38
- "expected_status_label_key": "pendingDesignWork",
39
- "expected_comment_marker_key": "artifact"
30
+ "when": "platform_issue_identity_exists"
40
31
  }
41
32
  }
42
33
  }
@@ -4,6 +4,8 @@
4
4
 
5
5
  Use this template when writing `review-analysis.md` or `review-analysis-r{N}.md`.
6
6
 
7
+ > The `Review Input` field provides reader-facing traceability. Lifecycle identity uses the input frozen by `review-analysis.started` and the completion receipt; it is not parsed from this report body.
8
+
7
9
  ## Output Template
8
10
 
9
11
  ```markdown
@@ -4,6 +4,8 @@
4
4
 
5
5
  编写 `review-analysis.md` 或 `review-analysis-r{N}.md` 时使用本模板。
6
6
 
7
+ > “审查输入”字段用于读者追溯。生命周期身份以 `review-analysis.started` 冻结的输入和完成 receipt 为准,不从本报告正文解析。
8
+
7
9
  ## 输出模板
8
10
 
9
11
  ```markdown
@@ -28,16 +28,7 @@
28
28
  "expected_action_pattern": "(Review Code|Code Review) \\(Round \\d+\\)"
29
29
  },
30
30
  "platform-sync": {
31
- "when": "platform_issue_identity_exists",
32
- "expected_status_label": "status: in-progress",
33
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
- "verify_comment_content": true,
35
- "verify_task_comment_content": true,
36
- "verify_issue_type": true,
37
- "verify_issue_fields": false,
38
- "verify_milestone": true,
39
- "expected_status_label_key": "inProgress",
40
- "expected_comment_marker_key": "artifact"
31
+ "when": "platform_issue_identity_exists"
41
32
  }
42
33
  }
43
34
  }
@@ -28,16 +28,7 @@
28
28
  "expected_action_pattern": "(Review Code|Code Review) \\(Round \\d+\\)"
29
29
  },
30
30
  "platform-sync": {
31
- "when": "platform_issue_identity_exists",
32
- "expected_status_label": "status: in-progress",
33
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
34
- "verify_comment_content": true,
35
- "verify_task_comment_content": true,
36
- "verify_issue_type": true,
37
- "verify_issue_fields": false,
38
- "verify_milestone": true,
39
- "expected_status_label_key": "inProgress",
40
- "expected_comment_marker_key": "artifact"
31
+ "when": "platform_issue_identity_exists"
41
32
  }
42
33
  }
43
34
  }
@@ -4,6 +4,8 @@
4
4
 
5
5
  Use this template when writing `review-code.md` or `review-code-r{N}.md`.
6
6
 
7
+ > The `Review Input` field provides reader-facing traceability. Lifecycle identity uses the input frozen by `review-code.started` and the completion receipt; it is not parsed from this report body.
8
+
7
9
  ## Output Template
8
10
 
9
11
  ```markdown
@@ -4,6 +4,8 @@
4
4
 
5
5
  编写 `review-code.md` 或 `review-code-r{N}.md` 时使用本模板。
6
6
 
7
+ > “审查输入”字段用于读者追溯。生命周期身份以 `review-code.started` 冻结的输入和完成 receipt 为准,不从本报告正文解析。
8
+
7
9
  ## 输出模板
8
10
 
9
11
  ```markdown
@@ -27,16 +27,7 @@
27
27
  "expected_action_pattern": "(Review Plan|Plan Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "platform_issue_identity_exists",
31
- "expected_status_label": "status: pending-design-work",
32
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
- "verify_comment_content": true,
34
- "verify_task_comment_content": true,
35
- "verify_issue_type": true,
36
- "verify_issue_fields": false,
37
- "verify_milestone": true,
38
- "expected_status_label_key": "pendingDesignWork",
39
- "expected_comment_marker_key": "artifact"
30
+ "when": "platform_issue_identity_exists"
40
31
  }
41
32
  }
42
33
  }
@@ -27,16 +27,7 @@
27
27
  "expected_action_pattern": "(Review Plan|Plan Review) \\(Round \\d+\\)"
28
28
  },
29
29
  "platform-sync": {
30
- "when": "platform_issue_identity_exists",
31
- "expected_status_label": "status: pending-design-work",
32
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
33
- "verify_comment_content": true,
34
- "verify_task_comment_content": true,
35
- "verify_issue_type": true,
36
- "verify_issue_fields": false,
37
- "verify_milestone": true,
38
- "expected_status_label_key": "pendingDesignWork",
39
- "expected_comment_marker_key": "artifact"
30
+ "when": "platform_issue_identity_exists"
40
31
  }
41
32
  }
42
33
  }
@@ -4,6 +4,8 @@
4
4
 
5
5
  Use this template when writing `review-plan.md` or `review-plan-r{N}.md`.
6
6
 
7
+ > The `Review Input` field provides reader-facing traceability. Lifecycle identity uses the input frozen by `review-plan.started` and the completion receipt; it is not parsed from this report body.
8
+
7
9
  ## Output Template
8
10
 
9
11
  ```markdown
@@ -4,6 +4,8 @@
4
4
 
5
5
  编写 `review-plan.md` 或 `review-plan-r{N}.md` 时使用本模板。
6
6
 
7
+ > “审查输入”字段用于读者追溯。生命周期身份以 `review-plan.started` 冻结的输入和完成 receipt 为准,不从本报告正文解析。
8
+
7
9
  ## 输出模板
8
10
 
9
11
  ```markdown
@@ -24,14 +24,7 @@
24
24
  "expected_action_pattern": "Review PR \\(Round \\d+\\)"
25
25
  },
26
26
  "platform-sync": {
27
- "when": "platform_issue_identity_exists",
28
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
29
- "verify_comment_content": true,
30
- "verify_task_comment_content": true,
31
- "verify_issue_type": false,
32
- "verify_issue_fields": false,
33
- "verify_milestone": false,
34
- "expected_comment_marker_key": "artifact"
27
+ "when": "platform_issue_identity_exists"
35
28
  }
36
29
  }
37
30
  }
@@ -24,14 +24,7 @@
24
24
  "expected_action_pattern": "Review PR \\(Round \\d+\\)"
25
25
  },
26
26
  "platform-sync": {
27
- "when": "platform_issue_identity_exists",
28
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
29
- "verify_comment_content": true,
30
- "verify_task_comment_content": true,
31
- "verify_issue_type": false,
32
- "verify_issue_fields": false,
33
- "verify_milestone": false,
34
- "expected_comment_marker_key": "artifact"
27
+ "when": "platform_issue_identity_exists"
35
28
  }
36
29
  }
37
30
  }
@@ -2,24 +2,49 @@
2
2
  "skill": "run-manual-validation",
3
3
  "checks": {
4
4
  "task-meta": {
5
- "required_fields": ["id", "type", "workflow", "status", "created_at", "updated_at", "agent_infra_version", "current_step", "assigned_to"]
5
+ "required_fields": [
6
+ "id",
7
+ "type",
8
+ "workflow",
9
+ "status",
10
+ "created_at",
11
+ "updated_at",
12
+ "agent_infra_version",
13
+ "current_step",
14
+ "assigned_to"
15
+ ]
6
16
  },
7
17
  "artifact": {
8
18
  "file_pattern": "validation-run.md|validation-run-r{N}.md",
9
- "required_sections": ["Input Mode", "State Check", "Validation Target", "Discovered Items", "Mode Decision", "Command Summary", "Structured Evidence", "Per-item Results", "Cleanup and Recovery", "Remaining Coverage", "Raw Evidence"],
10
- "required_patterns": ["^\\$ "]
19
+ "required_sections": [
20
+ "Input Mode",
21
+ "State Check",
22
+ "Validation Target",
23
+ "Discovered Items",
24
+ "Mode Decision",
25
+ "Command Summary",
26
+ "Structured Evidence",
27
+ "Per-item Results",
28
+ "Cleanup and Recovery",
29
+ "Remaining Coverage",
30
+ "Raw Evidence"
31
+ ],
32
+ "required_patterns": [
33
+ "^\\$ "
34
+ ]
35
+ },
36
+ "activity-log": {
37
+ "expected_action_pattern": "Run Manual Validation \\(Round \\d+\\)"
38
+ },
39
+ "review-ledger": {
40
+ "stage_scope": [
41
+ "analysis",
42
+ "plan",
43
+ "code"
44
+ ]
11
45
  },
12
- "activity-log": { "expected_action_pattern": "Run Manual Validation \\(Round \\d+\\)" },
13
- "review-ledger": { "stage_scope": ["analysis", "plan", "code"] },
14
46
  "platform-sync": {
15
- "when": "platform_issue_identity_exists",
16
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
17
- "verify_comment_content": true,
18
- "verify_task_comment_content": true,
19
- "verify_issue_type": true,
20
- "verify_issue_fields": false,
21
- "verify_milestone": true,
22
- "expected_comment_marker_key": "artifact"
47
+ "when": "platform_issue_identity_exists"
23
48
  }
24
49
  }
25
50
  }
@@ -2,24 +2,49 @@
2
2
  "skill": "run-manual-validation",
3
3
  "checks": {
4
4
  "task-meta": {
5
- "required_fields": ["id", "type", "workflow", "status", "created_at", "updated_at", "agent_infra_version", "current_step", "assigned_to"]
5
+ "required_fields": [
6
+ "id",
7
+ "type",
8
+ "workflow",
9
+ "status",
10
+ "created_at",
11
+ "updated_at",
12
+ "agent_infra_version",
13
+ "current_step",
14
+ "assigned_to"
15
+ ]
6
16
  },
7
17
  "artifact": {
8
18
  "file_pattern": "validation-run.md|validation-run-r{N}.md",
9
- "required_sections": ["输入模式", "状态核对", "验证目标", "发现清单", "模式判定", "命令摘要", "结构化证据", "逐项结果", "清理与恢复", "尚未覆盖", "证据原文"],
10
- "required_patterns": ["^\\$ "]
19
+ "required_sections": [
20
+ "输入模式",
21
+ "状态核对",
22
+ "验证目标",
23
+ "发现清单",
24
+ "模式判定",
25
+ "命令摘要",
26
+ "结构化证据",
27
+ "逐项结果",
28
+ "清理与恢复",
29
+ "尚未覆盖",
30
+ "证据原文"
31
+ ],
32
+ "required_patterns": [
33
+ "^\\$ "
34
+ ]
35
+ },
36
+ "activity-log": {
37
+ "expected_action_pattern": "Run Manual Validation \\(Round \\d+\\)"
38
+ },
39
+ "review-ledger": {
40
+ "stage_scope": [
41
+ "analysis",
42
+ "plan",
43
+ "code"
44
+ ]
11
45
  },
12
- "activity-log": { "expected_action_pattern": "Run Manual Validation \\(Round \\d+\\)" },
13
- "review-ledger": { "stage_scope": ["analysis", "plan", "code"] },
14
46
  "platform-sync": {
15
- "when": "platform_issue_identity_exists",
16
- "expected_comment_marker": "<!-- sync-issue:{task-id}:{artifact-stem} -->",
17
- "verify_comment_content": true,
18
- "verify_task_comment_content": true,
19
- "verify_issue_type": true,
20
- "verify_issue_fields": false,
21
- "verify_milestone": true,
22
- "expected_comment_marker_key": "artifact"
47
+ "when": "platform_issue_identity_exists"
23
48
  }
24
49
  }
25
50
  }