@fitlab-ai/agent-infra 0.9.15 → 0.11.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.
- package/README.md +2 -6
- package/README.zh-CN.md +2 -6
- package/bin/internal-cli.sh +0 -13
- package/dist/bin/internal-cli.js +11 -49
- package/dist/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.js +6 -2
- package/dist/lib/agent-clients/adapters/codex-lifecycle/store.js +43 -3
- package/dist/lib/fs/durable-write.js +2 -0
- package/dist/lib/internal/cli-route-inventory.js +3 -4
- package/dist/lib/internal/manual-validation.js +17 -8
- package/dist/lib/internal/platform-comment.js +60 -2
- package/dist/lib/internal/task-artifact.js +1 -1
- package/dist/lib/internal/task-finalization.js +2 -2
- package/dist/lib/internal/task-lifecycle.js +4 -4
- package/dist/lib/internal/task-operation-registry.js +22 -13
- package/dist/lib/internal/task-orchestration.js +2 -2
- package/dist/lib/internal/task-review.js +12 -7
- package/dist/lib/platform/activity-recovery.js +159 -0
- package/dist/lib/platform/issue-comments.js +89 -31
- package/dist/lib/platform/issues.js +1 -1
- package/dist/lib/platform/pr-change-report.js +5 -4
- package/dist/lib/platform/pr-summary.js +64 -32
- package/dist/lib/platform/pull-requests.js +3 -3
- package/dist/lib/platform/task-comment-projection.js +70 -0
- package/dist/lib/platform/task-identities.js +2 -9
- package/dist/lib/platform/task-recovery.js +55 -0
- package/dist/lib/platform/verification-sync.js +45 -7
- package/dist/lib/pr-review/evidence-grading.js +4 -8
- package/dist/lib/sandbox/commands/rm.js +21 -2
- package/dist/lib/sandbox/control/executor.js +4 -2
- package/dist/lib/sandbox/control/server.js +29 -9
- package/dist/lib/sandbox/control/state.js +7 -1
- package/dist/lib/sandbox/control/task-workflow.js +1 -1
- package/dist/lib/sandbox/control/workflow-executor.js +87 -35
- package/dist/lib/sandbox/index.js +1 -2
- package/dist/lib/sandbox/removal.js +116 -1011
- package/dist/lib/sandbox/workspace-identity.js +17 -1
- package/dist/lib/server/process-state.js +17 -5
- package/dist/lib/task/artifact-command.js +11 -30
- package/dist/lib/task/artifact-operations.js +17 -231
- package/dist/lib/task/artifact-recovery.js +476 -0
- package/dist/lib/task/artifact-repair-intent.js +90 -39
- package/dist/lib/task/commit-operation.js +31 -4
- package/dist/lib/task/control-authority.js +39 -8
- package/dist/lib/task/control-recovery.js +14 -2
- package/dist/lib/task/create-service.js +1 -8
- package/dist/lib/task/delegation-receipts.js +64 -3
- package/dist/lib/task/events.js +165 -23
- package/dist/lib/task/human-override.js +5 -8
- package/dist/lib/task/intermediate-cleanup.js +91 -8
- package/dist/lib/task/lifecycle-recovery.js +549 -0
- package/dist/lib/task/lifecycle.js +12 -3
- package/dist/lib/task/local-artifact-finalization.js +212 -123
- package/dist/lib/task/manual-validation-receipt.js +5 -1
- package/dist/lib/task/orchestration.js +52 -2
- package/dist/lib/task/pr-delivery-fact.js +12 -56
- package/dist/lib/task/recovery-warning.js +19 -0
- package/dist/lib/task/review-command.js +3 -2
- package/dist/lib/task/review-finalization.js +294 -74
- package/dist/lib/{host-control → task}/secure-fs.js +8 -19
- package/dist/lib/task/short-id.js +15 -7
- package/dist/lib/task/task-execution-lock.js +1 -1
- package/dist/lib/task/verification-engine.js +3 -14
- package/dist/lib/task/workflow-command.js +2 -1
- package/dist/lib/task/workflow-dispatch.js +161 -0
- package/dist/lib/version.js +1 -11
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.ts +7 -2
- package/lib/agent-clients/adapters/codex-lifecycle/store.ts +55 -3
- package/lib/fs/durable-write.ts +1 -0
- package/lib/internal/cli-route-inventory.ts +3 -4
- package/lib/internal/manual-validation.ts +17 -8
- package/lib/internal/platform-comment.ts +53 -2
- package/lib/internal/task-artifact.ts +1 -1
- package/lib/internal/task-finalization.ts +1 -1
- package/lib/internal/task-lifecycle.ts +5 -4
- package/lib/internal/task-operation-registry.ts +22 -13
- package/lib/internal/task-orchestration.ts +1 -1
- package/lib/internal/task-review.ts +11 -7
- package/lib/platform/activity-recovery.ts +179 -0
- package/lib/platform/issue-comments.ts +105 -30
- package/lib/platform/issues.ts +1 -1
- package/lib/platform/pr-change-report.ts +7 -5
- package/lib/platform/pr-summary.ts +64 -32
- package/lib/platform/pull-requests.ts +3 -3
- package/lib/platform/task-comment-projection.ts +79 -0
- package/lib/platform/task-identities.ts +3 -14
- package/lib/platform/task-recovery.ts +54 -0
- package/lib/platform/verification-sync.ts +48 -11
- package/lib/pr-review/evidence-grading.ts +4 -9
- package/lib/sandbox/commands/rm.ts +34 -2
- package/lib/sandbox/control/executor.ts +4 -2
- package/lib/sandbox/control/protocol.ts +6 -1
- package/lib/sandbox/control/server.ts +30 -10
- package/lib/sandbox/control/state.ts +9 -1
- package/lib/sandbox/control/task-workflow.ts +1 -1
- package/lib/sandbox/control/workflow-executor.ts +106 -35
- package/lib/sandbox/index.ts +1 -2
- package/lib/sandbox/removal.ts +126 -1128
- package/lib/sandbox/workspace-identity.ts +19 -3
- package/lib/server/process-state.ts +26 -5
- package/lib/task/artifact-command.ts +12 -29
- package/lib/task/artifact-operations.ts +22 -252
- package/lib/task/artifact-recovery.ts +572 -0
- package/lib/task/artifact-repair-intent.ts +126 -51
- package/lib/task/commit-operation.ts +35 -4
- package/lib/task/control-authority.ts +48 -15
- package/lib/task/control-recovery.ts +13 -1
- package/lib/task/create-service.ts +1 -10
- package/lib/task/delegation-receipts.ts +73 -2
- package/lib/task/events.ts +188 -24
- package/lib/task/human-override.ts +5 -8
- package/lib/task/intermediate-cleanup.ts +66 -12
- package/lib/task/lifecycle-recovery.ts +691 -0
- package/lib/task/lifecycle.ts +13 -4
- package/lib/task/local-artifact-finalization.ts +249 -131
- package/lib/task/manual-validation-receipt.ts +5 -1
- package/lib/task/orchestration.ts +65 -0
- package/lib/task/pr-delivery-fact.ts +15 -62
- package/lib/task/recovery-warning.ts +21 -0
- package/lib/task/review-command.ts +2 -1
- package/lib/task/review-finalization.ts +298 -84
- package/lib/{host-control → task}/secure-fs.ts +10 -32
- package/lib/task/short-id.ts +27 -5
- package/lib/task/task-execution-lock.ts +1 -1
- package/lib/task/verification-engine.ts +3 -17
- package/lib/task/verification-types.ts +0 -2
- package/lib/task/workflow-command.ts +2 -1
- package/lib/task/workflow-dispatch.ts +171 -0
- package/lib/version.ts +1 -15
- package/package.json +1 -1
- package/templates/.agents/rules/create-issue.en.md +1 -1
- package/templates/.agents/rules/create-issue.zh-CN.md +1 -1
- package/templates/.agents/rules/issue-sync.en.md +12 -2
- package/templates/.agents/rules/issue-sync.zh-CN.md +13 -5
- package/templates/.agents/rules/local-artifact-repair.en.md +47 -39
- package/templates/.agents/rules/local-artifact-repair.zh-CN.md +45 -36
- package/templates/.agents/skills/analyze-task/SKILL.en.md +6 -6
- package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +6 -6
- package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -1
- package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/block-task/SKILL.en.md +2 -2
- package/templates/.agents/skills/block-task/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/block-task/config/verify.json +1 -1
- package/templates/.agents/skills/cancel-task/SKILL.en.md +3 -3
- package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +3 -3
- package/templates/.agents/skills/cancel-task/config/verify.json +1 -1
- package/templates/.agents/skills/code-task/SKILL.en.md +7 -7
- package/templates/.agents/skills/code-task/SKILL.zh-CN.md +8 -8
- package/templates/.agents/skills/code-task/config/verify.en.json +1 -1
- package/templates/.agents/skills/code-task/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/commit/reference/issue-metadata-sync.en.md +1 -1
- package/templates/.agents/skills/commit/reference/issue-metadata-sync.zh-CN.md +1 -1
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +1 -1
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/complete-task/SKILL.en.md +2 -2
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/complete-task/config/verify.en.json +2 -2
- package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +2 -2
- package/templates/.agents/skills/complete-task/reference/external-delivery.en.md +1 -1
- package/templates/.agents/skills/complete-task/reference/external-delivery.zh-CN.md +1 -1
- package/templates/.agents/skills/create-pr/SKILL.en.md +2 -2
- package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/create-pr/config/verify.json +1 -1
- package/templates/.agents/skills/create-pr/reference/pr-body-template.en.md +2 -2
- package/templates/.agents/skills/create-pr/reference/pr-body-template.zh-CN.md +2 -2
- package/templates/.agents/skills/create-task/SKILL.en.md +5 -5
- package/templates/.agents/skills/create-task/SKILL.zh-CN.md +5 -5
- package/templates/.agents/skills/create-task/config/verify.json +1 -1
- package/templates/.agents/skills/import-issue/SKILL.en.md +8 -8
- package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +8 -8
- package/templates/.agents/skills/import-issue/config/verify.json +2 -2
- package/templates/.agents/skills/plan-task/SKILL.en.md +4 -4
- package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +4 -4
- package/templates/.agents/skills/plan-task/config/verify.en.json +1 -1
- package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/restore-task/SKILL.en.md +11 -6
- package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +11 -6
- package/templates/.agents/skills/restore-task/config/verify.json +1 -1
- package/templates/.agents/skills/review-analysis/SKILL.en.md +3 -3
- package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +3 -3
- package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -1
- package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/review-analysis/reference/report-template.en.md +7 -7
- package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +6 -6
- package/templates/.agents/skills/review-code/SKILL.en.md +5 -4
- package/templates/.agents/skills/review-code/SKILL.zh-CN.md +5 -4
- package/templates/.agents/skills/review-code/config/verify.en.json +1 -1
- package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/review-code/reference/report-template.en.md +12 -12
- package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +12 -12
- package/templates/.agents/skills/review-plan/SKILL.en.md +3 -3
- package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +3 -3
- package/templates/.agents/skills/review-plan/config/verify.en.json +1 -1
- package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/review-plan/reference/report-template.en.md +7 -7
- package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +7 -7
- package/templates/.agents/skills/review-pr/config/verify.en.json +1 -1
- package/templates/.agents/skills/review-pr/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/review-pr/reference/evidence-grading.en.md +3 -3
- package/templates/.agents/skills/review-pr/reference/evidence-grading.zh-CN.md +3 -3
- package/templates/.agents/skills/run-manual-validation/config/verify.en.json +1 -1
- package/templates/.agents/skills/run-manual-validation/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/run-task/SKILL.en.md +1 -1
- package/templates/.agents/skills/run-task/SKILL.zh-CN.md +1 -1
- package/templates/.agents/templates/task.en.md +1 -1
- package/templates/.agents/templates/task.zh-CN.md +1 -1
- package/templates/.claude/commands/import-issue.en.md +1 -1
- package/templates/.claude/commands/import-issue.zh-CN.md +1 -1
- package/templates/.claude/commands/restore-task.en.md +1 -1
- package/templates/.claude/commands/restore-task.zh-CN.md +1 -1
- package/dist/lib/host-control/audit.js +0 -19
- package/dist/lib/host-control/client.js +0 -142
- package/dist/lib/host-control/command.js +0 -49
- package/dist/lib/host-control/path.js +0 -160
- package/dist/lib/host-control/server.js +0 -159
- package/dist/lib/host-control/service.js +0 -112
- package/dist/lib/internal/host-control.js +0 -28
- package/lib/host-control/audit.ts +0 -22
- package/lib/host-control/client.ts +0 -172
- package/lib/host-control/command.ts +0 -60
- package/lib/host-control/path.ts +0 -167
- package/lib/host-control/server.ts +0 -180
- package/lib/host-control/service.ts +0 -133
- package/lib/internal/host-control.ts +0 -28
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"expected_action_pattern": "(Review Analysis|Analysis Review) \\(Round \\d+\\)"
|
|
28
28
|
},
|
|
29
29
|
"platform-sync": {
|
|
30
|
-
"when": "
|
|
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
|
-
#
|
|
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,
|
|
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
|
|
|
@@ -111,8 +111,9 @@ Create `.agents/workspace/active/{task-id}/{review-artifact}`.
|
|
|
111
111
|
### 6. Update Task Status
|
|
112
112
|
|
|
113
113
|
Update task.md:
|
|
114
|
-
- After the report,
|
|
115
|
-
-
|
|
114
|
+
- After the report, call `agent-infra-internal task-review {task-id} preflight --stage code --artifact {review-artifact} {execution-flag}` before any ledger write. On failure, follow `.agents/rules/local-artifact-repair.md`; on success, bind `{recovery-id}` from the response.
|
|
115
|
+
- Only after preflight passes, 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
|
|
116
|
+
- After all ledger writes, call `agent-infra-internal task-review {task-id} finalize-summary --stage code --artifact {review-artifact} --recovery-id {recovery-id} {execution-flag}`; never treat an error type or `changed=false` as automatic authorization
|
|
116
117
|
|
|
117
118
|
Bind and reuse this structured mapping from that one response:
|
|
118
119
|
|
|
@@ -130,7 +131,7 @@ Update task.md:
|
|
|
130
131
|
Always include the `Manual-validation: {n}` field in the done log, including when it is 0.
|
|
131
132
|
`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
133
|
|
|
133
|
-
If task.md contains a valid `
|
|
134
|
+
If task.md contains a valid `platform_issue_identity`, perform these sync actions (skip and continue on any failure):
|
|
134
135
|
- Run `agent-infra-internal platform-issue sync {task-id} --agent {standard-agent-token} --status in-progress`
|
|
135
136
|
- Run `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
|
|
136
137
|
- 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
|
|
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
|
|
|
@@ -109,8 +109,9 @@ agent-infra-internal task-artifact {task-id} init --family review-code --artifac
|
|
|
109
109
|
|
|
110
110
|
### 6. 更新任务状态
|
|
111
111
|
|
|
112
|
-
-
|
|
113
|
-
-
|
|
112
|
+
- 报告完成后,先调用 `agent-infra-internal task-review {task-id} preflight --stage code --artifact {review-artifact} {execution-flag}`,不得先写入账本。失败后是否继续编辑并重跑,必须遵循 `.agents/rules/local-artifact-repair.md`;通过时从返回值绑定 `{recovery-id}`。
|
|
113
|
+
- 只有 preflight 通过后,新 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`。不得扫描编号或手写账本行
|
|
114
|
+
- 全部账本写入完成后调用 `agent-infra-internal task-review {task-id} finalize-summary --stage code --artifact {review-artifact} --recovery-id {recovery-id} {execution-flag}`;不能把失败类型或 `changed=false` 当作自动授权
|
|
114
115
|
|
|
115
116
|
从该次返回值绑定并复用以下结构化映射:
|
|
116
117
|
|
|
@@ -128,7 +129,7 @@ agent-infra-internal task-artifact {task-id} init --family review-code --artifac
|
|
|
128
129
|
完成日志必须始终写入 `Manual-validation: {n}` 字段,0 也保留。
|
|
129
130
|
`manual-validation` 是 `ai task log` 中 review 行「人工校验点」(EN `Manual-validation`)计数的数据源;不要新增并行人工验证字段。
|
|
130
131
|
|
|
131
|
-
如果 task.md 中存在有效的 `
|
|
132
|
+
如果 task.md 中存在有效的 `platform_issue_identity`,执行以下同步操作(任一失败则跳过并继续):
|
|
132
133
|
- 调用 `agent-infra-internal platform-issue sync {task-id} --agent {standard-agent-token} --status in-progress`
|
|
133
134
|
- 调用 `agent-infra-internal platform-comment sync {task-id} --kind task --agent {standard-agent-token}`
|
|
134
135
|
- 调用 `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": "
|
|
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": "
|
|
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,
|
|
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
|
|
|
@@ -83,7 +83,7 @@ Create `.agents/workspace/active/{task-id}/{review-artifact}`.
|
|
|
83
83
|
|
|
84
84
|
### 6. Update Task Status
|
|
85
85
|
|
|
86
|
-
After the report, submit each new finding with `agent-infra-internal task-ledger {task-id} finding-upsert --stage plan --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}
|
|
86
|
+
After the report, call `agent-infra-internal task-review {task-id} preflight --stage plan --artifact {review-artifact} {execution-flag}` before any ledger write. On failure, follow `.agents/rules/local-artifact-repair.md`; on success, bind `{recovery-id}` from the response. Only after preflight passes, submit each new finding with `agent-infra-internal task-ledger {task-id} finding-upsert --stage plan --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}` or prior-response dispositions with `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {evidence}`. Do not scan ids or edit ledger rows. After all ledger writes, call `agent-infra-internal task-review {task-id} finalize-summary --stage plan --artifact {review-artifact} --recovery-id {recovery-id} {execution-flag}`; never treat an error type or `changed=false` as automatic authorization.
|
|
87
87
|
|
|
88
88
|
Bind and reuse this structured mapping from that one response:
|
|
89
89
|
|
|
@@ -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 `
|
|
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
|
|
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
|
|
|
@@ -86,7 +86,7 @@ agent-infra-internal task-artifact {task-id} init --family review-plan --artifac
|
|
|
86
86
|
|
|
87
87
|
### 6. 更新任务状态
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
报告完成后,先调用 `agent-infra-internal task-review {task-id} preflight --stage plan --artifact {review-artifact} {execution-flag}`,不得先写入账本。失败后是否继续编辑并重跑,必须遵循 `.agents/rules/local-artifact-repair.md`;通过时从返回值绑定 `{recovery-id}`。只有 preflight 通过后,才逐条调用 `agent-infra-internal task-ledger {task-id} finding-upsert --stage plan --review-artifact {review-artifact} --ordinal {n} --severity {blocker|major|minor} --evidence {review-artifact}#{anchor}`,或复核上一轮响应时调用 `finding-review --id {ledger-id} --status {confirmed|closed|open|needs-human-decision} --evidence {相称证据}`。不得扫描编号或手写账本行。全部账本写入完成后调用 `agent-infra-internal task-review {task-id} finalize-summary --stage plan --artifact {review-artifact} --recovery-id {recovery-id} {execution-flag}`;不能把失败类型或 `changed=false` 当作自动授权。
|
|
90
90
|
|
|
91
91
|
从该次返回值绑定并复用以下结构化映射:
|
|
92
92
|
|
|
@@ -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 中存在有效的 `
|
|
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": "
|
|
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": "
|
|
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
|
-
#
|
|
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": "
|
|
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": "
|
|
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`
|
|
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
|
|
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
|
|
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`
|
|
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 完整可信 | 唯一任务且
|
|
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 且
|
|
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": "
|
|
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,
|
|
@@ -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": "
|
|
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,
|
|
@@ -17,7 +17,7 @@ The orchestrator delegates only and never executes a stage skill itself. First r
|
|
|
17
17
|
2. Before `begin-or-resume`, Codex selects a host. Without `AGENT_INFRA_CONTROL_TOKEN`, use direct-host. With task-bound control authority but no `AGENT_INFRA_CODEX_CONTROLLER_CONTEXT`, only run `codex-sandbox-controller run` with the complete policy and wait; the outer loop must not create a run, baseline, or receipt. With a context, run `verify-context` first. Stop on protocol, task/controller/process, lease, or source/profile discovery failures. Package/build/contract or hook/profile content drift is delivered as a structured warning and tells the user to rebuild the sandbox.
|
|
18
18
|
3. Run `task-orchestration {task-id} begin-or-resume --client {client}` with the complete explicit policy. With no explicit policy, core reads that client's configured policy; existing runs use persisted policy. Disk state outside the complete current structure fails closed without rewriting; finish or clear active runs before upgrading. Stop on paused/completed results.
|
|
19
19
|
4. Run `route`. On `completed`, run `agent-infra-internal task-verify {task-id} run-task.completed --format text` and stop. Only a `running` result with non-null `next` supplies action, role, round, artifact, requested model, and requested effort.
|
|
20
|
-
5. Codex runs `codex-lifecycle capability-arm --task-id {task-id}` once. The current loop's real PostToolUse must attest that ordinary tool response. Pass its `capabilityRef` marker, the exact routed model, and the exact routed reasoning effort to `prepare --client {client} --requested-model {requestedModel} --requested-reasoning-effort {requestedReasoningEffort} --capability-ref {capabilityRef}`. Core accepts only the phase attestation issued by the current controller issuer: `orchestration.prepare` reserves the capability, then `artifact
|
|
20
|
+
5. Codex runs `codex-lifecycle capability-arm --task-id {task-id}` once. The current loop's real PostToolUse must attest that ordinary tool response. Pass its `capabilityRef` marker, the exact routed model, and the exact routed reasoning effort to `prepare --client {client} --requested-model {requestedModel} --requested-reasoning-effort {requestedReasoningEffort} --capability-ref {capabilityRef}`. Core accepts only the phase attestation issued by the current controller issuer: `orchestration.prepare` reserves the capability, then `artifact.finalize-local` and `task-event.completed` validate and consume their own phases; the underlying capability is terminally consumed only after the completed commit is confirmed. Without current controller proof, direct-host returns `LOCAL_EXECUTION_AUTHORITY_UNAVAILABLE` and creates no recovery intent, baseline, receipt, or child. Activation then verifies that spawn belongs to the same session and turn and uses a distinct tool-use. Other clients use the same prepare without authority. Failure creates no baseline, receipt, or child.
|
|
21
21
|
6. After prepare, run `task-orchestration <task-ref> dispatch` immediately before calling the fresh native child, then use route's exact model/effort and only the short task ref, skill, `--orchestrated`, and stage identity. The trusted hook-spawn first-observation time must fall between dispatch and the deadline. Its first provenance-sensitive command must be `await-activation --stage ... --round ... --artifact ... --role ...`; before `running`, it must not snapshot, emit stage-started, or write business files. The code stage may create a local checkpoint only through code-task's durable intent core; it must not delegate a separate commit stage or push. Only explicit `recover-prepared` may clear an expired orphan when the task fingerprint is exact and no matching unconsumed active lifecycle evidence remains.
|
|
22
22
|
7. Codex uses SubagentStart/Stop and App Server actual evidence to activate, consume, and seal one receipt; trusted parent fallback must produce the same complete provenance. Timed-out waits do nothing. Advance only a sealed receipt and repeat step 4 only while running.
|
|
23
23
|
8. Create a fresh child each round and never follow up with an old reviewer. Each requested/actual mismatch needs its own host fallback reason. Protocol, capability, receipt hook/evidence binding, source, controller, identity, ledger, or fingerprint failure pauses and fails closed; cross-root package/build/contract or hook/profile content drift is delivered as a warning instead of blocking natural evolution.
|
|
@@ -17,7 +17,7 @@ description: >
|
|
|
17
17
|
2. Codex 在 `begin-or-resume` 前选择宿主:没有 `AGENT_INFRA_CONTROL_TOKEN` 时使用 direct-host;有 task-bound control authority 但没有 `AGENT_INFRA_CODEX_CONTROLLER_CONTEXT` 时,只调用 `agent-infra-internal codex-sandbox-controller run`(转发完整显式策略)并等待其终态,外层不得创建 run、baseline 或 receipt;已有 context 时先调用 `verify-context`。protocol、task/controller/process、lease 或 source/profile discovery 校验失败即停止;package/build/contract 或 hook/profile 内容漂移只输出结构化 warning,并提示用户重建 sandbox。
|
|
18
18
|
3. 调用 `agent-infra-internal task-orchestration {task-id} begin-or-resume --client {client}` 并转发完整显式策略。完全没有显式策略时由核心读取当前 client 的 `agentClients[].orchestration`;existing run 使用持久化策略。磁盘状态不符合当前完整结构时核心失败关闭且不改写;升级前必须完成或清空 active run。仅当核心返回 `ORCHESTRATION_MODEL_POLICY_REQUIRED` 时,先用 `agent-client model-selection` 展示 complete/partial/interactive-only 来源,再一次收集完整策略;未回答则不创建 run。若为 paused/completed,按结构化结果停止。
|
|
19
19
|
4. 调用 `route` 并读取结构化结果。若返回 `completed`,立即运行 `agent-infra-internal task-verify {task-id} run-task.completed --format text` 并停止;仅当返回 `running` 且 `next` 非空时读取唯一 action、role、round、artifact、`requestedModel` 和 `requestedReasoningEffort`,不得自行推断。
|
|
20
|
-
5. Codex 先调用一次 `agent-infra-internal codex-lifecycle capability-arm --task-id {task-id}`。该普通工具调用必须由当前 loop 的真实 PostToolUse 回写 attestation;把 route 返回的精确 model、effort 和 marker 中的 `capabilityRef` 一并传给 `prepare --client {client} --requested-model {requestedModel} --requested-reasoning-effort {requestedReasoningEffort} --capability-ref {capabilityRef}`。核心只接受当前 controller issuer 根据 typed lifecycle authority request 签发的 phase attestation:`orchestration.prepare` 只 reserve capability,随后由 `artifact
|
|
20
|
+
5. Codex 先调用一次 `agent-infra-internal codex-lifecycle capability-arm --task-id {task-id}`。该普通工具调用必须由当前 loop 的真实 PostToolUse 回写 attestation;把 route 返回的精确 model、effort 和 marker 中的 `capabilityRef` 一并传给 `prepare --client {client} --requested-model {requestedModel} --requested-reasoning-effort {requestedReasoningEffort} --capability-ref {capabilityRef}`。核心只接受当前 controller issuer 根据 typed lifecycle authority request 签发的 phase attestation:`orchestration.prepare` 只 reserve capability,随后由 `artifact.finalize-local` 和 `task-event.completed` 各自独立校验并消费 phase;底层 capability 仅在 completed commit 已确认后 terminal consume。没有 current controller proof 时 direct-host 返回 `LOCAL_EXECUTION_AUTHORITY_UNAVAILABLE`,不得创建 recovery intent、baseline、receipt 或 child。activation 再校验 spawn 与该来源属于同一 session/turn,且 spawn 使用独立的 tool-use。其他客户端直接调用同一 prepare(无 authority)。任一失败不得创建 baseline、receipt 或 child。
|
|
21
21
|
6. prepare 成功后,在调用 fresh 原生子 Agent 的紧邻前一步执行 `task-orchestration <task-ref> dispatch`,再显式覆盖 route 返回的 model/effort;只传短任务引用、skill 名、`--orchestrated` 与 stage/round/artifact/role。可信 hook-spawn 首次观察时间必须位于 dispatch 与 deadline 之间。child 的第一条 provenance-sensitive 命令必须是 `await-activation --stage ... --round ... --artifact ... --role ...`;返回 running 前禁止 snapshot、阶段 started 或业务写入;代码阶段的本地 checkpoint 只能通过 code-task 的持久化 intent 核心完成,禁止单独委派 commit 阶段或推送。超时由核心暂停;崩溃遗留 prepared receipt 只能在 exact workspace fingerprint、无匹配的未消费 active lifecycle evidence 且 deadline 已过时显式 `recover-prepared`。
|
|
22
22
|
7. Codex 用 SubagentStart/Stop 与 App Server actual evidence 激活、消费并封存唯一 receipt;受信 parent fallback 仍必须形成相同的完整 provenance。timed-out wait 无动作;只有 empty turns 或协议 `inProgress` 可等待,malformed、身份/传输错误或异常 terminal 均暂停。子 Agent 返回后只对 sealed receipt 调用 `advance`;只有 `running` 才重复步骤 4。
|
|
23
23
|
8. 每轮创建新 child;禁止 follow-up 复用 reviewer。actual model/effort 与 requested 不同时必须有各自的宿主降级理由。protocol、capability、receipt 内 hook/evidence binding、source、controller、身份、账本或 fingerprint 异常都调用 `pause` 并失败关闭;跨根 package/build/contract 或 hook/profile 内容漂移按 warning 交付,不把自然演进差异当成硬失败。
|
|
@@ -13,7 +13,7 @@ start_date: # Optional Issue field for Feature: YYYY-MM-DD
|
|
|
13
13
|
target_date: # Optional Issue field for Feature: YYYY-MM-DD
|
|
14
14
|
current_step: requirement-analysis # requirement-analysis | requirement-analysis-review | technical-design | technical-design-review | code | code-review | completed
|
|
15
15
|
assigned_to: # claude | codex | antigravity | opencode | human
|
|
16
|
-
pr_delivery_fact: '{"version":
|
|
16
|
+
pr_delivery_fact: '{"version":2,"state":"unbound","reason":"initial"}'
|
|
17
17
|
delivery_remote: origin # Git remote used to deliver the task branch
|
|
18
18
|
delivery_base_ref: main # Target branch for the task PR
|
|
19
19
|
checkpoint_commit: # Most recent local checkpoint commit
|
|
@@ -13,7 +13,7 @@ start_date: # Feature 可选 Issue 字段:YYYY-MM-DD
|
|
|
13
13
|
target_date: # Feature 可选 Issue 字段:YYYY-MM-DD
|
|
14
14
|
current_step: requirement-analysis # requirement-analysis | requirement-analysis-review | technical-design | technical-design-review | code | code-review | completed
|
|
15
15
|
assigned_to: # claude | codex | antigravity | opencode | human
|
|
16
|
-
pr_delivery_fact: '{"version":
|
|
16
|
+
pr_delivery_fact: '{"version":2,"state":"unbound","reason":"initial"}'
|
|
17
17
|
delivery_remote: origin # 任务分支交付使用的 Git remote
|
|
18
18
|
delivery_base_ref: main # 任务 PR 的目标分支
|
|
19
19
|
checkpoint_commit: # 最近一次本地 checkpoint commit
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
export const HOST_CONTROL_AUDIT_FILE = 'audit.ndjson';
|
|
4
|
-
export function hostControlAuditPath(endpoint) {
|
|
5
|
-
return path.join(path.dirname(endpoint), HOST_CONTROL_AUDIT_FILE);
|
|
6
|
-
}
|
|
7
|
-
export function appendHostControlAudit(endpoint, entry, at = Date.now()) {
|
|
8
|
-
const filePath = hostControlAuditPath(endpoint);
|
|
9
|
-
const descriptor = fs.openSync(filePath, 'a', 0o600);
|
|
10
|
-
try {
|
|
11
|
-
fs.fchmodSync(descriptor, 0o600);
|
|
12
|
-
fs.writeFileSync(descriptor, `${JSON.stringify({ version: 1, at, ...entry })}\n`, 'utf8');
|
|
13
|
-
fs.fsyncSync(descriptor);
|
|
14
|
-
}
|
|
15
|
-
finally {
|
|
16
|
-
fs.closeSync(descriptor);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=audit.js.map
|