Skip to content

docs(spec): give six zod modules a true module-header doc block (#6145) - #6447

Merged
os-project-manager merged 2 commits into
mainfrom
claude/issue-6145-module-header-doc-blocks
Aug 7, 2026
Merged

docs(spec): give six zod modules a true module-header doc block (#6145)#6447
os-project-manager merged 2 commits into
mainfrom
claude/issue-6145-module-header-doc-blocks

Conversation

@os-project-manager

@os-project-manager os-project-manager commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Fixes #6145

Background

#5059 / PR #6134 narrowed getFileDescription() to accept only a module-level doc block that belongs to no symbol (column 0, in the header zone, and not adjacent to a declaration — i.e. TSDoc's own attachment rule read back). The strictness of that rule is its entire value: six reference pages that had been opening with an internal comment were cured by it.

The side effect is six other modules whose opening prose genuinely reads as a module introduction but was written glued to the first declaration. Under the new rule that block belongs to the symbol (it is still its hover text), so the pages stopped showing it and now print nothing. The prose was never the problem; its attachment was.

What this PR does

It gives each of those six modules a true module-header block — the existing introduction is promoted verbatim, byte for byte, to a top-level doc block that documents no symbol (column 0, header zone, followed by the imports rather than by a declaration). That is exactly the shape 74 of the 183 sources that carry a module header already use (api/errors.zod.ts, ai/mcp.zod.ts, cloud/package.zod.ts, …). No new shape was invented, and not one word of new prose was written.

Module Was attached to
data/driver/postgres.zod.ts const POSTGRES_CONFIG_KEYS
data/driver/mysql.zod.ts const MYSQL_CONFIG_KEYS
data/driver/sqlite.zod.ts const SQLITE_CONFIG_KEYS
cloud/template-manifest.zod.ts export const TemplateManifestSchema
system/doc.zod.ts export const DocSchema
api/error-code-ledger.zod.ts export const ERROR_CODE_LEDGER

⛔ The lenient fallback the PM explicitly ruled out on the card — 「不得改回「若 doc block 附着于第一个导出的 schema 就照发」这类宽容回退」 — was not adopted. scripts/build-docs.ts, scripts/lib/file-description.ts and every generator / gate mechanism are untouched, not one byte.

"Verbatim move" is proved, not asserted

For each file, the multiset of non-blank lines is byte-identical to origin/main — i.e. textually these six edits are a pure reordering, with no line added or removed:

PURE MOVE vs post-merge main: packages/spec/src/api/error-code-ledger.zod.ts
PURE MOVE vs post-merge main: packages/spec/src/cloud/template-manifest.zod.ts
PURE MOVE vs post-merge main: packages/spec/src/data/driver/mysql.zod.ts
PURE MOVE vs post-merge main: packages/spec/src/data/driver/postgres.zod.ts
PURE MOVE vs post-merge main: packages/spec/src/data/driver/sqlite.zod.ts
PURE MOVE vs post-merge main: packages/spec/src/system/doc.zod.ts

This matters most for api/error-code-ledger.zod.ts: the "Retiring a code" section PR #6389 added to it earlier today moved up inside the same block, entirely undisturbed.

Premise verification (rule 6)

Measured per file against the same-day latest origin/main with the real findModuleDocBlock(), rather than taken from the card:

packages/spec/src/data/driver/postgres.zod.ts    -> NULL (no module description)
packages/spec/src/data/driver/mysql.zod.ts       -> NULL (no module description)
packages/spec/src/data/driver/sqlite.zod.ts      -> NULL (no module description)
packages/spec/src/cloud/template-manifest.zod.ts -> NULL (no module description)
packages/spec/src/system/doc.zod.ts              -> NULL (no module description)
packages/spec/src/api/error-code-ledger.zod.ts   -> NULL (no module description)

All six pages did in fact open straight into the Callout Source block with no introduction. The premise holds in full; none of it had expired. After the change the same probe returns each module's own header for all six.

Regenerated reference pages

Produced through the standard check:generated --fix flow; the output is committed unedited. The blast radius is exactly the six pages the card listed, not one more:

 content/docs/references/api/error-code-ledger.mdx  | 45 ++++++++++
 content/docs/references/cloud/template-manifest.mdx|  5 +++
 content/docs/references/data/driver-mysql.mdx      | 13 +++++
 content/docs/references/data/driver-postgres.mdx   | 11 ++++
 content/docs/references/data/driver-sqlite.mdx     | 15 ++++
 content/docs/references/system/doc.mdx             | 21 ++++++
 6 files changed, 110 insertions(+), 0 deletions(-)

110 insertions, 0 deletions — the other 178 pages are preserved byte for byte, and #6134's selection result is untouched everywhere.

Reverse verification (direction predicted before it was run)

Prediction: re-gluing any module header back onto its declaration should turn the new pin test red, and the failure should say that file's opening went back to null. Reverting system/doc.zod.ts to origin/main:

× opens each of the six #6145 modules with its own module header
AssertionError: expected null to be 'Package Documentation Metadata Protoc…'
 Tests  1 failed | 38 passed (39)

The direction matched the prediction. Restored, 39/39 green again.

That pin deliberately asserts on the six source files and not on the emitted .mdx: check:docs compares artifact against source, so a re-glued module header would quietly empty the page while the gate stayed green — which is exactly how the original six victim pages survived two rounds on main.

Verification

  • Ran the full gate list enumerated one by one from .github/workflows/lint.yml (not from memory): 30 gates in the ESLint job plus 24 in the TypeScript Type Check job, all green (the 30 ESLint-job gates were re-run after merging origin/main and were still all green).
  • check:authorable-surface green with authorable-surface.base.json unchanged — no authorable key moved, and not one byte of the acceptance surface changed.
  • pnpm --filter @objectstack/spec test: 339 files / 8640 tests passed.
  • pnpm --filter @objectstack/rest test: 64 files / 881 tests passed (the main consumer of the error-code ledger).
  • pnpm --filter @objectstack/spec exec tsc --noEmit green; turbo run build 70/70 and turbo run typecheck 120/120 successful.
  • node scripts/check-nul-bytes.mjs green, plus a self-scan beyond the gate's surface over all 14 files this PR touches — no hits.

The same-day latest origin/main (including PR #6279's bare-name flip) is merged in: no conflicts, and after the merge all 10 check:generated artifacts are green with a clean working tree. check:api-surface did briefly report "44 breaking" after the merge — that is the stale-dist trap documented in AGENTS.md §9 (the dist was still the pre-merge 19:40 build); it went green on a rebuild and is unrelated to this PR.

Refs: #5059 · PR #6134 · PR #6389

claude added 2 commits August 7, 2026 19:56
The six modules already carried a genuine module introduction, written
glued to the module's first declaration. Under #5059's strict selection
rule that block is the SYMBOL's TSDoc — its hover text — so the pages
stopped opening with it and printed nothing instead.

The prose was never the problem; its attachment was. Each block is
promoted VERBATIM to a top-level header that documents no symbol (column
0, header region, followed by the imports rather than by a declaration) —
the shape 74 of the 183 sources with a module header already use.

`content/docs/references/**` is regenerated through the standard
`check:generated --fix` flow: exactly the six listed pages change, 110
insertions and 0 deletions, every other page byte-identical.

Fixes #6145

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ffcE95NaMJcL9XJ9VDYgk
@vercel

vercel Bot commented Aug 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 7, 2026 8:26pm

Request Review

@github-actions github-actions Bot added the size/m label Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

112 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

给 6 个 zod 模块补真正的模块头 doc block —— #5059 新规则下这些页面的开篇介绍需要显式声明

2 participants