Skip to content

docs: add Team Scout's testing/tooling half of the gap backlog - #37714

Merged
fabrizzio-dotCMS merged 4 commits into
docs-37129-backend-gap-backlogfrom
scout-gap-backlog
Sep 25, 2026
Merged

fabrizzio-dotCMS merged 4 commits into
docs-37129-backend-gap-backlogfrom
scout-gap-backlog

Conversation

@fabrizzio-dotCMS

@fabrizzio-dotCMS fabrizzio-dotCMS commented Sep 23, 2026 •

Copy link
Copy Markdown
Member

Team Scout's half of the M4 gap backlog, into your file rather than a second document as you asked. Items 6–10, same format as yours.

Targets docs-37129-backend-gap-backlog, so it merges into #37697 before that goes for review.

What's in it

6. .claude/skills/ — L. The one I'd draw your attention to. 14,052 lines across 23 skills, which makes it the largest AI-context surface in the repo — bigger than docs/backend/, docs/testing/ and docs/core/ combined — and it is in neither team's slice. The split gives Scout .claude/commands/, 629 lines, but those are wrappers: create-issue.md is 5 lines saying "use the dot-issue-manage skill", and that skill is 630. Auditing the commands in M1 audited the pointers, not the payload.

Governance exists (CATALOG.md, skill-lint.mjs, a CI gate) but validates naming, frontmatter and catalog freshness — not whether the content is true. A fabrication turned up on the first spot-check: dot-cicd-diagnose/ISSUE_TEMPLATE.md:90 says to run ./mvnw test -Dtest=ContentTypeAPIImplTest#testCreateContentType. The method doesn't exist in that class, and the class is in dotcms-integration, so it needs verify ... -Dit.test= — the same -Dtest= error you found in INTEGRATION_TESTS.md during M3, alive in a surface no milestone covered.

7. 86 integration tests that never run in CI — M. 632 classes registered against 693 concrete, measured by the script from #37590. Not an active leak: 0 of the last 33 added went unregistered, so the MainSuite rule is holding. This is standing backlog since January 2024, and it needs triage rather than mechanism — each one is dead code, redundant coverage, or a real subsystem silently untested.

