Skip to content

docs(ui): tags IS read from src/docs frontmatter — correct the stale doc-pages callout - #11398

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-10966-doc-pages-tags-callout
Aug 23, 2026
Merged

docs(ui): tags IS read from src/docs frontmatter — correct the stale doc-pages callout#11398
os-zhuang merged 1 commit into
mainfrom
claude/issue-10966-doc-pages-tags-callout

Conversation

@claude

@claudeclaudeBot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Fixes#10966

PR #10483 added an interim warn callout to content/docs/ui/doc-pages.mdx stating that
tags cannot be authored from src/docs/*.md frontmatter. That was true when written.
#10486 has since landed (merged PR #10976, fix(cli): read doc tags from src/docs frontmatter, and report what it cannot read), so every sentence of the callout is now
false and the page actively steers authors away from the path that works.

Documentation only. No source file is touched.

Three sites, all re-derived rather than taken from the card's line numbers

SiteWasNow
Frontmatter table row (:208)"not read from frontmatter — see below"the frontmatter spelling, matching the order: / group: rows above it
The warn callout (:210-217)"tags cannot be set from a src/docs/*.md file today"Replaced (see below), not deleted — deleting swaps one false statement for no steer at all
The "three scalars" sentence (:303)"three scalars … (order, group, tags)""the order and group scalars and the tags list" — tags is a list

Every clause of the new callout is traceable to the merged collector

The card drafted replacement wording before#10976 landed, so that draft was a
prediction of the fix rather than a description of it. Each clause was verified against
the code that actually merged; replacing a false statement with an unverified one would be
the same defect in different clothes.

Clause as publishedVerified at
Read in two spellings: inline tags: [tutorial, beginner], or a block of - item lines under a bare tags:packages/cli/src/utils/collect-docs.ts:128-163 — inline branch requires the remainder to start [ and end ] (:136-146); the block branch collects ^-\s*(.*)$ lines at any indent (:149-162)
What is collected is what include: { tag } matches againstpackages/spec/src/system/book.zod.ts:243Array.isArray(doc.tags) && doc.tags.includes(include.tag)
Flat Markdown and a programmatic docs entry place themselves the same waypackages/cli/src/utils/collect-docs.ts:616const docs = [...inline, ...collected.docs], one merged set
Reader is minimal, not a YAML engine: nested/mapping items, block scalars, quoted items containing commas are outside itpackages/cli/src/utils/collect-docs.ts:122-126 (the frontmatterList docblock's own "Deliberately NOT handled" list)
Reported, not dropped — a docs/frontmatter-tags warning quoting the spelling it foundpackages/cli/src/utils/collect-docs.ts:249-256severity: 'warning', rule: 'docs/frontmatter-tags', message ends Found: ${unreadableTags}
Raised by os lint, os validate, os compile; os build is the same commandlint.ts:510 → printed under Warnings (N) at lint.ts:604-608 and carried in --json; validate.ts:199 → text face at :293-295, --json at :313; compile.ts:352printWarning at :366-371; packages/cli/src/commands/build.ts:5class Build extends Compile
os dev / os serve collect docs without linting them, so the warning does not appear therepackages/cli/src/commands/serve.ts:1608-1623 — "Collection only (no lint-fail): docs are additive; never block boot", collected.issues discarded; dev.ts:401-406 spawns the serve command
A <name>.<locale>.md variant declaring tags: raises the same rule; the tags must move to the base filepackages/cli/src/utils/collect-docs.ts:261-272 — same docs/frontmatter-tags rule, distinct message, and DocTranslationItem (:31-35) carries only label/description/content
The name-convention steer survives as a preference, not a limitationpackages/spec/src/system/doc.zod.ts:122-124 — "Prefer a name convention (include: "crm_guide_*") when one exists — tags are for membership that cuts across naming"

One nuance the card did not predict and the page therefore states carefully: the
locale-variant case and the unreadable-spelling case share the rule id
docs/frontmatter-tags but emit different messages, so the page says the variant "raises
the same rule" rather than "gets the same warning".

Changeset

None, deliberately: this PR is documentation only and releases no package, which is the
repo's skip-changeset case (.github/workflows/pr-automation.yml:196-197 — the label
means "this PR declares no release of its own"). The skip-changeset label is applied on
this PR.

Verification

All 16 gate families derived by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack for this change set, plus check:nul-bytes, run as one union
at the final commit f3a8fb90. Every one exit 0:

check:cross-package-test-inputs OK: 14 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.
check:doc-anchors ✅ 278 internal #fragment link(s) across 408 source file(s) all resolve to a real heading
check:doc-authoring ✓ doc authoring guard: 389 files clean — no bare metadata literals.
check:doc-formula-expressions ✓ 22 record-scoped formula example(s) across 418 files / 1447 TS blocks judged clean; self-test 30 cases passed
check:doc-security-posture ✅ 26 ObjectSchema.create example(s) in 227 marked block(s) across 237 prose file(s) carry an os validate-clean security posture
check:docs-audit-scope ✓ release-owned pages are in scope and read-only: 9 page(s) under content/docs/releases/ review-only
check:docs-redirects check-docs-redirects: OK (92 entries -- 89 page destination(s) resolved, 3 wildcard, 0 outside /docs)
spec check:empty-state ✓ all classified (1 closed, 2 open, 4 output, 9 scope)
spec check:liveness ✓ packages/spec/liveness/state-counts.md is current — the same 31 row(s)
check:published-readme-links ✓ 176 outbound link(s) across 60 published markdown file(s), 103/103 relative target(s) found
check:role-word check-role-word: OK, no new occurrences of the reserved word.
spec check:strictness-ledger ✓ counts.md is current — 439 site(s) measured, 1 authorable strip site(s) left.
spec check:variant-docs ✓ 18 discriminated union(s) — 8 governed, 10 exempt.
check-cross-package-test-inputs OK: 14 package(s) read outside themselves, all declared.
check-doc-frontmatter ✓ 403 page(s) under content/docs parse with yaml@2.9.0
check-section-landing-index ✓ 8 section index block(s) enumerate their meta.json pages, in order, both directions
check:nul-bytes check-nul-bytes: OK (scanned 6384 text file(s); no raw ASCII control bytes)

Two of them (check:doc-formula-expressions, check:doc-security-posture) were red on
first run in the fresh worktree with ERR_MODULE_NOT_FOUND on packages/lint/dist and
@objectstack/formula/dist — the unbuilt-dependency-closure trap, not this diff. Both are
green above after pnpm --filter '@objectstack/lint...' build.

Repo-scale scans (pnpm lint, the docs site build) are CI's run and are not claimed here.
The <name>.<locale>.md placeholder is inside an inline code span, the spelling the
corpus already uses in MDX (content/docs/concepts/metadata-lifecycle.mdx:196,
content/docs/deployment/cli.mdx:327).

⛔ Draft on purpose. Not flipped ready, no auto-merge armed — the PM does that.


Generated by Claude Code

…callout
PR #10483 added an interim warn callout stating that `tags` cannot be set
from a `src/docs/*.md` file. #10976 has since taught the collector to read
it, so every sentence of that callout is now false and the page steers
authors away from the path that works.
Three sites in content/docs/ui/doc-pages.mdx, all verified against the
merged collector rather than transcribed from the filing card:
- the warn callout: replaced (not deleted — leaving nothing swaps one
false statement for no steer at all) with the two accepted YAML
spellings, the reported-not-dropped behaviour of anything else, the
surfaces that raise `docs/frontmatter-tags`, the locale-variant rule,
and the name-convention preference that survives as a preference;
- the frontmatter table row: "not read from frontmatter" becomes
frontmatter `tags:`, matching the `order:` / `group:` rows above it;
- the "three scalars" sentence: `tags` is a list, not a scalar.
Documentation only — no source file touched.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019siH5jDmk5hrayvfyojUqR
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 23, 2026
@github-actionsgithub-actionsBot added size/s documentation Improvements or additions to documentation labels Aug 23, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 23, 2026 15:49
@os-zhuang
os-zhuang added this pull request to the merge queueAug 23, 2026
Merged via the queue into main with commit 171c442Aug 23, 2026
33 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-10966-doc-pages-tags-callout branch August 23, 2026 16:07
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] docs(ui): the tags warn callout in doc-pages.mdx goes stale once the frontmatter list reader lands

2 participants

@os-zhuang@claude