@accelerator-mzq/forge 3.1.1 → 4.0.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/dist/cli/commands/archive.d.ts +32 -33
- package/dist/cli/commands/archive.d.ts.map +1 -1
- package/dist/cli/commands/archive.js +339 -667
- package/dist/cli/commands/archive.js.map +1 -1
- package/dist/cli/commands/legacy-bridge.js +1 -1
- package/dist/cli/commands/legacy-bridge.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +2 -51
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +4 -25
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/index.js +0 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/core/archive/index.d.ts +2 -3
- package/dist/core/archive/index.d.ts.map +1 -1
- package/dist/core/archive/index.js +7 -5
- package/dist/core/archive/index.js.map +1 -1
- package/dist/core/archive/summary-builder.d.ts +26 -21
- package/dist/core/archive/summary-builder.d.ts.map +1 -1
- package/dist/core/archive/summary-builder.js +115 -223
- package/dist/core/archive/summary-builder.js.map +1 -1
- package/dist/core/archive/summary-render.d.ts +5 -3
- package/dist/core/archive/summary-render.d.ts.map +1 -1
- package/dist/core/archive/summary-render.js +38 -44
- package/dist/core/archive/summary-render.js.map +1 -1
- package/dist/core/lock.d.ts +46 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +98 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/markers/types.d.ts +27 -134
- package/dist/core/markers/types.d.ts.map +1 -1
- package/dist/core/markers/types.js +10 -1
- package/dist/core/markers/types.js.map +1 -1
- package/dist/core/migrate/index.js +1 -1
- package/dist/core/migrate/index.js.map +1 -1
- package/dist/core/monitor/artifact-observer.d.ts.map +1 -1
- package/dist/core/monitor/artifact-observer.js +28 -78
- package/dist/core/monitor/artifact-observer.js.map +1 -1
- package/dist/core/monitor/divergence-map.d.ts.map +1 -1
- package/dist/core/monitor/divergence-map.js +9 -7
- package/dist/core/monitor/divergence-map.js.map +1 -1
- package/dist/core/monitor/health-verdict.d.ts.map +1 -1
- package/dist/core/monitor/health-verdict.js +2 -1
- package/dist/core/monitor/health-verdict.js.map +1 -1
- package/dist/core/monitor/trace-store.d.ts +1 -1
- package/dist/core/monitor/trace-store.js +2 -2
- package/dist/core/monitor/trace-store.js.map +1 -1
- package/dist/core/monitor/types.d.ts +1 -1
- package/dist/core/monitor/types.d.ts.map +1 -1
- package/dist/core/monitor/types.js +0 -1
- package/dist/core/monitor/types.js.map +1 -1
- package/dist/core/schemas/archive-summary.d.ts +39 -109
- package/dist/core/schemas/archive-summary.d.ts.map +1 -1
- package/dist/core/schemas/archive-summary.js +15 -23
- package/dist/core/schemas/archive-summary.js.map +1 -1
- package/dist/core/templates/commands/apply.md +49 -112
- package/dist/core/templates/commands/archive.md +43 -160
- package/dist/core/templates/commands/review.md +49 -74
- package/dist/core/templates/commands/upgrade.md +21 -40
- package/dist/core/templates/commands/verify.md +43 -146
- package/dist/core/templates/skills/_shared/tier23-command-bridge.md +8 -8
- package/dist/core/templates/skills/receiving-code-review.md +14 -45
- package/dist/core/templates/skills/requesting-code-review.md +4 -4
- package/dist/core/templates/skills/subagent-driven-development.md +25 -30
- package/dist/core/templates/skills/subagent-driven-discipline.md +28 -28
- package/dist/core/templates/skills/using-forge.md +24 -23
- package/dist/core/templates/skills/verification-before-completion.md +4 -4
- package/dist/core/templates/skills/verifying-three-dimensions.md +93 -169
- package/dist/core/validate/archive-summary-schema.d.ts +1 -1
- package/dist/core/validate/archive-summary-schema.d.ts.map +1 -1
- package/dist/core/validate/archive-summary-schema.js +101 -125
- package/dist/core/validate/archive-summary-schema.js.map +1 -1
- package/dist/core/validate/index.d.ts +0 -1
- package/dist/core/validate/index.d.ts.map +1 -1
- package/dist/core/validate/index.js +2 -1
- package/dist/core/validate/index.js.map +1 -1
- package/dist/core/validate/marker-schema.d.ts +12 -4
- package/dist/core/validate/marker-schema.d.ts.map +1 -1
- package/dist/core/validate/marker-schema.js +98 -605
- package/dist/core/validate/marker-schema.js.map +1 -1
- package/package.json +18 -20
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: 派 review subagent 审 [proposal + specs + design + diff]
|
|
2
|
+
description: 派 review subagent 审 [proposal + specs + design + diff],主代理处理反馈,满足三条件写 .review-passed v2 marker
|
|
3
3
|
argument-hint: '[--change-id <id>]'
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -9,77 +9,55 @@ You are about to handle `/forge:review $ARGUMENTS`.
|
|
|
9
9
|
|
|
10
10
|
## 步骤
|
|
11
11
|
|
|
12
|
-
1.
|
|
13
|
-
2.
|
|
14
|
-
3.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
4.
|
|
20
|
-
5.
|
|
21
|
-
6.
|
|
22
|
-
7.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
若漏调 record-review 直接 freeze → exit 1 + 提示 "staging file not found"(代码事实 `evidence.ts:639`)。若漏调 freeze → archive fence 拒签 "[review] v1.0 marker missing process_evidence"(代码事实 `src/core/archive/fence.ts:185`)。
|
|
45
|
-
|
|
46
|
-
8. `.review-passed` YAML schema(spec §3.4)— 含 `pause_decisions` 数组(本 fix 补 lifecycle 注):
|
|
47
|
-
```yaml
|
|
48
|
-
schema: forge-review/v1
|
|
49
|
-
tasks_hash: <sha256(tasks.md 已勾段)>
|
|
50
|
-
content_hash: <sha256(proposal+specs+design)>
|
|
51
|
-
reviewed_by: ai-agent # 或 human-override(需 archive --force)
|
|
52
|
-
git:
|
|
53
|
-
is_git_repo: true
|
|
54
|
-
head: <git rev-parse HEAD>
|
|
55
|
-
diff_hash: <sha256(git diff against forge/config.yaml code_paths)>
|
|
56
|
-
review_outcomes:
|
|
57
|
-
- id: 1
|
|
58
|
-
severity: blocking
|
|
59
|
-
accepted: true
|
|
60
|
-
resolved: true
|
|
61
|
-
resolution_commit: <hash>
|
|
62
|
-
pause_decisions: # apply 阶段累积的 pause 决策在写本 marker 时一并迁移(沿 commands/apply.md "Marker 持久化" 段 lifecycle 说明)
|
|
63
|
-
- id: 1
|
|
64
|
-
# ... 完整 schema 见 commands/apply.md "Marker 持久化" 段
|
|
65
|
-
```
|
|
12
|
+
1. **必须调用 `forge:requesting-code-review` skill**(主轨)。
|
|
13
|
+
2. **必须调用 `forge:receiving-code-review` skill**(收反馈环节)。
|
|
14
|
+
3. 打包 review 输入:
|
|
15
|
+
- `forge/changes/<id>/proposal.md`
|
|
16
|
+
- `forge/changes/<id>/specs/*.md`
|
|
17
|
+
- `forge/changes/<id>/design.md`
|
|
18
|
+
- `git diff <since-tasks-start>..HEAD`(`since-tasks-start` 取 tasks.md 末尾 `applied_commits` 第一个 commit 的 parent)
|
|
19
|
+
4. 派 fresh review subagent,产出意见列表(每条带:[严重度]、[文件路径]、[问题描述]、[期望修改])。
|
|
20
|
+
5. 主代理对每条意见**逐条判断接受/拒绝**(参考 `forge:receiving-code-review` skill 的"用证据反驳"原则,不机械接受)。
|
|
21
|
+
6. 接受的意见 → append 到 `forge/changes/<id>/tasks.md` 末尾作为新 task 条目,实施 + commit。
|
|
22
|
+
7. **仅当满足三条件,才写 `.review-passed` v2 marker**:
|
|
23
|
+
- a. 无"已用证据反驳但未存档"的拒绝意见
|
|
24
|
+
- b. 接受的意见已**全部实现 + 测试通过**(本轮新接受的意见**不算本轮通过**,需下一轮 review)
|
|
25
|
+
- c. 满足 a+b 时,本轮 review 无新增 task
|
|
26
|
+
|
|
27
|
+
8. **`.review-passed` v2 marker 示例**(沿 `src/core/markers/types.ts:ReviewMarker`):
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
schema: forge-review/v2
|
|
31
|
+
reviewed_at: <ISO 8601 UTC,允许 ms 精度>
|
|
32
|
+
reviewed_by: ai-agent # 或 human-override(需 archive --force)
|
|
33
|
+
pause_decisions: # 可选 — 同 verify marker 的 PauseDecisionSimple
|
|
34
|
+
- paused_at: 2026-05-21T15:00:00Z
|
|
35
|
+
task_ref: tasks.md#task-7
|
|
36
|
+
issue_summary: review subagent 发现 spec 未覆盖的 edge case
|
|
37
|
+
chosen_option: 2
|
|
38
|
+
notes: '加 task 进本轮 tasks.md'
|
|
39
|
+
created_by_tool_version: <FORGE_VERSION>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
schema 字段只 5 个,无 hash / git / process_evidence / review_outcomes / evidence 数组。
|
|
66
43
|
|
|
67
44
|
## 禁止行为
|
|
68
45
|
|
|
69
|
-
- 不允许跳过 review subagent
|
|
70
|
-
-
|
|
71
|
-
-
|
|
46
|
+
- 不允许跳过 review subagent 直接写 .review-passed
|
|
47
|
+
- 不允许接受意见但不实现就写 .review-passed(违反条件 b)
|
|
48
|
+
- 不允许伪造 `reviewed_by` 字段
|
|
49
|
+
- **不允许在 .review-passed 写 v4 已删字段**(`review_outcomes` / `git` / `tasks_hash` / `content_hash` / `process_evidence` — schema 校验会拒)
|
|
72
50
|
|
|
73
51
|
## (可选)Stage extensions hook — Tier 1 Claude Code only
|
|
74
52
|
|
|
75
53
|
> codex review 集成。AI 主代理在本 stage(`review`)跑多轮收敛协议。
|
|
76
54
|
> Tier 2/3(Codex/OpenCode)见 [`docs/stage-extensions.md §未来 Tier 2/3 集成`](../docs/stage-extensions.md#未来-tier-23-集成)。
|
|
77
55
|
|
|
78
|
-
**Step A — 检查是否启用**:读 `forge/config.yaml#stage_extensions.review`。无该字段 / 数组为空 / 全部 entry `enabled: false` →
|
|
56
|
+
**Step A — 检查是否启用**:读 `forge/config.yaml#stage_extensions.review`。无该字段 / 数组为空 / 全部 entry `enabled: false` → **跳过本段**。
|
|
79
57
|
|
|
80
58
|
**Step B — 对每个 `enabled` entry 跑多轮收敛 loop**:
|
|
81
59
|
|
|
82
|
-
初始化 `round = 1`、`threadId = ''`、`roundHistory = []`、`roundLimit = null
|
|
60
|
+
初始化 `round = 1`、`threadId = ''`、`roundHistory = []`、`roundLimit = null`。循环:
|
|
83
61
|
|
|
84
62
|
1. **跑单轮 runner**:
|
|
85
63
|
```bash
|
|
@@ -88,18 +66,15 @@ You are about to handle `/forge:review $ARGUMENTS`.
|
|
|
88
66
|
--round <round>${threadId:+ --thread-id $threadId}
|
|
89
67
|
```
|
|
90
68
|
2. **解析 stdout JSON 的 `kind`**:
|
|
91
|
-
- `converged` →
|
|
92
|
-
- `failed` / `config_error` / `no_extension` →
|
|
69
|
+
- `converged` → break loop(codex 输出 verbatim 透传)
|
|
70
|
+
- `failed` / `config_error` / `no_extension` → break loop(loose)
|
|
93
71
|
- `unconverged` → 继续 3
|
|
94
|
-
3. **从 unconverged JSON
|
|
95
|
-
- `roundHistory.push({ round, block_count: <blockFindings.length> })`;`threadId = <JSON.threadId>`;codex finding verbatim
|
|
96
|
-
- 首轮:`roundLimit = <JSON.effectiveConvergence.max_rounds>`
|
|
97
|
-
4. **若 `round >= roundLimit
|
|
98
|
-
- 若 `<JSON.effectiveConvergence.max_rounds_on_exceed>` 为 `force_end` →
|
|
99
|
-
- 否则跑 `
|
|
100
|
-
5.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
- **③give_up** → break loop
|
|
104
|
-
|
|
105
|
-
**Step C — loose**:本段任何步骤(runner 调用 / AskUserQuestion / fix dispatch)失败都**不阻塞主流程 fence**。runner 永远 exit 0;AskUserQuestion harness 不支持时降级终端 prompt。
|
|
72
|
+
3. **从 unconverged JSON 取状态**:
|
|
73
|
+
- `roundHistory.push({ round, block_count: <blockFindings.length> })`;`threadId = <JSON.threadId>`;codex finding verbatim 透传
|
|
74
|
+
- 首轮:`roundLimit = <JSON.effectiveConvergence.max_rounds>`
|
|
75
|
+
4. **若 `round >= roundLimit`**:
|
|
76
|
+
- 若 `<JSON.effectiveConvergence.max_rounds_on_exceed>` 为 `force_end` → blockFindings 写 `forge/changes/<id>/.evidence/codex-pending-findings.yaml`,break
|
|
77
|
+
- 否则跑 `stage-extensions analyze-trend` 拿 TrendAdvice,AskUserQuestion 三选项:**①再跑 N 轮**(`roundLimit += N`,`round++`)/ **②放弃 codex**(break)/ **③接受当前**(写 backlog,break)
|
|
78
|
+
5. **否则**:AskUserQuestion 三选项(默认推 `<JSON.userInteraction.block_unconverged>`):**①auto_fix** → dispatch fresh fix subagent → `round++` / **②manual_fix** → 等用户改 → `round++` / **③give_up** → break
|
|
79
|
+
|
|
80
|
+
**Step C — loose**:本段任何步骤失败都**不阻塞主流程**。
|
|
@@ -1,58 +1,39 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: 调 forge upgrade CLI(legacy
|
|
3
|
-
argument-hint: '[--
|
|
2
|
+
description: 调 forge upgrade CLI(清理 legacy v0.2 harness adapter 产物)
|
|
3
|
+
argument-hint: '[--dry-run] [--recover] [--gc]'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /forge:upgrade
|
|
7
7
|
|
|
8
|
-
包装 `forge upgrade` CLI(v0.3 /
|
|
8
|
+
包装 `forge upgrade` CLI(v0.3 起)。**仅清理 legacy harness adapter 产物;`forge/` 下 drafts/changes/specs/config 100% 不动**。
|
|
9
9
|
|
|
10
|
-
## 用法
|
|
11
|
-
|
|
12
|
-
- `forge upgrade`(无 flag,沿 v0.3):清理 legacy v0.2 harness adapter 产物
|
|
13
|
-
- `forge upgrade --resign-markers <changeId>`(plan-9j 新增 option):升级 v0.4 marker 到 v1.0 schema
|
|
14
|
-
|
|
15
|
-
## --resign-markers 用法(plan-9j Task 2 落地)
|
|
10
|
+
## 用法
|
|
16
11
|
|
|
17
12
|
```bash
|
|
18
|
-
forge upgrade
|
|
13
|
+
forge upgrade # 清理 v0.2 legacy harness adapter 产物
|
|
14
|
+
forge upgrade --dry-run # 只 SHOW DIFF,不 stash
|
|
15
|
+
forge upgrade --recover # 恢复最近 stash(24h 有效期)
|
|
16
|
+
forge upgrade --gc # 删除过期 stash(>24h)
|
|
19
17
|
```
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **S 简码** → 自动映射 CRITICAL
|
|
24
|
-
- **L 简码** → 自动映射 SUGGESTION
|
|
25
|
-
- **C 简码** → 写 pending file 到 `.evidence/pending-acks/`,exit 1 + 提示走 `forge ack confirm`
|
|
26
|
-
- **不自动填空** verify_findings / pause_decisions / process_evidence(违反 AI 反向加固)
|
|
27
|
-
- 改标 `process_evidence_unavailable_legacy: true` meta 字段
|
|
28
|
-
- 写 `ack-log.jsonl` action=resign 行
|
|
29
|
-
|
|
30
|
-
退出码(沿 master §3.12.3):
|
|
31
|
-
|
|
32
|
-
- 0:全部 marker resigned 或已是 v1.0
|
|
33
|
-
- 1:部分需 C 简码 confirm / 阶段事务失败
|
|
34
|
-
- 2:CI 模式拒绝(env CI=true)
|
|
35
|
-
|
|
36
|
-
## C 简码迁移协议(完整流程)
|
|
19
|
+
## 6 阶段事务
|
|
37
20
|
|
|
38
|
-
|
|
21
|
+
SCAN(纯只读)→ SHOW DIFF(只读)→ ASK(等用户输入)→ STASH(rename 到 `.forge-upgrade-stash-<ts>/`)→ VERIFY(hash 比对)→ COMMIT(默认不删 stash,24h 内可 `--recover`)。
|
|
39
22
|
|
|
40
|
-
|
|
41
|
-
2. 跑 `forge ack confirm <changeId> <findingId> --target-severity WARNING|SUGGESTION`(或走 `/forge:ack-confirm` slash)
|
|
42
|
-
3. 重跑 `forge upgrade --resign-markers <changeId>` 完成 resign
|
|
23
|
+
任一阶段失败自动反向 rename 回原位。
|
|
43
24
|
|
|
44
|
-
##
|
|
25
|
+
## 退出码
|
|
45
26
|
|
|
46
|
-
|
|
27
|
+
- `0`:全部成功 / 无 legacy 产物
|
|
28
|
+
- `1`:STASH/VERIFY 失败(已回滚)/ stash 损坏(hash mismatch / 过期)
|
|
47
29
|
|
|
48
|
-
|
|
49
|
-
- v1.2:warning 加强
|
|
50
|
-
- v2.0:拒签,`forge migrate <change-id>` 自动触发 process_evidence 补录
|
|
30
|
+
## v3 → v4 marker 升级路径
|
|
51
31
|
|
|
52
|
-
|
|
32
|
+
v4 BREAKING:**已移除 `--resign-markers` flag**。v0.4 / v1.0 marker → v4 v2 marker 不再有 CLI 自动升级路径;v3 protocol(ack-log / verify_findings / process_evidence / 简码 S/C/L)在 v4 全部消亡。
|
|
53
33
|
|
|
54
|
-
|
|
34
|
+
唯一升级路径(沿 `docs/migration/v3-to-v4.md`):
|
|
55
35
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
36
|
+
1. 删除 active change 下的 `.verify-passed` / `.review-passed`(v1 marker)
|
|
37
|
+
2. 删 stale 残留:`forge/changes/<id>/.evidence/pending-acks/` + `forge/.cache/archive-pause-<id>.json`
|
|
38
|
+
3. 重跑 `/forge:verify` + `/forge:review`(产 v2 marker)
|
|
39
|
+
4. 重跑 `/forge:archive`(v4 校验 v2 schema 通过)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: 跑 forge validate + verification-before-completion +
|
|
2
|
+
description: 跑 forge validate + verification-before-completion + 三维度 prose check,写 .verify-passed v2 marker
|
|
3
3
|
argument-hint: '[--change-id <id>]'
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -11,158 +11,51 @@ You are about to handle `/forge:verify $ARGUMENTS`.
|
|
|
11
11
|
|
|
12
12
|
1. **必须调用 `forge:verification-before-completion` skill**(证据先于声称的纪律)。
|
|
13
13
|
|
|
14
|
-
2. **跑 `forge validate <change-id>`**(plugin helper 走 `${CLAUDE_PLUGIN_ROOT}/scripts/run-forge.mjs validate`)
|
|
14
|
+
2. **跑 `forge validate <change-id>`**(plugin helper 走 `${CLAUDE_PLUGIN_ROOT}/scripts/run-forge.mjs validate`)。
|
|
15
15
|
|
|
16
|
-
3. **若 validate 失败(exit 1
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
schema: forge-verify-failed/v1
|
|
20
|
-
failed_at: <ISO 8601>
|
|
21
|
-
reasons:
|
|
22
|
-
- <每个 CRITICAL finding 的 message>
|
|
23
|
-
fake_completions: []
|
|
24
|
-
appended_tasks:
|
|
25
|
-
- verify-fix-1
|
|
26
|
-
verify_findings: # plan-9d 新增 — validate CLI 产的 automated CRITICAL finding 直接合并
|
|
27
|
-
- id: 1
|
|
28
|
-
dimension: completeness
|
|
29
|
-
check_type: spec-files-missing
|
|
30
|
-
severity: CRITICAL
|
|
31
|
-
automated: true
|
|
32
|
-
finding_hash: <validate 输出的 hash>
|
|
33
|
-
evidence: <validate output>
|
|
34
|
-
recommendation: <validate output>
|
|
35
|
-
resolved: false
|
|
36
|
-
```
|
|
37
|
-
- **append 修复 task 到 `forge/changes/<id>/tasks.md`**(沿 v0.4 协议)
|
|
38
|
-
- **不要修改原已勾选 task**(维护 spec §3.3 不变量 2)
|
|
16
|
+
3. **若 validate 失败(exit 1)**:
|
|
17
|
+
- 不写 `.verify-failed` marker(v4 砍掉 failed marker schema)
|
|
18
|
+
- 直接 abort,把错误透传给用户,提示按 validate 错误修代码 / 改 spec 后重跑 `/forge:verify`
|
|
39
19
|
|
|
40
20
|
4. **若 validate 通过(exit 0)**:
|
|
41
21
|
|
|
42
|
-
4.1 **跑用户项目测试** — 读 `forge/config.yaml` 的 `test.test_command`,缺省 `pnpm test
|
|
43
|
-
|
|
44
|
-
4.2 **三维度分析 — 必须调用 `forge:verifying-three-dimensions` skill**(plan-9d 落地):
|
|
45
|
-
- **Completeness**:对 spec 每个 Requirement,grep codebase 找实施证据;完全无证据 → 产 CRITICAL `coverage_gap` finding(automated=true,工具可独立验证;沿 §11.1bis — `evidence_missing` 仅指 evidence.log_path 文件缺失,语义不同)
|
|
46
|
-
- **Correctness**:对 spec 每个 Requirement 定位实施 file:line;WHEN/THEN scenario 覆盖检查 → WARNING/SUGGESTION findings(automated=false)
|
|
47
|
-
- **Coherence**:design.md `## Decision:` 段比对 codebase;命名 / pattern 比对项目惯例 → WARNING/SUGGESTION findings(automated=false)
|
|
48
|
-
- **每个 finding 必须填**:id / dimension / check_type / severity / automated / content_hash / git_head / evidence / recommendation / resolved + finding_hash(JCS SHA256 of 8 字段 payload,沿 9a)
|
|
49
|
-
- **`automated=true` 的 finding 必须由工具或 CLI 计算 finding_hash**(直接 grep 命中数等机器判定);AI 不能伪造此类 finding
|
|
50
|
-
- **`automated=false` 的 finding 由 AI 产**,需 `forge ack propose` 走两步流程才能降级或带未 ack archive(沿 9a)
|
|
51
|
-
- **AI 计算 finding_hash 必须用 `forge finding hash` helper**(v6 M-1 修订 + v7 N-1 修订:沿 plan-9d Task 4 step 12-13)— 防止 AI 自实现 JCS 易出错。示例**用 heredoc 避免单引号 shell 破损**(JSON 内换行 / 单引号 / 中文均安全):
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
# 把 8 字段 payload 写成 JSON pipe 给 helper,helper 输出 64-hex finding_hash
|
|
55
|
-
cat <<'JSON' | forge finding hash
|
|
56
|
-
{
|
|
57
|
-
"content_hash": "sha256:abc123...",
|
|
58
|
-
"git_head": "d4e5f6...",
|
|
59
|
-
"dimension": "correctness",
|
|
60
|
-
"check_type": "requirement-mapping",
|
|
61
|
-
"severity": "WARNING",
|
|
62
|
-
"automated": false,
|
|
63
|
-
"evidence": "specs/auth/spec.md Requirement #2 在 src/auth/refresh.ts:42 实现 expiryHours=12,spec 默认 24h",
|
|
64
|
-
"recommendation": "改 expiryHours=24 或修订 spec"
|
|
65
|
-
}
|
|
66
|
-
JSON
|
|
67
|
-
# 输出:1234abcd5678ef90... (64-hex 裸 hex 沿 9a)
|
|
68
|
-
```
|
|
22
|
+
4.1 **跑用户项目测试** — 读 `forge/config.yaml` 的 `test.test_command`,缺省 `pnpm test`,失败 abort 让用户修。
|
|
69
23
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
24
|
+
4.2 **三维度 prose check — 必须调用 `forge:verifying-three-dimensions` skill**:
|
|
25
|
+
- **Completeness**:对 spec 每个 Requirement,grep codebase 找实施证据;空 → 报告给用户
|
|
26
|
+
- **Correctness**:对 spec 每个 Requirement 定位实施 file:line;WHEN/THEN scenario 覆盖检查
|
|
27
|
+
- **Coherence**:design.md `## Decision:` 段比对 codebase;命名 / pattern 比对项目惯例
|
|
28
|
+
- 三维度发现的问题以 prose 形式呈现给用户(对话内 + 必要时改 code 或 spec);**不写 marker 内 fence 字段**(v4 删 `verify_findings` 数组)
|
|
74
29
|
|
|
75
|
-
|
|
30
|
+
4.3 **写 `forge/changes/<id>/.verify-passed` v2 marker**(沿 `src/core/markers/types.ts:VerifyMarker`):
|
|
76
31
|
|
|
77
32
|
```yaml
|
|
78
|
-
schema: forge-verify/
|
|
79
|
-
verified_at: <ISO 8601
|
|
80
|
-
verified_by: ai-agent
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
log_hash: <log_hash>
|
|
89
|
-
pass: true
|
|
90
|
-
verify_findings: # plan-9d 新增 — validate CLI 自动 CRITICAL + skill 产 WARNING/SUGGESTION 合并数组
|
|
91
|
-
- id: 1
|
|
92
|
-
dimension: completeness
|
|
93
|
-
check_type: spec-coverage
|
|
94
|
-
severity: WARNING
|
|
95
|
-
automated: false
|
|
96
|
-
content_hash: <sha256>
|
|
97
|
-
git_head: <40-hex>
|
|
98
|
-
evidence: 'specs/auth/spec.md Requirement #2 在 src/auth/refresh.ts:42 实现 expiryHours=12,spec 默认 24h'
|
|
99
|
-
recommendation: '改 expiryHours=24 或修订 spec'
|
|
100
|
-
resolved: false
|
|
101
|
-
finding_hash: <sha256>
|
|
102
|
-
severity_acked_by: null # WARNING 必须 ack 才能 archive(在 archive 阶段走 ack)
|
|
103
|
-
severity_acked_at: null
|
|
104
|
-
# ... 其他 finding
|
|
105
|
-
pause_decisions: # apply 阶段累积的 pause 决策在写本 marker 时一并迁移(本 fix 补 lifecycle 注;沿 commands/apply.md "Marker 持久化" 段)
|
|
106
|
-
- id: 1
|
|
107
|
-
# ... 完整 schema 见 commands/apply.md "Marker 持久化" 段
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
4.3a **(本 fix 补缺):调 forge evidence record-verify 记录 verify 事件证据到 staging**
|
|
111
|
-
|
|
112
|
-
主代理在写完 .verify-passed YAML 后、freeze 之前,**必须**先调 record-verify 写 staging:
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
forge evidence record-verify <changeId> --task-refs <list> --scope <type> --report <path>
|
|
33
|
+
schema: forge-verify/v2
|
|
34
|
+
verified_at: <ISO 8601 UTC,允许 ms 精度>
|
|
35
|
+
verified_by: ai-agent # 或 human-override(需 archive --force)
|
|
36
|
+
pause_decisions: # 可选 — apply 阶段累积的 PauseDecisionSimple
|
|
37
|
+
- paused_at: 2026-05-21T14:30:00Z
|
|
38
|
+
task_ref: tasks.md#task-3
|
|
39
|
+
issue_summary: subagent 报告 OAuth refresh edge case
|
|
40
|
+
chosen_option: 3 # 1=扩scope/2=加task/3=转out-of-scope/4=Other
|
|
41
|
+
notes: 'subagent 可跳过该 issue 完成本 task 主体功能'
|
|
42
|
+
created_by_tool_version: <FORGE_VERSION>
|
|
116
43
|
```
|
|
117
44
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
若漏调 record-verify 直接 freeze → exit 1 + 提示 "staging file not found ... 必须先调 forge evidence record-\*"(代码事实 `evidence.ts:639`)。
|
|
121
|
-
|
|
122
|
-
4.4 **(plan-9g 新增):调 forge evidence freeze 凝固 process_evidence**
|
|
123
|
-
|
|
124
|
-
主代理在 4.3a record-verify 后,**必须**调:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
forge evidence freeze <changeId> --kind verify
|
|
128
|
-
```
|
|
45
|
+
schema 字段只 5 个,无 hash / git / process_evidence / verify_findings / evidence 数组。
|
|
129
46
|
|
|
130
|
-
|
|
131
|
-
1. 读 `.evidence/process-evidence.staging.yaml` + 校验 staging_hash
|
|
132
|
-
2. 复制三数组(tdd_event_chain / verify_invocations / subagent_review_chain)到 marker.process_evidence
|
|
133
|
-
3. 写 marker.process_evidence_staging_hash + ack_log_tail_hash + ack_log_entry_count(五源 cross-check 用)
|
|
134
|
-
4. 算 freeze-time WARNING(不变量 7 + 10)→ 转 VerifyFinding 写 marker.verify_findings
|
|
135
|
-
5. 若 CRITICAL 11/12(tdd_exemption 缺 ack / mode 缺 ack)→ exit 1 + 提示先跑 forge ack
|
|
136
|
-
6. transaction(tmp + rename atomic)落 marker
|
|
137
|
-
|
|
138
|
-
详细 process_evidence 协议见 `skills/process-evidence/SKILL.md`。
|
|
139
|
-
|
|
140
|
-
> **Fluid Pause 边界(design §8.3)**:apply 阶段 Fluid Pause 的 `forge pause-capture` 必须在本步 `forge evidence freeze --kind verify` **之前**完成。verify freeze 之后再产生的 pause-capture entry 不被 verify marker 的 `ack_log_tail_hash`/`ack_log_entry_count` 固化,archive 阶段 option=2 强校验会因 ack-log 行数 mismatch 拒签。
|
|
141
|
-
|
|
142
|
-
4.5 **若产任何 WARNING + resolved=false**:提示用户 — archive 阶段必须先 `forge ack propose <finding-id>`(沿 9a 两步流程),否则 archive fence 拒签。
|
|
143
|
-
|
|
144
|
-
4.6 **若产任何 automated=true CRITICAL + resolved=false**:**不能 archive**(沿 design §2.2.4 fence)— 必须先实际修复让 finding resolved=true(改 code + 重跑 verify),不允许 ack 降级。
|
|
145
|
-
|
|
146
|
-
## 禁止行为
|
|
147
|
-
|
|
148
|
-
- 不允许在 verify 失败时回去把已勾 task 改回 `[ ]`(违反 spec §3.3 不变量 2)
|
|
149
|
-
- 不允许跳过证据 log 写入(verification-before-completion 要求证据先于声称)
|
|
150
|
-
- 不允许 pass=true 但 evidence 为空(archive 校验会拒绝)
|
|
151
|
-
- **不允许跳维度**(沿 plan-9d skill 红旗清单)— Completeness + Correctness + Coherence 三维度必须全跑,即使测试 pass
|
|
152
|
-
- **不允许伪造 automated=true finding**(沿 design §2.3.3 critical_candidate 协议)— automated=true 的 finding 必须由工具/grep 机器判定,不能 AI 自决
|
|
153
|
-
- **不允许 vague recommendation**("consider reviewing X" 类)— 必须给 file:line 或 spec:Requirement-id 具体证据(沿 plan-9d skill `## forge-specific 反向加固` §2)
|
|
154
|
-
- **不允许在 .verify-passed 写 severity_acked_by = "ai-agent" 自 ack**(必须走 `forge ack propose` 两步流程,沿 9a)
|
|
47
|
+
4.4 **若三维度发现重大问题**(应改 code / spec 后重跑 verify):**不写 .verify-passed**,直接 abort 让用户先修。AI 不允许"知道问题但仍写 verify-passed"。
|
|
155
48
|
|
|
156
49
|
## (可选)Stage extensions hook — Tier 1 Claude Code only
|
|
157
50
|
|
|
158
51
|
> codex review 集成。AI 主代理在本 stage(`verify`)跑多轮收敛协议。
|
|
159
52
|
> Tier 2/3(Codex/OpenCode)见 [`docs/stage-extensions.md §未来 Tier 2/3 集成`](../docs/stage-extensions.md#未来-tier-23-集成)。
|
|
160
53
|
|
|
161
|
-
**Step A — 检查是否启用**:读 `forge/config.yaml#stage_extensions.verify`。无该字段 / 数组为空 / 全部 entry `enabled: false` →
|
|
54
|
+
**Step A — 检查是否启用**:读 `forge/config.yaml#stage_extensions.verify`。无该字段 / 数组为空 / 全部 entry `enabled: false` → **跳过本段**。
|
|
162
55
|
|
|
163
56
|
**Step B — 对每个 `enabled` entry 跑多轮收敛 loop**:
|
|
164
57
|
|
|
165
|
-
初始化 `round = 1`、`threadId = ''`、`roundHistory = []`、`roundLimit = null
|
|
58
|
+
初始化 `round = 1`、`threadId = ''`、`roundHistory = []`、`roundLimit = null`。循环:
|
|
166
59
|
|
|
167
60
|
1. **跑单轮 runner**:
|
|
168
61
|
```bash
|
|
@@ -171,18 +64,22 @@ You are about to handle `/forge:verify $ARGUMENTS`.
|
|
|
171
64
|
--round <round>${threadId:+ --thread-id $threadId}
|
|
172
65
|
```
|
|
173
66
|
2. **解析 stdout JSON 的 `kind`**:
|
|
174
|
-
- `converged` →
|
|
175
|
-
- `failed` / `config_error` / `no_extension` →
|
|
67
|
+
- `converged` → break loop(codex 输出 verbatim 透传给用户)
|
|
68
|
+
- `failed` / `config_error` / `no_extension` → break loop(loose,不阻塞主流程)
|
|
176
69
|
- `unconverged` → 继续 3
|
|
177
|
-
3. **从 unconverged JSON
|
|
70
|
+
3. **从 unconverged JSON 取状态**:
|
|
178
71
|
- `roundHistory.push({ round, block_count: <blockFindings.length> })`;`threadId = <JSON.threadId>`;codex finding verbatim 透传给用户
|
|
179
|
-
- 首轮:`roundLimit = <JSON.effectiveConvergence.max_rounds>`
|
|
180
|
-
4. **若 `round >= roundLimit
|
|
181
|
-
- 若 `<JSON.effectiveConvergence.max_rounds_on_exceed>` 为 `force_end` → 把 blockFindings 写 `forge/changes/<id>/.evidence/codex-pending-findings.yaml
|
|
182
|
-
- 否则跑 `
|
|
183
|
-
5.
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
72
|
+
- 首轮:`roundLimit = <JSON.effectiveConvergence.max_rounds>`
|
|
73
|
+
4. **若 `round >= roundLimit`**:
|
|
74
|
+
- 若 `<JSON.effectiveConvergence.max_rounds_on_exceed>` 为 `force_end` → 把 blockFindings 写 `forge/changes/<id>/.evidence/codex-pending-findings.yaml`,break loop
|
|
75
|
+
- 否则跑 `stage-extensions analyze-trend` 拿 TrendAdvice,再 AskUserQuestion 三选项:**①再跑 N 轮**(`roundLimit += N` 后 `round++`)/ **②放弃 codex**(break)/ **③接受当前**(blockFindings 写 backlog,break)
|
|
76
|
+
5. **否则**:AskUserQuestion 三选项(默认推 `<JSON.userInteraction.block_unconverged>`):**①auto_fix**(dispatch fresh fix subagent → `round++`)/ **②manual_fix**(等用户改 → `round++`)/ **③give_up**(break)
|
|
77
|
+
|
|
78
|
+
**Step C — loose**:本段任何步骤失败都**不阻塞主流程**。runner 永远 exit 0;AskUserQuestion harness 不支持时降级终端 prompt。
|
|
79
|
+
|
|
80
|
+
## 禁止行为
|
|
81
|
+
|
|
82
|
+
- 不允许跳过三维度 prose check 就写 .verify-passed
|
|
83
|
+
- 不允许测试 fail 时仍写 .verify-passed(违反 verification-before-completion 纪律)
|
|
84
|
+
- 不允许伪造 `verified_by` 字段(`ai-agent` 表示真跑了流程,`human-override` 表示用户手工签证 — archive 需 `--force`)
|
|
85
|
+
- **不允许在 .verify-passed 写 v4 已删字段**(`verify_findings` / `evidence` / `git` / `tasks_hash` / `content_hash` / `process_evidence` — schema 校验会拒)
|
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
|
|
19
19
|
执行 `commands/<stage>.md` 时,按下表把 Tier-1 专属构造换成 Tier 2/3 等价物:
|
|
20
20
|
|
|
21
|
-
| 命令文件里的 | 替换为
|
|
22
|
-
| ---------------------------------------------------------------------------------------------------- |
|
|
23
|
-
| `${CLAUDE_PLUGIN_ROOT}/scripts/run-forge.mjs` | `<ROOT>/scripts/run-forge.mjs`
|
|
24
|
-
| shell/命令执行上下文中的 forge executable token(裸 `forge <subcmd>`、管道右侧 `… \| forge <subcmd>`) | `node "<ROOT>/scripts/run-forge.mjs" <subcmd> …`;helper 不可达时 fallback `npx -y --package @accelerator-mzq/forge@^
|
|
25
|
-
| `$ARGUMENTS` | 从用户自然语言提取
|
|
26
|
-
| `AskUserQuestion` | 降级终端 `[1]/[2]/…` 文本 prompt
|
|
27
|
-
| `Task` 工具派子代理 | 按 `skills/subagent-driven-discipline/references/codex-tools.md`(Codex)/ `opencode-tools.md`(OpenCode)映射
|
|
28
|
-
| `## (可选)Stage extensions hook — Tier 1 Claude Code only` 段 | 整段跳过
|
|
21
|
+
| 命令文件里的 | 替换为 |
|
|
22
|
+
| ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
23
|
+
| `${CLAUDE_PLUGIN_ROOT}/scripts/run-forge.mjs` | `<ROOT>/scripts/run-forge.mjs` |
|
|
24
|
+
| shell/命令执行上下文中的 forge executable token(裸 `forge <subcmd>`、管道右侧 `… \| forge <subcmd>`) | `node "<ROOT>/scripts/run-forge.mjs" <subcmd> …`;helper 不可达时 fallback `npx -y --package @accelerator-mzq/forge@^4.0.0 -- forge <subcmd>`。**散文/说明文字里的 `forge archive` 等引用不替换** |
|
|
25
|
+
| `$ARGUMENTS` | 从用户自然语言提取 |
|
|
26
|
+
| `AskUserQuestion` | 降级终端 `[1]/[2]/…` 文本 prompt;v4 起无 `forge ack` 协议,确认结果按 v4 marker 写入即可(详见 [`docs/migration/v3-to-v4.md`](../../docs/migration/v3-to-v4.md)) |
|
|
27
|
+
| `Task` 工具派子代理 | 按 `skills/subagent-driven-discipline/references/codex-tools.md`(Codex)/ `opencode-tools.md`(OpenCode)映射 |
|
|
28
|
+
| `## (可选)Stage extensions hook — Tier 1 Claude Code only` 段 | 整段跳过 |
|
|
29
29
|
|
|
30
30
|
示例:
|
|
31
31
|
|
|
@@ -219,65 +219,34 @@ You understand 1,2,3,6. Unclear on 4,5.
|
|
|
219
219
|
|
|
220
220
|
When replying to inline review comments on GitHub, reply in the comment thread (`gh api repos/{owner}/{repo}/pulls/{pr}/comments/{id}/replies`), not as a top-level PR comment.
|
|
221
221
|
|
|
222
|
-
## Severity 判定指引(
|
|
222
|
+
## Severity 判定指引(v4 prose 风格)
|
|
223
223
|
|
|
224
|
-
review feedback
|
|
224
|
+
review feedback 的 `severity` 字段仅作 prose 分级用,**v4 不参与 archive fence 门禁**(v3 marker `review_outcomes` 数组已删,review marker schema 极简到 5 字段;沿 `src/core/markers/types.ts:ReviewMarker`)。每条 finding 仍按以下三级分类用于讨论:
|
|
225
225
|
|
|
226
226
|
### 三级语义
|
|
227
227
|
|
|
228
|
-
| 级别 | 语义
|
|
229
|
-
| -------------- |
|
|
230
|
-
| **
|
|
231
|
-
| **
|
|
232
|
-
| **
|
|
233
|
-
|
|
234
|
-
### AI 反向加固(critical_candidate 协议)
|
|
235
|
-
|
|
236
|
-
**CRITICAL 永远不能由 AI 直接产生**。AI 在 finding 中**不能写 `severity: CRITICAL`**,只能写:
|
|
237
|
-
|
|
238
|
-
```yaml
|
|
239
|
-
severity_candidate: CRITICAL
|
|
240
|
-
candidate_type: <test_failure | hash_mismatch | evidence_missing | coverage_gap | api_contract | manual_claim>
|
|
241
|
-
evidence: <定位证据,5 类格式之一>
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
工具 fence(`forge validate` / `forge archive`)按 `candidate_type` 独立验证:
|
|
245
|
-
|
|
246
|
-
- 验证通过 → 升级为 `severity: CRITICAL` + `automated: true` + `finding_hash` 锁死
|
|
247
|
-
- 验证失败 → fallback 为 `severity: WARNING` + `automated: false` + `severity_candidate_rejected: true`(给用户提示)
|
|
248
|
-
- AI 跨过 candidate 直接写 `severity: CRITICAL` + `automated: false` → **fence 拒签**
|
|
249
|
-
|
|
250
|
-
**WARNING / SUGGESTION** 由 AI 直接判定,但 evidence 必须可定位(沿 §2.3.3 D 五类:`file:line` / `artifact:section` / `change-level` / `command-output` / `tests:scenario:<name>`)。无定位的 finding fence 拒签。
|
|
228
|
+
| 级别 | 语义 | 主代理决策 |
|
|
229
|
+
| -------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
|
|
230
|
+
| **blocking** | 事实层面客观不一致(测试 fail / API 签名不匹配 / 实施明显违背 spec) | 必修后才能写 `.review-passed`;不修就 abort 让用户决 |
|
|
231
|
+
| **important** | 需做但有讨论空间(scope / 优先级 / 实施代价) | 优先采纳;有合理证据反驳可拒(沿"用证据反驳"原则);拒绝时必须在对话内显式记录理由 |
|
|
232
|
+
| **suggestion** | 可改进但不阻塞(风格 / 命名 / 微优化 / 未来扩展点) | 顺手 fix;不 fix 转入 `## Out of Scope` 或 `## Future Work` YAML 块进 backlog |
|
|
251
233
|
|
|
252
234
|
### 判定决策树(给 reviewer-receiver)
|
|
253
235
|
|
|
254
236
|
```
|
|
255
237
|
收到 review finding 后,先看 severity:
|
|
256
238
|
|
|
257
|
-
IF severity ==
|
|
258
|
-
必修。fix →
|
|
259
|
-
|
|
260
|
-
IF severity == CRITICAL && automated: false
|
|
261
|
-
→ 这条 finding 不合规(AI 跨过 candidate 直接写)— 报错给 reviewer 重写为 candidate
|
|
239
|
+
IF severity == blocking
|
|
240
|
+
必修。fix → commit。"用证据反驳"原则:若有事实证据 finding 错(如 reviewer 误读 code)→ 在对话内显式反驳并不修,不写 .review-passed 前必须澄清
|
|
262
241
|
|
|
263
|
-
IF severity ==
|
|
264
|
-
优先 fix;若有合理理由不 fix
|
|
242
|
+
IF severity == important
|
|
243
|
+
优先 fix;若有合理理由不 fix → 在对话内显式记录"已用证据反驳"(不存档到 marker — v4 marker 不持久化 review_outcomes)
|
|
265
244
|
|
|
266
|
-
IF severity ==
|
|
267
|
-
能 fix 顺手 fix;不 fix
|
|
245
|
+
IF severity == suggestion
|
|
246
|
+
能 fix 顺手 fix;不 fix 走 ## Out of Scope / ## Future Work YAML 块进 backlog
|
|
268
247
|
```
|
|
269
248
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
## v0.4 兼容(severity 简码迁移)
|
|
273
|
-
|
|
274
|
-
v0.4 的 review_outcomes 用单字母简码:
|
|
275
|
-
|
|
276
|
-
- `S` = blocking severity(对应 v1.0 `CRITICAL` candidate 路径)
|
|
277
|
-
- `C` = critical accepted(对应 v1.0 已 ack `WARNING`)
|
|
278
|
-
- `L` = low severity(对应 v1.0 `SUGGESTION`)
|
|
279
|
-
|
|
280
|
-
v1.0 fence 不接受 `S/C/L`,只接受 `CRITICAL/WARNING/SUGGESTION` 完整字符串。**简码 → 完整词的迁移由 9j sub-plan 实施**(`forge upgrade --resign-markers` 路径)。本 skill 在过渡期只接受完整词,遇到简码报错并提示运行 upgrade。
|
|
249
|
+
**不要写 v3 marker 字段**(`review_outcomes` / `severity_candidate` / `candidate_type` / `finding_hash` / `severity_acked_by` / `automated` 等已删 — v4 `ReviewMarker` schema 校验拒绝写入)。
|
|
281
250
|
|
|
282
251
|
## The Bottom Line
|
|
283
252
|
|
|
@@ -113,7 +113,7 @@ You: [Fix progress indicators]
|
|
|
113
113
|
|
|
114
114
|
执行完成前核对 review 硬门槛自检清单:
|
|
115
115
|
|
|
116
|
-
-
|
|
117
|
-
- `
|
|
118
|
-
-
|
|
119
|
-
-
|
|
116
|
+
- 派了 fresh review subagent + 主代理逐条接受/拒绝 + 接受意见全部实施 + 测试通过(三条件满足)。
|
|
117
|
+
- 写 `.review-passed` v2 marker(schema=`forge-review/v2`,5 字段;沿 `src/core/markers/types.ts`)。
|
|
118
|
+
- 若有"已用证据反驳"的拒绝意见,**在对话内显式记录**(v4 marker 不再持久化 review_outcomes 数组,纯对话 audit)。
|
|
119
|
+
- v4 已无 evidence-helper / freeze / ack 协议;不要再调相关子命令(v4 已删)。
|