Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

<!-- 派发给执行方的任务先按 docs/templates/task.md 写任务书并合并(计划并入其「步骤与提交顺序」)。 -->

- 任务书:docs/plans/task-<编号>-<名字>.md/无
- 任务书:docs/plans/task-<编号>-<名字>.md(设计方自行实现时随本 PR 提交;只有纯记录类改动可以写「无」)

- 目标终态:
- 对应验收编号(docs/specs,新增条目写进规格验收表):
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/auto-merge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ jobs:
gh label create escape --repo "$GITHUB_REPOSITORY" --color d93f0b --description "合并后才发现的逃逸缺陷,正文写明引入的 PR" --force >/dev/null
gh label create budget-exceeded --repo "$GITHUB_REPOSITORY" --color d93f0b --description "超出任务预算,不自动合并" --force >/dev/null
gh pr edit "$PR" --repo "$GITHUB_REPOSITORY" --add-label "class:$CLASS"
# R2 及以上:标出待独立评审(设计 8.3,试行);评审由非设计方经 bin/dispatch review 完成。
if [ "$RISK" = "R2" ] || [ "$RISK" = "R3" ]; then
gh label create needs-independent-review --repo "$GITHUB_REPOSITORY" --color 1d76db \
--description "待非设计方独立评审(试行)" >/dev/null 2>&1 || true
gh pr edit "$PR" --repo "$GITHUB_REPOSITORY" --add-label needs-independent-review
fi
gh pr edit "$PR" --repo "$GITHUB_REPOSITORY" --add-reviewer "$OWNER" \
|| echo "未能请 $OWNER 评审($RISK),可能是其本人开的 PR"

Expand Down
6 changes: 3 additions & 3 deletions docs/plans/backlog.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
| B2 | 首次真实发版时确认 `release_check` 与 environment `release` 的审批拦停生效 | 用户决定发版;版本号先与用户确认 | 用户确认版本号并审批,评审方核对 | 方案 §13 V6 |
| B4 | 按改动行做变异测试(先只支持 Python),自动发现「测试写了但没测到东西」 | 出现一次这类逃逸再做;2026-09-26 评估:约 1 天,每个 PR 的 CI 多 1–4 分钟,覆盖不到 Swift | 评审方 | 修复证据方案讨论(2026-09-26) |
| B19 | 首次真实发版前确定轻量的发布后观察与恢复步骤:怎样发现安装、导航或数据异常,观察多久,怎样回退并把逃逸缺陷送入回放;先写人工步骤 | 下一次发版准备时,与 B2 同步 | 用户定可接受风险,评审方准备步骤 | Codex 复评覆盖矩阵第 7 环,全链路审计 3.4 |
| B30 | 核对每周质量检查(`quality.yml`,每周一 02:17 UTC)是否按计划自动触发并通过。2026-09-28 核对:工作流为 active、9-25 起在 main 上,但当天定时到 06:17 UTC 仍未触发(GitHub 定时在高负载时可能延迟或丢弃),至今只有 9-26 一次手动运行 | 2026-10-05(下周一)再核对;P6 已加第二个定时(06:43 UTC),周报列出本周定时触发次数;仍都未触发则改用外部触发 | 评审方 | 全链路审计 2.8 |

## 2. 可以做,暂未排期

Expand All @@ -32,7 +31,7 @@
| B17 | 选定重复出现的任务类别,用干净环境多次运行同一任务集;分开统计 `pass^k`、人审无需修改率、自动合并抽审纠错率、逃逸缺陷、人工时间与 harness 误拦和 CI 等待成本 | 先定口径,同类任务积累到 5 个以上再执行 | 评审方 | Codex 复评问题 5,全链路审计 3.1 |
| B18 | 下次实质修订调研报告时,在 Claude 编辑源补 METR 样本与时间视界版本、`pass^k` 在异质任务上的限定、自动合并下「无修改合并率」的口径,再重新导出快照 | 随报告下次修订 | 评审方 | Codex 复评「调研文章」部分 |
| B23 | 停机演练:按规范 §8 停机 → R0 测试 PR 不被自动合并 → 恢复 → 重跑后被自动合并,结果记入规范 §6(步骤已在 P2 写入) | 进入无人值守前一次,之后每季度 | 用户演练,评审方记录 | 全链路审计 G4、1.5,设计第十七节 |
| B27 | R2+ PR 增加独立上下文评审(另一个设计评审方按评审模板),先在 3 个 PR 上试行,再与用户判断对照校准 | 中;流程成本 | 评审方执行,用户决定是否长期保留 | 全链路审计 G5、2.4 |
| B27 | 独立评审试行:工具与校准集随阶段二 P7 合并;剩在 3 个 R2 PR 上试行(`bin/dispatch review <PR>`),再与用户判断对照,由用户决定是否常态化 | 小;P7 合并后,随出现的 R2 PR 进行 | 评审方执行,用户决定 | 全链路审计 G5、2.4,设计 8.3 |

