v0.8.7

Graphify-Labs/graphifyv0.8.7May 16, 2026by safishamsi

AI Summary

Focuses on query accuracy, C++ extraction improvements, and deduplication fixes to reduce noise and improve graph structure.

Key Highlights

  • Improved query scoring with IDF weighting and dynamic K seeds to prioritize rare identifiers.
  • C++ extraction fixes: class data members now create nodes, include edges resolve to full paths.
  • Deduplication fix prevents cross-file generic labels (like 'handle' or 'init') from collapsing into artificial god nodes.

New Features

  • Enhanced query scoring algorithm
  • Improved C++ extraction logic
  • Fixed deduplication cross-file handling

Full Release Notes

## What's fixed

### Query scoring (#897)
- **IDF weighting** — common terms like `error` or `handle` that match dozens of nodes are down-weighted, so a rare identifier like `FooBarService` ranks first and BFS expands from the right starting point
- **Dynamic K seeds** — when one match dominates (>80% score gap vs the next candidate), graphify picks one seed instead of always three; noise nodes no longer consume BFS slots alongside the real target
- **Actionable truncation** — the truncation message now tells Claude what to do (`get_node` or add a `context_filter`) rather than just reporting truncation

### C++ extraction (#898)
- Class data members (`int x;`, `static const int MAX = 100;`) are now extracted as nodes with `defines` edges from the parent class — the previous `field_declaration` branch was silently a no-op due to a wrong child type filter
- `_get_cpp_func_name` now handles `field_identifier`, `destructor_name`, and `operator_name` node types

### C/C++ include edges (#899)
- Quoted `#include "path/to/file.h"` edges now resolve relative to the including file and use the full resolved path as the target node ID — matching what extraction creates for the included file. Previously all include edges dangled with a basename-only ID and were silently dropped.

### Dedup (#895)
- Pass 1 now partitions same-label groups by source file before merging — nodes with generic labels (`handle`, `init`, `run`) from different files no longer collapse into artificial god nodes; cross-file matches fall through to Pass 2 fuzzy
- `exact_merges` counter now reports only merges actually performed

## Upgrade

```bash
uvx graphifyy@0.8.7 install
# or
pip install --upgrade graphifyy
```