@the-bearded-bear/claude-craft 8.4.0 → 8.5.0-next.b249d60
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/Dev/scripts/install-common-rules.sh +17 -0
- package/bundles/cursor/.cursorrules +347 -0
- package/bundles/windsurf/.windsurfrules +347 -0
- package/cli/index.js +4 -4
- package/cli/kanban/client/src/App.svelte +29 -0
- package/cli/kanban/client/src/components/PromptDialog.svelte +160 -0
- package/cli/kanban/client/src/views/KanbanView.svelte +7 -2
- package/cli/{flattener.js → lib/flattener.js} +1 -1
- package/package.json +2 -1
|
@@ -846,6 +846,23 @@ main() {
|
|
|
846
846
|
install_claude_md
|
|
847
847
|
fi
|
|
848
848
|
|
|
849
|
+
# Copy AGENTS.md template to target root (idempotent — won't overwrite existing)
|
|
850
|
+
local agents_template
|
|
851
|
+
agents_template="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../../.claude/templates/AGENTS.md.template"
|
|
852
|
+
local agents_target="$target_dir/AGENTS.md"
|
|
853
|
+
if [[ -f "$agents_template" && ! -f "$agents_target" ]]; then
|
|
854
|
+
if $dry_run; then
|
|
855
|
+
log_dry_run "Would create $agents_target from AGENTS.md.template"
|
|
856
|
+
else
|
|
857
|
+
cp "$agents_template" "$agents_target"
|
|
858
|
+
log_success "[install-common-rules] Created $agents_target from template"
|
|
859
|
+
((++files_created))
|
|
860
|
+
fi
|
|
861
|
+
elif [[ -f "$agents_target" ]]; then
|
|
862
|
+
log_info "[install-common-rules] AGENTS.md exists at $agents_target (not overwritten)"
|
|
863
|
+
((++files_skipped))
|
|
864
|
+
fi
|
|
865
|
+
|
|
849
866
|
print_summary
|
|
850
867
|
|
|
851
868
|
# Exit code
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
# Claude Craft — AI-First TDD Framework for Cursor IDE
|
|
2
|
+
# Generated from https://github.com/TheBeardedCTO/claude-craft
|
|
3
|
+
# Version: 8.0.1 | Last updated: 2026-04-17
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Core Framework
|
|
8
|
+
|
|
9
|
+
# Claude-Craft - Multi-Technology Framework
|
|
10
|
+
|
|
11
|
+
**Version:** 8.5.0 | **Languages:** en, fr, es, de, pt
|
|
12
|
+
|
|
13
|
+
A comprehensive AI-assisted development framework for Claude Code with 19 technology stacks, 72 agents, 211 commands across 26 namespaces, and BMAD v6 project management.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Supported Technologies (2026)
|
|
18
|
+
|
|
19
|
+
| Stack | Version | Architecture | Key Patterns |
|
|
20
|
+
|-------|---------|--------------|--------------|
|
|
21
|
+
| **.NET / C#** | 10 LTS / C# 14 | Clean Architecture | CQRS, MediatR (ou alternative), EF Core |
|
|
22
|
+
| **Symfony / PHP** | 8.0 / PHP 8.4+ | Clean Architecture | DDD, Hexagonal, API Platform, JsonStreamer |
|
|
23
|
+
| **Flutter / Dart** | 3.41 / Dart 3.11 | Clean Architecture | BLoC v9, Riverpod 3, Material 3, Impeller |
|
|
24
|
+
| **React** | 19.2 + Compiler 1.0 | Feature-based | Hooks, Zustand, React Query, Server Components |
|
|
25
|
+
| **React Native** | 0.85 (New Architecture) | Feature-based | Navigation 7, Reanimated 4, TurboModules |
|
|
26
|
+
| **Angular** | 20 LTS (ou 21) | Domain-driven | Signals, Standalone, Zoneless, httpResource |
|
|
27
|
+
| **Vue.js** | 3.5+ (3.6 beta Vapor) | Composition API | Pinia, Vitest, TypeScript, Alien Signals |
|
|
28
|
+
| **Laravel** | 13.x / PHP 8.5 | Clean Architecture | Actions, Pest 4, Sanctum, AI SDK, Passkey |
|
|
29
|
+
| **Python** | 3.14+ | Clean Architecture / Hexagonal | FastAPI, async/await, Pydantic, free-threading, JIT |
|
|
30
|
+
| **PHP** | 8.5 (Property Hooks 8.4+) | Clean Architecture | PSR-12, PHPStan Level 10, Pest 4 |
|
|
31
|
+
| **Paperclip** | 2026.403.0 | Two-layer (control plane + adapters) | Node.js 20+, TypeScript, Vitest, PostgreSQL, governance-first |
|
|
32
|
+
|
|
33
|
+
### Technology Quick Links
|
|
34
|
+
|
|
35
|
+
| Technology | Reference | Commands |
|
|
36
|
+
|------------|-----------|----------|
|
|
37
|
+
| C# / .NET | `@.claude/references/csharp/` | `/csharp:*` |
|
|
38
|
+
| Symfony / PHP | `@.claude/references/symfony/CLAUDE.md` | `/symfony:*` |
|
|
39
|
+
| Flutter / Dart | `@.claude/references/flutter/CLAUDE.md` | `/flutter:*` |
|
|
40
|
+
| React | `@.claude/references/react/` | `/react:*` |
|
|
41
|
+
| React Native | `@.claude/references/react-native/` | `/reactnative:*` |
|
|
42
|
+
| Angular | `@.claude/references/angular/` | `/angular:*` |
|
|
43
|
+
| Vue.js | `@.claude/references/vuejs/` | `/vuejs:*` |
|
|
44
|
+
| Laravel | `@.claude/references/laravel/` | `/laravel:*` |
|
|
45
|
+
| Python | `@.claude/references/python/` | `/python:*` |
|
|
46
|
+
| PHP | `@.claude/references/php/` | `/php:*` |
|
|
47
|
+
| Paperclip | `@.claude/references/paperclip/` | `/paperclip:*` |
|
|
48
|
+
|
|
49
|
+
See `@.claude/INDEX.md` for condensed checklists and patterns.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Available Commands (26 namespaces, 211 commands)
|
|
54
|
+
|
|
55
|
+
Core: `/common:*`, `/workflow:*`, `/team:*`, `/qa:*`, `/uiux:*` | Tech: `/symfony:*`, `/react:*`, `/flutter:*`, `/python:*`, `/angular:*`, `/vuejs:*`, `/laravel:*`, `/reactnative:*`, `/csharp:*`, `/php:*`, `/paperclip:*` | Infra (via `@devops-engineer`): Docker 29.4.3, Coolify v4.0.0 (stable), K8s 1.36.1, OpenTofu 1.12.0, Ansible 2.21.0, FrankenPHP 1.12.1, PgBouncer 1.25.2 (CVE-2026-6664/6667 patched) | Project: `/sprint:*`, `/gate:*`, `/project:*`
|
|
56
|
+
|
|
57
|
+
Full reference: [Commands](../docs/COMMANDS.md) | [CLI Reference](../docs/CLI-REFERENCE.md)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Available Agents (72 agents)
|
|
62
|
+
|
|
63
|
+
**Common** (20): `@api-designer`, `@database-architect`, `@devops-engineer`, `@performance-auditor`, `@refactoring-specialist`, `@tdd-coach`, `@uiux-orchestrator`, `@ui-designer`, `@ux-ergonome`, `@accessibility-expert`, `@research-assistant`, `@ralph-conductor`, `@security-auditor`, `@data-analyst`, `@migration-specialist`, `@cost-optimizer`, `@chaos-engineer`, `@devex-engineer`, `@mlops-engineer`, `@observability-engineer` | **Tech Reviewers** (11): `@{symfony,flutter,react,python,angular,laravel,vuejs,reactnative,csharp,php,paperclip}-reviewer` | **Infrastructure** (39): Docker, Coolify, K8s, OpenTofu, Ansible, Hcloud, PgBouncer, FrankenPHP — see [Agents](../docs/AGENTS.md) | **Project** (2): `@product-owner`, `@tech-lead`
|
|
64
|
+
|
|
65
|
+
Full reference: [Agents](../docs/AGENTS.md)
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## BMAD v6 Framework
|
|
70
|
+
|
|
71
|
+
| Track | Setup | Phases | Best For |
|
|
72
|
+
|-------|-------|--------|----------|
|
|
73
|
+
| **Quick Flow** | < 5 min | Implement only | Bug fixes, hotfixes |
|
|
74
|
+
| **Standard** | < 15 min | Plan -> Design -> Implement | New features |
|
|
75
|
+
| **Enterprise** | < 30 min | Analyze -> Plan -> Design -> Implement | Platforms |
|
|
76
|
+
|
|
77
|
+
**Quality Gates:** PRD >=80% | Tech Spec >=90% | INVEST 6/6 | Sprint Ready 100% | Story DoD 100% | Spec Alignment >=85%
|
|
78
|
+
|
|
79
|
+
**Status Routing:** `backlog -> ready-for-dev -> in-progress -> review -> done` (any -> `blocked`)
|
|
80
|
+
|
|
81
|
+
**TDD Phases:** Red -> Green -> Refactor
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Ralph Wiggum
|
|
86
|
+
|
|
87
|
+
Continuous AI loop that runs Claude until task completion: `/common:ralph-run "task"`
|
|
88
|
+
|
|
89
|
+
**DoD Validators:** `command` | `output_contains` | `file_changed` | `hook` | `human`
|
|
90
|
+
|
|
91
|
+
## QA Recette
|
|
92
|
+
|
|
93
|
+
Automated acceptance testing via Chrome. **Golden Rule:** A fixed bug should NEVER reappear.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
/qa:recette --scope=story --id=US-001 # Test a story
|
|
97
|
+
/qa:recette --scope=sprint --id=Sprint-3 # Test a sprint
|
|
98
|
+
/qa:recette --resume=REC-20260130-143022 # Resume session
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Prerequisites:** Chrome extension v1.0.36+ | Claude Code with `--chrome` or `/chrome`
|
|
102
|
+
|
|
103
|
+
> BMAD roles (bmad-master, pm, ba, architect, po, sm, dev, qa, qa-recette, ux) are integrated into workflow and sprint commands, not standalone agent files.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Docker Requirement
|
|
108
|
+
|
|
109
|
+
**Always use Docker for commands to abstract from local environment.**
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
docker compose exec app php bin/console ...
|
|
113
|
+
docker compose exec app ./vendor/bin/phpunit
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Skills
|
|
119
|
+
|
|
120
|
+
`/solid-principles`, `/testing`, `/security`, `/git-workflow`, `/documentation`, `/kiss-dry-yagni`, `/workflow-analysis`, `/parallel-worktrees`, `/atomic-tasks`, `/design-md-convention`, `/architect`, `/debug-methodical`, `/socratic-brainstorm` — loaded on demand from `.claude/skills/`
|
|
121
|
+
|
|
122
|
+
## AI-First Development (Karpathy)
|
|
123
|
+
|
|
124
|
+
See `@.claude/rules/23-karpathy-principles.md` — 3 principles: **state assumptions explicitly**, **minimal code (no speculation)**, **surface confusion**. Apply to all LLM-assisted code. Extends rule 05 (KISS/DRY/YAGNI).
|
|
125
|
+
|
|
126
|
+
## Design System Convention
|
|
127
|
+
|
|
128
|
+
Projects with UI should include a root `DESIGN.md` file (template: `.claude/templates/DESIGN.md.template`). Skill `design-md-convention` and agents `@ui-designer`/`@ux-ergonome` auto-load it for consistent UI generation.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Documentation
|
|
133
|
+
|
|
134
|
+
| Document | Description |
|
|
135
|
+
|----------|-------------|
|
|
136
|
+
| [Quickstart](../docs/QUICKSTART.md) | 5-minute getting started |
|
|
137
|
+
| [Prerequisites](../docs/PREREQUISITES.md) | Required dependencies |
|
|
138
|
+
| [CLI Reference](../docs/CLI-REFERENCE.md) | Full CLI documentation |
|
|
139
|
+
| [Commands](../docs/COMMANDS.md) | All commands |
|
|
140
|
+
| [Agents](../docs/AGENTS.md) | All agents |
|
|
141
|
+
| [FAQ](../docs/FAQ.md) | Common questions |
|
|
142
|
+
| [Troubleshooting](../docs/TROUBLESHOOTING.md) | Problem solving |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Quick Start
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Install Claude Craft
|
|
150
|
+
npx @the-bearded-bear/claude-craft install . --tech=symfony --lang=en
|
|
151
|
+
|
|
152
|
+
# Or with Makefile
|
|
153
|
+
make install-symfony TARGET=. RULES_LANG=en
|
|
154
|
+
|
|
155
|
+
# Start workflow
|
|
156
|
+
/workflow:init
|
|
157
|
+
|
|
158
|
+
# Use an agent
|
|
159
|
+
@tdd-coach Guide me through TDD for this feature
|
|
160
|
+
|
|
161
|
+
# Run audit
|
|
162
|
+
/team:audit --sequential
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Claude Code Compatibility
|
|
168
|
+
|
|
169
|
+
**Minimum Version:** 2.1.97 (CVE-2025-59536 patched) | **Recommended:** 2.1.117 — See `@.claude/COMPATIBILITY.md` for full changelog (v2.1.20+).
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Best Practices
|
|
174
|
+
|
|
175
|
+
See `.claude/rules/12-context-management.md` for detailed guidance.
|
|
176
|
+
|
|
177
|
+
| Practice | Description |
|
|
178
|
+
|----------|-------------|
|
|
179
|
+
| **CLAUDE.md size** | Keep under 200 lines; use `.claude/rules/` for details |
|
|
180
|
+
| **Use `/clear`** | Between unrelated tasks to reset context |
|
|
181
|
+
| **Sub-agents** | Delegate investigations to keep main context clean |
|
|
182
|
+
| **Verification loops** | Always provide tests/expected outputs (2-3x quality improvement) |
|
|
183
|
+
| **Plan Mode** | Invest in planning for complex tasks (> 3 files) |
|
|
184
|
+
| **Parallel worktrees** | Use `git worktree` for concurrent sessions |
|
|
185
|
+
| **Hooks** | CLAUDE.md = suggestions. Hooks = requirements |
|
|
186
|
+
| **`/memory`** | Persistent session learnings across conversations (v2.1.59+) |
|
|
187
|
+
| **Pointers over copies** | Use `@path` references instead of copying code into CLAUDE.md |
|
|
188
|
+
| **Token optimization** | Use `/common:setup-rtk` for 55-65% token savings |
|
|
189
|
+
| **Sub-agent model** | Set `CLAUDE_CODE_SUBAGENT_MODEL=sonnet` for cost savings |
|
|
190
|
+
|
|
191
|
+
See `.claude/templates/hooks/` for ready-to-use hook templates.
|
|
192
|
+
|
|
193
|
+
## Quick Reference Index
|
|
194
|
+
|
|
195
|
+
# Claude-Craft Rules Index
|
|
196
|
+
|
|
197
|
+
## Stack Overview (2026)
|
|
198
|
+
|
|
199
|
+
.NET 10 LTS / C# 14 | Symfony 8 / PHP 8.5 | Flutter 3.41 / Dart 3.11 | React 19.2 | Laravel 13 | Python 3.14+
|
|
200
|
+
|
|
201
|
+
## Architecture Layers
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
WebAPI/Presentation → Infrastructure → Application → Domain (← INWARD ONLY)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Domain**: NO external deps, Value Objects, private setters | **Application**: CQRS (MediatR/alternative), DTOs, validation | **Infrastructure**: DB, external services
|
|
208
|
+
|
|
209
|
+
## Coding Standards
|
|
210
|
+
|
|
211
|
+
| Element | Convention | Always |
|
|
212
|
+
|---------|-----------|--------|
|
|
213
|
+
| Public | PascalCase | Pass `CancellationToken`, enable nullable |
|
|
214
|
+
| Private | _camelCase | Async suffix: `ProcessAsync` |
|
|
215
|
+
| Params | camelCase | Methods < 20 lines, complexity < 10 |
|
|
216
|
+
|
|
217
|
+
## SOLID + KISS/DRY/YAGNI
|
|
218
|
+
|
|
219
|
+
**SRP**: 1 reason to change | **OCP**: Extend via interfaces | **LSP**: Subtypes substitutable | **ISP**: < 5 methods/interface | **DIP**: Depend on abstractions
|
|
220
|
+
|
|
221
|
+
**KISS**: < 10 complexity | **DRY**: Extract after 3 occurrences | **YAGNI**: Only what's required
|
|
222
|
+
|
|
223
|
+
## Testing Pyramid
|
|
224
|
+
|
|
225
|
+
Unit 70% (< 1s) | Integration 20% (< 5s) | E2E 10% (< 30s) — **TDD**: RED → GREEN → REFACTOR
|
|
226
|
+
|
|
227
|
+
**Stacks**: xUnit/FluentAssertions (C#), Pest 4 (PHP), Vitest 4 (JS/TS), pytest 8 (Python)
|
|
228
|
+
|
|
229
|
+
## Security Essentials
|
|
230
|
+
|
|
231
|
+
Server-side validation | Parameterized queries | Secrets in vault | CSP/HSTS headers | `[Authorize(Policy)]`
|
|
232
|
+
|
|
233
|
+
## Git Workflow
|
|
234
|
+
|
|
235
|
+
**Conventional Commits**: `<type>(<scope>): <description>` — Types: feat, fix, docs, refactor, perf, test
|
|
236
|
+
**Branches**: `feature/`, `fix/`, `refactor/`
|
|
237
|
+
|
|
238
|
+
## Analysis Workflow (Mandatory)
|
|
239
|
+
|
|
240
|
+
1. Understand request → 2. Read affected files + deps → 3. Document impact/risks → 4. Validate if medium/high impact → 5. TDD first
|
|
241
|
+
|
|
242
|
+
## Technology References
|
|
243
|
+
|
|
244
|
+
| Stack | Path | Key Features |
|
|
245
|
+
|-------|------|--------------|
|
|
246
|
+
| **C# / .NET** | `@.claude/references/csharp/` | Extension Members, Span<T>, Clean Architecture |
|
|
247
|
+
| **Symfony / PHP** | `@.claude/references/symfony/CLAUDE.md` | JSON Streamer, ObjectMapper, DDD |
|
|
248
|
+
| **Flutter / Dart** | `@.claude/references/flutter/CLAUDE.md` | WASM, MCP, BLoC v9, Material 3 |
|
|
249
|
+
|
|
250
|
+
## Base Rules
|
|
251
|
+
|
|
252
|
+
`workflow-analysis.md` | `solid-principles.md` | `kiss-dry-yagni.md` | `git-workflow.md` | `security.md` | `testing.md` | `documentation.md`
|
|
253
|
+
|
|
254
|
+
## Tech-Specific Guides
|
|
255
|
+
|
|
256
|
+
**C#**: architecture, coding-standards, testing, security, tooling, quality-tools, aspire
|
|
257
|
+
**Symfony**: architecture, coding-standards, quality-tools, json-streamer, object-mapper
|
|
258
|
+
**Flutter**: coding-standards, wasm, mcp-integration, web-performance-2026
|
|
259
|
+
|
|
260
|
+
All in `@.claude/references/<tech>/`
|
|
261
|
+
|
|
262
|
+
## QA Recette Essentials
|
|
263
|
+
|
|
264
|
+
**Prerequisites**: Chrome extension v1.0.36+ | Claude Code `--chrome` or `/chrome`
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
/qa:recette --scope=story --id=US-001 # Test story
|
|
268
|
+
/qa:recette --resume=REC-xxx # Resume session
|
|
269
|
+
/qa:fix --session=REC-xxx --severity=critical # Fix critical bugs
|
|
270
|
+
/qa:regression --check # Check Golden Rule
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Golden Rule**: A fixed bug should NEVER reappear → auto-generates regression tests
|
|
274
|
+
|
|
275
|
+
**Output**: `.recette/` (plans, sessions, regression, metrics, reports)
|
|
276
|
+
|
|
277
|
+
## LSP Plugins
|
|
278
|
+
|
|
279
|
+
PHP: `php-lsp` | Python: `pyright-lsp` | TS/JS: `typescript-lsp` | Dart: `dart-analyzer` | C#: `csharp-lsp`
|
|
280
|
+
|
|
281
|
+
Install: `/plugins install <name>@claude-plugins-official`
|
|
282
|
+
|
|
283
|
+
> Full docs: `@.claude/COMPATIBILITY.md` | Technology details: `@.claude/references/<tech>/`
|
|
284
|
+
|
|
285
|
+
## Essential Rules (Condensed)
|
|
286
|
+
|
|
287
|
+
### SOLID Principles
|
|
288
|
+
SRP | OCP | LSP | ISP | DIP — See full rules in .claude/rules/04-solid-principles.md
|
|
289
|
+
|
|
290
|
+
### KISS, DRY, YAGNI
|
|
291
|
+
## KISS — Keep It Simple
|
|
292
|
+
|
|
293
|
+
| Metrique | Cible | Limite |
|
|
294
|
+
|----------|-------|--------|
|
|
295
|
+
| **Cognitive Complexity** (primaire 2026) | < 7 | < 10 |
|
|
296
|
+
| Lignes par methode | < 10 | < 20 |
|
|
297
|
+
| Complexite cyclomatique | < 5 | < 10 |
|
|
298
|
+
| Profondeur d'indentation | 2 | 3 max |
|
|
299
|
+
| Parametres par methode | 3 | 4 max |
|
|
300
|
+
|
|
301
|
+
> **Cognitive Complexity** (SonarQube, ReSharper) est la metrique dominante 2026 : elle mesure la difficulte humaine de comprehension. Elle prevaut sur la stricte limite de 20 lignes. Source : [Cognitive vs Cyclomatic](https://gilles-fabre.medium.com/what-is-the-difference-between-cyclomatic-complexity-and-cognitive-complexity-a87cef0e2851).
|
|
302
|
+
|
|
303
|
+
**Regles :** Early returns (guard clauses), pas de else imbrique, nommage explicite, composition > heritage.
|
|
304
|
+
|
|
305
|
+
## DRY — Don't Repeat Yourself
|
|
306
|
+
|
|
307
|
+
### Testing
|
|
308
|
+
TDD: RED → GREEN → REFACTOR | Coverage >= 80% | Mutation testing
|
|
309
|
+
|
|
310
|
+
### Security
|
|
311
|
+
## OWASP Top 10:2025 — Essentiels
|
|
312
|
+
|
|
313
|
+
| # | Menace | Defense |
|
|
314
|
+
|---|--------|---------|
|
|
315
|
+
| 1 | Broken Access Control (inclut **SSRF** consolide) | Verifier permissions a CHAQUE requete, deny by default |
|
|
316
|
+
| 2 | Cryptographic Failures | TLS 1.3, **Argon2id** (128 MiB RAM, t=3-5, p=1), secrets dans vault |
|
|
317
|
+
| 3 | Injection | Requetes parametrees, validation/sanitization |
|
|
318
|
+
| 4 | Insecure Design | Threat modeling, defense in depth, rate limiting |
|
|
319
|
+
| 5 | Security Misconfiguration | Hardening, erreurs generiques en prod |
|
|
320
|
+
| 6 | **Software Supply Chain Failures** (nouveau 2025) | SLSA 1.0, SBOM (SPDX 3 / CycloneDX), Sigstore keyless signing, reproducible builds |
|
|
321
|
+
| 7 | **Mishandling of Exceptional Conditions** (nouveau 2025) | Logger les erreurs, ne jamais exposer la stack trace en prod |
|
|
322
|
+
|
|
323
|
+
Sources : [OWASP Top 10:2025](https://owasp.org/Top10/2025/), [Supply Chain 2026](https://kawaldeepsingh.medium.com/practical-software-supply-chain-security-2026-sboms-signing-slsa-reproducible-builds-a-0416cfac32dc).
|
|
324
|
+
|
|
325
|
+
## Regles non-negociables
|
|
326
|
+
|
|
327
|
+
### Git Workflow
|
|
328
|
+
Conventional Commits | GitHub Flow | Feature branches < 3 days
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Full Documentation
|
|
334
|
+
|
|
335
|
+
For complete documentation, visit: https://claude-craft.dev
|
|
336
|
+
|
|
337
|
+
For full rules and references:
|
|
338
|
+
- SOLID: .claude/rules/04-solid-principles.md
|
|
339
|
+
- KISS/DRY/YAGNI: .claude/rules/05-kiss-dry-yagni.md
|
|
340
|
+
- Testing: .claude/rules/07-testing.md
|
|
341
|
+
- Security: .claude/rules/11-security.md
|
|
342
|
+
- Git Workflow: .claude/rules/09-git-workflow.md
|
|
343
|
+
- Context Management: .claude/rules/12-context-management.md
|
|
344
|
+
|
|
345
|
+
**Attribution:** The Bearded CTO / Claude Craft
|
|
346
|
+
**License:** MIT
|
|
347
|
+
**Repository:** https://github.com/TheBeardedCTO/claude-craft
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
# Claude Craft — AI-First TDD Framework for Windsurf IDE
|
|
2
|
+
# Generated from https://github.com/TheBeardedCTO/claude-craft
|
|
3
|
+
# Version: 8.0.1 | Last updated: 2026-04-17
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Core Framework
|
|
8
|
+
|
|
9
|
+
# Claude-Craft - Multi-Technology Framework
|
|
10
|
+
|
|
11
|
+
**Version:** 8.5.0 | **Languages:** en, fr, es, de, pt
|
|
12
|
+
|
|
13
|
+
A comprehensive AI-assisted development framework for Claude Code with 19 technology stacks, 72 agents, 211 commands across 26 namespaces, and BMAD v6 project management.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Supported Technologies (2026)
|
|
18
|
+
|
|
19
|
+
| Stack | Version | Architecture | Key Patterns |
|
|
20
|
+
|-------|---------|--------------|--------------|
|
|
21
|
+
| **.NET / C#** | 10 LTS / C# 14 | Clean Architecture | CQRS, MediatR (ou alternative), EF Core |
|
|
22
|
+
| **Symfony / PHP** | 8.0 / PHP 8.4+ | Clean Architecture | DDD, Hexagonal, API Platform, JsonStreamer |
|
|
23
|
+
| **Flutter / Dart** | 3.41 / Dart 3.11 | Clean Architecture | BLoC v9, Riverpod 3, Material 3, Impeller |
|
|
24
|
+
| **React** | 19.2 + Compiler 1.0 | Feature-based | Hooks, Zustand, React Query, Server Components |
|
|
25
|
+
| **React Native** | 0.85 (New Architecture) | Feature-based | Navigation 7, Reanimated 4, TurboModules |
|
|
26
|
+
| **Angular** | 20 LTS (ou 21) | Domain-driven | Signals, Standalone, Zoneless, httpResource |
|
|
27
|
+
| **Vue.js** | 3.5+ (3.6 beta Vapor) | Composition API | Pinia, Vitest, TypeScript, Alien Signals |
|
|
28
|
+
| **Laravel** | 13.x / PHP 8.5 | Clean Architecture | Actions, Pest 4, Sanctum, AI SDK, Passkey |
|
|
29
|
+
| **Python** | 3.14+ | Clean Architecture / Hexagonal | FastAPI, async/await, Pydantic, free-threading, JIT |
|
|
30
|
+
| **PHP** | 8.5 (Property Hooks 8.4+) | Clean Architecture | PSR-12, PHPStan Level 10, Pest 4 |
|
|
31
|
+
| **Paperclip** | 2026.403.0 | Two-layer (control plane + adapters) | Node.js 20+, TypeScript, Vitest, PostgreSQL, governance-first |
|
|
32
|
+
|
|
33
|
+
### Technology Quick Links
|
|
34
|
+
|
|
35
|
+
| Technology | Reference | Commands |
|
|
36
|
+
|------------|-----------|----------|
|
|
37
|
+
| C# / .NET | `@.claude/references/csharp/` | `/csharp:*` |
|
|
38
|
+
| Symfony / PHP | `@.claude/references/symfony/CLAUDE.md` | `/symfony:*` |
|
|
39
|
+
| Flutter / Dart | `@.claude/references/flutter/CLAUDE.md` | `/flutter:*` |
|
|
40
|
+
| React | `@.claude/references/react/` | `/react:*` |
|
|
41
|
+
| React Native | `@.claude/references/react-native/` | `/reactnative:*` |
|
|
42
|
+
| Angular | `@.claude/references/angular/` | `/angular:*` |
|
|
43
|
+
| Vue.js | `@.claude/references/vuejs/` | `/vuejs:*` |
|
|
44
|
+
| Laravel | `@.claude/references/laravel/` | `/laravel:*` |
|
|
45
|
+
| Python | `@.claude/references/python/` | `/python:*` |
|
|
46
|
+
| PHP | `@.claude/references/php/` | `/php:*` |
|
|
47
|
+
| Paperclip | `@.claude/references/paperclip/` | `/paperclip:*` |
|
|
48
|
+
|
|
49
|
+
See `@.claude/INDEX.md` for condensed checklists and patterns.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Available Commands (26 namespaces, 211 commands)
|
|
54
|
+
|
|
55
|
+
Core: `/common:*`, `/workflow:*`, `/team:*`, `/qa:*`, `/uiux:*` | Tech: `/symfony:*`, `/react:*`, `/flutter:*`, `/python:*`, `/angular:*`, `/vuejs:*`, `/laravel:*`, `/reactnative:*`, `/csharp:*`, `/php:*`, `/paperclip:*` | Infra (via `@devops-engineer`): Docker 29.4.3, Coolify v4.0.0 (stable), K8s 1.36.1, OpenTofu 1.12.0, Ansible 2.21.0, FrankenPHP 1.12.1, PgBouncer 1.25.2 (CVE-2026-6664/6667 patched) | Project: `/sprint:*`, `/gate:*`, `/project:*`
|
|
56
|
+
|
|
57
|
+
Full reference: [Commands](../docs/COMMANDS.md) | [CLI Reference](../docs/CLI-REFERENCE.md)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Available Agents (72 agents)
|
|
62
|
+
|
|
63
|
+
**Common** (20): `@api-designer`, `@database-architect`, `@devops-engineer`, `@performance-auditor`, `@refactoring-specialist`, `@tdd-coach`, `@uiux-orchestrator`, `@ui-designer`, `@ux-ergonome`, `@accessibility-expert`, `@research-assistant`, `@ralph-conductor`, `@security-auditor`, `@data-analyst`, `@migration-specialist`, `@cost-optimizer`, `@chaos-engineer`, `@devex-engineer`, `@mlops-engineer`, `@observability-engineer` | **Tech Reviewers** (11): `@{symfony,flutter,react,python,angular,laravel,vuejs,reactnative,csharp,php,paperclip}-reviewer` | **Infrastructure** (39): Docker, Coolify, K8s, OpenTofu, Ansible, Hcloud, PgBouncer, FrankenPHP — see [Agents](../docs/AGENTS.md) | **Project** (2): `@product-owner`, `@tech-lead`
|
|
64
|
+
|
|
65
|
+
Full reference: [Agents](../docs/AGENTS.md)
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## BMAD v6 Framework
|
|
70
|
+
|
|
71
|
+
| Track | Setup | Phases | Best For |
|
|
72
|
+
|-------|-------|--------|----------|
|
|
73
|
+
| **Quick Flow** | < 5 min | Implement only | Bug fixes, hotfixes |
|
|
74
|
+
| **Standard** | < 15 min | Plan -> Design -> Implement | New features |
|
|
75
|
+
| **Enterprise** | < 30 min | Analyze -> Plan -> Design -> Implement | Platforms |
|
|
76
|
+
|
|
77
|
+
**Quality Gates:** PRD >=80% | Tech Spec >=90% | INVEST 6/6 | Sprint Ready 100% | Story DoD 100% | Spec Alignment >=85%
|
|
78
|
+
|
|
79
|
+
**Status Routing:** `backlog -> ready-for-dev -> in-progress -> review -> done` (any -> `blocked`)
|
|
80
|
+
|
|
81
|
+
**TDD Phases:** Red -> Green -> Refactor
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Ralph Wiggum
|
|
86
|
+
|
|
87
|
+
Continuous AI loop that runs Claude until task completion: `/common:ralph-run "task"`
|
|
88
|
+
|
|
89
|
+
**DoD Validators:** `command` | `output_contains` | `file_changed` | `hook` | `human`
|
|
90
|
+
|
|
91
|
+
## QA Recette
|
|
92
|
+
|
|
93
|
+
Automated acceptance testing via Chrome. **Golden Rule:** A fixed bug should NEVER reappear.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
/qa:recette --scope=story --id=US-001 # Test a story
|
|
97
|
+
/qa:recette --scope=sprint --id=Sprint-3 # Test a sprint
|
|
98
|
+
/qa:recette --resume=REC-20260130-143022 # Resume session
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Prerequisites:** Chrome extension v1.0.36+ | Claude Code with `--chrome` or `/chrome`
|
|
102
|
+
|
|
103
|
+
> BMAD roles (bmad-master, pm, ba, architect, po, sm, dev, qa, qa-recette, ux) are integrated into workflow and sprint commands, not standalone agent files.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Docker Requirement
|
|
108
|
+
|
|
109
|
+
**Always use Docker for commands to abstract from local environment.**
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
docker compose exec app php bin/console ...
|
|
113
|
+
docker compose exec app ./vendor/bin/phpunit
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Skills
|
|
119
|
+
|
|
120
|
+
`/solid-principles`, `/testing`, `/security`, `/git-workflow`, `/documentation`, `/kiss-dry-yagni`, `/workflow-analysis`, `/parallel-worktrees`, `/atomic-tasks`, `/design-md-convention`, `/architect`, `/debug-methodical`, `/socratic-brainstorm` — loaded on demand from `.claude/skills/`
|
|
121
|
+
|
|
122
|
+
## AI-First Development (Karpathy)
|
|
123
|
+
|
|
124
|
+
See `@.claude/rules/23-karpathy-principles.md` — 3 principles: **state assumptions explicitly**, **minimal code (no speculation)**, **surface confusion**. Apply to all LLM-assisted code. Extends rule 05 (KISS/DRY/YAGNI).
|
|
125
|
+
|
|
126
|
+
## Design System Convention
|
|
127
|
+
|
|
128
|
+
Projects with UI should include a root `DESIGN.md` file (template: `.claude/templates/DESIGN.md.template`). Skill `design-md-convention` and agents `@ui-designer`/`@ux-ergonome` auto-load it for consistent UI generation.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Documentation
|
|
133
|
+
|
|
134
|
+
| Document | Description |
|
|
135
|
+
|----------|-------------|
|
|
136
|
+
| [Quickstart](../docs/QUICKSTART.md) | 5-minute getting started |
|
|
137
|
+
| [Prerequisites](../docs/PREREQUISITES.md) | Required dependencies |
|
|
138
|
+
| [CLI Reference](../docs/CLI-REFERENCE.md) | Full CLI documentation |
|
|
139
|
+
| [Commands](../docs/COMMANDS.md) | All commands |
|
|
140
|
+
| [Agents](../docs/AGENTS.md) | All agents |
|
|
141
|
+
| [FAQ](../docs/FAQ.md) | Common questions |
|
|
142
|
+
| [Troubleshooting](../docs/TROUBLESHOOTING.md) | Problem solving |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Quick Start
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Install Claude Craft
|
|
150
|
+
npx @the-bearded-bear/claude-craft install . --tech=symfony --lang=en
|
|
151
|
+
|
|
152
|
+
# Or with Makefile
|
|
153
|
+
make install-symfony TARGET=. RULES_LANG=en
|
|
154
|
+
|
|
155
|
+
# Start workflow
|
|
156
|
+
/workflow:init
|
|
157
|
+
|
|
158
|
+
# Use an agent
|
|
159
|
+
@tdd-coach Guide me through TDD for this feature
|
|
160
|
+
|
|
161
|
+
# Run audit
|
|
162
|
+
/team:audit --sequential
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Claude Code Compatibility
|
|
168
|
+
|
|
169
|
+
**Minimum Version:** 2.1.97 (CVE-2025-59536 patched) | **Recommended:** 2.1.117 — See `@.claude/COMPATIBILITY.md` for full changelog (v2.1.20+).
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Best Practices
|
|
174
|
+
|
|
175
|
+
See `.claude/rules/12-context-management.md` for detailed guidance.
|
|
176
|
+
|
|
177
|
+
| Practice | Description |
|
|
178
|
+
|----------|-------------|
|
|
179
|
+
| **CLAUDE.md size** | Keep under 200 lines; use `.claude/rules/` for details |
|
|
180
|
+
| **Use `/clear`** | Between unrelated tasks to reset context |
|
|
181
|
+
| **Sub-agents** | Delegate investigations to keep main context clean |
|
|
182
|
+
| **Verification loops** | Always provide tests/expected outputs (2-3x quality improvement) |
|
|
183
|
+
| **Plan Mode** | Invest in planning for complex tasks (> 3 files) |
|
|
184
|
+
| **Parallel worktrees** | Use `git worktree` for concurrent sessions |
|
|
185
|
+
| **Hooks** | CLAUDE.md = suggestions. Hooks = requirements |
|
|
186
|
+
| **`/memory`** | Persistent session learnings across conversations (v2.1.59+) |
|
|
187
|
+
| **Pointers over copies** | Use `@path` references instead of copying code into CLAUDE.md |
|
|
188
|
+
| **Token optimization** | Use `/common:setup-rtk` for 55-65% token savings |
|
|
189
|
+
| **Sub-agent model** | Set `CLAUDE_CODE_SUBAGENT_MODEL=sonnet` for cost savings |
|
|
190
|
+
|
|
191
|
+
See `.claude/templates/hooks/` for ready-to-use hook templates.
|
|
192
|
+
|
|
193
|
+
## Quick Reference Index
|
|
194
|
+
|
|
195
|
+
# Claude-Craft Rules Index
|
|
196
|
+
|
|
197
|
+
## Stack Overview (2026)
|
|
198
|
+
|
|
199
|
+
.NET 10 LTS / C# 14 | Symfony 8 / PHP 8.5 | Flutter 3.41 / Dart 3.11 | React 19.2 | Laravel 13 | Python 3.14+
|
|
200
|
+
|
|
201
|
+
## Architecture Layers
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
WebAPI/Presentation → Infrastructure → Application → Domain (← INWARD ONLY)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Domain**: NO external deps, Value Objects, private setters | **Application**: CQRS (MediatR/alternative), DTOs, validation | **Infrastructure**: DB, external services
|
|
208
|
+
|
|
209
|
+
## Coding Standards
|
|
210
|
+
|
|
211
|
+
| Element | Convention | Always |
|
|
212
|
+
|---------|-----------|--------|
|
|
213
|
+
| Public | PascalCase | Pass `CancellationToken`, enable nullable |
|
|
214
|
+
| Private | _camelCase | Async suffix: `ProcessAsync` |
|
|
215
|
+
| Params | camelCase | Methods < 20 lines, complexity < 10 |
|
|
216
|
+
|
|
217
|
+
## SOLID + KISS/DRY/YAGNI
|
|
218
|
+
|
|
219
|
+
**SRP**: 1 reason to change | **OCP**: Extend via interfaces | **LSP**: Subtypes substitutable | **ISP**: < 5 methods/interface | **DIP**: Depend on abstractions
|
|
220
|
+
|
|
221
|
+
**KISS**: < 10 complexity | **DRY**: Extract after 3 occurrences | **YAGNI**: Only what's required
|
|
222
|
+
|
|
223
|
+
## Testing Pyramid
|
|
224
|
+
|
|
225
|
+
Unit 70% (< 1s) | Integration 20% (< 5s) | E2E 10% (< 30s) — **TDD**: RED → GREEN → REFACTOR
|
|
226
|
+
|
|
227
|
+
**Stacks**: xUnit/FluentAssertions (C#), Pest 4 (PHP), Vitest 4 (JS/TS), pytest 8 (Python)
|
|
228
|
+
|
|
229
|
+
## Security Essentials
|
|
230
|
+
|
|
231
|
+
Server-side validation | Parameterized queries | Secrets in vault | CSP/HSTS headers | `[Authorize(Policy)]`
|
|
232
|
+
|
|
233
|
+
## Git Workflow
|
|
234
|
+
|
|
235
|
+
**Conventional Commits**: `<type>(<scope>): <description>` — Types: feat, fix, docs, refactor, perf, test
|
|
236
|
+
**Branches**: `feature/`, `fix/`, `refactor/`
|
|
237
|
+
|
|
238
|
+
## Analysis Workflow (Mandatory)
|
|
239
|
+
|
|
240
|
+
1. Understand request → 2. Read affected files + deps → 3. Document impact/risks → 4. Validate if medium/high impact → 5. TDD first
|
|
241
|
+
|
|
242
|
+
## Technology References
|
|
243
|
+
|
|
244
|
+
| Stack | Path | Key Features |
|
|
245
|
+
|-------|------|--------------|
|
|
246
|
+
| **C# / .NET** | `@.claude/references/csharp/` | Extension Members, Span<T>, Clean Architecture |
|
|
247
|
+
| **Symfony / PHP** | `@.claude/references/symfony/CLAUDE.md` | JSON Streamer, ObjectMapper, DDD |
|
|
248
|
+
| **Flutter / Dart** | `@.claude/references/flutter/CLAUDE.md` | WASM, MCP, BLoC v9, Material 3 |
|
|
249
|
+
|
|
250
|
+
## Base Rules
|
|
251
|
+
|
|
252
|
+
`workflow-analysis.md` | `solid-principles.md` | `kiss-dry-yagni.md` | `git-workflow.md` | `security.md` | `testing.md` | `documentation.md`
|
|
253
|
+
|
|
254
|
+
## Tech-Specific Guides
|
|
255
|
+
|
|
256
|
+
**C#**: architecture, coding-standards, testing, security, tooling, quality-tools, aspire
|
|
257
|
+
**Symfony**: architecture, coding-standards, quality-tools, json-streamer, object-mapper
|
|
258
|
+
**Flutter**: coding-standards, wasm, mcp-integration, web-performance-2026
|
|
259
|
+
|
|
260
|
+
All in `@.claude/references/<tech>/`
|
|
261
|
+
|
|
262
|
+
## QA Recette Essentials
|
|
263
|
+
|
|
264
|
+
**Prerequisites**: Chrome extension v1.0.36+ | Claude Code `--chrome` or `/chrome`
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
/qa:recette --scope=story --id=US-001 # Test story
|
|
268
|
+
/qa:recette --resume=REC-xxx # Resume session
|
|
269
|
+
/qa:fix --session=REC-xxx --severity=critical # Fix critical bugs
|
|
270
|
+
/qa:regression --check # Check Golden Rule
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Golden Rule**: A fixed bug should NEVER reappear → auto-generates regression tests
|
|
274
|
+
|
|
275
|
+
**Output**: `.recette/` (plans, sessions, regression, metrics, reports)
|
|
276
|
+
|
|
277
|
+
## LSP Plugins
|
|
278
|
+
|
|
279
|
+
PHP: `php-lsp` | Python: `pyright-lsp` | TS/JS: `typescript-lsp` | Dart: `dart-analyzer` | C#: `csharp-lsp`
|
|
280
|
+
|
|
281
|
+
Install: `/plugins install <name>@claude-plugins-official`
|
|
282
|
+
|
|
283
|
+
> Full docs: `@.claude/COMPATIBILITY.md` | Technology details: `@.claude/references/<tech>/`
|
|
284
|
+
|
|
285
|
+
## Essential Rules (Condensed)
|
|
286
|
+
|
|
287
|
+
### SOLID Principles
|
|
288
|
+
SRP | OCP | LSP | ISP | DIP — See full rules in .claude/rules/04-solid-principles.md
|
|
289
|
+
|
|
290
|
+
### KISS, DRY, YAGNI
|
|
291
|
+
## KISS — Keep It Simple
|
|
292
|
+
|
|
293
|
+
| Metrique | Cible | Limite |
|
|
294
|
+
|----------|-------|--------|
|
|
295
|
+
| **Cognitive Complexity** (primaire 2026) | < 7 | < 10 |
|
|
296
|
+
| Lignes par methode | < 10 | < 20 |
|
|
297
|
+
| Complexite cyclomatique | < 5 | < 10 |
|
|
298
|
+
| Profondeur d'indentation | 2 | 3 max |
|
|
299
|
+
| Parametres par methode | 3 | 4 max |
|
|
300
|
+
|
|
301
|
+
> **Cognitive Complexity** (SonarQube, ReSharper) est la metrique dominante 2026 : elle mesure la difficulte humaine de comprehension. Elle prevaut sur la stricte limite de 20 lignes. Source : [Cognitive vs Cyclomatic](https://gilles-fabre.medium.com/what-is-the-difference-between-cyclomatic-complexity-and-cognitive-complexity-a87cef0e2851).
|
|
302
|
+
|
|
303
|
+
**Regles :** Early returns (guard clauses), pas de else imbrique, nommage explicite, composition > heritage.
|
|
304
|
+
|
|
305
|
+
## DRY — Don't Repeat Yourself
|
|
306
|
+
|
|
307
|
+
### Testing
|
|
308
|
+
TDD: RED → GREEN → REFACTOR | Coverage >= 80% | Mutation testing
|
|
309
|
+
|
|
310
|
+
### Security
|
|
311
|
+
## OWASP Top 10:2025 — Essentiels
|
|
312
|
+
|
|
313
|
+
| # | Menace | Defense |
|
|
314
|
+
|---|--------|---------|
|
|
315
|
+
| 1 | Broken Access Control (inclut **SSRF** consolide) | Verifier permissions a CHAQUE requete, deny by default |
|
|
316
|
+
| 2 | Cryptographic Failures | TLS 1.3, **Argon2id** (128 MiB RAM, t=3-5, p=1), secrets dans vault |
|
|
317
|
+
| 3 | Injection | Requetes parametrees, validation/sanitization |
|
|
318
|
+
| 4 | Insecure Design | Threat modeling, defense in depth, rate limiting |
|
|
319
|
+
| 5 | Security Misconfiguration | Hardening, erreurs generiques en prod |
|
|
320
|
+
| 6 | **Software Supply Chain Failures** (nouveau 2025) | SLSA 1.0, SBOM (SPDX 3 / CycloneDX), Sigstore keyless signing, reproducible builds |
|
|
321
|
+
| 7 | **Mishandling of Exceptional Conditions** (nouveau 2025) | Logger les erreurs, ne jamais exposer la stack trace en prod |
|
|
322
|
+
|
|
323
|
+
Sources : [OWASP Top 10:2025](https://owasp.org/Top10/2025/), [Supply Chain 2026](https://kawaldeepsingh.medium.com/practical-software-supply-chain-security-2026-sboms-signing-slsa-reproducible-builds-a-0416cfac32dc).
|
|
324
|
+
|
|
325
|
+
## Regles non-negociables
|
|
326
|
+
|
|
327
|
+
### Git Workflow
|
|
328
|
+
Conventional Commits | GitHub Flow | Feature branches < 3 days
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Full Documentation
|
|
334
|
+
|
|
335
|
+
For complete documentation, visit: https://claude-craft.dev
|
|
336
|
+
|
|
337
|
+
For full rules and references:
|
|
338
|
+
- SOLID: .claude/rules/04-solid-principles.md
|
|
339
|
+
- KISS/DRY/YAGNI: .claude/rules/05-kiss-dry-yagni.md
|
|
340
|
+
- Testing: .claude/rules/07-testing.md
|
|
341
|
+
- Security: .claude/rules/11-security.md
|
|
342
|
+
- Git Workflow: .claude/rules/09-git-workflow.md
|
|
343
|
+
- Context Management: .claude/rules/12-context-management.md
|
|
344
|
+
|
|
345
|
+
**Attribution:** The Bearded CTO / Claude Craft
|
|
346
|
+
**License:** MIT
|
|
347
|
+
**Repository:** https://github.com/TheBeardedCTO/claude-craft
|
package/cli/index.js
CHANGED
|
@@ -38,10 +38,8 @@ import { runCheck } from './lib/check.js';
|
|
|
38
38
|
import { runList } from './lib/list.js';
|
|
39
39
|
import { runDoctor } from './lib/doctor.js';
|
|
40
40
|
import { runUpdate } from './lib/update.js';
|
|
41
|
-
import { runKanban } from './lib/kanban.js';
|
|
42
|
-
|
|
43
41
|
// Flattener module
|
|
44
|
-
import { flatten as flattenCodebaseFn } from './flattener.js';
|
|
42
|
+
import { flatten as flattenCodebaseFn } from './lib/flattener.js';
|
|
45
43
|
|
|
46
44
|
// CLI package root
|
|
47
45
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -205,10 +203,12 @@ class ClaudeCraftCLI {
|
|
|
205
203
|
await runRalph(this, args.slice(1), options, ctx);
|
|
206
204
|
break;
|
|
207
205
|
|
|
208
|
-
case 'kanban':
|
|
206
|
+
case 'kanban': {
|
|
209
207
|
printBanner(VERSION);
|
|
208
|
+
const { runKanban } = await import('./lib/kanban.js');
|
|
210
209
|
await runKanban({ targetPath: this.config.targetPath, options });
|
|
211
210
|
break;
|
|
211
|
+
}
|
|
212
212
|
|
|
213
213
|
case 'help':
|
|
214
214
|
case '--help':
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
let sprintLabel = $derived(store.sprint ? `${store.sprint.name} (${store.sprint.sprint_id})` : 'no sprint');
|
|
32
32
|
</script>
|
|
33
33
|
|
|
34
|
+
<a href="#main" class="skip-link">Skip to main content</a>
|
|
35
|
+
|
|
34
36
|
<div class="app-shell">
|
|
35
37
|
<aside class="sidebar" aria-label="Navigation">
|
|
36
38
|
<h1>claude-craft</h1>
|
|
@@ -104,3 +106,30 @@
|
|
|
104
106
|
</div>
|
|
105
107
|
{/each}
|
|
106
108
|
</div>
|
|
109
|
+
|
|
110
|
+
<style>
|
|
111
|
+
.skip-link {
|
|
112
|
+
position: absolute;
|
|
113
|
+
left: -9999px;
|
|
114
|
+
top: auto;
|
|
115
|
+
width: 1px;
|
|
116
|
+
height: 1px;
|
|
117
|
+
overflow: hidden;
|
|
118
|
+
background: var(--accent, #7c3aed);
|
|
119
|
+
color: #fff;
|
|
120
|
+
padding: 8px 16px;
|
|
121
|
+
border-radius: 4px;
|
|
122
|
+
font-size: 14px;
|
|
123
|
+
font-weight: 600;
|
|
124
|
+
text-decoration: none;
|
|
125
|
+
z-index: 9999;
|
|
126
|
+
}
|
|
127
|
+
.skip-link:focus {
|
|
128
|
+
position: absolute;
|
|
129
|
+
left: 8px;
|
|
130
|
+
top: 8px;
|
|
131
|
+
width: auto;
|
|
132
|
+
height: auto;
|
|
133
|
+
overflow: visible;
|
|
134
|
+
}
|
|
135
|
+
</style>
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
/**
|
|
3
|
+
* PromptDialog — accessible replacement for window.prompt().
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* <PromptDialog bind:this={promptDialog} />
|
|
7
|
+
* const value = await promptDialog.prompt('Enter a reason:');
|
|
8
|
+
* // Returns the string entered, or null if cancelled.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
let dialog = $state(null);
|
|
12
|
+
let inputEl = $state(null);
|
|
13
|
+
let message = $state('');
|
|
14
|
+
let inputValue = $state('');
|
|
15
|
+
let resolvePromise = null;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Open the dialog and return a promise that resolves with the entered value
|
|
19
|
+
* (string) or null when the user cancels.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} promptMessage - Label text shown above the input.
|
|
22
|
+
* @returns {Promise<string|null>}
|
|
23
|
+
*/
|
|
24
|
+
export function prompt(promptMessage) {
|
|
25
|
+
message = promptMessage;
|
|
26
|
+
inputValue = '';
|
|
27
|
+
dialog.showModal();
|
|
28
|
+
// Focus the input after the dialog is open (next microtask)
|
|
29
|
+
Promise.resolve().then(() => inputEl?.focus());
|
|
30
|
+
return new Promise((resolve) => {
|
|
31
|
+
resolvePromise = resolve;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function handleClose() {
|
|
36
|
+
const confirmed = dialog.returnValue === 'confirm';
|
|
37
|
+
const value = confirmed && inputValue.trim() ? inputValue : null;
|
|
38
|
+
resolvePromise?.(value);
|
|
39
|
+
resolvePromise = null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function handleKeydown(e) {
|
|
43
|
+
// Allow submitting with Enter from within the input
|
|
44
|
+
if (e.key === 'Enter') {
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
dialog.returnValue = 'confirm';
|
|
47
|
+
dialog.close();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<dialog
|
|
53
|
+
bind:this={dialog}
|
|
54
|
+
aria-labelledby="prompt-dialog-title"
|
|
55
|
+
aria-modal="true"
|
|
56
|
+
onclose={handleClose}
|
|
57
|
+
>
|
|
58
|
+
<form method="dialog">
|
|
59
|
+
<h2 id="prompt-dialog-title" class="dialog-title">{message}</h2>
|
|
60
|
+
<input
|
|
61
|
+
bind:this={inputEl}
|
|
62
|
+
bind:value={inputValue}
|
|
63
|
+
type="text"
|
|
64
|
+
class="dialog-input"
|
|
65
|
+
aria-label={message}
|
|
66
|
+
onkeydown={handleKeydown}
|
|
67
|
+
/>
|
|
68
|
+
<div class="dialog-actions">
|
|
69
|
+
<button type="submit" value="cancel" class="btn-cancel">Cancel</button>
|
|
70
|
+
<button
|
|
71
|
+
type="button"
|
|
72
|
+
class="btn-confirm"
|
|
73
|
+
onclick={() => {
|
|
74
|
+
dialog.returnValue = 'confirm';
|
|
75
|
+
dialog.close();
|
|
76
|
+
}}
|
|
77
|
+
>OK</button>
|
|
78
|
+
</div>
|
|
79
|
+
</form>
|
|
80
|
+
</dialog>
|
|
81
|
+
|
|
82
|
+
<style>
|
|
83
|
+
dialog {
|
|
84
|
+
background: var(--bg-elev);
|
|
85
|
+
border: 1px solid var(--border);
|
|
86
|
+
border-radius: var(--radius);
|
|
87
|
+
padding: 24px;
|
|
88
|
+
min-width: 320px;
|
|
89
|
+
color: var(--fg);
|
|
90
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
dialog::backdrop {
|
|
94
|
+
background: rgba(0, 0, 0, 0.6);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.dialog-title {
|
|
98
|
+
margin: 0 0 14px;
|
|
99
|
+
font-size: 16px;
|
|
100
|
+
font-weight: 600;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.dialog-input {
|
|
104
|
+
display: block;
|
|
105
|
+
width: 100%;
|
|
106
|
+
box-sizing: border-box;
|
|
107
|
+
background: var(--bg-sidebar);
|
|
108
|
+
border: 1px solid var(--border);
|
|
109
|
+
border-radius: var(--radius);
|
|
110
|
+
color: var(--fg);
|
|
111
|
+
padding: 8px 10px;
|
|
112
|
+
font-size: 14px;
|
|
113
|
+
margin-bottom: 16px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.dialog-input:focus {
|
|
117
|
+
outline: 2px solid var(--accent);
|
|
118
|
+
outline-offset: 1px;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.dialog-actions {
|
|
122
|
+
display: flex;
|
|
123
|
+
justify-content: flex-end;
|
|
124
|
+
gap: 8px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.btn-cancel,
|
|
128
|
+
.btn-confirm {
|
|
129
|
+
padding: 8px 16px;
|
|
130
|
+
border-radius: var(--radius);
|
|
131
|
+
font-size: 14px;
|
|
132
|
+
cursor: pointer;
|
|
133
|
+
border: 1px solid var(--border);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.btn-cancel {
|
|
137
|
+
background: var(--bg-sidebar);
|
|
138
|
+
color: var(--fg-dim);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.btn-cancel:hover,
|
|
142
|
+
.btn-cancel:focus {
|
|
143
|
+
background: var(--border);
|
|
144
|
+
outline: 2px solid var(--accent);
|
|
145
|
+
outline-offset: 1px;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.btn-confirm {
|
|
149
|
+
background: var(--accent);
|
|
150
|
+
color: var(--accent-fg);
|
|
151
|
+
border-color: var(--accent);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.btn-confirm:hover,
|
|
155
|
+
.btn-confirm:focus {
|
|
156
|
+
opacity: 0.9;
|
|
157
|
+
outline: 2px solid var(--accent);
|
|
158
|
+
outline-offset: 1px;
|
|
159
|
+
}
|
|
160
|
+
</style>
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import { store, patchStatus } from '../lib/store.svelte.js';
|
|
3
3
|
import { onMount } from 'svelte';
|
|
4
|
+
import PromptDialog from '../components/PromptDialog.svelte';
|
|
5
|
+
|
|
6
|
+
let promptDialog = $state(null);
|
|
4
7
|
|
|
5
8
|
const COLUMNS = [
|
|
6
9
|
{ key: 'backlog', label: 'Backlog' },
|
|
@@ -54,7 +57,7 @@
|
|
|
54
57
|
if (!story || story.status === targetStatus) return;
|
|
55
58
|
const body = { status: targetStatus };
|
|
56
59
|
if (targetStatus === 'blocked') {
|
|
57
|
-
const reason =
|
|
60
|
+
const reason = await promptDialog.prompt('Blocked reason?');
|
|
58
61
|
if (!reason) return;
|
|
59
62
|
body.blocked_reason = reason;
|
|
60
63
|
}
|
|
@@ -154,7 +157,7 @@
|
|
|
154
157
|
async function moveCard(card, targetStatus) {
|
|
155
158
|
const body = { status: targetStatus };
|
|
156
159
|
if (targetStatus === 'blocked') {
|
|
157
|
-
const reason =
|
|
160
|
+
const reason = await promptDialog.prompt('Blocked reason?');
|
|
158
161
|
if (!reason) {
|
|
159
162
|
showMoveMenu = false;
|
|
160
163
|
return;
|
|
@@ -239,6 +242,8 @@
|
|
|
239
242
|
{/each}
|
|
240
243
|
</div>
|
|
241
244
|
|
|
245
|
+
<PromptDialog bind:this={promptDialog} />
|
|
246
|
+
|
|
242
247
|
<!-- Accessibility: keyboard help & live region -->
|
|
243
248
|
<div id="keyboard-help" class="sr-only">
|
|
244
249
|
Use arrow keys to navigate. Alt+M to open move menu. Numbers 1-6 to move to column. Escape to close menu. Enter for details.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the-bearded-bear/claude-craft",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.5.0-next.b249d60",
|
|
4
4
|
"description": "A comprehensive framework for AI-assisted development with Claude Code. Install standardized rules, agents, and commands for your projects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "cli/index.js",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"vale:sync": "vale sync",
|
|
31
31
|
"commitlint": "commitlint --edit",
|
|
32
32
|
"prepublishOnly": "node -e \"import{readFileSync}from'node:fs';const p=JSON.parse(readFileSync('./package.json','utf8'));if(!/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/i.test(p.version)){console.error('Invalid version format');process.exit(1)}\"",
|
|
33
|
+
"metrics:adoption": "node scripts/track-adoption-metrics.mjs",
|
|
33
34
|
"mutation": "stryker run",
|
|
34
35
|
"mutation:ci": "stryker run --reporters progress,json",
|
|
35
36
|
"test:e2e:tools": "cd tests/e2e/tools && docker compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from e2e-runner"
|