WORK-687
ID:WORK-687Status:done

testimonial reads its byline from the paragraph again, and the attribute migration is reversed

The staged testimonial reads **Name** — Role through WORK-686's paragraph item model, and keeps author and role as the alternative form (SPEC-182 D6). The content migration and the codemod that pointed the other way are reversed before v0.44.0 is released (D7).

Priority:highComplexity:simpleMilestone:v0.44.0Source:SPEC-182

Criteria completion

Criteria completion: 7 of 7 (100%) checked; tracking started on Oct 30, no incremental history yet0%25%50%75%100%Oct 30Nov 4

Tracking started Oct 30 — check back for trends.

Branches 1
History 3
  1. 99771c3
    Created (done)by bjornolofandersson
  2. a23b676
    Content editedby Claude
    WORK-686, WORK-687: done, PR #738
  3. 7370042
    Content editedby Claude
    v0.44.0: a paragraph fills a rune's own values; testimonial keeps its by

Acceptance Criteria

  • site/staged-runes/testimonial.md declares the attribution field with an item model and fills: { author: $name, role: $role }, and still declares author and role
  • Both forms render identically and publish the same Review / Person / Rating graph, asserted against the plugin by the comparison tests
  • A comma attribution fills the role without the comma (BUG-019 fixed in the composition), and the comparison test records it as an explained difference
  • site/content and the two SEO fixtures return to the paragraph form, and seo:baseline:check passes without regenerating
  • refrakt marketing migrate-testimonial, the marketing ./cli-plugin export and their changeset entries are removed; the plugin keeps author / role and parseAttribution
  • The testimonial reference page, the plugin snippet and the editor snippet teach the paragraph form, with author / role documented as the alternative
  • refrakt validate --site staging reports nothing that --site main does not

Blocked by

  • WORK-686

References

  • SPEC-182: D6, D7.
  • WORK-668, WORK-685: what is reversed.
  • BUG-019: the comma attribution.

Resolution

Completed: 2026-10-30

Branch: claude/milestone-v0-44-0-ism7ni

What was done

  • site/staged-runes/testimonial.md: an attribution field with an item model and fills: { author: $name, role: $role }. The author/role attributes are kept.
  • packages/content/test/composed-testimonial.test.ts:
    • both forms render identically and produce the baseline Review graph;
    • the comma fix is asserted as the one explained difference (BUG-019);
    • the fill-overridden warning is asserted;
    • the codemod tests are replaced by a check that this repository's testimonials use the paragraph form.
  • Reverted to the paragraph form: site/content/index.md, site/content/runes/marketing/testimonial.md, and contracts/seo-baseline/fixtures/testimonial{,.comma}.md. seo:baseline:check passes unregenerated.
  • Removed: plugins/marketing/src/migrate-testimonial.ts, cli-plugin.ts, the ./cli-plugin export, the codemod exports, the cli-overview row, and the changeset mentions. Added .changeset/paragraph-fills.md.
  • Snippets (plugin and VS Code) teach **Name** — Role.

Notes

  • The plugin keeps author/role and parseAttribution. Its own byAttributes rule (either attribute disables the paragraph) differs slightly from the composition's per-attribute precedence; both forms written together is warned about.