01 / Problem
GitHub App / Structural Review
PR Impact
A GitHub App that compares dependency graphs across a pull request and reports structural risk where review already happens.
Proof of webhook security, asynchronous analysis, graph comparison, and developer-facing risk communication.
02 / What I built
Built a GitHub App that verifies pull-request webhooks, queues analysis, compares dependency graphs for base and head, computes blast radius and structural changes, and creates or updates a Markdown review comment.
System boundary
How the pieces connect.
The request path stays short while Redis and ARQ own bounded analysis jobs, retries, graph caching, and the longer repository comparison workflow.
- 01GitHub webhook
- 02HMAC verification
- 03Redis / ARQ job
- 04Base-head graph diff
- 05Risk analysis
- 06PR comment
Engineering decision
Developer tools are strongest when analysis appears at the decision point with enough evidence to challenge it.
Tradeoff
Moving analysis out of the webhook request adds Redis and worker deployment complexity, but keeps webhook handling bounded and supports retries.
What happens next
The public roadmap still lists broader provider support, a hosted dashboard, notifications, and custom rules as future work.
Implemented proof
What can be evaluated today.
The repository proves an implemented and tested version 0.1 workflow; it does not claim production adoption or scale.
- 01
Fails closed on invalid webhook signatures outside debug mode.
- 02
Fetches fork-safe pull-request refs and caches base/head dependency graphs.
- 03
Reports blast radius, architecture violations, cycle changes, coupling alerts, and risk.
Source proof
A decision visible in code.
1. Clone both branches (base and head) into temp directories2. Load repo config (.pr-impact.yml) if present3. Build dependency graphs for both using the engine4. Diff the graphs to find structural changes5. Compute blast radius for all changed files
Blast radius is calculated from the base/head graph comparison instead of inferred from changed-line count.
Next case study
DepGraph