V0.43.0
Name:v0.43.0Status:active

v0.43.0 — Section is the composition base

A composition that wants a titled region with media places {% section %}, not {% card %}. section gains a body role, a header grammar that no longer reads prose as a header, the media split, cover and a media kind. The composed storytelling runes move onto it, and two new primitives arrive: {% actions %} for rows of buttons and a block-level {% link %}. card renders exactly as it does today (ADR-041, ADR-046, SPEC-160).

Not enough history yet — burndown needs at least one completed day of activity.

Progress 8/8 work items
Related 14

Work Items

Done 8
WORK-650 main
Remove property contentSection, the dead Page document nodes and the PageSection config
28 transforms pass property: 'contentSection' to createComponentRenderable, which emits data-field="content-section" on the rune root. Nothing reads it. The one consumer that ever existed, the Page document node, compares the camelCase 'contentSection' against the kebab-cased attribute, so it could never match, and it is never registered by any Markdoc config. Page also stamps typeof="PageSection", which is not a schema.org type. SPEC-133 decided the removal; v0.35.0 deferred it because it changes HTML on every section rune, and nothing has carried it out since.It lands first in v0.43.0 because it touches the runes SPEC-160 changes next, and it removes one recorded plugin-vs-composed difference from the four composed-storytelling tests before WORK-653 re-runs those comparisons.
medium simple
8/8 criteria
WORK-651 main
section declares its body role
section's sections declare preamble, headline and blurb but no body, so reading and dropcap silently do nothing on a section. This is the case packages/transform/src/section-roles.ts exists to catch (SPEC-160 D1). It stands on its own and is the first step of SPEC-160's order.
high trivial
2/2 criteria
WORK-652 main
section gains the media split, cover and a media kind
card is the only primitive with a media split, so every composition that wants a titled region with media places a drawn object. ADR-041 moves the split onto section. This item gives section the split attributes, cover, and a media attribute that stamps data-media, while card's output stays exactly as it is (SPEC-160 D2, D3).
high moderate
9/9 criteria
WORK-653 main
The storytelling compositions place section instead of card
The composed character, realm and faction place {% card %}, because it was the only primitive with a media split. Once section has the split, they move to it (SPEC-160 D4). The expected differences are listed in D4: rf-section__* element classes, a real <header> for title and description, no surface, and the portrait regaining data-media="portrait".
medium moderate
7/7 criteria
WORK-654 main
An actions primitive, used by hero and cta
Buttons are a convention, not a primitive. hero and cta render links through linkItem, and the CSS that makes them buttons is copied into both runes in both packages:
medium moderate
10/10 criteria
WORK-655 main
link wraps blocks, and card and bento-cell href render through it
Only card and bento-cell can make a whole region a link, each through its own href. Both stretched overlays are aria-hidden="true" tabindex="-1", so keyboard and screen-reader users cannot reach them. SPEC-160 D8 extends the existing link tag to wrap blocks, and both href attributes become shorthand that renders through it.
medium complex
10/10 criteria
WORK-656 main
The eyebrow is a section role, and its linked pill moves into the sections dimension
An eyebrow that holds a link renders as a pill with a stretched link. The rules for it are copied into nine runes: hero, cta, section, feature, pricing, reveal, tabs, accordion and steps. Each copy is in both packages/skeleton/styles/runes/ (the stretched link) and packages/lumina/styles/runes/ (the pill), so there are 18 copies of one pattern. A theme has to restyle the pill in nine places, and a new rune with an eyebrow gets it only by copying it again. card has an eyebrow but no pill.The cause is that the eyebrow has no section role. The shared roles (header, preamble, title, description, body, footer, media) are styled by [data-section] in the sections dimension, whatever the rune; the eyebrow is styled only by its BEM class. With section as the composition base (ADR-041) and hero and cta heading for compositions with no rune CSS (SPEC-160 D7), the pill belongs to the anatomy, not to each rune. This follows the same pattern as WORK-654, which moves button CSS out of hero and cta.
medium moderate
9/9 criteria
WORK-659 main
section's header grammar is anchored to the headline, with a header attribute and a slot-role warning
section reads a leading paragraph as an eyebrow even when no heading follows. A composition that places prose in a section gets it re-roled without any warning, and so does a standalone section used as a region with media. ADR-046 anchors the grammar to the headline, adds a header attribute, and warns when slot content lands in a header role it is not named for.It lands before WORK-653 and WORK-654, which both compose over section.
high moderate
9/9 criteria