One of them shipped to main in #3469 as a "correction" of the other. Both came from the same bad instrument.
| Claim | SendMessage | ListAgents | send-only | Method |
|---|---|---|---|---|
| 2026-08-08, wrong | 34 of 36 | 0 | 34 | file-content grep |
| 2026-08-13, wrong, merged in #3469 | 23 of 37 | 19 | 4 | grep -rln over src/agents/ |
| measured, correct | 19 of 36 | 19 | 0 | parse frontmatter tools: |
grep -rln SendMessage src/agents/ answers a different question than the one being asked. It returns every file where the string appears anywhere, which folds in two distinct errors at once:
36 agent .md files
+ 1 README.md counted as an agent -> the "37"
4 agents that only NAME SendMessage in prose -> the "23" vs the real 19
code-quality-reviewer, component-curator,
eval-runner, security-auditor
(these grant neither tool)
The four "send-only" agents in the #3469 claim were therefore not a partial grant. They were agents whose instructions mention peer messaging while granting no messaging tools at all. The gap that claim described has never existed.
A CI gate already asserted the correct invariant, and had since 2026-08-09, four days before the wrong claim shipped.
tests/agents/test-agent-messaging-scope.sh, written for #3316, asserts that a non-background agent carrying SendMessage must also carry ListAgents. Its own header says it counts frontmatter matches inside the --- fence only, "so a prose mention of SendMessage never false-positives the tools check". It names the exact failure mode that produced both wrong numbers.
$ bash tests/agents/test-agent-messaging-scope.sh Agents checked: 36 Passed: 36 Failed: 0
So the repository already held the right answer in executable form. The wrong claim was not a gap in coverage; it was a grep asserted over a passing gate that nobody consulted.
Corrects the 2.1.224 and 2.1.229 rows in doctor/references/version-compatibility.md and the 2026-08-13 paragraph in shared/cc-support.json, retracting both figures by name rather than quietly swapping the number.
Points both rows at test-agent-messaging-scope.sh as the answer of record, so the next person runs the gate instead of re-deriving it with the same broken instrument.
Adds no new test. The gate that would have caught this already exists and already passes. Writing a second one would imply the coverage was missing, and it was not.