Skip to content

[finding] The singular section: census is 4, not 3 — concept.mdx carries a 4th nameless one, plus two more in an unjudged JSON fence #13880

Description

@os-project-manager

Found while implementing #13759 (the three singular section: sites in layout-dsl.mdx).
Filed separately, not folded in: the triage ruling on #13759 fenced the population question
out of that PR, and this finding is exactly that question wearing a concrete example.

The measurement

Re-running the #13759 census with the same yaml parser and the same classifyYamlFence
the #11887 arm uses, on 8c6a7fc0b, over all of content/docs/**, with no marker filter:

yaml fences scanned : 148   (judged 145, skipped 3 on a syntax error)
singular `section:` mappings : 4
  NAMELESS content/docs/protocol/objectui/concept.mdx:426     label="Billing Info"          keys=label|fields
  NAMELESS content/docs/protocol/objectui/layout-dsl.mdx:235  label="Contact Information"   keys=label|columns|fields
  NAMELESS content/docs/protocol/objectui/layout-dsl.mdx:263  label="Product Details"       keys=label|columns|fields
  NAMELESS content/docs/protocol/objectui/layout-dsl.mdx:295  label=null                    keys=columns|fields

The population is 4, not the 3 the #13759 card recorded. #13759 fixed its three; the
concept.mdx one is untouched and still live.

Why the card counted 3 — the census was scoped by MARKER, not by shape

Not drift, and not a fourth that appeared since: - section: is present at concept.mdx:425
in af01080e3 itself, the commit the card measured on. Two control runs separate the
hypotheses:

  • re-running the census with the gate's own YAML_SECTIONS_KEY pre-filter
    (/(^|[^A-Za-z0-9_$.])sections\s*:/m) yields 0, not 3 — so the card did not use it;
  • grep for the marker yields exactly the card's 3:
    os:check-yaml FormSectionSchema key=section appears 3 times in content/docs/**, all in
    layout-dsl.mdx.

So the card's population was "fences carrying the singular key=section marker", and it was
reported as "the singular population across all of content/docs/**". concept.mdx carries
no os:check-yaml markers at all (check:yaml-examples reports it as 0 tagged / 10 untagged), so it is invisible to that scoping.

Why it is not a copy of the #13759 edit

The concept.mdx site is a different enclosing shape and needs a decision #13759 did not take:

customizations:
  - field: phone
    required: true
  - section:              # <- the 4th nameless singular section
      label: Billing Info
      fields: [payment_terms, credit_limit]
  1. The enclosing shape has no schema. This is the page's "Layer 2: Admin Customization"
    example. A customizations: sequence of { field | section } overlay entries is
    declared nowhere in packages/spec — the only customizations in the authorable surface
    is tenant.zod.ts's z.record(z.string(), z.unknown()), a free-form record. Whether this
    fence teaches a real shape at all is the prior question; giving it a name polishes an
    example that may want removing or rewriting instead. Compare the steps: callout already
    on layout-dsl.mdx, which removed a phantom rather than repairing it.
  2. Its sibling fence is unjudged too, and is not YAML. The "Final Merged Layout" block
    directly below (concept.mdx:440) is a ```json fence carrying two more nameless
    sections ("label": "Contact Information", `"label": "Billing Info"`) inside a real
    `"sections": [ ... ]` array. `json` is in neither `TS_FENCE_LANGS` nor `YAML_FENCE_LANGS`,
    so both arms of `check-docs-section-name` pass over it. Fixing the YAML half alone would
    teach an anchor that vanishes from the merged output shown two paragraphs later.

Why the population question is the real subject

check-docs-section-name judges sections: sequences in both arms. This finding adds two
more shapes that carry form sections and that neither arm reaches — a singular section:
mapping, and a sections: array in a json fence — which is the same drift #10830 and #11887
each closed one selector at a time. Deciding the gate's population means deciding which keys
and which fence languages introduce a form section, together with how the os:check-yaml
marker vocabulary is read. That is a triage call, not a dev call, and it is the one #13759
deliberately deferred.

Sites, for whoever picks this up:

site fence shape
content/docs/protocol/objectui/concept.mdx:426 ```yaml, untagged - section: under customizations:, label: Billing Info
content/docs/protocol/objectui/concept.mdx:444 ```json, unjudged by both arms "label": "Contact Information"
content/docs/protocol/objectui/concept.mdx:452 ```json, unjudged by both arms "label": "Billing Info"

⛔ Not a schema change either way: FormSectionSchema.name stays .optional() (#10709,
reaffirmed #10830).

Back-links: #13759, #11887, #10830, #10709

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions