|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## v0.11.1 — 12-tool accuracy audit: 1 critical bugfix + 5 precision improvements |
| 4 | + |
| 5 | +Post-audit fixes for tool output correctness. All changes are additive/tightening — |
| 6 | +no consumer schema breakage. |
| 7 | + |
| 8 | +### Fixes |
| 9 | + |
| 10 | +1. **`find_references` — critical bugfix for exact-name resolution.** |
| 11 | + `resolve_fuzzy_name` was matching substrings before exact names, so |
| 12 | + `find_references("handle_tool")` falsely reported ambiguity with |
| 13 | + `handle_tools_list` / `handle_tools_call`. Now exact-name matches win first; |
| 14 | + same-name-in-multiple-files still produces `Ambiguous` but scoped to exact |
| 15 | + matches only. Same fix benefits `impact_analysis` and `get_call_graph` |
| 16 | + fuzzy-fallback paths. |
| 17 | + |
| 18 | +2. **Centralized truncation keeps arrays homogeneous.** The |
| 19 | + `centralized_compress` pipeline used to splice a string sentinel |
| 20 | + (`"... [N items truncated]"`) into the middle of object arrays, breaking |
| 21 | + type consistency for strict JSON consumers and hiding how much was dropped. |
| 22 | + Arrays now truncate silently to `first-10 + last-5` (15 homogeneous items), |
| 23 | + and a new `_array_truncations: {<field>: {original, kept}}` sibling records |
| 24 | + the true pre-truncation length so callers can reconcile `count`/`total` |
| 25 | + siblings against what was actually returned. |
| 26 | + |
| 27 | +3. **`project_map` schema sharpened.** |
| 28 | + - `hot_functions` SQL tightened to `n.type IN ('function','method')` so |
| 29 | + structs/classes no longer leak into the "hot functions" bucket. |
| 30 | + - `entry_points[].kind` added: `"main"` for program entry points, `"http_route"` |
| 31 | + for framework-registered handlers. Lets LLMs skip `main` when scanning the |
| 32 | + HTTP surface without sniffing the `route` string. |
| 33 | + |
| 34 | +4. **`dependency_graph` filters the `<external>` sentinel.** The synthetic |
| 35 | + bucket for unresolved imports now no longer surfaces as a fake file dependency. |
| 36 | + |
| 37 | +5. **`find_similar_code` reports cutoff-driven shortfalls.** When |
| 38 | + `max_distance` drops candidates below `top_k`, the response now carries |
| 39 | + `cutoff_applied: true`, `cutoff_dropped: N`, and a `hint` suggesting the |
| 40 | + user widen `max_distance`. Also echoes `top_k` and `max_distance` in every |
| 41 | + response for transparency. |
| 42 | + |
| 43 | +6. **`impact_analysis` on types returns `risk_level: "UNKNOWN"`.** When the |
| 44 | + target is a struct/class/enum/interface/type_alias and the call graph finds |
| 45 | + zero callers, the risk level is now `UNKNOWN` instead of `LOW` — so LLMs |
| 46 | + don't mistake "call graph can't see type usage" for "no one uses this". |
| 47 | + The existing type_warning still explains why and points to |
| 48 | + `semantic_code_search` for broader coverage. |
| 49 | + |
| 50 | +### Test coverage |
| 51 | + |
| 52 | +- +2 unit tests in `src/mcp/server/helpers.rs` (truncation homogeneity, |
| 53 | + no-op when arrays < 20). |
| 54 | +- +6 integration tests in `tests/integration.rs` covering each fix above. |
| 55 | +- Full suite: lib 221 + integration 41 + cli_e2e 50 + parser 19 + plugin 6 + |
| 56 | + hardening 6 = 343 passed, clippy clean. |
| 57 | + |
3 | 58 | ## v0.11.0 — auto-refresh stale decision table on plugin upgrade |
4 | 59 |
|
5 | 60 | ### Migration note |
|
0 commit comments