v0.8.46

OpenBMB/UltraRAGv0.8.46Jun 23, 2026by safishamsi

AI Summary

Significant performance improvements via trigram query prefiltering and the addition of CUDA support for C++ code extraction. It also resolves phantom duplicate nodes and enhances the skill runbook.

Key Highlights

  • Trigram query prefilter for faster graph search (cutting O(N) scan).
  • Added CUDA support for extracting `.cu`/`.cuh` files via existing C++ grammar.
  • Fixed phantom duplicate nodes from cross-file type annotations.
  • Added a 'graph-health gate' to the skill runbook.

New Features

  • Trigram query prefilter
  • CUDA extraction support
  • Graph-health gate

Full Release Notes

Faster queries, a graph-health gate in the skill runbook, CUDA support, and a batch of extraction/install fixes.

## Performance
- **Trigram query prefilter** — `graphify query`/`path`/`explain` and the MCP query tools now narrow candidates via a trigram index (built once per graph, rebuilt on hot-reload) before the IDF scorer, cutting the previous O(N) scan on large graphs. The prefilter is a strict superset of the exhaustive scorer, so results and ranking are unchanged; short/CJK/low-selectivity queries fall back to the full scan (#1431, thanks @papinto).

## Skill runbook
- **Step 4.5 graph-health gate** — after building the graph, the runbook runs `diagnose_extraction` and surfaces dangling/self-loop/collapsed-edge warnings before labeling (read-only; never aborts). It also **anchors the semantic cache on the scan root** so cache hits survive a non-cwd scan (#1437, thanks @bahcgscateringsa-design).

## Languages
- **CUDA** (`.cu`/`.cuh`) is now extracted via the existing C++ (`tree-sitter-cpp`) grammar — no new dependency. Kernels, host functions, structs, includes and host call edges are captured; `<<<grid, block>>>` launch syntax parses cleanly (#1411).

## Extraction quality
- **No more phantom duplicate nodes from cross-file type annotations.** A class defined once but referenced via type annotations in N files produced 1+N nodes (the extras with the file path baked into the id, e.g. `pkg_a_py_thing`). The cross-file reference now resolves to the single canonical definition — fixed across all six language extractors (#1402, thanks @ZedUserdesign).

## Install & misc fixes
- `graphify install --platform hermes` installs to `%LOCALAPPDATA%\hermes\skills` on Windows (where Hermes scans), not `~/.hermes/skills` (#1403, thanks @SHJordan).
- The opencode plugin's search reminder no longer contains backticks that bash executed as a command substitution on every search (#1413, thanks @WSHAPER).
- `to_obsidian`/`to_canvas` never emit punctuation-only filenames (e.g. `@.md`) that break downstream re-sluggers — they fall back to `unnamed` (#1409, thanks @Mylock51).
- `graphify extract --cargo` exits with a clear error instead of a traceback when `Cargo.toml` is missing/unreadable (#1428, thanks @DhruvTilva).
- Internal: resolved an `F821` in `prs.py` via a `TYPE_CHECKING` import (#1429, thanks @DhruvTilva).