Narrow rune schemas to applicable universal attributes
createContentModelSchema merges all ~37 universal attributes unconditionally:
createContentModelSchema merges all ~37 universal attributes unconditionally:
Tracking started Sep 6 — check back for trends.
127194fSix runes carry hand-written schemas and therefore no universal attributes at all, and the split is mostly principled:
| Rune | Reason | |
|---|---|---|
xref, badge | inline: true | correct — block axes are meaningless on a span |
tint, bg | configurator runes that supply axis values to a parent | correct — a {% tint %} with its own tint= is circular |
icon | effectively an inline glyph | probably correct; confirm |
expand | block-level disclosure | probably wrong; reads as legacy |
So availability needs at least three inputs — inline-ness, configurator-ness, and rune-structural applicability — expressed as a rule rather than left to which constructor a schema happened to use.
Migrating these six to createContentModelSchema is a non-goal. Four would end up declaring "no universal attributes" anyway.
createContentModelSchema merges only the applicable universal attributesexpand and icon are each explicitly assessed and their outcome recordedunavailable entries and the narrowed schemas agree — the two derivations must not diverge, and a test enforces itnpm run build, the full repo suite, and refrakt contracts --check passThis is the breaking change. {% card reading="prose" %} moves from a silent no-op to a Markdoc validation error. Intended — the author gets no feedback at all today — but it will fail builds on existing content.
Exposure is probably low: most of it is content setting an attribute that never did anything, on a rune that never could honour it, so the likely source is copy-paste between runes. And v0.31.0 removed the sharpest cases in advance — the runes an author is most likely to have written reading on are the six whose roles were missing, and those now work rather than erroring.
Before committing to rejection, measure. ADR-028 keeps a transitional alternative open: keep schemas permissive for one minor and have the tooling annotate rather than reject, narrowing in the release after. Decide from the real numbers, not from the estimate above.
The "declared slots for a rune" helper from WORK-532 is likely reusable here.