baldart 3.6.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.
Files changed (230) hide show
  1. package/CHANGELOG.md +599 -0
  2. package/README.md +566 -0
  3. package/VERSION +1 -0
  4. package/bin/baldart.js +143 -0
  5. package/framework/.claude/agents/REGISTRY.md +169 -0
  6. package/framework/.claude/agents/api-perf-cost-auditor.md +291 -0
  7. package/framework/.claude/agents/code-reviewer.md +350 -0
  8. package/framework/.claude/agents/codebase-architect.md +391 -0
  9. package/framework/.claude/agents/coder.md +291 -0
  10. package/framework/.claude/agents/deep-human-insight.md +198 -0
  11. package/framework/.claude/agents/doc-reviewer.md +440 -0
  12. package/framework/.claude/agents/email-deliverability-architect.md +193 -0
  13. package/framework/.claude/agents/hybrid-ml-architect.md +285 -0
  14. package/framework/.claude/agents/hyper-gamification-designer.md +149 -0
  15. package/framework/.claude/agents/legal-counsel-gdpr.md +179 -0
  16. package/framework/.claude/agents/marketing-conversion-strategist.md +162 -0
  17. package/framework/.claude/agents/motion-expert.md +108 -0
  18. package/framework/.claude/agents/onboarding-architect-lead.md +230 -0
  19. package/framework/.claude/agents/plan-auditor.md +546 -0
  20. package/framework/.claude/agents/prd-card-writer.md +372 -0
  21. package/framework/.claude/agents/prd.md +744 -0
  22. package/framework/.claude/agents/qa-sentinel.md +305 -0
  23. package/framework/.claude/agents/remotion-animator-orchestrator.md +218 -0
  24. package/framework/.claude/agents/security-reviewer.md +276 -0
  25. package/framework/.claude/agents/senior-researcher.md +175 -0
  26. package/framework/.claude/agents/seo-analytics-strategist.md +156 -0
  27. package/framework/.claude/agents/skill-improver.md +61 -0
  28. package/framework/.claude/agents/ui-expert.md +191 -0
  29. package/framework/.claude/agents/visual-designer.md +190 -0
  30. package/framework/.claude/agents/website-orchestrator.md +118 -0
  31. package/framework/.claude/agents/wiki-curator.md +145 -0
  32. package/framework/.claude/commands/baldart-push.md +15 -0
  33. package/framework/.claude/commands/check.md +237 -0
  34. package/framework/.claude/commands/codexreview.md +203 -0
  35. package/framework/.claude/commands/design-review.md +11 -0
  36. package/framework/.claude/commands/issue-review.md +34 -0
  37. package/framework/.claude/commands/new.md +331 -0
  38. package/framework/.claude/commands/qa.md +257 -0
  39. package/framework/.claude/hooks/framework-edit-gate.js +208 -0
  40. package/framework/.claude/hooks/lint-before-commit.sh.template +66 -0
  41. package/framework/.claude/settings.local.json.example +32 -0
  42. package/framework/.claude/skills/api-design-principles/SKILL.md +567 -0
  43. package/framework/.claude/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  44. package/framework/.claude/skills/api-design-principles/assets/rest-api-template.py +182 -0
  45. package/framework/.claude/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  46. package/framework/.claude/skills/api-design-principles/references/rest-best-practices.md +408 -0
  47. package/framework/.claude/skills/baldart-push/SKILL.md +222 -0
  48. package/framework/.claude/skills/bug/SKILL.md +200 -0
  49. package/framework/.claude/skills/bug/references/logging-patterns.md +174 -0
  50. package/framework/.claude/skills/capture/SKILL.md +125 -0
  51. package/framework/.claude/skills/capture/references/synthesis-template.md +42 -0
  52. package/framework/.claude/skills/context-primer/SKILL.md +189 -0
  53. package/framework/.claude/skills/copywriting/SKILL.md +273 -0
  54. package/framework/.claude/skills/copywriting/references/copy-frameworks.md +338 -0
  55. package/framework/.claude/skills/copywriting/references/natural-transitions.md +252 -0
  56. package/framework/.claude/skills/doc-writing-for-rag/SKILL.md +119 -0
  57. package/framework/.claude/skills/doc-writing-for-rag/references/before-after-examples.md +291 -0
  58. package/framework/.claude/skills/doc-writing-for-rag/references/compact-templates.md +183 -0
  59. package/framework/.claude/skills/doc-writing-for-rag/references/frontmatter-minimal.md +112 -0
  60. package/framework/.claude/skills/doc-writing-for-rag/references/line-count-targets.md +110 -0
  61. package/framework/.claude/skills/doc-writing-for-rag/references/schemas-and-errors.md +129 -0
  62. package/framework/.claude/skills/find-skills/SKILL.md +133 -0
  63. package/framework/.claude/skills/frontend-design/LICENSE.txt +177 -0
  64. package/framework/.claude/skills/frontend-design/SKILL.md +84 -0
  65. package/framework/.claude/skills/gamification-design/SKILL.md +130 -0
  66. package/framework/.claude/skills/issue-review/SKILL.md +45 -0
  67. package/framework/.claude/skills/kie-ai/SKILL.md +262 -0
  68. package/framework/.claude/skills/kie-ai/references/models-catalog.md +272 -0
  69. package/framework/.claude/skills/kie-ai/scripts/kie_api.sh +209 -0
  70. package/framework/.claude/skills/kie-ai/scripts/remove_greenscreen.py +69 -0
  71. package/framework/.claude/skills/kie-ai/scripts/setup_api_key.sh +77 -0
  72. package/framework/.claude/skills/motion-design/LICENSE +21 -0
  73. package/framework/.claude/skills/motion-design/README.md +82 -0
  74. package/framework/.claude/skills/motion-design/SKILL.md +336 -0
  75. package/framework/.claude/skills/motion-design/director/choreography.md +93 -0
  76. package/framework/.claude/skills/motion-design/director/context-adaptation.md +83 -0
  77. package/framework/.claude/skills/motion-design/director/core-philosophy.md +53 -0
  78. package/framework/.claude/skills/motion-design/director/decision-framework.md +91 -0
  79. package/framework/.claude/skills/motion-design/director/disney-principles.md +102 -0
  80. package/framework/.claude/skills/motion-design/director/emotion-mapping.md +71 -0
  81. package/framework/.claude/skills/motion-design/director/motion-personality.md +89 -0
  82. package/framework/.claude/skills/motion-design/director/narrative-structure.md +62 -0
  83. package/framework/.claude/skills/motion-design/patterns/ambient-continuous.md +81 -0
  84. package/framework/.claude/skills/motion-design/patterns/entrance-exit.md +82 -0
  85. package/framework/.claude/skills/motion-design/patterns/multi-element.md +69 -0
  86. package/framework/.claude/skills/motion-design/patterns/state-feedback.md +96 -0
  87. package/framework/.claude/skills/motion-design/reference/property-selection.md +95 -0
  88. package/framework/.claude/skills/motion-design/reference/quality-checklist.md +67 -0
  89. package/framework/.claude/skills/motion-design/reference/timing-easing-tables.md +106 -0
  90. package/framework/.claude/skills/motion-design/reference/troubleshooting.md +73 -0
  91. package/framework/.claude/skills/new/SKILL.md +1687 -0
  92. package/framework/.claude/skills/playwright-skill/API_REFERENCE.md +652 -0
  93. package/framework/.claude/skills/playwright-skill/SKILL.md +157 -0
  94. package/framework/.claude/skills/playwright-skill/package.json +26 -0
  95. package/framework/.claude/skills/prd/SKILL.md +228 -0
  96. package/framework/.claude/skills/prd/assets/card-template.yml +232 -0
  97. package/framework/.claude/skills/prd/assets/epic-template.yml +190 -0
  98. package/framework/.claude/skills/prd/assets/prd-template.md +230 -0
  99. package/framework/.claude/skills/prd/assets/state-template.md +78 -0
  100. package/framework/.claude/skills/prd/references/api-perf-gate.md +152 -0
  101. package/framework/.claude/skills/prd/references/audit-phase.md +478 -0
  102. package/framework/.claude/skills/prd/references/backlog-phase.md +145 -0
  103. package/framework/.claude/skills/prd/references/discovery-phase.md +359 -0
  104. package/framework/.claude/skills/prd/references/impact-analysis.md +233 -0
  105. package/framework/.claude/skills/prd/references/prd-add-phase.md +214 -0
  106. package/framework/.claude/skills/prd/references/prd-writing-phase.md +145 -0
  107. package/framework/.claude/skills/prd/references/research-phase.md +216 -0
  108. package/framework/.claude/skills/prd/references/ui-design-phase.md +61 -0
  109. package/framework/.claude/skills/prd/references/validation-phase.md +72 -0
  110. package/framework/.claude/skills/prd-add/SKILL.md +222 -0
  111. package/framework/.claude/skills/prd-add/references/impact-analysis.md +233 -0
  112. package/framework/.claude/skills/remotion-best-practices/SKILL.md +48 -0
  113. package/framework/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
  114. package/framework/.claude/skills/remotion-best-practices/rules/animations.md +29 -0
  115. package/framework/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  116. package/framework/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  117. package/framework/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  118. package/framework/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
  119. package/framework/.claude/skills/remotion-best-practices/rules/audio.md +169 -0
  120. package/framework/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  121. package/framework/.claude/skills/remotion-best-practices/rules/can-decode.md +75 -0
  122. package/framework/.claude/skills/remotion-best-practices/rules/charts.md +58 -0
  123. package/framework/.claude/skills/remotion-best-practices/rules/compositions.md +141 -0
  124. package/framework/.claude/skills/remotion-best-practices/rules/display-captions.md +184 -0
  125. package/framework/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  126. package/framework/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
  127. package/framework/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  128. package/framework/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  129. package/framework/.claude/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  130. package/framework/.claude/skills/remotion-best-practices/rules/gifs.md +141 -0
  131. package/framework/.claude/skills/remotion-best-practices/rules/images.md +130 -0
  132. package/framework/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  133. package/framework/.claude/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  134. package/framework/.claude/skills/remotion-best-practices/rules/lottie.md +67 -0
  135. package/framework/.claude/skills/remotion-best-practices/rules/maps.md +401 -0
  136. package/framework/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  137. package/framework/.claude/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  138. package/framework/.claude/skills/remotion-best-practices/rules/parameters.md +98 -0
  139. package/framework/.claude/skills/remotion-best-practices/rules/sequencing.md +118 -0
  140. package/framework/.claude/skills/remotion-best-practices/rules/subtitles.md +36 -0
  141. package/framework/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
  142. package/framework/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
  143. package/framework/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
  144. package/framework/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  145. package/framework/.claude/skills/remotion-best-practices/rules/transitions.md +197 -0
  146. package/framework/.claude/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  147. package/framework/.claude/skills/remotion-best-practices/rules/trimming.md +52 -0
  148. package/framework/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
  149. package/framework/.claude/skills/seo-audit/SKILL.md +394 -0
  150. package/framework/.claude/skills/seo-audit/references/aeo-geo-patterns.md +279 -0
  151. package/framework/.claude/skills/seo-audit/references/ai-writing-detection.md +190 -0
  152. package/framework/.claude/skills/simplify/SKILL.md +137 -0
  153. package/framework/.claude/skills/skill-creator/LICENSE.txt +202 -0
  154. package/framework/.claude/skills/skill-creator/SKILL.md +356 -0
  155. package/framework/.claude/skills/skill-creator/references/output-patterns.md +82 -0
  156. package/framework/.claude/skills/skill-creator/references/workflows.md +28 -0
  157. package/framework/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
  158. package/framework/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  159. package/framework/.claude/skills/skill-creator/scripts/quick_validate.py +95 -0
  160. package/framework/.claude/skills/ui-design/SKILL.md +199 -0
  161. package/framework/.claude/skills/ui-design/references/component-discovery.md +54 -0
  162. package/framework/.claude/skills/ui-design/references/evaluation.md +171 -0
  163. package/framework/.claude/skills/ui-design/references/generation.md +109 -0
  164. package/framework/.claude/skills/ui-design/references/inventory.md +59 -0
  165. package/framework/.claude/skills/webapp-testing/LICENSE.txt +202 -0
  166. package/framework/.claude/skills/webapp-testing/SKILL.md +123 -0
  167. package/framework/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
  168. package/framework/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
  169. package/framework/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
  170. package/framework/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
  171. package/framework/.claude/skills/worktree-manager/SKILL.md +680 -0
  172. package/framework/AGENTS.md +240 -0
  173. package/framework/agents/api-contracts.md +137 -0
  174. package/framework/agents/architecture.md +145 -0
  175. package/framework/agents/coding-standards.md +148 -0
  176. package/framework/agents/data-model.md +110 -0
  177. package/framework/agents/deployment-protocol.md +232 -0
  178. package/framework/agents/design-review.md +172 -0
  179. package/framework/agents/env-reference.md +171 -0
  180. package/framework/agents/github-issue-subagent.md +252 -0
  181. package/framework/agents/index.md +261 -0
  182. package/framework/agents/llm-wiki-methodology.md +216 -0
  183. package/framework/agents/maintenance-protocol.md +305 -0
  184. package/framework/agents/observability.md +162 -0
  185. package/framework/agents/performance.md +155 -0
  186. package/framework/agents/project-context.md +145 -0
  187. package/framework/agents/runbook.md +208 -0
  188. package/framework/agents/security.md +168 -0
  189. package/framework/agents/skills-mapping.md +286 -0
  190. package/framework/agents/testing.md +111 -0
  191. package/framework/agents/workflows.md +215 -0
  192. package/framework/docs/PROJECT-CONFIGURATION.md +336 -0
  193. package/framework/docs/references/brand-guidelines.md +170 -0
  194. package/framework/docs/references/ui-guidelines.template.md +182 -0
  195. package/framework/routines/code-review.routine.yml +46 -0
  196. package/framework/routines/doc-review.routine.yml +45 -0
  197. package/framework/routines/ds-drift.routine.yml +52 -0
  198. package/framework/routines/full-sweep.routine.yml +51 -0
  199. package/framework/routines/index.yml +70 -0
  200. package/framework/routines/skill-improve.routine.yml +50 -0
  201. package/framework/routines/wiki-review.routine.yml +45 -0
  202. package/framework/templates/baldart.config.template.yml +113 -0
  203. package/framework/templates/breaking-change-checklist.md +484 -0
  204. package/framework/templates/feature-card.template.yml +125 -0
  205. package/framework/templates/overlays/README.md +44 -0
  206. package/framework/templates/overlays/copywriting.fidelity-example.md +62 -0
  207. package/framework/templates/overlays/ui-design.fidelity-example.md +75 -0
  208. package/framework/templates/skill-project-context.snippet.md +19 -0
  209. package/framework/templates/spec.template.md +208 -0
  210. package/package.json +51 -0
  211. package/src/commands/add.js +229 -0
  212. package/src/commands/configure.js +385 -0
  213. package/src/commands/doctor.js +486 -0
  214. package/src/commands/migrate.js +185 -0
  215. package/src/commands/push.js +0 -0
  216. package/src/commands/routines.js +269 -0
  217. package/src/commands/status.js +130 -0
  218. package/src/commands/update.js +419 -0
  219. package/src/commands/version.js +88 -0
  220. package/src/utils/contamination.js +400 -0
  221. package/src/utils/git.js +181 -0
  222. package/src/utils/hooks.js +152 -0
  223. package/src/utils/routine-adapters/claude-code-cloud.js +78 -0
  224. package/src/utils/routine-adapters/cron.js +138 -0
  225. package/src/utils/routine-adapters/github-actions.js +141 -0
  226. package/src/utils/routine-adapters/index.js +21 -0
  227. package/src/utils/routines.js +166 -0
  228. package/src/utils/state.js +143 -0
  229. package/src/utils/symlinks.js +425 -0
  230. package/src/utils/ui.js +133 -0
