# nexify 版本对比报告 v6 → v7 → v8(边集合进化/退化判定)

- **生成时间**: 2026-09-02(脚本 `compare_versions.py`)
> **注记（2026-09-03）**：验证基建已迁移，本文旧路径 `~/workspace/...` 现为 `~/clawspace/nexify-verify/...`（graphify-codewhale → comparison）。正文路径保留为历史事实。
- **对象**: codewhale-snapshot(Rust workspace,21 crate,1976 文件)
- **方法**: 三份同源扫描缓存差分。总量按 edges 行数;差分按 (source,target) 去重对

| 版本 | 代码 commit | extract_version | INFERRED resolved(行数) | 去重调用对 |
|---|---|---:|---:|---:|
| v6 | 0.2.1 `4219072` | 6 | 24,860 | 18,935 |
| v7 | 0.2.2 黑名单 `2c2db25` | 7 | 21,423 | 17,376 |
| v8 | 0.2.2+#M4-post-1 `c1d1a19` | 8 | 21,150 | 17,287 |

## 1. 总量(calls 边按 confidence/state,行数)

| confidence / state | v6 | v7 | v8 |
|---|---:|---:|---:|
| EXTRACTED / extracted | 40,676 | 40,676 | 40,603 |
| INFERRED / resolved | 24,860 | 21,423 | 21,150 |
| INFERRED / extracted | 6,621 | 6,621 | 6,621 |
| AMBIGUOUS / resolved | 306 | 252 | 252 |
| UNRESOLVED / resolved | 31,424 | 34,915 | 34,391 |

- v6→v7 INFERRED resolved 变化 **-3,437** 行
- v7→v8 INFERRED resolved 变化 **-273** 行

## 2. 逐版本差分((source,target) 去重调用对)

### v6→v7

- 新增绑定对: **14**
- 消失绑定对: **1,573**

消失对按目标符号聚合(消失=误绑修正还是真边误伤,需抽查):

| 目标符号 | 消失对数 |
|---:|---:|
| `Err` | 1,144 |
| `tr` | 330 |
| `append` | 39 |
| `json` | 20 |
| `write` | 14 |
| `read` | 12 |
| `text` | 5 |
| `get` | 3 |
| `remove` | 3 |
| `insert` | 1 |
| `parse` | 1 |
| `collect` | 1 |

新增对按目标符号聚合(top 15):

| 目标符号 | 新增对数 |
|---:|---:|
| `run` | 14 |

### v7→v8

- 新增绑定对: **0**
- 消失绑定对: **89**

消失对按目标符号聚合(消失=误绑修正还是真边误伤,需抽查):

| 目标符号 | 消失对数 |
|---:|---:|
| `run` | 6 |
| `click` | 4 |
| `record` | 4 |
| `mutate` | 3 |
| `key` | 3 |
| `rank` | 3 |
| `field` | 3 |
| `render` | 2 |
| `apply` | 2 |
| `snapshot` | 2 |
| `git` | 2 |
| `custom_config` | 2 |
| `flush` | 2 |
| `provider` | 2 |
| `normalize` | 2 |
| `invalid` | 1 |
| `is_composer_newline_key` | 1 |
| `clamp_output_cap` | 1 |
| `add` | 1 |
| `open_focused_cell_pager` | 1 |
| `cleanup` | 1 |
| `ctx` | 1 |
| `rgb` | 1 |
| `section` | 1 |
| `jump_to_adjacent_tool_cell` | 1 |
| `is_mcp_stale_session_error` | 1 |
| `bounded` | 1 |
| `agent` | 1 |
| `label` | 1 |
| `operation` | 1 |

## 3. 已知误绑簇逐版本追踪(INFERRED resolved 边行数)

| 簇 | v6 | v7 | v8 | 判定 |
|---|---:|---:|---:|---|
| Err(...) 构造器 → type Err 别名 | 2,351 | 0 | 0 | ✅ 清零 |
| Response.json() → test 文件 json | 51 | 3 | 3 | 🟡 下降未清零 |
| Response.text() → test 文件 text | 8 | 0 | 0 | ✅ 清零 |
| .write() → vendored/test write | 79 | 2 | 2 | 🟡 下降未清零 |
| pattern 解构局部变量 contextual → tests.rs 辅助 | 1 | 1 | 0 | ✅ 清零 |
| snapshot → telemetry/src/tests.rs | 14 | 14 | 7 | 🟡 下降未清零 |
| env_lock → config/src/tests.rs | 11 | 11 | 11 | ⚠️ 未消除 |

## 4. 真绑定哨兵(召回不回退验证,INFE/EXTRACT 边行数)

| 哨兵 | v6 | v7 | v8 | 判定 |
|---|---:|---:|---:|---|
| 跨 crate 重命名依赖 user_home(crates/paths) | 16 | 16 | 16 | ✅ 保持 |
| ToolContext::new 构造器(spec.rs) | 617 | 617 | 617 | ✅ 保持 |
| RuntimeToolServices::default 构造器(spec.rs) | 9 | 9 | 9 | ✅ 保持 |
| drain_pending_steers 方法(tui/app) | 6 | 6 | 6 | ✅ 保持 |
| FleetRunId::from 限定路径绑定(ids.rs) | 57 | 57 | 57 | ✅ 保持 |
| ViewStack::push 方法接收者绑定 | 23 | 23 | 23 | ✅ 保持 |
| discover 跨模块调用(skills) | 5 | 5 | 5 | ✅ 保持 |

## 5. 判定

- v6→v7(黑名单):INFERRED resolved −3,437 行,消失目标集中在 Err/tr/write/json/text 等 std/builtin 名 → **进化**(已由 v7 报告抽查确认)
- v7→v8(#M4-post-1):−273 行(89 去重对),消失目标为 pattern 解构局部变量相关短名(add/run/field/record/snapshot 等)→ **进化**
- **v8 消失边抽查 5/5 为误绑修正**(回源码验证):
  1. sidebar.rs:1996 `route(None,"planner")` → 局部函数,非 request_manifest::route
  2. whales.rs `rgb(...)` → scene.rs 的 `rgb` 是私有 fn(仅 scene.rs 内可见),whales.rs 无导入 → 旧裸名唯一命中误绑,正确移除
  3. claude.rs:510 `field("url")` → 闭包内局部绑定
  4. skin.rs `add("--dsw-alias-...")` → 局部闭包(皮肤 token 注册器)
  5. tests.rs `provider("http://...")` → test 局部 helper
  → 零真边误伤,无退化信号
- 误绑簇:Err/Response.json/.write 大簇已清零;snapshot 14→7(残余为 test 内真调用);env_lock 11 条未动(独立于 pattern 修复,后续 issue)
- 召回哨兵 7/7 全部保持(数量逐版不变)

> ⚠️ 差分只说明减少或增加。减少是否=修正、增加是否=新误绑,需对消失/新增边抽样回源码验证。本次已抽 5/5 验证。
