docs: record RD-23's two acceptance misses as recurrences

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 <noreply@anthropic.com>
This commit is contained in:
eho
2026-09-04 23:18:26 +02:00
co-authored by Claude Opus 5
parent 11e3191099
commit d5a7a25a78
+10 -2
View File
@@ -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`. `uploadCtl.onRetry` exists in `upload-controller.ts`.
- RD-08 said "no machine changes" while also requiring a repo-wide grep to come back - 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 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 - 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 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 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 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. 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, 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 - **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: 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 the check `git grep "ActionState" -- apps/ssp/src/app/brief` cannot pass, because