@cyning/harness 2.8.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,237 @@
1
+ # SPEC:Post-G4 / N1–N4 欠账复盘与下一 Epic 点菜(v1)
2
+
3
+ > **状态**:`signed`(维护者签收 2026-07-25 · 对话「签收」)
4
+ > **track**:`docs`(评估轨 · 非改码 Epic)
5
+ > **关联图谱**:无(文档复盘;不改 `_tech_graph`)
6
+ > **上游**:[`PLAN_post_g4_next_mechanization_v1_zh.md`](../../../docs/harness/guides/PLAN_post_g4_next_mechanization_v1_zh.md)(**closed**)· rethink [`2026-07-mechanization-rate/`](../rethink/2026-07-mechanization-rate/)(01–04)
7
+ > **前置**:G1–G4 ✅ · N1–N4 `@cyning/harness@2.7.0–2.9.0` published · CLOSE ✅
8
+ > **下游**:00 已起草 task(HG-TASK-DRAFT pending)→ 20-task-audit → HG-AUDIT-R1 → 30 写复盘文;**不**直接发版
9
+
10
+ ---
11
+
12
+ ## Harness 元信息
13
+
14
+ | 字段 | 值 |
15
+ |------|-----|
16
+ | **spec_slug** | `post-g4-debt-retro` |
17
+ | **test_strategy** | `not_applicable` |
18
+ | **test_strategy_note** | 交付物为复盘文档 + 欠账表 + ≤3 条下一 Epic 点菜建议;不改引擎/CLI/包版本;无可失败自动化测试对象 |
19
+ | **entry_invoke_10_spec** | `Projects/docs/harness/invokes/by-task/cyning-harness-post-g4-debt-retro/invoke_20260725_10_spec_post_g4_debt_retro.md` |
20
+ | **entry_invoke_00_draft** | `Projects/docs/harness/invokes/by-task/cyning-harness-post-g4-debt-retro/invoke_20260725_00_draft_post_g4_debt_retro.md` |
21
+
22
+ ---
23
+
24
+ ## 1. 背景与目标
25
+
26
+ 2026-07-24~25 完成文档层主链机械化收口:
27
+
28
+ | 波次 | 版本 | 要点 |
29
+ |------|------|------|
30
+ | G1+G3 | 2.3.0 | `task lint` 结构 / 绝对路径 |
31
+ | G2 | 2.5.0 | reviews 留档(`--task` / close) |
32
+ | G4 | 2.6.0 | 思考轮结构(条件触发) |
33
+ | N1+N2 | 2.7.0 | `lifecycle.yaml` + `verify --task` lint **WARN** |
34
+ | N3 | 2.8.0 | `verify --spec` |
35
+ | N4 | 2.9.0 | 裸 `verify` 全量 reviews + 双路径 active |
36
+
37
+ [`PLAN_post_g4_next_mechanization_v1_zh.md`](../../../docs/harness/guides/PLAN_post_g4_next_mechanization_v1_zh.md) 已 **closed**。维护者指令:**针对最近欠账与更新做复盘**;须 **多轮思考防遗漏**(禁止 early_stop)。
38
+
39
+ **问题(PLAN 关闭后真空)**:候选下一棒(方向二引擎 / 方向三 git·契约 / dogfood 修齐 / N2-C block)散落在 PLAN §1–§3、rethink 03–04、各 SPEC residual、dogfood 口头结论中,**无单一复盘真值** → 点菜易漏项或重复立项。
40
+
41
+ **目标**:产出一份可签收的复盘交付包,使维护者能在「不改码、不发版」前提下完成点菜决策;并显式点名全部已知欠账与双仓发布态。
42
+
43
+ ---
44
+
45
+ ## 2. 范围(R2 裁定后)
46
+
47
+ ### D1 · 复盘文落盘
48
+
49
+ - 主文路径(二选一 · 实现 task 时定稿,本 SPEC 推荐见 R2):
50
+ - **推荐 A**:`docs/harness/guides/RETRO_post_g4_n1n4_debt_v1_zh.md`(工作区编排可见 · 与 PLAN 同层)
51
+ - **备选 B**:`cyning-harness/docs/rethink/2026-07-post-g4-debt-retro/`(产品仓 rethink 续篇)
52
+ - 正文须含:时间线摘要、机械化率叙事更新(Starter 文档闸主链已覆盖 vs 仍 prompt-only)、PLAN closed 后真空说明。
53
+
54
+ ### D2 · 欠账清单表(强制四栏分类)
55
+
56
+ | 分类 | 必须点名的项(最低集 · 复盘可增「新发现」行) |
57
+ |------|-----------------------------------------------|
58
+ | **已关账** | G1–G4;N1–N4 `@2.7–2.9`;PLAN closed |
59
+ | **未修齐** | dogfood 缺审查文 **3**:`a5_cli_verify` · `hat_chain_pointer_sync` · `task_validate_human_gate_ci_gate`(闸可 30;N4 不强制修齐) |
60
+ | **暂缓** | N2-C(lint→block);G7 执行证据;G6 git 行为;HGM G2 查询;全量模式不跑 lint/D5(N2/N4 刻意非范围);20 帽内容质量 / 40「真跑过」prompt-only |
61
+ | **新发现 / 运维态** | 产品仓 tag/`main`/npm 时序核对;编排仓 Projects **ahead origin**(复盘时点名实测;本波不强制 push) |
62
+
63
+ ### D3 · 下一 Epic 点菜建议(≤3 条)
64
+
65
+ - 每条:一句话目标 · 归属方向(一/二/三/运维)· 理由 · **不做清单**(防膨胀)
66
+ - 候选池(复盘文从中点菜,不必全开):方向二状态机引擎骨架;G7;N2-C;dogfood 3 文修齐;方向三契约/G6;`discipline-coverage.yaml` 资产化;Projects push 卫生
67
+
68
+ ### D4 · 双仓与发布态核对(只读报告)
69
+
70
+ - 复盘文内一小节:`@cyning/harness` 当前 version / tag `v2.9.0` / npm 是否对齐;Projects `origin/main` ahead 计数(复盘执行时重测)
71
+ - **不**代推、不改 npm 脚本
72
+
73
+ ### D5 · task 路径预告(仅指针)
74
+
75
+ - 建议 task_slug:`cyning-harness-post-g4-debt-retro`
76
+ - 建议 active 路径:`docs/harness/tasks/active/task_cyning_harness_post_g4_debt_retro_v1.md`(**正文由 00 起草**;本 SPEC 不写 §5)
77
+
78
+ ---
79
+
80
+ ## 3. 非范围
81
+
82
+ - 本波 **不**实现引擎 / 不改 `packages` 或产品仓 CLI 行为
83
+ - **不**强制修齐 3 个缺审查文 task(可列入点菜建议)
84
+ - **不**发版(无 2.9.x / 2.10.0)
85
+ - **不**把 lint 升 block(N2-C)、**不**做 G6/G7 实现、**不**开 HGM G2
86
+ - **不**代签 `HG-SPEC-SIGNOFF` / 任何人闸
87
+ - **不**更新 rethink 01–04 数字为「再审计」(可在复盘文注明「矩阵数字仍为 2026-07-24 快照,未重盘」)
88
+
89
+ ---
90
+
91
+ ## 4. 验收标准
92
+
93
+ - [ ] 复盘主文已落盘于 D1 裁定路径,简体中文,可独立阅读
94
+ - [ ] 欠账表含四栏:已关账 / 未修齐 / 暂缓 / 新发现;最低集(§2 D2)无遗漏行
95
+ - [ ] 明确写出 PLAN closed 后「点菜真空」与闭环方式(本复盘 + 点菜 ≤3)
96
+ - [ ] 下一 Epic 建议 **≤3** 条,每条含理由 + 不做清单
97
+ - [ ] dogfood 3 task basename 与双仓发布态(npm/tag/ahead)有专节或表行
98
+ - [ ] 机械化率叙事:主链已机械 vs 20 内容质量 / 40 真跑过仍 prompt-only
99
+ - [ ] `test_strategy: not_applicable` 理由在 task 元信息回填(与本 SPEC 一致)
100
+ - [ ] 无产品代码 diff;无新版本号声称
101
+
102
+ ---
103
+
104
+ ## 5. failure_paths
105
+
106
+ | 触发条件 | 系统行为 / 文档行为 | 可重试 |
107
+ |----------|---------------------|--------|
108
+ | 复盘文漏写某已知欠账 | 20-spec-audit / 维护者退回 · 补表行 | 是 |
109
+ | 点菜建议 >3 条 | 拒签收 · 合并或降为「观察项」附录 | 是 |
110
+ | 把实现/发版写进本波范围 | 00/30 拒开工 · 拆独立 SPEC | — |
111
+ | 双仓状态与复盘时实测不符 | 复盘文标注「时点快照」· 不阻断签收 | 重测更新表 |
112
+ | 误将 3 缺审 task 当作本波必做 | 对照 §3 非范围 · 仅建议栏 | — |
113
+
114
+ ---
115
+
116
+ ## 6. 依赖与引用
117
+
118
+ - PLAN(closed):`docs/harness/guides/PLAN_post_g4_next_mechanization_v1_zh.md`
119
+ - rethink:`cyning-harness/docs/rethink/2026-07-mechanization-rate/{01..04,README}.md`
120
+ - 最近 SPEC:`SPEC-verify-full-reviews-gate_v1.md`(N4 · dogfood 15/4/3)
121
+ - N2 residual:lint block(选项 C)须 FAIL 率下降
122
+ - dogfood active:
123
+ - `docs/harness/tasks/active/task_cyning_harness_a5_cli_verify_v101_v1.md`
124
+ - `docs/harness/tasks/active/task_harness_cyning_harness_hat_chain_pointer_sync_v1.md`
125
+ - `docs/harness/tasks/active/task_harness_task_validate_human_gate_ci_gate_v1.md`
126
+ - 产品仓 `@2.9.0` · 编排仓 Harness 落盘惯例
127
+
128
+ ---
129
+
130
+ ## 7. 思考轮(10-spec 回填 · R0–R5 · 形态 A · 禁止 early_stop)
131
+
132
+ ### R0 · 读入与约束
133
+
134
+ **读入**:维护者「新建任务 · 欠账与更新复盘 · 多轮防遗漏」;PLAN closed(N1–N4 published);rethink 01(四方向排序)· 03(G7/G6 仍 P2/P3)· 04(lifecycle 文档先行已兑现;discipline YAML 仍建议);N4 SPEC dogfood 3 缺审;用户明示欠账清单 1–8。
135
+
136
+ **约束**:
137
+
138
+ 1. 只 SPEC + invoke;不实现、不发版、不代签。
139
+ 2. `early_stop=no` · 跑满 R5(防遗漏优先于省轮)。
140
+ 3. track=`docs` · `test_strategy=not_applicable`。
141
+ 4. 交付可观测:落盘路径 + 表 + ≤3 点菜,而非「聊过就算」。
142
+
143
+ **时点快照(10-spec 起草日 2026-07-25)**:产品仓 `main` 与 `origin/main` 对齐 · tag `v2.9.0` 存在 · npm `@cyning/harness@2.9.0`;编排仓 Projects **ahead origin 29**(含未追踪 interview/sim 文档等)——复盘执行须重测,防漂移。
144
+
145
+ ### R1 · 范围 / 非范围 / 场景
146
+
147
+ **角色与场景**:
148
+
149
+ | 场景 | 谁 | 要什么 |
150
+ |------|-----|--------|
151
+ | S1 点菜 | 维护者 | 一张欠账全景 + ≤3 可开 Epic,避免 PLAN 关闭后口头漂移 |
152
+ | S2 考古 | 未来 10-spec / 面试叙事 | 「为何暂缓 G6/G7/N2-C」有单一出处 |
153
+ | S3 dogfood 卫生 | 编排 Agent | 知道 3 缺审是已知债非 N4 回归失败 |
154
+ | S4 发布卫生 | 维护者 | 双仓 tag/npm/ahead 是否再欠一刀 push |
155
+
156
+ **范围边界**:复盘 + 建议;**不**消化债本身。非范围见 §3——尤其「不修 3 文 / 不发版 / 不做引擎」防止复盘 task 膨胀成隐藏 30。
157
+
158
+ **遗漏扫描清单(R1 强制过一遍)**:
159
+
160
+ 1. 发布流程:npm ↔ tag ↔ CHANGELOG ↔ 本地 vs origin
161
+ 2. 双仓:产品仓已同步 vs Projects ahead
162
+ 3. dogfood:3 缺审 + N4「不强制修齐」语义
163
+ 4. 机械化率:主链 ✅ vs 20 质量 / 40 真跑过 / 全量 lint·D5
164
+ 5. PLAN 真空:closed 后下一动作入口 = 本复盘
165
+ 6. 方向二/三接口:lifecycle 文档先行已有 → 引擎仍空
166
+ 7. HGM G2:无消费者暂缓(方向四)
167
+ 8. N2-C:warn→block 前置条件(FAIL 率)
168
+
169
+ ### R2 · 方案对比
170
+
171
+ | 决策点 | 选项 | 裁定 | 理由 |
172
+ |--------|------|------|------|
173
+ | 复盘主文落点 | A 工作区 `guides/` · B 产品仓 `rethink/` · C 两者镜像 | **推荐 A 为主**;B 可作「索引一小段」链回 A(task 阶段二选一,勿双真值) | PLAN/点菜消费者在 Projects;rethink 01–04 已声明「非 SPEC」;镜像易漂移 |
174
+ | 形态 | 仅聊天纪要 / 正式 SPEC+复盘文 / 直接开引擎 Epic | **SPEC(本文件)→ 签收 → 00 task → 复盘文** | 维护者要「新建任务」;防遗漏须可审计;引擎 Epic 须点菜后再独立 SPEC |
175
+ | 点菜条数 | 开放列表 / 硬顶 3 / 只排序不建议 | **硬顶 ≤3** + 附录「观察项」可选 | 防同时开多 Epic;与 PLAN「点菜」语气一致 |
176
+ | 3 缺审处理 | 本波必修 / 仅列表 / 忽略 | **仅列表 + 可进点菜候选** | N4 已裁定不强制;复盘职责是可见化 |
177
+ | 是否重跑机械化率盘点 | 全量重盘 02/03 / 叙事增量 | **叙事增量**(主链已覆盖陈述) | 全量重盘另 Epic;本波防遗漏靠清单非重审计 |
178
+ | test_strategy | recommended / N/A | **`not_applicable`** | 无改码;验收=文档勾选 |
179
+
180
+ **弃选**:C 双落盘镜像(维护成本);直接跳过 SPEC 开 30(违反帽链 · 且无范围闸)。
181
+
182
+ ### R3 · 边界 / 失败语义 / 安全
183
+
184
+ - **边界**:复盘文不得声称「机械化率 XX%」新数字,除非附重盘方法;沿用 03 快照 +「主链已机械」定性即可。
185
+ - **失败**:漏项 → 书面审退回;把实现塞进范围 → 拒开工。
186
+ - **安全**:只读 git/npm 状态;不写密钥;不 push。
187
+ - **依赖**:签收本 SPEC 前,00 **不得**把复盘做成改 CLI 的 task。
188
+ - **误伤**:点菜若选「dogfood 修齐」勿与 N4 回归混淆——那是存量卫生,非 verify bug。
189
+
190
+ ### R4 · 验收 / 可测性 / test_strategy
191
+
192
+ - 可测性 = **文档可勾选**(§4),非 pytest。
193
+ - `test_strategy: not_applicable` + note(元信息已填)。
194
+ - 建议 40 自检(task 阶段):对 §2 D2 最低集做 diff 核对;`git status -sb` / `npm view` 结果贴进复盘「时点」节。
195
+ - 不要求新建自动化测试文件。
196
+
197
+ ### R5 · SPEC 签收就绪 · 是否可交 00 出 task
198
+
199
+ **自足性**:背景、范围/非范围、欠账最低集、落盘推荐、点菜硬顶、failure_paths、双仓注意均已写入。
200
+
201
+ **可交 00**:是。建议单 task:`cyning-harness-post-g4-debt-retro`(lightweight 文档 task · `test_strategy=not_applicable`)。图谱无需 bootstrap。
202
+
203
+ **签收后链路**:人签本 SPEC(或轻量 20-spec-audit)→ 00 起草 task → 10-task(可 early_stop 若仅投影本 §2)→ 20-task-audit → HG-AUDIT-R1 → 30 写复盘文。
204
+
205
+ **下一棒 Prompt 要点**:00 勿扩 scope 至 N2-C/G7 实现;点菜结论写进复盘文末「维护者待勾选」表即可。
206
+
207
+ ### 思考轮控制
208
+
209
+ | 字段 | 值 |
210
+ |------|-----|
211
+ | `actual_last_round` | `R5` |
212
+ | `early_stop` | `no` |
213
+ | `early_stop_reason` | — |
214
+ | `residual_risks` | ① 复盘执行时双仓 ahead/npm 可能已变——须时点重测;② 点菜 ≤3 仍可能争议排序(方向二 vs dogfood 卫生)——留给维护者勾选非 Agent 代决;③ rethink 03 数字未重盘,对外叙事若引用百分比须标注快照日;④ Projects 未追踪文档与 ahead 29 混杂,复盘勿误判「全是 Harness 债」;⑤ 若维护者坚持复盘落产品仓 rethink,须避免与 guides 双真值 |
215
+ | `round_extension_note` | 维护者要求多轮防遗漏 · **禁止 early_stop** · 已跑满 R0–R5;未扩 R6 |
216
+
217
+ ---
218
+
219
+ ## 8. 建议点菜池(供复盘文精炼至 ≤3 · 非本波范围)
220
+
221
+ | ID | 候选 | 方向 | 一句话理由 | 典型不做 |
222
+ |----|------|------|------------|----------|
223
+ | P1 | 方向二:lifecycle **转移引擎**最小骨架 | 二 | YAML 已先行;挂点决策下一台阶 | 不做完整 runner / G7 同波硬塞 |
224
+ | P2 | dogfood:补齐 3 缺审查文 | 运维/卫生 | 裸 verify 工作区可绿;成本低 | 不改 verify 语义 |
225
+ | P3 | N2-C:`verify --task` lint **block** | 一 | WARN 债转真闸;须先证明 FAIL 率下降 | 不做全量 lint |
226
+ | P4 | G7 执行证据(`harness run`) | 二 | 40「真跑过」最大黑洞 | 不做 grep 伪证据 |
227
+ | P5 | 方向三:`--json` 契约收敛 / G6 调研 | 三 | Agent 消费者放大前置 | 不上 MCP |
228
+ | P6 | `discipline-coverage.yaml` 资产化 | 一 | 04 已建议;改进路线可版本化 | 不做重盘全量人工周 |
229
+
230
+ ---
231
+
232
+ ## 修订记录
233
+
234
+ | 日期 | 摘要 |
235
+ |------|------|
236
+ | 2026-07-25 | 10-spec R0–R5(形态 A · early_stop=no)· 维护者指令「欠账复盘 · 多轮防遗漏」 |
237
+ | 2026-07-25 | 维护者签收(对话「签收」)→ `signed` · 00 起草 task |
@@ -0,0 +1,183 @@
1
+ # SPEC:verify 全量模式纳入 reviews 留档闸(N4)(v1)
2
+
3
+ > **状态**:`signed`(维护者签收 2026-07-25 · 对话「签收」)
4
+ > **track**:`feature`
5
+ > **关联图谱**:无(纯 Harness 工具链)
6
+ > **上游**:[`PLAN_post_g4_next_mechanization_v1_zh.md`](../../../docs/harness/guides/PLAN_post_g4_next_mechanization_v1_zh.md) · N4 · G2 residual
7
+ > **前置**:G2 `@cyning/harness@2.5.0`(`--task` 已查 reviews)· N3 `@2.8.0`
8
+ > **下游**:CLOSE ✅ · `@cyning/harness@2.9.0` published · 合入 `main` · tag `v2.9.0`
9
+
10
+ ---
11
+
12
+ ## Harness 元信息
13
+
14
+ | 字段 | 值 |
15
+ |------|-----|
16
+ | **spec_slug** | `verify-full-reviews-gate` |
17
+ | **test_strategy** | `required` |
18
+ | **test_strategy_note** | 全量模式:有文 PASS / 缺文 BLOCKED / `--allow-no-review`;双路径发现;既有 `--task` 回归不变 |
19
+ | **entry_invoke_10_spec** | `Projects/docs/harness/invokes/by-task/cyning-harness-verify-full-reviews-gate/invoke_20260725_10_spec_verify_full_reviews_gate.md` |
20
+ | **entry_invoke_00_draft** | 工作区 `docs/harness/prompts/PROMPT_00_draft_spec_or_task_v1_zh.md` |
21
+
22
+ ---
23
+
24
+ ## 1. 背景与目标
25
+
26
+ G2(v2.5.0)把「R<n> 审查文存在」挂在 **`verify --task`** 与 `task close`,但 R2 明确:**无 `--task` 全量模式本波只查闸表**。后果:
27
+
28
+ 1. **语义裂缝**:`verify --task X` 会因缺审查文 BLOCKED,但裸 `verify`(全量)在闸表全 approved 时仍可能 **PASS**——「仓库可否 30」答案因是否传 `--task` 而分裂。
29
+ 2. **发现路径裂缝**:`gate-check` / `listActiveTasks` 只扫 `docs/tasks/active`;工作区 Extended 真值在 `docs/harness/tasks/active`。对 Projects 根跑裸 `verify` →「无 active」vacuous PASS,与人工闸表现实脱节。
30
+
31
+ **dogfood(2026-07-25 · `findReview` + `evaluateMayStart30`)**:`docs/harness/tasks/active` **15** 个 task:
32
+
33
+ | 指标 | 值 |
34
+ |------|-----|
35
+ | `may_start_30=true` | **4** |
36
+ | 其中缺 R<n> 审查文 | **3**(`a5_cli_verify` · `hat_chain_pointer_sync` · `task_validate_human_gate_ci_gate`) |
37
+ | 有审查文且可 30 | **1**(`ops_clarify_single_run_resume`) |
38
+
39
+ → 若仅扩展 reviews 检查而不扩路径,N4 对工作区几乎无效果;若扩路径 + 查 reviews,裸 `verify` 将暴露上述 3 个「闸表可 30 但无审查文」任务(预期拦截 · 可用 `--allow-no-review`)。
40
+
41
+ **目标**:闭合 G2 residual——全量模式与 `--task` 在 **reviews 存在性** 上同构;并让全量发现覆盖 Starter(`docs/tasks/active`)与 Extended(`docs/harness/tasks/active`)。
42
+
43
+ **职责切分(同 G2)**:机器 = 存在性;人 = `HG-AUDIT-R1` 结论。
44
+
45
+ ---
46
+
47
+ ## 2. 范围
48
+
49
+ ### D1 · 全量模式 reviews 闸(`lib/verify.js`)
50
+
51
+ - 当**无** `--task` 且**无** `--spec`:在 gate-check 通过后,对发现的每个 active task 调用 `findReview`:
52
+ - 任一缺失 → `VERIFY: BLOCKED · missing R<n> review`(reason 列出 basename,如 `3/15 tasks · a.md, b.md, …`)· exit 2
53
+ - `--allow-no-review` → 对缺失者 WARN 放行(与 `--task` 同旗)
54
+ - **不**在全量模式跑 task lint(维持 N2:仅 `--task`)
55
+ - **不**在全量模式跑 audit D5 逐 task(本波不变;另议)
56
+
57
+ ### D2 · active 发现双路径
58
+
59
+ - `listActiveTasks(target)`:返回
60
+ `docs/tasks/active/task_*.md` ∪ `docs/harness/tasks/active/task_*.md`
61
+ (去重:同 basename 优先 Starter 路径;排序稳定)
62
+ - `wizard/gate-check.sh`:**同步**双路径扫描(无 `--task` 时),避免闸表集合 ≠ reviews 集合
63
+ - 文档:ONBOARDING/USER_GUIDE 注明双路径
64
+
65
+ ### D3 · handoff 对齐
66
+
67
+ - 全量 `--json`:每个 task 的 `may_start_30` / `verify_ok` **纳入** `review_found`(与单 `--task` 一致);根级 `verify_ok` = 全部可 30(含审查文)
68
+ - `--agent-hint` 可显示缺审查文的 blocked 行
69
+
70
+ ### D4 · lifecycle 登记
71
+
72
+ - `harness/lifecycle.yaml`:`to_30` 的 `reviews_retention` 注释/描述改为覆盖「`--task` 与全量模式」;不新增转移 id(同守卫 · 两入口)
73
+
74
+ ### D5 · 测试 / 文档 / 版本
75
+
76
+ - 测试:全量三态(全有文 PASS / 一缺 BLOCKED / allow 豁免)+ 双路径夹具(仅 harness 路径也能被扫到)+ 既有 `--task` 回归
77
+ - CHANGELOG **v2.9.0**(⚠ 行为变更:裸 verify 更严)+ 豁免指引
78
+ - PLAN / G2 SPEC residual 回链关闭
79
+
80
+ ### D6 · dogfood(实现波)
81
+
82
+ - 对工作区根或含 `docs/harness/tasks/active` 的 target 跑裸 `verify`,报告 BLOCKED 列表与豁免后结果;落自检结论(可修审查文或 `--allow-no-review`,不强制本波修齐 3 个存量)
83
+
84
+ ---
85
+
86
+ ## 3. 非范围
87
+
88
+ - 全量模式接入 **task lint**(N2-C / 另 SPEC)
89
+ - 全量模式逐 task **audit D5**
90
+ - SPEC 侧全量扫描(已有 `verify --spec` 单文件)
91
+ - 强制补齐 dogfood 3 个缺审查文的存量 task
92
+ - 审查文内容判定;状态机引擎
93
+
94
+ ---
95
+
96
+ ## 4. 验收标准
97
+
98
+ - [ ] 无 `--task`:active 均有 R&lt;n&gt; 文 → PASS(闸表亦过)
99
+ - [ ] 无 `--task`:至少一 task 缺审查文 → BLOCKED exit 2 · reason 含该 basename
100
+ - [ ] `--allow-no-review`:全量缺失 → WARN + PASS
101
+ - [ ] 仅存在 `docs/harness/tasks/active` 时,gate-check / listActiveTasks 仍能发现 task
102
+ - [ ] `--task` 行为与 v2.8 一致(回归)
103
+ - [ ] 全量 `--json`:`may_start_30` 含审查文条件
104
+ - [ ] `npm test` 全绿;CHANGELOG v2.9.0 行为变更醒目
105
+ - [ ] dogfood 分布落自检结论
106
+
107
+ ---
108
+
109
+ ## 5. failure_paths
110
+
111
+ | 触发条件 | 系统行为 | 可重试 |
112
+ |----------|----------|--------|
113
+ | 全量扫描发现缺审查文 | BLOCKED · 列出 task | 补 20 审 / `--allow-no-review` |
114
+ | 双路径同 basename 重复 | 去重后只检一次 | — |
115
+ | 业务仓只有 Starter 路径 | 行为 = 只扫 `docs/tasks/active`(与今同构 + reviews) | — |
116
+ | 未升级 2.9.0 | 全量仍不查 reviews | upgrade |
117
+ | 存量 3 个可 30 无审查文被挡 | **预期** | 补审或豁免 |
118
+
119
+ ---
120
+
121
+ ## 6. 依赖与引用
122
+
123
+ - G2:`findReview` · `--allow-no-review` · SPEC residual ③
124
+ - N2:全量不跑 lint(本 SPEC 维持)
125
+ - `listActiveTasks` · `gate-check.sh` ACTIVE_DIR
126
+ - PLAN N4
127
+
128
+ ---
129
+
130
+ ## 7. 思考轮(10-spec 回填 · R0–R5)
131
+
132
+ ### R0 · 读入与约束
133
+
134
+ 读入:PLAN N4;G2 R2「全量本波不变」+ residual ③;`verify.js` 仅 `taskFile` 分支查 reviews;`listActiveTasks` / gate-check 仅 `docs/tasks/active`;dogfood 15/4/3。约束:行为变更须豁免阀 + CHANGELOG;挂点须与检查物同时刻(审查文应在 R1 后已存在)。
135
+
136
+ ### R1 · 范围 / 非范围 / 场景
137
+
138
+ **场景**:① 维护者/Agent 裸 `verify` 做仓库健康检查,应与逐 task `--task` 对「可 30」同答案;② Extended 工作区 active 在 harness 路径下也要被扫到;③ 存量缺文用豁免,不强制本波修齐。
139
+ **非范围**:lint/D5 全量化、SPEC 全量、内容判定——避免 N4 膨胀成「verify 大一统」。
140
+
141
+ ### R2 · 方案对比
142
+
143
+ | 决策点 | 选项 | 裁定 | 理由 |
144
+ |---|---|---|---|
145
+ | 是否纳入 reviews | 否(关账 N4)/ warn / block | **block + `--allow-no-review`** | 与 G2 `--task` 同构;warn 再留自觉层;dogfood 已能量化误伤面(3 task) |
146
+ | 检查哪些 task | 全部 active / 仅 may_start_30 | **全部发现的 active**(与 gate-check 集合对齐) | 闸表未 approved 者 gate-check 已挡;对已过闸者补审查文洞;实现简单 |
147
+ | 双路径 | 仅 Starter / Starter∪Extended | **∪ 双路径**(listActiveTasks + gate-check 同步) | 否则 N4 对 Projects dogfood 无效 |
148
+ | 全量 lint | 顺带做 / 不做 | **不做** | N2 已拒;FAIL 率仍高 |
149
+ | 版本 | 2.8.x / 2.9.0 | **2.9.0** | 裸 verify 行为变更 · minor |
150
+
151
+ ### R3 · 边界 / 失败语义 / 安全
152
+
153
+ - **误伤**:主要是「闸表可 30 且无审查文」——正是 G2 要抓的类;豁免旗复用。
154
+ - **空 active**:两路径皆无 → 维持现状(gate-check 提示无 active · exit 0)。
155
+ - **安全**:只读。
156
+ - **兼容**:`--task` / `--spec` 不变。
157
+
158
+ ### R4 · 验收 / 可测性 / test_strategy
159
+
160
+ `test_strategy: required`。夹具:双路径目录、全量缺一文、allow 豁免;回归 verify-review-gate / verify-lint-warn。dogfood 命令写进 40 自检。
161
+
162
+ ### R5 · SPEC 签收就绪 · 是否可交 00 出 task
163
+
164
+ 自足:裁定、路径、豁免、版本清晰。**可交 00**:单 task `cyning-harness-verify-full-reviews-gate`。图谱无需。关闭 G2 residual ③。
165
+
166
+ ### 思考轮控制
167
+
168
+ | 字段 | 值 |
169
+ |------|-----|
170
+ | `actual_last_round` | `R5` |
171
+ | `early_stop` | `no` |
172
+ | `early_stop_reason` | — |
173
+ | `residual_risks` | ① gate-check 双路径改 bash 须防破既有单测路径假设;② 去重规则若两目录同 slug 不同内容属数据错误——本波只去重不深比较;③ 全量 D5 仍空缺,健康检查仍非「可 30」充分条件 |
174
+ | `round_extension_note` | — |
175
+
176
+ ---
177
+
178
+ ## 修订记录
179
+
180
+ | 日期 | 摘要 |
181
+ |------|------|
182
+ | 2026-07-25 | 10-spec R0–R5(维护者点菜「继续 N4」)· dogfood 15/4/3 |
183
+ | 2026-07-25 | 维护者签收(对话「签收」)· → 00 起草 task |