The reviewer pool was the only place naming harness+model combos, and
blitz kept its own table inline. `reviewers` becomes `agents`, gains
`roles` and `tiers`, and blitz routes from it via scripts/roster.sh.
Config path moves to ~/.config/agent-skills/; the reviewer path stays
readable so a box migrates with a mv.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Trust comes from a repos[] entry in the reviewer config, not from the
forge. Listed repos post findings directly; only an unlisted repo still
holds findings for approval. The old text tied gating to github and
misread the config's mode field, which is the daemon's land/review
switch.
Adds §3.1: resolve a thread once the author addresses the finding.
Unresolved findings pile up for the life of the PR and block the
author's land session, which never declares a PR ready over an open
thread. Approval is still not the reviewer's to give.
Every codex review session so far reached for REVIEWER_GITEA_TOKEN,
the name it found in the daemon's config.json, got an empty header and
a 401, then retried with GITEA_TOKEN. The config file now says which of
its fields the session may use, and COMMON.md says why the other name
is not the one.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reviewers followed the box's global "code reviews go to the rev server"
rule over the skill's posting step. Findings for maestro #45, #47 and #50
went into rev's DB under the review worktree path; the merge deleted the
worktree, rev now answers "not a known repo", and the PRs read as never
reviewed.
The rev rule is now scoped to changes the agent wrote itself, review-pr
names the forge as the only destination, and the daemon's opening prompt
repeats it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review sessions stopped at a permission prompt on every command, which
parks an unattended reviewer on a dialog nobody answers. They now run
confined: Claude gets a generated settings file (dontAsk + bash sandbox,
writes limited to the worktree and its git dir, network limited to the
forge API hosts, credentials unreadable), Codex gets --sandbox
workspace-write --ask-for-approval never plus a profile declaring the
repo untrusted, which also answers its trust prompt without granting it.
Claude Code treats .git as a protected path no allow rule opens, so the
seen and findings files are written with a shell redirect.
review-pr now always posts one review per head SHA, an ack when it has
no findings, so the author side gets a signal either way.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The gitea posting snippet used the issue-comment endpoint, which has no
path or line, so findings named `path:line` in prose instead of landing
on the code. Both forges now post one COMMENT review carrying anchored
findings in comments[] and loose ones in the body.
land's gitea baseline missed review-comment ids, which would replay
every code comment on the first hint.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
One systemd daemon watches GitHub and Gitea and routes each PR to an aoe
session: `land` for PRs you authored, `review-pr` for everyone else's.
It reads metadata only and sends a single inert hint line, so untrusted
PR text never passes through the thing that types into agent prompts.
Routing is derived from `aoe list --json --all` by worktree branch, so
no claim files and no daemon database. Dedupe stays in the session via
`pr-<N>-seen`, which makes hints idempotent and a swallowed send
self-healing.
`land` loses its watcher machinery to the daemon and keeps the policy
and per-event handlers; `pr-common` holds what both skills share.
Review sessions run non-yolo without trusted hooks and never run the
branch's code.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>