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
/radius:expectdrafts the file from a requirement or a conversation. - 2 You read it. Split or drop files. That is the gate.
-
3
/radius:implimplements against the listed files and stays close to the estimates. -
4
/radius:driftmeasures 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:expectWriteexpect.ymlbefore any code. -
/radius:implImplement to match that expect. -
/radius:driftScore how far the branch drifted from it.
Install
Three skills, installed from skills.sh:
npx skills add danilouli/radius-principle
Then run /radius:expect.