graphify 0.9.4
Published to PyPI: pip install -U graphifyy==0.9.4
Blast-radius / call-graph
- indirect_call dispatch — a function referenced by name is now a first-class dependency
graphify affectedtraverses: call arguments (submit(fn),Thread(target=fn),map(fn, xs)), cross-file/imported callbacks, dispatch tables (ROUTES = {"x": fn},[a, b]), assignment/return aliases (cb = fn,return fn),getattr(obj, "name")reflective dispatch, and JS/TS (call args, object/array tables, Express-styleapp.get("/", h)). Kept as a distinct INFERRED relation so strictcallsqueries stay precise. (#1565, #1566, #1569, #1575)
Incremental --update data fixes
- Hyperedges from unchanged files are no longer dropped on every incremental update. (#1574)
- Deleted files no longer leave ghost nodes — prune matching relativizes absolute paths against the scan root (with symlinked-root hardening) even when a caller omits
root. (#1571)
Language coverage
- Ruby class inheritance emits
inheritsedges. (#1535) - Groovy
extends/implementsemitinherits/implementsedges. (#1534)
Robustness & UX
- Corrupt
graph.jsonraises a clear, actionable error instead of a traceback. (#1537/#1536) - Cross-chunk node-ID collisions warn (naming both files) instead of silently dropping a node. (#1508/#1504)
- Skill-version mismatch warning is direction-aware — a newer-than-package skill is told to upgrade the package, not to run
install(which would downgrade it). (#1568) - Deterministic hub community labels: no-backend runs read
auth/log_actioninstead ofCommunity 70. (#1576) - Git hooks on Windows/MSYS default to sequential rebuilds. (#1554)
Thanks to @sheik-hiiobd, @Synvoya, @socar-tender, @goodjira, @TPAteeq, @guyoron1, @nuthalapativarun, @matiasduartee for reports and contributions.