From a030d79bd76718c0606f7c959ae924597d495e85 Mon Sep 17 00:00:00 2001 From: Sander Striker Date: Tue, 27 Oct 2026 09:52:25 +0100 Subject: [PATCH 1/5] docs: give a docs-only branch a reader test in place of the adversarial pass A fresh agent reads the changed files alone and answers questions that the author writes first. A second fresh agent checks each claim against the code. The first trial, on PR 33, found six errors that a read of the diff did not find. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2 --- .claude/commands/reader-test.md | 74 +++++++++++++++++++++++++++++++++ AGENTS.md | 9 +++- 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 .claude/commands/reader-test.md diff --git a/.claude/commands/reader-test.md b/.claude/commands/reader-test.md new file mode 100644 index 0000000..f460a8e --- /dev/null +++ b/.claude/commands/reader-test.md @@ -0,0 +1,74 @@ +--- +description: Hand a docs-only branch to two fresh subagents, one that reads it cold and one that checks it against the code +argument-hint: "[branch] (defaults to the current one)" +--- + +# Read the branch before the pull request + +AGENTS.md asks for this in place of `/adversarial` on a branch that touches only docs, +after the push and before the PR is opened, and for a revision of an open PR, before the +push that asks for re-review. A doc fails in two ways a reviewer who knows the code does +not see: a reader comes away believing something other than what was meant, or the doc +says something the code does not do. One subagent tests each. + +Work out the branch (`$ARGUMENTS`, or `git rev-parse --abbrev-ref HEAD`), confirm it is +pushed and that `origin/` is what you mean to have read. Then, before spawning +anything: + +1. **Write the questions.** Three to five questions the change should let a reader + answer, each with the answer you mean the doc to give. Ask what a reader would act on + ("which part stops X", "what do you lose if you Y"), not what a sentence says. Keep the + answers to yourself; the reader never sees them. +2. **Copy the changed files** as they stand on `origin/` into a fresh directory in + your scratchpad, with nothing else in it, and save `git diff origin/main...origin/` + beside them as `change.diff`. + +Then spawn **two fresh general-purpose subagents** in one message, never forks, which +would inherit the reasoning that wrote the branch and agree with it. Do not edit the +worktree until both report. + +## The reader + +> You are a reader new to this project. Read only the files in ``: the changed +> documents, and `change.diff`, which shows what changed in them. **Read nothing else**: no +> other file in the repository, no code, no web. What a reader cannot find in these files, +> you do not know. Change nothing. +> +> 1. Before the questions: in five sentences or fewer, what does the change tell you that +> the old text did not? +> 2. Answer each question below from the documents alone. Quote the sentence each answer +> rests on. Where the documents do not answer, say so; do not guess from what such +> projects usually do. +> 3. List each place where you stopped or read twice: a term used before it is defined, +> two passages that disagree, a sentence you could read two ways (give both readings), +> a claim about a part the documents never introduce. +> +> + +## The fact check + +> You are checking a documentation change in the sstriker/durable-memory repository +> against the code. Read AGENTS.md first. **Change nothing, commit nothing, post nothing +> to GitHub.** The change is `git diff origin/main...origin/`. +> +> List every claim the added or changed lines make about what the code does, what a +> command does, what a file holds, or which part does what. For each, read the code on +> `origin/` and give one verdict: **HOLDS** with the `file:line` that shows it, +> **WRONG** with the `file:line` that shows otherwise and what the text should say, or +> **UNCHECKED** with why you could not settle it. A claim the text implies but does not +> state counts: a component given a job, a list that reads as complete. Where the doc +> describes a plan as well as what is built, say whether a claim about the plan fits the +> code that exists, rather than marking it WRONG for not being built yet. Report WRONG +> first. Do not report style. + +## When they report + +Grade the reader's answers against yours. A wrong or missing answer is a finding against +the text, not against the reader: change the text until a fresh reader would answer it. +Verify each WRONG from the fact check yourself before acting on it. A revision that is +more than a word is new text: push it and run both again, with the same questions, since +a fix for one reader's confusion can make a claim the code does not hold. Once a reader +has answered every question, a revision for its other notes needs only the fact check, on +the lines the revision changed. Then say in the PR description that the pass ran, the +questions, how the reader did, and what the fact check found, so a pass that found +nothing leaves a trace. diff --git a/AGENTS.md b/AGENTS.md index 1f0877c..d6d5839 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -73,6 +73,7 @@ to the repository is committed under `.claude/`: | `.claude/hooks/guard-bash.sh` | refuses a command that stages with a wildcard, reaches into the shared stash, passes `--no-verify`, pipes `cargo` or `make` into `head` or `tail`, or posts an issue or pull request body that does not say who wrote it | | `.claude/hooks/guard-bash.test.sh` | what the guard refuses, and what it must go on allowing. Run by `make check` | | `.claude/commands/adversarial.md` | the prompt the pre-PR pass is given, and the classes it attacks | +| `.claude/commands/reader-test.md` | the prompts a docs-only branch is given instead: a cold reader, and a check against the code | If the guard refuses something this repository actually asks for, that is a bug in the guard: add the case to the test and fix it rather than working around it. Whatever else @@ -131,8 +132,12 @@ is the direction (PLAN.md, Build speed); until then the cache is local. prompt is `/adversarial`, in `.claude/commands/adversarial.md`. A fresh agent, never a fork: a fork inherits the reasoning that wrote the branch and agrees with it. Answer what it finds as you would a reviewer, and say in the PR description that the pass ran and - what came of it, so a pass that found nothing leaves a trace. Skip it for a branch that - touches only docs. + what came of it, so a pass that found nothing leaves a trace. +- **A branch that touches only docs gets a reader test instead**, at the same point. The + prompt is `/reader-test`, in `.claude/commands/reader-test.md`: write the questions the + change should answer first, then one fresh agent answers them from the changed files + alone and another checks each claim against the code. A wrong answer is a finding + against the text. Say in the PR description how the reader did and what the check found. - **A review is tied to a commit, so re-request it after every push**, and do not read a clean round as a verdict. From d1fedd1e5041bdfeb76643c601aadf424a42ffa9 Mon Sep 17 00:00:00 2001 From: Sander Striker Date: Tue, 27 Oct 2026 09:55:54 +0100 Subject: [PATCH 2/5] docs: define the docs-only branch and the pass timing for both passes The reader test of this branch found these problems. AGENTS.md did not define a docs-only branch. Both commands said to run a pass before a push, but a pass reads what is pushed. Both named a repository that is not this one. A reader agent loads AGENTS.md before it reads the changed files. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2 --- .claude/commands/adversarial.md | 4 ++-- .claude/commands/reader-test.md | 34 ++++++++++++++++++++------------- AGENTS.md | 14 ++++++++------ 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/.claude/commands/adversarial.md b/.claude/commands/adversarial.md index bdafd19..9be0fa6 100644 --- a/.claude/commands/adversarial.md +++ b/.claude/commands/adversarial.md @@ -6,7 +6,7 @@ argument-hint: "[branch] (defaults to the current one)" # Attack the branch before the pull request AGENTS.md asks for this after the push and before the PR is opened, and for a revision of -an open PR, before the push that asks for re-review. This is the prompt it tells you to +an open PR, after its push and before review is re-requested. This is the prompt it tells you to write. Work out the branch (`$ARGUMENTS`, or `git rev-parse --abbrev-ref HEAD`), confirm it is @@ -17,7 +17,7 @@ the worktree until the pass reports. ## The prompt -> You are doing an adversarial pre-PR review in the sstriker/durable-memory repository. +> You are doing an adversarial pre-PR review in this repository. > Read AGENTS.md and PLAN.md first. **Change nothing, commit nothing, post nothing to > GitHub.** Report findings. > diff --git a/.claude/commands/reader-test.md b/.claude/commands/reader-test.md index f460a8e..231237a 100644 --- a/.claude/commands/reader-test.md +++ b/.claude/commands/reader-test.md @@ -5,9 +5,9 @@ argument-hint: "[branch] (defaults to the current one)" # Read the branch before the pull request -AGENTS.md asks for this in place of `/adversarial` on a branch that touches only docs, -after the push and before the PR is opened, and for a revision of an open PR, before the -push that asks for re-review. A doc fails in two ways a reviewer who knows the code does +AGENTS.md asks for this in place of `/adversarial` on a branch that `scripts/docs-only.sh` +accepts, after the push and before the PR is opened, and for a revision of an open PR, +after its push and before review is re-requested. A doc fails in two ways a reviewer who knows the code does not see: a reader comes away believing something other than what was meant, or the doc says something the code does not do. One subagent tests each. @@ -18,7 +18,10 @@ anything: 1. **Write the questions.** Three to five questions the change should let a reader answer, each with the answer you mean the doc to give. Ask what a reader would act on ("which part stops X", "what do you lose if you Y"), not what a sentence says. Keep the - answers to yourself; the reader never sees them. + answers to yourself; the reader never sees them. The reader is not quite cold: every + session here loads CLAUDE.md, and AGENTS.md through it, before it reads anything. Ask + what that text cannot answer, and when the change is to AGENTS.md itself, tell the + reader that the copy in its directory is the one to go by. 2. **Copy the changed files** as they stand on `origin/` into a fresh directory in your scratchpad, with nothing else in it, and save `git diff origin/main...origin/` beside them as `change.diff`. @@ -47,8 +50,7 @@ worktree until both report. ## The fact check -> You are checking a documentation change in the sstriker/durable-memory repository -> against the code. Read AGENTS.md first. **Change nothing, commit nothing, post nothing +> You are checking a documentation change in this repository against the code. Read AGENTS.md first. **Change nothing, commit nothing, post nothing > to GitHub.** The change is `git diff origin/main...origin/`. > > List every claim the added or changed lines make about what the code does, what a @@ -58,17 +60,23 @@ worktree until both report. > **UNCHECKED** with why you could not settle it. A claim the text implies but does not > state counts: a component given a job, a list that reads as complete. Where the doc > describes a plan as well as what is built, say whether a claim about the plan fits the -> code that exists, rather than marking it WRONG for not being built yet. Report WRONG -> first. Do not report style. +> code that exists, rather than marking it WRONG for not being built yet. Where the change +> is to the repository's own rules, also check that it agrees with the rest of AGENTS.md, +> the other commands, the hooks, the scripts and CI. Report WRONG first. Do not report +> style. +> +> ..origin/` +> changes, but report anything WRONG you find anywhere in the full diff.> ## When they report Grade the reader's answers against yours. A wrong or missing answer is a finding against the text, not against the reader: change the text until a fresh reader would answer it. -Verify each WRONG from the fact check yourself before acting on it. A revision that is -more than a word is new text: push it and run both again, with the same questions, since -a fix for one reader's confusion can make a claim the code does not hold. Once a reader -has answered every question, a revision for its other notes needs only the fact check, on -the lines the revision changed. Then say in the PR description that the pass ran, the +Verify each WRONG from the fact check yourself before acting on it, and settle each +UNCHECKED or name it in the PR description as open. A revision that is more than a word +or a mark is new text: push it and run two fresh agents again, with the same questions, +since a fix for one reader's confusion can make a claim the code does not hold. Once a +reader has answered every question correctly, a revision for its other notes needs only +the fact check, on the lines the revision changed. Then say in the PR description that the pass ran, the questions, how the reader did, and what the fact check found, so a pass that found nothing leaves a trace. diff --git a/AGENTS.md b/AGENTS.md index d6d5839..9ea60b7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -128,16 +128,18 @@ is the direction (PLAN.md, Build speed); until then the cache is local. ## Pull requests - Branch from `main`, open the PR against `main`, `make check` passing first. -- **A fresh subagent attacks the branch after the push and before the pull request.** The +- **A fresh subagent attacks the branch after the push and before the pull request**, and + again after each push that revises an open one, before review is re-requested. The prompt is `/adversarial`, in `.claude/commands/adversarial.md`. A fresh agent, never a fork: a fork inherits the reasoning that wrote the branch and agrees with it. Answer what it finds as you would a reviewer, and say in the PR description that the pass ran and what came of it, so a pass that found nothing leaves a trace. -- **A branch that touches only docs gets a reader test instead**, at the same point. The - prompt is `/reader-test`, in `.claude/commands/reader-test.md`: write the questions the - change should answer first, then one fresh agent answers them from the changed files - alone and another checks each claim against the code. A wrong answer is a finding - against the text. Say in the PR description how the reader did and what the check found. +- **A branch that `scripts/docs-only.sh` accepts gets a reader test instead**, at the same + points. The prompt is `/reader-test`, in `.claude/commands/reader-test.md`: write the + questions the change should answer first, then one fresh agent answers them from the + changed files alone and another checks each claim against the code. A wrong or missing + answer is a finding against the text. Say in the PR description that the pass ran, the + questions, how the reader did, and what the check found. - **A review is tied to a commit, so re-request it after every push**, and do not read a clean round as a verdict. From 2c2fe0595a5a78bcd9eb228b3549e0544b690986 Mon Sep 17 00:00:00 2001 From: Sander Striker Date: Tue, 27 Oct 2026 09:58:59 +0100 Subject: [PATCH 3/5] docs: put the re-run rules in AGENTS.md and name the path list The second reader test and fact check of this branch found these problems. AGENTS.md did not say that a revision can need only the fact check, or no pass. It called the reader cold. Neither file said which paths go to scripts/docs-only.sh. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2 --- .claude/commands/reader-test.md | 47 +++++++++++++++++++-------------- AGENTS.md | 17 +++++++----- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/.claude/commands/reader-test.md b/.claude/commands/reader-test.md index 231237a..5d12e06 100644 --- a/.claude/commands/reader-test.md +++ b/.claude/commands/reader-test.md @@ -1,15 +1,16 @@ --- -description: Hand a docs-only branch to two fresh subagents, one that reads it cold and one that checks it against the code +description: Hand a docs-only branch to two fresh subagents, one that reads only the changed files and one that fact-checks them against the code argument-hint: "[branch] (defaults to the current one)" --- # Read the branch before the pull request -AGENTS.md asks for this in place of `/adversarial` on a branch that `scripts/docs-only.sh` -accepts, after the push and before the PR is opened, and for a revision of an open PR, -after its push and before review is re-requested. A doc fails in two ways a reviewer who knows the code does -not see: a reader comes away believing something other than what was meant, or the doc -says something the code does not do. One subagent tests each. +AGENTS.md asks for this in place of `/adversarial` on a docs-only branch, one where +`git diff --name-only --no-renames origin/main...origin/ | scripts/docs-only.sh` +exits 0: after the push and before the PR is opened, and for a revision of an open PR, +after its push and before review is re-requested. A doc fails in two ways that a reviewer +who knows the code does not see: a reader comes away believing something other than what +was meant, or the doc says something the code does not do. One subagent tests each. Work out the branch (`$ARGUMENTS`, or `git rev-parse --abbrev-ref HEAD`), confirm it is pushed and that `origin/` is what you mean to have read. Then, before spawning @@ -26,9 +27,9 @@ anything: your scratchpad, with nothing else in it, and save `git diff origin/main...origin/` beside them as `change.diff`. -Then spawn **two fresh general-purpose subagents** in one message, never forks, which -would inherit the reasoning that wrote the branch and agree with it. Do not edit the -worktree until both report. +Then spawn **two fresh subagents of the `general-purpose` type** in one message, never +forks, which would inherit the reasoning that wrote the branch and agree with it. Do not +edit the worktree until both report. ## The reader @@ -50,8 +51,9 @@ worktree until both report. ## The fact check -> You are checking a documentation change in this repository against the code. Read AGENTS.md first. **Change nothing, commit nothing, post nothing -> to GitHub.** The change is `git diff origin/main...origin/`. +> You are checking a documentation change in this repository against the code. Read +> AGENTS.md as it stands on `origin/` first. **Change nothing, commit nothing, +> post nothing to GitHub.** The change is `git diff origin/main...origin/`. > > List every claim the added or changed lines make about what the code does, what a > command does, what a file holds, or which part does what. For each, read the code on @@ -65,18 +67,23 @@ worktree until both report. > the other commands, the hooks, the scripts and CI. Report WRONG first. Do not report > style. > -> ..origin/` -> changes, but report anything WRONG you find anywhere in the full diff.> +> ..origin/` +> changes, but report anything WRONG you find anywhere in the full diff. `` is the +> one the last fact check read.> ## When they report Grade the reader's answers against yours. A wrong or missing answer is a finding against the text, not against the reader: change the text until a fresh reader would answer it. Verify each WRONG from the fact check yourself before acting on it, and settle each -UNCHECKED or name it in the PR description as open. A revision that is more than a word -or a mark is new text: push it and run two fresh agents again, with the same questions, -since a fix for one reader's confusion can make a claim the code does not hold. Once a -reader has answered every question correctly, a revision for its other notes needs only -the fact check, on the lines the revision changed. Then say in the PR description that the pass ran, the -questions, how the reader did, and what the fact check found, so a pass that found -nothing leaves a trace. +UNCHECKED or name it in the PR description as open. + +A revision of one word or one punctuation mark needs no new pass. A larger revision is new +text: push it and run two fresh agents again, with the same questions, since a fix for one +reader's confusion can make a claim the code does not hold. Once the latest reader has +answered every question correctly, a revision for that reader's other notes needs only the +fact check, on the lines the revision changed. These rules hold for a revision of an open +PR too. + +Then say in the PR description that the pass ran, the questions, how the reader did, what +the fact check found, and what is still open, so a pass that found nothing leaves a trace. diff --git a/AGENTS.md b/AGENTS.md index 9ea60b7..4c32715 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -73,7 +73,7 @@ to the repository is committed under `.claude/`: | `.claude/hooks/guard-bash.sh` | refuses a command that stages with a wildcard, reaches into the shared stash, passes `--no-verify`, pipes `cargo` or `make` into `head` or `tail`, or posts an issue or pull request body that does not say who wrote it | | `.claude/hooks/guard-bash.test.sh` | what the guard refuses, and what it must go on allowing. Run by `make check` | | `.claude/commands/adversarial.md` | the prompt the pre-PR pass is given, and the classes it attacks | -| `.claude/commands/reader-test.md` | the prompts a docs-only branch is given instead: a cold reader, and a check against the code | +| `.claude/commands/reader-test.md` | the prompts for a docs-only branch instead: a reader with only the changed files, and a fact check against the code | If the guard refuses something this repository actually asks for, that is a bug in the guard: add the case to the test and fix it rather than working around it. Whatever else @@ -134,12 +134,15 @@ is the direction (PLAN.md, Build speed); until then the cache is local. fork: a fork inherits the reasoning that wrote the branch and agrees with it. Answer what it finds as you would a reviewer, and say in the PR description that the pass ran and what came of it, so a pass that found nothing leaves a trace. -- **A branch that `scripts/docs-only.sh` accepts gets a reader test instead**, at the same - points. The prompt is `/reader-test`, in `.claude/commands/reader-test.md`: write the - questions the change should answer first, then one fresh agent answers them from the - changed files alone and another checks each claim against the code. A wrong or missing - answer is a finding against the text. Say in the PR description that the pass ran, the - questions, how the reader did, and what the check found. +- **A docs-only branch, one whose changed paths `scripts/docs-only.sh` accepts, gets a + reader test instead**, at the same points. The prompt is `/reader-test`, in + `.claude/commands/reader-test.md`: write the questions the change should answer first, + then one fresh agent answers them from the changed files and from nothing else but what + every session loads, and another fact-checks each claim against the code. A wrong or + missing answer is a finding against the text. The command says when a revision needs + both agents again, the fact check alone, or neither. Say in the PR description that the + pass ran, the questions, how the reader did, what the fact check found, and what is + still open. - **A review is tied to a commit, so re-request it after every push**, and do not read a clean round as a verdict. From ccdb40026ab5fa331f3dbc15317b95cb40f5d83a Mon Sep 17 00:00:00 2001 From: Sander Striker Date: Tue, 27 Oct 2026 10:02:13 +0100 Subject: [PATCH 4/5] docs: say that the reader also gets the diff and the user's memory Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2 --- .claude/commands/reader-test.md | 9 +++++---- AGENTS.md | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.claude/commands/reader-test.md b/.claude/commands/reader-test.md index 5d12e06..edff934 100644 --- a/.claude/commands/reader-test.md +++ b/.claude/commands/reader-test.md @@ -1,5 +1,5 @@ --- -description: Hand a docs-only branch to two fresh subagents, one that reads only the changed files and one that fact-checks them against the code +description: Hand a docs-only branch to two fresh subagents, one that reads only the changed files and their diff and one that fact-checks them against the code argument-hint: "[branch] (defaults to the current one)" --- @@ -20,9 +20,10 @@ anything: answer, each with the answer you mean the doc to give. Ask what a reader would act on ("which part stops X", "what do you lose if you Y"), not what a sentence says. Keep the answers to yourself; the reader never sees them. The reader is not quite cold: every - session here loads CLAUDE.md, and AGENTS.md through it, before it reads anything. Ask - what that text cannot answer, and when the change is to AGENTS.md itself, tell the - reader that the copy in its directory is the one to go by. + session here loads CLAUDE.md, AGENTS.md through it, and the user's own memory and + context, before it reads anything. Ask what that text cannot answer, and when the + change is to AGENTS.md itself, tell the reader that the copy in its directory is the + one to go by. 2. **Copy the changed files** as they stand on `origin/` into a fresh directory in your scratchpad, with nothing else in it, and save `git diff origin/main...origin/` beside them as `change.diff`. diff --git a/AGENTS.md b/AGENTS.md index 4c32715..c64d9b9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -73,7 +73,7 @@ to the repository is committed under `.claude/`: | `.claude/hooks/guard-bash.sh` | refuses a command that stages with a wildcard, reaches into the shared stash, passes `--no-verify`, pipes `cargo` or `make` into `head` or `tail`, or posts an issue or pull request body that does not say who wrote it | | `.claude/hooks/guard-bash.test.sh` | what the guard refuses, and what it must go on allowing. Run by `make check` | | `.claude/commands/adversarial.md` | the prompt the pre-PR pass is given, and the classes it attacks | -| `.claude/commands/reader-test.md` | the prompts for a docs-only branch instead: a reader with only the changed files, and a fact check against the code | +| `.claude/commands/reader-test.md` | the prompts for a docs-only branch instead: a reader with only the changed files and their diff, and a fact check against the code | If the guard refuses something this repository actually asks for, that is a bug in the guard: add the case to the test and fix it rather than working around it. Whatever else @@ -137,8 +137,8 @@ is the direction (PLAN.md, Build speed); until then the cache is local. - **A docs-only branch, one whose changed paths `scripts/docs-only.sh` accepts, gets a reader test instead**, at the same points. The prompt is `/reader-test`, in `.claude/commands/reader-test.md`: write the questions the change should answer first, - then one fresh agent answers them from the changed files and from nothing else but what - every session loads, and another fact-checks each claim against the code. A wrong or + then one fresh agent answers them from the changed files and their diff and from nothing + else but what every session loads, and another fact-checks each claim against the code. A wrong or missing answer is a finding against the text. The command says when a revision needs both agents again, the fact check alone, or neither. Say in the PR description that the pass ran, the questions, how the reader did, what the fact check found, and what is From 6427cb4089dbb939c18999edb083411826947c4e Mon Sep 17 00:00:00 2001 From: Sander Striker Date: Tue, 27 Oct 2026 10:02:37 +0100 Subject: [PATCH 5/5] docs: rewrap the reader-test rule in AGENTS.md Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2 --- AGENTS.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index c64d9b9..61c0199 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -138,11 +138,11 @@ is the direction (PLAN.md, Build speed); until then the cache is local. reader test instead**, at the same points. The prompt is `/reader-test`, in `.claude/commands/reader-test.md`: write the questions the change should answer first, then one fresh agent answers them from the changed files and their diff and from nothing - else but what every session loads, and another fact-checks each claim against the code. A wrong or - missing answer is a finding against the text. The command says when a revision needs - both agents again, the fact check alone, or neither. Say in the PR description that the - pass ran, the questions, how the reader did, what the fact check found, and what is - still open. + else but what every session loads, and another fact-checks each claim against the code. + A wrong or missing answer is a finding against the text. The command says when a + revision needs both agents again, the fact check alone, or neither. Say in the PR + description that the pass ran, the questions, how the reader did, what the fact check + found, and what is still open. - **A review is tied to a commit, so re-request it after every push**, and do not read a clean round as a verdict.