mirror of
https://github.com/safishamsi/graphify.git
synced 2026-07-16 20:37:08 +00:00
c390456c6c
Cross-class qualified static calls like `CustomerTaskActions.approve(...)` did not produce an EXTRACTED `calls` edge. Two compounding causes: 1. The shared cross-file pass skips all member calls (the #543/#1219 god-node guard against bare `obj.method()` name collisions), and there was no Python receiver-based resolver to recover the qualified ones. 2. When the called method shared its name with an in-file node — e.g. a viewset action `approve()` delegating to a service `Service.approve()` — the in-file bare-name lookup matched the caller's own node (tgt == caller), so the call was silently dropped before any raw_call was recorded. Fix: capture a simple-identifier receiver in the call walk (new `call_accessor_object_field`, set to `object` for Python), defer capitalized- receiver member calls to a new `_resolve_python_member_calls` pass (mirroring the Swift resolver), and emit an EXTRACTED edge only when the receiver resolves to exactly one class that owns the method (single-definition god-node guard). Instance/module calls (`self.x()`, `obj.x()`, lowercase receivers) are unaffected. Tests: cross-class resolution, the same-method-name collision shape from the issue, instance-call non-over-connection, and the ambiguous-class guard. Full suite 2337 passed; skillgen --check clean; ruff clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>