You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while implementing #13086 (the opt-in os:check-yaml checker, ruled 2026-08-29). Filed unassigned, recording only — the ruling on #13086 explicitly deferred corpus content clean-up out of that card (option (i) is a follow-up once the mechanism lands), so these readings are recorded here rather than fixed there.
Measured on branch claude/issue-13086-yaml-fence-checker at 4cf14eed (base origin/main @ 7404925), by parsing every YAML fence on content/docs/protocol/objectui/layout-dsl.mdx and running safeParse with the live schemas (PageSchema, FormViewSchema, FormSectionSchema, ResponsiveStylesSchema), resolved the same way check:yaml-examples resolves them.
What holds today
6 fences validate as-is and are now tagged (the #13086 PR): two section: wrappers, two sections: lists, the tabbed FormViewSchema example, and the responsiveStyles fragment.
What the live schemas refuse (still untagged, line numbers as of the tagged page)
Every rejection below is the one a runtime save would print. Grouped by defect shape:
Page-template examples are not legal pages — fences at ~75 (Standard Template) and ~126 (Console Template) carry a context: key (Unrecognized key(s) on this page: context) and omit the required name and label. The page's own "Layout Schema Reference" section documents the real Page shape and contradicts its own examples.
steps: wizard shape exists on no schema — fences at ~187 and ~1000 (Multi-Step Onboarding Wizard): Unrecognized key(s) on this page: steps.
Section-level layout: span DSL exists on no schema — fences at ~250, ~419, ~444: Unrecognized key(s) on this form section: layout; the bare field_group item list also fails FormFieldSchema (span there is an enum of auto/full, not a number).
Section variant: is a phantom key — fence at ~397 (compact / spacious / danger): Unrecognized key(s) on this form section: variant.
Related-list and widget "sections" are not form sections — five fences between ~593 and ~700: Unrecognized key(s) on this form section: type, object, relationField, mode, actions, component, config (and fields missing). No live schema was found that accepts these bodies.
Advanced layout: blocks (split_view / card_grid / kanban) — three fences between ~706 and ~745: refused by both PageSchema (Unrecognized key(s) on this page: layout with a rename hint toward template) and FormViewSchema (layout there is an enum vertical/horizontal/inline/grid). The card_grid one teaches a per-breakpoint columns: map — the same breakpoint-map defect class [finding] docs teach a field-level visible key in three shapes, none of which exists — FieldSchema refuses the spelling by name #12935 removed elsewhere on this very page.
Customer 360 example writes regions as a map — fence at ~935: PageSchema.regions expects an array (Invalid input: expected array, received object), and label is missing.
Groups 1, 2, 5, 6 are not key-level typos: they document whole surfaces the spec does not declare, so the fix is a removed-or-implemented decision per section (the same judgment #12935 applied by hand to the visible-map and tab-options sections), not a mechanical rename. That is docs-content triage.
Re-check
pnpm --filter @objectstack/spec run check:yaml-examples prints the per-file tagged/untagged census.
Tagging any of the fences above with an os:check-yaml declaration reproduces the corresponding rejection verbatim.
Found while implementing #13086 (the opt-in
os:check-yamlchecker, ruled 2026-08-29). Filed unassigned, recording only — the ruling on #13086 explicitly deferred corpus content clean-up out of that card (option (i) is a follow-up once the mechanism lands), so these readings are recorded here rather than fixed there.Measured on branch
claude/issue-13086-yaml-fence-checkerat4cf14eed(baseorigin/main@7404925), by parsing every YAML fence oncontent/docs/protocol/objectui/layout-dsl.mdxand runningsafeParsewith the live schemas (PageSchema,FormViewSchema,FormSectionSchema,ResponsiveStylesSchema), resolved the same waycheck:yaml-examplesresolves them.What holds today
6 fences validate as-is and are now tagged (the #13086 PR): two
section:wrappers, twosections:lists, the tabbedFormViewSchemaexample, and theresponsiveStylesfragment.What the live schemas refuse (still untagged, line numbers as of the tagged page)
Every rejection below is the one a runtime save would print. Grouped by defect shape:
Standard Template) and ~126 (Console Template) carry acontext:key (Unrecognized key(s) on this page: context) and omit the requirednameandlabel. The page's own "Layout Schema Reference" section documents the realPageshape and contradicts its own examples.steps:wizard shape exists on no schema — fences at ~187 and ~1000 (Multi-Step Onboarding Wizard):Unrecognized key(s) on this page: steps.layout:span DSL exists on no schema — fences at ~250, ~419, ~444:Unrecognized key(s) on this form section: layout; the barefield_groupitem list also failsFormFieldSchema(spanthere is an enum ofauto/full, not a number).variant:is a phantom key — fence at ~397 (compact/spacious/danger):Unrecognized key(s) on this form section: variant.Unrecognized key(s) on this form section: type, object, relationField, mode, actions, component, config(andfieldsmissing). No live schema was found that accepts these bodies.layout:blocks (split_view / card_grid / kanban) — three fences between ~706 and ~745: refused by bothPageSchema(Unrecognized key(s) on this page: layoutwith a rename hint towardtemplate) andFormViewSchema(layoutthere is an enumvertical/horizontal/inline/grid). The card_grid one teaches a per-breakpointcolumns:map — the same breakpoint-map defect class [finding] docs teach a field-levelvisiblekey in three shapes, none of which exists —FieldSchemarefuses the spelling by name #12935 removed elsewhere on this very page.Customer 360example writesregionsas a map — fence at ~935:PageSchema.regionsexpects an array (Invalid input: expected array, received object), andlabelis missing.Why recorded rather than fixed in #13086
Groups 1, 2, 5, 6 are not key-level typos: they document whole surfaces the spec does not declare, so the fix is a removed-or-implemented decision per section (the same judgment #12935 applied by hand to the
visible-map and tab-options sections), not a mechanical rename. That is docs-content triage.Re-check
pnpm --filter @objectstack/spec run check:yaml-examplesprints the per-file tagged/untagged census.os:check-yamldeclaration reproduces the corresponding rejection verbatim.Generated by Claude Code
Generated by Claude Code