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.
- package/CHANGELOG.md +599 -0
- package/README.md +566 -0
- package/VERSION +1 -0
- package/bin/baldart.js +143 -0
- package/framework/.claude/agents/REGISTRY.md +169 -0
- package/framework/.claude/agents/api-perf-cost-auditor.md +291 -0
- package/framework/.claude/agents/code-reviewer.md +350 -0
- package/framework/.claude/agents/codebase-architect.md +391 -0
- package/framework/.claude/agents/coder.md +291 -0
- package/framework/.claude/agents/deep-human-insight.md +198 -0
- package/framework/.claude/agents/doc-reviewer.md +440 -0
- package/framework/.claude/agents/email-deliverability-architect.md +193 -0
- package/framework/.claude/agents/hybrid-ml-architect.md +285 -0
- package/framework/.claude/agents/hyper-gamification-designer.md +149 -0
- package/framework/.claude/agents/legal-counsel-gdpr.md +179 -0
- package/framework/.claude/agents/marketing-conversion-strategist.md +162 -0
- package/framework/.claude/agents/motion-expert.md +108 -0
- package/framework/.claude/agents/onboarding-architect-lead.md +230 -0
- package/framework/.claude/agents/plan-auditor.md +546 -0
- package/framework/.claude/agents/prd-card-writer.md +372 -0
- package/framework/.claude/agents/prd.md +744 -0
- package/framework/.claude/agents/qa-sentinel.md +305 -0
- package/framework/.claude/agents/remotion-animator-orchestrator.md +218 -0
- package/framework/.claude/agents/security-reviewer.md +276 -0
- package/framework/.claude/agents/senior-researcher.md +175 -0
- package/framework/.claude/agents/seo-analytics-strategist.md +156 -0
- package/framework/.claude/agents/skill-improver.md +61 -0
- package/framework/.claude/agents/ui-expert.md +191 -0
- package/framework/.claude/agents/visual-designer.md +190 -0
- package/framework/.claude/agents/website-orchestrator.md +118 -0
- package/framework/.claude/agents/wiki-curator.md +145 -0
- package/framework/.claude/commands/baldart-push.md +15 -0
- package/framework/.claude/commands/check.md +237 -0
- package/framework/.claude/commands/codexreview.md +203 -0
- package/framework/.claude/commands/design-review.md +11 -0
- package/framework/.claude/commands/issue-review.md +34 -0
- package/framework/.claude/commands/new.md +331 -0
- package/framework/.claude/commands/qa.md +257 -0
- package/framework/.claude/hooks/framework-edit-gate.js +208 -0
- package/framework/.claude/hooks/lint-before-commit.sh.template +66 -0
- package/framework/.claude/settings.local.json.example +32 -0
- package/framework/.claude/skills/api-design-principles/SKILL.md +567 -0
- package/framework/.claude/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/framework/.claude/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/framework/.claude/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/framework/.claude/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/framework/.claude/skills/baldart-push/SKILL.md +222 -0
- package/framework/.claude/skills/bug/SKILL.md +200 -0
- package/framework/.claude/skills/bug/references/logging-patterns.md +174 -0
- package/framework/.claude/skills/capture/SKILL.md +125 -0
- package/framework/.claude/skills/capture/references/synthesis-template.md +42 -0
- package/framework/.claude/skills/context-primer/SKILL.md +189 -0
- package/framework/.claude/skills/copywriting/SKILL.md +273 -0
- package/framework/.claude/skills/copywriting/references/copy-frameworks.md +338 -0
- package/framework/.claude/skills/copywriting/references/natural-transitions.md +252 -0
- package/framework/.claude/skills/doc-writing-for-rag/SKILL.md +119 -0
- package/framework/.claude/skills/doc-writing-for-rag/references/before-after-examples.md +291 -0
- package/framework/.claude/skills/doc-writing-for-rag/references/compact-templates.md +183 -0
- package/framework/.claude/skills/doc-writing-for-rag/references/frontmatter-minimal.md +112 -0
- package/framework/.claude/skills/doc-writing-for-rag/references/line-count-targets.md +110 -0
- package/framework/.claude/skills/doc-writing-for-rag/references/schemas-and-errors.md +129 -0
- package/framework/.claude/skills/find-skills/SKILL.md +133 -0
- package/framework/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/framework/.claude/skills/frontend-design/SKILL.md +84 -0
- package/framework/.claude/skills/gamification-design/SKILL.md +130 -0
- package/framework/.claude/skills/issue-review/SKILL.md +45 -0
- package/framework/.claude/skills/kie-ai/SKILL.md +262 -0
- package/framework/.claude/skills/kie-ai/references/models-catalog.md +272 -0
- package/framework/.claude/skills/kie-ai/scripts/kie_api.sh +209 -0
- package/framework/.claude/skills/kie-ai/scripts/remove_greenscreen.py +69 -0
- package/framework/.claude/skills/kie-ai/scripts/setup_api_key.sh +77 -0
- package/framework/.claude/skills/motion-design/LICENSE +21 -0
- package/framework/.claude/skills/motion-design/README.md +82 -0
- package/framework/.claude/skills/motion-design/SKILL.md +336 -0
- package/framework/.claude/skills/motion-design/director/choreography.md +93 -0
- package/framework/.claude/skills/motion-design/director/context-adaptation.md +83 -0
- package/framework/.claude/skills/motion-design/director/core-philosophy.md +53 -0
- package/framework/.claude/skills/motion-design/director/decision-framework.md +91 -0
- package/framework/.claude/skills/motion-design/director/disney-principles.md +102 -0
- package/framework/.claude/skills/motion-design/director/emotion-mapping.md +71 -0
- package/framework/.claude/skills/motion-design/director/motion-personality.md +89 -0
- package/framework/.claude/skills/motion-design/director/narrative-structure.md +62 -0
- package/framework/.claude/skills/motion-design/patterns/ambient-continuous.md +81 -0
- package/framework/.claude/skills/motion-design/patterns/entrance-exit.md +82 -0
- package/framework/.claude/skills/motion-design/patterns/multi-element.md +69 -0
- package/framework/.claude/skills/motion-design/patterns/state-feedback.md +96 -0
- package/framework/.claude/skills/motion-design/reference/property-selection.md +95 -0
- package/framework/.claude/skills/motion-design/reference/quality-checklist.md +67 -0
- package/framework/.claude/skills/motion-design/reference/timing-easing-tables.md +106 -0
- package/framework/.claude/skills/motion-design/reference/troubleshooting.md +73 -0
- package/framework/.claude/skills/new/SKILL.md +1687 -0
- package/framework/.claude/skills/playwright-skill/API_REFERENCE.md +652 -0
- package/framework/.claude/skills/playwright-skill/SKILL.md +157 -0
- package/framework/.claude/skills/playwright-skill/package.json +26 -0
- package/framework/.claude/skills/prd/SKILL.md +228 -0
- package/framework/.claude/skills/prd/assets/card-template.yml +232 -0
- package/framework/.claude/skills/prd/assets/epic-template.yml +190 -0
- package/framework/.claude/skills/prd/assets/prd-template.md +230 -0
- package/framework/.claude/skills/prd/assets/state-template.md +78 -0
- package/framework/.claude/skills/prd/references/api-perf-gate.md +152 -0
- package/framework/.claude/skills/prd/references/audit-phase.md +478 -0
- package/framework/.claude/skills/prd/references/backlog-phase.md +145 -0
- package/framework/.claude/skills/prd/references/discovery-phase.md +359 -0
- package/framework/.claude/skills/prd/references/impact-analysis.md +233 -0
- package/framework/.claude/skills/prd/references/prd-add-phase.md +214 -0
- package/framework/.claude/skills/prd/references/prd-writing-phase.md +145 -0
- package/framework/.claude/skills/prd/references/research-phase.md +216 -0
- package/framework/.claude/skills/prd/references/ui-design-phase.md +61 -0
- package/framework/.claude/skills/prd/references/validation-phase.md +72 -0
- package/framework/.claude/skills/prd-add/SKILL.md +222 -0
- package/framework/.claude/skills/prd-add/references/impact-analysis.md +233 -0
- package/framework/.claude/skills/remotion-best-practices/SKILL.md +48 -0
- package/framework/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
- package/framework/.claude/skills/remotion-best-practices/rules/animations.md +29 -0
- package/framework/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/framework/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/framework/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/framework/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
- package/framework/.claude/skills/remotion-best-practices/rules/audio.md +169 -0
- package/framework/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/framework/.claude/skills/remotion-best-practices/rules/can-decode.md +75 -0
- package/framework/.claude/skills/remotion-best-practices/rules/charts.md +58 -0
- package/framework/.claude/skills/remotion-best-practices/rules/compositions.md +141 -0
- package/framework/.claude/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/framework/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/framework/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/framework/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/framework/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/framework/.claude/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/framework/.claude/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/framework/.claude/skills/remotion-best-practices/rules/images.md +130 -0
- package/framework/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/framework/.claude/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/framework/.claude/skills/remotion-best-practices/rules/lottie.md +67 -0
- package/framework/.claude/skills/remotion-best-practices/rules/maps.md +401 -0
- package/framework/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/framework/.claude/skills/remotion-best-practices/rules/measuring-text.md +143 -0
- package/framework/.claude/skills/remotion-best-practices/rules/parameters.md +98 -0
- package/framework/.claude/skills/remotion-best-practices/rules/sequencing.md +118 -0
- package/framework/.claude/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/framework/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/framework/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/framework/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
- package/framework/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/framework/.claude/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/framework/.claude/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/framework/.claude/skills/remotion-best-practices/rules/trimming.md +52 -0
- package/framework/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
- package/framework/.claude/skills/seo-audit/SKILL.md +394 -0
- package/framework/.claude/skills/seo-audit/references/aeo-geo-patterns.md +279 -0
- package/framework/.claude/skills/seo-audit/references/ai-writing-detection.md +190 -0
- package/framework/.claude/skills/simplify/SKILL.md +137 -0
- package/framework/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/framework/.claude/skills/skill-creator/SKILL.md +356 -0
- package/framework/.claude/skills/skill-creator/references/output-patterns.md +82 -0
- package/framework/.claude/skills/skill-creator/references/workflows.md +28 -0
- package/framework/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/framework/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/framework/.claude/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/framework/.claude/skills/ui-design/SKILL.md +199 -0
- package/framework/.claude/skills/ui-design/references/component-discovery.md +54 -0
- package/framework/.claude/skills/ui-design/references/evaluation.md +171 -0
- package/framework/.claude/skills/ui-design/references/generation.md +109 -0
- package/framework/.claude/skills/ui-design/references/inventory.md +59 -0
- package/framework/.claude/skills/webapp-testing/LICENSE.txt +202 -0
- package/framework/.claude/skills/webapp-testing/SKILL.md +123 -0
- package/framework/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
- package/framework/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/framework/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/framework/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
- package/framework/.claude/skills/worktree-manager/SKILL.md +680 -0
- package/framework/AGENTS.md +240 -0
- package/framework/agents/api-contracts.md +137 -0
- package/framework/agents/architecture.md +145 -0
- package/framework/agents/coding-standards.md +148 -0
- package/framework/agents/data-model.md +110 -0
- package/framework/agents/deployment-protocol.md +232 -0
- package/framework/agents/design-review.md +172 -0
- package/framework/agents/env-reference.md +171 -0
- package/framework/agents/github-issue-subagent.md +252 -0
- package/framework/agents/index.md +261 -0
- package/framework/agents/llm-wiki-methodology.md +216 -0
- package/framework/agents/maintenance-protocol.md +305 -0
- package/framework/agents/observability.md +162 -0
- package/framework/agents/performance.md +155 -0
- package/framework/agents/project-context.md +145 -0
- package/framework/agents/runbook.md +208 -0
- package/framework/agents/security.md +168 -0
- package/framework/agents/skills-mapping.md +286 -0
- package/framework/agents/testing.md +111 -0
- package/framework/agents/workflows.md +215 -0
- package/framework/docs/PROJECT-CONFIGURATION.md +336 -0
- package/framework/docs/references/brand-guidelines.md +170 -0
- package/framework/docs/references/ui-guidelines.template.md +182 -0
- package/framework/routines/code-review.routine.yml +46 -0
- package/framework/routines/doc-review.routine.yml +45 -0
- package/framework/routines/ds-drift.routine.yml +52 -0
- package/framework/routines/full-sweep.routine.yml +51 -0
- package/framework/routines/index.yml +70 -0
- package/framework/routines/skill-improve.routine.yml +50 -0
- package/framework/routines/wiki-review.routine.yml +45 -0
- package/framework/templates/baldart.config.template.yml +113 -0
- package/framework/templates/breaking-change-checklist.md +484 -0
- package/framework/templates/feature-card.template.yml +125 -0
- package/framework/templates/overlays/README.md +44 -0
- package/framework/templates/overlays/copywriting.fidelity-example.md +62 -0
- package/framework/templates/overlays/ui-design.fidelity-example.md +75 -0
- package/framework/templates/skill-project-context.snippet.md +19 -0
- package/framework/templates/spec.template.md +208 -0
- package/package.json +51 -0
- package/src/commands/add.js +229 -0
- package/src/commands/configure.js +385 -0
- package/src/commands/doctor.js +486 -0
- package/src/commands/migrate.js +185 -0
- package/src/commands/push.js +0 -0
- package/src/commands/routines.js +269 -0
- package/src/commands/status.js +130 -0
- package/src/commands/update.js +419 -0
- package/src/commands/version.js +88 -0
- package/src/utils/contamination.js +400 -0
- package/src/utils/git.js +181 -0
- package/src/utils/hooks.js +152 -0
- package/src/utils/routine-adapters/claude-code-cloud.js +78 -0
- package/src/utils/routine-adapters/cron.js +138 -0
- package/src/utils/routine-adapters/github-actions.js +141 -0
- package/src/utils/routine-adapters/index.js +21 -0
- package/src/utils/routines.js +166 -0
- package/src/utils/state.js +143 -0
- package/src/utils/symlinks.js +425 -0
- 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;
|