@the-bearded-bear/claude-craft 8.22.0 → 8.23.0-next.73f6ae0
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/i18n/base/Angular/rules/00-project-context.md.template +1 -1
- package/Dev/i18n/base/CSharp/rules/06-tooling.md +0 -2
- package/Dev/i18n/base/CSharp/rules/11-security-csharp.md +184 -160
- package/Dev/i18n/base/Common/commands/aliases.md +3 -0
- package/Dev/i18n/base/Common/commands/audit-claude-alignment.md +201 -0
- package/Dev/i18n/base/Common/commands/init.md +1 -1
- package/Dev/i18n/base/Common/commands/search.md +2 -1
- package/Dev/i18n/base/Common/skills/dynamic-workflows/SKILL.md +1 -1
- package/Dev/i18n/base/Common/skills/ecosystem-tools/SKILL.md +2 -1
- package/Dev/i18n/base/Laravel/rules/06-tooling.md +0 -2
- package/Dev/i18n/base/PHP/checklists/new-feature.md +1 -1
- package/Dev/i18n/base/PHP/commands/check-code-quality.md +3 -3
- package/Dev/i18n/base/Vercel/checklists/pre-commit.md +1 -1
- package/Dev/i18n/base/Vercel/commands/check-security.md +12 -12
- package/Dev/i18n/base/Vercel/rules/00-project-context.md.template +1 -1
- package/Dev/i18n/base/Vercel/rules/02-architecture-vercel.md +2 -2
- package/Dev/i18n/base/Vercel/rules/03-coding-standards.md +1 -1
- package/Dev/i18n/base/Vercel/rules/06-tooling.md +12 -0
- package/Dev/i18n/base/Vercel/rules/07-testing-vercel.md +1 -1
- package/Dev/i18n/base/Vercel/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/base/Vercel/rules/11-security-vercel.md +1 -1
- package/Dev/i18n/base/Vercel/templates/function-handler.template.ts +1 -1
- package/Dev/i18n/base/Vite/checklists/new-feature.md +2 -2
- package/Dev/i18n/base/Vite/checklists/pre-commit.md +2 -2
- package/Dev/i18n/base/Vite/commands/check-architecture.md +5 -5
- package/Dev/i18n/base/Vite/commands/check-library-build.md +3 -3
- package/Dev/i18n/base/Vite/commands/scaffold-project.md +2 -2
- package/Dev/i18n/base/Vite/rules/02-architecture-vite.md +5 -5
- package/Dev/i18n/base/Vite/rules/03-coding-standards.md +1 -1
- package/Dev/i18n/base/Vite/rules/06-tooling.md +2 -2
- package/Dev/i18n/base/Vite/rules/07-testing-vite.md +1 -1
- package/Dev/i18n/base/Vite/rules/11-security-vite.md +4 -4
- package/Dev/i18n/base/Vite/templates/library-entry.template.ts +2 -2
- package/Dev/i18n/base/Vite/templates/vite.config.template.ts +2 -2
- package/Dev/i18n/base/VueJS/rules/06-tooling.md +3 -2
- package/Dev/i18n/de/Angular/agents/angular-reviewer.md +3 -3
- package/Dev/i18n/de/Common/agents/devops-engineer.md +15 -1
- package/Dev/i18n/de/Common/agents/ralph-conductor.md +12 -1
- package/Dev/i18n/de/Common/agents/refactoring-specialist.md +9 -0
- package/Dev/i18n/de/Common/agents/security-auditor.md +10 -7
- package/Dev/i18n/de/Common/agents/tdd-coach.md +9 -0
- package/Dev/i18n/de/Common/agents/uiux-orchestrator.md +10 -1
- package/Dev/i18n/de/Common/commands/getting-started.md +2 -2
- package/Dev/i18n/de/Common/commands/setup-rtk.md +2 -2
- package/Dev/i18n/de/Common/rules/04-solid-principles.md +1 -1
- package/Dev/i18n/de/Common/rules/05-kiss-dry-yagni.md +5 -2
- package/Dev/i18n/de/Common/rules/10-documentation.md +1 -1
- package/Dev/i18n/de/Common/rules/11-security.md +76 -73
- package/Dev/i18n/de/Common/rules/12-context-management.md +29 -19
- package/Dev/i18n/de/Common/templates/settings.json.template +6 -6
- package/Dev/i18n/de/Flutter/agents/flutter-reviewer.md +4 -4
- package/Dev/i18n/de/Flutter/rules/06-tooling.md +30 -24
- package/Dev/i18n/de/Flutter/rules/07-testing-flutter.md +0 -0
- package/Dev/i18n/de/Flutter/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/de/Flutter/rules/12-performance.md +17 -17
- package/Dev/i18n/de/Flutter/rules/13-state-management.md +0 -0
- package/Dev/i18n/de/PHP/agents/php-reviewer.md +6 -6
- package/Dev/i18n/de/PHP/commands/check-compliance.md +3 -3
- package/Dev/i18n/de/PHP/rules/03-coding-standards.md +4 -2
- package/Dev/i18n/de/PHP/rules/06-tooling.md +4 -7
- package/Dev/i18n/de/PHP/rules/08-quality-tools.md +2 -2
- package/Dev/i18n/de/Paperclip/CLAUDE.md.template +2 -2
- package/Dev/i18n/de/Paperclip/README.md +1 -1
- package/Dev/i18n/de/Paperclip/commands/setup-company.md +1 -1
- package/Dev/i18n/de/Paperclip/rules/06-tooling.md +3 -3
- package/Dev/i18n/de/Paperclip/rules/11-security-paperclip.md +9 -0
- package/Dev/i18n/de/Paperclip/skills/coding-standards-ts/SKILL.md +1 -1
- package/Dev/i18n/de/Python/commands/generate-model.md +3 -1
- package/Dev/i18n/de/Python/rules/06-tooling.md +1 -1
- package/Dev/i18n/de/Python/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/de/Python/rules/11-security-python.md +2 -2
- package/Dev/i18n/de/React/agents/react-reviewer.md +9 -5
- package/Dev/i18n/de/React/rules/06-tooling.md +0 -2
- package/Dev/i18n/de/React/rules/11-security-react.md +9 -0
- package/Dev/i18n/de/ReactNative/agents/reactnative-reviewer.md +4 -4
- package/Dev/i18n/de/ReactNative/rules/06-tooling.md +19 -3
- package/Dev/i18n/de/Symfony/agents/symfony-reviewer.md +5 -5
- package/Dev/i18n/de/Symfony/checklists/README.md +1 -1
- package/Dev/i18n/de/Symfony/checklists/new-feature.md +2 -2
- package/Dev/i18n/de/Symfony/checklists/pre-commit.md +4 -4
- package/Dev/i18n/de/Symfony/checklists/refactoring.md +1 -1
- package/Dev/i18n/de/Symfony/commands/check-architecture.md +4 -4
- package/Dev/i18n/de/Symfony/commands/check-code-quality.md +15 -15
- package/Dev/i18n/de/Symfony/commands/check-security.md +32 -32
- package/Dev/i18n/de/Symfony/commands/check-testing.md +16 -16
- package/Dev/i18n/de/Symfony/rules/03-coding-standards.md +4 -4
- package/Dev/i18n/de/Symfony/rules/06-docker-hadolint.md +0 -4
- package/Dev/i18n/de/Symfony/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/de/Symfony/rules/16-i18n.md +2 -0
- package/Dev/i18n/de/Symfony/rules/17-async.md +1 -0
- package/Dev/i18n/de/Symfony/rules/19-aggregates.md +1 -0
- package/Dev/i18n/de/Symfony/rules/20-domain-events.md +1 -0
- package/Dev/i18n/de/Team/commands/delivery.md +1 -1
- package/Dev/i18n/de/Vercel/CLAUDE.md.template +2 -2
- package/Dev/i18n/de/Vercel/agents/vercel-reviewer.md +8 -8
- package/Dev/i18n/de/Vite/CLAUDE.md.template +2 -2
- package/Dev/i18n/de/Vite/agents/vite-reviewer.md +19 -17
- package/Dev/i18n/de/Vite/commands/check-compliance.md +2 -2
- package/Dev/i18n/en/Angular/agents/angular-reviewer.md +3 -3
- package/Dev/i18n/en/Common/agents/devops-engineer.md +15 -1
- package/Dev/i18n/en/Common/agents/ralph-conductor.md +11 -0
- package/Dev/i18n/en/Common/agents/refactoring-specialist.md +9 -0
- package/Dev/i18n/en/Common/agents/security-auditor.md +10 -7
- package/Dev/i18n/en/Common/agents/tdd-coach.md +9 -0
- package/Dev/i18n/en/Common/agents/uiux-orchestrator.md +10 -1
- package/Dev/i18n/en/Common/commands/getting-started.md +2 -2
- package/Dev/i18n/en/Common/commands/setup-rtk.md +2 -2
- package/Dev/i18n/en/Common/rules/04-solid-principles.md +1 -1
- package/Dev/i18n/en/Common/rules/05-kiss-dry-yagni.md +5 -2
- package/Dev/i18n/en/Common/rules/10-documentation.md +1 -1
- package/Dev/i18n/en/Common/rules/11-security.md +76 -73
- package/Dev/i18n/en/Common/rules/12-context-management.md +31 -21
- package/Dev/i18n/en/Common/templates/settings.json.template +6 -6
- package/Dev/i18n/en/Flutter/agents/flutter-reviewer.md +4 -4
- package/Dev/i18n/en/Flutter/rules/06-tooling.md +29 -23
- package/Dev/i18n/en/Flutter/rules/07-testing-flutter.md +0 -0
- package/Dev/i18n/en/Flutter/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/en/Flutter/rules/12-performance.md +17 -17
- package/Dev/i18n/en/Flutter/rules/13-state-management.md +0 -0
- package/Dev/i18n/en/PHP/CLAUDE.md.template +1 -1
- package/Dev/i18n/en/PHP/agents/php-reviewer.md +6 -6
- package/Dev/i18n/en/PHP/commands/check-compliance.md +1 -1
- package/Dev/i18n/en/PHP/rules/03-coding-standards.md +4 -2
- package/Dev/i18n/en/PHP/rules/06-tooling.md +4 -7
- package/Dev/i18n/en/PHP/rules/08-quality-tools.md +2 -2
- package/Dev/i18n/en/Paperclip/CLAUDE.md.template +2 -2
- package/Dev/i18n/en/Paperclip/README.md +1 -1
- package/Dev/i18n/en/Paperclip/commands/setup-company.md +1 -1
- package/Dev/i18n/en/Paperclip/rules/06-tooling.md +3 -3
- package/Dev/i18n/en/Paperclip/rules/11-security-paperclip.md +9 -0
- package/Dev/i18n/en/Paperclip/skills/coding-standards-ts/SKILL.md +1 -1
- package/Dev/i18n/en/Python/commands/generate-model.md +3 -1
- package/Dev/i18n/en/Python/rules/06-tooling.md +1 -1
- package/Dev/i18n/en/Python/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/en/Python/rules/11-security-python.md +11 -11
- package/Dev/i18n/en/React/agents/react-reviewer.md +9 -5
- package/Dev/i18n/en/React/rules/06-tooling.md +0 -2
- package/Dev/i18n/en/React/rules/11-security-react.md +9 -0
- package/Dev/i18n/en/ReactNative/agents/reactnative-reviewer.md +4 -4
- package/Dev/i18n/en/ReactNative/rules/02-architecture.md +1 -1
- package/Dev/i18n/en/ReactNative/rules/06-tooling.md +19 -3
- package/Dev/i18n/en/Symfony/agents/symfony-reviewer.md +5 -5
- package/Dev/i18n/en/Symfony/checklists/README.md +1 -1
- package/Dev/i18n/en/Symfony/checklists/new-feature.md +2 -2
- package/Dev/i18n/en/Symfony/checklists/pre-commit.md +4 -4
- package/Dev/i18n/en/Symfony/checklists/refactoring.md +1 -1
- package/Dev/i18n/en/Symfony/commands/check-architecture.md +4 -4
- package/Dev/i18n/en/Symfony/commands/check-code-quality.md +15 -15
- package/Dev/i18n/en/Symfony/commands/check-security.md +32 -32
- package/Dev/i18n/en/Symfony/commands/check-testing.md +16 -16
- package/Dev/i18n/en/Symfony/rules/03-coding-standards.md +4 -4
- package/Dev/i18n/en/Symfony/rules/06-docker-hadolint.md +0 -4
- package/Dev/i18n/en/Symfony/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/en/Symfony/rules/16-i18n.md +2 -0
- package/Dev/i18n/en/Symfony/rules/17-async.md +1 -0
- package/Dev/i18n/en/Symfony/rules/19-aggregates.md +1 -0
- package/Dev/i18n/en/Symfony/rules/20-domain-events.md +1 -0
- package/Dev/i18n/en/Team/commands/delivery.md +1 -1
- package/Dev/i18n/en/Vercel/CLAUDE.md.template +2 -2
- package/Dev/i18n/en/Vercel/agents/vercel-reviewer.md +8 -8
- package/Dev/i18n/en/Vite/CLAUDE.md.template +2 -2
- package/Dev/i18n/en/Vite/agents/vite-reviewer.md +19 -17
- package/Dev/i18n/en/Vite/commands/check-compliance.md +2 -2
- package/Dev/i18n/en/Workflow/commands/review.md +0 -0
- package/Dev/i18n/en/Workflow/commands/start.md +0 -0
- package/Dev/i18n/es/Angular/agents/angular-reviewer.md +3 -3
- package/Dev/i18n/es/Common/agents/devops-engineer.md +15 -1
- package/Dev/i18n/es/Common/agents/ralph-conductor.md +11 -0
- package/Dev/i18n/es/Common/agents/refactoring-specialist.md +9 -0
- package/Dev/i18n/es/Common/agents/security-auditor.md +10 -7
- package/Dev/i18n/es/Common/agents/tdd-coach.md +9 -0
- package/Dev/i18n/es/Common/agents/uiux-orchestrator.md +10 -1
- package/Dev/i18n/es/Common/commands/getting-started.md +2 -2
- package/Dev/i18n/es/Common/commands/setup-rtk.md +2 -2
- package/Dev/i18n/es/Common/rules/04-solid-principles.md +1 -1
- package/Dev/i18n/es/Common/rules/05-kiss-dry-yagni.md +5 -2
- package/Dev/i18n/es/Common/rules/10-documentation.md +1 -1
- package/Dev/i18n/es/Common/rules/11-security.md +76 -73
- package/Dev/i18n/es/Common/rules/12-context-management.md +29 -19
- package/Dev/i18n/es/Common/templates/settings.json.template +6 -6
- package/Dev/i18n/es/Flutter/agents/flutter-reviewer.md +4 -4
- package/Dev/i18n/es/Flutter/rules/06-tooling.md +31 -25
- package/Dev/i18n/es/Flutter/rules/07-testing-flutter.md +0 -0
- package/Dev/i18n/es/Flutter/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/es/Flutter/rules/12-performance.md +17 -17
- package/Dev/i18n/es/Flutter/rules/13-state-management.md +0 -0
- package/Dev/i18n/es/PHP/agents/php-reviewer.md +6 -6
- package/Dev/i18n/es/PHP/commands/check-compliance.md +3 -3
- package/Dev/i18n/es/PHP/rules/03-coding-standards.md +4 -2
- package/Dev/i18n/es/PHP/rules/06-tooling.md +4 -7
- package/Dev/i18n/es/PHP/rules/08-quality-tools.md +2 -2
- package/Dev/i18n/es/Paperclip/CLAUDE.md.template +2 -2
- package/Dev/i18n/es/Paperclip/README.md +1 -1
- package/Dev/i18n/es/Paperclip/commands/setup-company.md +1 -1
- package/Dev/i18n/es/Paperclip/rules/06-tooling.md +3 -3
- package/Dev/i18n/es/Paperclip/rules/11-security-paperclip.md +9 -0
- package/Dev/i18n/es/Paperclip/skills/coding-standards-ts/SKILL.md +1 -1
- package/Dev/i18n/es/Python/commands/generate-model.md +3 -1
- package/Dev/i18n/es/Python/rules/06-tooling.md +1 -1
- package/Dev/i18n/es/Python/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/es/Python/rules/11-security-python.md +2 -2
- package/Dev/i18n/es/React/agents/react-reviewer.md +9 -5
- package/Dev/i18n/es/React/rules/06-tooling.md +0 -2
- package/Dev/i18n/es/React/rules/11-security-react.md +9 -0
- package/Dev/i18n/es/ReactNative/agents/reactnative-reviewer.md +4 -4
- package/Dev/i18n/es/ReactNative/rules/06-tooling.md +19 -3
- package/Dev/i18n/es/Symfony/agents/symfony-reviewer.md +5 -5
- package/Dev/i18n/es/Symfony/checklists/README.md +1 -1
- package/Dev/i18n/es/Symfony/checklists/new-feature.md +2 -2
- package/Dev/i18n/es/Symfony/checklists/pre-commit.md +4 -4
- package/Dev/i18n/es/Symfony/checklists/refactoring.md +1 -1
- package/Dev/i18n/es/Symfony/commands/check-architecture.md +4 -4
- package/Dev/i18n/es/Symfony/commands/check-code-quality.md +15 -15
- package/Dev/i18n/es/Symfony/commands/check-security.md +32 -32
- package/Dev/i18n/es/Symfony/commands/check-testing.md +16 -16
- package/Dev/i18n/es/Symfony/rules/03-coding-standards.md +4 -4
- package/Dev/i18n/es/Symfony/rules/06-docker-hadolint.md +0 -4
- package/Dev/i18n/es/Symfony/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/es/Symfony/rules/16-i18n.md +2 -0
- package/Dev/i18n/es/Symfony/rules/17-async.md +1 -0
- package/Dev/i18n/es/Symfony/rules/19-aggregates.md +1 -0
- package/Dev/i18n/es/Symfony/rules/20-domain-events.md +1 -0
- package/Dev/i18n/es/Team/commands/delivery.md +1 -1
- package/Dev/i18n/es/Vercel/CLAUDE.md.template +2 -2
- package/Dev/i18n/es/Vercel/agents/vercel-reviewer.md +7 -7
- package/Dev/i18n/es/Vite/CLAUDE.md.template +2 -2
- package/Dev/i18n/es/Vite/agents/vite-reviewer.md +19 -17
- package/Dev/i18n/es/Vite/commands/check-compliance.md +2 -2
- package/Dev/i18n/fr/Angular/agents/angular-reviewer.md +3 -3
- package/Dev/i18n/fr/Common/agents/devops-engineer.md +15 -1
- package/Dev/i18n/fr/Common/agents/ralph-conductor.md +12 -1
- package/Dev/i18n/fr/Common/agents/refactoring-specialist.md +9 -0
- package/Dev/i18n/fr/Common/agents/security-auditor.md +10 -7
- package/Dev/i18n/fr/Common/agents/tdd-coach.md +9 -0
- package/Dev/i18n/fr/Common/agents/uiux-orchestrator.md +10 -1
- package/Dev/i18n/fr/Common/commands/getting-started.md +2 -2
- package/Dev/i18n/fr/Common/commands/setup-rtk.md +2 -2
- package/Dev/i18n/fr/Common/rules/04-solid-principles.md +1 -1
- package/Dev/i18n/fr/Common/rules/05-kiss-dry-yagni.md +5 -2
- package/Dev/i18n/fr/Common/rules/10-documentation.md +1 -1
- package/Dev/i18n/fr/Common/rules/11-security.md +76 -73
- package/Dev/i18n/fr/Common/rules/12-context-management.md +30 -20
- package/Dev/i18n/fr/Common/templates/settings.json.template +6 -6
- package/Dev/i18n/fr/Flutter/agents/flutter-reviewer.md +4 -4
- package/Dev/i18n/fr/Flutter/rules/06-tooling.md +10 -4
- package/Dev/i18n/fr/Flutter/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/fr/PHP/agents/php-reviewer.md +6 -6
- package/Dev/i18n/fr/PHP/commands/check-compliance.md +3 -3
- package/Dev/i18n/fr/PHP/rules/03-coding-standards.md +4 -2
- package/Dev/i18n/fr/PHP/rules/06-tooling.md +4 -7
- package/Dev/i18n/fr/PHP/rules/08-quality-tools.md +2 -2
- package/Dev/i18n/fr/Paperclip/CLAUDE.md.template +2 -2
- package/Dev/i18n/fr/Paperclip/README.md +1 -1
- package/Dev/i18n/fr/Paperclip/commands/setup-company.md +1 -1
- package/Dev/i18n/fr/Paperclip/rules/06-tooling.md +3 -3
- package/Dev/i18n/fr/Paperclip/rules/11-security-paperclip.md +9 -0
- package/Dev/i18n/fr/Paperclip/skills/coding-standards-ts/SKILL.md +1 -1
- package/Dev/i18n/fr/Python/commands/generate-model.md +3 -1
- package/Dev/i18n/fr/Python/rules/06-tooling.md +1 -3
- package/Dev/i18n/fr/Python/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/fr/Python/rules/11-security-python.md +2 -2
- package/Dev/i18n/fr/React/agents/react-reviewer.md +9 -5
- package/Dev/i18n/fr/React/rules/06-tooling.md +0 -2
- package/Dev/i18n/fr/React/rules/11-security-react.md +9 -0
- package/Dev/i18n/fr/ReactNative/agents/reactnative-reviewer.md +4 -4
- package/Dev/i18n/fr/ReactNative/rules/06-tooling.md +19 -3
- package/Dev/i18n/fr/Symfony/agents/symfony-reviewer.md +5 -5
- package/Dev/i18n/fr/Symfony/checklists/README.md +1 -1
- package/Dev/i18n/fr/Symfony/checklists/new-feature.md +2 -2
- package/Dev/i18n/fr/Symfony/checklists/pre-commit.md +4 -4
- package/Dev/i18n/fr/Symfony/checklists/refactoring.md +1 -1
- package/Dev/i18n/fr/Symfony/commands/check-architecture.md +4 -4
- package/Dev/i18n/fr/Symfony/commands/check-code-quality.md +15 -15
- package/Dev/i18n/fr/Symfony/commands/check-security.md +32 -32
- package/Dev/i18n/fr/Symfony/commands/check-testing.md +16 -16
- package/Dev/i18n/fr/Symfony/rules/03-coding-standards.md +4 -4
- package/Dev/i18n/fr/Symfony/rules/06-docker-hadolint.md +0 -4
- package/Dev/i18n/fr/Symfony/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/fr/Symfony/rules/16-i18n.md +2 -0
- package/Dev/i18n/fr/Symfony/rules/17-async.md +1 -0
- package/Dev/i18n/fr/Symfony/rules/19-aggregates.md +1 -0
- package/Dev/i18n/fr/Symfony/rules/20-domain-events.md +1 -0
- package/Dev/i18n/fr/Team/commands/delivery.md +1 -1
- package/Dev/i18n/fr/Vercel/CLAUDE.md.template +2 -2
- package/Dev/i18n/fr/Vercel/agents/vercel-reviewer.md +8 -8
- package/Dev/i18n/fr/Vite/CLAUDE.md.template +2 -2
- package/Dev/i18n/fr/Vite/agents/vite-reviewer.md +19 -17
- package/Dev/i18n/fr/Vite/commands/check-compliance.md +2 -2
- package/Dev/i18n/pt/Angular/agents/angular-reviewer.md +3 -3
- package/Dev/i18n/pt/Common/agents/devops-engineer.md +15 -1
- package/Dev/i18n/pt/Common/agents/ralph-conductor.md +11 -0
- package/Dev/i18n/pt/Common/agents/refactoring-specialist.md +9 -0
- package/Dev/i18n/pt/Common/agents/security-auditor.md +10 -7
- package/Dev/i18n/pt/Common/agents/tdd-coach.md +9 -0
- package/Dev/i18n/pt/Common/agents/uiux-orchestrator.md +10 -1
- package/Dev/i18n/pt/Common/commands/getting-started.md +2 -2
- package/Dev/i18n/pt/Common/commands/setup-rtk.md +2 -2
- package/Dev/i18n/pt/Common/rules/04-solid-principles.md +1 -1
- package/Dev/i18n/pt/Common/rules/05-kiss-dry-yagni.md +5 -2
- package/Dev/i18n/pt/Common/rules/10-documentation.md +1 -1
- package/Dev/i18n/pt/Common/rules/11-security.md +76 -73
- package/Dev/i18n/pt/Common/rules/12-context-management.md +29 -19
- package/Dev/i18n/pt/Common/templates/settings.json.template +6 -6
- package/Dev/i18n/pt/Flutter/agents/flutter-reviewer.md +4 -4
- package/Dev/i18n/pt/Flutter/rules/06-tooling.md +12 -6
- package/Dev/i18n/pt/Flutter/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/pt/PHP/agents/php-reviewer.md +6 -6
- package/Dev/i18n/pt/PHP/commands/check-compliance.md +3 -3
- package/Dev/i18n/pt/PHP/rules/03-coding-standards.md +4 -2
- package/Dev/i18n/pt/PHP/rules/06-tooling.md +4 -7
- package/Dev/i18n/pt/PHP/rules/08-quality-tools.md +2 -2
- package/Dev/i18n/pt/Paperclip/CLAUDE.md.template +2 -2
- package/Dev/i18n/pt/Paperclip/README.md +1 -1
- package/Dev/i18n/pt/Paperclip/commands/setup-company.md +1 -1
- package/Dev/i18n/pt/Paperclip/rules/06-tooling.md +3 -3
- package/Dev/i18n/pt/Paperclip/rules/11-security-paperclip.md +9 -0
- package/Dev/i18n/pt/Paperclip/skills/coding-standards-ts/SKILL.md +1 -1
- package/Dev/i18n/pt/Python/commands/generate-model.md +3 -1
- package/Dev/i18n/pt/Python/rules/06-tooling.md +1 -1
- package/Dev/i18n/pt/Python/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/pt/Python/rules/11-security-python.md +2 -2
- package/Dev/i18n/pt/React/agents/react-reviewer.md +9 -5
- package/Dev/i18n/pt/React/rules/06-tooling.md +0 -2
- package/Dev/i18n/pt/React/rules/11-security-react.md +9 -0
- package/Dev/i18n/pt/ReactNative/agents/reactnative-reviewer.md +4 -4
- package/Dev/i18n/pt/ReactNative/rules/06-tooling.md +19 -3
- package/Dev/i18n/pt/Symfony/agents/symfony-reviewer.md +5 -5
- package/Dev/i18n/pt/Symfony/checklists/README.md +1 -1
- package/Dev/i18n/pt/Symfony/checklists/new-feature.md +2 -2
- package/Dev/i18n/pt/Symfony/checklists/pre-commit.md +4 -4
- package/Dev/i18n/pt/Symfony/checklists/refactoring.md +1 -1
- package/Dev/i18n/pt/Symfony/commands/check-architecture.md +4 -4
- package/Dev/i18n/pt/Symfony/commands/check-code-quality.md +15 -15
- package/Dev/i18n/pt/Symfony/commands/check-security.md +32 -32
- package/Dev/i18n/pt/Symfony/commands/check-testing.md +16 -16
- package/Dev/i18n/pt/Symfony/rules/03-coding-standards.md +4 -4
- package/Dev/i18n/pt/Symfony/rules/06-docker-hadolint.md +0 -4
- package/Dev/i18n/pt/Symfony/rules/08-quality-tools.md +1 -1
- package/Dev/i18n/pt/Symfony/rules/16-i18n.md +2 -0
- package/Dev/i18n/pt/Symfony/rules/17-async.md +1 -0
- package/Dev/i18n/pt/Symfony/rules/19-aggregates.md +1 -0
- package/Dev/i18n/pt/Symfony/rules/20-domain-events.md +1 -0
- package/Dev/i18n/pt/Team/commands/delivery.md +1 -1
- package/Dev/i18n/pt/Vercel/CLAUDE.md.template +2 -2
- package/Dev/i18n/pt/Vercel/agents/vercel-reviewer.md +8 -8
- package/Dev/i18n/pt/Vite/CLAUDE.md.template +2 -2
- package/Dev/i18n/pt/Vite/agents/vite-reviewer.md +19 -17
- package/Dev/i18n/pt/Vite/commands/check-compliance.md +2 -2
- package/Dev/scripts/install-paperclip-rules.sh +5 -5
- package/Dev/scripts/install-vite-rules.sh +4 -4
- package/Infra/i18n/de/Ansible/agents/ansible-architect.md +2 -0
- package/Infra/i18n/de/Docker/commands/docker-architecture.md +0 -2
- package/Infra/i18n/de/Docker/commands/docker-compose-setup.md +0 -2
- package/Infra/i18n/de/FrankenPHP/agents/frankenphp-architect.md +4 -1
- package/Infra/i18n/de/FrankenPHP/agents/frankenphp-deployment.md +2 -2
- package/Infra/i18n/de/FrankenPHP/agents/frankenphp-security.md +1 -1
- package/Infra/i18n/de/FrankenPHP/commands/deploy-setup.md +1 -1
- package/Infra/i18n/de/Hcloud/agents/hcloud-architect.md +14 -4
- package/Infra/i18n/de/Hcloud/agents/hcloud-cost.md +1 -1
- package/Infra/i18n/de/Hcloud/agents/hcloud-debug.md +1 -1
- package/Infra/i18n/de/Hcloud/agents/hcloud-deployment.md +2 -2
- package/Infra/i18n/de/Hcloud/agents/hcloud-security.md +1 -1
- package/Infra/i18n/de/Hcloud/commands/architecture.md +3 -3
- package/Infra/i18n/de/Hcloud/commands/debug.md +1 -1
- package/Infra/i18n/de/Kubernetes/agents/kubernetes-architect.md +3 -3
- package/Infra/i18n/de/Kubernetes/commands/architecture.md +1 -1
- package/Infra/i18n/de/OpenTofu/agents/opentofu-architect.md +1 -1
- package/Infra/i18n/de/OpenTofu/agents/opentofu-deployment.md +2 -2
- package/Infra/i18n/de/PgBouncer/agents/pgbouncer-architect.md +11 -2
- package/Infra/i18n/de/PgBouncer/agents/pgbouncer-debug.md +1 -0
- package/Infra/i18n/de/PgBouncer/agents/pgbouncer-deployment.md +38 -30
- package/Infra/i18n/de/PgBouncer/commands/deploy-setup.md +1 -1
- package/Infra/i18n/en/Ansible/agents/ansible-architect.md +2 -0
- package/Infra/i18n/en/Docker/commands/docker-architecture.md +0 -2
- package/Infra/i18n/en/Docker/commands/docker-compose-setup.md +0 -2
- package/Infra/i18n/en/FrankenPHP/agents/frankenphp-architect.md +4 -1
- package/Infra/i18n/en/FrankenPHP/agents/frankenphp-deployment.md +2 -2
- package/Infra/i18n/en/FrankenPHP/agents/frankenphp-security.md +1 -1
- package/Infra/i18n/en/FrankenPHP/commands/deploy-setup.md +1 -1
- package/Infra/i18n/en/Hcloud/agents/hcloud-architect.md +14 -4
- package/Infra/i18n/en/Hcloud/agents/hcloud-cost.md +1 -1
- package/Infra/i18n/en/Hcloud/agents/hcloud-debug.md +1 -1
- package/Infra/i18n/en/Hcloud/agents/hcloud-deployment.md +2 -2
- package/Infra/i18n/en/Hcloud/agents/hcloud-security.md +1 -1
- package/Infra/i18n/en/Hcloud/commands/architecture.md +3 -3
- package/Infra/i18n/en/Hcloud/commands/debug.md +1 -1
- package/Infra/i18n/en/Kubernetes/agents/kubernetes-architect.md +3 -3
- package/Infra/i18n/en/Kubernetes/commands/architecture.md +1 -1
- package/Infra/i18n/en/OpenTofu/agents/opentofu-architect.md +1 -1
- package/Infra/i18n/en/OpenTofu/agents/opentofu-deployment.md +2 -2
- package/Infra/i18n/en/PgBouncer/agents/pgbouncer-architect.md +11 -2
- package/Infra/i18n/en/PgBouncer/agents/pgbouncer-debug.md +1 -0
- package/Infra/i18n/en/PgBouncer/agents/pgbouncer-deployment.md +38 -30
- package/Infra/i18n/en/PgBouncer/commands/deploy-setup.md +1 -1
- package/Infra/i18n/es/Ansible/agents/ansible-architect.md +2 -0
- package/Infra/i18n/es/Docker/commands/docker-architecture.md +0 -2
- package/Infra/i18n/es/Docker/commands/docker-compose-setup.md +0 -2
- package/Infra/i18n/es/FrankenPHP/agents/frankenphp-architect.md +4 -1
- package/Infra/i18n/es/FrankenPHP/agents/frankenphp-deployment.md +2 -2
- package/Infra/i18n/es/FrankenPHP/agents/frankenphp-security.md +1 -1
- package/Infra/i18n/es/FrankenPHP/commands/deploy-setup.md +1 -1
- package/Infra/i18n/es/Hcloud/agents/hcloud-architect.md +14 -4
- package/Infra/i18n/es/Hcloud/agents/hcloud-cost.md +1 -1
- package/Infra/i18n/es/Hcloud/agents/hcloud-debug.md +1 -1
- package/Infra/i18n/es/Hcloud/agents/hcloud-deployment.md +2 -2
- package/Infra/i18n/es/Hcloud/agents/hcloud-security.md +1 -1
- package/Infra/i18n/es/Hcloud/commands/architecture.md +3 -3
- package/Infra/i18n/es/Hcloud/commands/debug.md +1 -1
- package/Infra/i18n/es/Kubernetes/agents/kubernetes-architect.md +3 -3
- package/Infra/i18n/es/Kubernetes/commands/architecture.md +1 -1
- package/Infra/i18n/es/OpenTofu/agents/opentofu-architect.md +1 -1
- package/Infra/i18n/es/OpenTofu/agents/opentofu-deployment.md +2 -2
- package/Infra/i18n/es/PgBouncer/agents/pgbouncer-architect.md +11 -2
- package/Infra/i18n/es/PgBouncer/agents/pgbouncer-debug.md +1 -0
- package/Infra/i18n/es/PgBouncer/agents/pgbouncer-deployment.md +38 -30
- package/Infra/i18n/es/PgBouncer/commands/deploy-setup.md +1 -1
- package/Infra/i18n/fr/Ansible/agents/ansible-architect.md +2 -0
- package/Infra/i18n/fr/Docker/commands/docker-architecture.md +0 -2
- package/Infra/i18n/fr/Docker/commands/docker-compose-setup.md +0 -2
- package/Infra/i18n/fr/FrankenPHP/agents/frankenphp-architect.md +4 -1
- package/Infra/i18n/fr/FrankenPHP/agents/frankenphp-deployment.md +2 -2
- package/Infra/i18n/fr/FrankenPHP/agents/frankenphp-security.md +1 -1
- package/Infra/i18n/fr/FrankenPHP/commands/deploy-setup.md +1 -1
- package/Infra/i18n/fr/Hcloud/agents/hcloud-architect.md +14 -4
- package/Infra/i18n/fr/Hcloud/agents/hcloud-cost.md +1 -1
- package/Infra/i18n/fr/Hcloud/agents/hcloud-debug.md +1 -1
- package/Infra/i18n/fr/Hcloud/agents/hcloud-deployment.md +2 -2
- package/Infra/i18n/fr/Hcloud/agents/hcloud-security.md +1 -1
- package/Infra/i18n/fr/Hcloud/commands/architecture.md +3 -3
- package/Infra/i18n/fr/Hcloud/commands/debug.md +1 -1
- package/Infra/i18n/fr/Kubernetes/agents/kubernetes-architect.md +3 -3
- package/Infra/i18n/fr/Kubernetes/commands/architecture.md +1 -1
- package/Infra/i18n/fr/OpenTofu/agents/opentofu-architect.md +1 -1
- package/Infra/i18n/fr/OpenTofu/agents/opentofu-deployment.md +2 -2
- package/Infra/i18n/fr/PgBouncer/agents/pgbouncer-architect.md +11 -2
- package/Infra/i18n/fr/PgBouncer/agents/pgbouncer-debug.md +1 -0
- package/Infra/i18n/fr/PgBouncer/agents/pgbouncer-deployment.md +38 -30
- package/Infra/i18n/fr/PgBouncer/commands/deploy-setup.md +1 -1
- package/Infra/i18n/pt/Ansible/agents/ansible-architect.md +2 -0
- package/Infra/i18n/pt/Docker/commands/docker-architecture.md +0 -2
- package/Infra/i18n/pt/Docker/commands/docker-compose-setup.md +0 -2
- package/Infra/i18n/pt/FrankenPHP/agents/frankenphp-architect.md +4 -1
- package/Infra/i18n/pt/FrankenPHP/agents/frankenphp-deployment.md +2 -2
- package/Infra/i18n/pt/FrankenPHP/agents/frankenphp-security.md +1 -1
- package/Infra/i18n/pt/FrankenPHP/commands/deploy-setup.md +1 -1
- package/Infra/i18n/pt/Hcloud/agents/hcloud-architect.md +14 -4
- package/Infra/i18n/pt/Hcloud/agents/hcloud-cost.md +1 -1
- package/Infra/i18n/pt/Hcloud/agents/hcloud-debug.md +1 -1
- package/Infra/i18n/pt/Hcloud/agents/hcloud-deployment.md +2 -2
- package/Infra/i18n/pt/Hcloud/agents/hcloud-security.md +1 -1
- package/Infra/i18n/pt/Hcloud/commands/architecture.md +3 -3
- package/Infra/i18n/pt/Hcloud/commands/debug.md +1 -1
- package/Infra/i18n/pt/Kubernetes/agents/kubernetes-architect.md +3 -3
- package/Infra/i18n/pt/Kubernetes/commands/architecture.md +1 -1
- package/Infra/i18n/pt/OpenTofu/agents/opentofu-architect.md +1 -1
- package/Infra/i18n/pt/OpenTofu/agents/opentofu-deployment.md +2 -2
- package/Infra/i18n/pt/PgBouncer/agents/pgbouncer-architect.md +11 -2
- package/Infra/i18n/pt/PgBouncer/agents/pgbouncer-debug.md +1 -0
- package/Infra/i18n/pt/PgBouncer/agents/pgbouncer-deployment.md +38 -30
- package/Infra/i18n/pt/PgBouncer/commands/deploy-setup.md +1 -1
- package/README.md +30 -22
- package/Tools/Ralph/.ralph/hooks/pre-tool-context.sh +2 -2
- package/Tools/StatusLine/README.md +1 -1
- package/bundles/cursor/.cursorrules +32 -32
- package/bundles/windsurf/.windsurfrules +32 -32
- package/cli/lib/doctor.js +15 -15
- package/cli/lib/tech-registry.js +10 -10
- package/package.json +2 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
## Tech Stack
|
|
11
11
|
|
|
12
12
|
- **Framework**: Angular {{ANGULAR_VERSION}}
|
|
13
|
-
- **Language**: TypeScript
|
|
13
|
+
- **Language**: TypeScript 6.x
|
|
14
14
|
- **Styling**: {{STYLING}} (SCSS/Tailwind/Angular Material)
|
|
15
15
|
- **State Management**: {{STATE_MANAGEMENT}} (Signals/NgRx/NGXS)
|
|
16
16
|
- **Testing**: {{TESTING}} (Vitest/Jest + Playwright)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## OWASP Top 10 Protection
|
|
4
4
|
|
|
5
|
-
### A01: Broken Access Control
|
|
5
|
+
### A01: Broken Access Control (includes SSRF)
|
|
6
6
|
|
|
7
7
|
```csharp
|
|
8
8
|
// DO: Use policy-based authorization
|
|
@@ -51,7 +51,170 @@ public async Task<IActionResult> GetOrder(Guid orderId)
|
|
|
51
51
|
}
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
#### SSRF — Server-Side Request Forgery (consolidated into A01 in 2025)
|
|
55
|
+
|
|
56
|
+
```csharp
|
|
57
|
+
// DO: Validate and restrict URLs
|
|
58
|
+
public class SafeHttpClient
|
|
59
|
+
{
|
|
60
|
+
private readonly HttpClient _httpClient;
|
|
61
|
+
private readonly ILogger<SafeHttpClient> _logger;
|
|
62
|
+
private readonly HashSet<string> _allowedHosts;
|
|
63
|
+
|
|
64
|
+
public SafeHttpClient(HttpClient httpClient, IConfiguration config, ILogger<SafeHttpClient> logger)
|
|
65
|
+
{
|
|
66
|
+
_httpClient = httpClient;
|
|
67
|
+
_logger = logger;
|
|
68
|
+
_allowedHosts = config.GetSection("AllowedExternalHosts").Get<HashSet<string>>()
|
|
69
|
+
?? new HashSet<string>();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public async Task<string> FetchAsync(string url)
|
|
73
|
+
{
|
|
74
|
+
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri))
|
|
75
|
+
{
|
|
76
|
+
throw new ArgumentException("Invalid URL format");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Block private IP ranges
|
|
80
|
+
if (IsPrivateIp(uri.Host))
|
|
81
|
+
{
|
|
82
|
+
_logger.LogWarning("Blocked SSRF attempt to private IP: {Url}", url);
|
|
83
|
+
throw new SecurityException("Access to internal resources is not allowed");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Whitelist check
|
|
87
|
+
if (!_allowedHosts.Contains(uri.Host))
|
|
88
|
+
{
|
|
89
|
+
_logger.LogWarning("Blocked request to non-whitelisted host: {Host}", uri.Host);
|
|
90
|
+
throw new SecurityException("Host not in allowed list");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return await _httpClient.GetStringAsync(uri);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private static bool IsPrivateIp(string host)
|
|
97
|
+
{
|
|
98
|
+
if (!IPAddress.TryParse(host, out var ip))
|
|
99
|
+
{
|
|
100
|
+
// Resolve hostname
|
|
101
|
+
try
|
|
102
|
+
{
|
|
103
|
+
var addresses = Dns.GetHostAddresses(host);
|
|
104
|
+
return addresses.Any(IsPrivateIpAddress);
|
|
105
|
+
}
|
|
106
|
+
catch
|
|
107
|
+
{
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return IsPrivateIpAddress(ip);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private static bool IsPrivateIpAddress(IPAddress ip)
|
|
116
|
+
{
|
|
117
|
+
var bytes = ip.GetAddressBytes();
|
|
118
|
+
return bytes[0] switch
|
|
119
|
+
{
|
|
120
|
+
10 => true,
|
|
121
|
+
127 => true,
|
|
122
|
+
172 => bytes[1] >= 16 && bytes[1] <= 31,
|
|
123
|
+
192 => bytes[1] == 168,
|
|
124
|
+
_ => false
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### A02: Security Misconfiguration
|
|
131
|
+
|
|
132
|
+
```csharp
|
|
133
|
+
// Program.cs - Security headers
|
|
134
|
+
var app = builder.Build();
|
|
135
|
+
|
|
136
|
+
if (app.Environment.IsProduction())
|
|
137
|
+
{
|
|
138
|
+
app.UseHsts();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
app.UseHttpsRedirection();
|
|
142
|
+
|
|
143
|
+
// Security headers middleware
|
|
144
|
+
app.Use(async (context, next) =>
|
|
145
|
+
{
|
|
146
|
+
context.Response.Headers.Append("X-Content-Type-Options", "nosniff");
|
|
147
|
+
context.Response.Headers.Append("X-Frame-Options", "DENY");
|
|
148
|
+
// X-XSS-Protection est déprécié — s'appuyer sur CSP Level 3
|
|
149
|
+
context.Response.Headers.Append("Referrer-Policy", "strict-origin-when-cross-origin");
|
|
150
|
+
context.Response.Headers.Append(
|
|
151
|
+
"Content-Security-Policy",
|
|
152
|
+
"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; upgrade-insecure-requests");
|
|
153
|
+
context.Response.Headers.Append("Cross-Origin-Opener-Policy", "same-origin");
|
|
154
|
+
|
|
155
|
+
await next();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// DO: Disable detailed errors in production
|
|
159
|
+
if (app.Environment.IsDevelopment())
|
|
160
|
+
{
|
|
161
|
+
app.UseDeveloperExceptionPage();
|
|
162
|
+
}
|
|
163
|
+
else
|
|
164
|
+
{
|
|
165
|
+
app.UseExceptionHandler("/error");
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// DO: Configure CORS properly
|
|
169
|
+
builder.Services.AddCors(options =>
|
|
170
|
+
{
|
|
171
|
+
options.AddPolicy("Production", policy =>
|
|
172
|
+
{
|
|
173
|
+
policy.WithOrigins("https://myapp.com", "https://www.myapp.com")
|
|
174
|
+
.AllowCredentials()
|
|
175
|
+
.WithMethods("GET", "POST", "PUT", "DELETE")
|
|
176
|
+
.WithHeaders("Content-Type", "Authorization");
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// DON'T: Use wildcard CORS in production
|
|
181
|
+
builder.Services.AddCors(options =>
|
|
182
|
+
{
|
|
183
|
+
options.AddDefaultPolicy(policy =>
|
|
184
|
+
{
|
|
185
|
+
policy.AllowAnyOrigin() // BAD in production
|
|
186
|
+
.AllowAnyMethod()
|
|
187
|
+
.AllowAnyHeader();
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### A03: Software Supply Chain Failures
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Check for vulnerable packages
|
|
196
|
+
dotnet list package --vulnerable
|
|
197
|
+
|
|
198
|
+
# Update packages
|
|
199
|
+
dotnet outdated --upgrade
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
```yaml
|
|
203
|
+
# .github/dependabot.yml
|
|
204
|
+
version: 2
|
|
205
|
+
updates:
|
|
206
|
+
- package-ecosystem: "nuget"
|
|
207
|
+
directory: "/"
|
|
208
|
+
schedule:
|
|
209
|
+
interval: "daily"
|
|
210
|
+
open-pull-requests-limit: 10
|
|
211
|
+
reviewers:
|
|
212
|
+
- "security-team"
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
- Generate an SBOM (CycloneDX 1.7) on every build and sign artifacts (Sigstore); pin package versions (`packages.lock.json`).
|
|
216
|
+
|
|
217
|
+
### A04: Cryptographic Failures
|
|
55
218
|
|
|
56
219
|
```csharp
|
|
57
220
|
// DO: Use strong encryption
|
|
@@ -110,7 +273,7 @@ public class User
|
|
|
110
273
|
}
|
|
111
274
|
```
|
|
112
275
|
|
|
113
|
-
###
|
|
276
|
+
### A05: Injection
|
|
114
277
|
|
|
115
278
|
```csharp
|
|
116
279
|
// DO: Use parameterized queries with Entity Framework
|
|
@@ -163,7 +326,7 @@ public async Task<string> RunReportAsync(string reportName)
|
|
|
163
326
|
}
|
|
164
327
|
```
|
|
165
328
|
|
|
166
|
-
###
|
|
329
|
+
### A06: Insecure Design
|
|
167
330
|
|
|
168
331
|
```csharp
|
|
169
332
|
// DO: Implement rate limiting
|
|
@@ -195,92 +358,7 @@ builder.Services.Configure<IdentityOptions>(options =>
|
|
|
195
358
|
});
|
|
196
359
|
```
|
|
197
360
|
|
|
198
|
-
###
|
|
199
|
-
|
|
200
|
-
```csharp
|
|
201
|
-
// Program.cs - Security headers
|
|
202
|
-
var app = builder.Build();
|
|
203
|
-
|
|
204
|
-
if (app.Environment.IsProduction())
|
|
205
|
-
{
|
|
206
|
-
app.UseHsts();
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
app.UseHttpsRedirection();
|
|
210
|
-
|
|
211
|
-
// Security headers middleware
|
|
212
|
-
app.Use(async (context, next) =>
|
|
213
|
-
{
|
|
214
|
-
context.Response.Headers.Append("X-Content-Type-Options", "nosniff");
|
|
215
|
-
context.Response.Headers.Append("X-Frame-Options", "DENY");
|
|
216
|
-
// X-XSS-Protection est déprécié — s'appuyer sur CSP Level 3
|
|
217
|
-
context.Response.Headers.Append("Referrer-Policy", "strict-origin-when-cross-origin");
|
|
218
|
-
context.Response.Headers.Append(
|
|
219
|
-
"Content-Security-Policy",
|
|
220
|
-
"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; upgrade-insecure-requests");
|
|
221
|
-
context.Response.Headers.Append("Cross-Origin-Opener-Policy", "same-origin");
|
|
222
|
-
|
|
223
|
-
await next();
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
// DO: Disable detailed errors in production
|
|
227
|
-
if (app.Environment.IsDevelopment())
|
|
228
|
-
{
|
|
229
|
-
app.UseDeveloperExceptionPage();
|
|
230
|
-
}
|
|
231
|
-
else
|
|
232
|
-
{
|
|
233
|
-
app.UseExceptionHandler("/error");
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// DO: Configure CORS properly
|
|
237
|
-
builder.Services.AddCors(options =>
|
|
238
|
-
{
|
|
239
|
-
options.AddPolicy("Production", policy =>
|
|
240
|
-
{
|
|
241
|
-
policy.WithOrigins("https://myapp.com", "https://www.myapp.com")
|
|
242
|
-
.AllowCredentials()
|
|
243
|
-
.WithMethods("GET", "POST", "PUT", "DELETE")
|
|
244
|
-
.WithHeaders("Content-Type", "Authorization");
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
// DON'T: Use wildcard CORS in production
|
|
249
|
-
builder.Services.AddCors(options =>
|
|
250
|
-
{
|
|
251
|
-
options.AddDefaultPolicy(policy =>
|
|
252
|
-
{
|
|
253
|
-
policy.AllowAnyOrigin() // BAD in production
|
|
254
|
-
.AllowAnyMethod()
|
|
255
|
-
.AllowAnyHeader();
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### A06: Vulnerable and Outdated Components
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
# Check for vulnerable packages
|
|
264
|
-
dotnet list package --vulnerable
|
|
265
|
-
|
|
266
|
-
# Update packages
|
|
267
|
-
dotnet outdated --upgrade
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
```yaml
|
|
271
|
-
# .github/dependabot.yml
|
|
272
|
-
version: 2
|
|
273
|
-
updates:
|
|
274
|
-
- package-ecosystem: "nuget"
|
|
275
|
-
directory: "/"
|
|
276
|
-
schedule:
|
|
277
|
-
interval: "daily"
|
|
278
|
-
open-pull-requests-limit: 10
|
|
279
|
-
reviewers:
|
|
280
|
-
- "security-team"
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
### A07: Identification and Authentication Failures
|
|
361
|
+
### A07: Authentication Failures
|
|
284
362
|
|
|
285
363
|
```csharp
|
|
286
364
|
// DO: Configure secure authentication
|
|
@@ -323,7 +401,7 @@ builder.Services.Configure<IdentityOptions>(options =>
|
|
|
323
401
|
});
|
|
324
402
|
```
|
|
325
403
|
|
|
326
|
-
### A08: Software
|
|
404
|
+
### A08: Software or Data Integrity Failures
|
|
327
405
|
|
|
328
406
|
```csharp
|
|
329
407
|
// DO: Use anti-forgery tokens
|
|
@@ -383,7 +461,7 @@ public async Task<IActionResult> UploadFile(IFormFile file)
|
|
|
383
461
|
}
|
|
384
462
|
```
|
|
385
463
|
|
|
386
|
-
### A09: Security Logging and
|
|
464
|
+
### A09: Security Logging and Alerting Failures
|
|
387
465
|
|
|
388
466
|
```csharp
|
|
389
467
|
// DO: Implement comprehensive security logging
|
|
@@ -435,80 +513,26 @@ builder.Host.UseSerilog((context, config) =>
|
|
|
435
513
|
});
|
|
436
514
|
```
|
|
437
515
|
|
|
438
|
-
### A10:
|
|
516
|
+
### A10: Mishandling of Exceptional Conditions
|
|
439
517
|
|
|
440
518
|
```csharp
|
|
441
|
-
// DO:
|
|
442
|
-
public class
|
|
519
|
+
// DO: Global exception handler returning ProblemDetails (RFC 9457) — no stack trace in production
|
|
520
|
+
public sealed class GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger) : IExceptionHandler
|
|
443
521
|
{
|
|
444
|
-
|
|
445
|
-
private readonly ILogger<SafeHttpClient> _logger;
|
|
446
|
-
private readonly HashSet<string> _allowedHosts;
|
|
447
|
-
|
|
448
|
-
public SafeHttpClient(HttpClient httpClient, IConfiguration config, ILogger<SafeHttpClient> logger)
|
|
522
|
+
public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken ct)
|
|
449
523
|
{
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
public async Task<string> FetchAsync(string url)
|
|
457
|
-
{
|
|
458
|
-
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri))
|
|
459
|
-
{
|
|
460
|
-
throw new ArgumentException("Invalid URL format");
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
// Block private IP ranges
|
|
464
|
-
if (IsPrivateIp(uri.Host))
|
|
465
|
-
{
|
|
466
|
-
_logger.LogWarning("Blocked SSRF attempt to private IP: {Url}", url);
|
|
467
|
-
throw new SecurityException("Access to internal resources is not allowed");
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
// Whitelist check
|
|
471
|
-
if (!_allowedHosts.Contains(uri.Host))
|
|
472
|
-
{
|
|
473
|
-
_logger.LogWarning("Blocked request to non-whitelisted host: {Host}", uri.Host);
|
|
474
|
-
throw new SecurityException("Host not in allowed list");
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
return await _httpClient.GetStringAsync(uri);
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
private static bool IsPrivateIp(string host)
|
|
481
|
-
{
|
|
482
|
-
if (!IPAddress.TryParse(host, out var ip))
|
|
483
|
-
{
|
|
484
|
-
// Resolve hostname
|
|
485
|
-
try
|
|
486
|
-
{
|
|
487
|
-
var addresses = Dns.GetHostAddresses(host);
|
|
488
|
-
return addresses.Any(IsPrivateIpAddress);
|
|
489
|
-
}
|
|
490
|
-
catch
|
|
491
|
-
{
|
|
492
|
-
return false;
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
return IsPrivateIpAddress(ip);
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
private static bool IsPrivateIpAddress(IPAddress ip)
|
|
500
|
-
{
|
|
501
|
-
var bytes = ip.GetAddressBytes();
|
|
502
|
-
return bytes[0] switch
|
|
503
|
-
{
|
|
504
|
-
10 => true,
|
|
505
|
-
127 => true,
|
|
506
|
-
172 => bytes[1] >= 16 && bytes[1] <= 31,
|
|
507
|
-
192 => bytes[1] == 168,
|
|
508
|
-
_ => false
|
|
509
|
-
};
|
|
524
|
+
logger.LogError(exception, "Unhandled exception");
|
|
525
|
+
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
|
|
526
|
+
await context.Response.WriteAsJsonAsync(
|
|
527
|
+
new ProblemDetails { Status = 500, Title = "An unexpected error occurred" }, ct);
|
|
528
|
+
return true;
|
|
510
529
|
}
|
|
511
530
|
}
|
|
531
|
+
|
|
532
|
+
// Program.cs
|
|
533
|
+
builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
|
|
534
|
+
builder.Services.AddProblemDetails();
|
|
535
|
+
app.UseExceptionHandler();
|
|
512
536
|
```
|
|
513
537
|
|
|
514
538
|
## Secrets Management
|
|
@@ -19,6 +19,7 @@ These aliases reduce typing and improve productivity by providing short mnemonic
|
|
|
19
19
|
| Alias | Full Command | Description |
|
|
20
20
|
|-------|-------------|-------------|
|
|
21
21
|
| `/ca` | `/common:audit-freshness` | Audit documentation freshness |
|
|
22
|
+
| `/caa` | `/common:audit-claude-alignment` | Weekly Claude ecosystem alignment audit |
|
|
22
23
|
| `/ci` | `/common:init` | Initialize Claude Craft |
|
|
23
24
|
| `/cr` | `/common:release-checklist` | Pre-release verification checklist |
|
|
24
25
|
| `/cs` | `/common:setup-project-context` | Setup project context for Claude |
|
|
@@ -123,6 +124,7 @@ Add to `~/.bashrc` or `~/.zshrc`:
|
|
|
123
124
|
```bash
|
|
124
125
|
# Claude Craft Aliases
|
|
125
126
|
alias ca='claude-code -p /common:audit-freshness'
|
|
127
|
+
alias caa='claude-code -p /common:audit-claude-alignment'
|
|
126
128
|
alias ci='claude-code -p /common:init'
|
|
127
129
|
alias cr='claude-code -p /common:release-checklist'
|
|
128
130
|
alias cs='claude-code -p /common:setup-project-context'
|
|
@@ -156,6 +158,7 @@ Add to `~/.config/fish/config.fish`:
|
|
|
156
158
|
```fish
|
|
157
159
|
# Claude Craft Aliases
|
|
158
160
|
alias ca 'claude-code -p /common:audit-freshness'
|
|
161
|
+
alias caa 'claude-code -p /common:audit-claude-alignment'
|
|
159
162
|
alias ci 'claude-code -p /common:init'
|
|
160
163
|
alias cr 'claude-code -p /common:release-checklist'
|
|
161
164
|
alias cs 'claude-code -p /common:setup-project-context'
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Audit hebdomadaire d'alignement sur l'écosystème Claude (CLI, modèles, best practices Anthropic, communauté) via équipe d'agents + PR de correction"
|
|
3
|
+
argument-hint: "[--quick|--full] [--lens=<nom>] [--since=YYYY-MM-DD] [--dry-run] [--no-pr]"
|
|
4
|
+
model: sonnet
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Audit d'alignement Claude — claude-craft
|
|
8
|
+
|
|
9
|
+
Vérifie que claude-craft reste aligné sur l'état réel de l'écosystème Claude : version du CLI Claude Code, modèles et pricing, best practices Anthropic, features de la plateforme, avis de sécurité, et pratiques de la communauté.
|
|
10
|
+
|
|
11
|
+
Complémentaire de `/common:audit-freshness`, qui couvre les stacks applicatifs (React, Symfony, Flutter…) et **jamais Claude Code lui-même**.
|
|
12
|
+
|
|
13
|
+
**Résultat :** rapport `docs/audit/claude-alignment/<date>.md` + `<date>.json`, et une **PR** portant uniquement les corrections mécaniques. Tout ce qui demande un jugement part en checklist dans le corps de la PR, jamais en édition automatique.
|
|
14
|
+
|
|
15
|
+
## Arguments
|
|
16
|
+
|
|
17
|
+
$ARGUMENTS
|
|
18
|
+
|
|
19
|
+
- `--quick` (défaut) : n'audite que les lentilles dont la source externe a bougé depuis la baseline
|
|
20
|
+
- `--full` : force les 7 lentilles, effort `high` sur sécurité et modèles — cadence mensuelle
|
|
21
|
+
- `--lens=<nom>` : une seule lentille (`cli-release`, `models-pricing`, `prompt-context`, `cc-features`, `security-cve`, `community`, `internal-conformance`)
|
|
22
|
+
- `--since=YYYY-MM-DD` : force la date de baseline — rattrapage après un trou de cadence
|
|
23
|
+
- `--dry-run` : pré-collecte + liste des agents qui seraient lancés. **Aucun agent, aucune écriture**
|
|
24
|
+
- `--no-pr` : rapport seul, ni branche ni PR
|
|
25
|
+
|
|
26
|
+
## MISSION
|
|
27
|
+
|
|
28
|
+
### Étape 0 — Pré-vol et pré-collecte
|
|
29
|
+
|
|
30
|
+
1. **Worktree propre obligatoire.** `git status --porcelain` ; si la sortie n'est pas vide, **arrêter** et le signaler. Des agents d'audit ont déjà pollué le worktree par le passé — on ne construit pas une PR par-dessus des modifications non validées.
|
|
31
|
+
2. Lancer la pré-collecte déterministe (coût LLM nul) :
|
|
32
|
+
```bash
|
|
33
|
+
node scripts/collect-claude-signals.mjs [--since=<date>] [--dry-run]
|
|
34
|
+
```
|
|
35
|
+
Elle lit `config/claude-alignment-baseline.json`, interroge le registry npm, les avis de sécurité GitHub, le catalogue communautaire et les pages de doc suivies par empreinte, puis écrit `docs/audit/claude-alignment/signals-<date>.json`.
|
|
36
|
+
3. Lire ce fichier. Le champ **`agents_to_launch`** est la liste exacte des lentilles à réveiller. Une lentille absente n'est **pas** auditée : écrire `✅ aucun changement depuis <baseline.last_run>` dans le rapport, sans lancer d'agent. C'est le principal levier de coût de cette commande.
|
|
37
|
+
4. Calculer l'âge du dernier run (`baseline.last_run` → aujourd'hui). Au-delà de **10 jours**, ouvrir le rapport par un avertissement de cadence.
|
|
38
|
+
5. En `--full`, ignorer `agents_to_launch` et retenir les 7 lentilles. En `--lens=<nom>`, ne retenir que celle-là. En `--dry-run`, s'arrêter ici en affichant la liste retenue et le coût estimé.
|
|
39
|
+
|
|
40
|
+
### Étape 1 — Gates locaux (0 token)
|
|
41
|
+
|
|
42
|
+
Lancer, et consigner le résultat de chacun dans le rapport :
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm run lint:versions # cohérence tech-registry ↔ versions.yaml + denylist dans les fichiers vitrine
|
|
46
|
+
npm run lint:includes # liens @<path> fantômes
|
|
47
|
+
npm run docs:check # dérive des références générées
|
|
48
|
+
npm run lint:i18n # parité i18n (comptage + taille)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Un gate rouge est un finding **P1** au minimum. Ne pas le corriger ici : il alimente le patch-plan de l'étape 3.
|
|
52
|
+
|
|
53
|
+
### Étape 2 — Équipe d'agents (un seul message, N appels Task en parallèle)
|
|
54
|
+
|
|
55
|
+
Lancer **en un seul message** un agent par lentille retenue. Le routing modèle n'est pas négociable : il est ce qui rend l'audit hebdomadaire soutenable.
|
|
56
|
+
|
|
57
|
+
| Lentille | `subagent_type` | `model` | `effort` |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| `cli-release` | `general-purpose` | `sonnet` | `medium` |
|
|
60
|
+
| `models-pricing` | `general-purpose` | `sonnet` | `medium` (`high` en `--full`) |
|
|
61
|
+
| `cc-features` | `claude-code-guide` | *(défaut de l'agent)* | — |
|
|
62
|
+
| `prompt-context` | `general-purpose` | `sonnet` | `medium` |
|
|
63
|
+
| `security-cve` | `general-purpose` | `sonnet` | `medium` (`high` en `--full`) |
|
|
64
|
+
| `community` | `general-purpose` | `sonnet` | `medium` |
|
|
65
|
+
| `internal-conformance` | `general-purpose` | `haiku` | `low` |
|
|
66
|
+
|
|
67
|
+
`internal-conformance` est un scan mécanique 100 % local : son prompt lui **interdit explicitement** WebSearch et WebFetch. Les six autres reçoivent les URLs exactes issues de `signals-<date>.json` — ils font du WebFetch ciblé, pas de la découverte par WebSearch (non déterministe et multi-requêtes).
|
|
68
|
+
|
|
69
|
+
**Socle commun à injecter dans chaque prompt d'agent :**
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Tu audites la lentille "<LENTILLE>" du dépôt claude-craft (framework Claude Code, v<version de package.json>).
|
|
73
|
+
|
|
74
|
+
CONTEXTE PRÉ-COLLECTÉ (ne pas re-chercher ce qui est déjà donné) :
|
|
75
|
+
<coller le bloc lenses["<LENTILLE>"] de docs/audit/claude-alignment/signals-<date>.json>
|
|
76
|
+
Baseline du dernier audit : <baseline.last_run>
|
|
77
|
+
|
|
78
|
+
ÉTAPES :
|
|
79
|
+
1. Lire les fichiers du dépôt listés ci-dessous : <PATHS>
|
|
80
|
+
2. Confronter au réel via les sources fournies (WebFetch sur les URLs exactes ci-dessus).
|
|
81
|
+
Ne remonter QUE ce qui a changé depuis la baseline.
|
|
82
|
+
3. Retourner EXACTEMENT ce format (< 300 mots) :
|
|
83
|
+
|
|
84
|
+
## <LENTILLE>
|
|
85
|
+
- **État déclaré dans le repo** : <valeur> (source: <path>:<ligne>)
|
|
86
|
+
- **État réel observé** : <valeur> (source: <URL>)
|
|
87
|
+
- **Écart** : aucun | mineur | majeur | critique
|
|
88
|
+
- **Findings** :
|
|
89
|
+
- [<sévérité P0-P3>] <constat> — source: <URL>
|
|
90
|
+
- **PATCH** : (uniquement les substitutions mécaniques sûres, une par ligne)
|
|
91
|
+
- <chemin> | <valeur actuelle> | <valeur cible> | <raison>
|
|
92
|
+
- **JUGEMENT REQUIS** : (ce qui demande un arbitrage humain, jamais de PATCH)
|
|
93
|
+
- <point> — pourquoi ça ne peut pas être automatisé
|
|
94
|
+
|
|
95
|
+
CONTRAINTES :
|
|
96
|
+
- Citer une source pour CHAQUE affirmation. Si une info est introuvable, écrire "non trouvé".
|
|
97
|
+
- Ne rien inventer, ne pas extrapoler une version depuis un numéro voisin.
|
|
98
|
+
- Ne JAMAIS modifier un fichier. Tu es en lecture seule.
|
|
99
|
+
- Un PATCH n'est légitime que si la substitution est littérale et sans ambiguïté
|
|
100
|
+
(numéro de version, identifiant de modèle, date). Toute reformulation de prose
|
|
101
|
+
va en JUGEMENT REQUIS.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Cibles par lentille :**
|
|
105
|
+
|
|
106
|
+
| Lentille | Fichiers du dépôt à confronter |
|
|
107
|
+
|---|---|
|
|
108
|
+
| `cli-release` | `config/versions.yaml` (`claudeCode.*`), `.claude/COMPATIBILITY.md`, `.claude/rules/12-context-management.md`, `docs/PREREQUISITES.md` |
|
|
109
|
+
| `models-pricing` | `config/versions.yaml` (`claudeCode.models`, `denylist`), `.claude/rules/12-context-management.md`, `.claude/settings.json`, `.claude/settings.local.json.example` — charger le skill `claude-api` pour la référence modèles/pricing |
|
|
110
|
+
| `cc-features` | `.claude/COMPATIBILITY.md`, `.claude/settings.json`, `.claude-plugin/plugin.json`, `.claude/agents/*.md`, `.claude/skills/*/SKILL.md` — identifier les features de la plateforme non encore adoptées |
|
|
111
|
+
| `prompt-context` | `.claude/rules/12-context-management.md`, `.claude/rules/23-karpathy-principles.md`, `.claude/CLAUDE.md` |
|
|
112
|
+
| `security-cve` | `.claude/rules/11-security.md`, `.claude/settings.json` (permissions), `.claude/COMPATIBILITY.md` (section CVE) |
|
|
113
|
+
| `community` | `.claude/skills/ecosystem-tools/SKILL.md`, `docs/ECOSYSTEM.md` |
|
|
114
|
+
| `internal-conformance` | Les 3 inventaires : `.claude/agents/*.md`, `.claude/skills/*/SKILL.md`, `.claude/commands/**/*.md`. Vérifier : frontmatter YAML parsable et `description` non vide ; `context: fork` présent sur tout skill de plus de 60 lignes ; cohérence `model:`/`effort:` (un agent `haiku` ne doit pas être en `effort: xhigh`) ; hooks lisant leur payload sur **stdin via `jq`** et jamais via `$TOOL_INPUT` ; aucun token de `denylist` hors fichiers vitrine |
|
|
115
|
+
|
|
116
|
+
### Étape 3 — Synthèse, rapport, patch-plan
|
|
117
|
+
|
|
118
|
+
1. Agréger les retours. Un agent qui a échoué laisse `⚠️ audit incomplet : <raison>` — ne jamais inventer sa section.
|
|
119
|
+
2. Écrire `docs/audit/claude-alignment/<date>.md` :
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
# Audit d'alignement Claude — <date>
|
|
123
|
+
|
|
124
|
+
**Version claude-craft** : <package.json>
|
|
125
|
+
**Mode** : quick | full
|
|
126
|
+
**Baseline** : <date> (<N> jours) <⚠️ si > 10 jours>
|
|
127
|
+
**Lentilles auditées** : <n>/7 — <liste> (les autres inchangées depuis la baseline)
|
|
128
|
+
|
|
129
|
+
## Résumé exécutif
|
|
130
|
+
|
|
131
|
+
| Sévérité | Nombre |
|
|
132
|
+
|----------|--------|
|
|
133
|
+
| 🔴 P0 | N |
|
|
134
|
+
| 🟠 P1 | N |
|
|
135
|
+
| 🟡 P2 | N |
|
|
136
|
+
| 🔵 P3 | N |
|
|
137
|
+
|
|
138
|
+
## Gates locaux
|
|
139
|
+
|
|
140
|
+
| Gate | Résultat |
|
|
141
|
+
|------|----------|
|
|
142
|
+
| lint:versions | ✅ / ❌ <extrait> |
|
|
143
|
+
| lint:includes | … |
|
|
144
|
+
| docs:check | … |
|
|
145
|
+
| lint:i18n | … |
|
|
146
|
+
|
|
147
|
+
## Findings par lentille
|
|
148
|
+
<coller chaque rapport d'agent>
|
|
149
|
+
|
|
150
|
+
## Patch-plan appliqué
|
|
151
|
+
| Fichier | Avant | Après | Raison |
|
|
152
|
+
|---|---|---|---|
|
|
153
|
+
|
|
154
|
+
## Jugement humain requis
|
|
155
|
+
- [ ] <point> — <pourquoi>
|
|
156
|
+
|
|
157
|
+
## Méthodologie
|
|
158
|
+
- Pré-collecte : `scripts/collect-claude-signals.mjs` (npm registry, GitHub advisories, empreintes de pages, catalogue communautaire)
|
|
159
|
+
- Agents : <n> (routing sonnet/haiku documenté dans la commande)
|
|
160
|
+
- Sources : toutes citées dans les sections ci-dessus
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
3. Écrire le jumeau structuré `docs/audit/claude-alignment/<date>.json` : `{ audit_date, mode, baseline, lenses{}, summary{P0..P3}, patch_plan[], human_decisions_required[], gates{} }`.
|
|
164
|
+
|
|
165
|
+
### Étape 4 — Branche et PR
|
|
166
|
+
|
|
167
|
+
Sauter entièrement cette étape si `--no-pr`, `--dry-run`, ou si le patch-plan est vide.
|
|
168
|
+
|
|
169
|
+
1. `git checkout -b chore/claude-alignment-<date>` depuis `main` à jour.
|
|
170
|
+
2. Appliquer **uniquement** les entrées du patch-plan, et **uniquement** dans l'allowlist :
|
|
171
|
+
- `config/versions.yaml` — `claudeCode.recommended|testedUpTo|models.*`, `meta.lastUpdated`, ajouts en `denylist`
|
|
172
|
+
- `.claude/COMPATIBILITY.md` — bandeau d'en-tête et ajout de lignes dans la table `Version Requirements`
|
|
173
|
+
- Substitutions de version littérales dans les fichiers de `SHOWCASE_FILES` (`scripts/verify-versions.mjs`)
|
|
174
|
+
- `Dev/i18n/<lang>/Common/templates/settings.json.template` et `Dev/i18n/<lang>/Common/rules/12-context-management.md` (les 5 langues, en une seule passe cohérente)
|
|
175
|
+
- `config/claude-alignment-baseline.json` — remplacer par `next_baseline` du fichier de signaux
|
|
176
|
+
3. **Interdit, sans exception** : `.github/workflows/` (le token `gh` n'a pas le scope `workflow`, la PR deviendrait non mergeable), tout fichier hors allowlist, toute reformulation de prose, tout fichier `.md` de documentation générée (`docs/*-FULL-REFERENCE.md` : passer par `npm run docs:generate`).
|
|
177
|
+
4. Rejouer les 4 gates. **Un seul rouge ⇒ pas de PR** : laisser la branche en place et l'expliquer dans le rapport.
|
|
178
|
+
5. `git add` limité aux fichiers de l'allowlist effectivement modifiés, puis commit en Conventional Commits :
|
|
179
|
+
`chore(alignment): sync Claude Code <ancienne> → <nouvelle> + modèles`
|
|
180
|
+
6. `gh pr create` avec, dans le corps : le résumé exécutif, le tableau du patch-plan, et la checklist « jugement humain requis ». **Jamais de merge automatique.**
|
|
181
|
+
7. Revenir sur `main` et confirmer à l'utilisateur l'URL de la PR.
|
|
182
|
+
|
|
183
|
+
## Règles strictes
|
|
184
|
+
|
|
185
|
+
- **Worktree propre** en préalable absolu ; sinon, arrêt immédiat.
|
|
186
|
+
- **Aucune édition hors allowlist**, et aucune édition du tout tant que les gates ne sont pas verts.
|
|
187
|
+
- **Toute affirmation de version cite une source** (URL ou `path:ligne`).
|
|
188
|
+
- **Fail-open assumé** : une source injoignable rend la lentille « à auditer », jamais « rien à signaler ».
|
|
189
|
+
- **Un agent en échec** laisse `⚠️ audit incomplet : <raison>` — pas de section inventée.
|
|
190
|
+
- **Parallélisme obligatoire** : un seul message contenant tous les appels Task de l'étape 2.
|
|
191
|
+
- **Langue du rapport** : français, avec accents.
|
|
192
|
+
|
|
193
|
+
## Exemples
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
/common:audit-claude-alignment # rituel hebdomadaire
|
|
197
|
+
/common:audit-claude-alignment --dry-run # quelles lentilles bougeraient ? coût nul
|
|
198
|
+
/common:audit-claude-alignment --full # passage mensuel approfondi
|
|
199
|
+
/common:audit-claude-alignment --lens=cli-release --no-pr
|
|
200
|
+
/common:audit-claude-alignment --since=2026-06-30 # rattrapage après un trou de cadence
|
|
201
|
+
```
|
|
@@ -100,7 +100,7 @@ Always use Docker for commands to abstract from local environment.
|
|
|
100
100
|
```markdown
|
|
101
101
|
# Claude-Craft - {{PROJECT_NAME}}
|
|
102
102
|
|
|
103
|
-
**Stack**: Flutter 3.
|
|
103
|
+
**Stack**: Flutter 3.47+, Dart 3.13+, Clean Architecture, Riverpod/BLoC
|
|
104
104
|
|
|
105
105
|
## Quick Reference
|
|
106
106
|
|
|
@@ -102,7 +102,8 @@ When a user invokes `/common:search <keyword>`:
|
|
|
102
102
|
| `architecture` | architecture skill, @database-architect |
|
|
103
103
|
| `react` | /react:* commands, @react-reviewer |
|
|
104
104
|
| `symfony` | /symfony:* commands, @symfony-reviewer |
|
|
105
|
-
| `audit` | /team:audit, /common:audit-freshness |
|
|
105
|
+
| `audit` | /team:audit, /common:audit-freshness, /common:audit-claude-alignment |
|
|
106
|
+
| `claude code` | /common:audit-claude-alignment, .claude/COMPATIBILITY.md |
|
|
106
107
|
| `workflow` | /workflow:* commands, workflow-analysis skill |
|
|
107
108
|
|
|
108
109
|
---
|
|
@@ -65,7 +65,7 @@ validée. Pour des éditions concurrentes de fichiers, `isolation: 'worktree'`.
|
|
|
65
65
|
|
|
66
66
|
- **ralph-run** (`/common:ralph-run`) : boucle séquentielle mono-contexte jusqu'à une DoD — pas de
|
|
67
67
|
parallélisme. Pour une tâche qui dépasse ce modèle, basculer sur un Dynamic Workflow.
|
|
68
|
-
- **`/effort ultracode`** : palier d'effort CLI (débit code max sur Opus
|
|
68
|
+
- **`/effort ultracode`** : palier d'effort CLI (débit code max sur Opus 5.5) — orthogonal au
|
|
69
69
|
déclencheur `ultracode` des workflows, même si souvent utilisés ensemble.
|
|
70
70
|
|
|
71
71
|
> Référence : [Claude Code Workflows](https://code.claude.com/docs/en/workflows) · voir aussi
|