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.0Source:SPEC-032
changeset-release/main View source

Criteria completion

No incremental history — criteria tracking started on Apr 19.

Branches 3
History 6
  1. f2b3512
    Content editedby Claude
    Add {ID}-{slug}.md filename convention + migrate filenames subcommand
  2. 59ded4a
    Content editedby Claude
    Implement SPEC-037 plan package hardening: all 7 work items
  3. f262d7b
    Content editedby Claude
    Backfill source attributes on all 123 work items
  4. f0a845a
    Content editedby Claude
    chore(plan): check off acceptance criteria for 14 completed v1.0.0 work
  5. a20f532
    Content editedby Claude
    Mark all SPEC-032 work items as done (WORK-099 through WORK-104)
  6. 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)