You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Reachability API: forward reachability (given a source, find all reachable sinks) #171
Returning a {sink: distance} map (rather than a bare set) keeps it cheap to rank/triage; a convenience returning just the set is fine too.
Semantics
All t such that source -CALLS*1..max_depth-> t, intersected with sinks when provided.
Backing implementations
Neo4j:
MATCH (s:Symbol{signature:$src})-[:CALLS*1..]->(t:Symbol)
WHERE $sinksISNULLORt.signatureIN $sinksRETURNDISTINCTt.signatureASsink, min(length( ... )) ASdist
(use a bounded *1..$depth when max_depth is set; include_external=false adds AND NOT t:External).
In-memory (NetworkX): nx.descendants(G, source) (optionally nx.single_source_shortest_path_length(G, source, cutoff=max_depth) to get distances), intersected with sinks.
Example use
From an entrypoint/route handler, list the dangerous library calls it can reach (node:child_process.exec, fs.writeFile, …) — i.e. the attack surface of that entry.
Acceptance criteria
Method on the backend contract + façade, implemented for the Neo4j backend and the in-memory backend, with matching semantics.
sinks=None, explicit sinks set, max_depth, and include_external all honored.
Distances (or at least membership) verified against a known fixture where the source→sink paths are hand-checked.
Truncation (depth bound hit) is observable, not silent.
Consolidated 2026-07-09 into #215: reachability (forward/reverse/path witnesses) ships once, as the query core's reachable_to/paths() verbs on the 2.1.0 fluent chain, per the Epic B design (see #155). Building it separately on the legacy surface was descoped.
Activity
rahlk commentedon Jul 14, 2026
Consolidated 2026-07-09 into #215: reachability (forward/reverse/path witnesses) ships once, as the query core's reachable_to/paths() verbs on the 2.1.0 fluent chain, per the Epic B design (see #155). Building it separately on the legacy surface was descoped.