Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .github/workflows/lint.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -1096,6 +1096,57 @@ jobs:
- name: Runtime-services indexes enumerate the chapter's real pages
run: pnpm check:runtime-services-index

# #10738 generalises the gate above to every section landing page. The same
# defect shape kept recurring one directory over: a section's meta.json is
# what fumadocs builds the sidebar and route order from, the landing page's
# "## What's in this module" block is the reader's map of the same set, and
# nothing read the two against each other — #9604 (runtime-services, sms),
# #10339 (permissions named 14 of 21), #10737 (ai omitted connect-mcp, its
# meta.json's FIRST content page, linked nowhere else on the page). Three
# instances, three humans noticing, three cards.
#
# The heading is the opt-in, NOT the rendering shape. #10738 had set the
# `Cards`-grid sections aside as "a different object" and then had to
# correct itself when api/index.mdx turned out to carry both shapes. Shape
# is simply the wrong discriminator: writing the heading is the author
# declaring "this block is the index of this module". Eight sections
# declare it — four bullet lists (ai, api, permissions, plugins), four
# `Card` grids (automation, data-modeling, kernel, ui) — and the gate reads
# both spellings identically. The other 26 landing pages under content/docs
# are untouched and cannot be caught by accident; they would have to write
# the heading first. That is what keeps the deliberately curated ones
# curated: protocol/objectui is a "For Implementers" reading list mixing in
# /docs/references/ links, and getting-started's "Next Steps" points OUT of
# its module on purpose.
#
# Hrefs and their order only. Link text, glosses, bolding and `Card`
# descriptions are the page's business — meta.json stores SLUGS ONLY, so a
# generated block would have to synthesize link text from frontmatter, and
# that regresses a row that exists today (permissions/access-recipes.mdx is
# titled "Who can see data / automation / interface" and would render as
# that instead of the curated "Access Recipes"). Check them, don't generate
# them — the #9604 precedent, re-measured.
#
# Invoked as `node scripts/…` rather than through a `pnpm check:*` alias,
# same as the other direct steps in this lane: that alias is a line in root
# package.json, inside the @changesets/cli v3 fence (#9465), and the direct
# form loses no discovery — dispatch-gates.mjs derives gate families from
# either spelling. Precedent: PR #10698.
#
# Runs its own --self-test first, and that leg is load-bearing: this gate
# computes its own population, so a block parser that stopped matching
# would print a confident green over a tree it never read (#4690's family).
# The self-test drives the real judge()/run() path and pins all seven
# refusals alongside the positive cases, so "refuses unconditionally"
# cannot satisfy it. It lives in this job with the other docs guards: the
# edit that breaks it is a docs edit, so a packages/** paths filter would
# blind it to its own failure mode. Reads ~34 meta.json + index.mdx pairs,
# no spawns, no build; ~0.1s.
- name: Section landing indexes enumerate their meta.json pages
run: |
node scripts/check-section-landing-index.mjs --self-test
node scripts/check-section-landing-index.mjs

# #3723 ADR anchors: code an accepted ADR governs must keep naming it.
# That incident reversed three accepted ADRs with a patch-level changeset,
# and the mechanism was simply that the edited file never mentioned them —
Expand Down
2 changes: 2 additions & 0 deletions content/docs/data-modeling/index.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,9 +49,11 @@ That one definition is enough to get a persisted table, CRUD + query endpoints,
<Card href="/docs/data-modeling/objects" title="Objects" description="Object metadata: definition, options, and API operations" />
<Card href="/docs/data-modeling/fields" title="Fields" description="Field metadata and configuration" />
<Card href="/docs/data-modeling/field-types" title="Field Types" description="Gallery of every field type with examples" />
<Card href="/docs/data-modeling/field-type-decision-tree" title="Field Type Decision Tree" description="Choosing the right field type: flowchart, quick-reference table, and use cases" />
<Card href="/docs/data-modeling/relationships" title="Relationships & Lookups" description="Lookup, master-detail, and cross-object modeling" />
<Card href="/docs/data-modeling/object-extensions" title="Object Extensions" description="Add fields, validations, and indexes to an object another package owns" />
<Card href="/docs/data-modeling/validation" title="Validation" description="Validation metadata and CEL rule authoring" />
<Card href="/docs/data-modeling/validation-rules" title="Validation Rules" description="Per-type default validation, required properties, and constraints" />
<Card href="/docs/data-modeling/formulas" title="Expressions (CEL)" description="Formula fields and computed logic" />
<Card href="/docs/data-modeling/queries" title="Queries" description="Query syntax quick reference" />
<Card href="/docs/data-modeling/indexing" title="Database Indexing" description="Index configuration and performance" />
Expand Down
2 changes: 1 addition & 1 deletion content/docs/permissions/index.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -62,7 +62,7 @@ alike — is [Declaring Capabilities](/docs/permissions/capabilities).

{/* Source of truth for this module's page set AND its order is meta.json in this directory — routing and the sidebar are built from it, and the list below mirrors it exactly, minus this page. */}
{/* The list is hand-kept on purpose: meta.json stores slugs only, so the link text and the glosses below exist nowhere else, and a generated list would lose them. */}
{/* Drift note: nothing checks the two against each other in either direction, so a page added to or removed from meta.json leaves this list silently stale — edit both in the same change. */}
{/* Checked since #10738: `node scripts/check-section-landing-index.mjs` holds this list's set AND order to meta.json in both directions, for every landing page carrying this heading. Link text and the glosses stay hand-written — the gate reads hrefs only. */}

- [Administrator Guide](/docs/permissions/administrator-guide) — the task-first manual for customer system administrators
- [Authentication](/docs/permissions/authentication)
Expand Down
6 changes: 5 additions & 1 deletion content/docs/ui/index.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,9 +40,13 @@ export const CrmApp = App.create({

<Cards>
<Card href="/docs/ui/apps" title="Apps" description="App metadata: navigation, branding, entry points" />
<Card href="/docs/ui/views" title="Views" description="Grid, kanban, calendar, gantt, map, and more" />
<Card href="/docs/ui/pages" title="Pages" description="Page metadata and layout composition" />
<Card href="/docs/ui/react-pages" title="React Pages" description="Author a page body as real React, or as JSX that is parsed and never executed" />
<Card href="/docs/ui/views" title="Views" description="Grid, kanban, calendar, gantt, map, and more" />
<Card href="/docs/ui/actions" title="Actions" description="Declarative buttons with server-side behavior, bound to lists and records" />
<Card href="/docs/ui/dashboards" title="Dashboards" description="Dashboard metadata, charts, and datasets" />
<Card href="/docs/ui/reports" title="Reports" description="Analytics reports as metadata: report shapes, dataset binding, drill-through" />
<Card href="/docs/ui/translations" title="Translations" description="Labels and UI text as metadata, one bundle per locale" />
<Card href="/docs/ui/forms" title="Forms" description="Public and internal form patterns" />
<Card href="/docs/ui/doc-pages" title="Doc Pages" description="Ship package documentation rendered in the console" />
<Card href="/docs/ui/setup-app" title="Setup App" description="The built-in administration UI" />
Expand Down
Loading
Loading