Open Code Review 项目解析知识图谱 / 分组目录 / 审查引擎 / 断点续审与指纹复用

断点续审与指纹复用

审查引擎高级方法机制G-B · 审查引擎

What · 是什么

sha256(mode+old+new+diffText) 指纹复用已完成文件评论;SealedInput 冻结 commit 端点防 ref 漂移
断点续审通过任务指纹复用跳过已完成审查,从断点继续执行未决项
reviewItemFingerprint = sha256(mode + oldPath + newPath + diffText),是评审项的确定性身份指纹
父 manifest 中标记 completed/reused 的评论直接回填 Collector(复用),未决项重跑
scanItemFingerprint = sha256(full_scan + path + content),是全文件扫描项的指纹
SealedInput 冻结 commit 端点,防止 ref 移动导致身份漂移
用法入口:ocr review --resume <session-id>

Why · 为什么

原理 · Principle

大仓库/长会话中断后从头重审成本极高,指纹复用把已完成工作降为 O(1) 回填

指纹基于内容与路径而非时间,同一 diff 多次审查指纹一致,天然幂等

SealedInput 冻结端点解决审查进行中远端 ref 更新导致的前后身份不一致

复用/重跑决策由父 manifest 状态驱动,覆盖度契约是单一事实源

How · 怎么做

生成评审项指纹 reviewItemFingerprint=sha256(mode+oldPath+newPath+diffText),作为任务身份标识
续审时查询父 manifest:条目状态为 completed 或 reused 的评论直接回填 Collector,不重新调用 LLM
未决(pending/failed)条目重新执行审查子任务
scan 模式生成 scanItemFingerprint=sha256(full_scan+path+content) 标识扫描项用于复用
SealedInput 在会话启动时冻结 commit 端点(commit hash 级别),后续引用不变
执行入口 ocr review --resume <session-id> 指定要恢复的会话

案例 · Cases

代表性案例
30 文件审查跑到第 25 个断网,--resume 后 25 个 completed 指纹直接回填,仅重跑 5 个
同一 diff 被评审两次(如重复提交),指纹一致直接复用评论,无重复 LLM 开销
审查中远端仓库被 push 新 commit,SealedInput 保证本会话仍引用冻结端点,评论身份不漂移
scan 模式下文件内容未变的扫描项按 scanItemFingerprint 复用,仅重扫变化文件

反模式 · Anti-patterns

正反实例论证 · Evidence

正例 · Pro
指纹含 mode+oldPath+newPath+diffText,父 manifest 状态驱动复用
fp := sha256(mode + oldPath + newPath + diffText)if m.Status(fp) == Completed || m.Status(fp) == Reused { collector.Backfill(comment(fp)) // 直接回填,不再调 LLM} else { rerun(fp) // 未决项重跑}
reviewItemFingerprint 覆盖模式/路径/diff 全身份要素,父 manifest 中 completed/reused 的评论直接回填 Collector,未决项才重跑,断点续审 O(1) 恢复。
反例 · Con
指纹漏分量或依赖可变 ref,身份漂移
# 错误:指纹缺 diffTextfp := sha256(mode + oldPath + newPath)# 错误:用分支名而非冻结 commitinput.Ref = "main" // ref 移动导致前后身份不一致
指纹遗漏分量会让同一 diff 不同模式产出相同指纹,错误复用评论;依赖可变 ref 而非 SealedInput 冻结的 commit 端点,审查期间 ref 移动即身份漂移、评论错位。
正例 · Pro
SealedInput 冻结 commit 端点
input := SealedInput{ Commit: repo.Resolve("HEAD").Hash, // 启动时冻结 commit hash}# 审查全程引用冻结端点,远端 push 不影响本会话
会话启动时把输入冻结在 commit hash 级别,审查期间远端仓库即使被 push 新 commit,本会话仍引用冻结端点,评论身份不漂移。
反例 · Con
续审时全量重建而非按指纹差量续跑
# 错误:--resume 后仍全量重审reviewAll()# 正确:ocr review --resume <session-id> 按指纹差量续跑
不按指纹差量续跑退化为全量重审,已完成工作的 LLM 开销全部浪费,断点续审失去意义。

实践资产 · Assets

源码节选
agent.go 核心节选:Run 流水线 / dispatchSubtasks / executeSubtask / REVIEW_FILTER
internal/agent/agent.go · 3451 B
源码节选
断点续审节选:指纹复用 / SealedInput 冻结
internal/session/resume.go · 1716 B

相关边