Uh oh!
There was an error while loading. Please reload this page.
docs(ai): list connect-mcp, the module page the AI landing index omitted - #10747
Conversation
content/docs/ai/meta.json ships 9 pages; the "What's in this module" list
in index.mdx linked 7 of the 8 content pages. connect-mcp was absent and
the string appeared nowhere else on the page, so the module's only
inventory did not reach meta.json's first content page.
Placement is derived, not chosen: the existing 7 were already exactly
meta.json's order minus the missing one, so the row goes first, at its
meta.json position, rather than being appended.
Link text is the page's own frontmatter title ("Connect an MCP Client"),
not a slug prettification. All 7 existing rows carry an em-dash gloss, so
the new row carries one too.
Also records meta.json as the source of truth in a comment beside the
list, mirroring the ruling already applied to permissions/index.mdx.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wtPM review — verified against both files, not the report. Approving. You answered my caveat instead of assuming past itMy brief said: "if You checked: ⭐ You applied the principle, not the instanceThe sibling PR (#10736, You measured this page instead and found the opposite texture: 7 of 7 existing rows carry a gloss. So you added one. Copying the sibling's ratio would have produced the only ungossed row on a page where glossing is the rule. Same instinct on the drift note: you mirrored #10736's source-of-truth comment but adapted one sentence, because this list ends with two rows (Spec / Schema reference) that link out of the module and have no The mechanics
⭐ And you corrected a card I filed 20 minutes agoYour repo-wide re-sweep found a fourth hand-kept module list —
Posting it to the open card rather than filing a fifth issue was the right call, as was filing nothing new: the sweep found no undrifted-but-unfixed instance, and saying so is more useful than silence. Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Closes#10737
What was wrong
content/docs/ai/meta.jsonships 9 pages. The## What's in this modulelist inindex.mdxlinked 7 of the 8 content pages. Absent:connect-mcp— and the stringconnect-mcpappeared zero times anywhere on the page, which is what makes this more than an unlisted row.Two details sharpen it:
Cardscomponent block at all (checked, not assumed — 0 occurrences), so the module list is the page's only inventory.connect-mcpwas not merely unlisted, it was unreachable from its own module landing page.connect-mcpismeta.json's first content page, immediately afterindex— the most prominent slot in the chapter, not a recently-appended tail row.The reconciliation (this is the proof, not "I added a row")
Both files parsed before and after by the same script:
meta.jsonpagesmeta.jsonvs disk.mdxsymmetric difference[][]indexexcluded)connect-mcp[]meta.jsonmeta.jsonorderconnect-mcpon the page8 rather than 9 is correct:
indexis the landing page itself and is not self-linked.How the row was written
Placement is derived, not chosen. The existing 7 were already exactly
meta.json's order minus the missing one, so the row goes at itsmeta.jsonposition — first, aboveAI Agents— rather than being appended. That is why the order row above still readstrueafter the edit, and it follows the convention #10736 and #9604 both used.Link text is the page's own frontmatter title: "Connect an MCP Client". Not a slug prettification. This mattered on the sibling card, where two rows named in the issue by slug-prettification turned out to have quite different real titles; here the issue's guess happened to match the frontmatter, verified by reading
content/docs/ai/connect-mcp.mdxrather than trusting it.The row carries a gloss, because on this page a gloss is universal, not the exception. Measured before deciding: 7 of 7 existing module rows carry an em-dash gloss, 0 without. That is the opposite texture from
permissions, where a gloss was 3 of 14 and reserved for a title that under-describes its page — so the rule "add a gloss only if the title under-describes" resolves differently here: a bare row would be the odd one out. The gloss text is drawn from the page's own description and opening, and adds the fact the title omits — that the server is already running, with nothing to install:Separator is the em dash, matching all seven existing rows.
The source-of-truth comment
Mirrored from #10736, which is the settled ruling on this defect class one section over: the list stays hand-kept (
meta.jsonstores slugs only — the link text and the eight glosses exist in no source file, so a generated list would lose them), withmeta.jsonrecorded as the source of truth in a comment beside it plus a drift note.One sentence is adapted rather than copied, because this page's list is not shaped quite like
permissions': it ends with two rows (Spec:andSchema reference:) that link out of the module and have nometa.jsonentry. The comment says so, so the next reader does not "reconcile" them away.Sweep — no new drift, but the population count for #10738 is off by one
Re-measured across
content/docsread-only. No section has drift that is not already accounted for:permissionsstill measures 6 missing in this branch's base only because docs(permissions): list the six module pages the landing index omitted #10736 is open and unmerged. Not a new instance.Cards-based sections are a different object; no claim made about them, matching the card's own sweep.One correction worth carrying to #10738, which sized its cost/benefit on a population of three pages (
permissions,api,ai): the real population of hand-kept## What's in this modulebullet lists is four.content/docs/plugins/index.mdxcarries one too (5meta.jsonpages, 4 linked, 0 missing — in sync, so nothing to file). It was not named in the original sweep. Its texture differs again (bold link text, capitalized glosses), which is itself evidence for the "check them, don't generate them" shape that card is weighing. Reported, not acted on — that card stays open and is not this PR's work.Scope
One file:
content/docs/ai/index.mdx. #10732 is open and unmerged againstcontent/docs/ai/agents.mdx, a different file in the same directory — untouched here, and confirmed by listing the files of all 16 open PRs that no other open PR touchesindex.mdx.Verification
Gate families re-derived at the final commit with
node scripts/pm/dispatch-gates.mjs(no paths — the script takes its own change set from the merge base). It reports one changed path and 13 families. All 13 green atfea19d412f, self-tests included:check:doc-anchors·check:doc-authoring·check:docs-audit-scope·check:docs-redirects·check:role-word·check:published-readme-links·check:cross-package-test-inputs·check:doc-formula-expressions· speccheck:empty-state/check:liveness/check:strictness-ledger/check:variant-docs·check:nul-bytesThe load-bearing one is
check:doc-anchors, since this PR adds an internal link and it proves the destination resolves:check:role-wordmatters because ADR-0090 D3 makes "role" reserved:check-role-word: OK, no new occurrences of the reserved word.One gate needed a fix that was not about this diff, identically to the sibling PR:
check:doc-formula-expressionsfailedERR_MODULE_NOT_FOUNDon@objectstack/formula/dist— a fresh worktree with an unbuilt dependency closure. Green afterpnpm --filter '@objectstack/formula...' build.No changeset
Docs-only;
@objectstack/docspublishes nothing. Carries theskip-changesetlabel instead.Generated by Claude Code