baldart 4.78.2 → 4.80.0

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.
@@ -0,0 +1,78 @@
1
+ # Field extraction — locating and reading the real fields
2
+
3
+ How `ds-handoff` Step 3 grounds the field inventory in the project's actual data
4
+ schemas. This is **retrieval composition + a mapping table**, NOT a new parser.
5
+ The skill ships no Zod/AST extractor (that would be over-scoped and fragile across
6
+ stacks; contrast `design-system-init`'s `extract-one.mjs`, justified only because a
7
+ manifest HEAD must be byte-deterministic — a prose handoff tolerates LLM extraction
8
+ behind the Step 5 coverage gate).
9
+
10
+ ## Retrieval order (each with silent fallback)
11
+
12
+ Resolve the backing schema/type/form for each entity from Step 2, top to bottom.
13
+ Stop at the first tier that returns the field set; degrade silently down the list.
14
+
15
+ 1. **Code-graph** — when `features.has_code_graph: true`. Use it to find the
16
+ schema/type/form definition and (bonus) which screens consume it. DELEGATE
17
+ `framework/agents/code-graph-protocol.md`.
18
+ 2. **LSP** — when `features.has_lsp_layer: true`. `go-to-definition` /
19
+ `find-references` on the entity symbol (e.g. `supplierSchema`) to jump straight
20
+ to the definition without grepping a common name. DELEGATE
21
+ `framework/agents/code-search-protocol.md`.
22
+ 3. **`codebase-architect`** (Task tool) — the workhorse. Ask it to locate the
23
+ entity's Zod schema / TS interface / form schema (react-hook-form, Formik, a
24
+ server action's input) and **return the field facts as structured data** (one
25
+ row per field with the columns below). Read-only exploration; it does not parse
26
+ ASTs for you — it reads the source and reports. Honor its return contract
27
+ (`framework/agents/return-contract-protocol.md`).
28
+ 4. **Grep** — last resort / Codex. Patterns: `z.object(`, `interface .*Props`,
29
+ `type .* = {`, `useForm`, `zodResolver`, `createInsertSchema` (drizzle-zod),
30
+ the entity name. Read the matched file directly.
31
+
32
+ **Exclude framework noise** from every tier: `.framework/`, `.baldart/`,
33
+ generated/telemetry files. These never back a product screen.
34
+
35
+ ## Per-field capture (the 9 inventory columns)
36
+
37
+ For each field, capture exactly what the template's field-inventory table needs.
38
+ Anything you cannot ground in code is the **literal `da definire`** — never a guess.
39
+
40
+ | Column | Source in code | If ungrounded |
41
+ |---|---|---|
42
+ | **Campo (label)** | Humanize the field name; or the i18n registry source string when `features.has_i18n: true` (`paths.i18n_registry`); or an explicit `label`/JSDoc. | humanized name + note |
43
+ | **Controllo** | The control-type mapping below. | `da definire` |
44
+ | **Required** | `sì` unless `.optional()` / `.nullish()` / `?` / `.partial()`. | `da definire` |
45
+ | **Validazione/Vincoli** | `.min()`/`.max()`/`.length()`/`.regex()`/`.email()`/`.url()`/`.int()`/`.positive()`/refinements. | `—` if none |
46
+ | **Default** | `.default(x)` / a form `defaultValues` entry. | `—` if none |
47
+ | **Opzioni / sorgente enum** | `z.enum([...])` / `z.nativeEnum` literals verbatim; a `z.string()` whose options come from a runtime query → `"query runtime — da definire"`. | `—` / `da definire` |
48
+ | **Helper text** | JSDoc on the field; the i18n `context` for the key; an existing form description. | `da definire` |
49
+ | **Mode** | `editable` by default; `readonly` for server-set / computed fields (see below). | `editable` |
50
+ | **Card/gruppo** | From `mockup_analysis.screens[].layout` when present, else the reconciliation decision (Step 4). | `da definire` |
51
+
52
+ ## Control-type mapping (applied by the agent, not a CLI)
53
+
54
+ A documented heuristic — apply it, but prefer an explicit signal (an existing
55
+ component binding, a form control already in code) over the heuristic when present.
56
+
57
+ | Schema / type shape | Control |
58
+ |---|---|
59
+ | `z.enum([...])` / `z.nativeEnum` / union of string literals | `select` (or `radio` for ≤ 3 options / `segmented` per project convention) |
60
+ | `z.boolean()` | `toggle` (or `checkbox`) |
61
+ | `z.string()` short (no/small `.max`) | `text input` |
62
+ | `z.string()` long (`.max` ≥ ~200, or named `notes`/`description`/`body`) | `textarea` |
63
+ | `z.string().email()` | `email input` |
64
+ | `z.string().url()` | `url input` |
65
+ | `z.string()` matching a phone/postal regex | typed input (`phone`/`postal`) |
66
+ | `z.number()` / `z.coerce.number()` | `number input` (or `price`/`percent` per unit) |
67
+ | `z.date()` / `z.string().datetime()` | `date picker` — **readonly** if server-set/computed |
68
+ | `z.array(...)` of a sub-object | repeatable group / multi-row editor |
69
+ | `z.array(z.string())` from a known set | `multi-select` |
70
+ | `z.object(...)` nested | a sub-group / sub-card |
71
+
72
+ ## Readonly detection
73
+
74
+ Mark a field **readonly** (static text, no editable control) when it is not
75
+ user-authored: server-set timestamps (`created_at`, `updated_at`), derived/computed
76
+ values, IDs, audit fields, anything the schema marks server-generated or that the
77
+ form's `defaultValues` sets but the UI never edits. A field drawn as an input when
78
+ it is in truth readonly is the classic Claude Design hallucination this prevents.
@@ -30,35 +30,50 @@ unchanged. No other side-effect of Step 3.0.
30
30
 
