baldart 4.78.0 → 4.78.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,28 @@ All notable changes to BALDART will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [4.78.2] - 2026-06-29
9
+
10
+ **The "visual-verify every `ui-expert` intervention" hard rule was investigated and deliberately NOT built.** The ask sounded obvious — wire an invariant `UI_VISUAL_UNVERIFIED` forcing a visual check after every `ui-expert` implementation. Three adversarial reviewers (distinct lenses) refuted the diagnosis: (1) standalone skills already verify — `/ui-design` has its generator/evaluator Playwright loop, `/ds-new` + `/ds-edit` delegate to `ui-expert`'s own BLOCKING pre-work + `ds-gate` + the coherence report, `/ds-render` feeds `/e2e-review` Phase 4b; (2) the invariant would be redundant with the existing `DS_*` coherence codes + the `coverage-gap` finding, and would fire **constantly** on every Storybook-less project — the gate-with-no-exit structural false-positive the framework explicitly avoids — plus risk the assertion-fitting the verifier trio forbids; (3) the real driver the obvious diagnosis missed: **visual verification is deliberately deferred to where a ground-truth exists** (a composed route / a mockup) — an inert scaffolded primitive has nothing to be judged against, so verifying it *now* judges the void. The single useful residue (a deterministic `PostToolUse` hook would beat prose if one ever wanted to harden `/new`'s own prose-driven Phase 2.6) was logged, not built. So this release ships only the **zero-cost, non-regressive nudge**: a documentation pointer making explicit *where* route-level fidelity lives.
11
+
12
+ **PATCH** — doc-only pointers; no new capability, no agent, no invariant, **no `baldart.config.yml` key**. The nudge is a pointer to the existing `/e2e-review` Phase 4, never a blocking obligation; skipped/irrelevant where no render surface exists.
13
+
14
+ ### Changed
15
+
16
+ - **`/ds-render`** (`framework/.claude/skills/ds-render/SKILL.md`) — added a "Where route-level fidelity lives" note: the harness verifies a primitive in isolation (quality only, no ground-truth); the full fidelity check happens downstream via `/e2e-review` Phase 4 when the primitive is composed into a real route. A pointer, never a blocking obligation.
17
+ - **`/ui-design`** (`framework/.claude/skills/ui-design/SKILL.md`) — added a "Downstream visual verification" note after Step H: the design is verified visually at the mockup stage (Step D evaluator); the fidelity of the *implemented* result is verified downstream via `/e2e-review` Phase 4 (auto-run by `/new`, or manual `/e2e-review CARD-ID` outside the pipeline).
18
+
19
+ ## [4.78.1] - 2026-06-29
20
+
21
+ **`/ds-new` + `/ds-edit` now close the closed-loop (the `DS_MIRROR_STALE` nudge).** The mirror advisory — check #6 of the Post-Intervention Coherence Check, which nudges `/design-sync publish` when the in-repo registry has moved ahead of its Claude Design satellite — was cited by **every** UI-touching surface (`code-reviewer`, `ui-design`, `/design-review`, `/new` implement, `/prd` ui-design-phase, the `ds-drift` backstop) **except the two skills whose whole job is to create/modify a canonical element**: `/ds-new` and `/ds-edit`. So creating a primitive with `/ds-new` on a satellite-bound project never reminded the user to publish it — the one event that most directly makes the mirror stale was the one that skipped the nudge. This release adds the citation to both skills' step-8 coherence report.
22
+
23
+ **PATCH** — doc-only completion of an existing advisory check; no new capability, no agent, **no `baldart.config.yml` key** (the check rides on the already-present `features.has_design_system` + the satellite-bound gate). The definition stays the single SSOT in `design-system-protocol.md` § Post-Intervention Coherence Check check #6 — the skills **cite, never redefine** it. Skipped when no satellite is bound (the vast majority of consumers → no-op); never blocks creation/edit.
24
+
25
+ ### Changed
26
+
27
+ - **`/ds-new`** (`framework/.claude/skills/ds-new/SKILL.md`) — step 8 coherence report now surfaces `DS_MIRROR_STALE` (advisory, non-blocking) nudging `/design-sync publish` when a Claude Design satellite is bound (`.baldart/design-sync.json` has a `project_id`); added a `See Also` pointer to `/design-sync`.
28
+ - **`/ds-edit`** (`framework/.claude/skills/ds-edit/SKILL.md`) — same step-8 mirror advisory, with the breaking-edit note that satellite drift is the same class as the migration; added the `/design-sync` `See Also` pointer.
29
+
8
30
  ## [4.78.0] - 2026-06-29
9
31
 
10
32
  **Route-independent per-card mockup fidelity + graphics fast-lane.** On a `/new` run a desktop "Edit product" page shipped as **1 column** against a **2-column** mockup, marked DONE: the fidelity gate never ran on a rendered page because the auth-gated route returned 500 under the empty-Supabase demo lane, the views were "soft-skipped", and the verdict came back `ACCEPTED (harness limit)` — **a skip masked as a pass**. Two adversarial passes found this is not one bug but two distinct holes hitting two cards, plus the fact that the fidelity check depended on rendering a live, data-bearing route at all. This release inverts the priority: per-card UI fidelity is verified **route-independently, before proceeding** — a code-structural diff first, an isolated render as confirmation — and an un-runnable required check now **blocks instead of silently passing**. Bets validated against 2026 best practice (structural TED + perceptual diff as complementary dimensions; MLLM-as-judge reliable at comparison, weak at absolute scoring → fidelity gates, quality stays advisory).
