WORK-076
ID:WORK-076Status:done

Extract Shared Layout Meta Tag Utility

Priority:highComplexity:simpleSource:SPEC-028

Criteria completion

No incremental history — criteria tracking started on Apr 21.

Branches 2
History 6
  1. e900a90
    Created (done)by bjornolofandersson
  2. f262d7b
    Content editedby Claude
  3. da12420
    statusreadydone
    by Claude
  4. 2637549
    Created (ready)by Björn Andersson
    chore(plan): create v1.0.0 milestone, complete v0.9.0, fix acceptance cr
  5. bfa195e
    statusreadydone
    by Claude
  6. 9aff526
    Created (ready)by Claude
    Add work items WORK-076 through WORK-082 for SPEC-028

Summary

Runes that extend SplitLayoutModel all emit identical boilerplate for layout meta tags (layout, ratio, valign, gap, collapse). Extract this into a shared utility in @refrakt-md/runes so each rune's transform calls one function instead of copy-pasting the conditional logic.

Acceptance Criteria

  • New buildLayoutMetas() utility exported from packages/runes/src/common.ts (or a new layout-helpers.ts)
  • Utility accepts the split layout attrs object and returns { metas: Tag[], properties: Record<string, Tag> }
  • Handles the layout !== 'stacked' guard, gap/collapse conditionals, and all five meta tags (layout, ratio, valign, gap, collapse)
  • recipe.ts in @refrakt-md/learning refactored to use the shared utility
  • realm.ts and faction.ts in @refrakt-md/storytelling refactored to use the shared utility
  • playlist.ts in @refrakt-md/media refactored to use the shared utility
  • All existing tests pass — no change to identity transform output

Approach

  1. Study the layout meta tag block in recipe.ts (reference implementation) and compare with realm.ts, faction.ts, playlist.ts
  2. Extract the shared pattern into a utility function
  3. Replace the inline blocks in all four runes with calls to the utility
  4. Run tests to verify output is unchanged

References

  • SPEC-028 (Standard 6 — Layout Meta Tag Emission Should Be Shared)