Files
tegwick 2de30beb7b
Some checks failed
ci / check (push) Has been cancelled
ci / release (push) Has been cancelled
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>
2026-06-27 19:35:45 +02:00

39 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Exercise the consumer drift loop against this repo's own ir/manifest.json,
# without a real npm install. Non-destructive: the committed adopted.lock is
# copied into a scratch dir; only that copy is mutated.
#
# In a REAL consuming repo you would not pass --manifest at all — the installed
# @whynot/design package supplies its own ir/manifest.json, and the lock lives at
# ./.whynot-design.lock. Here we point at the repo copy so the demo is hermetic.
set -euo pipefail
cd "$(dirname "$0")"
REPO_ROOT="$(cd ../.. && pwd)"
CLI="$REPO_ROOT/bin/whynot-design.mjs"
MANIFEST="$REPO_ROOT/ir/manifest.json"
WORK="$(mktemp -d)"
trap 'rm -rf "$WORK"' EXIT
cp adopted.lock "$WORK/.whynot-design.lock"
LOCK="$WORK/.whynot-design.lock"
echo "### 1. Inspect — what's in this version"
sed -n '1,6p' "$REPO_ROOT/ir/INDEX.md"
echo
echo "### 2. drift — what changed since the adopted (0.2.0) sync-point (expect exit 3)"
set +e
node "$CLI" drift --manifest "$MANIFEST" --lock "$LOCK"
echo "(exit $?)"
set -e
echo
echo "### 3. drift --update — adopt the current version as the new sync-point"
node "$CLI" drift --manifest "$MANIFEST" --lock "$LOCK" --update >/dev/null
echo
echo "### 4. drift again — now in sync (expect exit 0)"
node "$CLI" drift --manifest "$MANIFEST" --lock "$LOCK"
echo "(exit $?)"