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]
- 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.
- 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
Found while implementing #13759 (the three singular
section:sites inlayout-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
yamlparser and the sameclassifyYamlFencethe #11887 arm uses, on
8c6a7fc0b, over all ofcontent/docs/**, with no marker filter:The population is 4, not the 3 the #13759 card recorded. #13759 fixed its three; the
concept.mdxone 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 atconcept.mdx:425in
af01080e3itself, the commit the card measured on. Two control runs separate thehypotheses:
YAML_SECTIONS_KEYpre-filter(
/(^|[^A-Za-z0-9_$.])sections\s*:/m) yields 0, not 3 — so the card did not use it;grepfor the marker yields exactly the card's 3:os:check-yaml FormSectionSchema key=sectionappears 3 times incontent/docs/**, all inlayout-dsl.mdx.So the card's population was "fences carrying the singular
key=sectionmarker", and it wasreported as "the singular population across all of
content/docs/**".concept.mdxcarriesno
os:check-yamlmarkers at all (check:yaml-examplesreports it as0 tagged / 10 untagged), so it is invisible to that scoping.Why it is not a copy of the #13759 edit
The
concept.mdxsite is a different enclosing shape and needs a decision #13759 did not take:example. A
customizations:sequence of{ field | section }overlay entries isdeclared nowhere in
packages/spec— the onlycustomizationsin the authorable surfaceis
tenant.zod.ts'sz.record(z.string(), z.unknown()), a free-form record. Whether thisfence teaches a real shape at all is the prior question; giving it a
namepolishes anexample that may want removing or rewriting instead. Compare the
steps:callout alreadyon
layout-dsl.mdx, which removed a phantom rather than repairing it.directly below (
concept.mdx:440) is a ```json fence carrying two more namelesssections (
"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-namejudgessections:sequences in both arms. This finding adds twomore shapes that carry form sections and that neither arm reaches — a singular
section:mapping, and a
sections:array in ajsonfence — which is the same drift #10830 and #11887each 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-yamlmarker 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:
content/docs/protocol/objectui/concept.mdx:426- section:undercustomizations:,label: Billing Infocontent/docs/protocol/objectui/concept.mdx:444"label": "Contact Information"content/docs/protocol/objectui/concept.mdx:452"label": "Billing Info"⛔ Not a schema change either way:
FormSectionSchema.namestays.optional()(#10709,reaffirmed #10830).
Back-links: #13759, #11887, #10830, #10709