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

- **生成时间**: 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 |
| v9 | 0.2.2+#M4-post-1+2 `5804bfc` | 9 | 21,171 | 17,301 |

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

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

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

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

### v6→v7

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

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

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

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

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

### v7→v8

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

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

| 目标符号 | 消失对数 |
|---:|---:|
| `run` | 6 |
| `click` | 4 |
| `record` | 4 |
| `mutate` | 3 |
| `field` | 3 |
| `rank` | 3 |
| `key` | 3 |
| `snapshot` | 2 |
| `render` | 2 |
| `normalize` | 2 |
| `git` | 2 |
| `apply` | 2 |
| `flush` | 2 |
| `provider` | 2 |
| `custom_config` | 2 |
| `invalid` | 1 |
| `usage` | 1 |
| `is_word_cursor_modifier` | 1 |
| `cleanup` | 1 |
| `section` | 1 |
| `open_reasoning_detail_pager` | 1 |
| `label` | 1 |
| `flatten` | 1 |
| `minimax_base_url_is_supported_direct` | 1 |
| `rgb` | 1 |
| `is_word` | 1 |
| `is_composer_newline_key` | 1 |
| `body_for` | 1 |
| `worker` | 1 |
| `receipt` | 1 |

### v8→v9

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

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

| 目标符号 | 新增对数 |
|---:|---:|
| `is_word_cursor_modifier` | 1 |
| `open_reasoning_detail_pager` | 1 |
| `is_composer_newline_key` | 1 |
| `handle_composer_alt_word_motion_key` | 1 |
| `open_pager_for_selection` | 1 |
| `jump_to_adjacent_tool_cell` | 1 |
| `open_focused_cell_pager` | 1 |
| `is_forced_submit_key` | 1 |
| `open_pager_for_last_message` | 1 |
| `base_prompt_override_opt_in` | 1 |
| `is_mcp_stale_session_error` | 1 |
| `detail_target_cell_index` | 1 |
| `open_turn_inspector_pager` | 1 |
| `minimax_base_url_is_supported_direct` | 1 |

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

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

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

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

## 5. 判定

- v6→v7(黑名单):−3,437 行,消失目标集中在 Err/tr/write/json/text 等 std/builtin 名 → **进化**(已由 v7 报告抽查确认)
- v7→v8(#M4-post-1):−273 行(89 去重对),消失目标为 pattern 解构局部变量短名 → **进化**(全量排查:80 对误绑修正)
- v8→v9(#M4-post-2):+21 行(14 去重对/19 调用点),全部为 v8 误杀的 guard 内 use 导入真调用恢复 → **回归修复**
- v9 未引入新消失(v9−v8 去重对=0)→ #M4-post-2 修复无副作用
- 召回哨兵 7/7 全部保持(数量逐版不变)

> ⚠️ 差分只说明减少或增加。减少是否=修正、增加是否=新误绑,需对消失/新增边抽样回源码验证。v8 消失边已全量排查(80 修正 + 9 误杀),v9 恢复边已逐条核对。