@@ -0,0 +1,62 @@
1
+ ---
2
+ base_skill: copywriting
3
+ base_skill_version: 3.0.0
4
+ mode: extend
5
+ ---
6
+
7
+ # copywriting — fidelity-app overlay (example)
8
+
9
+ > Captures the project-specific brand voice pillars and segment register that
10
+ > used to live hard-coded in the copywriting skill before v3.0.0. Drop into
11
+ > `.baldart/overlays/copywriting.md` and adapt freely.
12
+
13
+ ## Brand voice pillars (`${paths.ui_guidelines}` § 1.4 — canonical)
14
+
15
+ The fidelity-app brand voice is built on four pillars. Every UI copy decision MUST align with at least one and contradict none:
16
+
17
+ 1. **Fun & Playful** — light, lively, never sterile.
18
+ 2. **Rewarding** — language frames every action as earning something concrete.
19
+ 3. **Trustworthy** — operational copy is precise; numbers and dates appear as facts, not promises.
20
+ 4. **Energetic** — verbs are active; CTAs use imperatives.
21
+
22
+ Marketing hyperbole stays in marketing surfaces; transactional/system copy (errors, confirmations) stays direct and trustworthy — even when other pillars apply elsewhere on the page.
23
+
24
+ ## Design philosophy implication (Neo-Brutalism)
25
+
26
+ Copy is **direct and concrete**: short sentences, concrete nouns, no corporate hedging. Avoid "streamline", "optimize", "innovative", "leverage", "best-in-class". Prefer Italian punchy phrasings ("Risparmia 4 ore a settimana" beats "Optimize your weekly workflow").
27
+
28
+ ## [OVERRIDE] Language rule
29
+
30
+ All UI copy is **Italian-first** (`identity.language: it`). English appears only in:
31
+ - Brand name / product name fragments that are intentionally untranslated.
32
+ - Technical terms with no idiomatic Italian (e.g. "API", "checkout", "dashboard").
33
+
34
+ Mixing English marketing phrasing in Italian UI ("Get started ora!") is forbidden — automatic rewrite required.
35
+
36
+ ## Audience register matrix (`identity.audience_segments`)
37
+
38
+ | Segment | Tone | Hyperbole allowed? | Example CTA |
39
+ |---|---|---|---|
40
+ | `customer` | Playful + rewarding. Emoji sparingly (max 1 per surface). | Yes in marketing, never in transactional. | "Riscatta il premio" |
41
+ | `merchant` | Operational, trust-first, low hyperbole. Numbers up front. | No. | "Apri il pannello vendite" |
42
+ | `merchant-staff` | Operational, brief. No marketing pillars. Direct verbs. | No. | "Conferma incasso" |
43
+ | `super-admin` | Neutral, factual. Like reading a status report. | No. | "Visualizza log" |
44
+
45
+ When the user requests copy without specifying a segment, default to asking. Never write segment-blind copy in this project.
46
+
47
+ ## Forbidden vocabulary (auto-rewrite)
48
+
49
+ `streamline`, `seamless`, `unlock`, `empower`, `leverage`, `state-of-the-art`, `cutting-edge`, `revolutionary`, `next-generation`, `world-class`. Italian equivalents to avoid: `ottimizza`, `senza soluzione di continuità`, `sblocca il potenziale`.
50
+
51
+ ## Tone-by-component (consult `${paths.design_system}/INDEX.md` for variants)
52
+
53
+ - **Empty states (customer surfaces)**: playful + rewarding. End with action verb.
54
+ - **Empty states (merchant surfaces)**: operational. State the missing data, suggest the next concrete step.
55
+ - **Error messages (any segment)**: pillar #3 (Trustworthy) only. Format: "Cosa è successo + Cosa fare adesso". No emoji, no playful tone.
56
+ - **Confirmation dialogs**: pillar #3 only. Past-tense fact + next-step verb.
57
+
58
+ ## Surfaces with unique register (project-specific)
59
+
60
+ - **Lottery surfaces** (customer): heighten pillar #1 (Fun & Playful) — exclamation tone allowed.
61
+ - **Rewards screens** (customer): heighten pillar #2 (Rewarding) — frame outcomes as earnings.
62
+ - **Gamification surfaces** (customer): pillars #1 + #2 combined; never #3.
@@ -0,0 +1,75 @@
1
+ ---
2
+ base_skill: ui-design
3
+ base_skill_version: 3.0.0
4
+ mode: extend
5
+ ---
6
+
7
+ # ui-design — fidelity-app overlay (example)
8
+
9
+ > This overlay captures every project-specific opinion that used to live
10
+ > hard-coded in the BALDART `ui-design` skill before v3.0.0. Drop it into
11
+ > your repo at `.baldart/overlays/ui-design.md` to reproduce the legacy
12
+ > behaviour. Adapt freely.
13
+ >
14
+ > Companion `baldart.config.yml` values (set via `npx baldart configure`):
15
+ > ```yaml
16
+ > identity:
17
+ > brand_name: "Fidelity"
18
+ > design_philosophy: "Neo-Brutalism"
19
+ > language: it
20
+ > audience_segments: ["customer","merchant","merchant-staff","super-admin"]
21
+ > stack:
22
+ > charting:
23
+ > canonical: ["recharts", "@nivo/heatmap"]
24
+ > forbidden: ["chart.js","echarts","victory","visx","d3","observable-plot","tremor"]
25
+ > wrappers_root: "src/components/charts"
26
+ > features:
27
+ > has_design_system: true
28
+ > multi_tenant_theming: true
29
+ > ```
30
+
31
+ ## Audience segments (project-specific)
32
+
33
+ The Step "Prerequisites" item 7 menu of audience segments is hard-pinned to:
34
+ **Customer, Merchant, Merchant Staff, Super Admin.** Ask the user which one before any design work; refuse to proceed if unstated.
35
+
36
+ ## Tailwind v4 token mechanism (extends "Design System Alignment")
37
+
38
+ Tailwind CSS v4 is in use (CSS-first, **NO** `tailwind.config.ts`). Token consumption is via CSS custom properties declared in `${paths.global_styles}`. Never hardcode hex colors, shadow pixel tuples, or border-width values — use the CSS variables declared in `${paths.design_system}/tokens-reference.md`.
39
+
40
+ ## Merchant theming pairing rule (multi-tenant)
41
+
42
+ When rendering any text over a theme-primary background, it MUST pair with the theme-primary-text token:
43
+ ```html
44
+ <span class="bg-[var(--theme-primary)] text-[var(--theme-primary-text,#000)]">…</span>
45
+ ```
46
+ This is non-negotiable per `${paths.design_system}/patterns/merchant-theming.md`. Evaluation FAILS hard on any violation regardless of other scores.
47
+
48
+ ## [OVERRIDE] Charting stack (Prerequisites item 5)
49
+
50
+ Replaces the generic "consult `stack.charting`" rule. The project enforces:
51
+
52
+ - **Canonical**: Recharts v3 (via shadcn primitives in `${paths.components_primitives}/chart.tsx`) + `@nivo/heatmap` only.
53
+ - **Always propose the Neo-Brutalism wrappers** in `${stack.charting.wrappers_root}/` — `BrutalLineChart`, `BrutalBarChart`, `BrutalDonutChart`, `BrutalHeatmapChart`. Never propose raw Recharts/Nivo.
54
+ - **Forbidden** (immediate refusal): chart.js, echarts, victory, visx, d3 standalone, observable-plot, tremor.
55
+ - Read `${paths.design_system}/patterns/charting.md` (BLOCKING) before any chart task.
56
+ - Reference ADR: `${paths.adrs_dir}/ADR-20260516-charting-stack-standardization.md`.
57
+
58
+ ## [OVERRIDE] Browser open command (Step E + generation.md)
59
+
60
+ Replaces the generic `open <file>` instruction. The project standardizes on Safari:
61
+ ```bash
62
+ open -a Safari /tmp/prd-design-<slug>/option-a.html
63
+ ```
64
+
65
+ ## Evaluation — additional thresholds
66
+
67
+ In addition to the base soglie hard:
68
+
69
+ - **C3 (Design System) >= 4** when `identity.design_philosophy: "Neo-Brutalism"` — anything else means the prototype reads as generic shadcn rather than brutalist.
70
+ - **Themed-surface pairing check**: FAIL on any `bg-[var(--theme-primary)]` without a matching `text-[var(--theme-primary-text,…)]`.
71
+ - **Italian-only**: any English UI text (CTA, button label, empty state) is an automatic FAIL.
72
+
73
+ ## Marker labels
74
+
75
+ In Step C "Marker": use `NUOVO` for new areas, `MODIFICATO` for changed areas. Bordo tratteggiato attorno agli elementi modificati nel layout esistente.
@@ -0,0 +1,19 @@
1
+ <!--
2
+ PROJECT CONTEXT HEADER — paste this at the top of any BALDART skill that
3
+ depends on project-specific paths, identity, stack choices, or feature
4
+ toggles. Customize the bracketed values for your skill.
5
+
6
+ Full protocol: framework/agents/project-context.md
7
+ Schema: framework/templates/baldart.config.template.yml
8
+ Docs: framework/docs/PROJECT-CONFIGURATION.md
9
+
10
+ Keep this header DENSE (3-6 lines). Do not re-explain the protocol —
11
+ cite framework/agents/project-context.md instead.
12
+ -->
13
+
14
+ ## Project Context
15
+
16
+ **Reads from `baldart.config.yml`:** `paths.<key>`, `identity.<key>`, `stack.<group>.<key>`.
17
+ **Gated by features:** `features.has_<flag>` (BLOCKING when `true`), `features.has_<other>` (skips step N when `false`).
18
+ **Overlay:** loads `.baldart/overlays/<this-skill>.md` if present — extends base by default; sections marked `## [OVERRIDE] <topic>` replace base sections.
19
+ **On missing/empty keys:** ask the user; do not assume defaults. See `framework/agents/project-context.md` § 3.
@@ -0,0 +1,208 @@
1
+ # [Feature Name] - Specification
2
+
3
+ **Feature ID**: FEAT-XXX
4
+ **Status**: DRAFT | APPROVED | IMPLEMENTED
5
+ **Owner**: [Agent/Person]
6
+ **Created**: YYYY-MM-DD
7
+ **Updated**: YYYY-MM-DD
8
+
9
+ ---
10
+
11
+ ## Summary
12
+
13
+ [1-3 paragraphs describing what this feature does, why it exists, and what problem it solves]
14
+
15
+ **Target Users**: [CUSTOMER | MERCHANT | ADMIN]
16
+ **Priority**: [LOW | MEDIUM | HIGH | CRITICAL]
17
+ **Effort Estimate**: [S | M | L | XL]
18
+
19
+ ---
20
+
21
+ ## User Stories
22
+
23
+ **As a [user type]**, I want to [action] so that [benefit].
24
+
25
+ ### Primary Stories
26
+ - **US-1**: As a [user], I want to [action] so that [benefit]
27
+ - **US-2**: As a [user], I want to [action] so that [benefit]
28
+
29
+ ### Secondary Stories
30
+ - **US-3**: As a [user], I want to [action] so that [benefit]
31
+
32
+ ---
33
+
34
+ ## Scope
35
+
36
+ ### In Scope
37
+ - [What this feature WILL include]
38
+ - [Specific functionality to be implemented]
39
+
40
+ ### Out of Scope (Non-Goals)
41
+ - [What this feature will NOT include]
42
+ - [Features explicitly excluded]
43
+ - [Future enhancements to consider later]
44
+
45
+ ---
46
+
47
+ ## UX Notes
48
+
49
+ ### User Flow
50
+ 1. User navigates to [page/component]
51
+ 2. User performs [action]
52
+ 3. System responds with [result]
53
+ 4. User sees [feedback]
54
+
55
+ ### UI Components
56
+ - **[Component Name]**: Description and purpose
57
+ - **[Component Name]**: Description and purpose
58
+
59
+ ### Mobile Considerations
60
+ - [Mobile-specific UX notes]
61
+ - [Responsive behavior]
62
+ - [Touch interactions]
63
+
64
+ ### Error States
65
+ - [Error condition]: [Error message shown to user]
66
+ - [Error condition]: [Error message shown to user]
67
+
68
+ ### Loading States
69
+ - [When loading]: [What user sees]
70
+
71
+ ---
72
+
73
+ ## API Changes
74
+
75
+ ### New Endpoints
76
+ ```typescript
77
+ // POST /api/[endpoint]
78
+ // Description: [What this endpoint does]
79
+ Request: {
80
+ field: type // Description
81
+ }
82
+ Response: {
83
+ field: type // Description
84
+ }
85
+ Errors:
86
+ - 400: [Error condition]
87
+ - 404: [Error condition]
88
+ - 500: [Error condition]
89
+ ```
90
+
91
+ ### Modified Endpoints
92
+ ```typescript
93
+ // [METHOD] /api/[endpoint]
94
+ // Changes: [What's being modified]
95
+ ```
96
+
97
+ ### Deprecated Endpoints
98
+ - `/api/[old-endpoint]` - Replaced by `/api/[new-endpoint]`
99
+
100
+ ---
101
+
102
+ ## Data Model Changes
103
+
104
+ ### New Collections
105
+ ```typescript
106
+ // Collection: [collectionName]
107
+ {
108
+ id: string // Description
109
+ field: type // Description
110
+ createdAt: Date
111
+ updatedAt: Date
112
+ }
113
+ ```
114
+ **Indexes Required**: [List indexes]
115
+
116
+ ### Schema Changes to Existing Collections
117
+ ```typescript
118
+ // Collection: [collectionName]
119
+ // Added fields:
120
+ {
121
+ newField: type // Description
122
+ }
123
+ ```
124
+
125
+ ### Data Migration Required
126
+ - [Y/N] If yes, describe migration strategy
127
+
128
+ ---
129
+
130
+ ## Edge Cases
131
+
132
+ ### Validation
133
+ - **[Case]**: System validates [condition] and rejects if [rule]
134
+ - **[Case]**: System validates [condition] and rejects if [rule]
135
+
136
+ ### Error Handling
137
+ - **[Scenario]**: [How system handles it]
138
+ - **[Scenario]**: [How system handles it]
139
+
140
+ ### Performance
141
+ - **[Concern]**: [Mitigation strategy]
142
+
143
+ ### Security
144
+ - **[Concern]**: [Mitigation strategy]
145
+
146
+ ---
147
+
148
+ ## Test Plan
149
+
150
+ ### Manual Test Cases
151
+ 1. **[Test Case]**: [Steps to reproduce] → Expected: [result]
152
+ 2. **[Test Case]**: [Steps to reproduce] → Expected: [result]
153
+
154
+ ### Validation Checklist
155
+ - [ ] Happy path: User completes flow successfully
156
+ - [ ] Error path: Invalid input rejected with clear message
157
+ - [ ] Empty state: UI handles no data gracefully
158
+ - [ ] Loading state: UI shows loading indicator
159
+ - [ ] Mobile: Feature works on mobile viewport
160
+ - [ ] Authentication: Unauthorized access blocked
161
+
162
+ ### Build Verification
163
+ - [ ] `npm run build` passes with no TypeScript errors
164
+ - [ ] No console errors in browser
165
+ - [ ] All links/navigation work correctly
166
+
167
+ ---
168
+
169
+ ## Rollout Notes
170
+
171
+ ### Prerequisites
172
+ - [Dependency or requirement needed before this can ship]
173
+
174
+ ### Deployment Steps
175
+ 1. [Step to deploy]
176
+ 2. [Step to deploy]
177
+
178
+ ### Seed Data Updates
179
+ - [Y/N] If yes, describe changes to seed script
180
+
181
+ ### Breaking Changes
182
+ - [List any breaking changes and migration path]
183
+
184
+ ### Rollback Plan
185
+ - [How to rollback if issues found]
186
+
187
+ ---
188
+
189
+ ## Open Questions
190
+
191
+ - **[Q-1]**: [Question that needs answering before implementation]
192
+ - **[Q-2]**: [Question that needs answering before implementation]
193
+
194
+ ---
195
+
196
+ ## Related
197
+
198
+ - **Feature Card**: `/backlog/[feature-name].yml`
199
+ - **Related Specs**: [Links to other specs]
200
+ - **Docs References**: [Which docs/references files this impacts]
201
+
202
+ ---
203
+
204
+ ## Changelog
205
+
206
+ | Date | Change | Author |
207
+ |------|--------|--------|
208
+ | YYYY-MM-DD | Initial draft | [Agent] |
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "baldart",
3
+ "version": "3.6.2",
4
+ "description": "Claude Agent Framework - Reusable framework for coordinating AI agents and humans in software projects",
5
+ "bin": {
6
+ "baldart": "./bin/baldart.js"
7
+ },
8
+ "scripts": {
9
+ "test": "echo \"No tests yet\" && exit 0",
10
+ "sync-version": "node -e \"const fs=require('fs'),p=require('./package.json');p.version=fs.readFileSync('VERSION','utf8').trim();fs.writeFileSync('./package.json',JSON.stringify(p,null,2)+'\\n')\"",
11
+ "prepublishOnly": "npm run sync-version"
12
+ },
13
+ "keywords": [
14
+ "claude",
15
+ "ai",
16
+ "agents",
17
+ "framework",
18
+ "coordination",
19
+ "development",
20
+ "workflow"
21
+ ],
22
+ "author": "Antonio Baldassarre <antonio@example.com>",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/antbald/BALDART.git"
27
+ },
28
+ "bugs": {
29
+ "url": "https://github.com/antbald/BALDART/issues"
30
+ },
31
+ "homepage": "https://github.com/antbald/BALDART#readme",
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ },
35
+ "dependencies": {
36
+ "chalk": "^4.1.2",
37
+ "commander": "^11.1.0",
38
+ "inquirer": "^8.2.5",
39
+ "js-yaml": "^4.1.0",
40
+ "ora": "^5.4.1",
41
+ "simple-git": "^3.22.0"
42
+ },
43
+ "files": [
44
+ "bin",
45
+ "src",
46
+ "framework",
47
+ "VERSION",
48
+ "CHANGELOG.md",
49
+ "README.md"
50
+ ]
51
+ }
@@ -0,0 +1,229 @@
1
+ const GitUtils = require('../utils/git');
2
+ const SymlinkUtils = require('../utils/symlinks');
3
+ const UI = require('../utils/ui');
4
+ const State = require('../utils/state');
5
+ const Hooks = require('../utils/hooks');
6
+
7
+ async function add(repo, options) {
8
+ const git = new GitUtils();
9
+ const symlinks = new SymlinkUtils();
10
+
11
+ try {
12
+ // Step 1: Verify environment
13
+ UI.header('STEP 1/5: Verify Environment');
14
+
15
+ const spinner = UI.spinner('Checking Git repository...').start();
16
+
17
+ const isRepo = await git.isGitRepo();
18
+ if (!isRepo) {
19
+ spinner.fail();
20
+ UI.error('Not a Git repository!');
21
+ UI.newline();
22
+ UI.box('ERROR', [
23
+ 'BALDART requires your project to be a Git repository.',
24
+ '',
25
+ 'Solution:',
26
+ ' 1. Initialize Git: git init',
27
+ ' 2. Or navigate to your project directory'
28
+ ]);
29
+ process.exit(1);
30
+ }
31
+
32
+ spinner.succeed('Git repository verified');
33
+
34
+ // Step 2: Check for existing framework
35
+ UI.header('STEP 2/5: Check Existing Installation');
36
+
37
+ const exists = await git.frameworkExists();
38
+ if (exists) {
39
+ UI.warning('Framework already installed!');
40
+ const shouldReinstall = await UI.confirm(
41
+ 'Remove and reinstall? (You will lose customizations)',
42
+ false
43
+ );
44
+
45
+ if (!shouldReinstall) {
46
+ UI.info('Installation cancelled. Use "baldart update" to update.');
47
+ process.exit(0);
48
+ }
49
+
50
+ UI.warning('Removing existing framework...');
51
+ const fs = require('fs');
52
+ fs.rmSync('.framework', { recursive: true, force: true });
53
+ }
54
+
55
+ UI.success('Ready for installation');
56
+
57
+ // Step 3: Explain what will be installed
58
+ UI.header('STEP 3/5: Installation Overview');
59
+
60
+ UI.box('WHAT WILL BE INSTALLED', [
61
+ '• Core Protocol: AGENTS.md (coordination rules)',
62
+ '• 17 Agent Modules: architecture, workflows, testing...',
63
+ '• 9 AI Agents: coder, code-reviewer, doc-reviewer...',
64
+ '• 3 Commands: /new, /design-review, /issue-review',
65
+ '• Templates: backlog cards, specs, UI guidelines',
66
+ '• Pre-commit hooks (customizable)',
67
+ '',
68
+ 'Framework will be installed in .framework/ directory',
69
+ 'Symlinks created for auto-updateable files',
70
+ 'Templates copied for customization'
71
+ ]);
72
+
73
+ const proceed = await UI.confirm('Install framework?', true);
74
+ if (!proceed) {
75
+ UI.info('Installation cancelled');
76
+ process.exit(0);
77
+ }
78
+
79
+ // Step 4: Download framework
80
+ UI.header('STEP 4/5: Download Framework');
81
+
82
+ const downloadSpinner = UI.spinner(`Downloading from ${repo}...`).start();
83
+
84
+ try {
85
+ await git.addSubtree(repo, options.branch);
86
+ downloadSpinner.succeed('Framework downloaded');
87
+
88
+ const version = await git.getFrameworkVersion();
89
+ UI.success(`Version installed: ${version}`);
90
+ try { State.recordInstall({ version, repo }); } catch (_) { /* non-fatal */ }
91
+ } catch (error) {
92
+ downloadSpinner.fail();
93
+ UI.error('Failed to download framework!');
94
+ UI.newline();
95
+ UI.box('ERROR', [
96
+ 'Possible causes:',
97
+ ' • No internet connection',
98
+ ' • Repository not accessible',
99
+ ` • Invalid repository: ${repo}`,
100
+ '',
101
+ 'Solution:',
102
+ ' • Check your internet connection',
103
+ ' • Verify repository exists',
104
+ ' • Try again later'
105
+ ]);
106
+ throw error;
107
+ }
108
+
109
+ // Step 5: Setup structure
110
+ UI.header('STEP 5/5: Setup Project Structure');
111
+
112
+ UI.info('Creating directories...');
113
+ symlinks.ensureDirectory('.claude');
114
+ symlinks.ensureDirectory('docs/references');
115
+ symlinks.ensureDirectory('templates');
116
+ symlinks.ensureDirectory('backlog');
117
+ UI.success('Directories created');
118
+
119
+ UI.newline();
120
+ // First-time install: 'safe' mode preserves any pre-existing user
121
+ // customisations without prompting (no destructive backups on fresh
122
+ // install paths). Per-skill merge always runs.
123
+ await symlinks.createAllSymlinks({ mode: 'safe' });
124
+
125
+ UI.newline();
126
+ symlinks.copyCustomizableFiles();
127
+
128
+ // Configure Git aliases
129
+ UI.section('Configuring Git Aliases');
130
+
131
+ const configureAliases = await UI.confirm('Configure git aliases (fw-version, fw-update, fw-push)?', true);
132
+
133
+ if (configureAliases) {
134
+ await git.git.addConfig('alias.fw-version', '!cat .framework/VERSION');
135
+ await git.git.addConfig('alias.fw-update', '!npx github:antbald/BALDART update');
136
+ await git.git.addConfig('alias.fw-push', '!npx github:antbald/BALDART push');
137
+ UI.success('Git aliases configured');
138
+ }
139
+
140
+ // Framework-edit-gate hook (since v3.3.0)
141
+ // Auto-register the PreToolUse hook that prevents project-specific
142
+ // tokens from being written into .framework/ skills accidentally.
143
+ try {
144
+ const res = Hooks.register();
145
+ if (res.status === 'created') {
146
+ UI.success('Registered framework-edit-gate hook in .claude/settings.json');
147
+ } else if (res.status === 'updated') {
148
+ UI.success('Added framework-edit-gate hook to existing .claude/settings.json');
149
+ } else if (res.status === 'already') {
150
+ UI.info('framework-edit-gate hook already registered.');
151
+ } else if (res.status === 'malformed') {
152
+ UI.warning('.claude/settings.json is malformed; skipped hook registration. Run `npx baldart doctor` after fixing it.');
153
+ }
154
+ } catch (err) {
155
+ UI.warning(`Hook registration skipped: ${err.message}`);
156
+ }
157
+
158
+ // Routines wizard (since v2.1.0)
159
+ try {
160
+ const routinesCmd = require('./routines');
161
+ await routinesCmd.postUpdateWizard();
162
+ } catch (err) {
163
+ UI.warning(`Routines wizard skipped: ${err.message}`);
164
+ }
165
+
166
+ // Project configuration (since v3.0.0)
167
+ // Skills now resolve project-specific facts from baldart.config.yml
168
+ // instead of hard-coding paths. Configure prompts for these on install.
169
+ UI.newline();
170
+ const runConfigure = await UI.confirm(
171
+ 'Configure project context now (paths, identity, stack, feature flags)?',
172
+ true
173
+ );
174
+ if (runConfigure) {
175
+ try {
176
+ const configureCmd = require('./configure');
177
+ await configureCmd();
178
+ } catch (err) {
179
+ UI.warning(`Configure step failed: ${err.message}`);
180
+ UI.info('Run `npx baldart configure` later to complete setup.');
181
+ }
182
+ } else {
183
+ UI.info('Skipped. Run `npx baldart configure` before invoking skills.');
184
+ }
185
+
186
+ // Success summary
187
+ UI.header('✓ INSTALLATION COMPLETE');
188
+
189
+ UI.box('NEXT STEPS', [
190
+ '1. Customize pre-commit hook:',
191
+ ' • Edit .claude/hooks/lint-before-commit.sh.template',
192
+ ' • Rename to lint-before-commit.sh',
193
+ ' • Make executable: chmod +x .claude/hooks/lint-before-commit.sh',
194
+ '',
195
+ '2. Customize UI guidelines:',
196
+ ' • Edit docs/references/ui-guidelines.template.md',
197
+ ' • Define colors, typography, spacing',
198
+ '',
199
+ '3. Create backlog cards:',
200
+ ' • Copy templates/feature-card.template.yml',
201
+ ' • Use /new command to implement',
202
+ '',
203
+ '4. Review scheduled routines:',
204
+ ' • npx baldart routines list',
205
+ ' • Install missing ones to drive auto-learning loops',
206
+ '',
207
+ '5. Read documentation:',
208
+ ' • cat AGENTS.md'
209
+ ]);
210
+
211
+ UI.newline();
212
+ UI.section('Available Commands');
213
+ UI.list([
214
+ 'baldart version - Show framework version',
215
+ 'baldart update - Update framework',
216
+ 'baldart push - Contribute improvements',
217
+ 'baldart status - Check installation status'
218
+ ], 'cyan');
219
+
220
+ UI.newline();
221
+ UI.success('Framework ready to use!');
222
+
223
+ } catch (error) {
224
+ UI.error(`Installation failed: ${error.message}`);
225
+ process.exit(1);
226
+ }
227
+ }
228
+
229
+ module.exports = add;