package/VERSION CHANGED
@@ -1 +1 @@
1
- 4.78.0
1
+ 4.78.2
@@ -144,6 +144,13 @@ Each step is a delegation. Read the cited SSOT; do not paraphrase it.
144
144
  8. **Coherence report (never silent).** Emit the protocol's "Registry coherence
145
145
  check: N findings" block: spec updated (incl. HEAD), INDEX/policy reconciled,
146
146
  tokens reconciled, breaking change documented + migration noted.
147
+ **Mirror (advisory, non-blocking):** modifying a canonical component or token
148
+ moves the registry ahead of its Claude Design satellite — so when a satellite is
149
+ bound (`.baldart/design-sync.json` has a `project_id`), also surface
150
+ `DS_MIRROR_STALE` (check #6, `design-system-protocol.md` — cite, do not redefine)
151
+ nudging `/design-sync publish`. For a **breaking** edit the satellite drift is
152
+ the same class as the migration — note both. Skipped when no satellite is bound;
153
+ never blocks the edit.
147
154
 
148
155
  ## Token edit path
149
156
 
@@ -183,3 +190,5 @@ symmetric to how a `NEW (governed)` standard routes to `/ds-new`. `/prd` owns th
183
190
  - `framework/agents/component-manifest-schema.md` — the HEAD schema + the
184
191
  regeneration contract (preserve agentic, regenerate deterministic).
185
192
  - `framework/templates/breaking-change-checklist.md` — for breaking edits.
193
+ - `framework/.claude/skills/design-sync/SKILL.md` — `/design-sync publish` mirrors
194
+ the edit UP to the Claude Design satellite (the `DS_MIRROR_STALE` nudge).
@@ -139,6 +139,12 @@ Each step is a delegation. Read the cited SSOT; do not paraphrase it.
139
139
  8. **Coherence report (never silent).** Emit the protocol's "Registry coherence
140
140
  check: N findings" block (per § Post-Intervention Coherence Check): new spec
141
141
  shipped, INDEX entry added, tokens reconciled, closed-set respected.
142
+ **Mirror (advisory, non-blocking):** creating a canonical component or token is
143
+ exactly the event that moves the registry ahead of its Claude Design satellite —
144
+ so when a satellite is bound (`.baldart/design-sync.json` has a `project_id`),
145
+ also surface `DS_MIRROR_STALE` (check #6, `design-system-protocol.md` — cite, do
146
+ not redefine) nudging `/design-sync publish`. Skipped when no satellite is bound;
147
+ never blocks creation.
142
148
 
143
149
  ---
144
150
 
@@ -196,4 +202,6 @@ across the two.
196
202
  the serializer fills (the standardized doc shape).
197
203
  - `framework/.claude/skills/design-system-init/SKILL.md` — the bulk twin; shares
198
204
  the same scripts (`extract-manifest`/`extract-one`/`serialize-spec`).
205
+ - `framework/.claude/skills/design-sync/SKILL.md` — `/design-sync publish` mirrors
206
+ the new element UP to the Claude Design satellite (the `DS_MIRROR_STALE` nudge).
199
207
  - `framework/docs/COMPONENT-MANIFEST-LAYER.md` — the layer overview.
@@ -71,6 +71,14 @@ Baseline `medium`. Honor an inline `effort=<level>` override.
71
71
  mechanism is the `mockup_source.level: "harness-render"` marker (see
72
72
  `e2e-review/SKILL.md` Phase 2 cascade) which Phase 4 skips and Phase 4b takes.
73
73
 
74
+ > **Where route-level fidelity lives (nudge, not a gate).** This harness verifies a
75
+ > primitive **in isolation** (quality only — it has no mockup ground-truth). The full
76
+ > visual-**fidelity** check happens **downstream**, when the primitive is composed into
77
+ > a real route: that is `/e2e-review` Phase 4 (auto-run by `/new`, or invoke
78
+ > `/e2e-review CARD-ID` manually if you implement outside `/new`). Verifying an inert
79
+ > primitive against a mockup here would be premature — it has nothing to be judged
80
+ > against yet. So this is a pointer, never a blocking obligation.
81
+
74
82
  ## Hard prohibitions
75
83
  - NEVER feed a harness PNG to a fidelity diff (Phase 4) — quality (4b/4c) only.
76
84
  - NEVER build a framework-native preview-route or an auto-provider-shim — Storybook
@@ -246,6 +246,14 @@ prevent**: catching a duplicate primitive at the mockup stage costs minutes,
246
246
  catching it after implementation costs a refactor. The weekly `ds-drift`
247
247
  routine is a safety net, not a substitute for this check.
248
248
 
249
+ **Downstream visual verification (nudge, not a gate).** The chosen design is
250
+ verified visually **at the mockup stage** here (Step D evaluator). The fidelity
251
+ of the *implemented* result against this design is verified **downstream**, when
252
+ the design lands in a live route: that is `/e2e-review` Phase 4 — auto-run by
253
+ `/new`, or invoke `/e2e-review CARD-ID` manually if you implement this design
254
+ outside the `/new` pipeline. This is where route-level fidelity lives; it is a
255
+ pointer, never a blocking obligation on this skill.
256
+
249
257
  ---
250
258
 
251
259
  ## Design Principles (quick reference)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "baldart",
3
- "version": "4.78.0",
3
+ "version": "4.78.2",
4
4
  "description": "Claude Agent Framework - Reusable framework for coordinating AI agents and humans in software projects",
5
5
  "bin": {
6
6
  "baldart": "./bin/baldart.js"