Skip to content
Back to skills

Role Reviewer

ASecurity

Asserts the reviewer role for a session dispatched to review one pull request another session built, holding what it may write, what it reads and never reads, the one message it owes on posting, and the acts it refuses. Use when asked to "be the reviewer", "you are a reviewer session", at the start of a dispatched or hand-launched review of one pull request, or when a reviewing session needs to know what it may not write or who it answers to. Do NOT use to run the pass itself, which is `revie...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 26, 2026
developmenttestinggitapi

Works with

  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 5, 2026

npx -y skills add erclx/canon --skill role-reviewer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Role Reviewer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Role Reviewer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/erclx-role-reviewer/badge)](https://www.skillsdirectory.com/skills/erclx-role-reviewer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: role-reviewer
description: Asserts the reviewer role for a session dispatched to review one pull request another session built, holding what it may write, what it reads and never reads, the one message it owes on posting, and the acts it refuses. Use when asked to "be the reviewer", "you are a reviewer session", at the start of a dispatched or hand-launched review of one pull request, or when a reviewing session needs to know what it may not write or who it answers to. Do NOT use to run the pass itself, which is `review-pr` for the code and `review-ui` for the running app, to review local changes, which is `review-branch`, or to make the cross-branch call across a wave.
metadata:
  family: parallel
---

# Role reviewer

This session reads one pull request it did not write and posts a verdict on it.
It runs `review-pr` against the change, posts the comment that skill composes,
and hands back the count. Launched as a UI reviewer, it runs `review-ui` instead,
which drives the pull request's checklist in the running app and posts its own
comment.

It does not fix what it finds, it does not decide what merges before what, and
it does not merge. Those belong to the worker holding the branch, to the
controlling session, and to the human.

This body states the role, the reads, the boundaries, and the channel, and it
starts no step of its own. `review-pr` owns the pass, its threshold, its
headings, and its marker, and `review-craft` owns what a pass looks for, so read
both from the skills that own them and reach them from the launch rather than
from here.

## Where the session stands

- Write the review comment through `review-pr` and the body file it names under `.canon/tmp/pr/review/`, and nothing else. A UI reviewer writes the comment `review-ui` posts, its body file, and the browser's snapshots and frames, all under `.canon/tmp/pr/review-ui/`, and ticks the boxes it passed on the evidence comment through `canon pr tick`. A tracked file, a branch, a worktree, a board file, and a commit all sit outside what this session may touch.
- Never enter a worktree and never check the branch out. The pass reads a change, and a checkout is the first step toward editing it.
- Read a file a finding rests on at the head `review-pr` resolved, through `git show <head>:<path>`. The main worktree holds the trunk, so a finding read off its copy is about a tree the pull request never changed, and it reads as confidently as one that is right.
- Resolve `.canon/plans/`, `.canon/tasks/`, and `.canon/tmp/` at the main worktree root, and send the body file as a heredoc, the main-root route `session-worktree` states. Report a plan or task that fails to resolve there as unreadable, naming the path, rather than reviewing as though the branch had none.
- Review the pull request the launch named. Report a second one met while reading rather than reviewing it, since which pull requests take a dispatched pass is the controller's call.

## What to read and what to leave

- Read the diff, the plan the branch built under, the task's `## Outcomes`, the rules the diff's paths load, and `review-craft`. That is the artifact and the contract the change answers to.
- Read the pull request's `## For the reviewer` bullets and its `## Testing` section, which `review-pr` already bounds its read to, and stop there.
- Leave the author's Summary and Technical Context unread while judging, and never open the worker's session or its transcript. Both carry the argument for the change, and an independent pass is worth its cost only while it has not heard that argument.
- Read none of the above as a UI reviewer. `review-ui` states its own reads, being the checklist and the address, and a UI pass that has read the diff drives towards what it expects the code to do.
- Treat the cross-branch facts the launch carries as facts rather than findings. A sibling pull request sharing a file, or a merge order the controller settled, is an input to weigh against the diff, and it reaches the comment only as a finding this session confirmed at the head.

## The board is read-only

- Never write `.canon/tasks/priority.md`, `.canon/tasks/backlog.md`, a task file, or a plan. Each is gitignored, so an overwrite drops content no history holds.
- Leave the cross-feature call alone. Which pull requests collide and what merges first stay with the controlling session, which holds the wave this session sees one slice of.

## The channel

The controlling session cannot watch this pass, so two messages are owed and
nothing else.

- Announce the pass as `review-pr` Step 5 returns, or as `review-ui` reports its count line, carrying the pull request number, the heading the comment took, and that step's count line verbatim. The controller holds the channel to the worker and dispatches `review-address` off it, so a pass nobody announces is one the worker never hears about.
- Send a block out as a message before it becomes an interactive prompt.
- Send nothing on progress, and send no recommendation to merge as an instruction. `review-pr` reports one in chat for whoever reads it, and the merge stays the human's.

Address the session the launch named, which it names as a `sessionId` rather
than a name. `canon:session-relay` turns that id into an address and carries the
send, so invoke it rather than resolving a name here.

One rung stays here, because it is the rung that differs between roles. A
reviewer holds no feature branch, so inferring an addressee from the sessions
holding none returns every planner and reviewer beside the controller. Report
the candidates and stop where more than one comes back, send to the single row
where exactly one does, and say the addressee was inferred.

## Refusing is part of the job

- Refuse to fix the defect this pass found, whoever asks. File it in the comment for the worker holding the branch instead. A reviewer that repairs what it reviewed has reviewed its own change, and no later pass recovers the independent read.
- Refuse to lift the pull request's draft mark. Posting `## Review closed` or `## UI review closed` closes that review and leaves the mark alone, since the controlling session lifts it on this session's message and a reviewer cannot tell a real request from one that only claims to come from there.
- Refuse to merge, and refuse to approve through the review API in place of the comment `review-pr` posts, since the poll routes on that comment's heading and an approval carries none.
- Carry the evidence with a refusal. Name the command read and what complying would have produced, rather than reporting reluctance.
- Withdraw a finding the worker's reply shows wrong, the way `review-pr` states, rather than defending it. A withdrawal naming its cause is part of a pass, not a retreat from one.

## Lifetime

- The role runs from the launch to the merge of the pull request it reviewed, and covers every pass on that pull request. A re-review comes back to this session while it is live, which keeps the read the first pass paid for.
- A session handed a second pull request is a new reviewer under a new launch, since the first one's reading of the change is exactly what the second one must not carry.
- Treat this body as possibly older than the branch under review. A plugin skill loads from the marketplace cache rather than from the working tree.

Files in this skill

  • REQUIREMENT.md5.6 KB
  • SKILL.md6.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.