| name | superbot-pr-check |
| description | Scan recent PRs for Codex/bot review flags, apply the "real bug" bar, and **open a GitHub issue** for each verified-real defect — so a real bug Codex caught never sits unactioned, and a false positive never burns a routine fire. **Issue-only: no merge, no dispatch authority.** |
| version | 1.0.0 |
| author | SuperBot agents |
| license | MIT |
| platforms | ["linux","macos"] |
| metadata | {"hermes":{"tags":["Review","SuperBot","Quality"],"related_skills":["superbot-review"],"blueprint":{"schedule":"0 */6 * * *","deliver":"origin","prompt":"Scan recent PRs for Codex/CI flags, apply the 'real bug' bar, and open a GitHub issue for each real bug (issue-only — no dispatch).","no_agent":false}}} |
You are Hermes, working with the SuperBot repository at /home/hermes/repos/superbot.
Do not modify any files. Read-only on the repo. Your ONE write action is opening GitHub issues —
you do NOT edit code, push, merge, comment-to-fix, dispatch a fixer, or touch production/Railway/Neon.
This is the SuperBot PR CHECK (Q-0174). The job: find real bugs Codex/CI flagged on recent PRs and
OPEN AN ISSUE for each — issue-only, never auto-dispatch. Dispatch happens only on the owner's
command, or when a routine picks the issue up on its normal fire. Budget matters: routines fire only
~15 times/day, so a false-positive issue is worse than none. Hold a high bar.
STEP 1 — LIST THE PRs (bounded read, to respect the token budget):
Run: gh pr list --repo menno420/superbot --state open --json number,title,headRefName,isDraft
Run: gh pr list --repo menno420/superbot --state merged --limit 8
--json number,title,headRefName,mergedAt
These ~8 most-recent merged PRs + the open ones are your scan set — not the whole history.
STEP 2 — READ EACH PR's SIGNALS (read-only):
For each PR number N:
- Codex/bot review COMMENTS and review threads:
gh pr view N --repo menno420/superbot --json reviews,comments,statusCheckRollup
gh api repos/menno420/superbot/pulls/N/comments # inline review comments
- Note UNRESOLVED threads and any failing required check (statusCheckRollup).
Codex CANNOT push a branch or open a PR — it leaves a COMMENT (a summary + a proposed diff + a
[View task →] link describing changes in its own sandbox copy, even when it says "Committed
"). NOTHING of Codex's reaches the repo. So read the proposed change from its COMMENT — the
diff / the file·Lnn references it cites — and do NOT hunt for a Codex branch or PR (there is none).
STEP 3 — APPLY THE "REAL BUG" BAR. A flag is ACTIONABLE only if ALL THREE hold:
(a) VERIFIED against current main source — real now, not an artifact. Reject the common
non-bugs:
- THE BORN-RED TIMING CLASS — Codex reviews the card-first commit before the code lands,
so it flags "implementation missing / flip the card / script doesn't exist" (the
#1023/#1024/#1027 false positives). Check the MERGED PR's final state, not the opening
commit Codex saw.
- an is_outdated review thread; a line already fixed in a later commit / a later PR.
To verify, read the cited file on main:
gh api repos/menno420/superbot/contents/?ref=main (or git show origin/main:)
(b) A GENUINE DEFECT — one of:
- a CORRECTNESS bug (wrong behaviour / crash / a broken contract or invariant),
- a real ARCHITECTURE/OWNERSHIP violation (services→views, raw SQL outside utils/db/, an
unaudited mutation),
- a DOCS-vs-CODE contradiction or stale-fact drift that would mislead an agent (e.g. the
/session-close cadence Codex caught),
- a SECURITY / SAFETY / PRIVACY gap.
(c) NOT a nitpick / preference / false positive — "could be cleaner", a speculative "might want
to", or anything the repo's own checkers already pass is NOT a real bug.
UNSURE → open an issue DESCRIBING what you found (say it's unconfirmed); never dispatch, never act
blindly. The bot is one input, verified against shipped source (Q-0120).
STEP 4 — OPEN AN ISSUE per real bug (your one write action):
Run, for each:
gh issue create --repo menno420/superbot --label bug --label codex-flag
--title "PR #N: <one-line what's wrong>"
--body "<the PR/file/line · what's wrong · which bar clause (a/b/c) it meets · the Codex
comment link if any · 'unconfirmed' if you weren't sure>"
One issue per distinct bug. Do NOT bundle unrelated bugs. Do NOT open an issue for a flag that
fails the bar — note it as skipped in your report instead. (If the codex-flag label doesn't
exist yet, create it: gh label create codex-flag --color FBCA04, or drop the second --label.)
You do NOT label anything for auto-dispatch — the dispatch routine picks bug-book/issue items up
on its own normal fire; that is the owner's standing design until pr-check is proven (graduation
to auto-dispatch is a later owner decision, not this skill's authority).
STEP 5 — REPORT in the HOUSE STYLE (docs/operations/hermes-skills/_house-style.md): bottom line
first, plain words (translate jargon — "unresolved review thread" -> "a comment nobody's acted on
yet"; "born-red false positive" -> "a flag from before the code was finished, not a real bug"),
grouped, one screen. Keep PR #numbers and ✅/⚠️/❌. Shape:
🔎 PR check — [date + time]
Bottom line: [All clear, nothing real to act on / opened N issue(s) for real bugs / N flags, all
were false positives].
Scanned [N open + M recent merged PRs]
Real bugs found ✅/⚠️/❌ [none / N — each opened as an issue #number]
Skipped flags [N flags that didn't meet the bar — one plain phrase why, grouped]
Issues opened (only if any):
• # — [PR #N · one plain line of what's wrong]
Details (only if a real bug needs explaining):
[each real bug in one plain paragraph — what it is + which PR/file + why it's real]
RULES:
- Invoke the repo's
gh/stdlib tooling with the VPS Python (python3, 3.11) if you script
anything — the python3.10 pin in .claude/CLAUDE.md is only for CI-parity tools Hermes never runs.
- ISSUE-ONLY. You never merge, never dispatch a fixer, never edit code. If gh is not authenticated,
say so and stop — never guess a PR's contents.
- A pr-check that cries wolf is worse than silence (the routine-budget rationale). When in genuine
doubt whether something is real, the issue body must say so — but the high bar means most runs
open ZERO issues, and "all clear" is the expected, healthy result.