PR problem router
Every 15 minutes Omniscio reads the open pull requests, records each one's state (ready, behind, conflicting, red checks, held by the auto-lander, stale, unknown, draft), and tells one live agent about each problem, once per problem: the session that owns the branch, the author's agent lane through Remote Sync, the Remote Sync session, or your inbox. With no live agent it starts at most ten fixer sessions a day. GET /pr-problems answers "what needs landing" at any time.
What it does
- Every 15 minutes it reads the open pull requests on the tracked repository and gives each one a class.
- A problem class is one of: held by the auto-lander, red checks, conflicting, a PR Merge Queue review lane, or stale (no update for 14 days).
- A pull request whose base branch is not master is tracked as not-master and never told to anyone.
- Everything else is ready, behind, draft, or unknown. Ready means GitHub measured the PR as clean. Unknown means GitHub has not finished measuring it yet. Unknown is never treated as a problem. Each run asks GitHub about up to 100 unmeasured PRs, so the unknown count shrinks run by run.
- Each problem is told once per pull request per class. It is told again only when the class changes, or when the problem clears and comes back.
Who gets told
- A live session on this computer that owns the PR's branch, or that opened the PR.
- The author's own agent lane. The message goes to the Remote Sync session, which passes it on over the lane. A problem already told to Remote Sync is passed on once more this way when the author's lane learns their GitHub login later.
- The Remote Sync session (Remote Sync Foreman #5), for another developer's pull request.
- When no agent is live, it starts one fixer session for that problem. There are at most ten a day, and never two for the same PR and class. Past the cap, the problem goes to one inbox card.
Each message names the exact problem (the failing check, the conflicting files, the hold reason) and the one road that clears it. An agent gets at most one message an hour, carrying at most 25 problems.
Asking what needs landing
GET /pr-problemsreturns the counts by class, author and recipient, the top 20 problems, the last run, and how many fixers started today.GET /pr-problems?class=conflictingalso lists every PR in that class.node scripts/ops/pr-problem-router.mjs --report --class conflictinggives the same answer without the app.
Switches
- Pause the
AMC-pr-problem-routerscheduled job to stop it completely. AMC_PR_PROBLEM_ROUTER=0(or the olderAMC_PR_PROBLEMS_DELIVER=0) keeps tracking but tells nobody.AMC_PR_PROBLEM_SPAWN=0stops the fixer sessions. Problems with no live agent then go to the inbox card.
Limits
- It never pushes, merges, closes, labels or comments on a pull request. A fixer it starts may push only to that PR's own branch.
- GitHub can take minutes to answer a page of pull requests while it works out mergeability. Each run reads as many pages as fit in eight minutes, and the next run carries on from where it stopped.
- Three failed runs in a row raise one inbox card. Until then the tracker keeps showing its last good reading.
Last verified 2026-10-15