WORK-480
ID:WORK-480Status:done

Reading-role gallery subject + docs

Visually regression-guard the reading treatment and document the registers for authors. Per SPEC-108 Implications + Work breakdown 4.

Priority:lowComplexity:simpleMilestone:v0.26.0Source:SPEC-108
claude/spec-108-gallery-docs View source

Criteria completion

Criteria completion: 2 of 2 (100%) checked; tracking started on Jun 25, no incremental history yet0%25%50%75%100%Jun 25Jul 11

Tracking started Jun 25 — check back for trends.

Branches 3
History 2
  1. 1cddfa6
    Created (done)by bjornolofandersson
  2. 17d2678
    Content editedby Claude
    v0.26.0: accept ADR-018 + SPEC-099/100/108, break down into 15 work item

Scope

  • Add a prose subject to the gallery — a long body rendered at each register (fine/ui/ prose), including the editorial-header composition (elevation="flush" width="full" prominence="display" reading="prose") so the measure-vs-width independence is guarded in light + dark.
  • Docs: a reading-role section in the surfaces / theme-authoring docs (how the theme interprets reading="prose"), and the fine/ui/prose registers documented for content authors.

Acceptance Criteria

  • The gallery grows a prose subject rendering a long body at each register, including the editorial-header composition (light + dark), so the reading treatment is regression-guarded.
  • Docs: a reading-role section in the surfaces / theme-authoring docs, and the fine/ui/prose registers documented for content authors.

Dependencies

  • WORK-477 — defaults to exercise in the gallery subject.
  • WORK-478 — the Lumina treatment being guarded and documented.

References

  • Spec: SPEC-108 Implications (gallery prose subject), §5 (editorial-header composition).

Resolution

Completed: 2026-06-25

Branch: claude/spec-108-gallery-docs

What was done

  • Gallery reading subject (packages/cli/src/commands/gallery.ts): a new readingCells() emits a long body at each register (fine/ui/prose) plus the editorial-header composition (elevation=flush width=full reading=prose dropcap=true) as a synthetic reading gallery group, so it rides the existing light/dark documents and per-cell clipping. Added reading/dropcap to UNIVERSAL_AXES so the per-rune variant matrix skips them (showcased once here instead of expanding fine/ui/prose × dropcap across every rune).
  • Universal reading/dropcap forwarding fix (packages/runes/src/lib/index.ts): createContentModelSchema forwarded width/elevation/etc. onto the output tag but never reading or dropcap, so an author reading=/dropcap= override never reached the engine — and dropcap was wholly non-functional after WORK-478 removed textblock's own copy in favour of the universal one. Surfaced while building the editorial-header cell. Added the two forwards.
  • Regression tests (packages/runes/test/textblock.test.ts): schema-level assertions that reading=/dropcap= reach the rune tag. The transform reading.test.ts uses synthetic tags and bypassed the schema, which is why the gap shipped.
  • Docs: reading-register section in site/content/extend/theme-authoring/dimensions.md (vocabulary, resolution precedence, measure-vs-width independence with CSS, dropcap, the editorial-header composition); author-facing Reading section + axes-table row in site/content/runes/surfaces.md.

Notes

  • Contracts unchanged — data-reading/data-dropcap are emitted conditionally on author/rune state, not part of the default structure, so contracts.test.ts stayed green. 1868 runes/transform/lumina/cli tests pass.
  • The prominence dial is a header-rune affordance and a no-op on a bare textblock body, so the gallery's editorial-header cell omits it (it warned otherwise); the docs example carries the full composition on a header-bearing rune.