Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chore: make content-guidelines canonical for evidence-versus-claim rule - #28594

Merged
nickvigilante merged 10 commits into
mainfrom
vigilante/docs-728-encode-evidence-vs-claim-abstraction-rule-in-write-docs-and
Sep 8, 2026
Merged

chore: make content-guidelines canonical for evidence-versus-claim rule#28594
nickvigilante merged 10 commits into
mainfrom
vigilante/docs-728-encode-evidence-vs-claim-abstraction-rule-in-write-docs-and

Conversation

@nickvigilante

@nickvigilante nickvigilante commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Agent-authored docs PRs kept leaking implementation detail into user-facing pages: chat status enum values and root_chat_id on the auto-archive page (#28570, flagged by reviewers), and RBAC resource names and response fields in the first revision of #28482. The correction pattern was the same each time: state the behavior in the reader's terms.

This encodes that pattern as one canonical rule with citations in every file that carries the exact-values instruction:

  • docs/.style/content-guidelines.md: new guiding principle "Evidence justifies a claim; it does not belong in the claim". The test is scoped to the task the page documents, with a first-match ladder: exact value where the reader types or receives it, visible product wording where the screen shows it, plain reader's-terms prose otherwise. An identifier set described as a set resolves at the lowest rung any member reaches. Stripped identifiers are named (file and symbol) in the PR discussion as a best-effort pointer for the reviewer. Cross-linked with verify-exact-values, describe-current-version, the routing table, and word-choice. Also repairs a pre-existing broken feature-stages link.
  • docs/.style/style-guide/word-choice.md: the internal-references section notes that implementation identifiers follow the (conditional) canonical rule, covering the prose-edit route that AGENTS.md sends to the prose style guide.
  • .claude/docs/DOCS_STYLE_GUIDE.md: the Accuracy Standards section head and Key Principles item 2 carry the same qualifier, since this always-loaded file is where agents get the unqualified exact-values instruction.
  • .claude/skills/write-docs/SKILL.md: workflow step 1 marks copied identifiers as verification inputs with a forward link; citation-only "Evidence versus claim" section; matching anti-pattern bullet and a checklist item that defers the stripped-identifier disclosure to the canonical rule.
  • .claude/skills/doc-check/SKILL.md: "Evidence versus claim" check scoped to identifiers the change adds or touches, working from the diff (doc-check does not police the disclosure, which it cannot see); pre-existing violations on untouched pages are informational only.

The motivating page (chat-auto-archive.md) was fixed separately in #28570 (DOCS-722, merged). Corpus sweep for other violations: DOCS-730. Lint and link coverage for the .claude and docs/.style trees: DOCS-729.

Linear: DOCS-728 https://linear.app/codercom/issue/DOCS-728

CI note (docs-only PR)

This PR changes only Markdown under docs/.style/ and .claude/ (no site/src or other product code).

  • The ci workflow's docs-relevant jobs pass on the head commit: changes, gen, lint, lint-docs, fmt, offlinedocs, required. Heavy build/test jobs are correctly skipped for a docs-only change. (Run: https://github.com/coder/coder/actions/runs/32986743037)
  • Pixel / Review (frontend visual snapshots) is unrelated to the changed paths and is treated as an unrelated flake.

This PR was created with AI assistance (Coder Agents).

…nd doc-check

Agent-authored docs kept leaking implementation detail (status enums,
column names, internal subsystem names) into user-facing pages, called
out by reviewers on recent Coder Agents docs PRs. Encode the rule: code
evidence justifies a claim but does not belong in the claim, except on
pages where identifiers are the interface.
@linear-code

linear-code Bot commented Aug 25, 2026

Copy link
Copy Markdown

DOCS-728

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review

coder-agents-review Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Chat: Review posted | View chat
Requested: 2026-08-25 21:23 UTC by @nickvigilante

Review history
  • R1 (2026-08-25), 1 Note, 1 P2, 3 P3, COMMENT. Review
  • R2 (2026-08-25), 1 Nit, 2 Note, 1 P1, 2 P2, 4 P3, COMMENT. Review
  • R3 (2026-08-25): 10 reviewers, 2 Nit, 2 Note, 1 P1, 7 P2, 8 P3, 2 P4, COMMENT. Review
  • R4 (2026-08-25): 10 reviewers, 4 Nit, 2 Note, 1 P1, 11 P2, 9 P3, 2 P4, COMMENT. Review
  • R5 (2026-08-25), 4 Nit, 2 Note, 1 P1, 11 P2, 9 P3, 2 P4, COMMENT. Review
  • R6 (2026-08-25): 7 reviewers, 7 Nit, 2 Note, 1 P1, 13 P2, 13 P3, 2 P4, COMMENT. Review
  • R7 (2026-08-25), 7 Nit, 2 Note, 1 P1, 13 P2, 13 P3, 2 P4, COMMENT. Review
  • R8 (2026-08-25): 7 reviewers, 9 Nit, 2 Note, 1 P1, 17 P2, 15 P3, 2 P4, COMMENT. Review
  • R9 (2026-08-25), 9 Nit, 2 Note, 1 P1, 17 P2, 15 P3, 2 P4, COMMENT. Review

deep-review v0.9.0 | Round 9 | ce59a86..7495cc6

Last posted: Round 9, 46 findings (1 P1, 17 P2, 15 P3, 2 P4, 9 Nit, 2 Note), COMMENT. Review

Finding inventory

Finding inventory - PR #28594

Findings

# Sev Status Location Summary Round Reviewer Posted
CRF-1 P2 Author fixed (fea48b2) write-docs/SKILL.md:114 Rule added to skills but not to canonical content-guidelines.md it defers to R1 Netero Yes
CRF-2 P3 Author fixed (fea48b2) doc-check/SKILL.md:113 New section states rule standalone instead of citing a canonical rule, unlike every other section R1 Netero Yes
CRF-3 P3 Author fixed (fea48b2) write-docs/SKILL.md:120 Category-list exception contradicts the closing reader-test rule R1 Netero Yes
CRF-4 P3 Deferred (DOCS-722 / #28570) doc-check/SKILL.md:113 Rule ships with the motivating page (chat-auto-archive.md) still violating it R1 Netero Yes
CRF-5 Note Deferred (DOCS-722 / #28570) write-docs/SKILL.md:125 Live chat-auto-archive.md status list is wrong (pre-existing, outside diff) R1 Netero Yes
CRF-6 P1 Author fixed (acaee4d; stale CI run) content-guidelines.md:97 PR title scope .claude/skills excludes content-guidelines.md; title check fails, PR cannot merge R2 Netero Yes
CRF-7 P2 Author fixed (acaee4d) content-guidelines.md:109 Rule sends identifiers to a PR "evidence section" that PR_STYLE_GUIDE.md forbids and does not define R2 Netero Yes
CRF-8 P3 Author fixed (acaee4d) content-guidelines.md:87 "Verify against the code" section reads unconditional; no forward pointer to the reader test R2 Netero Yes
CRF-9 Nit Author fixed (15af9dc) content-guidelines.md:97 PR description does not mention the third file (largest addition) R2 Netero Yes
CRF-10 Note Deferred (DOCS-729) write-docs/SKILL.md:114 .claude/skills markdown is not covered by any lint target R2 Netero Yes
CRF-11 P2 Author fixed (partial 99531a2); class reopened as CRF-26 R4 .claude/docs/DOCS_STYLE_GUIDE.md:253 Unqualified exact-values rule in always-loaded agent file; CRF-8 fix covered one file not the class R3 Hisoka/Mafu-san/Mafuuu/Razor/Kite Yes
CRF-12 P2 Author fixed (99531a2) content-guidelines.md:102 Reader test predicate underspecified/unscoped; read literally it permits the identifiers its own example forbids R3 Pariston/Mafuuu/Leorio/Razor/Bisky/Hisoka Yes
CRF-13 P2 Author fixed (ac5fac0) content-guidelines.md:99 Policy duplicated across uncross-linked homes; prose-edit path (routed to style guide) never sees the rule R3 Mafu-san/Pen Botter/Pariston/Razor Yes
CRF-14 P2 Author fixed (99531a2) content-guidelines.md:116 The one worked example paraphrases away a user-visible label the reader sees in the UI R3 Pen Botter/Leorio/Bisky Yes
CRF-15 P2 Author fixed (99531a2) doc-check/SKILL.md:117 Skills cite canonical rule then restate it; copies already drifted in this PR (dropped "database", "types a flag") R3 Gon/Pariston/Leorio/Kite Yes
CRF-16 P3 Author fixed (99531a2) doc-check/SKILL.md:117 New check not scoped to the diff; doc-check can post sticky comments about untouched pages R3 Mafuuu/Kite Yes
CRF-17 P3 Author fixed (99531a2) write-docs/SKILL.md:121 Workflow step 1 still says "copy exact identifiers" with no forward pointer to the new section R3 Mafu-san/Pariston/Razor Yes
CRF-18 P3 Author fixed (99531a2) content-guidelines.md:110 "target persona's terms" undefined in canonical file; collides with audience-and-scope ban on persona names R3 Mafuuu/Leorio/Kite Yes
CRF-19 P3 Author fixed (ac5fac0) content-guidelines.md:120 Drift/verification tradeoff undisclosed and reviewer pointer is reactive ("when asked") R3 Hisoka P2/Razor/Kite Yes
CRF-20 P4 Author fixed (99531a2) content-guidelines.md:165 Broken relative link to feature-stages.md (pre-existing, one-char fix; PR edits the file) R3 Razor Yes
CRF-21 P4 Deferred (DOCS-730) content-guidelines.md:99 Rule ships with no corpus sweep; more pages violate it than DOCS-722 covers R3 Bisky/Hisoka/Mafu-san Yes
CRF-22 Nit Author fixed (99531a2) doc-check/SKILL.md:57 Rule carries three different names across the files, hurting grep-ability R3 Razor/Gon Yes
CRF-23 P2 Author fixed (15af9dc) content-guidelines.md:114 Rung-2 example asserts UI labels that are aria-label only, not visible text; CRF-14 fix introduced a false claim R4 Netero/Bisky/Hisoka/Mafuuu/Pariston/Gon/Leorio/Razor/Meruem Yes
CRF-24 P2 Deferred (DOCS-729) write-docs/SKILL.md:119 Citation-only rule reachable only via cross-file links no CI check validates (linkspector excludes docs/.style, .claude) R4 Bisky P2/Hisoka P3/Meruem Yes
CRF-25 P2 Author fixed (15af9dc) content-guidelines.md:118 Rung 3 says name reader by role in body prose; voice-and-tone requires second person; content-guidelines wins on conflict R4 Hisoka P2/Pen Botter P3 Yes
CRF-26 P2 Author fixed (15af9dc) .claude/docs/DOCS_STYLE_GUIDE.md:259 Qualifier covers only Specific Numbers; Permission Actions (RBAC) + Key Principles unqualified; lossy restatement R4 Mafu-san P1/Pariston/Gon/Leorio P2/Hisoka/Mafuuu/Razor/Meruem P3 Yes
CRF-27 P3 Author fixed (15af9dc) content-guidelines.md:103 "pick the highest rung" ambiguous over a 1-3 list; overlapping rungs R4 Gon/Leorio/Razor/Meruem Yes
CRF-28 Nit Author fixed (15af9dc) content-guidelines.md:129 Cross-links to word-choice/audience-and-scope lack anchors; filename link text R4 Bisky/Hisoka/Mafu-san/Mafuuu/Gon/Leorio/Pariston/Pen Botter/Meruem Yes
CRF-29 Nit Author fixed (15af9dc) write-docs/SKILL.md:121 Application note restates the step-1 sentence it links from R4 Netero/Razor/Meruem Yes
CRF-30 P2 Author fixed (7495cc6) word-choice.md:442 CRF-13 back-link opens "same boundary applies" under a keep-out list and routes identifiers to the PR description; strips values rung 1 requires R6 Mafu-san/Pariston/Razor P2, Hisoka/Zoro P3, Mafuuu Yes
CRF-31 P2 Author fixed (7495cc6) content-guidelines.md:118 Rung-2 example reasons from one surface; interrupting renders as visible text (AssistantOutput.tsx:24), so "rung 2 offers nothing" over-generalizes R6 Hisoka P2, Bisky P3 Yes
CRF-32 P3 Author fixed (7495cc6) doc-check/SKILL.md:113 CRF-19 disclosure has no reviewer-side check; doc-check flags present identifiers only, not missing pointers/absent values R6 Bisky/Hisoka/Mafu-san/Razor P3, Netero/Pariston Note Yes
CRF-33 P3 Author fixed (7495cc6) write-docs/SKILL.md:199 Checklist item drops "(comment or review thread)" qualifier and restates canonical wording; reads as permission to use PR description R6 Mafuuu/Mafu-san/Razor Yes
CRF-34 P3 Author fixed (7495cc6) content-guidelines.md:127 "whoever re-verifies later" overclaims; a PR review thread is not reachable from the page; commit message is closer R6 Pariston/Mafuuu P3, Razor Yes
CRF-35 P3 Author fixed (7495cc6) content-guidelines.md:130 Related-rules list omits the two in-file homes; routing table sends implementation detail to Engineering docs, diverging from "PR discussion" R6 Netero/Razor Yes
CRF-36 Nit Author fixed (7495cc6) word-choice.md:442 New paragraph hard-wrapped; breaks one-sentence-per-line convention R6 Netero/Hisoka/Mafu-san/Mafuuu/Razor/Zoro Yes
CRF-37 Nit Author fixed (7495cc6) content-guidelines.md:96 "see" used as navigational verb (word-choice bans it); CRF-20 fix left "See" on line 183 R6 Netero/Hisoka/Mafuuu/Razor/Zoro Yes
CRF-38 Nit Author fixed (7495cc6) .claude/docs/DOCS_STYLE_GUIDE.md:370 Key Principles item 2 comma parses the qualifier as a fourth list item R6 Mafu-san/Zoro Yes
CRF-39 P2 Contested R9 (venue is a human policy decision; escalated to docs owner) content-guidelines.md:127 Disclosure venue destroyed at squash-merge (commit message discarded, PR description forbidden, review comment not blame-reachable); CRF-34 fix built on a false merge premise R8 Mafu-san P1, Hisoka/Pariston/Chopper P2, Mafuuu/Razor P3 Yes
CRF-40 P2 Silent R9 (no fix; blanket deferral, no ticket) doc-check/SKILL.md:120 doc-check disclosure check reads inputs the workflow never fetches (commit messages/review comments) and does not fire on added pages R8 Netero/Hisoka P2, Mafuuu/Pariston/Razor/Chopper P3 Yes
CRF-41 P2 Silent R9 (no fix; blanket deferral, no ticket) content-guidelines.md:121 CRF-31 fix left the auto-archive claim on a "page describing sidebar behavior"; page/claim mismatch and dangling "never selected" R8 Mafuuu P2, Netero/Bisky/Razor/Chopper P3 Yes
CRF-42 P2 Silent R9 (no fix; blanket deferral, no ticket) content-guidelines.md:110 Rung 2 itself is not surface-scoped (only the example is); the enum still resolves at two rungs; root cause of CRF-31/CRF-12 R8 Bisky Yes
CRF-43 P3 Silent R9 (no fix; blanket deferral, no ticket) content-guidelines.md:122 Rung-3 paraphrase drops interrupting (query excludes running/interrupting/requires_action) and reuses "waiting" for the archived waiting/Idle status R8 Bisky/Mafuuu P3, Pariston/Chopper Note Yes
CRF-44 P3 Silent R9 (no fix; blanket deferral, no ticket) content-guidelines.md:29 CRF-37 "see" fix was instance-not-class; 5 navigational "see" remain (lines 29/154/301/401/435); third instance-not-class fix in this PR R8 Mafu-san Yes
CRF-45 Nit Silent R9 (no fix; blanket deferral, no ticket) content-guidelines.md:410 Exclusion catalog "Deep internals" entry has no back-link to the new rule; catalog is declared canonical R8 Hisoka P3, Netero/Mafu-san/Mafuuu/Razor Note, Bisky Yes
CRF-46 Nit Silent R9 (no fix; blanket deferral, no ticket) .claude/docs/DOCS_STYLE_GUIDE.md:251 "Everything in this section" overclaims; Accuracy Standards has non-value subsections the ladder does not govern R8 Razor Yes

Round log

Round 9 update

BLOCKED (churn guard). No commit since round 8 (head unchanged at 7495cc6). Author posted a top-level comment pausing the loop pending a human policy decision on the disclosure venue (CRF-39), proposing to sanction a collapsed "verification evidence" details block in the PR description + amend PR_STYLE_GUIDE, then fix CRF-39 to CRF-46 in one final round, or merge over them. Churn guard: 1 contested (CRF-39, legitimate human/policy decision), 7 silent (CRF-40 to CRF-46: no fix, bundled into a ticketless "final round" promise). CRF-40 to CRF-46 do not depend on the venue decision. No panel, no Netero. Review blocked pending a human decision on CRF-39 and either fixes or tickets for CRF-40 to CRF-46. Reviewed against 7495cc6 (unchanged).

Contested and acknowledged

CRF-39 (P2, content-guidelines.md:127) - stripped-identifier disclosure venue

  • Finding: The rule routes the stripped-identifier pointer to the commit message ("one git blame away") and write-docs forbids the PR description, but coder/coder squash-merges, so the commit message is discarded at merge and the PR description is the surviving, blame-reachable body. Review comments collapse when resolved. No venue satisfies durability + PR_STYLE_GUIDE's "no implementation details in the description" simultaneously.
  • Author defense (R9, top-level comment IC_kwDOGkVX1s8AAAABQuTl9A): Accepts the analysis. Enumerates each venue rejected across rounds 2/5/8, states no venue satisfies every constraint, notes the de facto repo practice is a collapsed details block in the PR description (e.g. docs: document org-scoped admin configuration for agents #28482), and proposes sanctioning that pattern with a PR_STYLE_GUIDE amendment. Escalates to the docs owner as a policy decision.
  • Status: Contested; needs a human policy decision (docs owner). Not disposable by the panel. The venue analysis is sound; the resolution (sanction a PR-description evidence block vs keep the pointer best-effort vs merge over it) is a human call.

Round 8 (panel re-review)

Churn guard PROCEED (all 10 round-6 findings addressed in 7495cc6). Panel re-review (always-on 5 + Razor + Chopper wildcard + Netero). Verified CRF-30/31-factual/26/20/36/37/38 fixed. But the round-6 fixes again introduced new defects, and the disclosure mechanism (CRF-19 lineage) is now non-functional end to end: CRF-39 (P2, 6 reviewers, Mafu-san P1): the commit-message venue is destroyed at squash-merge (verified: origin/main is single-parent (#N) commits, PR description is the body) and write-docs forbids the PR description, the surviving venue; CRF-40 (P2): doc-check is told to confirm the pointer in commit messages/review comments its workflow never fetches, and the check does not fire on added pages. Plus CRF-41 (P2 example page/claim mismatch), CRF-42 (P2 rung-2 root cause still unscoped), CRF-43 (P3 paraphrase drops interrupting), CRF-44 (P3 "see" instance-not-class, third recurrence), CRF-45/46 (Nit). No P0/P1 by orchestrator rating (Mafu-san rated CRF-39 P1), so COMMENT. Verified squash-merge, doc-check inputs, rung-2 text, and the chats.sql exclusion myself. Reviewed against ac5fac0..7495cc6.

Round 8 (churn guard)

Churn guard PROCEED. Commit 7495cc6 (+28 -25) addressed all 10 round-6 findings (CRF-30 to CRF-38 + the CRF-9 body re-raise), 0 silent, 0 deferred new. Panel re-review to verify the wording fixes (which have introduced regressions in prior rounds): always-on 5 + Razor + Chopper (wildcard) + Netero advisory. Deferred-with-ticket findings unchanged (CRF-4/5, CRF-10/24, CRF-21). Reviewed against ac5fac0..7495cc6.

Round 7 update

BLOCKED (churn guard). No commit since round 6 (head unchanged at ac5fac0); the only new activity is a /coder-agents-review re-trigger. All 9 round-6 findings (CRF-30 to CRF-38: 2 P2, 4 P3, 3 Nit) are silent, no fix and no reply. No panel, no Netero. Deferred-with-ticket findings (CRF-4/5, CRF-10/24, CRF-21) unchanged. Review blocked until the author fixes or answers the round-6 findings, especially CRF-30 and CRF-31 (P2). Reviewed against ac5fac0 (unchanged).

Round 6 (panel re-review)

Churn guard PROCEED (CRF-13, CRF-19 addressed). Panel re-review (always-on 5 + Razor + Zoro wildcard + Netero). Verified CRF-13/19/23/26 fixed. But the two round-5 fixes introduced new wording defects. CRF-30 (P2, 6 reviewers): the word-choice back-link opens "same boundary applies" under a keep-out list and sits above a sentence naming the PR description, routing stripped identifiers where the canonical rule and PR_STYLE_GUIDE forbid, and framing rung-1-required values as keep-out. CRF-31 (P2): the rung-2 example over-generalizes from the sidebar; verified interrupting renders as visible text in AssistantOutput.tsx:24. Plus CRF-32/33/34/35 (P3: unenforced disclosure, checklist qualifier drop, re-verifier overclaim, related-rules destination divergence) and CRF-36/37/38 (Nit). Re-raised CRF-9 in the body (description still says "three citations", omits word-choice.md). No P0/P1, so COMMENT. Verified interrupting visible-text render and the word-choice wording myself. Reviewed against 15af9dc..ac5fac0.

Round 6 (churn guard + panel)

Churn guard PROCEED. Commit ac5fac0 addressed the two round-5 blockers: word-choice.md now back-links the canonical rule (CRF-13), and the reviewer pointer is unconditional with the write-docs checklist requiring stripped identifiers be named (CRF-19). Author confirmed the round-5 silence was the resolved-thread tooling gap. 5 findings deferred with tickets (CRF-4/5/24/10/21), 0 silent. Panel re-review (small +12 -4 fix): always-on 5 + Razor + Zoro (wildcard), plus Netero advisory. Reviewed against 15af9dc..ac5fac0.

Round 5 update

BLOCKED (churn guard). New commit 15af9dc addressed 7 findings (CRF-9, CRF-23, CRF-25, CRF-26, CRF-27, CRF-28, CRF-29) and left CRF-24 deferred (DOCS-729). But CRF-13 (P2) and CRF-19 (P3) are silent: no code change and no author reply. No panel, no Netero. Likely contributing factor: the round-4 re-raises posted as replies but the thread-unresolve failed on bot permissions, so both threads still show [Resolved] and were probably missed. Review blocked until the author responds or pushes fixes for CRF-13 and CRF-19. Reviewed against 99531a2..15af9dc.

Round 4 (panel re-review)

Churn guard PROCEED. Panel re-review of the restructure (10 reviewers + Netero, wildcard Meruem). The round-3 fixes are close but introduced new defects and left one class incomplete. Nine reviewers independently traced the rung-2 worked example to aria-label-only rendering (CRF-23, verified: statusConfig.ts labels are aria-label on an icon in ChatTreeNode.tsx:225 / ChatSearchResults.tsx:293, no visible text). New: CRF-23 (P2 aria-label example), CRF-24 (P2 link integrity unenforced), CRF-25 (P2 rung-3 vs voice-and-tone), CRF-26 (P2 DOCS_STYLE_GUIDE Permission Actions/Key Principles unqualified; third instance-not-class fix, Mafu-san rated P1), CRF-27 (P3 highest-rung), CRF-28/29 (Nit). Re-raised CRF-9, CRF-13, CRF-19. Verified aria-label, Permission Actions gap, voice-and-tone conflict, and AGENTS.md @-imports DOCS_STYLE_GUIDE.md (not content-guidelines.md). No P0/P1, so COMMENT. Reviewed against acaee4d..99531a2.

Round 4 (churn guard)

PROCEED. 11 addressed in 99531a2 (CRF-11 to CRF-20, CRF-22), 1 deferred with ticket (CRF-21 -> DOCS-730), 0 silent. Author restructured the reader test into a three-rung ladder, qualified DOCS_STYLE_GUIDE.md, cut both skills to citation-only, rewrote the example to use UI labels, and fixed the broken link. Panel re-review this round to verify the restructure. Reviewed against acaee4d..99531a2.

Round 3 (panel)

Panel's first review (rounds 1-2 were Netero-only gates). 10 reviewers: Bisky, Hisoka, Mafu-san, Mafuuu, Pariston, Gon, Leorio, Razor, Pen Botter (trigger-matched) + Kite (wildcard). Strong convergence: reader-test predicate is decidable both ways on its own example (6 reviewers), the exact-values rule is still unqualified in the always-loaded DOCS_STYLE_GUIDE.md (5 reviewers), the skills restate and already drifted from the canonical copy (4 reviewers). 5 P2, 4 P3, 2 P4, 1 Nit new (CRF-11 to CRF-22). Verified requires_action semantics (ARCHITECTURE.md:75, waiting on user tool-results) and the DOCS_STYLE_GUIDE duplication myself. No P0/P1, so COMMENT. Reviewed against fea48b2..acaee4d.

Round 3 (churn guard + panel)

PROCEED. 4 addressed (CRF-6/7/8/9 fixed in acaee4d; CRF-8 fixed in code with no thread), 3 deferred with ticket (CRF-4/5 in DOCS-722 / #28570, CRF-10 in DOCS-729), 0 silent. CRF-6 title fix verified analytically: current PR title is scopeless chore:, which passes contrib.yaml's title check; the failing run (97942789806) is stale relative to the title edit and needs a re-run to clear (gh 401 blocks direct confirmation). Panel now mandatory (2 consecutive Netero-only rounds hit the cap); Netero (3a) skipped per the cap rule. Reviewed against fea48b2..acaee4d.

Round 2 (churn guard)

PROCEED. 3 addressed (CRF-1/2/3 fixed in fea48b2), 2 deferred with ticket (CRF-4/5 tracked in DOCS-722 / #28570), 0 silent. Author pushed the canonical statement into docs/.style/content-guidelines.md and made both skills cite it. Churn guard could not confirm #28570's state (gh 401 in worktree). Reviewed against e035627..fea48b2.

Round 2 (Netero)

Still pre-panel, so still Netero-only per the decision gate: Netero found a P1 (title check merge blocker) and a P2. Verified CRF-1/2/3 genuinely fixed. New: 1 P1, 1 P2, 1 P3, 1 Nit, 1 Note (CRF-6 to CRF-10). Second consecutive Netero-only round (cap is 2); round 3 forces the panel. Reviewed against ce59a86..fea48b2.

Round 1

Netero-only first-pass gate. Docs-only skill change (+38 -0, 2 files). No Law (effective additions 38, far below 1000). Netero found 1 P2, so per the Netero decision gate the panel is deferred to the next round. 1 P2, 3 P3, 1 Note. Reviewed against ce59a86..e035627.

About deep-review

CRF = Coder Review Finding (P0-P4, Nit, Note)

Reviewer Focus
Bisky tests
Chopper ops/errors
Churn-guard change verification
Ging language modernization
Gon naming
Hisoka edge cases
Killua perf
Kite change integrity
Knov contracts
Knuckle SQL
Komugi flake/determinism
Kurapika security
Law decomposition
Leorio docs
Luffy product
Mafu-san process
Mafuuu contracts
Melody dispatch/pairing
Meruem structural
Nami frontend
Netero mechanical checks
Pariston premise testing
Pen-botter product gaps
Razor verification
Robin duplication
Ryosuke Go arch
Takumi concurrency
Zoro shape

🤖 Managed by Coder Agents.

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First-pass review only. These are mechanical findings from Netero; the full review panel has not yet reviewed this PR. The panel will review after these findings are addressed, so more findings may follow.

The change does something worth doing: it turns a repeated review correction into a written rule, with a concrete before/after example, an explicit reference-docs exception, an anti-pattern bullet, and a pre-handoff checklist item. The reader test ("does the reader type or receive the identifier?") is a sharp, checkable formulation.

Severity count: 1 P2, 3 P3, 1 Note.

The throughline of the findings is that the PR codifies the rule but does not finish codifying it. The rule lives in two skill copies rather than in the canonical docs/.style/content-guidelines.md the skills defer to, and write-docs' own "Feeding lessons back" section says to "add it there in the same change set." One canonical statement plus two links would resolve CRF-1, CRF-2, and the drift risk in one move. Separately, the write-docs section states two different tests (a category list and a reader test) that disagree on how-to pages that quote an API field. And the page that motivated the rule still violates it in the live tree, which the no-follow-up assumption makes permanent unless fixed here or ticketed.

As Netero put it: identifiers published where the reader never receives them are "unverifiable by the reader and rot unnoticed" - and the motivating page proves it, listing pending and paused, neither of which is in the actual status enum.

🤖 This review was automatically generated with Coder Agents.

Comment thread .claude/skills/write-docs/SKILL.md
Comment thread .claude/skills/doc-check/SKILL.md
Comment thread .claude/skills/write-docs/SKILL.md Outdated
Comment thread .claude/skills/doc-check/SKILL.md
Comment thread .claude/skills/write-docs/SKILL.md Outdated
…-claim

Round 1 review: the rule belongs in docs/.style per the skills' own
precedence and feedback-loop rules. One canonical statement in
content-guidelines.md; both skills now cite it, and the reader test
(does the reader type or receive the identifier) is the rule, with page
categories demoted to examples.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First-pass round 2, still Netero-only: the panel has not yet reviewed this PR and will review next round, once the merge blocker below is cleared. More findings may follow from the panel.

Good progress. Netero verified that round 1's CRF-1, CRF-2, and CRF-3 are genuinely fixed: the canonical statement now lives in docs/.style/content-guidelines.md, both skills cite it instead of restating it, and the reader test is the rule with the category list demoted to examples ("The test decides, not the page category"). CRF-4 and CRF-5 are deferred to PR #28570 / Linear DOCS-722; that is a legitimate deferral with a ticket, though I could not confirm #28570's state from the review environment (gh returns 401 here), so that verification is on the author.

The blocker: the fix moved the rule into docs/.style/content-guidelines.md, but the PR title scope is still .claude/skills, which does not contain that file. The title CI check fails deterministically (CI shows the title job as the only failure), so the PR cannot merge until the title is corrected. Dropping the scope fixes it, e.g. chore: make content-guidelines the canonical home for the evidence-versus-claim rule.

Severity count (new this round): 1 P1, 1 P2, 1 P3, 1 Nit, 1 Note.

The P2 is worth attention: promoting the rule into the canonical guidelines also promoted a disposal target that no project rule defines. As Netero put it, "an agent cannot satisfy both, and a reviewer applying the PR style guide will flag exactly the block the docs skill told the author to add."


docs/.style/content-guidelines.md:87

P3 [CRF-8] The new reader test qualifies "Verify against the code; document exact values", but that section carries no forward pointer and still reads as unconditional. (Netero)

The link is one-way. The new section points back to "Verify against the code" for the yes branch, but the "Verify against the code" section still reads unconditionally ("Docs claims should be checked against the actual implementation"), with an RBAC action name as its lead example, which the PR description names as one of the leaks this rule exists to stop. An agent that greps only that section (as doc-check reads section by section) gets guidance the very next section overrides. Fix: one clause at the end of the section, e.g. "subject to the reader test in the next section." Severity kept low because the sections are adjacent and a top-down reader resolves the order correctly.

🤖

🤖 This review was automatically generated with Coder Agents.

Comment thread docs/.style/content-guidelines.md
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md
Comment thread .claude/skills/write-docs/SKILL.md
…the exact-values rule

Round 2: PR_STYLE_GUIDE.md forbids implementation detail in PR
descriptions, so the rule no longer invents an evidence section; and
the verify-exact-values section now points forward to the reader test.
@nickvigilante nickvigilante changed the title chore(.claude/skills): add evidence-versus-claim rule to write-docs and doc-check chore: make content-guidelines the canonical home for the evidence-versus-claim rule Aug 25, 2026

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Full panel review (rounds 1-2 were mechanical first-pass gates; this is the panel's first pass). Ten reviewers. The core idea is right and worth shipping: verifying a behavior against the source and publishing the source's vocabulary are different acts, and Pariston confirmed no existing rule stated that. The mechanical layer is clean (Vale, markdownlint, emdash, all anchors resolve), the example's enum values are real, and prior fixes hold: CRF-7 (the invented "evidence section" is gone; routing to a PR comment does not touch anything PR_STYLE_GUIDE.md forbids) and the CRF-6 title fix (the title is now scopeless, which passes contrib.yaml; the still-red title run is stale and needs a re-run to clear).

Where the panel converged, three findings undermine the PR's own goal and should be resolved before merge:

  1. The reader test is decidable both ways on its own worked example (6 reviewers). "Does the reader type or receive it?" is unscoped, and chat statuses are both public API response fields and rendered UI labels, so an author can answer "yes" and keep exactly the identifiers the example says to strip. Scope it to the task the page describes, and pick one predicate: the test says "type or receive", the justification says "sees", and the pre-existing principle at line 67 says "sees, types, and gets back".

  2. The exact-values rule still stands unqualified in the always-loaded agent file (5 reviewers). CRF-8 added the forward pointer to content-guidelines.md, but .claude/docs/DOCS_STYLE_GUIDE.md "Accuracy Standards" repeats "document exact values / exact RBAC action names from code" with no reader test and no link, and AGENTS.md routes agents there for docs work. The failure this PR exists to prevent is exactly what that file instructs.

  3. The skills cite the canonical rule and then restate its substance, and the copies already drifted inside this one PR (4 reviewers): doc-check dropped "database" from the identifier list, write-docs dropped "or types a flag" and added "when asked". write-docs' own rule two sections down says "Do not reproduce the catalog here, so it cannot drift from the source."

Severity count (new this round): 5 P2, 4 P3, 2 P4, 1 Nit. No P0/P1. CRF-4/5 (DOCS-722 / #28570) and CRF-10 (DOCS-729) remain deferred with tickets; I still cannot confirm those ticket states from the review environment.

Smaller notes not filed as separate comments: the new heading names a metaphor while every sibling heading names an action (Leorio); the bullet and the Why: state the same rationale twice, against this file's one-fact-one-place habit (Gon, Leorio); "workflow step 1" is a positional reference where the file otherwise links by name, and the new checklist item sits between two PR-mechanics items instead of beside the content item it qualifies (Gon); the forward pointer CRF-8 added is placed inside the Why: block rather than above it (Gon); and all three commit subjects plus the PR title exceed the 72-char cap in CONTRIBUTING.md (Leorio).

A verified aside from Kite worth keeping: the example's enum values check out against the migration, so "a rule about verifying against the code that shipped a fabricated example would have been the obvious own goal; it did not happen."


.claude/docs/DOCS_STYLE_GUIDE.md:253

P2 [CRF-11] The exact-values rule still stands unqualified in the always-loaded agent file; the CRF-8 fix covered one copy, not the class. (Hisoka P2, Mafu-san P2, Mafuuu P2, Razor P2, Kite P2)

.claude/docs/DOCS_STYLE_GUIDE.md "Accuracy Standards" says "Document exact values from code", "Use exact RBAC action names from code (e.g., view_insights ...)", with no reader test and no link to the new canonical section. This is not a stale sibling: AGENTS.md routes "Docs structure and research" to this file, and write-docs/SKILL.md cites it as the agent-facing companion, so an agent doing docs work loads the unqualified rule directly into context. As Kite put it, the "content guidelines govern on conflict" banner does not rescue it, because "there is no conflict to resolve: 'document exact values' and 'only where the reader types or receives them' read as compatible until you know the second rule exists." The RBAC-names leak in the first revision of #28482 is exactly what this file instructs.

Fix: match the citation pattern this same file already uses twice ("Documentation lands with the change", troubleshooting) - add one sentence under "Accuracy Standards" linking #evidence-justifies-a-claim-it-does-not-belong-in-the-claim, keeping the concrete examples inline.

🤖

docs/.style/content-guidelines.md:165

P4 [CRF-20] Broken relative link to the feature-stages page. (Razor)

[Feature stages](../../install/releases/feature-stages.md) resolves from docs/.style/ to <repo>/install/releases/feature-stages.md, which does not exist; the file is at docs/install/releases/feature-stages.md, so the link needs one fewer ../. Introduced in an ancestor of this PR's base, so not this PR's regression, but this PR edits the file and the fix is one character.

🤖

🤖 This review was automatically generated with Coder Agents.

Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/skills/doc-check/SKILL.md Outdated
Comment thread .claude/skills/doc-check/SKILL.md Outdated
Comment thread .claude/skills/write-docs/SKILL.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md
Comment thread .claude/skills/doc-check/SKILL.md Outdated
…onical rule

Round 3: the test is now scoped to the task the page documents with an
exact-value / product-label / reader's-terms ladder; skills cite the
canonical rule without restating it; doc-check flags only pages the
change touches; DOCS_STYLE_GUIDE's exact-values section gains the same
qualifier; and a pre-existing feature-stages link is repaired.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Panel re-review of the restructure. Real progress: the three-rung ladder is a better shape than the flat predicate, and it decides the motivating case cleanly (Pen Botter applied it to all three identifiers on chat-auto-archive.md and each landed on a rung without ambiguity). I verified the round-3 fixes landed: the skills are genuinely citation-only, the broken feature-stages link is fixed, rung 1's API claim is true, and the DOCS_STYLE_GUIDE.md exact-values section now carries a qualifier. CRF-21 is now ticketed (DOCS-730). Nice work turning six rounds of findings into a coherent rule.

But this round the fixes introduced new defects, and one class is still open. The headline: the CRF-14 fix replaced the vague paraphrase with three UI labels, and nine reviewers independently opened the render path and found those labels are aria-label values on an icon, never visible text. I confirmed it: statusConfig.ts sets label: "Working" etc., and both consumers pass it to aria-label on a role="img" icon (ChatTreeNode.tsx:225, ChatSearchResults.tsx:293) with no tooltip or text node. A sighted admin sees a spinner, a pause glyph, a triangle. So the canonical rule's one worked example, in a rule about not publishing strings the reader never receives, publishes three strings the reader never sees, and calls them screen-verifiable. As Bisky put it: "the last three rounds of this PR are a demonstration of what happens to unwatched claims."

The other new issues: rung 3 tells writers to name the reader by role in body prose, which voice-and-tone.md forbids in favor of second person (and content-guidelines governs on conflict); the citation-only design left the rule reachable only through cross-file links that no CI check validates (linkspector excludes docs/.style and .claude), so the next heading rename makes the rule disappear rather than degrade; and "pick the highest rung" reads backwards on a list numbered 1 to 3.

One process note worth surfacing: the DOCS_STYLE_GUIDE.md qualifier landed on the "Specific Numbers Matter" subsection only, leaving "Permission Actions" (exact RBAC names, the #28482 leak class) and "Key Principles" item 2 unqualified in the file AGENTS.md auto-loads. This is the third round a class-level finding (CRF-8, CRF-11, now this) got an instance-level fix; Mafu-san rated it P1 on that pattern. Moving the qualifier up under ## Accuracy Standards, and making it citation-only, closes the class in one move.

Severity count (new this round): 4 P2, 1 P3, 2 Nit. Re-raised CRF-9, CRF-13, CRF-19. No P0/P1. The rule is one honest example and one config line away from done.

🤖 This review was automatically generated with Coder Agents.

Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/docs/DOCS_STYLE_GUIDE.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/skills/write-docs/SKILL.md
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/skills/write-docs/SKILL.md Outdated
Round 4: the chat sidebar strings are accessibility labels, not visible
text, so the worked example now walks rungs 1 and 3 and rung 2 warns
about aria-only labels; the rung order reads first-match; rung 3 defers
to voice-and-tone instead of prescribing role naming; the exact-values
qualifier covers all of Accuracy Standards and Key Principles; anchors
added to the related-rule links; duplicate application note removed.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review is blocked this round. Commit 15af9dc resolved most of round 4 cleanly: the rung-2 example no longer claims aria-label strings are visible (CRF-23), the DOCS_STYLE_GUIDE qualifier moved up to govern Permission Actions and Key Principles and dropped the lossy restatement (CRF-26), rung 3 now defers to the second-person voice rules (CRF-25), "first rung that applies" replaced "highest rung" (CRF-27), the cross-link anchors and the redundant application note are fixed (CRF-28, CRF-29), and the PR description now describes the ladder and all four files (CRF-9). CRF-24 (link-integrity CI coverage) is deferred to DOCS-729. That is good work.

Two findings from round 4 are unaddressed, with no code change and no reply, so the panel will not re-run until they are resolved:

  • CRF-13 (P2): the prose-edit path never reaches the rule. AGENTS.md routes prose-only edits to existing docs pages at the prose style guide, and word-choice.md's "Keep internal-only references out of published docs" still has no back-link to the new canonical rule. A writer fixing a paragraph on an existing admin page reaches word-choice, not the content guidelines, and can add an identifier the rule forbids. Fix: add a cross-reference from word-choice.md back to the canonical rule (the content-guidelines side already links out to word-choice).

  • CRF-19 (P3): the reviewer pointer is reactive. "When the reviewer needs the pointer, give it in the PR discussion" fires only if a reviewer asks, and nothing in the write-docs checklist requires the author to record which file and symbol a stripped identifier came from. Re-verifying a rung-2/3 paraphrase later means re-deriving the source. Fix: make the write-docs checklist item require naming the stripped identifiers and their symbols in the PR discussion, so the pointer is produced unprompted.

Probable reason these were missed: I re-raised both in round 4 as replies, but the bot cannot unresolve GitHub threads (the API returns "Resource not accessible by integration"), so both threads still display as resolved and the replies are collapsed. Please look at the CRF-13 thread on content-guidelines.md and the CRF-19 thread, or address the two fixes above and re-request review.

Either fix the two, or reply explaining why each should not be fixed (a bare "won't fix" is not a resolution; the justification is evaluated against the finding). Once either happens, the next round proceeds to the full panel.

🤖 This review was automatically generated with Coder Agents.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

1 similar comment

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The two round-5 blockers are resolved: word-choice.md now back-links the canonical rule (CRF-13) and the stripped-identifier pointer is unconditional with the write-docs checklist requiring it (CRF-19). Thanks for confirming the round-5 silence was the resolved-thread tooling gap; that matched our read. I also re-verified the earlier fixes hold: the rung-2 aria-label correction (CRF-23), the exact-values qualifier now governing the whole Accuracy Standards section (CRF-26), rung 1 against the API reference, and rung 3 against the live auto-archive query. The link plumbing all resolves.

The recurring pattern is back, though: both round-5 fixes introduced a new wording defect, which is the same thing that happened to the worked example in rounds 3 and 4. Two are P2:

  1. CRF-30: the word-choice back-link (the CRF-13 fix) opens "The same boundary applies to implementation identifiers such as enum values, database column names, and internal symbols" and sits inside the "Keep these out of published pages" list, directly above the sentence "A pull request description ... is the right place to cite an internal issue ID or a private link." A prose-editor on the exact path CRF-13 was fixed to serve reads enum values as a keep-out item and routes the pointer to the PR description, which the canonical rule and PR_STYLE_GUIDE.md deliberately exclude. As Razor put it, that distinction "was CRF-7. This paragraph's placement gives it back." Fix: lead with the difference (a related, conditional boundary), drop "the same," and move the paragraph below the list's closing sentence.

  2. CRF-31: the rung-2 worked example reasons from a single surface. It concludes the chat-status enum "offers nothing to quote" because the sidebar shows only icons, but I confirmed interrupting renders as visible text in the conversation view (AssistantOutput.tsx:24, {interrupting ? "Interrupting" : "Thinking"}, asserted by getByText("Interrupting")). The example is correct for the auto-archive admin page, whose reader works in the sidebar, but the reasoning clause generalizes past that surface, and a writer who copies it onto a conversation-view page strips a label the reader can see, reproducing exactly CRF-14. Scope rung 2 and the example to the reader's surface.

Four P3s follow from the same two fixes: the disclosure CRF-19 made mandatory has no reviewer-side check (doc-check only flags identifiers that are present), the write-docs checklist item drops the "comment or review thread" qualifier, the "whoever re-verifies later" claim overreaches (a PR thread is not reachable from the page), and the Related-rules list still skips the two in-file homes, one of which routes implementation detail to Engineering docs rather than the PR discussion.

Process note, re-raising CRF-9: the description still says "one canonical rule with three citations" and does not list word-choice.md, now a fourth citing home and the file carrying CRF-30. Update the count and add the bullet.

Severity count (new this round): 2 P2, 4 P3, 3 Nit. No P0/P1. Deferred with tickets: CRF-4/5 (DOCS-722), CRF-10/24 (DOCS-729), CRF-21 (DOCS-730).

🤖 This review was automatically generated with Coder Agents.

Comment thread docs/.style/style-guide/word-choice.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/skills/doc-check/SKILL.md
Comment thread .claude/skills/write-docs/SKILL.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/style-guide/word-choice.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/docs/DOCS_STYLE_GUIDE.md Outdated
Relocate and recondition the word-choice back-link, scope the rung-2
example claim to the sidebar surface, route stripped-identifier
pointers to the commit message or a review comment with a reviewer-side
doc-check confirmation, link the routing table as a related rule, and
apply refer-to and list-grammar fixes.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review is blocked. No commit has been pushed since round 6 (head is still ac5fac0), and none of the nine round-6 findings has a code change or a reply, so there is nothing new to review. The /coder-agents-review trigger re-runs the review; it does not resolve findings.

Unaddressed from round 6, still open:

  • CRF-30 (P2): the word-choice back-link opens "The same boundary applies" inside the "keep these out of published pages" list and sits above the sentence naming the PR description, so a prose-editor strips exact values rung 1 requires and routes the pointer where the canonical rule and PR_STYLE_GUIDE forbid.
  • CRF-31 (P2): the rung-2 worked example concludes chat status "offers nothing to quote" from the sidebar alone, but interrupting renders as visible text in the conversation view (AssistantOutput.tsx:24); scope rung 2 and the example to the reader's surface.
  • CRF-32 (P3): the CRF-19 disclosure has no reviewer-side check; doc-check flags only identifiers that are present.
  • CRF-33 (P3): the write-docs checklist item drops the "(a comment or review thread)" qualifier and restates canonical wording.
  • CRF-34 (P3): "whoever re-verifies the paraphrase later" overclaims; a PR review thread is not reachable from the page.
  • CRF-35 (P3): the Related-rules list omits the two in-file homes; the routing table still sends implementation detail to Engineering docs, not the PR discussion.
  • CRF-36, CRF-37, CRF-38 (Nit): the hard-wrapped word-choice paragraph, the navigational "see," and the Key Principles comma.

The deferred-with-ticket findings (CRF-4/5 in DOCS-722, CRF-10/24 in DOCS-729, CRF-21 in DOCS-730) are fine and are not blocking.

To unblock: push fixes for the round-6 findings, or reply on each thread explaining why it should not be fixed (a bare "won't fix" is not a resolution; the justification is evaluated against the finding). Once either happens, the next round runs the full panel. At minimum, CRF-30 and CRF-31 (both P2) need to be resolved before this is ready to merge.

🤖 This review was automatically generated with Coder Agents.

Copy link
Copy Markdown
Contributor Author

Round 7 raced the push: commit 7495cc6 (round-6 fixes for CRF-30 to CRF-38) and the nine thread replies were live before the trigger, but the review evaluated the previous head ac5fac0. Re-requesting against the current head. Generated by Coder Agents on behalf of @nickvigilante.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

Copy link
Copy Markdown
Contributor Author

Round 7 raced the push: commit 7495cc6 (round-6 fixes for CRF-30 to CRF-38) and the nine thread replies were live before the trigger, but the review evaluated the previous head ac5fac0. Re-requesting against the current head. Generated by Coder Agents on behalf of @nickvigilante.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

Copy link
Copy Markdown
Contributor Author

Round 7 raced the push: commit 7495cc6 (round-6 fixes for CRF-30 to CRF-38) and the nine thread replies were live before the trigger, but the review evaluated the previous head ac5fac0. Re-requesting against the current head. Generated by Coder Agents on behalf of @nickvigilante.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

Copy link
Copy Markdown
Contributor Author

Round 7 raced the push: commit 7495cc6 (round-6 fixes for CRF-30 to CRF-38) and the nine thread replies were live before the trigger, but the review evaluated the previous head ac5fac0. Re-requesting against the current head. Generated by Coder Agents on behalf of @nickvigilante.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Genuine progress: the round-6 findings are all addressed, and for the first time the worked example's factual claims check out against the code, which Chopper flagged as "the first round where the worked example's factual claims check out." CRF-30 (word-choice), CRF-26 (qualifier scope), CRF-36/37/38 (formatting), CRF-20 (link), and the factual half of CRF-31 (rung 2/3 wording matches the aria-label vs visible-text split) are verified fixed. The ladder itself is sound.

The recommendation this round is to stop rewording the stripped-identifier disclosure and rethink it, because it is now non-functional end to end, and it has been reworded in four rounds without checking how this repo actually works:

  • CRF-39 (P2): the rule routes the pointer to "the commit message" and justifies it with "one git blame away," and write-docs hardens it to "not the PR description." But coder/coder squash-merges: I confirmed the last commits on origin/main are single-parent (#NNNNN) commits whose body is the PR description. A branch commit message never reaches main, so git blame lands on a squash commit that, by this rule, must not carry the pointer. The rule sends the disclosure to the venue that is deleted and forbids the one that survives. Mafu-san rated this P1 on the pattern.
  • CRF-40 (P2): the reviewer-side check added for CRF-32 says "confirm the stripped identifier is named in the commit message or a review comment." doc-check's workflow fetches only gh pr diff/git diff, which carry neither. The check either no-ops or false-flags. It also fires only "when the diff strips an identifier," so on a newly authored page, the case the PR was written for, nothing triggers it.

Taken together, the disclosure control does not work in any path: the venue is discarded at merge, the checker cannot read it, and it does not fire on new pages. Either drop the durability and enforcement claims and make it best-effort, or design it as a unit (a PR-description trailer that survives squash-merge plus a doc-check input that can read it).

Separately, the CRF-31 rewrite fixed the over-generalization but introduced a page/claim mismatch:

  • CRF-41 (P2): the example now says "a page describing sidebar behavior falls to rung 3 and says chats ... are never selected." "Never selected" is auto-archive selection, not sidebar behavior, and "selected" has no antecedent. The fix swapped the page out from under the sentence. Restore the two-actor form (the auto-archive page, whose reader sees status in the sidebar).
  • CRF-42 (P2): the deeper cause is that rung 2 in the rule text is still not surface-scoped; only the example is. Run literally on the enum, interrupting (visible text in AssistantOutput.tsx) hits rung 2 while the others hit rung 3, so one enum resolves at two rungs. Scope rung 2 to the page's surface and say a set resolves at the lowest rung any member reaches.

P3s: the rung-3 paraphrase drops interrupting and reuses "waiting" for the archived waiting/Idle status (CRF-43); and CRF-37's "see" fix was again instance-not-class, leaving five navigational "see" in the same file (CRF-44), the third instance-not-class fix in this PR (CRF-11, CRF-20, now CRF-37). Two Nits round it out.

Severity count (new this round): 4 P2, 2 P3, 2 Nit. No P0/P1 by my rating. Deferred with tickets and not blocking: CRF-4/5 (DOCS-722), CRF-10/24 (DOCS-729), CRF-21 (DOCS-730).


docs/.style/content-guidelines.md:29

P3 [CRF-44] The CRF-37 "see" fix was instance-not-class; five navigational "see" remain in this file, and this is the third instance-not-class fix in the PR. (Mafu-san)

word-choice.md bans "see" as a navigational verb. The CRF-37 fix changed the two lines it was pointed at (96 and the CRF-20-adjacent 183) and left five siblings: lines 29, 154, 301, 401, 435 (line 70 is the legitimate observational sense). The author already crossed into pre-existing prose to fix 183, so this was not a scope decision. Same shape as CRF-11 (one file qualified, class missed) and CRF-20 (link fixed, sibling "see" missed). No tool catches these (Coder.SeeAlternatives is planned), and this is the style guide agents read, so the violations read as permission. Fix the five, or file a ticket naming them; a vague "sweep later" is a drop.

🤖

docs/.style/content-guidelines.md:410

Nit [CRF-45] The exclusion catalog's "Deep internals of how the code works" entry has no back-link to the new rule, and write-docs calls that catalog canonical. (Hisoka P3; Netero, Mafu-san, Mafuuu, Razor Note; Bisky)

CRF-35's fix added the forward link to the routing table with a scope-distinguishing clause, which resolved the divergence. The reverse path is still open: write-docs/SKILL.md names the catalog ("What does not belong in the docs") as the canonical catalog to check before adding a page, and its "Deep internals" entry, the nearest whole-topic sibling, does not point at the single-identifier ladder. An agent entering through the catalog never reaches the rule. One sentence in that entry closes it; low value on its own, worth folding into DOCS-730 if that sweep touches the file.

🤖

🤖 This review was automatically generated with Coder Agents.

Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/skills/doc-check/SKILL.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread docs/.style/content-guidelines.md Outdated
Comment thread .claude/docs/DOCS_STYLE_GUIDE.md Outdated

Copy link
Copy Markdown
Contributor Author

Round 7 raced the push: commit 7495cc6 (round-6 fixes for CRF-30 to CRF-38) and the nine thread replies were live before the trigger, but the review evaluated the previous head ac5fac0. Re-requesting against the current head. Generated by Coder Agents on behalf of @nickvigilante.

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

Copy link
Copy Markdown
Contributor Author

Pausing the automated review loop after round 8 pending a human policy decision.

The rule itself has been stable since round 4. Rounds 5-8 have iterated on one unresolved question: where does a stripped identifier's pointer live? Each candidate venue has now been rejected by a review round: a PR evidence section (round 2: PR_STYLE_GUIDE forbids implementation detail in descriptions), the PR discussion on request (round 5: reactive), the commit message or a review comment (round 8, CRF-39: squash-merge destroys commit messages and review comments collapse as outdated). No venue satisfies every constraint simultaneously, so this is a policy decision for the docs owner, not something further wording iterations can settle. Note the de facto team practice is a collapsible details section in the PR description (this repo's recent docs PRs, including #28482, use exactly that), which would require sanctioning that pattern in PR_STYLE_GUIDE.

@nickvigilante: proposed resolution is to sanction a collapsed "verification evidence" details block in the PR description for stripped identifiers and amend PR_STYLE_GUIDE accordingly, then I address CRF-39 to CRF-46 in one final round. Alternatively, review and merge over the remaining findings. Your call.

Generated by Coder Agents on behalf of @nickvigilante.

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review is blocked: no commit since round 8, so the eight round-8 findings are unaddressed in code.

On the disclosure venue (CRF-39): the escalation is correct, and the analysis holds. This is a genuine policy decision for the docs owner, not something more wording rounds can settle. Every candidate venue has been rejected for a real reason (PR evidence section in round 2, on-request PR discussion in round 5, commit message or review comment in round 8), and I verified the round-8 blocker myself: coder/coder squash-merges, so a branch commit message does not reach main and git blame lands on a squash commit whose body is the PR description, which the rule currently forbids. The proposed resolution, sanctioning a collapsed "verification evidence" details block in the PR description and amending PR_STYLE_GUIDE, is sound and matches both the de facto repo practice and Chopper's round-8 suggestion (a Stripped identifiers: trailer). Deciding between that, keeping the pointer best-effort with no durability claim, and merging over it is the docs owner's call. I can't dispose it from the panel.

The rest, though, is not gated on that decision and is still silent with no ticket. CRF-40 to CRF-46 are independent of where the pointer lives:

  • CRF-40 (P2): doc-check is told to confirm the pointer in a commit message or review comment its workflow never fetches, and the check does not fire on newly authored pages. This is a defect regardless of the venue chosen.
  • CRF-41 (P2): the worked example pins an auto-archive claim ("never selected") to "a page describing sidebar behavior," with a dangling verb. Pure wording.
  • CRF-42 (P2): rung 2's rule text is still not surface-scoped, so the enum resolves at two rungs. Pure wording.
  • CRF-43 (P3): the rung-3 paraphrase drops interrupting and reuses "waiting" for the archived waiting/Idle status.
  • CRF-44 (P3): five navigational "see" remain in content-guidelines.md.
  • CRF-45, CRF-46 (Nit): catalog back-link, and the "Everything in this section" overclaim.

Bundling these into "CRF-39 to CRF-46 in one final round" defers fixable, non-policy findings without a ticket. To unblock without waiting on the venue decision: fix CRF-40 to CRF-46 (or CRF-41/42/43/44 at minimum, which are one commit of wording), or file a tracking ticket for them as you did for DOCS-729/730. The venue decision (CRF-39) can proceed in parallel.

On the merge-over option: CRF-40 to CRF-46 are concrete defects, not policy tradeoffs, so merging over them ships known wording/enforcement bugs in the canonical rule. That is a human decision to make explicitly, not a default. The deferred-with-ticket findings (CRF-4/5 in DOCS-722, CRF-10/24 in DOCS-729, CRF-21 in DOCS-730) remain fine and are not blocking.

No panel ran this round. The next round runs the full panel once there is a commit addressing CRF-40 to CRF-46, or a ticket for them plus a recorded decision on CRF-39.

🤖 This review was automatically generated with Coder Agents.

Round 7 (CRF-39, 40, 41, 42, 43, 46):

- content-guidelines.md: scope rung 2 to a surface the page's task
  involves; resolve an identifier set at the lowest rung any member
  reaches; rewrite the worked example to a two-actor form (auto-archive
  page, sidebar surface) naming all three excluded statuses; make the
  stripped-identifier pointer best-effort and drop the false git-blame
  durability claim, since coder/coder squash-merges.
- doc-check/SKILL.md: scope the check to identifiers the diff adds or
  touches, and stop policing a disclosure doc-check cannot see.
- write-docs/SKILL.md: defer the checklist disclosure to the canonical
  rule instead of restating a venue.
- DOCS_STYLE_GUIDE.md: scope the Accuracy Standards qualifier to the
  exact-value instructions.
@nickvigilante nickvigilante changed the title chore: make content-guidelines the canonical home for the evidence-versus-claim rule chore: make content-guidelines canonical for evidence-versus-claim rule Aug 26, 2026
@nickvigilante
nickvigilante marked this pull request as ready for review August 26, 2026 16:05
…code-evidence-vs-claim-abstraction-rule-in-write-docs-and

# Conflicts:
#	docs/.style/content-guidelines.md
@nickvigilante
nickvigilante enabled auto-merge (squash) September 8, 2026 18:55
@nickvigilante
nickvigilante merged commit dbd4924 into main Sep 8, 2026
27 of 28 checks passed
@nickvigilante
nickvigilante deleted the vigilante/docs-728-encode-evidence-vs-claim-abstraction-rule-in-write-docs-and branch September 8, 2026 18:57
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 8, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants