Review the change before it exists.

Agent PRs are hard to review because the review is late. Extra files. A helper that grew. A rename you did not ask for. Radius Principle is a small practice: write a non-prose expectation first. That file is expect.yml.

The review you can still change

An agent PR already on the branch asks you to reconstruct intent from a finished diff. A big agent PR is what you get when nobody reviewed a small slice. So you review the change before any code exists.

A paragraph can be true and still leave the slice unbounded. A file map cannot hide that. You see the whole slice. If it is already too big, you split it. Then the agent implements against a contract you already accepted.

expect.yml

Radius Principle is the practice. expect.yml is the artifact: which files move, a line of why, optional size, optional symbols you already know must change.

desc: "Extract acquireLock so setup and teardown share one release callback."
files:
  src/lock.ts:
    desc: "New helper: acquire and release the path lock."
    "-": 0
    "+": 40
    symbols:
      acquireLock: create
      releaseLock: create
  src/run.ts:
    desc: "Call acquireLock. Drop the inlined lock block."
    "-": 12
    "+": 8
    symbols:
      run: update

desc is for humans. files is the expect. + / - are expected size, not a pass or fail. symbols are not exhaustive: create, update, or delete for names you already care about.

If the expect is already big, split it

The file list has to fit in your head. If it does not, the PR will not either. Split until each expect is one reviewable slice. Those PRs stay small, precise, easy to review, and easy to combine.

You still read the file before implementation. If the first time you see it is inside the impl PR, you are late.

Then code. Then look at the gaps.

  1. 1 /radius:expect drafts the file from a requirement or a conversation.
  2. 2 You read it. Split or drop files. That is the gate.
  3. 3 /radius:impl implements against the listed files and stays close to the estimates.
  4. 4 /radius:drift measures what missed: extra files, blown size, a listed symbol that did not move. Not a general code review.

Two expects that share a file should run sequentially. The expect is also something a script can read, so a reviewer can start at the drift instead of reconstructing intent.

Three skills

  • /radius:expect Write expect.yml before any code.
  • /radius:impl Implement to match that expect.
  • /radius:drift Score how far the branch drifted from it.

Install

Three skills, installed from skills.sh:

npx skills add danilouli/radius-principle

Then run /radius:expect.