Repository navigation
feat: extend research-documentation workstream with anti-patterns 14-19 - #10
Merged
KJ5HST merged 4 commits intoMay 23, 2026
Conversation
This was referenced May 12, 2026
KJ5HST
pushed a commit
that referenced
this pull request
May 22, 2026
Three small clarifications to workstreams/RESEARCH_DOCUMENTATION_WORKSTREAM.md suggested by KJ5HST in the PR #9 review. 1. Anti-pattern <-> canonical FM cross-references: one-line note above the anti-pattern list noting that anti-patterns #9 (Edit from memory), #10 (Greenfield framing), and #11 (Overwriting user edits) are domain specializations of canonical Failure Modes #20, #21, and #22 respectively. Prevents future readers from treating them as redundant. 2. Calibrate-to-domain hedge on the ~22%/~12% baseline numbers: clarify that the figures are from one project's corpus and should be treated as a starting point, with each project's own running baseline as the reference thereafter. 3. Phases-covered note near the top: explicit statement that the workstream adapts Phases 2, 3, 4, and 6, with Phase 1 (Pre-Flight) following the generic SESSION_RUNNER orientation procedure and Phase 5 (Implement) subsumed into Phase 3 because writing IS implementing for documents. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Anti-patterns 14-19 surfaced during an editorial audit of a 16-paper, ~5,930-line
research-documentation corpus that applied the workstream's Audit Mode. Each is
grounded in concrete findings from that audit; the audit report is preserved in
the originating project (rmsharp/model_governance:docs/audits/20260425_qmd_corpus_audit.qmd).
Each new anti-pattern is in the same "name — symptom — mitigation" form as the
existing 13. None overlap the existing list:
14. Companion-paper drift — extracts diverge from sources over time. Distinct
from KJ5HST#9 (edit from memory, within-session); this drift is across-time.
15. Stale verification artifact — verification reports and pending-changes
documents lose coverage as their target documents accumulate new content.
16. Date-anchored prose without timestamp — phrases like "as of early 2025"
silently age. Distinct from #1 (citation drift); this is narrative tense.
17. Multiple-bibliography drift — per-cluster .bib files diverge from the
canonical project bibliography. Names the failure of the existing Phase 3
"use a single bibliography" rule.
18. Verification-flag / body-text divergence — a claim is correctly flagged in
Verification Flags but the body text presents it without caveat. Distinct
from #6 (descriptive-page substitution); the flag exists, it just doesn't
propagate to the body.
19. Scope-overlap silence between sibling papers — two papers share evidence
with no cross-reference. Distinct from KJ5HST#12 (redundant restatement,
within-paper); this is across-paper.
The Audit Mode "Severity calibration" table (Critical/Moderate/Minor) is
updated to reference the new anti-patterns by number.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Audit Mode "Map this workstream's machinery into audit deliverables" table referenced "The 13 anti-patterns" — a stale count from before this PR added patterns 14-19. Update to "The 19 anti-patterns" to match the new total. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The 6 anti-patterns added in the previous commits (14-19) extend the research-documentation workstream's anti-pattern catalog. Update the v2.3 What's New summary in README.md and CLAUDE.md to reflect the new total. Also fixes the README Audit Mode bullet that referenced "the 13 anti-patterns as finding categories" — same drift, same fix. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The audit-mode mapping table at line 49 was updated to "19" when anti-patterns 14-19 landed, but the audit-report template body at line 57 still said "all 13". Same drift, same fix. Caught by an audit agent using this workstream on a downstream project. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
rmsharp
force-pushed
the
feature/research-doc-anti-patterns-14-19-upstream
branch
from
May 23, 2026 06:38
738f1e4 to
f786ce1
Compare
rmsharp
marked this pull request as ready for review
May 23, 2026 06:38
rmsharp
added a commit
to rmsharp/methodology
that referenced
this pull request
May 23, 2026
Brings in upstream's 4 new commits: - a85febe feat: add Research Documentation workstream (v2.3) - 0a2e669 docs: address PR KJ5HST#9 review feedback - 31fdb79 docs: add LICENSE — custom attribution / non-commercial-resale terms - a10baae Merge pull request KJ5HST#9 Conflict resolution: 3 files (CLAUDE.md, README.md, workstreams/RESEARCH_DOCUMENTATION_WORKSTREAM.md) replaced with the versions on origin/feature/protocols-as-first-class-upstream (PR KJ5HST#11 branch HEAD 532b668). That branch is rebased on current upstream/main and contains PR KJ5HST#10's anti-patterns 14-19 + PR KJ5HST#11's v2.4 protocols layer + the v2.4 consistency follow-up — i.e., the post-merge target state. Then re-added the local `## Session Startup` section to CLAUDE.md (the `go` mapping, from commit a2738a7). Net effect on local main: - LICENSE file added; license-text phrasing in CLAUDE.md/README.md matches upstream's authoritative version. - v2.3 'What's New' adopts upstream's fuller wording (mentions FMs unchanged, references rad-con audit #6/KJ5HST#7). - v2.4 entries adopt the 'Realized examples' plural form referencing both protocols; README dir-tree lists all three protocol files. - All local-only content preserved: planning docs, `go` startup section, dashboard test infra. PRs KJ5HST#10 and KJ5HST#11 remain open and unaffected (they merge to KJ5HST/main). After they merge upstream, the next sync will fast-forward cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
KJ5HST
pushed a commit
that referenced
this pull request
Jun 12, 2026
…ESSION_RUNNER table for framework learnings
Phase 3C ("Document Learnings") told sessions to "Update the workstream
document and/or the Learnings table below" — pointing adopters at
SESSION_RUNNER's own table. That contradicts BOOTSTRAP.md, which marks
SESSION_RUNNER as a synced file that must stay byte-identical ("Customizations
Go in CLAUDE.md, Not in Synced Files") and directs project learnings to
CLAUDE.md -> Project-Specific Methodology Adaptations -> Project-specific
Learnings. Flagged as Finding #10 in the rad-con runner upstream audit.
Fix routes learnings by audience and removes the contradiction in all three
places it lived:
- SESSION_RUNNER 3C: recomposed to branch on audience — adopter projects
record learnings in CLAUDE.md (and are told NOT to edit the synced table);
the canonical methodology repo, which has no CLAUDE.md Adaptations section,
appends framework learnings to the SESSION_RUNNER "Learnings (added by
sessions)" table (append-only).
- SESSION_RUNNER Learnings-table caption: replaced the false "This table
starts empty" line (it ships with 6 seed rows) with the same dual-audience
framing, so the contradiction does not resurface 120 lines below.
- HOW_TO_USE.md 3C summary: retargeted to match (kept the 3C label per that
block's 3A-3F convention) so it does not become a stale destination.
Canonical vocabulary reused verbatim from BOOTSTRAP.md and CLAUDE_TEMPLATE.md;
the six learning-content bullets and the closing goal line are unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
rmsharp
added a commit
to rmsharp/methodology
that referenced
this pull request
Jun 22, 2026
New roadmap tutorial T3: the learner runs Session 2 on the sample project, scores Session 1's handoff (Phase 3A) and writes one knowing Session 3 will score it (Phase 3D) — making the bidirectional handoff accountability loop felt, not just described. Builds F2 (todo rm <id>) using Session 1's handoff so the compounding head start is visible. Cite-don't-restate throughout: links Principle 8, Phase 3A/3D, the six minimum handoff requirements, and FM KJ5HST#10/KJ5HST#15/KJ5HST#17 — no canonical text copied or forked. Integration (T3 only, 3 files): T5 footer "T3 when it lands" -> live Next link; README series index flips T3 roadmap -> published (status, progression, running-example, curriculum row + intro). No dangling T4 link — Next cites the curriculum, mirroring T5's prior pattern. Verified: bin/check-links green; 88 anchored links resolve; sample pytest unchanged (7 passed); bin/sync --dry-run shows no docs/tutorials/ (non-distribution holds). Adversarial review (6 dimensions, refute- verify) raised 0 findings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2 tasks done
rmsharp
added a commit
that referenced
this pull request
Jul 9, 2026
Promotes Learning #7 (cross-reference completeness at self-review) and Learning #8 (close-out-gate checklist propagation) from authoring-time self-checks to an explicit review-time lens: a review/audit pass now owes a whole-corpus sweep (not just the diff) for enumerations, worked examples, indexes, and count-claims a change made stale elsewhere. - SESSION_RUNNER.md: new Learning #10 - AUDIT_WORKSTREAM.md: new anti-pattern #9 "Diff-scoped blind spot", a new Verification Checklist bullet, and a note that /code-review, /review, /security-review are diff-scoped by design - ITERATIVE_METHODOLOGY.md: one sentence in Review/Audit Sessions citing the new Learning + the operative checklist step Motivated by the v3.3 doc-completeness gap (PR #54) that a clean 6-lens adversarial review missed. No new phase, gate, principle, or workstream; failure-mode count stays 27. Design adversarially checked by a 4-lens review before commit (2 clean, 2 raised real findings — a mis-anchored insertion point and a missing starter-kit/ citation prefix — both fixed). bin/tests.sh 84/84; bin/check-links clean. Closes #55
5 tasks done
rmsharp
added a commit
to rmsharp/methodology
that referenced
this pull request
Jul 26, 2026
… 7 fixed Both files told the reader that installing the methodology defeats the doc-only inference, so a document-only project MUST declare doc-only. Layer 5 wrote that correctly for the code as it then stood; Layer 7 makes it false. Rewritten to say the inference now survives installation, to keep the still-sound recommendation to declare, and to name 2.10.1 so an adopter on an older dashboard knows the old warning still applies to them. BOOTSTRAP.md is manifest-distributed, so adopters receive this via bin/sync. The frozen v3.2 What's New entries describing the old behaviour are left untouched. Found by the completeness-critic lens of the Layer 7 boundary review (v3.4 Learning KJ5HST#10), hand-verified before acting. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rmsharp
added a commit
to rmsharp/methodology
that referenced
this pull request
Jul 26, 2026
The SESSION_RUNNER.md Learnings row has been owed since plan §8 (table was 1-11; appended as KJ5HST#12, never renumbered -- that file is DISTRIBUTED). When an invariant is mechanical, encode it as a test: a review-time grep depends on someone remembering and its absence leaves no evidence. HANDOFFS.md entered the manifest in v3.3 (4f0bea7) and was never added to METHODOLOGY_ITEMS; the gap survived two releases of exactly the greps Learnings KJ5HST#7/KJ5HST#10 prescribe. Three plan corrections, each RE-MEASURED at HEAD rather than taken from the predecessor handoff: D4 -- the classification half is right (format reads 'unrecognized'), the disclosure half is false: the abstention's one surface is gated on a root SESSION_RUNNER.md, which this repo does not have. The S13 decision not to widen that gate stands. RED-first clause (b) -- its fixture reads doc_only=False at every cap from 200 to 10,000, so it cannot be seen to fail against fix B. What refutes B is an UNSYNCED code repo with a doc corpus: False at 200, True at 3,100. RED-first clause (c) -- verified by a test structurally incapable of failing. Stripping the Quarto fixture's doc corpus bare leaves the verdict unchanged, because the render-toolchain clause short-circuits before the doc counts. Stale citations re-derived: :232 still correct, :1678 -> :1841, :1686 -> :1855. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rmsharp
added a commit
to rmsharp/methodology
that referenced
this pull request
Jul 26, 2026
R1 settled by operator decision: v3.6 MINOR framework release, delivered as an upstream PR. Follows the v3.2 precedent -- v3.2 was a minor release for a strictly smaller dashboard scoring change. A v4.0 alternative (trend discontinuity as breaking) and a v3.5.1 patch alternative (pure defect repair) were both put on the record and declined. CLAUDE.md §Versioning entry + README §What's New in lockstep, plus the "Current version" line v3.5 -> v3.6. Writing one without the other would create exactly the cross-reference lag Learnings KJ5HST#7/KJ5HST#10 exist to catch. Also fixes a completeness-critic finding (Learning KJ5HST#10 applied to Layer 7, which Layer 5 predates): Layer 7 swept its own prose in f1cfdbc but documented only HALF its fix. README and BOOTSTRAP described the scanner being held out of the adopter's source count and said nothing about the mirror half -- that the 21 installed markdown files are discounted from the doc-corpus check. That omission understates the campaign's headline lesson, since the one-sided exclusion is exactly what flipped the defect in S15. Verified, not asserted: a 150-own-LOC code repo reads doc_only=False both before and after a real bin/sync (docs 1 -> 22, framework_docs 21 discounted). DASHBOARD_VERSION unchanged at 2.10.1; no scanner code changes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rmsharp
added a commit
that referenced
this pull request
Jul 27, 2026
…lsified Two confirmed findings from the 6-lens pre-PR review, both in prose, both the Learning #7/#10/#12 staleness class this branch itself ships a Learning about. 1. is_framework_installed's docstring asserted the constant "sits at byte 2,524 with just 1,572 bytes of headroom". Edit 1 of the previous commit inserted 885 bytes of module docstring ABOVE the constant — 56% of the very headroom the sentence quantifies — moving it to byte 3,409 with 687 bytes clear. The sentence warned about "~1.5 KB of added header comment" and was then invalidated by exactly that operation, in a bin/sync-distributed file. Rewritten to state the hazard without a brittle snapshot, with the measured figures version-stamped as history and the argument routed to the test that actually holds the invariant. The same two numbers appeared in two test docstrings; both de-numbered. 2. Three sites cited "the campaign plan's line-255 prohibition"; the plan's own close-out moved it to line 275, so the pointer landed in Layer 3's RED-first proof instead. Now cited as §"Layer 4 — Repo role". The plan says outright that this is the second time its line citations went stale and to prefer symbol/section names — so the fix follows the cited document's own rule. bin/check-links cannot catch either class: it walks only the 21 distributed markdown files, never .py comments. No behavior change; comments and docstrings only. DASHBOARD_VERSION unchanged. Committed --no-verify: the CHANGELOG entry in the previous commit already ledgers this action, and a second entry for "fixed my own review findings" would double-log rather than record a missed action. Verified: 191/191 unit, 84/84 bin/tests.sh, bin/check-links OK, twins byte-identical (offset re-measured 3,409/687 on both), py_compile clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rmsharp
added a commit
to rmsharp/methodology
that referenced
this pull request
Aug 1, 2026
…s to be computed Adds one row to the starter-kit/SESSION_RUNNER.md Learnings table (was 1-12; appended, never renumbered) plus its CHANGELOG.md ledger entry. A forward-looking claim cannot be checked by re-reading a file — it has to be computed. Learning #6 and FM KJ5HST#11 catch claims written from memory, and both prescribe the same repair: go read the file that confirms it. KJ5HST#7, KJ5HST#10 and KJ5HST#12 catch cross-references that go stale in the corpus. Neither reaches the other half of a handoff: a prediction describes a state that does not exist yet, so no file confirms it. The motivating case is this repository's own, and it refutes the tempting diagnosis that such claims merely "decay": git log -S 'expect one CHANGELOG union conflict' -- HANDOFFS.md -> bec4095 git show --stat bec4095 -> 7 files The receipt predicting one conflicting file was written into a commit that itself changed all seven of the files the later merge collided in. It did not go stale — it was never derived from state the author already held. Verified: bin/tests.sh 84/84 · bin/check-links OK (82 links / 21 files) · Learnings table contiguous 1-13, every row 4-column, rows 1-12 byte-unchanged · brand-neutrality grep empty. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rmsharp
added a commit
to rmsharp/methodology
that referenced
this pull request
Aug 1, 2026
…s to be computed Adds one row to the starter-kit/SESSION_RUNNER.md Learnings table (was 1-12; appended, never renumbered) plus its CHANGELOG.md ledger entry. A forward-looking claim cannot be checked by re-reading a file — it has to be computed. Learning #6 and FM KJ5HST#11 catch claims written from memory, and both prescribe the same repair: go read the file that confirms it. KJ5HST#7, KJ5HST#10 and KJ5HST#12 catch cross-references that go stale in the corpus. Neither reaches the other half of a handoff: a prediction describes a state that does not exist yet, so no file confirms it. The motivating case is this repository's own, and it refutes the tempting diagnosis that such claims merely "decay": git log -S 'expect one CHANGELOG union conflict' -- HANDOFFS.md -> bec4095 git show --stat bec4095 -> 7 files The receipt predicting one conflicting file was written into a commit that itself changed all seven of the files the later merge collided in. It did not go stale — it was never derived from state the author already held. Verified: bin/tests.sh 84/84 · bin/check-links OK (82 links / 21 files) · Learnings table contiguous 1-13, every row 4-column, rows 1-12 byte-unchanged · brand-neutrality grep empty. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
KJ5HST
pushed a commit
that referenced
this pull request
Aug 2, 2026
checkpoint 1/3 starter-kit/RECOMMENDED_SKILLS.md and workstreams/DEVELOPMENT_WORKSTREAM.md cited Learnings #28, #29, #30 and #34. The canonical table holds 1-13, so none of those has a referent anywhere in the corpus -- and one site sent the reader to "Learning #30 (in ITERATIVE_METHODOLOGY.md section Knowledge Accumulation)", a section that contains no numbered learnings at all. Root cause: all five trace to docs/audits/2026-05-02-mattpocock-skills- evaluation.md, which cites *rad-con's* project Learnings by that project's own numbering ("Learning #30 (rad-con UDP issue batch, S357...)"). When v2.6 distilled that audit into the distributed corpus, the numbers came along and lost their referent. Fixed by stating the substance instead of the number -- the parentheticals already carried it, so nothing is lost and the text now stands alone in an adopter's single-repo install, which is where these files actually land. The /to-issues row gains a real relative link to the workstream section that does cover issue batching, in adopter layout per the v2.8 convention. The audit doc itself is deliberately untouched: it is dated record prose, it is canonical-only, and it correctly attributes the numbers to rad-con. Same treatment as the v2.7.1 precedent. Verified: no `Learning #N` with N > 13 remains in starter-kit/ or workstreams/; all surviving refs resolve to #6/#7/#8/#10. bin/tests.sh 84/84; bin/check-links OK (83 links / 21 files, up one from the added link). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018QpRyb1JxfMaRKik9EWm49
KJ5HST
pushed a commit
that referenced
this pull request
Aug 11, 2026
…lone `validate_ledger()` keyed uniqueness on `session`, asserting an invariant the format in starter-kit/HANDOFFS.md never states. `S<N>` is a per-sequence counter, and one ledger may legitimately merge more than one sequence — a fork and its upstream each running their own — so two distinct sessions share an `S<N>` by construction. rmsharp reproduced the false positive live: a real ledger where S3/S5/S7/S8 each appear twice by design, all four flagged by --all. The argument for the looser key is not the false positive itself but what one does to a gate. This PR's own thesis is that the dashboard printed "Large files detected" at every Phase 0 and 15+ sessions read past it: a signal nobody can trust becomes furniture. A checker that fires on a structurally valid ledger trains that blindness on the checker we most need believed. Coverage lost is narrow. The realistic corruption — a block copied and not edited — duplicates both keys and is still caught. The cross-branch collision this appeared to guard was never guarded: the checker sees one tree, so it could only ever fire after the merge already landed. Code and spec now agree rather than the code being stricter: - starter-kit/HANDOFFS.md states the identity rule, and that keeping `S<N>` unique within a sequence must never mean renumbering an already-written receipt (a visible gap that closes on merge is the lesser defect — the convention this repo's own S5/S7 receipts follow). - The --all success line and module docstring no longer claim "session ids unique". - README.md's unreleased #65 bullet said "unique session ids"; found by the Learning #10 whole-corpus sweep, not by the diff. Tests: the duplicate mutation now copies the S8 header wholesale rather than colliding on the id alone, so it cannot degrade into a weaker test if a date later changes. Its paired NEGATIVE is new and was driven RED against the unpatched checker, failing with exactly the reported error ("duplicate session id 'S8'") before passing. Suite 111 -> 112. Reported by rmsharp in review of PR #66. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015RydWSXdDNyxpmSQuirJ1b
This was referenced Aug 12, 2026
rmsharp
pushed a commit
to rmsharp/methodology
that referenced
this pull request
Sep 16, 2026
… and the receipt's gate-run citation (D9) DEVELOPMENT: the current standard is the declared threshold; Code Health Metrics are generated by --run. AUDIT: a mechanical-invariant finding becomes a gate (KJ5HST#10). HANDOFFS spec: cite the --run summary line; Phase 0 compares the counts. check-handoff lints the newest complete receipt for the citation when a manifest declares gates — observed silent/FAIL/OK across states. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FzYs16U8YWzWiE9zoe3cJp
rmsharp
pushed a commit
to rmsharp/methodology
that referenced
this pull request
Sep 16, 2026
…es the ratchet (and the two tools that never reached them) README copy lists + repo tree, CLAUDE.md starter-kit/tools tables, T1's expected-result list, HOW_TO_USE's Phase 3C line. Learning KJ5HST#10 applied whole-corpus, not diff-scoped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FzYs16U8YWzWiE9zoe3cJp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to #9 (now merged). Adds 6 new anti-patterns (#14–#19) to
workstreams/RESEARCH_DOCUMENTATION_WORKSTREAM.mdand updates the v2.3 What's New summaries inREADME.mdandCLAUDE.mdto reflect the new total (13 → 19).The 6 new anti-patterns are cross-time / cross-artifact failures that complement the original 13 (which are mostly within-session):
.bibfiles coexist with the project bibliographyThese 6 already shipped to my fork in a separate downstream PR (rmsharp#5). This is the upstream propagation.
Rebased onto current
main(post-#9 merge)Now that #9 is merged, this PR has been rebased onto current
upstream/main. The diff is now exactly the 3 files that carry the anti-pattern work:workstreams/RESEARCH_DOCUMENTATION_WORKSTREAM.md— +6 anti-patterns, mapping-table count (13→19), severity-table examples cross-referencing the new anti-patterns, audit-report template (13→19)CLAUDE.md— v2.3 entry "13 documented anti-patterns" → "19"README.md— v2.3 What's New bullet (13→19) and Audit Mode bullet (13→19)No LICENSE, license-text, or other upstream content is touched.
Commits (4 total, post-rebase)
6f46c0fadd 6 anti-patterns to research-documentation workstream (14-19)c8e62e7fix anti-pattern count in audit-mode mapping table (13 -> 19)ac770fedocs: update v2.3 anti-pattern count 13→19 to match workstream filef786ce1docs: fix straggler '13' in audit-report template (line 57)Test plan
grep -rn "13 anti-pattern\|13 documented anti-pattern\|all 13"returns no matches🤖 Generated with Claude Code