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
- graphify affected resolves an absolute-path seed against the repo root derived from the graph's own location instead of the current working directory
- a lazy CommonJS require inside a function body now emits the same imports_from and imports dependency edges as a top-level require, attributed to the enclosing function
- a JS/TS identifier bound by an import whose target resolves outside the scanned corpus 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
- an OCaml qualified call to an external module no longer binds to a same-named local let binding, which produced a false calls edge and self-loops
0.9.44
- Feature:
graphify hook installreads 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 statusreports it (#2760, thanks @hopstreax). The baked value uses a${GRAPHIFY_VIZ_NODE_LIMIT:-<n>}default so an explicit per-run env var still wins, andhook statusdegrades gracefully on a malformed.graphifyrc. - Fix:
graphify install(Claude always-on) now writes the CLAUDE.md registration into$CLAUDE_CONFIG_DIRwhen 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 INFERREDindirect_callwhen 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
.gitignorepattern (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/--excludestay authoritative and a non-git corpus is unaffected (#2759, thanks @NithishKumar04). Thegit ls-filesprobe is skipped entirely when no.gitignoreis 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 affectedresolves 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 sameimports_from/importsdependency edges as a top-level require, attributed to the enclosing function, instead of being silently dropped; a dynamicrequire(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-reacticon) is now shadowed, so using it as a value no longer fabricates an INFERREDindirect_callonto 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.fto an external module (one not defined in the same file, e.g. Hardcaml'sReg_spec.create) no longer binds to a same-named locallet f— which produced a falsecallsedge and, when the caller was that localf, af -> fself-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-fileGeo.areastill collapses onto another file'sarea.