graphify v0.9.44

v0.9.44
Added 2
  • graphify hook install reads a committed .graphifyrc (viz_node_limit=<int>) and bakes the visualization node limit into the generated git hooks, so a project-wide limit is shared via version control and survives hook regeneration
  • hook status reports the baked visualization node limit from .graphifyrc with support for ${GRAPHIFY_VIZ_NODE_LIMIT:-<n>} default and graceful degradation on malformed .graphifyrc
Fixed 10
  • graphify install now writes the CLAUDE.md registration into $CLAUDE_CONFIG_DIR when that env var relocates the Claude profile, instead of always mutating the default ~/.claude/CLAUDE.md
  • JS/TS inline or nested function expressions including generator function expressions no longer fabricate an INFERRED indirect_call when one of their parameters or locals shares a name with an unrelated callable
  • a git-tracked file that also matches a .gitignore pattern is no longer dropped from the corpus, matching git's behavior of never un-tracking such a file
  • git ls-files probe is skipped entirely when no .gitignore is in play to avoid overhead for ordinary corpora
  • doctest and Catch2 string-named test cases are recovered as callable nodes contained by the file instead of being dropped as ERROR nodes
  • a punctuation-only test name gets a distinct line-positional id instead of collapsing onto the file-stem id
0.9.44
  • Feature: graphify hook install reads a committed .graphifyrc (viz_node_limit=<int>) and bakes the visualization node limit into the generated git hooks, so a project-wide limit is shared via version control and survives hook regeneration; hook status reports it (#2760, thanks @hopstreax). The baked value uses a ${GRAPHIFY_VIZ_NODE_LIMIT:-<n>} default so an explicit per-run env var still wins, and hook status degrades gracefully on a malformed .graphifyrc.
  • Fix: graphify install (Claude always-on) now writes the CLAUDE.md registration into $CLAUDE_CONFIG_DIR when that env var relocates the Claude profile, instead of always mutating the default ~/.claude/CLAUDE.md (part of #2694, thanks @AromalBiju1).
  • Fix: a JS/TS inline or nested function expression — including a generator function expression (function*(k){…}) — no longer fabricates an INFERRED indirect_call when one of its parameters/locals shares a name with an unrelated callable; the expression's own bindings now shadow the name (#2752, thanks @imagineers-tyler), completing the shadow family alongside catch/arrow/loop/external-import (#2757).
  • Fix: a git-tracked file that also matches a .gitignore pattern (a committed file later added to .gitignore, or a force-added one) is no longer dropped from the corpus, matching git's own behavior of never un-tracking such a file; .graphifyignore/--exclude stay authoritative and a non-git corpus is unaffected (#2759, thanks @NithishKumar04). The git ls-files probe is skipped entirely when no .gitignore is in play, so ordinary corpora pay nothing for it.
  • Fix: doctest/Catch2 string-named test cases (TEST_CASE("..."), SCENARIO, TEST_CASE_TEMPLATE), which tree-sitter-cpp drops as ERROR nodes, are recovered as callable nodes contained by the file (#2594, thanks @ousamabenyounes); a punctuation-only test name gets a distinct line-positional id instead of collapsing onto the file-stem id.
  • Fix: graphify affected resolves an absolute-path seed against the repo root derived from the graph's own location instead of the current working directory, so a blast-radius query with an absolute seed run from anywhere (an editor, a script) no longer silently returns nothing; a seed outside the root still misses cleanly (#2706, thanks @ousamabenyounes).
  • Fix: a lazy CommonJS require(...) inside a function body (the idiom for breaking circular dependencies) now emits the same imports_from/imports dependency edges as a top-level require, attributed to the enclosing function, instead of being silently dropped; a dynamic require(variable) is still skipped (#2700, thanks @rajanpanth).
  • Fix: a JS/TS identifier bound by an import whose target resolves outside the scanned corpus (e.g. a lucide-react icon) is now shadowed, so using it as a value no longer fabricates an INFERRED indirect_call onto an unrelated same-named callable elsewhere in the corpus; a relative/in-corpus import still resolves to its real target (#2757, thanks @phudayyy).
  • Fix: an OCaml qualified call M.f to an external module (one not defined in the same file, e.g. Hardcaml's Reg_spec.create) no longer binds to a same-named local let f — which produced a false calls edge and, when the caller was that local f, a f -> f self-loop. External qualified calls are kept as a distinct target labelled by the full path; unqualified calls and calls into a locally-defined module still resolve locally, and cross-file Geo.area still collapses onto another file's area.
View original

Upgraded? How did it go?

Discussion