31
31
  ### Branch B — Claude Design handoff
32
32
 
33
- 1. **Collect context from the state file + config + overlays:**
34
- - `feature_title`, `feature_objective_one_sentence` from `## Feature Description`.
35
- - `user_flow_summary`, `primary_personas` from `## Discovery Log` (dimensions 1 + 2).
36
- - `screens_in_scope[]` from `## UI Design` (derive from User Stories + ISA touchpoints if not yet populated same logic as Hybrid mode § "Build the per-screen routing table").
37
- - `brand_voice` from `.baldart/overlays/prd.md` if present (skip section otherwise).
38
- - When `features.has_design_system: true`: read `${paths.design_system}/INDEX.md` (primitive list) + `${paths.design_system}/tokens-reference.md` (tokens excerpt). When `false`: omit § 5 of the prompt entirely.
39
- - `stack.framework`, `stack.charting`, `stack.animation` from `baldart.config.yml`.
40
- - `output_format_preference` derived from `stack.framework` (Next/Remix React+Tailwind; vanilla → HTML/CSS; otherwise ask the user).
41
- - Numeric token tables (type scale, spacing, radius, contrast, motion durations) from `framework/agents/design-system-protocol.md` — cite verbatim.
42
-
43
- 2. **Render the prompt** by populating
44
- [../assets/claude-design-handoff-prompt.template.md](../assets/claude-design-handoff-prompt.template.md)
45
- with the collected context. Strip empty conditional sections.
46
-
47
- 3. **Present the rendered prompt** to the user inside a fenced markdown
48
- code-block, prefixed with this instruction (verbatim):
33
+ The handoff prompt is owned by the **`ds-handoff` skill** (the single SSOT). `/prd`
34
+ decides to hand off; `/ds-handoff` builds the field-level, 1:1 brief — it grounds
35
+ every screen's fields in the real data schemas and runs a coverage gate **before**
36
+ emitting, so Claude Design does not have to imagine the fields. (This is the same
37
+ delegate-or-else-inline contract as `/prd` `/ds-new`.)
38
+
39
+ 1. **Delegate to `/ds-handoff`.** Invoke it in *delegated* mode, passing the
40
+ resolved context so it skips its own screen-resolution prompt:
41
+ - the state-file path;
42
+ - `feature_title`, `feature_objective_one_sentence` (from `## Feature Description`);
43
+ - `user_flow_summary`, `primary_personas` (from `## Discovery Log` dimensions 1 + 2);
44
+ - `screens_in_scope[]` from `## UI Design` (derive from User Stories + ISA
45
+ touchpoints if not yet populated same logic as Hybrid mode § "Build the
46
+ per-screen routing table");
47
+ - `mockup_analysis` from `## UI Design` if present (the skill reads its
48
+ `layout / component_props / states / responsive` as input);
49
+ - the `features.has_design_system` flag (the skill omits § 5 when `false`).
50
+
51
+ `/ds-handoff` runs field extraction + the coverage gate + the mandatory template
52
+ and returns the **rendered prompt** plus the **`field-inventory.md` path**.
53
+
54
+ **Graceful fallback** — if `/ds-handoff` is unavailable (Codex without it linked,
55
+ or an older install): render a **coarse** brief inline from `screens_in_scope[]`
56
+ (per-screen: scopo / stati / azioni primarie / dati visualizzati) and the same
57
+ top-level sections (obiettivo, user flow, brand, design system, stack, cosa
58
+ restituirmi). State explicitly to the user: *"field-level brief non disponibile →
59
+ brief coarse"*, so the lost fidelity is visible, not silent.
60
+
61
+ 2. **Present the returned prompt** to the user inside a fenced markdown code-block,
62
+ prefixed with this instruction (verbatim):
49
63
 
50
64
  > Incolla il prompt qui sotto in Claude Design. Quando hai i mockup pronti,
51
65
  > tornami con i **path locali** dei file (PNG, HTML, TSX, o link Figma) e
52
66
  > riprendo da qui — copio i file nella cartella del PRD, li analizzo come
53
67
  > al solito (Step 1.6 Mockup Intake), e Step 3 entra in Hybrid mode.
54
68
 
55
- 4. **Update state file** before stopping:
69
+ 3. **Update state file** before stopping:
56
70
  - `mockups.status: pending_external`
57
71
  - `mockups.source: claude-design`
58
72
  - `mockups.handoff_prompt_path: ${paths.prd_dir}/<slug>/handoff/claude-design-prompt.md` (save the rendered prompt to disk so it survives session restarts).
73
+ - `mockups.field_inventory_path: ${paths.prd_dir}/<slug>/mockups/field-inventory.md` (the path `/ds-handoff` returned; omit on the coarse fallback).
59
74
  - `step_3_mode: pending_external_handoff` (transitional — overwritten when user returns).
60
75
 
61
- 5. **STOP.** Wait for the user to return with local paths.
76
+ 4. **STOP.** Wait for the user to return with local paths.
62
77
 
63
78
  ### Re-entry from handoff (user returns with paths)
64
79
 
@@ -103,8 +103,8 @@ Conflict steps (must follow in order):
103
103
  ### 4.a — Universal MUST (apply to every project)
104
104
 
105
105
  - MUST treat `AGENTS.md` as authoritative for agent rules.
106
- - MUST invoke `codebase-architect` agent (via Task tool) whenever you need to understand codebase structure, existing patterns, or code architecture before planning or implementing changes; do not proceed with planning or implementation without first understanding the existing system through codebase-architect.
107
- - MUST NOT silently fall back when an `Agent` (a.k.a. `Task`) tool call returns empty (`0 tool uses · Done`), times out, or fails with `permissionDecision: deny`. This pattern indicates a Claude Code sub-agent failure (see anthropics/claude-code#56869) or a discovery miss / blocked agent (see #20931 and BALDART's own `agent-discovery-gate` PreToolUse hook), NOT a signal to substitute another agent. STOP, report to the user verbatim: "Agent `<name>` non discoverato o fallito in questa sessione — riavvia Claude Code e verifica con `npx baldart doctor`", and wait for direction. Never auto-route to `feature-dev:*`, `general-purpose`, or any other marketplace/built-in agent as a replacement. **This rule is the ONLY defense against bug #56869 (which BALDART cannot patch from outside Claude Code); deviating from it reintroduces the exact failure mode the rule exists to prevent.**
106
+ - MUST invoke the `codebase-architect` agent whenever you need to understand codebase structure, existing patterns, or code architecture before planning or implementing changes; do not proceed with planning or implementation without first understanding the existing system through codebase-architect. **The agent exists on both tools** — Claude Code spawns it via the Task/Agent tool with `subagent_type: "codebase-architect"`; Codex spawns the `codebase-architect` custom agent **by name** (BALDART installs it at `.codex/agents/codebase-architect.toml`, transpiled from the same `.md` source). Only if your environment genuinely exposes NEITHER subagent mechanism (a stripped tool host) do you degrade — explicitly — to inline structural retrieval (code-graph → LSP → Grep → direct file reads per `agents/code-search-protocol.md`), and SAY SO; never silently skip the understanding step.
107
+ - MUST NOT silently substitute a *different* agent when an agent invocation returns empty (`0 tool uses · Done`), times out, or fails with `permissionDecision: deny`. On **Claude Code** this pattern indicates a sub-agent failure (see anthropics/claude-code#56869) or a discovery miss / blocked agent (see #20931 and BALDART's own `agent-discovery-gate` PreToolUse hook): STOP, report to the user verbatim: "Agent `<name>` non discoverato o fallito in questa sessione — riavvia Claude Code e verifica con `npx baldart doctor`", and wait for direction. Never auto-route to `feature-dev:*`, `general-purpose`, or any other marketplace/built-in agent as a replacement. **This rule is the ONLY defense against bug #56869 (which BALDART cannot patch from outside Claude Code); deviating from it reintroduces the exact failure mode the rule exists to prevent.** On **Codex** the named-agent spawn is the equivalent; the same no-silent-substitution rule holds (the #56869 specifics are Claude-only, the principle is universal).
108
108
  - MUST NOT work on files/components already claimed by another agent; multiple agents allowed if working on independent areas.
109
109
  - MUST perform a mandatory clarity analysis before fixing any issue labeled `bug`; confirm that the issue description, proposed correct behavior, and edge cases are unambiguous, document any resolved doubts, and only start fix work once every zone of uncertainty is covered.
110
110
  - MUST mark missing info as UNKNOWN and ask the user; if blocked, set `BLOCKED` with a blocker.
@@ -24,6 +24,10 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
24
24
  > This map references **only skills shipped under `framework/.claude/skills/`**.
25
25
  > Confirm a skill exists (its directory is present) before routing to it; never
26
26
  > route to a skill name that has no directory.
27
+ >
28
+ > **Gating.** Many skills are gated on a `features.*` flag in `baldart.config.yml`
29
+ > (noted per entry). When the flag is `false` the skill REFUSES — do not route to
30
+ > it; resolve the gate first (e.g. `/design-system-init` for `has_design_system`).
27
31
 
28
32
  ## Core Development Skills
29
33
 
@@ -43,6 +47,19 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
43
47
  - "Nuova funzionalità"
44
48
  - "How should I scope..."
45
49
 
50
+ ### prd-add
51
+
52
+ **When to use**:
53
+
54
+ - A new requirement lands on an ACTIVE `/prd` session (change request)
55
+ - "serve anche…", a missing endpoint/sub-feature surfaces mid-discovery
56
+ - Runs ICIAS impact analysis to decide which PRD phases SKIP / PATCH / REDO
57
+
58
+ **Triggers**:
59
+
60
+ - "/prd-add"
61
+ - "Aggiungi requisito" / "Serve anche" / "Manca un endpoint"
62
+
46
63
  ### context-primer
47
64
 
48
65
  **When to use**:
@@ -68,6 +85,20 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
68
85
  - "Implementa le card"
69
86
  - "Esegui le card"
70
87
 
88
+ ### new2
89
+
90
+ **When to use**:
91
+
92
+ - EXPERIMENTAL workflow-hosted variant of `/new` (A/B testing context economy)
93
+ - The whole card batch runs in a background dynamic workflow (subagent output never
94
+ enters the main context); every `/new` gate becomes a deterministic policy
95
+ - **Claude-only** (needs the `Workflow` tool)
96
+
97
+ **Triggers**:
98
+
99
+ - "/new2 CARD-IDS"
100
+ - "Implementa le card con workflow"
101
+
71
102
  ### bug
72
103
 
73
104
  **When to use**:
@@ -82,6 +113,30 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
82
113
  - "Fix [bug]"
83
114
  - "Non funziona" / "Why is [X] not working?"
84
115
 
116
+ ### worktree-manager
117
+
118
+ **When to use**:
119
+
120
+ - Parallel coding agents needing fully independent git worktrees
121
+ - Create / merge (→ PR) / list / cleanup isolated workspaces
122
+ - Used programmatically by `/new` for per-card worktree ops
123
+
124
+ **Triggers**:
125
+
126
+ - "/nw" (new) · "/mw" (merge) · "/lw" (list) · "/cw" (cleanup)
127
+ - "New worktree" / "Merge worktree"
128
+
129
+ ### issue-review
130
+
131
+ **When to use**:
132
+
133
+ - Triage / planning a GitHub issue (summary + priority + plan + tests)
134
+
135
+ **Triggers**:
136
+
137
+ - "/issue-review"
138
+ - "Triage this issue" / "Review issue [N]"
139
+
85
140
  ## Code Quality Skills
86
141
 
87
142
  ### simplify
@@ -136,7 +191,129 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
136
191
  > standalone invocable BALDART skill. Route UI work through `ui-design` /
137
192
  > `ui-expert`, not to `ui-ux-pro-max` directly.
138
193
 
139
- ## Testing Skills
194
+ ### motion-design
195
+
196
+ **When to use**:
197
+
198
+ - Animations, transitions, micro-interactions, loading/page transitions
199
+ - Scroll-triggered effects, choreography, timing/easing decisions
200
+ - Works with CSS / Framer Motion / GSAP / Lottie / Spring
201
+
202
+ **Triggers**:
203
+
204
+ - "/motion-design"
205
+ - "Anima…" / "transition" / "micro-interaction"
206
+
207
+ ### gamification-design
208
+
209
+ **When to use**:
210
+
211
+ - Points systems, reward loops, progression mechanics, loyalty/retention
212
+ - B2C customer-facing engagement features
213
+
214
+ **Triggers**:
215
+
216
+ - "/gamification-design"
217
+ - "Punti / reward / progression / battle pass / loyalty"
218
+
219
+ ## Design System Skills
220
+
221
+ > All gated on `features.has_design_system: true`. Without a registry, bootstrap
222
+ > first with `/design-system-init`.
223
+
224
+ ### design-system-init
225
+
226
+ **When to use**:
227
+
228
+ - GREENFIELD: bootstrap a component registry (INDEX.md + DTCG tokens + per-component specs) and flip `has_design_system`
229
+ - UPGRADE: regenerate machine-readable HEADs / DTCG tokens on an existing prose-only registry
230
+ - SEED: a registry born in Claude Design (design-led)
231
+
232
+ **Triggers**:
233
+
234
+ - "/design-system-init"
235
+ - "Crea design system" / "inizializza registro componenti" / "aggiorna le spec"
236
+ - `baldart doctor` nudges (specs missing / prose-only)
237
+
238
+ ### ds-new
239
+
240
+ **When to use**:
241
+
242
+ - Create ONE canonical element (a component OR a token) end-to-end: reuse-first → optional scaffold → document + register + govern + verify
243
+ - The on-the-fly twin of the bulk `design-system-init`; callable by `/prd` when reconciliation confirms a NEW component
244
+
245
+ **Triggers**:
246
+
247
+ - "/ds-new" · "/ds-new token [id]"
248
+ - "Nuovo componente design system" / "registra una primitive" / "aggiungi un token"
249
+
250
+ ### ds-edit
251
+
252
+ **When to use**:
253
+
254
+ - Deliberately edit ONE existing element: resync / extend-variant / breaking / re-govern
255
+ - Regenerates the spec preserving agentic fields + prose
256
+ - NOT for the automatic mechanical doc-resync after a code change (that's already automatic via the `DS_COMPONENT_STALE` gate)
257
+
258
+ **Triggers**:
259
+
260
+ - "/ds-edit"
261
+ - "Aggiungi una variante" / "modifica un componente" / "breaking change su un componente"
262
+
263
+ ### ds-render
264
+
265
+ **When to use**:
266
+
267
+ - Render design-system primitives in ISOLATION (one component × variant) to a PNG each
268
+ - Feeds isolated QUALITY verification (`/e2e-review` Phase 4b/4c) — never a fidelity diff
269
+ - Rides on a detected Storybook (clean no-op otherwise)
270
+
271
+ **Triggers**:
272
+
273
+ - "/ds-render"
274
+ - "Render i componenti" / "screenshot dei primitivi"
275
+
276
+ ### ds-handoff
277
+
278
+ **When to use**:
279
+
280
+ - Produce the FIELD-LEVEL, 1:1 Claude Design handoff prompt — every screen's real fields (label / control / required / validation / default / enum / helper / readonly), grounded in the project's data schemas, coverage-gated before emission
281
+ - The single SSOT for the Claude Design prompt; `/prd` Step 3.0 Branch B delegates here
282
+ - Standalone for an ad-hoc orchestrator + `ui-expert` run
283
+
284
+ **Triggers**:
285
+
286
+ - "/ds-handoff [screens-or-feature]"
287
+ - "Handoff a Claude Design" / "prompt per Claude Design" / "brief field-level"
288
+
289
+ ### design-sync
290
+
291
+ **When to use**:
292
+
293
+ - Mirror the in-repo registry (SSOT) UP to its Claude Design satellite (the code→design half of the closed loop)
294
+ - `publish` / `bootstrap` / `drift` modes; delegates every write to the DesignSync MCP; refuse-on-divergence
295
+ - Claude-only; interactive-auth (`/design-login`); no-op without a bound satellite
296
+
297
+ **Triggers**:
298
+
299
+ - "/design-sync"
300
+ - "Pubblica il design system" / "mirror su Claude Design" / "il designer ha cambiato qualcosa"
301
+
302
+ ## Testing & Review Skills
303
+
304
+ ### e2e-review
305
+
306
+ **When to use**:
307
+
308
+ - Deterministic BLOCKING end-to-end review after a feature is implemented
309
+ - Functional E2E (Playwright) + visual fidelity diff + design-quality critic, under a severity gate + bounded self-heal
310
+ - Auto-called by `/new` Phase 2.6; invocable manually
311
+ - Gated on `features.has_e2e_review`
312
+
313
+ **Triggers**:
314
+
315
+ - "/e2e-review CARD-ID"
316
+ - "Verifica end-to-end" / "review schermate" / "controlla i mockup"
140
317
 
141
318
  ### playwright-skill
142
319
 
@@ -166,7 +343,7 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
166
343
  - Integration testing
167
344
  - Server management needed
168
345
 
169
- ## Documentation Skills
346
+ ## Documentation & Knowledge Skills
170
347
 
171
348
  ### doc-writing-for-rag
172
349
 
@@ -180,6 +357,64 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
180
357
  - "doc per RAG" / "dense documentation"
181
358
  - "template endpoint" / "compattare docs"
182
359
 
360
+ ### capture
361
+
362
+ **When to use**:
363
+
364
+ - Distill a cross-document synthesis of the recent conversation into a reusable wiki synthesis page
365
+ - Implements Karpathy's query→wiki file-back loop
366
+ - Gated on `features.has_wiki_overlay`
367
+
368
+ **Triggers**:
369
+
370
+ - "/capture"
371
+ - "Salva sintesi" / "distilla conversazione" / "questa conversazione in wiki"
372
+
373
+ ### graph-align
374
+
375
+ **When to use**:
376
+
377
+ - On-demand documentation alignment via the Graphify code knowledge graph
378
+ - Surface core code with no doc coverage, stale docs, drift vs the SSOT registry
379
+ - The interactive twin of the nightly `doc-graph-align` routine
380
+ - Gated on `features.has_code_graph`
381
+
382
+ **Triggers**:
383
+
384
+ - "/graph-align"
385
+ - "Allinea la documentazione" / "check doc coverage"
386
+
387
+ ## Internationalization Skills
388
+
389
+ > Gated on `features.has_i18n: true`.
390
+
391
+ ### i18n
392
+
393
+ **When to use**:
394
+
395
+ - Audit the i18n context registry against `t()` calls + native locale files (drift codes)
396
+ - Context-aware translation of missing/stale labels via the `i18n-translator` agent
397
+ - The interactive twin of the weekly `i18n-align` routine
398
+
399
+ **Triggers**:
400
+
401
+ - "/i18n"
402
+ - "Traduci le label" / "audit i18n" / "allinea le traduzioni"
403
+
404
+ ### i18n-adopt
405
+
406
+ **When to use**:
407
+
408
+ - One-shot migration that externalizes ALL hardcoded user-facing strings on an existing codebase (the i18n analogue of `/design-system-init`)
409
+ - Full-auto on a dedicated branch, idempotent + resumable; never auto-merges
410
+
411
+ **Triggers**:
412
+
413
+ - "/i18n-adopt"
414
+ - "Migra a i18n" / "adotta i18n" / "externalize all strings"
415
+
416
+ ## Product & Content Skills
417
+
183
418
  ### copywriting
184
419
 
185
420
  **When to use**:
@@ -193,6 +428,152 @@ Map Claude Code skills to project domains and provide guidance on when to use ea
193
428
  - "Migliora il testo"
194
429
  - Landing/marketing content
195
430
 
431
+ ### seo-audit
432
+
433
+ **When to use**:
434
+
435
+ - Audit / diagnose technical + on-page SEO issues on a site
436
+
437
+ **Triggers**:
438
+
439
+ - "/seo-audit"
440
+ - "SEO audit" / "why am I not ranking" / "meta tags review"
441
+
442
+ ### api-design-principles
443
+
444
+ **When to use**:
445
+
446
+ - Designing a new API, reviewing an API spec, establishing API design standards (REST / GraphQL)
447
+
448
+ **Triggers**:
449
+
450
+ - "/api-design-principles"
451
+ - "Design this API" / "review API spec"
452
+
453
+ ## Integration Skills
454
+
455
+ ### kie-ai
456
+
457
+ **When to use**:
458
+
459
+ - Generate images / videos / audio via Kie.ai (80+ models), upscaling, background removal, TTS/SFX
460
+
461
+ **Triggers**:
462
+
463
+ - "/kie" / "/generate-image" / "/generate-video"
464
+ - "Genera immagine / video", model names ("nano banana", "veo", "kling", "suno"…)
465
+
466
+ ### remotion-best-practices
467
+
468
+ **When to use**:
469
+
470
+ - Building video in React with Remotion (best practices guidance)
471
+
472
+ **Triggers**:
473
+
474
+ - "Remotion" / "video in React"
475
+
476
+ ## Retrieval & Toolchain Bootstrap Skills
477
+
478
+ > Install/verify opt-in layers. Each is gated on its `features.*` flag and is
479
+ > idempotent (re-running re-verifies + reports drift).
480
+
481
+ ### lsp-bootstrap
482
+
483
+ **When to use**:
484
+
485
+ - Install + verify the LSP symbol-search layer (language servers, `lsp.installed_servers`)
486
+ - After enabling `features.has_lsp_layer`
487
+
488
+ **Triggers**:
489
+
490
+ - "/lsp-bootstrap"
491
+ - "Install LSP" / "set up symbol search"
492
+
493
+ ### graphify-bootstrap
494
+
495
+ **When to use**:
496
+
497
+ - Install + verify + wire the Graphify code-knowledge-graph layer (CLI, offline graph build, auto-rebuild hook, MCP)
498
+ - After enabling `features.has_code_graph`
499
+
500
+ **Triggers**:
501
+
502
+ - "/graphify-bootstrap"
503
+ - "Install graphify" / "set up the code graph"
504
+
505
+ ### toolchain-bootstrap
506
+
507
+ **When to use**:
508
+
509
+ - Install + verify + wire the curated dev toolchain (Biome / Vitest / tsc / Lefthook) as devDeps
510
+ - After enabling `features.has_toolchain`
511
+
512
+ **Triggers**:
513
+
514
+ - "/toolchain-bootstrap"
515
+ - "Install the toolchain" / "set up biome"
516
+
517
+ ## Framework Maintenance & Meta Skills
518
+
519
+ ### baldart-update
520
+
521
+ **When to use**:
522
+
523
+ - Bring the BALDART framework up-to-date in a consumer repo (seamless `npx baldart update --yes`)
524
+ - The skill narrates the CLI; it never re-implements it
525
+
526
+ **Triggers**:
527
+
528
+ - "/baldart-update"
529
+ - "Aggiorna baldart" / "update del framework"
530
+
531
+ ### baldart-push
532
+
533
+ **When to use**:
534
+
535
+ - Contribute local framework improvements upstream to the BALDART repo
536
+ - Hands off to `npx baldart push` (interactive); never pushes project-specific customizations
537
+
538
+ **Triggers**:
539
+
540
+ - "/baldart-push"
541
+ - "Contribuisci al framework" / "push del framework"
542
+
543
+ ### overlay
544
+
545
+ **When to use**:
546
+
547
+ - Author `.baldart/overlays/` — the per-project customisation layer for skills / agents / commands
548
+ - Scaffolds + validates + surfaces drift via the CLI; often the answer when the `framework-edit-gate` hook blocked a direct edit
549
+
550
+ **Triggers**:
551
+
552
+ - "/overlay"
553
+ - "Customizza skill" / "override agent" / "personalizza comando"
554
+
555
+ ### skill-creator
556
+
557
+ **When to use**:
558
+
559
+ - Create a new skill, or modify/optimize/measure an existing one
560
+
561
+ **Triggers**:
562
+
563
+ - "/skill-creator"
564
+ - "Crea una skill" / "improve this skill"
565
+
566
+ ### find-skills
567
+
568
+ **When to use**:
569
+
570
+ - Discover/install agent skills when a needed capability might already exist as a skill
571
+
572
+ **Triggers**:
573
+
574
+ - "/find-skills"
575
+ - "Is there a skill that…" / "how do I do X"
576
+
196
577
  ## Project-Specific Skills
197
578
 
198
579
  Add your project-specific skills here:
@@ -214,7 +595,8 @@ START: User gives a task
214
595
  |
215
596
  v
216
597
  Is it a new feature needing scope/plan?
217
- |-- YES --> /prd (scopes + plans + writes cards)
598
+ |-- YES --> /prd (scopes + plans + writes cards; UI phase delegates the
599
+ | Claude Design prompt to /ds-handoff)
218
600
  | Then /new (implements the cards end-to-end)
219
601
  |
220
602
  v
@@ -223,11 +605,22 @@ Is it a bug fix?
223
605
  |
224
606
  v
225
607
  Is it UI/visual work?
226
- |-- YES --> /ui-design (mockups/options) or frontend-design
608
+ |-- YES --> /ui-design (mockups/options) or frontend-design;
609
+ | motion → /motion-design
227
610
  |
228
611
  v
229
- Is it browser testing?
230
- |-- YES --> playwright-skill or webapp-testing (E2E via /e2e-review)
612
+ Is it design-system work (a component / token / handoff)?
613
+ |-- YES --> /ds-new (create) · /ds-edit (change) · /ds-render (isolate) ·
614
+ | /ds-handoff (Claude Design prompt) · /design-sync (mirror)
615
+ | (bootstrap the registry first with /design-system-init)
616
+ |
617
+ v
618
+ Is it internationalization?
619
+ |-- YES --> /i18n (audit + translate) or /i18n-adopt (one-shot migration)
620
+ |
621
+ v
622
+ Is it browser/E2E testing or review?
623
+ |-- YES --> playwright-skill / webapp-testing / /e2e-review (blocking)
231
624
  |
232
625
  v
233
626
  Is it cleanup/complexity reduction?
@@ -250,7 +643,15 @@ Common skill chains (all skills below are shipped under `.claude/skills/`):
250
643
  3. **UI Feature**:
251
644
  - /prd → /ui-design → /new → playwright-skill (or /e2e-review for blocking E2E)
252
645
 
253
- 4. **Refactoring**:
646
+ 4. **UI Feature via Claude Design handoff**:
647
+ - /prd (Branch B) → /ds-handoff (field-level prompt) → [design in Claude Design]
648
+ → /prd re-entry (mockup intake) → /new → /e2e-review
649
+
650
+ 5. **Design System**:
651
+ - /design-system-init (bootstrap) → /ds-new / /ds-edit (evolve) → /ds-render
652
+ (verify isolated) → /design-sync (mirror to the satellite)
653
+
654
+ 6. **Refactoring**:
254
655
  - /simplify (identify + apply cleanups) → /new gates re-run lint/tsc/tests
255
656
 
256
657
  ## Anti-Patterns
@@ -263,6 +664,7 @@ Common skill chains (all skills below are shipped under `.claude/skills/`):
263
664
  - Claim completion before the `/new` review + gate cycle passes
264
665
  - Use wrong skill for the task
265
666
  - Route to a skill name that has no directory under `.claude/skills/`
667
+ - Route to a feature-gated skill when its `features.*` flag is `false`
266
668
 
267
669
  **Do**:
268
670