still being built. the data mining is the part that works today; the services around it are in progress.
AI agents made writing code cheap. reviewing it didn't get any cheaper, so pull requests now pile up waiting for someone to read them.
riffle is a GitHub App that sorts that pile. when a PR opens it gets a score and
lands in one of three bands, review_first, standard, or
senior_recommended, with a note on what to check first. it reorders the queue
and nothing else. it never approves, never merges, and never takes a PR out of
review.
where the signal comes from
a config change can be routine in one repo and the usual cause of incidents in another. generic rules can't tell those apart.
so every repo gets one global model from its first PR, plus a small per-repo layer trained on that repo's own reverts, post-merge CI failures, and hotfixes. the layer starts at zero weight and earns influence as real outcomes pile up.
how it's split
four services, each one where the failure mode changes:
- intake (Go) checks the webhook, drops duplicates, queues it, and answers within GitHub's 10 seconds. it must never be slow.
- scorer (Python) extracts features and runs the models. a score must never be lost; if scoring fails, the PR still shows up, unranked and flagged.
- explainer (Python) turns the score into a sentence. it's allowed to fail. an optional LLM can phrase it, but the LLM is never on the correctness path.
- app (TypeScript) is the GitHub App and the dashboard.
it's self-hosted, and nothing leaves your setup unless you opt in.