@@ -104,12 +104,9 @@ For the optional **live Neo4j push** (`--emit neo4j --neo4j-uri …`), install t
104104pip install 'codeanalyzer-python[neo4j]'
105105```
106106
107- For the **Scalpel-backed points-to oracle** at level 4, install the `scalpel` extra. It is optional:
108- when it is absent, level 4 automatically falls back to the built-in type-based oracle.
109-
110- ```sh
111- pip install 'codeanalyzer-python[scalpel]'
112- ```
107+ The **Scalpel-backed points-to oracle** at level 4 is vendored and built in — no extra install
108+ required. If Scalpel cannot resolve a construct, level 4 automatically falls back to the built-in
109+ type-based oracle.
113110
114111### Install via shell script
115112
@@ -529,11 +526,12 @@ symbol-table signature by construction
529526- **Points-to oracle (level 4):** the **Scalpel** may-alias oracle — `ScalpelAliasOracle`
530527 (`codeanalyzer/dataflow/scalpel_oracle.py`) — consumes Scalpel's SSA copy/const facts to answer
531528 `may_alias(path_a, path_b)`, adding the alias-aware DDG edges (`prov: ["points-to"]`) and the
532- interprocedural summaries. `python-scalpel` is an **optional dependency**
533- (`pip install 'codeanalyzer-python[scalpel]'`); when it is absent or cannot resolve a construct,
534- the analyzer automatically falls back to the built-in `TypeBasedAliasOracle` (Jedi-inferred types;
535- unknown types conservatively alias), keeping the `may_alias` interface total. Call dispatch comes
536- from the merged Jedi(+PyCG) call graph, treated as a frozen oracle.
529+ interprocedural summaries. Scalpel is **vendored** — a `typed_ast`-free slice built into the
530+ package under `codeanalyzer/dataflow/scalpel/` — so it is the **default** level-4 oracle with no
531+ external dependency to install; the analyzer falls back to the built-in `TypeBasedAliasOracle`
532+ (Jedi-inferred types; unknown types conservatively alias) only when Scalpel can't resolve a
533+ construct or a per-callable build fails, keeping the `may_alias` interface total. Call dispatch
534+ comes from the merged Jedi(+PyCG) call graph, treated as a frozen oracle.
537535- **Summaries:** relational formal-in → formal-out flows composed bottom-up over the Tarjan SCC
538536 condensation of the call graph, a monotone fixpoint within SCCs; globals ride as extra formals,
539537 closure captures bind at definition sites.
0 commit comments