Skip to content

v2 Stage 4: L4 interprocedural SDG + Scalpel oracle #74

Description

@rahlk

Part of #69.

Stage 4 — L4 interprocedural SDG + Scalpel oracle

Branch: feat/v2-stage4-l4

Deliverables:

  • dataflow/scalpel_oracle.pyScalpelAliasOracle implementing the may_alias(p1, p2) contract (per the Stage 0 record); oracle selection: Scalpel primary, TypeBasedAliasOracle fallback (logged when it falls back).
  • Emit synthetic param vertices into body (@formal_in/out, …/actual_in/out); summary edges on the callable; param_in/param_out at application scope; semantic DDG (prov:["points-to"]) as the delta the oracle adds beyond L3.
  • CLI: -a max 3→4; --graphs sdg requires -a 4.
  • Neo4j: param vertices ride PyCFGNode; PY_PARAM_IN/OUT, PY_SUMMARY.
  • pyproject.toml: add [project.optional-dependencies] scalpel.
  • Migrate test/test_dataflow_sdg.py, test/test_dataflow_emission.py.

Files: dataflow/{scalpel_oracle,alias,builder,sdg,summaries}.py, __main__.py, neo4j/project.py, pyproject.toml, SDG tests.

Gate: no dangling SDG endpoints; PARAM_IN/OUT arity matches; a summary edge exists for a known transitive flow in the fixture; full superset L1 ⊆ … ⊆ L4; L4 gate runs against the Scalpel oracle (monotonic widening only).

Expand into full bite-sized tasks with superpowers:writing-plans at stage start.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions