WORK-625
ID:WORK-625Status:ready

Slice 2 — character as a composed rune, against the SEO baseline

SPEC-145's full worked example and its spike criterion. It is the first composed rune with a schema row: Person, which a first-party definition may declare under D25. It is also the first that uses sections with each and $each.heading, and a preamble with an image slot.

character is the case WORK-617 was cancelled for. Its transform failed SPEC-143's D4 family test, so it is replaced rather than declared. The composed version drops the character-section child rune entirely.

Like WORK-624, it ships beside the plugin (SPEC-147 D1). The reference is the storytelling character fixture in contracts/seo-baseline/. The gate is that every difference from it is explained, not that there are none (SPEC-147 D2). Two differences are already decided:

Priority:highComplexity:complexMilestone:v0.40.0Source:SPEC-145,SPEC-147
claude/v040-metablock View source

Criteria completion

Criteria completion: 0 of 8 (0%) checked; tracking started on Oct 8, no incremental history yet0%25%50%75%100%Oct 8Oct 11

Tracking started Oct 8 — check back for trends.

Branches 3
History 1
  1. 587518b
    Created (ready)by bjornolofandersson

Blocked by

  • WORK-624
  • WORK-630

Acceptance Criteria

  • character is defined as a composed rune with a Person schema row, a sections slot placed with each, and the portrait and description preamble slots
  • Its JSON-LD is compared against the character fixture's recorded output in contracts/seo-baseline/baseline.json, and every difference is explained in writing (SPEC-147 D2)
  • One storytelling rune is reimplemented as a composed rune in a spike, and the emitted tree is compared against today's — not necessarily identical, but every difference explained
  • A composed rune's content-derived properties resolve — with image: portrait added to the row, the image from a slot-placed portrait reaches the entity, asserted against the graph and not just the attributes; the added property is an explained difference from the baseline (D10)
  • A composed character with both sections and other body content renders that content, and the plugin's discarding of it is recorded as an explained difference (SPEC-147 Finding 6, D6)
  • The composed character emits no data-field="section" on its sections (SPEC-147 D6)
  • The composed character registers the same entity, id, data and aliases as the plugin's, asserted against the storytelling registry snapshot
  • plugins/storytelling/ is unchanged and still passing its own tests (SPEC-147 D1)