whynot-design/ir
tegwick 65247c9320 release: @whynot/design v0.4.2 on Forgejo
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a06d83-1cbc-71f2-b0dc-e0f48cedae43
2026-09-04 23:26:28 +02:00
..
components fix(adapter): resolve all WHYNOT-WP-0002 drift — designbook-refresh green 2026-06-30 09:53:59 +02:00
exemplars feat(designbook): technology-neutral IR + stack-adapter pipeline (WHYNOT-WP-0002 T01-T06) 2026-06-24 12:36:24 +02:00
schema feat(consumer): versioned IR manifest + drift-check (WHYNOT-WP-0003 T03-T07,T09) 2026-06-27 19:35:45 +02:00
INDEX.md release: @whynot/design v0.4.2 on Forgejo 2026-09-04 23:26:28 +02:00
manifest.json release: @whynot/design v0.4.2 on Forgejo 2026-09-04 23:26:28 +02:00
README.md feat(consumer): versioned IR manifest + drift-check (WHYNOT-WP-0003 T03-T07,T09) 2026-06-27 19:35:45 +02:00
SCHEMA.md feat(consumer): versioned IR manifest + drift-check (WHYNOT-WP-0003 T03-T07,T09) 2026-06-27 19:35:45 +02:00
tokens.json feat(designbook): technology-neutral IR + stack-adapter pipeline (WHYNOT-WP-0002 T01-T06) 2026-06-24 12:36:24 +02:00

ir/ — technology-neutral design blueprint

This directory holds the intermediate representation (IR) of the whynot design language: tokens, per-component contracts, and reference exemplars, in a form that carries no framework assumptions.

Decision: ir/ is committed

ir/ is checked into git, on purpose. The IR is the diffable blueprint of the shared language — committing it means a re-extract (make ir) surfaces every blueprint change as a reviewable git diff, and adapters have a stable, versioned input. It is a build input, not a throwaway build output.

What is committed:

  • tokens.json — all tokens, W3C DTCG format.
  • components/<Name>.json — one contract per component.
  • exemplars/<Name>.{png,html} — reference renders from the designbook preview.
  • manifest.json — the per-version inventory + diff anchor: { schemaVersion, designVersion, generatedAt, tokensHash, components: [{ name, group, hash }] }, where each hash is a deterministic content hash (sha256 over canonicalised JSON). This is what a consuming repo pins against and what the drift check compares (WHYNOT-WP-0003). Validated by schema/manifest.schema.json.
  • INDEX.md — the human-readable catalog, generated from the same contracts: per component its group, description, props/variants/slots/events, and a link to its exemplar. Browse a version without cloning or running anything.
  • schema/ + SCHEMA.md — the contract definitions (this is what T01 delivered).

manifest.json and INDEX.md are generated by the same extractor as the rest of ir/ and share its one-way rule — do not hand-edit them.

Direction of flow

Claude Design (React)  ──/design-sync──▶  designbook/  ──make ir──▶  ir/  ──make adapt-lit──▶  adapters/lit/

One-way. The only writer of tokens.json, components/, and exemplars/ is the extractor (scripts/ir-extract.mjs, T05). Do not hand-edit those — change the language in Claude Design and re-propagate. The schema/ files and these docs are the exception: they are authored here.

See SCHEMA.md for the full contract spec and a worked Button exemplar.