WORK-101
ID:WORK-101Status:done

Migrate moderate-complexity runes from Model to createContentModelSchema

Migrate runes that have multiple groups, context-dependent group logic, or light custom processing. These need more careful mapping but don't require the custom escape hatch.

Priority:highComplexity:moderateMilestone:v1.0.0
claude/align-sidenav-styling-4MuxV View source

Criteria completion

No incremental history — criteria tracking started on Apr 17.

Branches 3
History 3
  1. f0a845a
    Content editedby Claude
    chore(plan): check off acceptance criteria for 14 completed v1.0.0 work
  2. a20f532
    Content editedby Claude
    Mark all SPEC-032 work items as done (WORK-099 through WORK-104)
  3. 5c72bef
    Created (done)by Claude
    Add work items WORK-099 through WORK-104 for legacy Model removal

Runes

RuneLocationChallengeContent model
navpackages/runes/src/tags/nav.tsMultiple heading-based sections with nested structuresections
pricingrunes/marketing/src/tags/pricing.tsMulti-section layout with header/features/footer splitsections
maprunes/places/src/tags/map.tsSections with location extraction from child contentsections
storyboardrunes/storytelling/src/tags/storyboard.tsImage-triggered panel accumulator with caption groupingcustom

Acceptance Criteria

  • nav rewritten using createContentModelSchema with sections content model
  • pricing rewritten using createContentModelSchema with sections content model
  • map rewritten using createContentModelSchema with sections content model
  • storyboard rewritten using createContentModelSchema with custom content model
  • refrakt inspect <rune> --type=all output is identical before and after for each rune
  • All existing tests pass after each migration
  • No Model class import remains in any of the migrated files

Approach

  • nav: Map the heading-level group splits to a sections model. Heading content becomes section names; nested content follows naturally.
  • pricing: Header/body/footer groups map to named sections. Feature list extraction stays in the transform function.
  • map: Section-based content with location metadata extraction in transform.
  • storyboard: The image-triggered panel accumulator is genuinely stateful — use custom content model with the panel grouping logic in processChildren.

Dependencies

  • WORK-099 (core simple runes migrated first)

References

  • SPEC-032 (parent spec)