Acceptance Criteria
character, realm and faction place {% section %} with media-position passed through, and character passes media="portrait"- The composed
character declares a media-position attribute with default: top (today it writes a bare {% card %} and declares none), so its output position matches the card default it had - The three compositions raise no slot-role warning (WORK-659) on
section, asserted in a test - The composed
character renders its portrait with data-media="portrait" again - The JSON-LD, RDFa and registry comparisons against the plugin are re-run, not re-recorded, and any movement is explained in the resolution
- The recorded rendered-tree differences in the composed-storytelling tests are updated, each change explained
plugins/storytelling/ is unchanged and still passing its own tests (SPEC-147 D1)
Blocked by
- WORK-652
- WORK-659:
section's anchored header grammar, so the comparisons are taken against it - WORK-650: so the comparisons are re-run once, without the dead
content-section difference
References
- SPEC-160: D4.
- SPEC-147: D1, D2.
Resolution
Completed: 2026-10-26
Branch: claude/v0-43-0-review-ny4nl1
What was done
packages/content/test/fixtures/composed-storytelling/runes/{character,realm,faction}.md place {% section %}.realm and faction forward the split attributes they already declared.character declares media-position (top | bottom | start | end, default top) and passes media="portrait".
composed-character.test.ts, composed-realm-faction.test.ts and the realm/faction snapshot are updated, each changed assertion commented.packages/content/test/composed-section-roles.test.ts (new): no slot-header-role on any fixture of the three, plus a control without the metablock that gets the expected blurb finding.
Comparisons, re-run not re-recorded
- JSON-LD against the SEO baseline at both harvest points, the
mediatext comparison's graph, and the storytelling registry snapshot (registrations, name index, types, warnings, and the cross-links lost inside nested runes): all unchanged.
Rendered-tree differences, each as SPEC-160 D4 predicts
- Element classes
rf-card__* → rf-section__*. - The name is
section's headline (<h1 data-name="headline">) in a real <header>, where inside card it was rf-card__title in the body. The metablock after it keeps the description out of the blurb role. - No
card surface. - The composed
character's portrait is data-media="portrait" again.
Notes
- Two differences D4 did not list:
section's align default adds rf-section--start and data-align="start";- the composed
character root now carries data-media-position="top", as realm and faction already did. Its new enum attribute becomes a modifier of the generated config (D2a).
plugins/storytelling/ is untouched.