From 3bb662f0923d93a0c69ee9e364d6400c1c62595f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Thu, 15 Oct 2026 14:27:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=A4=96=E7=BD=AE=E9=9B=86=E6=88=90=E6=B5=8B=E8=AF=95=E5=A4=B9?= =?UTF-8?q?=E5=85=B7=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 夹具误用错误行信号(.rs:)做普通大结果,错误行全量保留致压缩断言先天不成立,改中性行 - 生产行为缺陷(错误行洪泛击穿压缩,grep/rustc 类输出为主要受害者)登记看板待修 --- crates/df-ai/tests/context_offload.rs | 4 +++- docs/todo.md | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/df-ai/tests/context_offload.rs b/crates/df-ai/tests/context_offload.rs index d42ff9a..305a00b 100644 --- a/crates/df-ai/tests/context_offload.rs +++ b/crates/df-ai/tests/context_offload.rs @@ -68,7 +68,9 @@ fn non_read_file_large_result_also_gets_handle() { let _ = std::fs::remove_dir_all(&base); tool_offload::init_base(base.clone()); - let body: String = (1..=1200).map(|i| format!("match {i}: src/foo.rs:{i}\n")).collect(); + // 中性行夹具:不得含 error/panic/.rs: 等错误行信号——错误行保留策略会全量保留 + // 命中行,用信号行做夹具会让「应被压缩」断言先天不成立(测的是普通大结果外置) + let body: String = (1..=1200).map(|i| format!("match {i}: src/foo.txt:{i}\n")).collect(); assert!(body.len() >= 8 * 1024, "夹具须 ≥8KB(句柄追加下限)"); let out = extract_key_info(&body, "grep"); assert!(out.len() < body.len(), "应被压缩"); diff --git a/docs/todo.md b/docs/todo.md index 163e090..82ea3a7 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -353,6 +353,11 @@ ### 附:F2 兜底前移(可选) - `ai_chat_stop` 的心跳 60s stale 判死+emit AiCompleted 兜底只在用户点停止时运行;可在 loop spawn 时自带一份,panic 死 loop 无需用户点停止也能收敛。 +### 🔍 工具结果压缩·错误行洪泛缺陷(2026-10-15 发现,未修) +- **现象**:`extract_key_info_inner` 的错误行保留策略无上限——结果里每个含 `error`/`panic`/`.rs:`/「失败」的行都全量保留并加 `[行 N]` 前缀,grep/rustc 类输出(恰是压缩的主要对象)错误行占多数时输出≥原文,压缩失效且无落盘句柄(`compressed.len() < content.len()` 门不过)。 +- **佐证**:`crates/df-ai/tests/context_offload.rs` 的 `non_read_file_large_result_also_gets_handle` 用 `src/foo.rs:N` 做夹具,先天必挂——该集成测试历来未被 `--lib` 门禁覆盖, until 2026-10-15 全量 workspace 门禁才暴露(夹具已改中性行修绿,生产行为未动)。 +- **修法方向**:错误行保留加封顶(如最多 N 条+「另有 M 条错误行省略」),超限走正常省略段;配套恢复信号行夹具的鉴别力测试。 + # aichat 三路走查增量待办(2026-10-02 深夜) > 来源:上下文管理批收口期 rev-backend/rev-frontend/rev-crates 三路走查(历三次会话重启后续跑完成)。**全文与批次归并建议见 `docs/05-代码审查/aichat三路走查报告-2026-10-02.md`**。以下为可执行登记,开工以现场源码为准。