Claude: changes for issue #144 #145

Merged
Grandiras merged 1 commit from claude/issue-144 into main 2026-08-21 16:09:54 +00:00
Collaborator

Closes #144.

Closes #144.
Say "1 member", not "1 member(s)"
All checks were successful
CI / build (pull_request) Successful in 33s
ef492eacdb
The four counted strings in the app put their plural in brackets, which
reads as machine output the one time it matters — and the most visible of
them, the access chip on every row of /admin/boards, says it about a
number an admin picked themselves.

Each is now a pair of keys: the plural under the key it always had, the
singular under "<key>.one", chosen in C# by LocaleService.TCount on
count == 1. Two forms rather than a plural-rules library because English
and German agree on the rule for all four; a language with more forms is
the point to reach for real plural rules, not a third suffix.

Three tests keep the pair honest: both halves exist in every locale, so a
third locale cannot translate the plural and inherit English's singular;
every TCount call site in src/ has a pair to look up; and no translation
brackets its plural again.

Closes #144
Author
Collaborator

🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 Reviewing this PR — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/372); the reply will link the full session transcript. <!-- claude-run:pr_review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/pr-145/run-372.md) — updating every ~5 minutes while the task runs.
claude-reviewer left a comment

Verdict: approve — no blocking issues found.

Clean, well-scoped implementation of the TCount/.one pluralization convention exactly as documented in the CLAUDE.md and docs/i18n.md updates.

Verified:

  • LocaleService.TCount(key, count) correctly resolves to key.one at count == 1 and key otherwise, filling {0} in both cases.
  • All four call sites that previously used the awkward (s)/(e)/(n) bracket convention (card.comments, cal.day.count, admin.boards.delete.cards, admin.boards.access.restricted) are migrated to L.TCount, and both en/de dictionaries gained matching .one pairs with sensible copy (including the admin delete-cards singular correctly switching "them" → "it").
  • Grepped the pre-PR tree for any other bracketed counted strings (\w\((?:s|e|n|es|er|en)\)) in LocaleService.cs — the four converted keys are the only matches, so nothing was missed.
  • New unit tests are solid: pairing completeness across every locale, call-site-to-dictionary completeness (via a source-scan for TCount(...) calls), a values test for the singular/plural selection, and a regression guard banning the old bracket pattern.
  • The new e2e assertion in access.spec.js uses .board-access-link and the boardRow helper, both of which exist and match how Boards.razor renders the access chip.
  • LocaleService.Translations was already public static, so the new tests' direct access is consistent with the existing pattern.

No correctness, security, or omission issues found.


⏱ 1m 9s · 19 turns · tokens: 33.3k in / 4.9k out (+874.8k cache-read)
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. Clean, well-scoped implementation of the `TCount`/`.one` pluralization convention exactly as documented in the CLAUDE.md and docs/i18n.md updates. Verified: - `LocaleService.TCount(key, count)` correctly resolves to `key.one` at count == 1 and `key` otherwise, filling `{0}` in both cases. - All four call sites that previously used the awkward `(s)`/`(e)`/`(n)` bracket convention (`card.comments`, `cal.day.count`, `admin.boards.delete.cards`, `admin.boards.access.restricted`) are migrated to `L.TCount`, and both `en`/`de` dictionaries gained matching `.one` pairs with sensible copy (including the admin delete-cards singular correctly switching "them" → "it"). - Grepped the pre-PR tree for any other bracketed counted strings (`\w\((?:s|e|n|es|er|en)\)`) in `LocaleService.cs` — the four converted keys are the only matches, so nothing was missed. - New unit tests are solid: pairing completeness across every locale, call-site-to-dictionary completeness (via a source-scan for `TCount(...)` calls), a values test for the singular/plural selection, and a regression guard banning the old bracket pattern. - The new e2e assertion in `access.spec.js` uses `.board-access-link` and the `boardRow` helper, both of which exist and match how `Boards.razor` renders the access chip. - `LocaleService.Translations` was already `public static`, so the new tests' direct access is consistent with the existing pattern. No correctness, security, or omission issues found. --- ⏱ 1m 9s · 19 turns · tokens: 33.3k in / 4.9k out (+874.8k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/pr-145/run-372.md) <!-- claude-verdict:approve --> <!-- claude-reviewed-head:ef492eacdbd78f7c43675d811ee1e89295c2f4c0 -->
Grandiras deleted branch claude/issue-144 2026-08-21 16:09:55 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Grandiras/Ponente!145
No description provided.