0% 5h quota used · resets in 2h live · 08/09/2026 12:04 CEST

_global:pr-review

Process human review feedback on open countryos/global/* draft PRs — apply requested changes, answer questions, revert rejected fixes, and record the rejected patterns in memory so future runs never repeat them.

Runs 22
last 3h ago
Failed 0
no current streak
Median run $0.69
39s · _global ceiling $15.00 per run
Spent in total $15.04
225 turns of agent work

Manifest

_global/tasks.yaml
Address
_global:pr-review — also global:pr-review
Runner
claude-code
Policy
pr may push a countryos/* branch and open a draft PR — the review is the gate
Workspace
the cms clone
Schedule
0 9 * * 1-5 · next 09/09/2026 09:00
Model
sonnet
Budget
80 turns · 45 minutes
Triggerable
yes — free text can reach it
Notifies
every run — 🟢 on success, 🔴 on failure
Description (manifest)
Process human review feedback on open countryos/global/* draft PRs — apply requested changes, answer questions, revert rejected fixes, and record the rejected patterns in memory so future runs never repeat them.

Cost per run

oldest left · ceiling $15.00
_global per-run ceiling $15.00 11/08/2026 09:24: $0.4812/08/2026 09:35: $0.5613/08/2026 10:08: $0.5814/08/2026 15:45: $0.5417/08/2026 09:00: $0.6918/08/2026 09:00: $0.5919/08/2026 09:00: $0.6220/08/2026 09:06: $0.7521/08/2026 09:00: $0.6024/08/2026 09:41: $0.7225/08/2026 09:00: $0.7126/08/2026 09:00: $0.6627/08/2026 09:00: $0.6628/08/2026 09:00: $0.7128/08/2026 18:36: $0.7231/08/2026 09:00: $0.8601/09/2026 09:01: $1.0502/09/2026 09:00: $0.6703/09/2026 09:00: $0.7304/09/2026 09:00: $0.7507/09/2026 09:00: $0.7308/09/2026 09:00: $0.68 11/0814/0819/0824/0827/0831/0803/0908/09
WhenWhat it reportedTurnsTookCost
08/09/2026 09:00No open Country OS PRs found this cycle — all five `countryos/global/*` PRs remain merged since #18722 on 2026-09-02, and the previously-open other-country PR #19418 (tn,…936s$0.68ok
07/09/2026 09:00No open `countryos/global/*` PR exists — all five to date are merged, and the only open Country OS PR right now (#19418, Tunisia's STEG calculator) has zero comments or r…1248s$0.73ok
04/09/2026 09:00No open Country OS PRs exist in `cms` — PR #18722 (the last `countryos/global/*` PR) has been merged since 2026-09-02, and no other open PR uses a `countryos/*` prefix, s…1033s$0.75ok
03/09/2026 09:00No open Country OS PRs exist anywhere — PR #18722 (yesterday's sentry-triage fix) already merged with only the auto-merge bot's scope-check comment and no human review ac…1138s$0.73ok
02/09/2026 09:00Checked PR #18722 (`countryos/global/2026-09-02-sentry-fixes`, opened by today's earlier sentry-triage run) — zero review comments/reviews, nothing to action. PR #18264 (…941s$0.67ok
01/09/2026 09:01No open Country OS (`countryos/global/*`) PRs exist right now — the two opened by yesterday's sentry-triage run (cms #18283, comparator-core #25) are already merged with…161m$1.05ok
31/08/2026 09:00No open `countryos/global/*` PRs exist in cms, telecom-comparator, or appliance-api this cycle, so there was nothing to act on — I verified the tn PR #18264 too (zero una…1440s$0.86ok
28/08/2026 18:36No open Country OS PRs exist in cms or telecom (all three prior global PRs merged, telecom PR #455 merged too) — nothing unaddressed to act on, no rule changes needed, an…939s$0.72ok
28/08/2026 09:00Done. No open Country OS PRs existed in `cms` (all three prior ones merged) or in the `telecom-comparator` repo (PR #455 also merged, with zero reviews/comments) — a full…939s$0.71ok
27/08/2026 09:00No open Country OS PRs exist right now — PR #17463 (the 2026-08-26 sentry-fixes PR) merged with zero review comments before this run started, and no other `countryos/*` P…931s$0.66ok
26/08/2026 09:00Checked the one open Country OS PR (#17463, `countryos/global/2026-08-26-sentry-fixes`, opened by this morning's `sentry-triage` run) — it has zero reviews and zero inlin…927s$0.66ok
25/08/2026 09:00Journal entry appended successfully. No open Country OS PRs exist under any `countryos/*` prefix — both prior `countryos/global` PRs (#16305, #15337) remain merged, and…1144s$0.71ok
24/08/2026 09:41Journal updated. No further action needed this cycle. **Outcome:** No open Country OS PRs exist under any `countryos/*` prefix — both prior `countryos/global/*` PRs (#15…1143s$0.72ok
21/08/2026 09:00No open Country OS PRs exist under any `countryos/*` prefix right now — both prior `_global` PRs (#16305, #15337) and the `tn` PR (#16566) are merged, and the rest of the…827s$0.60ok
20/08/2026 09:06Journal updated successfully. **Outcome:** No open `countryos/global/*` PR exists (both prior ones, #16305 and #15337, remain merged), so there was nothing for this task…1152s$0.75ok
19/08/2026 09:00No open Country OS PRs to review this cycle — PR #16305 (opened by this morning's sentry-triage run) had already merged before I started, with zero review comments or rev…1135s$0.62ok
18/08/2026 09:00No open Country OS PRs exist under any prefix — PR #15337 merged cleanly on 2026-08-12 with no review activity, and no new `countryos/global/*` PR has been opened since.…932s$0.59ok
17/08/2026 09:00Journal entry appended successfully. No open Country OS PRs exist (`countryos/*` prefix) — PR #15337 remains merged, and no other-country PRs are currently open either,…1242s$0.69ok
14/08/2026 15:45No open Country OS PRs exist under any `countryos/*` prefix — PR #15337 remains merged with no review activity, and no other-country PRs need routing. This was a no-op cy…927s$0.54ok
13/08/2026 10:08No open Country OS PRs found this cycle. PR #15337 (the previous `sentry-triage` PR) merged since the last run via the repo's auto-merge bot — only an automated scope-che…939s$0.58ok
12/08/2026 09:35Journal updated. Final report below. Checked PR #15337 (`countryos/global/2026-08-12-sentry-fixes`, opened by this morning's sentry-triage run) — it has zero review comm…1031s$0.56ok
11/08/2026 09:24No open Country OS PRs exist to review — the three legacy `countryos/fr/*` PRs are all merged, and no PR has yet been opened under the new `countryos/global/*` prefix fro…733s$0.48ok

The skill it runs

countries/_global/skills/pr-review/SKILL.md · 107 lines
Read the skill

PR review follow-up — countryos/global/* pull requests

You are in the cms monorepo clone. Humans review the draft PRs that Country OS tasks open. Your job: find review comments nobody has answered yet, act on them, and turn any general guidance into durable memory. Reviews are the main channel where humans teach this system — losing that feedback is the worst failure mode of this task.

Step 0 — Load context

Read memory/review-feedback.md in the _global workspace (create it from the format below if missing). You will apply and update it.

Step 1 — Find unanswered feedback

List every open Country OS PR, whatever workspace opened it:

gh pr list --state open --json number,title,headRefName,isDraft \
  --jq '.[] | select(.headRefName | startswith("countryos/"))'

You act only on countryos/global/* PRs. A PR on another prefix (countryos/tn/*, countryos/de/*, …) belongs to that country's workspace, whose memory/review-feedback.md you cannot write from here — touching its code while filing the lesson in the wrong memory is how a rejected pattern comes back. For those: read the threads, and if any is unaddressed, name the PR and what it asks for in your final report so a human routes it. Change nothing.

Before 2026-08-11 this task's own PRs used the countryos/fr/* prefix (all three are merged). Nothing open uses it, but if an old one resurfaces, treat it as ours.

For each PR you own, fetch inline review comments (threaded via in_reply_to_id) and top-level reviews/comments:

gh api repos/{owner}/{repo}/pulls/{n}/comments
gh pr view {n} --json reviews,comments

A thread is unaddressed when its last comment is not ours (ours = the git author configured in this clone / the PR author account). Our reply is the "handled" marker — always reply when you act, or the next run will redo it.

If there is nothing unaddressed, report that and stop.

Step 2 — Act on each unaddressed thread

Classify and act; reply in the reviewer's language:

  • Change request — check out the PR branch, implement exactly what was asked, commit (fix(review): <what> (per @reviewer)), push, then reply summarizing what changed. Stay within the comment's scope.
  • Rejection ("this hides the problem", "don't do this kind of fix", "revert this") — revert the relevant commit(s) on the branch (git revert, or rewrite the change to what the reviewer describes if they proposed a direction), push, reply. Then ALWAYS distill a rule (step 3).
  • Question — answer it factually in a reply (reference the Sentry issue, code, or run journal as evidence). No code change unless the answer reveals one is needed.
  • Approval / "ok" — no reply needed; nothing to do.
  • Ambiguous — do not guess. Reply with one precise clarifying question and move on; the next run picks up the answer.

Never argue. If you believe the reviewer is mistaken, state your reasoning once in the reply, make no code change, and defer — the human decides.

If every substantive commit of a PR ends up reverted, say so in a PR comment and leave the PR open for the human to close — never close, merge, or mark ready yourself.

Step 3 — Distill durable rules into memory

For every piece of feedback that generalizes beyond the specific line — especially rejections — add an entry to memory/review-feedback.md:

## <short imperative rule>
- **Date / source:** <YYYY-MM-DD>, @<reviewer> on <PR link or comment link>
- **What happened:** <one sentence: what we did, what the reviewer said>
- **Rule:** <the general rule, stated so a future run can obey it without
  reading the original thread>
- **How to apply:** <concrete guidance: what to do instead, or when the
  pattern IS acceptable>

Update an existing entry instead of duplicating when the same rule comes up again (append the new source). These rules are binding for every future run in this workspace (CLAUDE.md enforces this) — write them precisely enough to be obeyed, and narrowly enough not to ban legitimate fixes.

Do not record one-off, line-specific requests as rules — those are handled by the commit and reply alone.

Step 4 — Record

Append a dated entry to memory/journal.md: PRs checked, threads handled (change/revert/question/clarify), rules added. Final message: per-PR summary, any thread you left as a clarifying question, and any other-country countryos/* PR with unaddressed feedback (step 1) — a human knows a reply is awaited.