Patch release over 0.9.0 — node-ID hardening, incremental-update correctness, rate-limit resilience, and Java extraction. All non-breaking; no re-migration.
- Fix: rate-limited (HTTP 429) extraction chunks are now retried instead of dropped (#1523, thanks @bercedev). The provider SDKs back off and honor
Retry-After, but the SDK default of 2 retries was too low for strict per-org concurrency/RPM caps (e.g. Moonshot/kimi), so a parallelextract429'd, each chunk loggedchunk N failed, and was silently lost (incomplete graph + console spam). The OpenAI-compatible, Azure, and Anthropic clients are now built with a highermax_retries(default 6, override viaGRAPHIFY_MAX_RETRIES). For very tight accounts,--max-concurrency 1further reduces the concurrency that triggers org-level limits. - Fix:
graphify updatenow prunes the edges a re-extracted file no longer produces (#1521, thanks @UltronOfSpace). Old edges were preserved by endpoint-node membership alone, so a deleted import's edge survived forever as long as both endpoints still existed — driving phantom circular-dependency findings (and--forcedidn't help). Edges owned by a re-extracted file (source_file) are dropped before merging the fresh extraction; cross-file edges that merely point at the file are untouched. - Fix: residual node-ID collisions after the 0.9.0 full-path change (#1522, thanks @sub4biz).
normalize_idcollapses every separator to_, so distinct paths that differ only by a separator-vs-punctuation swap (foo/bar_baz.pyvsfoo_bar/baz.py) still merged. Colliders are now salted with a short stable path hash so they stay distinct; non-colliding IDs are byte-identical to 0.9.0 (no re-migration). - Fix: Java record component types now emit
referencesedges (#1519, thanks @oleksii-tumanov) — a record's data dependencies (record Order(Payload p, List<Item> items, …)) were invisible; primitives and the record's own type parameters are skipped. - Fix: same-label cross-file imported-type stubs now stay distinct in the six dedicated extractors too — Julia, Fortran, Go, Rust, PowerShell, ObjC (#1515, thanks @TPAteeq). The #1462 disambiguation previously only covered the generic extractor, so e.g. two Go files importing the same
ext.Widgetcollapsed into one conflated node; they're now kept distinct (whilesource_filestays empty so the #1402 rewire onto a real definition is unchanged). - Fix: Java type parameters no longer emit spurious
referencesedges (#1518, thanks @oleksii-tumanov). The generic-parent support (#1511) created a stray edge/stub for the bareTinclass Box<T> extends Container<T>; the extractor now collects in-scope type-parameter names (class/interface/record/method/constructor, incl. bounded/multiple) and skips them, while keeping every real type and theinherits/implementsedge to the base. - Fix: the internal
origin_filedisambiguation field (#1462) is no longer serialized into graph.json, where it had shipped (in 0.9.0) as an absolute, machine-specific path — it is dropped once the colliding-id pass consumes it, keeping output portable (#1516, thanks @TPAteeq; cf. #555, #932)._originstays (the incremental watcher needs it, #1116).