# nexify × Zed 跨语料健康/规模测试报告

- **日期**: 2026-09-02
> **注记（2026-09-03）**：验证基建已迁移，本文旧路径 `~/workspace/...` 现为 `~/clawspace/nexify-verify/...`（graphify-codewhale → comparison）。正文路径保留为历史事实。
- **对象**: `~/workspace/zed-snapshot`(zed-industries/zed,commit `8372641`,245 workspace crate,1942 .rs 文件,115M)
- **工具**: nexify release(extract_version=11,#M4-post-1~4 后,commit 8aeafca)
- **性质**: 单语料健康/规模验证(无历史基线,非版本差分);对照 codewhale 21 crate/1,976 文件
- **运行环境**: 同 2C VPS,纯本地 tree-sitter,无 LLM

## 1. 规模与性能

| 指标 | codewhale v11 | Zed | 说明 |
|---|---:|---:|---|
| workspace crate | 21 | 245 | 11.7× |
| 代码文件 | 1,976 | 4,018 | 2× |
| 节点 | 153,640 | 209,822 | 1.37× |
| edges | 223,687 | 308,854 | 1.38× |
| calls 边 | ~103k | 127,110 | — |
| **冷建图** | 33.5s | **89.0s** | 2.7×(crate 数超线性) |
| extract | 26.1s | 48.8s | 1.9× |
| resolve | 7.3s | 40.1s | **5.5×** |
| pending | 128,392 | 241,473 | 1.9× |

**性能判定:resolve 40.1s 相对合理**(pending 1.9× 却耗时 5.5×,超线性来自候选解析在 245 crate 的大库中命中更多同名候选),无异常退化。Zed 全量冷扫 <90s,规模可接受。

## 2. 绑定质量总览

### calls 边按 confidence/state

| confidence/state | codewhale v11 | Zed | Zed 占比 |
|---|---:|---:|---:|
| EXTRACTED / extracted | 40,673 | 30,276 | 23.8% |
| INFERRED / extracted | 6,621 | 13,681 | — |
| INFERRED / resolved | 21,622 | 31,651 | 24.9% |
| AMBIGUOUS / resolved | 252 | **8,104** | 6.4% |
| UNRESOLVED / resolved | 33,953 | 43,398 | 34.1% |

### 跨文件绑定率(核心泛化指标)

| | codewhale v11 | Zed |
|---|---:|---:|
| 跨文件绑定率 | 38.7% | **38.1%** |
| AMBIGUOUS 占比 | 0.5% | **9.7%** |
| UNRESOLVED 占比 | 60.8% | 52.2% |

**✅ 核心结论:跨文件绑定率 38.1% vs codewhale 38.7%——nexify 绑定能力在 Zed 上正常泛化,没有系统性退化。** 差异在构成:Zed 的 AMBIGUOUS 占比是 codewhale 的 20 倍(8,104 条),这是"更诚实"的信号(Zed 代码库同名符号密度高,检测到歧义并弃绑,而非瞎绑)。

## 3. 发现的问题(按严重度)

### 🔴 P1:夹具/假 crate 目录混入绑定图(67 条真误绑)

`tooling/lints/test_fixture/` 下有几个**假 gpui crate**(gpui/gpui_shared_string/render_consumer 的同名假实现,lint 测试用),nexify 把它们当正常 workspace 成员,方法裸名 fallback 把真 gpui 生产代码的调用吸过去:

```
crates/gpui/src/input.rs:152  self.view.update(...) → tooling/lints/test_fixture/gpui/src/lib.rs::Entity::update(假)
```

- `Entity::update/read/downgrade` 33 条、`SharedString::from/new/new_static` 33 条 + 杂项 = **71 条目标为 test_fixture,其中 67 条调用方在生产目录**
- 同类:agent evals fixtures(before.rs 快照,4,140 节点)也有 8 条被生产代码调用
- **根因**:vendored 排除清单(patches/vendor/third_party/vendored)没有 tooling/lints/test_fixture 这类"夹具 crate";夹具与真 crate 同名且方法名撞车
- **修复方向**:workspace_crates 映射时排除 test_fixture/fixtures 类目录,或 fallback 排除路径加该目录

### 🟠 P2:glob re-export 未解析(28 符号 / 4,462 条 UNRESOLVED)

gpui.rs 有 **35+ 条 `pub use module::*;` glob re-export**(UI DSL 聚合模式),re-export 索引(#M4-post-3)只收录显式命名项,glob 项全部漏掉:

```
crates/gpui/src/gpui.rs:105  pub use geometry::*;      // glob
crates/gpui/src/geometry.rs:3736  pub const fn px(...)  // 真定义
调用方 use gpui::{... px ...} → UNRESOLVED
```

- **px 2,516、point 671、size 331、rgb 177、hsla 108、div 763、h_flex 83、v_flex 51…** 合计 28 符号 4,462 条(占 Zed UNRESOLVED 的 ~10%)
- codewhale 无此模式(全显式 re-export)所以未暴露——**这是 Zed 语料发现的新覆盖缺口**
- **修复方向**:re-export 索引支持 glob(`pub use x::*` → 把 x.rs 全部 pub fn 收为该文件的导出符号),resolve 期展开

### 🟡 P3:方法接收者歧义在测试双变体前放弃(8,104 条 AMBIGUOUS)

Zed 测试基建的 `TestAppContext` 与 `VisualTestAppContext` 双变体(gpui 与 gpui_apple 各一套),方法名 executor/update/simulate_keystrokes 等几乎重复:

```
gpui::TestAppContext::executor 978 条 AMBIGUOUS —— 调用点 cx: &mut TestAppContext(显式注解)
```

调用点 `cx` 有**显式类型注解**,本可消歧,但方法接收者解析没用上注解(或注解类型本身也歧义)。978+885+689… 合计 8,104 条。**安全性好(弃绑非错绑),但召回受损**。修复需接收者类型消歧增强(低优先,Zed 特有放大)。

### 🟢 P4:嵌套局部 fn 遮蔽(少量,zlog search 2 条确证)

```rust
// zlog/src/filter.rs — 函数内嵌套 helper
fn compute(...) { 
    fn search<S>(map: &ScopeMap, ...) {...}   // 局部嵌套 fn
    let mut enabled = search(self, scope);    // ← 被绑到 language/buffer_tests.rs::search
}
```

#M4-post-1 处理了 pattern/闭包绑定,没处理**函数体内嵌套 fn 定义**。Zed 上嵌套 helper 常见,codewhale 少。确证 2 条,估计全库个位数~几十条。修复方向:提取时函数体内嵌套 `fn` 加入 local_bindings。

## 4. 已知误绑簇复现检查(全部阴性 ✅)

| 簇(codewhale 曾出现) | Zed 表现 | 判定 |
|---|---:|---|
| Err(...) → type Err 别名 | **0** | ✅ 未复现(黑名单生效) |
| Response.json()/text() TS 误绑 | **0** | ✅ 未复现 |
| 生产 → tests.rs 辅助 | 0(335 条疑似全为测试函数内合法调用,人工核验) | ✅ 未复现 |
| contextual/snapshot/env_lock 类 | 0 | ✅ 未复现 |

**codewhale 修掉的误绑簇在 Zed 上全部没有复现** —— 补丁是普适的,不是 codewhale 特调。

## 5. 真调用绑定质量抽查(✅ 全部正确)

| 调用 | 目标 | 判定 |
|---|---|---|
| `RealFs::new(None, cx.executor())` | fs.rs::RealFs::new | ✅ |
| `rems_from_px(320.)` | ui/styles/units.rs | ✅ 跨 crate 自由函数 |
| `cx.spawn(...)` | app/context.rs::Context::spawn | ✅ |
| `AppState::global(cx)` | workspace.rs | ✅ 跨 crate 关联函数 |
| `MultiBufferRow(2)` | multi_buffer.rs | ✅ 构造器 |
| `score::print_report` | score.rs | ✅ 模块限定 |
| `ThreadMetadataStore::try_global` | thread_metadata_store.rs | ✅ |
| `home_dir()` | util/src/paths.rs | ✅ 同名双 paths crate 消歧正确 |

## 6. 结论

- **泛化能力 ✅**:跨文件绑定率 38.1% ≈ codewhale 38.7%,核心绑定(跨 crate 自由函数/关联函数/构造器/方法接收者)在 245-crate 大库上正常工作;已知误绑簇零复现
- **规模性能 ✅**:89s 冷扫(2.7× codewhale),resolve 40.1s 与库复杂度匹配,无异常
- **三个真问题(按优先级)**:
  1. **P1 夹具目录混入**(67 误绑)——最该修,与 vendored 排除同类,改动小收益确定
  2. **P2 glob re-export 漏绑**(4,462 条)——Zed 特有放大,修了可显著降 UNRESOLVED
  3. **P3 测试双变体歧义**(8,104 条 AMBIGUOUS)——召回损失,安全,低优先
- **一个次要**:P4 嵌套 fn 遮蔽(个位数~几十条)
- 若按 codewhale 相同修复节奏推进:P1→P2→P3,预计 INFERRED resolved 可再增数千,AMBIGUOUS 大降

## 附:产物

- Zed 缓存:`~/workspace/zed-snapshot/.nexify/cache.db`(extract_version=11,89.0s 冷扫)
- 基线归档:未归档(单快照,如需留档可 cp 到 ~/workspace/nexify-cache-baselines/cache-zed-8372641-v11.db)
