# graphify v0.9.46 - Product: graphify (https://whatsnew.fyi/product/graphify) - Vendor: graphify - Date: 2026-08-17 - Version: v0.9.46 - Original notes: https://github.com/Graphify-Labs/graphify/releases/tag/v0.9.46 - Permalink: https://whatsnew.fyi/product/graphify/releases/v0.9.46 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **fixed** — Node-id normalization is now caseless-stable for combining-mark sequences by iterating casefold+NFKC to a fixpoint - **fixed** — Java annotations now emit references edges to their type, including class-literal arguments and annotation-member return types - **fixed** — graphify query treats underscore as a token separator like hyphen, so underscore-spelled queries match hyphenated labels - **fixed** — The post-checkout hook skips its rebuild when HEAD is unchanged, so creating a branch no longer triggers a full graph rebuild - **added** — Markdown nodes now carry a node_kind attribute (page vs heading) so a docs corpus can be filtered by kind - **added** — Leading YAML frontmatter in Markdown files is parsed onto the page node as bounded, sanitized attributes - **fixed** — A hash comment inside Markdown frontmatter is no longer mis-extracted as a heading - **added** — Common Lisp extraction via tree-sitter-commonlisp for .lisp, .cl, .lsp, and .asd files, covering packages, classes, functions, methods, generics, macros, variable definers, and same-file calls - **fixed** — graphify query now prints an honest completion notice when the node set fits the budget but edges push the total over, showing the real size - **fixed** — A .gitignore or .graphifyignore file saved in non-UTF-8 encoding is now decoded with UTF-8-first, then UTF-16 BOM, then host codepage/latin-1, so rules survive intact with a warning - **fixed** — When node dedup merges two nodes, any hyperedge that listed the merged-away node now rewires that member to the survivor instead of dropping it - **fixed** — Pruning a source file now also sweeps the external-import placeholder nodes it strands at degree 0 instead of leaving them to accumulate - **fixed** — When two edges connect the same node pair with different relations, the graph builder keeps the more specific relation instead of letting a generic relation overwrite it ##### 0.9.46 - Fix: node-id normalization is now caseless-stable for combining-mark sequences — `casefold` and NFKC don't commute, so a single pass left `normalize_id(s) != normalize_id(s.casefold())` for inputs like Greek ypogegrammeni followed by a combining accent; normalization now iterates casefold+NFKC to a fixpoint. Letter/digit-bearing ids are unchanged, so existing graphs are not re-keyed. - Fix: Java annotations now emit `references` edges to their type — including class-literal arguments (`@Repeatable(Foo.class)`, `@Uses({A.class, B.class})`) and annotation-member return types — so a container annotation is no longer a disconnected island; string/enum arguments are not mistaken for type references (#2426, thanks @oleksii-tumanov). - Fix: `graphify query` treats `_` as a token separator (like `-`), so an underscore-spelled query (`user_service`) matches a hyphenated label (`user-service`); coverage-scaling keeps the broader tokenization from surfacing unrelated single-token noise (#2473, thanks @nadiadatepe-eng). - Fix: the `post-checkout` hook skips its rebuild when HEAD is unchanged (e.g. `git checkout -b` with no start point), so creating a branch no longer triggers a full graph rebuild (#2421, thanks @nothariharan). - Feature: Markdown nodes now carry a `node_kind` (`page` vs `heading`) attribute so a docs corpus can be filtered by kind, and leading YAML frontmatter is parsed onto the page node as bounded, sanitized attributes; a `#` comment inside frontmatter is no longer mis-extracted as a heading (thanks @evanthomasgelders). Node ids are unchanged, so existing markdown graphs are not re-keyed. - Feature: Common Lisp `.lisp`/`.cl`/`.lsp`/`.asd` extraction via tree-sitter-commonlisp (optional `[commonlisp]` extra) — packages, classes, functions, methods, generics, macros, variable definers, and same-file calls; `open`ed/`:use`d packages resolve cross-file (thanks @fade). - Fix: a `graphify query` whose node set fits the budget but whose edges push the total over now prints an honest "complete answer over budget" notice with the real size, instead of silently returning a payload several times the requested budget (and no longer advises raising the budget, which was the exact trigger); edges are still never dropped from a complete answer (#2784, thanks @AromalBiju1). - Fix: a `.gitignore`/`.graphifyignore` saved in a non-UTF-8 encoding no longer silently drops its rules (which let an explicitly-excluded directory get scanned anyway); the file is decoded UTF-8-first, then by a UTF-16 BOM, then the host codepage/latin-1, so the rule survives intact with a warning instead of being truncated (#2798, thanks @abhay-codes07). - Fix: when node dedup merges two nodes, any hyperedge that listed the merged-away node as a member now rewires that member to the survivor instead of silently dropping it, so a grouping no longer loses participants on dedup (#2805, thanks @abhay-codes07). - Fix: pruning a source file now also sweeps the external-import placeholder nodes it strands at degree 0, instead of leaving them to accumulate in the node count, `GRAPH_REPORT.md`, and exports; genuinely-isolated real nodes (which carry a `source_file`) are never touched (#2807, thanks @abhay-codes07). - Fix: when two edges connect the same node pair with different relations, the graph builder now keeps the more specific relation (`calls`, `imports`, `inherits`, ...) instead of letting a generic `references`/`uses`/`mentions` overwrite it; previously a real `calls` could be downgraded to `references` and then dropped from the call graph (#2803, thanks @abhay-codes07).