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
Schema v2 exposes rich L3/L4 information — per-callable CFG/CDG/DDG and the interprocedural SDG (param_in/param_out/summary) — but F6 (#244) only exposes it as raw nx graphs the user must hand-walk. This issue adds the "easy to consume" derived layer: a shared program-slice engine and five facade verbs that turn the graphs into citable slice/flow evidence.
Analysis-complete PRIMITIVES only — slices, dataflow reachability, def-use. NO taint/policy layer (sources, sinks, sanitizers, tainted-path search): that is #229 and the 2.1.0 chain's sink_pattern/without_passing_through. No new per-language analysis (the analyzers are pure graph providers). No Cypher-pushdown of traversal (client-side over nx for rc.1; pushdown parallels the chain's #217, later).
ABC data-provider seam on each AnalysisBackend (extending F6's additions): program_graph(callable_uri), sdg_edges(), resolve_location(file,line,col?), source_slice(vertex_uri), callable_of(vertex_uri) — implemented by every Codeanalyzer (local, from cpg) AND every Neo4jBackend (Cypher).
Five facade verbs (identical on all four facades, thin delegates to Engine(self.backend)):
slice_backward, slice_forward, flows_to, def_use, control_deps — signatures per the spec §4.
Polymorphic seed: "file:line[:col]" | "can://…@line:col" | BodyNode, normalized by resolve_vertex.
Capability gating (reuse the epic model): L3 for intra slices/def_use/control_deps, L4 for flows_to/interprocedural. Honest degrade by default (label structural, record gap in explain()), strict=True raises CapabilityError. Java at rc.1 (pre-v2) degrades identically to level-2 — one path, no per-language branch.
Python L3/L4 edge identity must be can:// end-to-end for interprocedural stitching (codeanalyzer-python#98) — gates the Python leg's flows_to quality.
interprocedural=None means "as deep as the level allows" (intra at L3, inter at L4); an explicit True on L3 is a capability miss, never a silently-intra answer.
DEFINITION OF DONE
Engine unit tests on hand-built cpg fixtures assert EXACT expected vertex sets (a backward slice == the hand-computed node set, not "non-empty").
PROBLEM
Schema v2 exposes rich L3/L4 information — per-callable CFG/CDG/DDG and the interprocedural SDG (param_in/param_out/summary) — but F6 (#244) only exposes it as raw nx graphs the user must hand-walk. This issue adds the "easy to consume" derived layer: a shared program-slice engine and five facade verbs that turn the graphs into citable slice/flow evidence.
Design: docs/superpowers/specs/2026-07-14-l3l4-consumption-api-design.md (local).
SCOPE BOUNDARY
Analysis-complete PRIMITIVES only — slices, dataflow reachability, def-use. NO taint/policy layer (sources, sinks, sanitizers, tainted-path search): that is #229 and the 2.1.0 chain's sink_pattern/without_passing_through. No new per-language analysis (the analyzers are pure graph providers). No Cypher-pushdown of traversal (client-side over nx for rc.1; pushdown parallels the chain's #217, later).
GOALS (the contract)
slice_backward, slice_forward, flows_to, def_use, control_deps — signatures per the spec §4.
CAVEATS AND KNOWN RISKS
DEFINITION OF DONE
Part of #238