Skip to content

docs: backend half of next quarter's AI-context gap backlog (M4, #37129) - #37697

Merged
jcastro-dotcms merged 7 commits into
mainfrom
docs-37129-backend-gap-backlog
Oct 7, 2026
Merged

jcastro-dotcms merged 7 commits into
mainfrom
docs-37129-backend-gap-backlog

Conversation

@jcastro-dotcms

@jcastro-dotcms jcastro-dotcms commented Sep 23, 2026 •

Copy link
Copy Markdown
Member

Summary

Backend half (Team Falcon) of next quarter's AI-context documentation gap backlog, drafted as part of the Backend AI-Context Rock (epic #37124, milestone M4 / #37129).

Identifies 5 areas where AI-context docs are missing or inadequate, each with a problem statement grounded in real codebase research and a rough S/M/L documentation-effort estimate:

  1. Content Lifecycle — Size: L
  2. Caching Architecture — Size: M/L
  3. Workflow Engine — Size: M
  4. Upgrade Tasks — Size: S (⚠️ candidate for a new Critical Rule, same silent-registration risk class as M1's MainSuite rule)
  5. docs/integration/ Ownership — Size: S (a linking/ownership/audit gap, not a missing-doc gap — the doc already exists and looks solid)

Why draft

This is not a finished deliverable. Per its own "Next Steps" section, it still needs to:

  1. Be merged with Team Scout's testing/tooling half into one combined backlog document
  2. Be reviewed with the team to confirm scope and priority for next quarter's Rock

Opening as a draft now so @fabrizzio-dotCMS (Team Scout) can add their half here, rather than in a separate doc — we'll mark it ready for review once both halves are combined.

Test plan

  • Doc-only, planning artifact — no build/test impact
  • Not linked into CLAUDE.md (intentional — this is a transitional backlog doc, not subsystem documentation)

Backend half of the M4 (#37129) deliverable for the Backend AI-Context
Rock (epic #37124): identifies 5 undocumented/under-documented areas
(Content Lifecycle, Caching Architecture, Workflow Engine, Upgrade
Tasks, docs/integration/ ownership) with rough S/M/L sizing, grounded
in real codebase research.

This is a draft, not a finished deliverable: it still needs to be
merged with Team Scout's testing/tooling half into one document and
reviewed with the team before being confirmed as next quarter's Rock.
Opening as a draft PR so Team Scout can add their half in the same
place rather than a separate doc.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the Area : Documentation PR changes documentation files label Sep 23, 2026
@claude

claude Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @fabrizzio-dotCMS's task in 1m 59s —— View job


Review: docs/BACKEND_GAP_BACKLOG.md

  • Read PR context
  • Read the doc
  • Verify factual claims against the codebase
  • Post review

This is a doc-only planning artifact — no code, so there are no bugs/security/convention issues in the usual sense. Since the doc's entire premise is documentation accuracy (it even catalogs fabrications found elsewhere), I spot-verified its load-bearing, falsifiable claims against the current tree. They hold up well.

Claims verified ✅

Claim Doc Actual
ContentletAPI.java 2,672 lines 2,672 ✓
checkin(...) overloads 10 10 ✓
CacheLocator.java 595 lines 595 ✓
WorkflowAPI.java 1,261 lines 1,261 ✓
runonce task classes 246 246 ✓
Registered in TaskLocatorUtil 245 245 import lines ✓
FixTask classes 18 18 ✓
CacheProvider impls 5 (caffine, guava, redis, timedcache, h22) all 5 present ✓
com.dotcms.cache package 10 classes 10 (main src) ✓
tomcat-redis-session-manager:2.0 in bom/application/pom.xml real dep present (line 1622) ✓
API_CONTRACTS.md 726 lines, ref'd from SECURITY_PRINCIPLES.md:80 726 ✓, ref at :80 ✓
HealthStateManager has getLivenessHealth() not getLivenessResponse() correct getLivenessHealth() at :186, no getLivenessResponse ✓
dot-cicd-diagnose/ISSUE_TEMPLATE.md:90 fabrication (test -Dtest=ContentTypeAPIImplTest#testCreateContentType) fabricated command present at :90 using test -Dtest=; testCreateContentType not found in integration tests ✓

The item-4 argument is the strongest and I can confirm its core factual basis: a runonce task not added to TaskLocatorUtil.getStartupRunOnceTaskClasses() compiles and silently never runs — 246 task files vs 245 registered imports is exactly the asymmetry the doc describes. The promotion-to-Critical-Rule recommendation is well-grounded and mirrors the existing MainSuite rule in CLAUDE.md.

Minor / non-blocking (🟡 informational)

  • docs/BACKEND_GAP_BACKLOG.md:20 — ESContentletAPIImpl is stated as 10,943 lines; wc -l reports 10,942 (off by one, almost certainly a trailing-newline artifact). Immaterial, but worth a glance given the doc's own standard.
  • docs/BACKEND_GAP_BACKLOG.md:71 — "36 real actionlet classes." I count ~41 classes extends WorkFlowActionlet under the workflow package. The doc undercounts rather than inflates, and the phrasing is a rough extensibility estimate, so this isn't a fabrication — but the number is low if someone treats it as exact.
  • docs/BACKEND_GAP_BACKLOG.md:40 — "59 distinct cache regions" in CacheLocator I could not pin to an exact figure by a simple grep (region accessors ≈ 55); it depends on how regions are counted. Not disputing it, just flagging it as the one count I couldn't mechanically confirm.

None of these block merge. Everything that would undermine the backlog's credibility — class existence, method names, dependency presence, the two silent-registration asymmetries, the catalogued fabrications — checks out. The two "candidate for promotion" calls (item 4 upgrade tasks, item 8 content-accuracy check) are factually supported.

No code changes made — this was a review request on a documentation PR.
· docs-37129-backend-gap-backlog

@jcastro-dotcms jcastro-dotcms mentioned this pull request Sep 23, 2026
6 of 8 tasks
@jcastro-dotcms jcastro-dotcms linked an issue Sep 23, 2026 that may be closed by this pull request
6 of 8 tasks
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>
fabrizzio-dotCMS and others added 4 commits September 23, 2026 14:33
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>
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>
@jcastro-dotcms
jcastro-dotcms marked this pull request as ready for review October 7, 2026 14:19

@erickgonzalez erickgonzalez left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Great summary of what is missing, we can/should do some of these as a Rock for Q4.

@jcastro-dotcms
jcastro-dotcms added this pull request to the merge queue Oct 7, 2026
Merged via the queue into main with commit 1821913 Oct 7, 2026
46 of 47 checks passed
@jcastro-dotcms
jcastro-dotcms deleted the docs-37129-backend-gap-backlog branch October 7, 2026 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area : Documentation PR changes documentation files

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

M4 — Backend gap backlog

3 participants