返回 DeepSeek-Reasonix
read-evidence-repair.zh-CN.md
根目录 / docs / plans / read-evidence-repair.zh-CN.md
1 # 读取证据的修复与验证
2
3 本文完成既有"单 PR 读取改造"的执行链路接线。默认管线中,续页与最终答复
4 决策由 coordinator 负责;legacy 的不完整读取状态机只用于回滚。
5
6 真正的读取器从同一份捕获字节或 overlay 缓冲区同时产出输出与来源身份。
7 磁盘的 inspect/range 调用只对 256 KiB 以内的内容捕获身份;更大的本地读取
8 仍是有界流式读取。显式 full 读取及其宿主续页最多捕获 64 MiB。没有版本
9 信息的窗口不能被拼接成整文件声明;无法完成的整文件需求会变成
10 `needs_scope`。这些都是内部资源上限,不是新的用户设置。full 读取与自动
11 续页的读取 token 会按实时上下文余量裁剪,并经过有序批次收尾检查;普通预览
12 仍走常规上下文压缩。
13
14 续页必须与最近一次签发的完整游标一致。读取器自己负责路径解析,因此保留
15 相对路径与别名。被执行来源必须仍与游标快照匹配。页数与实测活跃时间上限会
16 停止派发;无进展建议会改变请求策略,反复停滞则暂停。
17
18 写工具通过各自真实的预览/校验路径声明原始范围。`multi_edit` 针对原始来源
19 计算全部改动用于预检。覆盖写需要当前原始版本的完整证据,未保存的新缓冲区
20 同样适用。写工具在执行时再次校验预检来源。同批次的读取永远不能作为写入
21 证据。历史证据失败会针对冻结的 provider 轮次边界重新评估,并可能被清除。
22 重建豁免要求同一条肯定式重写子句中出现完全一致的路径。移动保留内容并拒绝
23 已存在的目标,因此不需要全文证据;锚点删除沿用既有归属。
24
25 桌面与 CLI 显示互不重叠的、从 1 开始的覆盖区间与恢复指引。generation 与
26 sequence 用于拦截过期帧;互相独立的读取各自保留条目,回合完成时清除实时
27 状态。
28
29 回归覆盖位于 `internal/agent/read_pipeline_regression_test.go`、
30 `internal/tool/builtin/read_evidence_regression_test.go`、
31 `internal/cli/read_status_test.go` 以及前端的读取状态测试。legacy 协议与
32 依赖编辑测试显式选择回滚模式。golden provider 请求已按本 PR 新增的
33 intent/cursor schema 更新。这一有意的 schema 变更可能在使用者首次请求时
34 重建 prompt 缓存;宿主 envelope 与写入来源校验始终不在 provider 可见字节
35 内。不涉及会话存储迁移。新 run 开始后,旧游标必须重新读取。
36
37 本地确定性测试与原生 WebView2/WKWebView 检查、真实 provider 的成功与 token
38 测量、精确 head 的远端 CI、以及发布可用性是不同层次,必须分开汇报。
39
40 ## 已完成读取的复用与终态回执
41
42 后续改动把"历史需求已完成"与"冻结模型请求中仍有原文"分开。有序的工具
43 收尾器按工作区、规范路径、来源类型、原始身份与快照关联捕获。已满足的需求
44 在校验一致的重复读取后仍保持满足;扩展只保留覆盖与记账,并只索取缺失区间。
45 新的 run 拥有新的注册表与游标绑定。
46
47 结构化读取器绕过通用的字符串去重。只有当实际被采样的请求中确实存在完全
48 相同的原文、且仅针对已覆盖区间时,才允许引用。引用不投递新的源代码行,
49 也不能引用其他引用。投影移除或扩展改写会触发有界文本投递,但不会撤销先前
50 已完成的需求。会移除可解析源代码文本的扩展改动同样使身份失效。
51
52 `incomplete_read` 是终态暂停结果,不是成功,也不是传输层重试。可选的
53 `read_pause` LocalOnly 回执最多保留 32 个受影响文件,每个字段最多 64 个
54 区间,不含内容或可执行游标。桌面实时视图与历史视图使用同一条幂等提示。
55 旧会话没有该字段;旧读取器通过既有的 LocalOnly 工具身份忽略这个哨兵。
56 不需要迁移,也不需要用户设置。既有写入前置条件与本回执相互独立。后续改动
57 不改变任何工具 schema 或系统前缀;重新投递被压缩移除的文本可能增加单次
58 请求的输入用量。
59
60 付费矩阵保留原有 64 个用例,并新增 32 个定向用例与 12 个精确写入用例。
61 其 HTTP 中继把所有上游尝试限制在 600 次以内,每次请求前预留 128,000
62 token,用量未知时保留预留,并在 300 万 token 或四小时处停止。中继强制
63 2,048 token 的输出上限(包括原本会省略该上限的适配器),即使下游客户端
64 在最后一个 SSE 哨兵前关闭,也会计入已知用量。它不存储任何凭据或请求体。
65 模型任务失败与宿主不变量失败分别记录。
66
67 原生验证发现,信息性暂停回执曾被折叠进已完成的过程材料。现在读取暂停保留
68 在过程折叠之外、位于保留的候选答复之后,且不隐含续页动作。暂停结果在桌面
69 指标与遥测中也与 provider 错误保持区分。同一条渲染回归覆盖实时与历史提示
70 的形态。分页的 TranscriptStore 使用同一套转换,包括空正文的 LocalOnly
71 回执;冷后端切片与前端重复翻页加载都与 legacy 全历史转换器分开测试。
72 读取状态事件区间保持 0 基、半开,与 envelope 和暂停回执一致;CLI 与桌面
73 只在显示时做 1 基转换。发射器回归防止原生分页验证中发现的首行可见行号
74 双重偏移。
75
75 lines MARKDOWN