@the-bearded-bear/claude-craft 8.22.0 → 8.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -32,10 +32,10 @@ Vérifie la configuration du Security Bundle :
|
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
# Vérifier si symfony/security-bundle est installé
|
|
35
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
35
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep "symfony/security-bundle" /app/composer.json
|
|
36
36
|
|
|
37
37
|
# Lister les firewalls configurés
|
|
38
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
38
|
+
docker run --rm -v $(pwd):/app php:8.5-cli cat /app/config/packages/security.yaml | grep -A 10 "firewalls:"
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
#### Configuration Security Bundle (5 points)
|
|
@@ -59,11 +59,11 @@ docker run --rm -v $(pwd):/app php:8.2-cli cat /app/config/packages/security.yam
|
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
# Vérifier l'utilisation de requêtes préparées
|
|
62
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
63
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
62
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "->createQuery(" /app/src --include="*.php" | wc -l
|
|
63
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "->createNativeQuery(" /app/src --include="*.php" | wc -l
|
|
64
64
|
|
|
65
65
|
# Rechercher les concaténations de requêtes dangereuses
|
|
66
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
66
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -rE "\"SELECT.*\\..*\$" /app/src --include="*.php" || echo "✅ Pas de concaténation SQL détectée"
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
- [ ] Utilisation exclusive de requêtes préparées (Doctrine DQL/QueryBuilder)
|
|
@@ -85,10 +85,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli grep -rE "\"SELECT.*\\..*\$" /app/src
|
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
87
|
# Vérifier la configuration des mots de passe
|
|
88
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
88
|
+
docker run --rm -v $(pwd):/app php:8.5-cli cat /app/config/packages/security.yaml | grep -A 5 "password_hashers:"
|
|
89
89
|
|
|
90
90
|
# Vérifier la présence de rate limiting
|
|
91
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
91
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "RateLimiter" /app/config --include="*.yaml"
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
- [ ] Hash de mot de passe fort (argon2i ou bcrypt avec coût élevé)
|
|
@@ -110,10 +110,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli grep -r "RateLimiter" /app/config --i
|
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
112
|
# Vérifier les secrets dans le code
|
|
113
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
113
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -rE "(password|secret|api_key|token).*=.*['\"]" /app/src --include="*.php" | grep -v "//.*password" || echo "✅ Pas de secrets en dur"
|
|
114
114
|
|
|
115
115
|
# Vérifier HTTPS
|
|
116
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
116
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "SECURE_SCHEME" /app/.env.example || echo "⚠️ Configuration HTTPS non trouvée"
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
- [ ] Secrets externalisés (.env, vault)
|
|
@@ -135,10 +135,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli grep -r "SECURE_SCHEME" /app/.env.exa
|
|
|
135
135
|
|
|
136
136
|
```bash
|
|
137
137
|
# Vérifier les Voters
|
|
138
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
138
|
+
docker run --rm -v $(pwd):/app php:8.5-cli find /app/src -name "*Voter.php" | wc -l
|
|
139
139
|
|
|
140
140
|
# Vérifier les annotations @IsGranted
|
|
141
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
141
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "@IsGranted" /app/src --include="*.php" | wc -l
|
|
142
142
|
```
|
|
143
143
|
|
|
144
144
|
- [ ] Voters Symfony pour autorisations complexes
|
|
@@ -160,10 +160,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli grep -r "@IsGranted" /app/src --inclu
|
|
|
160
160
|
|
|
161
161
|
```bash
|
|
162
162
|
# Vérifier l'auto-échappement Twig
|
|
163
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
163
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "autoescape" /app/config/packages/twig.yaml
|
|
164
164
|
|
|
165
165
|
# Vérifier les |raw non sécurisés
|
|
166
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
166
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "|raw" /app/templates --include="*.twig" || echo "✅ Pas de |raw détecté"
|
|
167
167
|
```
|
|
168
168
|
|
|
169
169
|
- [ ] Auto-escape activé dans Twig
|
|
@@ -183,7 +183,7 @@ docker run --rm -v $(pwd):/app php:8.2-cli grep -r "|raw" /app/templates --inclu
|
|
|
183
183
|
|
|
184
184
|
```bash
|
|
185
185
|
# Vérifier CSRF protection
|
|
186
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
186
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "csrf_protection" /app/config/packages/framework.yaml
|
|
187
187
|
```
|
|
188
188
|
|
|
189
189
|
- [ ] CSRF protection activée globalement
|
|
@@ -205,10 +205,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli grep -r "csrf_protection" /app/config
|
|
|
205
205
|
|
|
206
206
|
```bash
|
|
207
207
|
# Vérifier le mode debug
|
|
208
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
208
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep "APP_ENV" /app/.env.example
|
|
209
209
|
|
|
210
210
|
# Vérifier les dépendances vulnérables
|
|
211
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
211
|
+
docker run --rm -v $(pwd):/app php:8.5-cli composer audit
|
|
212
212
|
```
|
|
213
213
|
|
|
214
214
|
- [ ] APP_ENV=prod en production
|
|
@@ -228,10 +228,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli composer audit
|
|
|
228
228
|
|
|
229
229
|
```bash
|
|
230
230
|
# Audit de sécurité Composer
|
|
231
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
231
|
+
docker run --rm -v $(pwd):/app php:8.5-cli composer audit
|
|
232
232
|
|
|
233
233
|
# Vérifier les versions Symfony
|
|
234
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
234
|
+
docker run --rm -v $(pwd):/app php:8.5-cli composer show symfony/* | grep "versions"
|
|
235
235
|
```
|
|
236
236
|
|
|
237
237
|
- [ ] Symfony à jour (dernière version LTS ou stable)
|
|
@@ -253,10 +253,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli composer show symfony/* | grep "versi
|
|
|
253
253
|
|
|
254
254
|
```bash
|
|
255
255
|
# Rechercher le traitement des données personnelles
|
|
256
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
256
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "email\|phone\|address" /app/src/Domain/Entity --include="*.php"
|
|
257
257
|
|
|
258
258
|
# Vérifier les mécanismes de consentement
|
|
259
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
259
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "consent\|gdpr" /app/src --include="*.php" -i
|
|
260
260
|
```
|
|
261
261
|
|
|
262
262
|
- [ ] Consentement utilisateur pour collecte de données
|
|
@@ -278,7 +278,7 @@ docker run --rm -v $(pwd):/app php:8.2-cli grep -r "consent\|gdpr" /app/src --in
|
|
|
278
278
|
|
|
279
279
|
```bash
|
|
280
280
|
# Vérifier la configuration des headers
|
|
281
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
281
|
+
docker run --rm -v $(pwd):/app php:8.5-cli cat /app/config/packages/framework.yaml | grep -A 10 "headers:"
|
|
282
282
|
```
|
|
283
283
|
|
|
284
284
|
- [ ] X-Content-Type-Options: nosniff
|
|
@@ -531,11 +531,11 @@ framework:
|
|
|
531
531
|
|
|
532
532
|
```bash
|
|
533
533
|
# Audit Composer
|
|
534
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
534
|
+
docker run --rm -v $(pwd):/app php:8.5-cli composer audit
|
|
535
535
|
|
|
536
536
|
# Security Checker Symfony
|
|
537
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
538
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
537
|
+
docker run --rm -v $(pwd):/app php:8.5-cli composer require --dev symfony/security-checker
|
|
538
|
+
docker run --rm -v $(pwd):/app php:8.5-cli ./vendor/bin/security-checker security:check
|
|
539
539
|
|
|
540
540
|
# PHPStan pour détecter problèmes de sécurité
|
|
541
541
|
docker run --rm -v $(pwd):/app phpstan/phpstan analyse src --level=9
|
|
@@ -557,26 +557,26 @@ docker run --rm -v $(pwd):/usr/src sonarqube:latest sonar-scanner
|
|
|
557
557
|
|
|
558
558
|
```bash
|
|
559
559
|
# Audit des dépendances
|
|
560
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
560
|
+
docker run --rm -v $(pwd):/app php:8.5-cli composer audit
|
|
561
561
|
|
|
562
562
|
# Check les secrets dans le code
|
|
563
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
563
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -rE "(password|secret|api_key|token).*=.*['\"]" /app/src --include="*.php"
|
|
564
564
|
|
|
565
565
|
# Check CSRF protection
|
|
566
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
566
|
+
docker run --rm -v $(pwd):/app php:8.5-cli cat /app/config/packages/framework.yaml | grep csrf
|
|
567
567
|
|
|
568
568
|
# Check les Voters
|
|
569
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
569
|
+
docker run --rm -v $(pwd):/app php:8.5-cli find /app/src -name "*Voter.php"
|
|
570
570
|
|
|
571
571
|
# Check mode debug
|
|
572
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
572
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep "APP_DEBUG" /app/.env
|
|
573
573
|
|
|
574
574
|
# Check les requêtes SQL
|
|
575
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
575
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "createNativeQuery\|createQuery" /app/src --include="*.php"
|
|
576
576
|
|
|
577
577
|
# Security Checker
|
|
578
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
579
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
578
|
+
docker run --rm -v $(pwd):/app php:8.5-cli composer require --dev symfony/security-checker
|
|
579
|
+
docker run --rm -v $(pwd):/app php:8.5-cli ./vendor/bin/security-checker security:check composer.lock
|
|
580
580
|
```
|
|
581
581
|
|
|
582
582
|
## IMPORTANT
|
|
@@ -32,7 +32,7 @@ Analysis la structure du dossier tests/ :
|
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
# Lister la structure des tests
|
|
35
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
35
|
+
docker run --rm -v $(pwd):/app php:8.5-cli find /app/tests -type d
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
#### Organisation des Tests (3 points)
|
|
@@ -56,10 +56,10 @@ Exécute les tests unitaires :
|
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
# Exécuter les tests unitaires uniquement
|
|
59
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
59
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit tests/Unit --testdox
|
|
60
60
|
|
|
61
61
|
# Compter les tests unitaires
|
|
62
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
62
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit tests/Unit --list-tests | wc -l
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
#### Tests Unitaires Domain (7 points)
|
|
@@ -86,7 +86,7 @@ Exécute les tests d'intégration :
|
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
88
|
# Exécuter les tests d'intégration
|
|
89
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
89
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit tests/Integration --testdox
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
#### Tests d'Intégration Infrastructure (5 points)
|
|
@@ -113,10 +113,10 @@ Exécute les tests fonctionnels :
|
|
|
113
113
|
|
|
114
114
|
```bash
|
|
115
115
|
# Exécuter les tests fonctionnels
|
|
116
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
116
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit tests/Functional --testdox
|
|
117
117
|
|
|
118
118
|
# Vérifier si Behat est installé
|
|
119
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
119
|
+
docker run --rm -v $(pwd):/app php:8.5-cli test -f /app/vendor/bin/behat && echo "✅ Behat trouvé" || echo "⚠️ Behat manquant"
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
#### Tests Fonctionnels (5 points)
|
|
@@ -143,10 +143,10 @@ Génère le rapport de couverture :
|
|
|
143
143
|
|
|
144
144
|
```bash
|
|
145
145
|
# Générer la couverture de code (nécessite xdebug ou pcov)
|
|
146
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
146
|
+
docker run --rm -v $(pwd):/app php:8.5-cli php -d memory_limit=-1 /app/vendor/bin/phpunit --coverage-text --coverage-html=/app/var/coverage
|
|
147
147
|
|
|
148
148
|
# Afficher le résumé de couverture
|
|
149
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
149
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit --coverage-text | grep "Lines:"
|
|
150
150
|
```
|
|
151
151
|
|
|
152
152
|
#### Couverture de Code (5 points)
|
|
@@ -193,7 +193,7 @@ Exécute les tests de mutation :
|
|
|
193
193
|
|
|
194
194
|
```bash
|
|
195
195
|
# Vérifier si Infection est installé
|
|
196
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
196
|
+
docker run --rm -v $(pwd):/app php:8.5-cli test -f /app/vendor/bin/infection && echo "✅ Infection trouvé" || echo "❌ Infection manquant"
|
|
197
197
|
|
|
198
198
|
# Exécuter Infection
|
|
199
199
|
docker run --rm -v $(pwd):/app infection/infection --min-msi=70 --min-covered-msi=80 --threads=4
|
|
@@ -416,28 +416,28 @@ CI/CD :
|
|
|
416
416
|
|
|
417
417
|
```bash
|
|
418
418
|
# Exécuter tous les tests
|
|
419
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
419
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit
|
|
420
420
|
|
|
421
421
|
# Tests unitaires uniquement
|
|
422
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
422
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit tests/Unit
|
|
423
423
|
|
|
424
424
|
# Tests avec couverture
|
|
425
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
425
|
+
docker run --rm -v $(pwd):/app php:8.5-cli php -d xdebug.mode=coverage /app/vendor/bin/phpunit --coverage-text
|
|
426
426
|
|
|
427
427
|
# Infection (mutation testing)
|
|
428
428
|
docker run --rm -v $(pwd):/app infection/infection --threads=4 --min-msi=70
|
|
429
429
|
|
|
430
430
|
# Behat (tests BDD)
|
|
431
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
431
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/behat
|
|
432
432
|
|
|
433
433
|
# Lister tous les tests
|
|
434
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
434
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit --list-tests
|
|
435
435
|
|
|
436
436
|
# Exécuter un test spécifique
|
|
437
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
437
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit tests/Unit/Domain/Entity/UserTest.php
|
|
438
438
|
|
|
439
439
|
# Tests avec sortie détaillée
|
|
440
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
440
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpunit --testdox
|
|
441
441
|
```
|
|
442
442
|
|
|
443
443
|
## IMPORTANT
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
## Princípios Gerais
|
|
6
6
|
|
|
7
|
-
###
|
|
7
|
+
### PER-CS 3.0 + Symfony Coding Standards
|
|
8
8
|
|
|
9
9
|
O projeto segue estritamente:
|
|
10
|
-
1. **
|
|
10
|
+
1. **PER-CS 3.0**: Padrão PHP oficial
|
|
11
11
|
2. **@Symfony**: Convenções Symfony
|
|
12
12
|
3. **@Symfony:risky**: Regras estritas Symfony
|
|
13
13
|
4. **@PHP85Migration**: Modernização PHP 8.5+ (property hooks, pipe operator, `#[\NoDiscard]`)
|
|
@@ -311,7 +311,7 @@ Configuration PHP-CS-Fixer :
|
|
|
311
311
|
|
|
312
312
|
## Indentation et Formatage
|
|
313
313
|
|
|
314
|
-
### Regles
|
|
314
|
+
### Regles PER-CS 3.0
|
|
315
315
|
|
|
316
316
|
```php
|
|
317
317
|
<?php
|
|
@@ -398,7 +398,7 @@ Voir `.claude/checklists/pre-commit.md` pour checklist complete.
|
|
|
398
398
|
|
|
399
399
|
## References
|
|
400
400
|
|
|
401
|
-
- **
|
|
401
|
+
- **PER-CS 3.0** : https://www.php-fig.org/per/coding-style/
|
|
402
402
|
- **Symfony Coding Standards** : https://symfony.com/doc/current/contributing/code/standards.html
|
|
403
403
|
- **PHP-CS-Fixer** : https://github.com/PHP-CS-Fixer/PHP-CS-Fixer
|
|
404
404
|
- **PHPStan** : https://phpstan.org/
|
|
@@ -548,8 +548,6 @@ CMD ["php-fpm"]
|
|
|
548
548
|
### docker-compose.yml (Production-ready)
|
|
549
549
|
|
|
550
550
|
```yaml
|
|
551
|
-
version: '3.8'
|
|
552
|
-
|
|
553
551
|
services:
|
|
554
552
|
# PHP-FPM
|
|
555
553
|
php:
|
|
@@ -668,8 +666,6 @@ networks:
|
|
|
668
666
|
### compose.override.yaml (Local)
|
|
669
667
|
|
|
670
668
|
```yaml
|
|
671
|
-
version: '3.8'
|
|
672
|
-
|
|
673
669
|
# Overrides locaux (gitignored)
|
|
674
670
|
services:
|
|
675
671
|
php:
|
|
@@ -175,6 +175,8 @@ Usage :
|
|
|
175
175
|
$this->translator->trans('client.created', [], 'messages', $locale);
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
+
Messages pluriels/genrés : ICU MessageFormat (MF1 via le domaine `+intl-icu` de Symfony) ; **MessageFormat 2.0** est stable dans CLDR 47 (mars 2025) — vérifier le support de la bibliothèque avant de migrer.
|
|
179
|
+
|
|
178
180
|
## Checklist i18n
|
|
179
181
|
|
|
180
182
|
- [ ] Country enum utilisé partout
|
|
@@ -188,3 +188,4 @@ final class MessengerEventSubscriber implements EventSubscriberInterface
|
|
|
188
188
|
- [ ] Workers supervisord en prod
|
|
189
189
|
- [ ] Monitoring des failed messages
|
|
190
190
|
- [ ] Tests avec `messenger:consume --limit=1`
|
|
191
|
+
- [ ] Mensagens expostas a outros sistemas documentadas com AsyncAPI 3.x (3.1.0)
|
|
@@ -517,7 +517,7 @@ Para 1 EPIC, 5 US, ~25 tarefas:
|
|
|
517
517
|
| **Tempo total** | **~120 min** | **~55 min** | **~2.2x** |
|
|
518
518
|
| Custo total* | ~$28 | ~$17 | **-38%** |
|
|
519
519
|
|
|
520
|
-
*Economia de custo porque Sonnet ($
|
|
520
|
+
*Economia de custo porque Sonnet 5.5 ($2/$10/M) trata a maior parte do trabalho vs Opus 5.5 ($4/$20/M) no modo sequencial.
|
|
521
521
|
|
|
522
522
|
## Expectativas de Performance
|
|
523
523
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
**Escopo**: apenas funcionalidades da plataforma agnósticas de framework — vercel.json, Functions, ISR, Cron, Storage. Explicitamente não cobre Next.js, nem o adaptador de deploy próprio de qualquer outro framework.
|
|
10
10
|
|
|
11
|
-
> **Nota:** Vercel (esta stack) cobre apenas a **superfície da plataforma de deployment agnóstica de framework**: configuração do `vercel.json` (rewrites, redirects, headers, regions), Serverless Functions no runtime Node.js / Fluid Compute, primitivas de cache ISR, Cron Jobs, Vercel Storage (Blob nativo; Postgres/KV via Marketplace — Neon/Upstash), Analytics/Speed Insights, e o workflow de variáveis de ambiente/Preview Deployment. Esta **não** é uma stack Next.js — o Next.js em si está fora de escopo e não é uma tecnologia claude-craft suportada (não existe namespace `/nextjs:*`). Padrões de roteamento, renderização ou data-fetching específicos de framework pertencem à stack própria de cada framework (`/react:*`, `/vuejs:*`, `/angular:*`) — consulte o `tooling.md` dessa stack para saber como ela se integra ao build output da Vercel. Além disso, o Edge Runtime (`export const runtime = 'edge'`)
|
|
11
|
+
> **Nota:** Vercel (esta stack) cobre apenas a **superfície da plataforma de deployment agnóstica de framework**: configuração do `vercel.json` (rewrites, redirects, headers, regions), Serverless Functions no runtime Node.js / Fluid Compute, primitivas de cache ISR, Cron Jobs, Vercel Storage (Blob nativo; Postgres/KV via Marketplace — Neon/Upstash), Analytics/Speed Insights, e o workflow de variáveis de ambiente/Preview Deployment. Esta **não** é uma stack Next.js — o Next.js em si está fora de escopo e não é uma tecnologia claude-craft suportada (não existe namespace `/nextjs:*`). Padrões de roteamento, renderização ou data-fetching específicos de framework pertencem à stack própria de cada framework (`/react:*`, `/vuejs:*`, `/angular:*`) — consulte o `tooling.md` dessa stack para saber como ela se integra ao build output da Vercel. Além disso, o Edge Runtime (`export const runtime = 'edge'`) **não é recomendado pela Vercel**, que prefere o Fluid Compute no runtime Node.js; esta stack documenta o Edge Runtime apenas para ajudar a identificar e migrar código legado, não como um padrão recomendado para código novo.
|
|
12
12
|
|
|
13
13
|
### Estrutura do Projeto
|
|
14
14
|
```
|
|
@@ -38,7 +38,7 @@ Ver `rules/02-architecture.md` para os padrões completos.
|
|
|
38
38
|
| Regra | Motivo |
|
|
39
39
|
|------|--------|
|
|
40
40
|
| vercel.json validado contra `$schema` | Detecta globs/chaves com erro de digitação antes de falharem silenciosamente no momento do deploy |
|
|
41
|
-
| Node.js/Fluid Compute é o runtime padrão | O Edge Runtime (`runtime: 'edge'`) está
|
|
41
|
+
| Node.js/Fluid Compute é o runtime padrão | O Edge Runtime (`runtime: 'edge'`) está desaconselhado — apenas alvo de migração legado |
|
|
42
42
|
| Variáveis de ambiente nunca hardcoded ou versionadas | Segredos pertencem ao armazenamento de variáveis de ambiente da Vercel, com escopo por ambiente |
|
|
43
43
|
| Endpoints de Cron verificam o header do segredo | Um caminho de cron desprotegido pode ser acionado por qualquer pessoa que o descubra |
|
|
44
44
|
| Cobertura de 80%+ na lógica dos handlers | Garantia de qualidade para a lógica de negócio das Functions e do middleware |
|
|
@@ -208,9 +208,9 @@ Alguma Function declara export const config = { runtime: 'edge' } (ou
|
|
|
208
208
|
"runtime": "edge" no bloco functions do vercel.json)?
|
|
209
209
|
SIM --> Essa Function foi recentemente adicionada ou modificada (não puramente
|
|
210
210
|
código legado intocado)?
|
|
211
|
-
SIM --> MAIOR: o Edge Runtime
|
|
211
|
+
SIM --> MAIOR: o Edge Runtime não é recomendado pela Vercel — migrar para o
|
|
212
212
|
Fluid Compute no runtime Node.js (padrão) para acesso total à API Node,
|
|
213
|
-
cold starts com cache de bytecode (Node
|
|
213
|
+
cold starts com cache de bytecode (Node 22+), e precificação Active CPU
|
|
214
214
|
NÃO --> MENOR: sinalizar como dívida de migração legada, não bloquear código não modificado
|
|
215
215
|
NÃO --> A Function executa no padrão Node.js/Fluid Compute --> continuar para a
|
|
216
216
|
verificação da versão do Node
|
|
@@ -222,7 +222,7 @@ Alguma Function declara export const config = { runtime: 'edge' } (ou
|
|
|
222
222
|
A versão do Node.js está fixada (package.json "engines.node", ou a configuração
|
|
223
223
|
Node.js Version do projeto na Vercel) para 20.x ou mais recente?
|
|
224
224
|
NÃO --> MENOR: uma versão do Node não fixada/antiga abre mão da melhoria de cold-start
|
|
225
|
-
por cache de bytecode do Fluid Compute (específica do Node
|
|
225
|
+
por cache de bytecode do Fluid Compute (específica do Node 22+) e arrisca uma
|
|
226
226
|
deriva silenciosa de runtime entre redeploys
|
|
227
227
|
SIM --> OK
|
|
228
228
|
```
|
|
@@ -244,7 +244,7 @@ de usá-lo?
|
|
|
244
244
|
|
|
245
245
|
**Edge Runtime em código novo/modificado:**
|
|
246
246
|
```typescript
|
|
247
|
-
// PROIBIDO — Edge Runtime declarado em uma Function recém-adicionada: padrão
|
|
247
|
+
// PROIBIDO — Edge Runtime declarado em uma Function recém-adicionada: padrão desaconselhado
|
|
248
248
|
export const config = { runtime: 'edge' };
|
|
249
249
|
|
|
250
250
|
export default function handler(req: Request) {
|
|
@@ -253,7 +253,7 @@ export default function handler(req: Request) {
|
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
// CORRETO — padrão Node.js/Fluid Compute, acesso total à API Node, cold starts mais
|
|
256
|
-
// rápidos no Node
|
|
256
|
+
// rápidos no Node 22+ via cache de bytecode
|
|
257
257
|
export const config = { maxDuration: 10 };
|
|
258
258
|
|
|
259
259
|
export default function handler(req: VercelRequest, res: VercelResponse) {
|
|
@@ -279,7 +279,7 @@ export default function handler(req: VercelRequest, res: VercelResponse) {
|
|
|
279
279
|
```
|
|
280
280
|
```typescript
|
|
281
281
|
// api/legacy.ts
|
|
282
|
-
// TODO(JIRA-1234): migrar para fora do Edge Runtime —
|
|
282
|
+
// TODO(JIRA-1234): migrar para fora do Edge Runtime — não recomendado pela Vercel, ver Fluid Compute
|
|
283
283
|
export const config = { runtime: 'edge' };
|
|
284
284
|
```
|
|
285
285
|
|
|
@@ -332,7 +332,7 @@ export default async function handler(req: VercelRequest, res: VercelResponse) {
|
|
|
332
332
|
|---------|----------|--------------|
|
|
333
333
|
| Runtime | Padrão Node.js/Fluid Compute | `runtime: 'edge'` em código novo/modificado |
|
|
334
334
|
| Edge Runtime legado | Marcador de migração registrado (TODO + referência de issue) | Edge Runtime silencioso e não sinalizado deixado em produção |
|
|
335
|
-
| Versão do Node | Fixada em 20
|
|
335
|
+
| Versão do Node | Fixada em 22.x ou 24.x (Node 20 está descontinuado na Vercel desde 2026-10-01) (`engines.node` ou config do projeto) | Não fixada, com deriva no padrão |
|
|
336
336
|
| Input do handler | Validado/parseado (zod, guarda manual) antes de usar | `req.body`/`req.query` bruto usado sem verificação |
|
|
337
337
|
| Output do handler | Status explícito + body tipado em todo caminho | 200 implícito, formato de erro inconsistente |
|
|
338
338
|
| Consciência de cold-start | Imports pesados carregados de forma lazy/adiada quando não sempre necessários | Toda dependência importada de forma eager no topo do módulo |
|
|
@@ -802,7 +802,7 @@ describe('api/cron/daily', () => {
|
|
|
802
802
|
| Tópico | O Que Verificar |
|
|
803
803
|
|-------|-----------|
|
|
804
804
|
| **Fluid Compute** | Confirmar que as Functions usam Fluid Compute por padrão (precificação Active CPU), não o faturamento legado de Serverless Functions com concorrência fixa |
|
|
805
|
-
| **
|
|
805
|
+
| **Edge Runtime desaconselhado** | Qualquer `runtime: 'edge'` encontrado deve carregar uma referência de ticket de migração, nunca ser apresentado como o padrão recomendado para código novo |
|
|
806
806
|
| **Pacotes de Storage descontinuados** | Imports de `@vercel/kv`/`@vercel/postgres` são um achado MAIOR independentemente de quando foram adicionados — sinalizar para migração ao Marketplace (Neon/Upstash) |
|
|
807
807
|
| **Primitiva de cache ISR vs headers do vercel.json** | A revalidação nativa do framework e os `headers` do vercel.json nunca devem visar a mesma rota para `Cache-Control` |
|
|
808
808
|
| **Limites do plano de Cron** | O plano Hobby limita os Cron Jobs a 1/dia — verificar se o schedule declarado corresponde ao plano realmente em uso |
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
**Stack**: Vite {{VITE_VERSION}}, TypeScript {{TS_VERSION}}
|
|
8
8
|
|
|
9
|
-
**Escopo**: uso do Vite agnóstico de framework apenas — aplicações vanilla JS/TS, criação de bibliotecas (build.lib), aplicações multi-página (
|
|
9
|
+
**Escopo**: uso do Vite agnóstico de framework apenas — aplicações vanilla JS/TS, criação de bibliotecas (build.lib), aplicações multi-página (rolldownOptions.input), entradas Workers/WASM. Não cobre configuração de dev-server específica de React/Vue/Angular/Svelte — consulte o tooling.md próprio dessa stack.
|
|
10
10
|
|
|
11
11
|
### Estrutura do Projeto
|
|
12
12
|
```
|
|
@@ -32,7 +32,7 @@ project-root/
|
|
|
32
32
|
### Arquitetura: {{ARCHITECTURE_PATTERN}}
|
|
33
33
|
- **Ponto de entrada**: `index.html` na raiz do projeto (ou `root`), nunca dentro de `public/`
|
|
34
34
|
- **Modo biblioteca**: `build.lib` + `vite-plugin-dts` para pacotes publicados no npm
|
|
35
|
-
- **Multi-página**: `
|
|
35
|
+
- **Multi-página**: top-level `input` nomeando explicitamente cada entrada HTML
|
|
36
36
|
- **Workers/WASM**: `new Worker(new URL(...), { type: 'module' })`, sufixos `?init`/`?url`
|
|
37
37
|
|
|
38
38
|
Ver `rules/02-architecture.md` para os padrões completos.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vite-reviewer
|
|
3
|
-
description: Especialista em revisão de código Vite 8.x agnóstico de framework — aplicações vanilla JS/TS, criação de bibliotecas (build.lib), aplicações multi-página (
|
|
3
|
+
description: Especialista em revisão de código Vite 8.x agnóstico de framework — aplicações vanilla JS/TS, criação de bibliotecas (build.lib), aplicações multi-página (rolldownOptions.input), entradas Workers/WASM, configuração de plugins
|
|
4
4
|
model: haiku
|
|
5
5
|
effort: low
|
|
6
6
|
maxTurns: 6
|
|
@@ -14,13 +14,13 @@ skills: [solid-principles, testing, security]
|
|
|
14
14
|
|
|
15
15
|
## Identidade
|
|
16
16
|
|
|
17
|
-
Sou um especialista em revisão de código Vite 8.x, agnóstico de framework por design. Meu escopo cobre o uso puro do Vite: aplicações vanilla JS/TS (index.html como entrada de origem, nunca dentro de public/), criação de bibliotecas via build.lib e vite-plugin-dts, aplicações multi-página via build.
|
|
17
|
+
Sou um especialista em revisão de código Vite 8.x, agnóstico de framework por design. Meu escopo cobre o uso puro do Vite: aplicações vanilla JS/TS (index.html como entrada de origem, nunca dentro de public/), criação de bibliotecas via build.lib e vite-plugin-dts, aplicações multi-página via build.rolldownOptions.input, e pontos de entrada Workers/WASM. Eu NÃO cubro integrações do Vite específicas do React, Vue, Angular ou Svelte -- essas stacks já documentam sua própria integração de dev-server no respectivo arquivo tooling.md. Não realizo uma auditoria genérica -- detecto o que quebra o grafo de módulos, incha o bundle ou complexifica desnecessariamente uma configuração Vite.
|
|
18
18
|
|
|
19
19
|
## Sistema de Pontuação (100 pontos)
|
|
20
20
|
|
|
21
21
|
| Categoria | Pontos | Foco |
|
|
22
22
|
|----------|--------|------|
|
|
23
|
-
| Config e Arquitetura Vite | 30 | vite.config.ts, index.html, build.lib,
|
|
23
|
+
| Config e Arquitetura Vite | 30 | vite.config.ts, index.html, build.lib, rolldownOptions.input, plugins |
|
|
24
24
|
| TypeScript e Qualidade | 20 | tsconfig strict, moduleResolution bundler, vite-plugin-dts |
|
|
25
25
|
| Testes | 25 | Config/cobertura do Vitest, testes sobre o build publicado |
|
|
26
26
|
| Build Output e Performance | 25 | Tamanho do bundle, tree-shaking, externalização, code-splitting |
|
|
@@ -49,7 +49,7 @@ O pacote é consumido por outros pacotes/aplicações (publicado no npm)?
|
|
|
49
49
|
SIM --> O build.lib está configurado?
|
|
50
50
|
NÃO --> CRÍTICO: sem build.lib, o Vite produz um bundle de aplicação (index.html
|
|
51
51
|
obrigatório, sem múltiplos formatos ESM/CJS, sem externalização de peer deps)
|
|
52
|
-
SIM --> O
|
|
52
|
+
SIM --> O rolldownOptions.external cobre todas as peerDependencies?
|
|
53
53
|
NÃO --> MAIOR: o runtime do framework hospedeiro será duplicado para o consumidor
|
|
54
54
|
SIM --> O vite-plugin-dts está configurado?
|
|
55
55
|
NÃO --> MAIOR: nenhuma tipagem publicada, pacote inutilizável em TypeScript strict
|
|
@@ -62,7 +62,7 @@ O pacote é consumido por outros pacotes/aplicações (publicado no npm)?
|
|
|
62
62
|
```
|
|
63
63
|
O projeto tem várias páginas HTML distintas (não apenas rotas client-side)?
|
|
64
64
|
NÃO --> SPA clássica: um único index.html, roteamento client-side
|
|
65
|
-
SIM --> O build.
|
|
65
|
+
SIM --> O build.rolldownOptions.input é um objeto nomeando cada página?
|
|
66
66
|
NÃO --> MAIOR: páginas secundárias não são construídas ou dependem de um
|
|
67
67
|
caminho de carregamento manual e não otimizado
|
|
68
68
|
SIM --> As páginas compartilham dependências pesadas?
|
|
@@ -133,7 +133,7 @@ export default defineConfig({
|
|
|
133
133
|
formats: ['es', 'cjs'],
|
|
134
134
|
fileName: (format) => `my-lib.${format}.js`,
|
|
135
135
|
},
|
|
136
|
-
|
|
136
|
+
rolldownOptions: {
|
|
137
137
|
// Nunca empacotar peer dependencies
|
|
138
138
|
external: ['react', 'react-dom'],
|
|
139
139
|
output: {
|
|
@@ -144,7 +144,7 @@ export default defineConfig({
|
|
|
144
144
|
});
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
**
|
|
147
|
+
**rolldownOptions.input para aplicações multi-página:**
|
|
148
148
|
```typescript
|
|
149
149
|
// RUIM: páginas secundárias não declaradas na config
|
|
150
150
|
export default defineConfig({});
|
|
@@ -155,7 +155,7 @@ import { defineConfig } from 'vite';
|
|
|
155
155
|
|
|
156
156
|
export default defineConfig({
|
|
157
157
|
build: {
|
|
158
|
-
|
|
158
|
+
rolldownOptions: {
|
|
159
159
|
input: {
|
|
160
160
|
main: resolve(__dirname, 'index.html'),
|
|
161
161
|
about: resolve(__dirname, 'pages/about.html'),
|
|
@@ -225,8 +225,10 @@ export function vitePluginMyTransform(): Plugin {
|
|
|
225
225
|
| index.html | Na raiz de `root`, transformado como entrada de origem | Copiado para public/ |
|
|
226
226
|
| public/ | Apenas assets estáticos (favicon, robots.txt) | HTML/JS de origem importado a partir de public/ |
|
|
227
227
|
| build.lib | Configurado para todo pacote publicado | Bundle de aplicação publicado como biblioteca |
|
|
228
|
-
|
|
|
229
|
-
|
|
|
228
|
+
| rolldownOptions.external | Peer deps externalizadas | Framework hospedeiro empacotado dentro da biblioteca |
|
|
229
|
+
| rolldownOptions.input | Objeto nomeando cada página HTML (multi-página) | Carregamento manual, não otimizado |
|
|
230
|
+
| rollupOptions / worker.rollupOptions / optimizeDeps.esbuildOptions | Equivalentes rolldownOptions (obsoletos desde o Vite 8) | Aliases obsoletos mantidos na config |
|
|
231
|
+
| Node.js | `^20.19.0` ou `>=22.12.0` (requisito do Vite 8) | Node 18 ou 20 < 20.19 |
|
|
230
232
|
| Plugins customizados | Prefixo vite-plugin-*, propriedade `name` explícita | Plugin anônimo sem nome |
|
|
231
233
|
| Variáveis de ambiente | Prefixo VITE_ para exposição no cliente | Segredos sem prefixo referenciados no lado cliente |
|
|
232
234
|
|
|
@@ -237,7 +239,7 @@ export function vitePluginMyTransform(): Plugin {
|
|
|
237
239
|
| vite.config.ts correto (defineConfig, aliases sincronizados com tsconfig) | 8 |
|
|
238
240
|
| index.html na raiz da pasta correta, nunca dentro de public/ | 6 |
|
|
239
241
|
| build.lib corretamente configurado (entry, formats, external, vite-plugin-dts) | 8 |
|
|
240
|
-
|
|
|
242
|
+
| rolldownOptions.input para multi-página, plugins nomeados conforme a convenção vite-plugin-* | 8 |
|
|
241
243
|
|
|
242
244
|
---
|
|
243
245
|
|
|
@@ -441,7 +443,7 @@ O package.json declara "sideEffects": false?
|
|
|
441
443
|
### Árvore de Decisão: Code-splitting Multi-página
|
|
442
444
|
|
|
443
445
|
```
|
|
444
|
-
A aplicação tem várias páginas (
|
|
446
|
+
A aplicação tem várias páginas (rolldownOptions.input)?
|
|
445
447
|
SIM --> O manualChunks isola um chunk de vendor compartilhado?
|
|
446
448
|
NÃO --> MAIOR: cada página duplica as mesmas dependências pesadas
|
|
447
449
|
SIM --> O maior chunk lazy excede 80KB gzip?
|
|
@@ -486,14 +488,14 @@ export { formatDate, parseDate } from './utils';
|
|
|
486
488
|
// RUIM: o framework hospedeiro é empacotado dentro da biblioteca publicada
|
|
487
489
|
export default defineConfig({
|
|
488
490
|
build: { lib: { entry: 'src/index.ts', formats: ['es'] } },
|
|
489
|
-
// sem
|
|
491
|
+
// sem rolldownOptions.external
|
|
490
492
|
});
|
|
491
493
|
|
|
492
494
|
// BOM: peer deps explicitamente externalizadas
|
|
493
495
|
export default defineConfig({
|
|
494
496
|
build: {
|
|
495
497
|
lib: { entry: 'src/index.ts', formats: ['es', 'cjs'] },
|
|
496
|
-
|
|
498
|
+
rolldownOptions: {
|
|
497
499
|
external: (id) => /^(react|react-dom|vue)/.test(id),
|
|
498
500
|
},
|
|
499
501
|
},
|
|
@@ -507,7 +509,7 @@ export default defineConfig({
|
|
|
507
509
|
|
|
508
510
|
// BOM: chunk de vendor compartilhado entre todas as páginas
|
|
509
511
|
build: {
|
|
510
|
-
|
|
512
|
+
rolldownOptions: {
|
|
511
513
|
output: {
|
|
512
514
|
manualChunks(id) {
|
|
513
515
|
if (id.includes('node_modules')) return 'vendor';
|
|
@@ -564,8 +566,8 @@ build: {
|
|
|
564
566
|
|
|
565
567
|
### Fase 2: Configuração Específica do Vite (15 min)
|
|
566
568
|
|
|
567
|
-
1. Se biblioteca: verificar build.lib, formats,
|
|
568
|
-
2. Se multi-página: verificar
|
|
569
|
+
1. Se biblioteca: verificar build.lib, formats, rolldownOptions.external, vite-plugin-dts
|
|
570
|
+
2. Se multi-página: verificar rolldownOptions.input, manualChunks
|
|
569
571
|
3. Se Workers/WASM: verificar new URL(...import.meta.url), sufixos ?init/?url
|
|
570
572
|
4. Verificar a convenção de nomeação de plugins customizados (vite-plugin-*, propriedade name)
|
|
571
573
|
5. Verificar variáveis de ambiente (prefixo VITE_, nenhum segredo exposto no lado cliente)
|