docs: correct RD-27's occurrence count, the fourth time in one pattern

Decision 3 said the `@shared/ui/` occurrence count must not change at 200,
while decision 4, nine lines below, mandated converting five relative imports
into `@shared/ui/` aliases — five new occurrences by construction. The answer
is 205, and the agent verified by hand that the 21 occurrences now inside
`libs/shared/src/ui/` are the 16 from before plus exactly those five.

This is the fourth instance of the pattern named in the previous docs commit,
and the first ticket written after naming it. Recorded as such: when two
decisions both touch the thing you are counting, add them up first.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
eho
2026-09-05 08:15:20 +02:00
co-authored by Claude Opus 5
parent 43dc3210cd
commit 57fc72f254
2 changed files with 17 additions and 2 deletions
@@ -67,7 +67,15 @@ fine and only fails when Storybook builds. The README says it must not be pushed
Do it longest-first anyway — it costs nothing and the property is not guaranteed to hold if Do it longest-first anyway — it costs nothing and the property is not guaranteed to hold if
this is ever repeated. this is ever repeated.
There are 200 occurrences across 73 files. The count of occurrences must not change. There are 200 occurrences across 73 files, and this rewrite alone changes none of them.
**Corrected after the ticket ran: the total lands at 205, not 200.** Decision 4 converts five
relative imports into `@shared/ui/` aliases, and each of those is itself a new occurrence.
This decision's "must not change" governs _this_ rewrite; decision 4 adds five on top. The
two decisions were written as if they counted different things, and they do not.
The honest check is per-source: 200 from the specifier rewrite, plus exactly the 5 that
decision 4 names.
4. **Five of the seven relative imports inside `upload/` become aliases; two stay relative.** 4. **Five of the seven relative imports inside `upload/` become aliases; two stay relative.**
A `../sibling/` import only breaks when the sibling lands in a different layer: A `../sibling/` import only breaks when the sibling lands in a different layer:
@@ -168,7 +176,7 @@ git grep -ho "@shared/ui/[a-z0-9-]*" -- apps libs | sort -u # is 26 values ->
Nothing was lost or duplicated in the rewrite: Nothing was lost or duplicated in the rewrite:
```bash ```bash
git grep -ho "@shared/ui/" -- apps libs | wc -l # is 200 -> MUST still be 200 git grep -ho "@shared/ui/" -- apps libs | wc -l # is 200 -> MUST be 205 (200 + decision 4's 5)
git grep -c "src/ui/" -- '*.mdx' | awk -F: '{s+=$NF} END {print s+0}' # is 7 -> MUST still be 7 git grep -c "src/ui/" -- '*.mdx' | awk -F: '{s+=$NF} END {print s+0}' # is 7 -> MUST still be 7
git grep -c "from '\.\./" -- libs/shared/src/ui/ | awk -F: '{s+=$NF} END {print s+0}' # is 7 -> MUST be 2 git grep -c "from '\.\./" -- libs/shared/src/ui/ | awk -F: '{s+=$NF} END {print s+0}' # is 7 -> MUST be 2
``` ```
+7
View File
@@ -209,6 +209,13 @@ Three rules when you write a ticket file, because the agent reads its ticket and
number, say out loud what the command counts — declarations, call sites, or matching lines number, say out loud what the command counts — declarations, call sites, or matching lines
— and check that the decisions use that same meaning. — and check that the decisions use that same meaning.
RD-27 then did it a fourth time, in the very next ticket written after that rule was
recorded. Its decision 3 said the `@shared/ui/` occurrence count "must not change" at 200,
while decision 4, nine lines below, mandated converting five relative imports into
`@shared/ui/` aliases — five new occurrences by construction. The answer is 205.
**When two decisions both touch the thing you are counting, add them up before you write
the number.** Naming a habit does not retire it.
- 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