Skip to content

Project Structure

A short tour of the repository so you know where to look.

KMP-IMPACT/
├── src/
│   └── kmp_impact_analyzer/
│       ├── cli.py                  # Click entry points
│       ├── config.py               # AnalysisConfig
│       ├── contracts.py            # Pydantic v2 cross-phase models
│       ├── github_version_change.py
│       ├── pipeline.py             # run_pipeline()
│       ├── phase1_shadow/          # before/ + after/ shadow copies
│       ├── phase2_static/          # parser, symbol graph, BFS, source-set tagging
│       ├── phase3_dynamic/         # DroidBot wrapper + UTG diff
│       ├── phase4_consolidate/     # merge + risk label
│       ├── phase5_visualize/       # CodeCharta exporters
│       ├── reporting/              # HTML report generator
│       ├── compat/                 # stack compatibility helpers
│       ├── evaluation/             # ground-truth comparison
│       └── utils/                  # logging, JSON helpers
├── tests/                          # pytest suite + fixtures
├── tools/                          # auxiliary scripts (ksp dump, …)
├── gradle-init/                    # Gradle init script used by Phase 2
├── docs/                           # this MkDocs Material site
├── examples/
│   └── github-action/              # drop-in workflow + Dependabot config
├── pyproject.toml                  # package metadata + dev dependencies
├── README.md
├── CHANGELOG.md
├── CONTRIBUTING.md
└── LICENSE

Where each phase lives

Phase Module
1 — Shadow build src/kmp_impact_analyzer/phase1_shadow/
2 — Static analysis src/kmp_impact_analyzer/phase2_static/
3 — Dynamic analysis src/kmp_impact_analyzer/phase3_dynamic/
4 — Consolidation src/kmp_impact_analyzer/phase4_consolidate/
5 — Visualization src/kmp_impact_analyzer/phase5_visualize/

The data contracts that travel between phases live in src/kmp_impact_analyzer/contracts.py. See Reference → Data Contracts for the field-by-field documentation.

Output layout

A successful run produces:

output/
├── phase1/{before,after,manifest.json}
├── phase2/{impact_graph.json, symbol_index.json}
├── phase3/{before.utg, after.utg, ui_regressions.json}
├── phase4/consolidated.json
├── phase5/{impact.cc.json, before.cc.json, after.cc.json}
└── report/{index.html, summary.json, summary.md}

Every phase reads the previous phase's JSON and emits its own under output/phaseN/. You can re-run a single phase by pointing the CLI at an existing output/ directory.