WORK-671
ID:WORK-671Status:done

The engine stops adding rf-badge to field values

CHIP_METATYPES (packages/transform/src/engine.ts) gives status, category and tag values the rf-badge class, so the engine decides that those values look like pills. Under ADR-043 decision 3 the engine emits meaning, not shape: the pill comes from the base stylesheet, keyed on data-meta-type, and a theme restyles it like any other rule.

Priority:mediumComplexity:moderateMilestone:v0.46.0Source:ADR-043

Criteria completion

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

Tracking started Nov 2 — check back for trends.

Acceptance Criteria

  • The engine no longer adds rf-badge to field values; CHIP_METATYPES is removed
  • Skeleton keys pill geometry on [data-meta-type="status"], "category" and "tag", and Lumina's skin follows, in the same change, so no value loses its pill
  • {% badge %} keeps rf-badge, and the base rule covers it through its default data-meta-type="tag"
  • Every page in the gallery renders its chips unchanged, light and dark
  • Contracts are regenerated on both copies and the diff reviewed; the CSS coverage test passes
  • SPEC-145 D28's open question on which values are chips gets a pointer to ADR-043

References

  • ADR-043: decision 3.
  • SPEC-145: D28.

Resolution

Completed: 2026-11-02

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

What was done

  • packages/transform/src/engine.ts: CHIP_METATYPES, fieldRendersAsChip, buildChip and buildPlainValue are replaced by buildValue (data-meta-type plus mapped sentiment, no class). renderBlockValue and the definition-list use it, so a <dd> always holds the value element. types.ts docs updated.
  • Skeleton dimensions/metadata.css: the pill's white-space: nowrap is keyed on .rf-badge and [data-meta-type=status|category|tag].
  • Lumina:
    • runes/badge.css: the pill rule takes the same selector list.
    • dimensions/metadata.css: a non-pill def-list value inherits its row's size, and an id/code row sets monospace.
    • runes/work.css, bug.css: the assignee prefix is retargeted to dd > [data-meta-type], and the complexity dots set in tabular numerals.
  • proof-skin skin.css: the pill selector list.
  • Tests: engine-blocks.test.ts is rewritten for classless values, and the composed snapshots (character, lore, realm, faction, section header grammar) are updated.
  • Docs: theme-authoring dimensions.md and blocks-and-layout.md; SPEC-145 D28's open question and attribute table.
  • .changeset/engine-no-rf-badge.md.

Visual review

  • Every page whose build had an rf-badge (36: rune pages, plan, storytelling, theme showcase pages, docs) was full-page screenshotted before and after, light and dark. All 72 are pixel-identical after the def-list size and font follow-ups.

Notes

  • Contracts are unchanged; they do not describe the class.
  • No StructureEntry in a first-party config has a pill type, so none newly became a pill.