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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions