From d5a7a25a78032aad42e53d5aea389eba8cbda749 Mon Sep 17 00:00:00 2001 From: Edwin van den Houdt Date: Fri, 4 Sep 2026 23:18:26 +0200 Subject: [PATCH] docs: record RD-23's two acceptance misses as recurrences MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both repeat a habit this README already documents, so they belong beside it rather than as new entries. `git grep -c` counts lines: a symbol that a file imports and then calls is two lines, never one. And a check must not grep for a word that the ticket's own mandated snippet contains — RD-23 required the upload controller's `dispatch:` property and then asserted zero occurrences of `dispatch`. The agent hit both, refused to distort the code, and corrected the ticket text. Co-Authored-By: Claude Opus 5 --- docs/project/readable-codebase/README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/project/readable-codebase/README.md b/docs/project/readable-codebase/README.md index 97189bb..6603dc7 100644 --- a/docs/project/readable-codebase/README.md +++ b/docs/project/readable-codebase/README.md @@ -193,7 +193,12 @@ Three rules when you write a ticket file, because the agent reads its ticket and `uploadCtl.onRetry` exists in `upload-controller.ts`. - RD-08 said "no machine changes" while also requiring a repo-wide grep to come back clean, which forced comment edits in three machines. The two instructions contradicted - each other. + each other. RD-23 repeated it exactly: its Decisions block mandated the line + `dispatch: (msg) => this.uploadMsg.emit(msg)` — the upload controller's own property name — + while its acceptance demanded zero occurrences of `dispatch` in the step files. **Grep the + text your own mandated snippet contains, and you have written a check that cannot pass.** + Anchor on what you actually forbid: here, `this.dispatch` or `store.dispatch`, not the bare + word. - RD-09 grepped `docs/ apps/ libs/ .claude/`, which also matched this backlog's own ticket files (they name the deleted method as the history of `done` work) and 22 gitignored abandoned worktrees. Satisfying it literally would have corrupted completed-ticket @@ -234,7 +239,10 @@ Three rules when you write a ticket file, because the agent reads its ticket and live on one line of a single-line type declaration, so the honest answer is `1`. The agent correctly refused to reformat the type across four lines to satisfy the number. When you want occurrences, use `grep -o … | wc -l`; when a line count is what you mean, - say so. + say so. **A symbol you import and then use is two lines, never one.** RD-23 repeated the + mistake in the other direction, asserting `git grep -c "createUploadController"` would be + 1 in the file that both imports and calls it. The only way to reach 1 is an import alias + that exists solely to satisfy the check. - **Scope every acceptance command to the ticket's Files list, never to a parent directory.** This is the habit most often broken, including by the supervisor in RD-12: the check `git grep "ActionState" -- apps/ssp/src/app/brief` cannot pass, because