WORK-681
ID:WORK-681Status:done

Stage hero, cta and testimonial on the staging site

The composed hero, cta and testimonial move out of the test fixtures into site/staged-runes/. This makes the review of WORK-665, WORK-666 and WORK-668 possible: the runes' reference pages, the homepage and every other page that uses them, rendered with the compositions on the staging site.

Priority:highComplexity:simpleMilestone:v0.44.0Source:SPEC-181
claude/milestone-v0-44-0-ism7ni View source

Criteria completion

Criteria completion: 6 of 6 (100%) checked; history from Oct 30 to Oct 300%25%50%75%100%Oct 30Oct 30
Implements 1
Related 11
Branches 2
claude/milestone-v0-44-0-ism7ni current done
main doneclaude/rune-compositions-staging-f9ouim ready
History 4
  1. b6e4f04
    • ☑ `packages/runes/test/fixtures/composed/hero.md`, `cta.md` and `testimonial.md` are moved (`git mv`) to `site/staged-runes/`; no copy remains in a fixture directory
    • ☑ `composed-marketing.ts`, `composed-testimonial.test.ts`, `composed-runes-guide.test.ts` and any other reader of the moved files read them there, and every composition test passes unchanged
    • ☑ The `staging` site prefers `__project__` for `hero`, `cta` and `testimonial` (and so for the `review` alias)
    • ☑ `/runes/marketing/hero`, `/runes/marketing/cta`, `/runes/marketing/testimonial` and `/` render with the compositions under `npm run dev:staging` and `npm run build:staging`
    • ☑ `refrakt validate --site staging` reports nothing that `--site main` does not (SPEC-181 D7)
    • ☑ `main`, the contracts and the SEO baseline are unchanged
    by bjornolofandersson
  2. 69c462c
    statusready→in-progress
    by bjornolofandersson
  3. 989c350
    Created (ready)by bjornolofandersson
  4. d68f00e
    Content editedby Claude
    plan: stage testimonial; plugin runes accept the composed form first

Acceptance Criteria

  • packages/runes/test/fixtures/composed/hero.md, cta.md and testimonial.md are moved (git mv) to site/staged-runes/; no copy remains in a fixture directory
  • composed-marketing.ts, composed-testimonial.test.ts, composed-runes-guide.test.ts and any other reader of the moved files read them there, and every composition test passes unchanged
  • The staging site prefers __project__ for hero, cta and testimonial (and so for the review alias)
  • /runes/marketing/hero, /runes/marketing/cta, /runes/marketing/testimonial and / render with the compositions under npm run dev:staging and npm run build:staging
  • refrakt validate --site staging reports nothing that --site main does not (SPEC-181 D7)
  • main, the contracts and the SEO baseline are unchanged

Blocked by

  • WORK-680
  • WORK-684: the hero content uses start / end
  • WORK-685: the testimonial content uses author / role

Blocks

  • WORK-678: steps is written in site/staged-runes/, not as a test fixture
  • WORK-683

References

  • SPEC-181: D1, D4, D7.
  • WORK-665, WORK-666, WORK-668: the differences a reviewer checks.

Resolution

Completed: 2026-10-30

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

What was done

  • git mv of hero.md, cta.md and testimonial.md from packages/runes/test/fixtures/composed/ to site/staged-runes/. No copy remains in a fixture directory, and WORK-683's test holds that.

  • Readers updated:

    • packages/content/test/composed-marketing.ts (hence composed-hero, composed-cta, composed-testimonial);
    • packages/runes/test/composition-models.test.ts (staged());
    • packages/content/test/staging-site.test.ts.

    Every composition test passes unchanged.

  • staging site: runes.prefer sets hero, cta and testimonial to __project__, with runes.schema: "allow".

  • runes.schema: "deny" | "allow" (SPEC-181 D8, amending SPEC-145 D25 item 2): in the config schema, the types and checkProjectRunes / loadProjectRunes options, threaded through every caller (sveltekit, content, cli, validate-core, language server, create-refrakt). The D25 rejection names the option.

  • mergePlugins: a project rune preferred over a plugin rune takes the aliases it shares with it, so review follows testimonial. An alias claimed by another plugin rune still needs its own entry. Tested in project-runes.test.ts.

  • refrakt validate: --site staging and --site main both report no findings.

  • npm run build:staging: builds /runes/marketing/{hero,cta,testimonial} and / with the compositions.

  • Contracts (--check), the SEO baseline and rune-attributes.json are unchanged.

Notes

  • testimonial's schema row is what needed D8. The storytelling compositions (WORK-682) need it too, and can now be staged the same way.