Maintainer Radar uses deterministic rules. The score is not truth. It is a routing hint for maintainer attention.
Every analyzed PR includes a score_breakdown list. Each item names the
heuristic, shows its risk_delta, and marks it as a signal or flag. Positive
values raise risk. Negative values lower risk. The final risk score is clamped to
the 0 to 100 range, then reviewability is calculated as 100 - risk.
Each analyzed PR also includes next_step, a deterministic sentence that turns
the selected action and strongest flags into a concrete maintainer move.
Example:
[
{ "label": "CI passed", "risk_delta": -8, "kind": "signal" },
{ "label": "code changed without tests", "risk_delta": 10, "kind": "flag" }
]
Blocker detection intentionally looks for plain maintainer feedback patterns:
This is not sentiment analysis. The goal is to catch comments that usually mean “do not spend full review time until the author follows up.”
Label detection looks for labels that usually mean the PR is not ready for review:
These labels route the PR to author follow-up even when CI is green.
Hydrated GitHub scans also read merge readiness fields such as mergeable,
mergeStateStatus, and requested reviewers.
The test suite includes tests/fixtures/blocker-prs.json to keep blocker
detection concrete. Add new fixture cases when a real maintainer pattern should
be detected.