@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
|
@@ -897,7 +897,7 @@ Antes de mergear el refactoring:
|
|
|
897
897
|
- [ ] Código más simple (KISS)
|
|
898
898
|
- [ ] SOLID respetado
|
|
899
899
|
- [ ] PHPStan nivel 8 OK
|
|
900
|
-
- [ ] Código formateado (
|
|
900
|
+
- [ ] Código formateado (PER-CS 3.0)
|
|
901
901
|
- [ ] Commits atómicos (1 cambio = 1 commit)
|
|
902
902
|
- [ ] Mensaje de commit claro
|
|
903
903
|
- [ ] Documentación si refactoring mayor (ADR)
|
|
@@ -97,7 +97,7 @@ Ejecuta Deptrac para verificar las dependencias entre capas:
|
|
|
97
97
|
|
|
98
98
|
```bash
|
|
99
99
|
# Verificar si deptrac.yaml existe
|
|
100
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
100
|
+
docker run --rm -v $(pwd):/app php:8.5-cli test -f /app/deptrac.yaml && echo "✅ deptrac.yaml encontrado" || echo "❌ deptrac.yaml faltante"
|
|
101
101
|
|
|
102
102
|
# Ejecutar Deptrac
|
|
103
103
|
docker run --rm -v $(pwd):/app qossmic/deptrac analyse
|
|
@@ -221,16 +221,16 @@ Herramientas:
|
|
|
221
221
|
|
|
222
222
|
```bash
|
|
223
223
|
# Analizar la estructura del proyecto
|
|
224
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
224
|
+
docker run --rm -v $(pwd):/app php:8.5-cli find /app/src -type d -maxdepth 2
|
|
225
225
|
|
|
226
226
|
# Verificar las dependencias con Deptrac
|
|
227
227
|
docker run --rm -v $(pwd):/app qossmic/deptrac analyse --no-progress
|
|
228
228
|
|
|
229
229
|
# Listar las clases por namespace
|
|
230
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
230
|
+
docker run --rm -v $(pwd):/app php:8.5-cli find /app/src -name "*.php" -exec grep -l "namespace" {} \;
|
|
231
231
|
|
|
232
232
|
# Verificar la presencia de anotaciones Doctrine en Domain
|
|
233
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
233
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "@ORM" /app/src/Domain/ || echo "✅ No hay anotaciones ORM en Domain"
|
|
234
234
|
```
|
|
235
235
|
|
|
236
236
|
## IMPORTANTE
|
|
@@ -31,10 +31,10 @@ Ejecuta PHP_CodeSniffer para verificar el respeto de PSR-12:
|
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
# Verificar si phpcs está instalado
|
|
34
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
34
|
+
docker run --rm -v $(pwd):/app php:8.5-cli test -f /app/vendor/bin/phpcs && echo "✅ phpcs encontrado" || echo "❌ phpcs faltante"
|
|
35
35
|
|
|
36
36
|
# Ejecutar phpcs
|
|
37
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
37
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpcs --standard=PSR12 src/ --report=summary
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
#### Estándares PSR-12 (5 puntos)
|
|
@@ -58,7 +58,7 @@ Ejecuta PHPStan al nivel 10:
|
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
60
|
# Verificar si PHPStan está instalado
|
|
61
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
61
|
+
docker run --rm -v $(pwd):/app php:8.5-cli test -f /app/vendor/bin/phpstan && echo "✅ PHPStan encontrado" || echo "❌ PHPStan faltante"
|
|
62
62
|
|
|
63
63
|
# Ejecutar PHPStan nivel 10
|
|
64
64
|
docker run --rm -v $(pwd):/app phpstan/phpstan analyse src --level=10 --error-format=table
|
|
@@ -100,10 +100,10 @@ Verifica el uso estricto de tipos:
|
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
102
|
# Verificar declare(strict_types=1)
|
|
103
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
103
|
+
docker run --rm -v $(pwd):/app php:8.5-cli grep -r "declare(strict_types=1)" /app/src --include="*.php" | wc -l
|
|
104
104
|
|
|
105
105
|
# Contar el número de archivos PHP
|
|
106
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
106
|
+
docker run --rm -v $(pwd):/app php:8.5-cli find /app/src -name "*.php" | wc -l
|
|
107
107
|
|
|
108
108
|
# Los dos números deben ser idénticos
|
|
109
109
|
```
|
|
@@ -113,13 +113,13 @@ docker run --rm -v $(pwd):/app php:8.2-cli find /app/src -name "*.php" | wc -l
|
|
|
113
113
|
- [ ] `declare(strict_types=1)` en 100% de los archivos PHP
|
|
114
114
|
- [ ] Type hints en todos los parámetros de métodos públicos
|
|
115
115
|
- [ ] Type hints en todos los retornos de métodos públicos
|
|
116
|
-
- [ ] Type hints en todas las propiedades de clase
|
|
117
|
-
- [ ] Uso de union types
|
|
116
|
+
- [ ] Type hints en todas las propiedades de clase
|
|
117
|
+
- [ ] Uso de union types en lugar de mixed
|
|
118
118
|
- [ ] No hay docblock @param/@return redundantes con los tipos nativos
|
|
119
|
-
- [ ] Uso de readonly para propiedades inmutables
|
|
119
|
+
- [ ] Uso de readonly para propiedades inmutables
|
|
120
120
|
- [ ] No hay supresión de errores con @phpstan-ignore
|
|
121
121
|
- [ ] Tipos estrictos en los arrays: array<string, int>
|
|
122
|
-
- [ ] Uso del tipo never para métodos que nunca retornan
|
|
122
|
+
- [ ] Uso del tipo never para métodos que nunca retornan
|
|
123
123
|
|
|
124
124
|
**Puntos obtenidos**: ___/5
|
|
125
125
|
|
|
@@ -130,7 +130,7 @@ Analiza la complejidad del código:
|
|
|
130
130
|
```bash
|
|
131
131
|
# Instalar phpmetrics si es necesario
|
|
132
132
|
# Analizar la complejidad
|
|
133
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
133
|
+
docker run --rm -v $(pwd):/app php:8.5-cli php -r "
|
|
134
134
|
require '/app/vendor/autoload.php';
|
|
135
135
|
// Análisis básico de complejidad
|
|
136
136
|
"
|
|
@@ -262,7 +262,7 @@ Ejemplos:
|
|
|
262
262
|
|
|
263
263
|
3. 🎯 [ACCIÓN RECOMENDADA] - Formatear el código según PSR-12
|
|
264
264
|
Impacto: ⭐⭐⭐ | Esfuerzo: 🔥
|
|
265
|
-
Comando: docker run --rm -v $(pwd):/app php:8.
|
|
265
|
+
Comando: docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpcbf --standard=PSR12 src/
|
|
266
266
|
|
|
267
267
|
=================================================
|
|
268
268
|
RECOMENDACIONES
|
|
@@ -305,10 +305,10 @@ CI/CD:
|
|
|
305
305
|
|
|
306
306
|
```bash
|
|
307
307
|
# Verificar PSR-12
|
|
308
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
308
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpcs --standard=PSR12 src/ --report=summary
|
|
309
309
|
|
|
310
310
|
# Corregir automáticamente PSR-12
|
|
311
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
311
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/phpcbf --standard=PSR12 src/
|
|
312
312
|
|
|
313
313
|
# PHPStan nivel 10
|
|
314
314
|
docker run --rm -v $(pwd):/app phpstan/phpstan analyse src --level=10 --error-format=table
|
|
@@ -317,10 +317,10 @@ docker run --rm -v $(pwd):/app phpstan/phpstan analyse src --level=10 --error-fo
|
|
|
317
317
|
docker run --rm -v $(pwd):/app phpstan/phpstan analyse src --level=10 --generate-baseline
|
|
318
318
|
|
|
319
319
|
# PHP CS Fixer
|
|
320
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
320
|
+
docker run --rm -v $(pwd):/app php:8.5-cli /app/vendor/bin/php-cs-fixer fix src --dry-run --diff
|
|
321
321
|
|
|
322
322
|
# Verificar declare(strict_types=1) en todos los archivos
|
|
323
|
-
docker run --rm -v $(pwd):/app php:8.
|
|
323
|
+
docker run --rm -v $(pwd):/app php:8.5-cli sh -c 'for f in $(find /app/src -name "*.php"); do grep -q "declare(strict_types=1)" "$f" || echo "❌ Faltante: $f"; done'
|
|
324
324
|
```
|
|
325
325
|
|
|
326
326
|
## IMPORTANTE
|
|
@@ -32,10 +32,10 @@ Verifica la configuración del Security Bundle:
|
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
# Verificar si symfony/security-bundle está instalado
|
|
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
|
# Listar los firewalls configurados
|
|
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
|
#### Configuración Security Bundle (5 puntos)
|
|
@@ -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
|
# Verificar el uso de consultas preparadas
|
|
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
|
# Buscar concatenaciones de consultas peligrosas
|
|
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 "✅ No se detectó concatenación SQL"
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
- [ ] Uso exclusivo de consultas preparadas (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
|
# Verificar la configuración de contraseñas
|
|
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
|
# Verificar la presencia 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 contraseña fuerte (argon2i o bcrypt con coste elevado)
|
|
@@ -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
|
# Verificar secretos en el código
|
|
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 "✅ No se encontraron secretos en el código"
|
|
114
114
|
|
|
115
115
|
# Verificar 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 "⚠️ Configuración HTTPS no encontrada"
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
- [ ] Secretos externalizados (.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
|
# Verificar los 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
|
# Verificar las anotaciones @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 para autorizaciones complejas
|
|
@@ -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
|
# Verificar el auto-escape de 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
|
# Verificar los |raw no seguros
|
|
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 "✅ No se detectó |raw"
|
|
167
167
|
```
|
|
168
168
|
|
|
169
169
|
- [ ] Auto-escape activado en 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
|
# Verificar la protección CSRF
|
|
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
|
- [ ] Protección CSRF activada globalmente
|
|
@@ -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
|
# Verificar el modo 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
|
# Verificar dependencias vulnerables
|
|
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 producción
|
|
@@ -228,10 +228,10 @@ docker run --rm -v $(pwd):/app php:8.2-cli composer audit
|
|
|
228
228
|
|
|
229
229
|
```bash
|
|
230
230
|
# Auditoría de seguridad 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
|
# Verificar versiones 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 actualizado (última versión LTS o estable)
|
|
@@ -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
|
# Buscar el tratamiento de datos personales
|
|
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
|
# Verificar los mecanismos de consentimiento
|
|
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
|
- [ ] Consentimiento del usuario para recolección de datos
|
|
@@ -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
|
# Verificar la configuración de cabeceras
|
|
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
|
# Auditoría 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 para detectar problemas de seguridad
|
|
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
|
# Auditoría de dependencias
|
|
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
|
# Verificar secretos en el código
|
|
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
|
# Verificar protección CSRF
|
|
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
|
# Verificar los 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
|
# Verificar modo 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
|
# Verificar consultas 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
|
## IMPORTANTE
|
|
@@ -32,7 +32,7 @@ Analizar la estructura del directorio tests/:
|
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
# Listar la estructura de las pruebas
|
|
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
|
#### Organización de las Pruebas (3 puntos)
|
|
@@ -56,10 +56,10 @@ Ejecutar las pruebas unitarias:
|
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
# Ejecutar solo las pruebas unitarias
|
|
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
|
# Contar las pruebas unitarias
|
|
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
|
#### Pruebas Unitarias del Dominio (7 puntos)
|
|
@@ -86,7 +86,7 @@ Ejecutar las pruebas de integración:
|
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
88
|
# Ejecutar las pruebas de integración
|
|
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
|
#### Pruebas de Integración de Infraestructura (5 puntos)
|
|
@@ -113,10 +113,10 @@ Ejecutar las pruebas funcionales:
|
|
|
113
113
|
|
|
114
114
|
```bash
|
|
115
115
|
# Ejecutar las pruebas funcionales
|
|
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
|
# Verificar si Behat está instalado
|
|
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 encontrado" || echo "⚠️ Behat ausente"
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
#### Pruebas Funcionales (5 puntos)
|
|
@@ -143,10 +143,10 @@ Generar el informe de cobertura:
|
|
|
143
143
|
|
|
144
144
|
```bash
|
|
145
145
|
# Generar la cobertura de código (requiere xdebug o 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
|
# Mostrar el resumen de cobertura
|
|
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
|
#### Cobertura de Código (5 puntos)
|
|
@@ -193,7 +193,7 @@ Ejecutar las pruebas de mutación:
|
|
|
193
193
|
|
|
194
194
|
```bash
|
|
195
195
|
# Verificar si Infection está instalado
|
|
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 encontrado" || echo "❌ Infection ausente"
|
|
197
197
|
|
|
198
198
|
# Ejecutar 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
|
# Ejecutar todas las pruebas
|
|
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
|
# Solo pruebas unitarias
|
|
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
|
# Pruebas con cobertura
|
|
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 (pruebas 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
|
# Listar todas las pruebas
|
|
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
|
# Ejecutar una prueba específica
|
|
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
|
# Pruebas con salida detallada
|
|
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
|
## IMPORTANTE
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
## Principios Generales
|
|
6
6
|
|
|
7
|
-
###
|
|
7
|
+
### PER-CS 3.0 + Symfony Coding Standards
|
|
8
8
|
|
|
9
9
|
El proyecto sigue estrictamente:
|
|
10
|
-
1. **
|
|
10
|
+
1. **PER-CS 3.0**: Estándar PHP oficial
|
|
11
11
|
2. **@Symfony**: Convenciones Symfony
|
|
12
12
|
3. **@Symfony:risky**: Reglas estrictas Symfony
|
|
13
13
|
4. **@PHP85Migration**: Modernización PHP 8.5+ (property hooks, pipe operator, `#[\NoDiscard]`)
|
|
@@ -311,7 +311,7 @@ Configuración PHP-CS-Fixer:
|
|
|
311
311
|
|
|
312
312
|
## Indentación y Formateo
|
|
313
313
|
|
|
314
|
-
### Reglas
|
|
314
|
+
### Reglas PER-CS 3.0
|
|
315
315
|
|
|
316
316
|
```php
|
|
317
317
|
<?php
|
|
@@ -398,7 +398,7 @@ Ver `.claude/checklists/pre-commit.md` para checklist completa.
|
|
|
398
398
|
|
|
399
399
|
## Referencias
|
|
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 locales (gitignored)
|
|
674
670
|
services:
|
|
675
671
|
php:
|
|
@@ -175,6 +175,8 @@ Uso:
|
|
|
175
175
|
$this->translator->trans('client.created', [], 'messages', $locale);
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
+
Mensajes con plurales/género: ICU MessageFormat (MF1 mediante el dominio `+intl-icu` de Symfony); **MessageFormat 2.0** es estable en CLDR 47 (marzo 2025) — verificar el soporte de la biblioteca antes de migrar.
|
|
179
|
+
|
|
178
180
|
## Checklist i18n
|
|
179
181
|
|
|
180
182
|
- [ ] Country enum utilizado en todas partes
|
|
@@ -188,3 +188,4 @@ final class MessengerEventSubscriber implements EventSubscriberInterface
|
|
|
188
188
|
- [ ] Workers supervisord en producción
|
|
189
189
|
- [ ] Monitoring de failed messages
|
|
190
190
|
- [ ] Tests con `messenger:consume --limit=1`
|
|
191
|
+
- [ ] Mensajes expuestos a otros sistemas documentados con AsyncAPI 3.x (3.1.0)
|
|
@@ -494,7 +494,7 @@ Para 1 EPIC, 5 US, ~25 tareas:
|
|
|
494
494
|
| **Tiempo total** | **~120 min** | **~55 min** | **~2.2x** |
|
|
495
495
|
| Costo total* | ~$28 | ~$17 | **-38%** |
|
|
496
496
|
|
|
497
|
-
*Ahorro de costos porque Sonnet ($
|
|
497
|
+
*Ahorro de costos porque Sonnet 5.5 ($2/$10/M) gestiona la mayoria del trabajo vs Opus 5.5 ($4/$20/M) en modo secuencial.
|
|
498
498
|
|
|
499
499
|
## Expectativas de rendimiento
|
|
500
500
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
**Alcance**: únicamente funcionalidades de plataforma agnósticas de framework — vercel.json, Functions, ISR, Cron, Storage. Explícitamente no cubre Next.js, ni el adaptador de despliegue propio de ningún framework.
|
|
10
10
|
|
|
11
|
-
> **Nota:** Vercel (este stack) cubre únicamente la **superficie de plataforma de despliegue agnóstica de framework**: la configuración de `vercel.json` (rewrites, redirects, headers, regions), las Serverless Functions en el runtime de Node.js / Fluid Compute, las primitivas de caché ISR, los Cron Jobs, Vercel Storage (Blob nativo; Postgres/KV vía Marketplace — Neon/Upstash), Analytics/Speed Insights, y el flujo de trabajo de variables de entorno/Preview Deployment. **No** es un stack de Next.js — Next.js en sí queda fuera de alcance y no es una tecnología soportada por claude-craft (no existe ningún namespace `/nextjs:*`). Los patrones de enrutamiento, renderizado o data-fetching específicos de cada framework pertenecen al stack propio de ese framework (`/react:*`, `/vuejs:*`, `/angular:*`) — consultar el `tooling.md` de ese stack para saber cómo se integra con el build output de Vercel. Además, el Edge Runtime (`export const runtime = 'edge'`)
|
|
11
|
+
> **Nota:** Vercel (este stack) cubre únicamente la **superficie de plataforma de despliegue agnóstica de framework**: la configuración de `vercel.json` (rewrites, redirects, headers, regions), las Serverless Functions en el runtime de Node.js / Fluid Compute, las primitivas de caché ISR, los Cron Jobs, Vercel Storage (Blob nativo; Postgres/KV vía Marketplace — Neon/Upstash), Analytics/Speed Insights, y el flujo de trabajo de variables de entorno/Preview Deployment. **No** es un stack de Next.js — Next.js en sí queda fuera de alcance y no es una tecnología soportada por claude-craft (no existe ningún namespace `/nextjs:*`). Los patrones de enrutamiento, renderizado o data-fetching específicos de cada framework pertenecen al stack propio de ese framework (`/react:*`, `/vuejs:*`, `/angular:*`) — consultar el `tooling.md` de ese stack para saber cómo se integra con el build output de Vercel. Además, el Edge Runtime (`export const runtime = 'edge'`) **no es recomendado por Vercel**, que prefiere Fluid Compute sobre el runtime de Node.js; este stack documenta el Edge Runtime únicamente para ayudar a identificar y migrar código legacy, no como un patrón recomendado para trabajo nuevo.
|
|
12
12
|
|
|
13
13
|
### Estructura del Proyecto
|
|
14
14
|
```
|
|
@@ -38,7 +38,7 @@ Ver `rules/02-architecture.md` para patrones completos.
|
|
|
38
38
|
| Regla | Motivo |
|
|
39
39
|
|------|--------|
|
|
40
40
|
| vercel.json validado contra `$schema` | Detecta globs/claves con errores tipográficos antes de que fallen silenciosamente en tiempo de deploy |
|
|
41
|
-
| Node.js/Fluid Compute es el runtime por defecto | El Edge Runtime (`runtime: 'edge'`) está
|
|
41
|
+
| Node.js/Fluid Compute es el runtime por defecto | El Edge Runtime (`runtime: 'edge'`) está desaconsejado — es únicamente un objetivo de migración legacy |
|
|
42
42
|
| Variables de entorno nunca hardcodeadas ni commiteadas | Los secretos pertenecen al almacén de variables de entorno de Vercel, con alcance por entorno |
|
|
43
43
|
| Los endpoints de Cron verifican el header secreto | Una ruta de cron sin protección puede ser disparada por cualquiera que la descubra |
|
|
44
44
|
| Cobertura del 80%+ en la lógica de los handlers | Garantía de calidad para la lógica de negocio de Functions y middleware |
|
|
@@ -211,9 +211,9 @@ Clasificar el proyecto: static-only / Functions-only / ISR-enabled / Cron-enable
|
|
|
211
211
|
"runtime": "edge" en el bloque functions de vercel.json)?
|
|
212
212
|
SÍ --> ¿Esta Function fue recién añadida o modificada recientemente (no es código
|
|
213
213
|
puramente legacy sin tocar)?
|
|
214
|
-
SÍ --> MAYOR: el Edge Runtime está
|
|
214
|
+
SÍ --> MAYOR: el Edge Runtime no está recomendado por Vercel — migrar a Fluid
|
|
215
215
|
Compute sobre el runtime de Node.js (por defecto) para acceso completo
|
|
216
|
-
a las APIs de Node, cold starts con caché de bytecode (Node
|
|
216
|
+
a las APIs de Node, cold starts con caché de bytecode (Node 22+), y
|
|
217
217
|
pricing por Active CPU
|
|
218
218
|
NO --> MENOR: marcar como deuda de migración legacy, no bloquear código no modificado
|
|
219
219
|
NO --> La Function corre en el runtime por defecto Node.js/Fluid Compute --> continuar
|
|
@@ -226,7 +226,7 @@ Clasificar el proyecto: static-only / Functions-only / ISR-enabled / Cron-enable
|
|
|
226
226
|
¿La versión de Node.js está fijada ("engines.node" en package.json, o el ajuste
|
|
227
227
|
Node.js Version del proyecto en Vercel) a 20.x o superior?
|
|
228
228
|
NO --> MENOR: una versión de Node no fijada/antigua renuncia a la mejora de cold-start
|
|
229
|
-
por caché de bytecode de Fluid Compute (específica de Node
|
|
229
|
+
por caché de bytecode de Fluid Compute (específica de Node 22+) y arriesga una
|
|
230
230
|
deriva silenciosa de runtime entre redeploys
|
|
231
231
|
SÍ --> OK
|
|
232
232
|
```
|
|
@@ -247,7 +247,7 @@ Node.js Version del proyecto en Vercel) a 20.x o superior?
|
|
|
247
247
|
|
|
248
248
|
**Edge Runtime en código nuevo/modificado:**
|
|
249
249
|
```typescript
|
|
250
|
-
// PROHIBIDO — Edge Runtime declarado en una Function recién añadida: patrón
|
|
250
|
+
// PROHIBIDO — Edge Runtime declarado en una Function recién añadida: patrón desaconsejado
|
|
251
251
|
export const config = { runtime: 'edge' };
|
|
252
252
|
|
|
253
253
|
export default function handler(req: Request) {
|
|
@@ -256,7 +256,7 @@ export default function handler(req: Request) {
|
|
|
256
256
|
}
|
|
257
257
|
|
|
258
258
|
// CORRECTO — runtime por defecto Node.js/Fluid Compute, acceso completo a las APIs de Node,
|
|
259
|
-
// cold starts más rápidos en Node
|
|
259
|
+
// cold starts más rápidos en Node 22+ vía caché de bytecode
|
|
260
260
|
export const config = { maxDuration: 10 };
|
|
261
261
|
|
|
262
262
|
export default function handler(req: VercelRequest, res: VercelResponse) {
|
|
@@ -282,7 +282,7 @@ export default function handler(req: VercelRequest, res: VercelResponse) {
|
|
|
282
282
|
```
|
|
283
283
|
```typescript
|
|
284
284
|
// api/legacy.ts
|
|
285
|
-
// TODO(JIRA-1234): migrar fuera del Edge Runtime —
|
|
285
|
+
// TODO(JIRA-1234): migrar fuera del Edge Runtime — no recomendado por Vercel, ver Fluid Compute
|
|
286
286
|
export const config = { runtime: 'edge' };
|
|
287
287
|
```
|
|
288
288
|
|
|
@@ -335,7 +335,7 @@ export default async function handler(req: VercelRequest, res: VercelResponse) {
|
|
|
335
335
|
|---------|----------|--------------|
|
|
336
336
|
| Runtime | Por defecto Node.js/Fluid Compute | `runtime: 'edge'` en código nuevo/modificado |
|
|
337
337
|
| Edge Runtime legacy | Marcador de migración ticketado (TODO + referencia de issue) | Edge Runtime silencioso y sin marcar dejado en el sitio |
|
|
338
|
-
| Versión de Node | Fijada a 20
|
|
338
|
+
| Versión de Node | Fijada a 22.x o 24.x (Node 20 está deprecado en Vercel desde 2026-10-01) (`engines.node` o ajuste del proyecto) | Sin fijar, deriva del valor por defecto |
|
|
339
339
|
| Input del handler | Validado/parseado (zod, guarda manual) antes de usarlo | `req.body`/`req.query` crudo usado sin verificar |
|
|
340
340
|
| Output del handler | Status explícito + body tipado en cada ruta | 200 implícito, forma de error inconsistente |
|
|
341
341
|
| Conciencia del cold-start | Imports pesados cargados de forma diferida cuando no siempre se necesitan | Cada dependencia importada de forma eager en la cabecera del módulo |
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
**Stack**: Vite {{VITE_VERSION}}, TypeScript {{TS_VERSION}}
|
|
8
8
|
|
|
9
|
-
**Alcance**: uso de Vite agnóstico de framework únicamente — aplicaciones vanilla JS/TS, creación de librerías (build.lib), aplicaciones multi-página (
|
|
9
|
+
**Alcance**: uso de Vite agnóstico de framework únicamente — aplicaciones vanilla JS/TS, creación de librerías (build.lib), aplicaciones multi-página (rolldownOptions.input), entradas Workers/WASM. No aplica a la configuración del servidor de desarrollo de React/Vue/Angular/Svelte — consultar el tooling.md propio de cada stack.
|
|
10
10
|
|
|
11
11
|
### Estructura del Proyecto
|
|
12
12
|
```
|
|
@@ -32,7 +32,7 @@ project-root/
|
|
|
32
32
|
### Arquitectura: {{ARCHITECTURE_PATTERN}}
|
|
33
33
|
- **Punto de entrada**: `index.html` en la raíz del proyecto (o `root`), nunca dentro de `public/`
|
|
34
34
|
- **Modo librería**: `build.lib` + `vite-plugin-dts` para paquetes publicados en npm
|
|
35
|
-
- **Multi-página**: `
|
|
35
|
+
- **Multi-página**: top-level `input` nombrando explícitamente cada entrada HTML
|
|
36
36
|
- **Workers/WASM**: `new Worker(new URL(...), { type: 'module' })`, sufijos `?init`/`?url`
|
|
37
37
|
|
|
38
38
|
Ver `rules/02-architecture.md` para patrones completos.
|