Extra (not scored, as planned): a real codebase. requests 2.32.3 source from PyPI (sha256 55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760), folder src/requests (18 files). 2026-10-21 14:05-14:06 (UTC+8). run 1: [graphify extract] wrote extra/r1/graphify-out/graph.json: 573 nodes, 1070 edges, 48 communities run 2: [graphify extract] wrote extra/r2/graphify-out/graph.json: 573 nodes, 1070 edges, 48 communities Wall time per extraction: 1,092 ms and 1,006 ms (8 vCPU). graph.json identical across the 2 runs. Spot checks of call chains we know from the requests source (api.get -> api.request -> Session.request -> Session.send -> adapter.send): $ graphify path api_get api_request Shortest path (1 hops): get() --calls [EXTRACTED]--> request() [exit 0] $ graphify path api_request sessions_session_request warning: target match was ambiguous (top score 456.395, runner-up 456.395) Shortest path (1 hops): request() --calls [EXTRACTED]--> Session [exit 0] $ graphify path sessions_session_request sessions_session_send 'sessions_session_request' and 'sessions_session_send' both resolved to the same node 'sessions_session_f7f199'. Use a more specific label or the exact node ID. [exit 3] $ graphify path sessions_session_request sessions_session_prepare_request 'sessions_session_request' and 'sessions_session_prepare_request' both resolved to the same node 'sessions_session_f7f199'. Use a more specific label or the exact node ID. [exit 3] $ graphify path api_request sessions_session_f7f199_request Shortest path (1 hops): request() --calls [INFERRED]--> .request() [exit 0] $ graphify path sessions_session_f7f199_request sessions_session_f7f199_send Shortest path (1 hops): .request() --calls [EXTRACTED]--> .send() [exit 0] $ graphify path sessions_session_f7f199_send adapters_httpadapter_send No directed path found between 'sessions_session_f7f199_send' and 'adapters_httpadapter_send'. Re-run with --undirected to search ignoring edge direction. [exit 0] $ graphify explain "Session.request" No node matching 'Session.request' found. [exit 4] $ graphify explain "Session.send" No node matching 'Session.send' found. [exit 4] $ graphify explain "sessions.py::request()" Node: .request() ID: sessions_session_f7f199_request Source: sessions.py L500 Type: code Community: 4 [exit 0] $ graphify explain "sessions.py::.request()" Node: .request() ID: sessions_session_f7f199_request Source: sessions.py L500 Type: code Community: 4 [exit 0] $ graphify explain "send" Ambiguous: 'send' matches 2 nodes in different files. adapters.py id: adapters_httpadapter_send sessions.py id: sessions_session_f7f199_send [exit 3] Reading: - get() -> request() found (EXTRACTED); request() -> Session.request() found, tagged INFERRED (it is 'with sessions.Session() as session: return session.request(...)'); Session.request() -> Session.send() found (EXTRACTED). - Session.send() -> HTTPAdapter.send() not found: the adapter comes from self.get_adapter() at run time; a static AST graph cannot see it (send() -> get_adapter() is in the graph). - Name lookup is uneven: 'Session.request' -> explain says no node (exit 4), while path resolves 'Session.request' and 'Session.send' both to the Session class and refuses (exit 3). - One case contradicts 'refused rather than guessed': path api_request sessions_session_request (a node id that does not exist) printed 'warning: target match was ambiguous (top score 456.395, runner-up 456.395)' and still answered with a path to the Session class, exit 0. With exact names or path::symbol (e.g. sessions.py::request()) lookups were correct.