8. Nothing checks whether a doc is true — M. Nine surfaces with fabricated content across this Rock, every one found by reading. CICD_PIPELINE.md (#37711) showed a variant worth designing against: the prose was accurate — phase model, zero-trust design, artifact strategy all matched — and only the YAML blocks were invented, which is the part a reader copies. And the failure reproduced inside #37666, a PR whose entire purpose was removing fabrications; the replacement example stubbed a method that doesn't exist, caught in review rather than by any tool.

I've suggested a cheap first cut in the entry: resolving every ClassName, #method, -Dflag and Maven profile named in an AI-context file against the source tree would have caught seven of the nine. Compiling fenced blocks is the expensive option and probably not where to start.

9. No upkeep process for .cursor/rules/ and .claude/commands/ — S. The fixes merged; the reason they drifted didn't. Nothing makes a change to docs/testing/ prompt a look at test-context.mdc.

10. The split omitted 10 files — S. Your confirmation on Sep 21 is recorded. Second occurrence after docs/integration/, which is why it's written as a process finding. docs/cli/ is resolved — Scout took it, and auditing before linking turned up the Java language level stated as 21 against a pom pinned to 11 (#37664). Still needing an owner: docs/claude/, docs/test-cases/, and the loose docs/core/ file — that last one is the question I sent you.

Also changed

Title and intro now cover both halves, and Next Steps records the merge as done. I flagged two items as promotion candidates rather than plain backlog entries: your item 4, since a silently-skipped upgrade task is the same failure class as the MainSuite rule and you'd already made that argument, and item 8, since it is the gap that let every fabrication in this Rock reach main.

Adjust or drop anything that reads as overreach into your half — it's your file.

🤖 Generated with Claude Code


Refs #37580 (Scout M4) and #37129 (Falcon M4), under epic #37124. Targets a feature branch rather than main, so no closing keyword — #37580 closes when the merged backlog has been reviewed with the team, not when this lands.

Items 6-10, into Jose's existing file rather than a second document, per his
request. Same format as items 1-5: heading with S/M/L size, then what is missing
and why it matters, backed by measurement rather than impression.

6. .claude/skills/ — 14,052 lines across 23 skills, the largest AI-context
   surface in the repo, assigned to no team and read by no milestone. The split
   gives Scout .claude/commands/ (629 lines), which are wrappers: create-issue.md
   is 5 lines pointing at a 630-line skill. Auditing the commands audited the
   pointers. A fabrication turned up on the first spot-check — dot-cicd-diagnose
   gives -Dtest= for a class that needs -Dit.test=, and names a method that does
   not exist.

7. 86 integration test classes that exist and never run in CI (632 registered
   against 693 concrete), accumulated since January 2024. Not an active leak —
   0 of the last 33 went unregistered — so this is triage, not mechanism.

8. Nothing checks whether a doc's claims are true. Nine surfaces found with
   fabricated content this Rock, every one by reading. Includes the sharper
   variant CICD_PIPELINE.md showed, where the prose was accurate and only the
   copyable YAML was invented, and the fact that the failure reproduced inside a
   PR whose purpose was removing fabrications.

9. No upkeep process for .cursor/rules/ and .claude/commands/. The fixes merged;
   the reason they drifted did not.

10. The split omitted 10 files, confirmed with Jose. Second occurrence after
    docs/integration/ — a process finding, and the argument for the index and
    reachability check in #37578 rather than a better manual split.

Title and intro updated to cover both halves; Next Steps records the merge as
done and flags items 4 and 8 as promotion candidates rather than plain entries.

Refs #37580, #37129

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @fabrizzio-dotCMS's task in 3m 36s —— View job


Review — factual verification of the backlog additions

Since this document's own thesis (item 8) is that every checkable claim in an AI-context file must resolve against source, I resolved each checkable claim in the diff against the tree. All but one reproduce exactly.

Verified accurate:

  • .claude/skills/ = 14,052 lines — reproduces to the line: 13,853 in the 23 first-party skill dirs' .md + CATALOG.md (45) + CONTRIBUTING.md (154). 23 first-party SKILL.md confirmed.
  • .claude/commands/ = 7 files, 629 lines ✓; create-issue.md = 5 lines ✓; dot-issue-manage/SKILL.md = 630 lines ✓; e2e-rules.mdc = 223 lines ✓.
  • The fabrication in item 6: dot-cicd-diagnose/ISSUE_TEMPLATE.md:90 does say ./mvnw test -Dtest=ContentTypeAPIImplTest#testCreateContentType; testCreateContentType is absent from the class, which lives in dotcms-integration (so verify … -Dit.test=). The finding is real ✓.
  • Item 8's getLivenessResponse() claim: HealthStateManager has getLivenessHealth() (line 186), no getLivenessResponse() ✓.
  • scripts/validate-integration-test-registration.sh exists ✓.
  • Item 10 file counts under the doc's own .md-file methodology: docs/claude/ 4, docs/cli/ 2, docs/integration/ 1, docs/test-cases/ 1 .md (README.md + 13 CSVs) — all ✓.

I did not re-run the 693/632/86 integration-test figures (they require building the suite lists in CI); they're attributed to the #37590 script and already caveated as trend figures in the thread.

New Issues

  • 🟡 Medium: docs/BACKEND_GAP_BACKLOG.md:131 — the claim that .claude/skills/ is "larger than docs/backend/, docs/testing/ and docs/core/ combined" does not hold under the same .md line-count that produces 14,052. Measured now: skills .md = 14,052; docs/backend (10,654) + docs/testing (2,746) + docs/core (3,462) = 16,862 — the three combined are ~2,810 lines larger, not smaller. The rest of the sentence is fine — skills is the largest single peer directory (14,052 vs docs/backend's 10,654) — so this reads as a docs surface that grew during the Rock (backend picked up the OpenSearch runbooks/test-plan) overtaking a comparison that was likely true when written. Given item 8 is precisely about checkable claims that no longer resolve, worth correcting before this lands — e.g. reframe to "larger than any single peer directory" or "larger than docs/backend/ alone." Fix this →

No other issues. This is a careful, well-sourced entry; the single correction above is the only claim in the diff that doesn't currently reproduce.
· scout-gap-backlog

Found after the first draft (#37715). It adds a second variant worth designing
against, and a naive "does this symbol exist" check would miss it: e2e-rules.mdc
was not invented from nothing but duplicated from AGENTS.md and then drifted.
Every symbol in it resolved; the guidance was still wrong — always data-testid,
never CSS, against a source of truth that puts getByRole first and permits CSS in
the Dojo iframe where data-testid does not exist. And the Cursor rule auto-loads
while the doc has to be opened deliberately, so the stale copy won by default.

Item 8's surface count goes from four files under .cursor/rules/ to five. Item 9
gains it as the clearest case of the missing upkeep process, and now notes that
the reachability check from #37578 covers docs/ but not these two directories.

Refs #37580, #37579

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review caught the backlog asserting a state the tree does not have: items 8 and 9
said e2e-rules.mdc "was folded into a 50-line pointer in #37715", past tense,
while #37715 is still open and this branch is cut from Jose's, so the file here
is still 223 lines with the src/config/ block that does not exist.

That is precisely the failure class items 8 and 9 describe — a claim that reads
as verified and resolves against nothing — reproduced inside the document arguing
against it. Third time this pattern has appeared in my own work on this Rock,
after the API_TESTING overlap asserted from a filename and the invented
getLivenessResponse() in #37666.

Both places now mark #37715 as open, and item 9 keeps the finding in present
tense: until it merges, the contradiction is still what Cursor loads on every
spec edit. The merged fixes it lists alongside (#37590, #37629) were verified
against the tree and are correctly past tense.

Refs #37580, #37579

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@fabrizzio-dotCMS

Copy link
Copy Markdown
Member Author

Correct, and it's the failure class the document is about — reproduced inside the document. Fixed in e1cfeb8.

#37715 is open. This branch is cut from docs-37129-backend-gap-backlog, so e2e-rules.mdc here is still the 223-line version with the src/config/ block. Your reasoning about why #37590 and #37629's content is present while #37715's isn't is right.

Both places now mark it as open, and item 9 keeps the finding in present tense — until that merges, the contradiction is still what Cursor loads on every spec edit, which is the more useful thing for the entry to say anyway.

Worth recording that this is the third time the pattern has appeared in my own work on this Rock: an overlap claim asserted from a filename rather than the file, an invented getLivenessResponse() inside the PR removing invented content, and now a past-tense claim about a tree state that doesn't exist. Each was caught in review rather than by a tool, which is the argument item 8 is making.

On the item 7 arithmetic — agreed, and thank you for working through it rather than flagging it as a subtraction error. The 25-name gap between registered and concrete is suite entries that aren't concrete *Test.java, and the script's own simple-name caveat means these are trend figures. That's the right grade for a backlog entry, and the entry says the gap is triage rather than the number.

Same failure class as the last fix, found by checking rather than by review this
time. Four places described the reachability check and the rebuilt index as
existing: "the reachability check (#37578) catches unreachable files", "the
reachability check added in #37578 covers docs/", "docs/README.md rebuilt as a
complete index of all 54 files (#37578)", and "the automated reachability check
added in #37578, which runs on every PR touching docs/".

#37578 is the issue. Its PR is #37709, which is approved and not merged, so none
of that is on main. A backlog arguing that AI-context claims must resolve against
real source cannot itself assert a tree state that does not exist.

All four now name #37709 and its actual status, and item 10 keeps the point in
present tense: until it lands, nothing prevents the next omission. That is the
more useful thing for the entry to say.

Also updated what has landed since drafting: #37664 and #37721 merged, so
docs/cli/, docs/claude/ and docs/test-cases/ are resolved, leaving only the loose
docs/core/ file needing an owner.

Every figure in items 6-7 re-verified against main today: 14,052 skill lines, 23
SKILL.md, 629 lines across .claude/commands/, 5 lines for create-issue.md against
630 for the skill it wraps, 632 registered / 693 concrete / 86 never run, and the
dot-cicd-diagnose fabrication still present at ISSUE_TEMPLATE.md:90.

Refs #37580

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@fabrizzio-dotCMS
fabrizzio-dotCMS merged commit fce5826 into docs-37129-backend-gap-backlog Sep 25, 2026
33 checks passed
@fabrizzio-dotCMS
fabrizzio-dotCMS deleted the scout-gap-backlog branch September 25, 2026 21:59
@fabrizzio-dotCMS fabrizzio-dotCMS mentioned this pull request Oct 5, 2026
10 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI: Safe To Rollback Area : Documentation PR changes documentation files

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant