v0.9.4

lyogavin/airllmv0.9.4Jul 1, 2026by safishamsi

AI Summary

Introduces indirect call dispatch as a first-class dependency for various languages, fixes incremental update data issues, and improves robustness and error handling.

Key Highlights

  • New `indirect_call` dispatch for call arguments, callbacks, and dispatch tables.
  • Fixed hyperedges from unchanged files no longer being dropped on incremental updates.
  • Fixed deleted files no longer leaving ghost nodes.
  • Added Ruby class inheritance and Groovy `extends`/`implements` edges.
  • Improved error messages for corrupt `graph.json` files.

New Features

  • Indirect call dispatch for arguments, callbacks, assignments, and reflective calls.
  • Ruby and Groovy inheritance edges.
  • Git hooks on Windows/MSYS default to sequential rebuilds.
  • Deterministic hub community labels for no-backend runs.

Full Release Notes

## 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 affected` traverses: 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-style `app.get("/", h)`). Kept as a distinct INFERRED relation so strict `calls` queries 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 `inherits` edges. (#1535)
- Groovy `extends`/`implements` emit `inherits`/`implements` edges. (#1534)

### Robustness & UX
- Corrupt `graph.json` raises 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_action` instead of `Community 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.