@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,29 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: forge:verifying-three-dimensions
|
|
3
|
-
description: Use when verifying a forge change — analyze Completeness / Correctness / Coherence three dimensions
|
|
3
|
+
description: Use when verifying a forge change — analyze Completeness / Correctness / Coherence three dimensions with concrete prose evidence (file:line / spec:Requirement-id), instead of degenerate "tests pass" binary
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# forge verifying-three-dimensions
|
|
7
7
|
|
|
8
|
-
> 本 skill 走 `forge:writing-skills`
|
|
8
|
+
> 本 skill 走 `forge:writing-skills` 协议开发。v4 OpenSpec alignment 简化:删反加固 marker fence / ack 协议,保留三维 prose check 方法论。
|
|
9
9
|
|
|
10
10
|
## Overview
|
|
11
11
|
|
|
12
|
-
forge
|
|
12
|
+
forge v3 之前的 verify 阶段曾试图把"测试 pass + log_hash"二值判定升级为带 marker fence 的 verify_findings 数组(严重度 + ack 协议),v4 BREAKING 后回退到 OpenSpec 风格:**三维 prose check 直接呈现给用户,marker 不持久化 finding 字段**。
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
测试 pass 不等于实施完整 — spec 里没被测试覆盖的 Requirement 完全不会被发现。本 skill 提供三维度方法论让 verify 阶段产出可观察、可操作的 prose findings。
|
|
15
|
+
|
|
16
|
+
## Methodology
|
|
15
17
|
|
|
16
18
|
**REQUIRED BACKGROUND**:必须先懂 `forge:verification-before-completion`(证据先于声称的纪律)。
|
|
17
19
|
|
|
18
20
|
核心论点:
|
|
19
21
|
|
|
20
|
-
- "测试 pass 不等于 spec 覆盖 — 没测试覆盖的 Requirement 完全无声音失败"
|
|
21
|
-
-
|
|
22
|
+
- "测试 pass 不等于 spec 覆盖 — 没测试覆盖的 Requirement 完全无声音失败"
|
|
23
|
+
- 三维度协议参考 OpenSpec `verify-change.ts` 第 4-7 步:Completeness / Correctness / Coherence 三组检查项,各有自动 + LLM 路径
|
|
22
24
|
|
|
23
25
|
## When to Use
|
|
24
26
|
|
|
25
|
-
- `/forge:verify <change-id>` slash command 调用本 skill
|
|
26
|
-
- AI agent
|
|
27
|
+
- `/forge:verify <change-id>` slash command 调用本 skill
|
|
28
|
+
- AI agent 主体在写 `.verify-passed` v2 marker 前的 prose 评估阶段
|
|
27
29
|
- 手动 review 一个 change 实施完整度(三维度作为 checklist)
|
|
28
30
|
|
|
29
31
|
## When NOT to Use
|
|
@@ -31,215 +33,137 @@ forge v0.4 的 verify 阶段退化为"测试 pass + log_hash"二值判定(沿 de
|
|
|
31
33
|
- 写 `forge plan`(那是 `forge:writing-plans`)
|
|
32
34
|
- 写新 skill(那是 `forge:writing-skills`)
|
|
33
35
|
- code review(那是 `forge:receiving-code-review` 或 `/forge:review` slash)
|
|
34
|
-
- archive 阶段 fence 校验(那是 `forge archive` CLI 自动做,不需 AI 调 skill;沿 design §2.2.4)
|
|
35
36
|
|
|
36
37
|
## 三维度协议
|
|
37
38
|
|
|
38
|
-
| 维度 | 检查项 | 自动 / LLM
|
|
39
|
-
| ---------------- | ----------------------------------------------------------------------- |
|
|
40
|
-
| **Completeness** | task 完成度(checkbox 计数) | 自动
|
|
41
|
-
| | spec 覆盖度(每个 Requirement 在 codebase 有实施证据) | 自动 + LLM
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
39
|
+
| 维度 | 检查项 | 自动 / LLM |
|
|
40
|
+
| ---------------- | ----------------------------------------------------------------------- | -------------- |
|
|
41
|
+
| **Completeness** | task 完成度(checkbox 计数) | 自动 |
|
|
42
|
+
| | spec 覆盖度(每个 Requirement 在 codebase 有实施证据) | 自动 + LLM |
|
|
43
|
+
| | task 标 [x] 但 git diff 反向 0 改动(fake completion) | 自动(git diff) |
|
|
44
|
+
| **Correctness** | requirement 实施映射(file:line) | LLM(本 skill) |
|
|
45
|
+
| | scenario 覆盖(WHEN/THEN/AND 条件在 code 或 test 中体现) | LLM(本 skill) |
|
|
46
|
+
| **Coherence** | design 决策追溯(design.md `## Decision:` / `## Approach:` 段是否被实施) | LLM(本 skill) |
|
|
47
|
+
| | 代码 pattern 一致性(命名 / 目录 / 风格 vs 项目惯例) | LLM(本 skill) |
|
|
46
48
|
|
|
47
49
|
### 主流程
|
|
48
50
|
|
|
49
51
|
每次 verify 必须**三维度全跑**,不允许跳维度:
|
|
50
52
|
|
|
51
53
|
1. **Completeness**:
|
|
52
|
-
-
|
|
53
|
-
- 对 spec 每个 Requirement,grep codebase
|
|
54
|
-
- 对 tasks.md 标 [x] 但 git diff 反向 0
|
|
54
|
+
- 看 `forge validate` 输出的错误(spec-files-missing / coverage_gap 类)
|
|
55
|
+
- 对 spec 每个 Requirement,grep codebase 找实施证据;完全无证据 → 报告"spec Requirement 无实施证据"
|
|
56
|
+
- 对 tasks.md 标 [x] 但 git diff 反向 0 改动:跑 `git diff <previous-base>..HEAD -- <expected-path>` 验证,报告"fake completion"
|
|
55
57
|
2. **Correctness**:
|
|
56
|
-
- 对 spec 每个 Requirement,定位实施 file:line
|
|
58
|
+
- 对 spec 每个 Requirement,定位实施 file:line
|
|
59
|
+
- WHEN/THEN/AND scenario 在 test 或 code 中找证据;找不到 → 报告"scenario 未覆盖"
|
|
57
60
|
3. **Coherence**:
|
|
58
|
-
- design.md `## Decision:` / `## Approach:` 段提到的关键词,grep codebase
|
|
59
|
-
- 命名 / 目录 /
|
|
60
|
-
|
|
61
|
-
每个 finding 必须填(8 必填字段沿 design §2.2.3 + master §3.12.1):
|
|
62
|
-
|
|
63
|
-
- `id`(单调递增整数)
|
|
64
|
-
- `dimension`(`completeness` / `correctness` / `coherence`)
|
|
65
|
-
- `check_type`(细分,如 `task-completion` / `spec-coverage` / `requirement-mapping` / `scenario-coverage` / `design-traceability` / `pattern-consistency`)
|
|
66
|
-
- `severity`(`CRITICAL` / `WARNING` / `SUGGESTION`)
|
|
67
|
-
- `automated`(true if 工具可判,false if LLM 判)
|
|
68
|
-
- `evidence`(必须含 file:line 或 spec:Requirement-id 或 design.md:段落标题;**禁止 vague "could be reviewed"**)
|
|
69
|
-
- `recommendation`(具体下一步,如 "在 src/auth/rate-limit.ts 加 sliding-window 实现" — 不允许 "consider reviewing")
|
|
70
|
-
- `resolved`(true / false)
|
|
71
|
-
|
|
72
|
-
## 4-6 标定 example
|
|
73
|
-
|
|
74
|
-
### Example 1 — Completeness/spec-coverage CRITICAL(automated)
|
|
75
|
-
|
|
76
|
-
```yaml
|
|
77
|
-
- id: 1
|
|
78
|
-
dimension: completeness
|
|
79
|
-
check_type: spec-coverage
|
|
80
|
-
severity: CRITICAL
|
|
81
|
-
automated: true # 工具可判 — codebase grep 0 个 file 提及该 Requirement 关键词
|
|
82
|
-
evidence: "specs/auth/spec.md Requirement #3 'refresh rate limit' 在 src/auth/ 0 个 file 提及 'rate-limit' / 'rateLimit' / 'throttle' 关键词"
|
|
83
|
-
recommendation: '在 src/auth/rate-limit.ts 实现 sliding-window 限流,或修订 spec 移除 #3'
|
|
84
|
-
resolved: false
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
**为什么 CRITICAL automated**:工具可独立验证(grep + AST 双重 0 命中是机器判定),沿 design §2.3.3 critical_candidate 协议 candidate_type=`coverage_gap`(spec 列 requirement 但 codebase 完全 0 命中,沿 design line 446)。AI 不能降级。**注**:`evidence_missing` 是 candidate_type 6 类之一但语义不同 — 它检查 `evidence.log_path` 文件是否存在(沿 design line 445),不适用于本 example 的 spec→codebase 覆盖检查。
|
|
88
|
-
|
|
89
|
-
### Example 2 — Correctness/requirement-mapping WARNING(LLM)
|
|
90
|
-
|
|
91
|
-
```yaml
|
|
92
|
-
- id: 2
|
|
93
|
-
dimension: correctness
|
|
94
|
-
check_type: requirement-mapping
|
|
95
|
-
severity: WARNING
|
|
96
|
-
automated: false # LLM 判 — 需 AI 比对 spec 描述 vs 实施语义
|
|
97
|
-
evidence: "specs/auth/spec.md Requirement #2 'expiry window 默认 24h' 在 src/auth/refresh.ts:42 实现为 expiryHours = 12(与 spec 不一致)"
|
|
98
|
-
recommendation: '改 expiryHours = 24,或修订 spec 改默认值'
|
|
99
|
-
resolved: false
|
|
100
|
-
severity_acked_by: null # WARNING 必须 ack 才能 archive
|
|
101
|
-
severity_acked_at: null
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**为什么 WARNING**:语义不一致非 0/1 判定(LLM 需读 spec + 代码语境),且可改 → 不该 CRITICAL 强 fence。AI ack 路径走 `forge ack propose`(沿 9a)。
|
|
105
|
-
|
|
106
|
-
### Example 3 — Coherence/design-traceability WARNING(LLM)
|
|
107
|
-
|
|
108
|
-
```yaml
|
|
109
|
-
- id: 3
|
|
110
|
-
dimension: coherence
|
|
111
|
-
check_type: design-traceability
|
|
112
|
-
severity: WARNING
|
|
113
|
-
automated: false
|
|
114
|
-
evidence: "design.md '## Decision: 选用 sliding-window 限流' 在 src/auth/ 实施为 fixed-window(rate-limit.ts:15 用 expiryAt + bucket 模式,sliding-window 关键词 0 命中)"
|
|
115
|
-
recommendation: '实施 sliding-window(按 design 决策),或修订 design.md 改决策为 fixed-window 并写理由'
|
|
116
|
-
resolved: false
|
|
117
|
-
severity_acked_by: null
|
|
118
|
-
severity_acked_at: null
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**为什么 WARNING 而非 CRITICAL**:design 决策偏离不直接威胁系统正确性(沿 design §2.3.2),但需用户 ack。
|
|
61
|
+
- design.md `## Decision:` / `## Approach:` 段提到的关键词,grep codebase 比对;实施偏离决策 → 报告"design 决策被偏离"
|
|
62
|
+
- 命名 / 目录 / 风格比对项目惯例;偏离 → 报告"pattern 不一致"
|
|
122
63
|
|
|
123
|
-
###
|
|
64
|
+
### 输出形式(v4 BREAKING)
|
|
124
65
|
|
|
125
|
-
|
|
126
|
-
- id: 4
|
|
127
|
-
dimension: coherence
|
|
128
|
-
check_type: pattern-consistency
|
|
129
|
-
severity: SUGGESTION
|
|
130
|
-
automated: false
|
|
131
|
-
evidence: 'src/auth/login.ts:23 函数名 doLogin 与项目 7 个 handler 文件 (src/handlers/) 统一 handleXxx 命名风格不一致'
|
|
132
|
-
recommendation: 'rename doLogin → handleLogin'
|
|
133
|
-
resolved: false # SUGGESTION 不要求 resolved,允许带 finding archive
|
|
134
|
-
```
|
|
66
|
+
三维度 findings **以 prose 形式直接呈现给用户**(对话内 + 必要时改 code 或 spec)。**不写 marker 内 fence 字段**:v4 `VerifyMarker` schema 只 5 个字段(`schema` / `verified_at` / `verified_by` / `pause_decisions?` / `created_by_tool_version?`),无 `verify_findings` / `evidence` 数组。
|
|
135
67
|
|
|
136
|
-
|
|
68
|
+
主代理决策:
|
|
137
69
|
|
|
138
|
-
|
|
70
|
+
- **若发现 Completeness/Correctness 重大问题** → **不写 .verify-passed**,abort 让用户先改 code / 改 spec / 重派 subagent
|
|
71
|
+
- **若仅 Coherence 偏离**(命名 / 风格) → 报告给用户,用户决定改不改;不改时仍可写 .verify-passed,但需在对话内显式记录"已知 coherence 偏离 N 项,用户确认接受"
|
|
139
72
|
|
|
140
|
-
|
|
141
|
-
- id: 5
|
|
142
|
-
dimension: completeness
|
|
143
|
-
check_type: task-completion
|
|
144
|
-
severity: CRITICAL
|
|
145
|
-
automated: true # 工具自动判 — git diff 是机器判定
|
|
146
|
-
# 注:candidate_type 字段不填(下文解释)
|
|
147
|
-
evidence: "tasks.md#task-4 '加 rate-limit middleware' 标 [x] 但 git diff src/middleware/ 无相关改动(命令:git diff HEAD~1 -- src/middleware/)"
|
|
148
|
-
recommendation: '完成 task-4 实施,或把 task-4 改回 [ ]'
|
|
149
|
-
resolved: false
|
|
150
|
-
```
|
|
73
|
+
## Prose 标定 example
|
|
151
74
|
|
|
152
|
-
|
|
75
|
+
### Example 1 — Completeness/spec-coverage(blocker)
|
|
153
76
|
|
|
154
|
-
|
|
77
|
+
> specs/auth/spec.md Requirement #3 'refresh rate limit' 在 src/auth/ 0 个 file 提及 'rate-limit' / 'rateLimit' / 'throttle' 关键词。
|
|
78
|
+
>
|
|
79
|
+
> **Recommendation**:在 src/auth/rate-limit.ts 实现 sliding-window 限流,或修订 spec 移除 #3。
|
|
80
|
+
>
|
|
81
|
+
> **决策**:blocker — abort verify,user 必须改 code 或改 spec 后重跑。
|
|
155
82
|
|
|
156
|
-
|
|
157
|
-
- **不是 `manual_claim`**(manual_claim 工具不能自动判;本 example git diff 可自动判)
|
|
158
|
-
- **不是 `hash_mismatch`**(hash_mismatch 重算 tasks_hash/content_hash/log_hash/git.diff_hash,task 标 [x] 后 hash 已更新无 mismatch)
|
|
159
|
-
- **`fake_completion`** 不在 design 6 类 enum 之内(`Finding.candidate_type` 是 optional 字段,沿 9a severity.ts:75;不填合规)
|
|
83
|
+
### Example 2 — Correctness/requirement-mapping(blocker)
|
|
160
84
|
|
|
161
|
-
|
|
85
|
+
> specs/auth/spec.md Requirement #2 'expiry window 默认 24h' 在 src/auth/refresh.ts:42 实现为 `expiryHours = 12`(与 spec 不一致)。
|
|
86
|
+
>
|
|
87
|
+
> **Recommendation**:改 `expiryHours = 24`,或修订 spec 改默认值。
|
|
88
|
+
>
|
|
89
|
+
> **决策**:blocker — semantics 不一致直接影响行为,abort verify。
|
|
162
90
|
|
|
163
|
-
|
|
91
|
+
### Example 3 — Coherence/design-traceability(blocker 或 可接受)
|
|
164
92
|
|
|
165
|
-
|
|
93
|
+
> design.md `## Decision: 选用 sliding-window 限流` 在 src/auth/ 实施为 fixed-window(`rate-limit.ts:15` 用 expiryAt + bucket 模式,sliding-window 关键词 0 命中)。
|
|
94
|
+
>
|
|
95
|
+
> **Recommendation**:实施 sliding-window(按 design 决策),或修订 design.md 改决策为 fixed-window 并写理由。
|
|
96
|
+
>
|
|
97
|
+
> **决策**:由 user 判 — 若行为符合 spec、仅 design 决策语义偏离,可接受写 .verify-passed(并在对话内记录);若 user 认为应严格遵守 design 决策,blocker。
|
|
166
98
|
|
|
167
|
-
|
|
168
|
-
- id: 6
|
|
169
|
-
dimension: correctness
|
|
170
|
-
check_type: scenario-coverage
|
|
171
|
-
severity: SUGGESTION
|
|
172
|
-
automated: false
|
|
173
|
-
evidence: "specs/auth/spec.md Scenario 'expired token retry' 的 WHEN/THEN/AND 在 tests/auth/refresh.test.ts 仅覆盖 happy-path,边缘 case (token 刚过期) 无 test"
|
|
174
|
-
recommendation: "加 tests/auth/refresh.test.ts:'expired-token retry edge case'"
|
|
175
|
-
resolved: false
|
|
176
|
-
```
|
|
99
|
+
### Example 4 — Coherence/pattern-consistency(通常接受)
|
|
177
100
|
|
|
178
|
-
|
|
101
|
+
> src/auth/login.ts:23 函数名 `doLogin` 与项目 7 个 handler 文件(src/handlers/)统一 `handleXxx` 命名风格不一致。
|
|
102
|
+
>
|
|
103
|
+
> **Recommendation**:rename `doLogin` → `handleLogin`。
|
|
104
|
+
>
|
|
105
|
+
> **决策**:nice-to-have,通常接受写 .verify-passed,把 rename 留给下次 refactor / 加进本 change tasks.md 立刻改。
|
|
179
106
|
|
|
180
|
-
|
|
107
|
+
### Example 5 — Completeness/task-completion(blocker)
|
|
181
108
|
|
|
182
|
-
|
|
109
|
+
> tasks.md#task-4 '加 rate-limit middleware' 标 [x] 但 `git diff HEAD~1 -- src/middleware/` 无相关改动。
|
|
110
|
+
>
|
|
111
|
+
> **Recommendation**:完成 task-4 实施,或把 task-4 改回 [ ] 然后重跑 /forge:apply。
|
|
112
|
+
>
|
|
113
|
+
> **决策**:blocker — fake completion 直接违反 verification-before-completion,abort verify。
|
|
183
114
|
|
|
184
|
-
###
|
|
115
|
+
### Example 6 — Correctness/scenario-coverage(通常接受)
|
|
185
116
|
|
|
186
|
-
|
|
117
|
+
> specs/auth/spec.md Scenario 'expired token retry' 的 WHEN/THEN/AND 在 tests/auth/refresh.test.ts 仅覆盖 happy-path,边缘 case(token 刚过期)无 test。
|
|
118
|
+
>
|
|
119
|
+
> **Recommendation**:加 tests/auth/refresh.test.ts:'expired-token retry edge case'。
|
|
120
|
+
>
|
|
121
|
+
> **决策**:nice-to-have — 主流程已覆盖,可接受写 .verify-passed,把加测试留下次 change。
|
|
187
122
|
|
|
188
|
-
|
|
189
|
-
- `forge archive` 现有路径产:**hash_mismatch**(marker tasks_hash / content_hash 重算不一致,line 274-289)
|
|
190
|
-
- `/forge:verify` slash AI 调 skill 阶段产:**fake_completion**(tasks 标 [x] 但 git diff 反向 0 改动,automated=true 因 git 是机器判定;candidate_type 字段不填,沿 v3 B-3 边界 case)
|
|
191
|
-
- **不在 v1.0 实施**(沿 §11.1bis):`evidence_missing` 由 9a candidate-validators.ts framework 处理 / `api_contract` 推迟 v1.1 / `manual_claim` 走 9a ack 流程 / `test_failure` 走 stub warning,9g 完成后接 reporter parser
|
|
123
|
+
## forge-specific 反向 AI 偷懒倾向
|
|
192
124
|
|
|
193
|
-
|
|
125
|
+
v4 删了 marker fence 与 ack 协议,但 AI 偷懒倾向不变。本 skill 仍承担如下纪律:
|
|
194
126
|
|
|
195
|
-
|
|
196
|
-
- AI 改 evidence / recommendation 也会改 hash,同样拒签
|
|
197
|
-
- AI 唯一合规路径:走 `forge ack propose` 启动两步 ack 流程(沿 9a;CI 模式直接拒绝)
|
|
127
|
+
### 1. 三维度必须全跑
|
|
198
128
|
|
|
199
|
-
|
|
129
|
+
不允许跳维度。即使 Completeness 全 pass 也必须跑 Correctness + Coherence(典型借口:"测试都过了,看着没问题")。
|
|
200
130
|
|
|
201
|
-
|
|
131
|
+
### 2. 证据必须具体
|
|
202
132
|
|
|
203
|
-
|
|
204
|
-
- archive 阶段 fence 校验 `severity_acked_by` + `severity_acked_at` 非空,否则拒签
|
|
133
|
+
每条 prose finding 必须含 file:line / spec:Requirement-id / design.md 段落标题;**禁止 vague "could be reviewed" / "consider checking X"**。Vague 等于无效。
|
|
205
134
|
|
|
206
|
-
### 3.
|
|
135
|
+
### 3. 主代理不能"知道问题但仍写 verify-passed"
|
|
207
136
|
|
|
208
|
-
|
|
137
|
+
若三维度发现 Completeness 或 Correctness 重大问题 → 必须 abort verify,让 user 改 code 或改 spec 后重跑。AI 不允许自决"这条不严重所以照写 .verify-passed"。
|
|
209
138
|
|
|
210
|
-
|
|
211
|
-
- AI 偷懒推 SUGGESTION 会留下持续可见的 SUGGESTION 堆积反向暴露
|
|
212
|
-
- 沿 `skills/_shared/scope-category-guidance.md`:"本 change 不做但跨 change 项" 应走 Out of Scope / Future Work / Non-Goal,不是 SUGGESTION
|
|
139
|
+
Coherence 偏离(命名 / pattern / design 决策)可由 user 判定接受。**user 接受时必须在对话内显式记录**(不写 marker fence,但留对话 audit)。
|
|
213
140
|
|
|
214
|
-
### 4.
|
|
141
|
+
### 4. fake completion 是 blocker
|
|
215
142
|
|
|
216
|
-
|
|
143
|
+
tasks.md 标 [x] 但 git diff 反向 0 改动是直接违反 verification-before-completion 纪律,无论 user 怎么说都 abort verify。让 user 把 task 改回 [ ] 然后跑 `/forge:apply`。
|
|
217
144
|
|
|
218
145
|
## 红旗清单 — STOP and Start Over
|
|
219
146
|
|
|
220
|
-
| 想法
|
|
221
|
-
|
|
|
222
|
-
| "测试都 pass 了,跳 Correctness/Coherence"
|
|
223
|
-
| "这个 Requirement 在 codebase
|
|
224
|
-
| "vague 'consider reviewing X'"
|
|
225
|
-
| "
|
|
226
|
-
| "
|
|
227
|
-
| "
|
|
228
|
-
| "
|
|
147
|
+
| 想法 | 现实 |
|
|
148
|
+
| ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
149
|
+
| "测试都 pass 了,跳 Correctness/Coherence" | 测试 pass 只覆盖被写出来的 test。spec 里没测试覆盖的 Requirement 完全 silent。**跳维度 = 重走第 1 维度** |
|
|
150
|
+
| "这个 Requirement 在 codebase 没找到,但应该不重要" | spec 列了 Requirement 但 codebase 0 命中是 blocker — abort verify 让 user 改 spec 或改 code |
|
|
151
|
+
| "vague 'consider reviewing X'" | 没有 file:line 的 recommendation 等价无效。重写带具体证据 |
|
|
152
|
+
| "这条 Correctness 问题我自己判定不严重,照写 .verify-passed" | Correctness/Completeness 重大问题不能 AI 自决接受;abort 让 user 决 |
|
|
153
|
+
| "三个维度合并写成一段总论" | 三维度必须各自显式呈现(让 user 能逐维度判),合并 = 模糊 |
|
|
154
|
+
| "时间紧,只跑 Completeness" | 跳维度是 baseline AI 的典型失败模式。本 skill 存在的全部理由就是挡这个 |
|
|
155
|
+
| "task 标 [x] 但 git diff 空,user 说没事就行" | fake completion 是直接违反 verification-before-completion;abort 不妥协 |
|
|
229
156
|
|
|
230
157
|
**全部触发表示:回归三维度协议,从 Completeness 开始**。
|
|
231
158
|
|
|
232
159
|
## 配套引用
|
|
233
160
|
|
|
234
|
-
- `skills/_shared/scope-category-guidance.md
|
|
235
|
-
-
|
|
236
|
-
-
|
|
237
|
-
- design §2.3.6 finding_hash JCS 算法(9a 实施)
|
|
238
|
-
- 9a `src/core/schemas/severity.ts`:Finding / FindingHashPayload 接口
|
|
239
|
-
- 9b `src/core/scope/aggregator.ts`:跨 change followups 数据源
|
|
161
|
+
- `skills/_shared/scope-category-guidance.md`:决策表区分 "本 change 立即改" vs "跨 change Out of Scope / Future Work / Non-Goal"
|
|
162
|
+
- `src/core/markers/types.ts:VerifyMarker`:v4 marker schema(只 5 字段,无 fence)
|
|
163
|
+
- OpenSpec `verify-change.ts`(上游参考):三维度方法论的原始版本
|
|
240
164
|
|
|
241
165
|
## Bottom Line
|
|
242
166
|
|
|
243
|
-
**verify 不只是测试 pass —
|
|
167
|
+
**verify 不只是测试 pass — 是三维度 prose 评估**。
|
|
244
168
|
|
|
245
|
-
|
|
169
|
+
三维度发现的 Completeness / Correctness 重大问题是 blocker(abort verify);Coherence 偏离由 user 判定。v4 不在 marker 持久化 finding,但纪律靠 prose 报告 + 主代理 STOP 协议保证。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-summary-schema.d.ts","sourceRoot":"","sources":["../../../src/core/validate/archive-summary-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archive-summary-schema.d.ts","sourceRoot":"","sources":["../../../src/core/validate/archive-summary-schema.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,YAAY,CAAC;AAG7E;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA+KxF"}
|