feat(consumer): versioned IR manifest + drift-check (WHYNOT-WP-0003 T03-T07,T09)
Make ir/ the unit of versioned downstream consumption so consuming repos can pin a version, inspect it, and follow changes at their own pace. - T03 ir/manifest.json: per-version inventory + diff anchor with deterministic sha256-over-canonicalised-JSON hashes; no-churn generatedAt; manifest schema. - T07 ir/INDEX.md: human-readable catalog generated by make ir. - T04 .whynot-design.lock sync-point format + lock schema. - T05 npx @whynot/design drift: consumer drift-check (bin entry), exit 0/2/3, --json/--update/--manifest/--version/--lock. - T06 CONSUMING.md guide + examples/consumer-fixture/ runnable demo; README + MultiFrameworkSupport cross-links; fix README version pin (@0.3.0 not @v0.3.0). - T09 CONSUMER_CONTRACT_PARITY.md design-only note (live-UI parity deferred). T02 (publish) and T08 (showcase, blocked on WP-0002 T11) remain wait. Repo stays in dev mode; no outward publish performed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
20
CHANGELOG.md
20
CHANGELOG.md
@@ -8,6 +8,26 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Version
|
||||
|
||||
### Added
|
||||
|
||||
- **Versioned IR manifest + consumer drift-check** (WHYNOT-WP-0003, Phase 1–4). The
|
||||
`ir/` contract is now the unit of versioned downstream consumption:
|
||||
- `ir/manifest.json` (T03) — per-version inventory + diff anchor:
|
||||
`{ schemaVersion, designVersion, generatedAt, tokensHash, components:[{name,group,hash}] }`,
|
||||
each hash a deterministic sha256 over canonicalised JSON (formatting-invariant,
|
||||
`generatedAt` reused on no-op runs → no git churn). Schema:
|
||||
`ir/schema/manifest.schema.json`. Emitted by `make ir`.
|
||||
- `ir/INDEX.md` (T07) — human-readable catalog generated from the contracts;
|
||||
browse a version without cloning or running anything. Emitted by `make ir`.
|
||||
- **`npx @whynot/design drift`** (T05) — consumer-side drift-check (`bin/whynot-design.mjs`,
|
||||
new `bin` entry). Compares a consumer's adopted `.whynot-design.lock` against the
|
||||
installed package's manifest and reports added/changed/removed components + token
|
||||
changes (`--json`, `--update`, `--manifest`, `--version`, `--lock`). Exit codes
|
||||
mirror the adapter contract: `0` in sync · `2` usage error · `3` drift.
|
||||
- `.whynot-design.lock` sync-point format (T04) — `ir/schema/lock.schema.json` +
|
||||
documented lifecycle (consumer-side mirror of `designbook/.design-sync.json`).
|
||||
- `CONSUMING.md` (T06) — pin → inspect → drift → update guide, with a runnable
|
||||
`examples/consumer-fixture/`; cross-linked from `README.md` and `MultiFrameworkSupport.md`.
|
||||
- `CONSUMER_CONTRACT_PARITY.md` (T09) — design-only note + recorded go/defer
|
||||
decision for the heavier live-UI-vs-contract parity mode (deferred).
|
||||
- **Publishable to the coulomb Gitea npm registry** (WHYNOT-WP-0003 T02) — `private:false`,
|
||||
`publishConfig.registry`, real `repository.url`, an `.npmrc` scope + `${NPM_AUTH_TOKEN}`
|
||||
reference (no secret committed), and `PUBLISHING.md` (publish flow + consumer install +
|
||||
|
||||
Reference in New Issue
Block a user