## 3. 持续进行或暂缓

Expand All @@ -47,7 +46,6 @@

| 编号 | 事项 | 影响 |
|---|---|---|
| B11 | Codex 默认模型 `gpt-6-sol` 不能配 ChatGPT 账号使用(`~/.codex/config.toml` 的 `model`) | 直接运行 `codex` 可能报错;实测时改用 `-m gpt-6-astra` |
| B12 | Codex 的 `bigmodel` 服务商缺少密钥文件 `~/.config/glm-developer/glm.key` | ChatGPT 额度用完时无法换用该服务商 |
| B13 | V2 探针留下的记录:`~/.codex/config.toml` 中对 scratchpad 探针目录的项目信任与钩子信任 | 无害,可删 |

Expand All @@ -63,6 +61,8 @@
| B21 | 派发脚本 `bin/dispatch`(PR #55)与端到端验收:真实 K2 任务 T005 经任务书 #56、实现 #57 全程自动完成,主目录无改动;槽位命名随后修正 | 2026-09-28,PR #58 |
| B7 | 按任务书预算比对 CI 轮次:合并路由第 5 条超预算即转用户(`run_check.py`),交付度量列出「CI 轮次 / 预算」 | 2026-09-28,PR #59(目标态设计阶段二 P5) |
| B25 | 试跑记录自动汇总:周报「试跑记录」表从运行记录、PR 与议题生成;任务 002–004 以 `docs/runs/history.json` 登记 PR,指标由周报读取;任务模板不再手填 | 2026-09-28,PR #60(目标态设计阶段二 P6) |
| B30 | 每周质量检查的定时:2026-09-28 的 02:17 UTC 定时延迟约 6.4 小时后于 08:41 UTC 运行并成功(GitHub 定时会延迟),不是没有触发;P6 已加第二个定时兜底,周报每周列出定时触发次数 | 2026-09-28,PR #63(目标态设计阶段二 P7,攒批) |
| B11 | Codex 默认模型 `gpt-6-sol` 不能配 ChatGPT 账号:2026-09-28 实测已可用(`codex exec -m gpt-6-sol`,推理强度 max 与 xhigh 均被接受);独立评审按用户指定改用 gpt-6-sol、max | 2026-09-28,PR #63(目标态设计阶段二 P7,攒批) |
| B26 | 开启 GitHub secret scanning 与 push protection:用户在仓库设置中开启,API 核对两项均为 enabled | 2026-09-28,PR #52 |
| B5 | Zcode 守卫的 matcher 补上 MCP 批准类工具(同时补议题、标签类;OpenCode、Pi、Claude Code 一并补齐),重新信任转 B32 | 2026-09-28,PR #51(目标态设计阶段一 P3) |
| B20 | 回放强制:PR 中每个非文档类 `Defect` 在 head 上须有注入用例、守卫测试或写明原因的暂缓项(`evidence.py`),缺则 harness job 失败 | 2026-09-28,PR #51(目标态设计阶段一 P3) |
Expand Down
58 changes: 58 additions & 0 deletions docs/plans/task-006-independent-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
task: T006
class: K7
risk: R3
designer: claude-code
size: medium
architecture: false
spec_refs: []
no_spec_reason: 护栏与流程改动,验收写在 docs/specs/delivery-harness.md 的约定与验证状态中,没有产品规格验收编号
budget:
wall_clock_min: 480
ci_rounds: 3
retries: 2
tokens: null
rollback: git revert(删去独立评审工具与校准集;auto-merge 不再打 needs-independent-review 标签)
---

# 任务:独立评审试行——非设计方只读评审 R2 以上的 PR,并在校准集上量出可信度

状态:设计评审方自行实现(2026-09-28,方案 B:任务书与实现同一个 PR)。来源:目标态设计 8.3、第十六节阶段二 P7;待办 B27;用户决定 5(先在 3 个 R2 PR 上试行)。

## 目标终态

- `bin/dispatch review <PR>` 在只读的评审工作区(`<仓库名>-review`)中,由不是该任务设计方的评审方评审 PR:只给任务书、PR 描述、diff 与证据包,不给执行过程;结论(通过 / 不通过 / 需用户验收与发现列表)以固定格式评论到 PR,并去掉 `needs-independent-review` 标签。
- 评审方可选 Pi、Codex、Claude Code;默认由 `harness/rules.toml [review] reviewer` 指定(用户 2026-09-28 定为 Pi + glm-5.3),结构上只读,环境里没有 GitHub 凭据;与执行方同一宿主时在评论中标出。
- 评审方本身失败(报错、超时、额度用尽)记为「评审失败」:不评论为结论、不计入校准。
- auto-merge 对 R2 及以上的 PR 打 `needs-independent-review`。
- 校准集 `evals/review/samples.json`:已知有问题的改动(回放用例在 main 上重新注入)与已知良好的已合并 PR;`review.py calibrate` 逐个落盘、可续跑、连续失败即停,算出 TPR 与 TNR,结果入库。
- 设计方自行实现的任务(任务书随本 PR 提交)不要求运行记录,仍要求每个提交带 `Task:`(`run_check.py`)。

## 非目标与禁止动作

- 不让评审结论替代用户审批,不据此自动合并。
- 不在本 PR 中决定是否常态化:3 个 R2 PR 试行后由用户决定。
- 不接入 OpenCode 评审方:2026-09-28 实测 OpenCode 在本机无界面运行卡在初始化,待用户排查后再接。

## 前置条件(不满足就停下报告)

- 至少一种评审方能在本机无界面运行并返回可解析的结论。

## 验收

| 编号 | 验收内容 | 证据类型 | 覆盖(测试名或验证步骤) |
|---|---|---|---|
| 不挂规格:护栏 | 结论解析、分离规则、只读参数、无凭据环境、评论格式、失败处理、校准打分与续跑 | 单测 | `tests.test_harness_review_independent` |
| 不挂规格:护栏 | 设计方自行实现时不要求运行记录、仍要求 `Task:` | 单测 | `tests.test_harness_run_check.RunCheckTest.test_designer_self_implementation_needs_trailers_but_no_record` |
| 不挂规格:护栏 | R2 以上打待评审标签 | CI 断言 | `tests.test_harness_review_independent.WorkflowTest` |
| 不挂规格:护栏 | 在校准集上量出 TPR 与 TNR 并入库 | 真实数据 | `evals/review/results/` 下的结果文件 |
| 不挂规格:护栏 | 3 个 R2 以上 PR 有非设计方的评审结论 | 人工 | 合并后对后续 R2 以上 PR 运行 `bin/dispatch review`,由用户对照(待办 B27) |

## 步骤与提交顺序

| # | 改动 | 涉及文件 | 验证方式 | 对应验收 |
|---|---|---|---|---|
| 1 | 评审工具、提示词、分离规则、失败处理、校准与续跑 | `harness/review.py`、`harness/review_prompt.md`、`harness/dispatch.py`、`harness/rules.toml`、`evals/review/samples.json` | `bin/verify` | 第 1、4 行 |
| 2 | 自行实现的任务不要求运行记录 | `harness/run_check.py` | `bin/verify` | 第 2 行 |
| 3 | auto-merge 打待评审标签 | `.github/workflows/auto-merge.yml` | `bin/verify` | 第 3 行 |
| 4 | 校准结果、规范、README、待办同步 | `evals/review/results/`、`docs/specs/delivery-harness.md`、`harness/README.md`、`docs/plans/backlog.md` | `python3 harness/review.py calibrate --reviewer pi` | 第 4 行 |
Loading
Loading