conflictcast

GitHub-native merge risk detection

See pull-request collisions before they turn into rebases, queue stalls, and release churn.

conflictcast is a self-hosted GitHub App that compares every open pull request, spots shared files and overlapping hunks, and posts risk signals inside the place your team already works: the PR itself.

conflictcast replay showing a high-risk PR pair, emitted GitHub checks, and comment excerpt
One replay, one signal: open PRs compared before merge-time surprises.

Signals

Shift conflict detection from “merge time” to “PR open time.”

The win is not abstract. Teams stop discovering risky overlap only after the branch goes stale. conflictcast moves that signal earlier, while the author still remembers the change and the fix is still cheap.

Checks for the fast scan

Post a visible risk grade on the head commit so reviewers see trouble before merging.

Comments for context

Link the conflicting PR pair directly in the thread instead of hiding it in a side system.

Hunk escalation

Start with shared files, then move to overlapping line ranges when the repo needs more precision.

Flow

One webhook, open PR comparisons, early warning.

conflictcast listens to pull-request events, fetches open diffs, compares them pairwise, and writes the result back as checks and comments. No merge queue product required.

01

A pull request opens or updates.

02

conflictcast inspects every currently open PR in the repository.

03

File overlap escalates to line overlap when configured.

04

GitHub gets a check run and optional PR comment with the risk signal.

Deploy

Install it where your team already ships.

The repo keeps deployment intentionally small: create a GitHub App, point the webhook at the service, and run the app with Docker or plain Node.

docker build -t conflictcast .
docker run -p 3000:3000 \
  -e APP_ID=... \
  -e PRIVATE_KEY="$(cat private-key.pem)" \
  -e WEBHOOK_SECRET=... \
  conflictcast
.conflictcast.yml

threshold: line
commentOnLow: false
failCheck: false
maxOpenPRsToAnalyze: 50