@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
|
@@ -21,10 +21,11 @@ See `../../../../docs/ECOSYSTEM.md` for the full catalogue, licenses, and `.mcp.
|
|
|
21
21
|
|
|
22
22
|
| Tool | License | Use it for | Rec |
|
|
23
23
|
|------|---------|-----------|-----|
|
|
24
|
-
| **caveman** |
|
|
24
|
+
| **caveman** | Apache-2.0 | Compress agent **output** ~65% | ✅ Integrate |
|
|
25
25
|
| **code-review-graph** | MIT | AST graph → read only the blast radius on review | ✅ Integrate |
|
|
26
26
|
| **token-savior** | MIT | Symbol index + Bash output compaction (−80%), RTK alternative | ✅ Integrate |
|
|
27
27
|
| **claude-token-efficient** | MIT | Anti-verbosity CLAUDE.md drop-in | ✅ Integrate |
|
|
28
|
+
| **claude-hud** | MIT | Real-time context/agent/todo monitor (status line) | ✅ Integrate |
|
|
28
29
|
| **context-mode** | ELv2 | Output sandboxing — license blocks commercial redistribution | 🔶 Reference |
|
|
29
30
|
| **claude-context** | MIT | Semantic search; needs a Milvus/Zilliz vector DB | 🔶 Reference |
|
|
30
31
|
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
### Code Quality
|
|
46
46
|
|
|
47
47
|
- [ ] `declare(strict_types=1)` in all files
|
|
48
|
-
- [ ]
|
|
48
|
+
- [ ] PER-CS 3.0 coding standards followed
|
|
49
49
|
- [ ] PHPStan level 10 passes
|
|
50
50
|
- [ ] PHP-CS-Fixer rules applied
|
|
51
51
|
- [ ] No suppressed warnings without justification
|
|
@@ -15,7 +15,7 @@ Run comprehensive code quality analysis on PHP project.
|
|
|
15
15
|
- Dead code detection
|
|
16
16
|
|
|
17
17
|
2. **Code Style**
|
|
18
|
-
-
|
|
18
|
+
- PER-CS 3.0 compliance
|
|
19
19
|
- PHP-CS-Fixer rules
|
|
20
20
|
- Naming convention verification
|
|
21
21
|
- Import organization
|
|
@@ -95,7 +95,7 @@ parameters:
|
|
|
95
95
|
return (new PhpCsFixer\Config())
|
|
96
96
|
->setRiskyAllowed(true)
|
|
97
97
|
->setRules([
|
|
98
|
-
'@
|
|
98
|
+
'@PER-CS3x0' => true,
|
|
99
99
|
'@PHP85Migration' => true,
|
|
100
100
|
'@Symfony' => true,
|
|
101
101
|
'@Symfony:risky' => true,
|
|
@@ -381,7 +381,7 @@ final class UserRepository implements RepositoryInterface
|
|
|
381
381
|
- [ ] No deprecated code usage
|
|
382
382
|
|
|
383
383
|
### Code Style
|
|
384
|
-
- [ ]
|
|
384
|
+
- [ ] PER-CS 3.0 compliant
|
|
385
385
|
- [ ] PHP-CS-Fixer passes
|
|
386
386
|
- [ ] Imports properly ordered
|
|
387
387
|
- [ ] No unused imports
|
|
@@ -34,7 +34,7 @@ npx eslint . && tsc --noEmit && npx vitest run && npm run lint:vercel-config
|
|
|
34
34
|
### Deprecated Patterns
|
|
35
35
|
|
|
36
36
|
- [ ] **No new `@vercel/kv` or `@vercel/postgres` import** - these native storage packages are deprecated; use Vercel Blob (native) or the Marketplace integrations (Neon for Postgres, Upstash for KV/Redis) instead
|
|
37
|
-
- [ ] **No new `runtime: 'edge'` declaration** without an explicit migration comment -
|
|
37
|
+
- [ ] **No new `runtime: 'edge'` declaration** without an explicit migration comment - Vercel recommends Fluid Compute over Edge Runtime; a legacy handler being touched must carry a comment explaining why it still targets Edge (see the migration note in `templates/function-handler.template.ts`)
|
|
38
38
|
|
|
39
39
|
### Testing
|
|
40
40
|
|
|
@@ -18,7 +18,7 @@ Identify security vulnerabilities specific to Vercel's deployment model, mapped
|
|
|
18
18
|
|
|
19
19
|
## SECURITY CHECKS
|
|
20
20
|
|
|
21
|
-
### 1. Env Var Handling (OWASP #
|
|
21
|
+
### 1. Env Var Handling (OWASP #4 Cryptographic Failures, #2 Security Misconfiguration)
|
|
22
22
|
|
|
23
23
|
Scan for:
|
|
24
24
|
- Secrets logged via `console.log(process.env...)` in any `api/` handler
|
|
@@ -43,14 +43,14 @@ grep -A3 '"crons"' vercel.json
|
|
|
43
43
|
grep -n "CRON_SECRET\|x-vercel-cron" api/**/*.ts
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
### 3. CORS / CSP Headers in vercel.json (OWASP #1, #
|
|
46
|
+
### 3. CORS / CSP Headers in vercel.json (OWASP #1, #2)
|
|
47
47
|
|
|
48
48
|
Check `headers[]` in `vercel.json`:
|
|
49
49
|
- `Access-Control-Allow-Origin` is not a bare `*` on any route handling authenticated requests
|
|
50
50
|
- CSP (`Content-Security-Policy`) present and restrictive (`script-src`, `frame-ancestors`, `base-uri`)
|
|
51
51
|
- `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`, HSTS present
|
|
52
52
|
|
|
53
|
-
### 4. Marketplace Credential Handling (OWASP #
|
|
53
|
+
### 4. Marketplace Credential Handling (OWASP #3 Supply Chain, #4 Cryptographic Failures)
|
|
54
54
|
|
|
55
55
|
For Storage via Marketplace (Neon/Upstash, etc.):
|
|
56
56
|
- Connection strings/API keys stored only as env vars, never committed
|
|
@@ -71,7 +71,7 @@ Flag as a **migration item** (not a live vulnerability, but unsupported surface)
|
|
|
71
71
|
```bash
|
|
72
72
|
grep -rn "runtime.*=.*['\"]edge['\"]\|export const runtime = 'edge'" api/ middleware.ts
|
|
73
73
|
```
|
|
74
|
-
Flag as a **migration item**: Edge Runtime is
|
|
74
|
+
Flag as a **migration item**: Edge Runtime is discouraged. Recommend migrating to the Node.js runtime default (Fluid Compute) — never recommend adopting Edge Runtime in new code.
|
|
75
75
|
|
|
76
76
|
### 7. Dependency Security
|
|
77
77
|
|
|
@@ -89,7 +89,7 @@ VERCEL SECURITY AUDIT
|
|
|
89
89
|
📊 SECURITY SCORE: XX/100
|
|
90
90
|
Risk Level: 🟢 LOW | 🟡 MEDIUM | 🔴 HIGH | ⚫ CRITICAL
|
|
91
91
|
|
|
92
|
-
🔑 ENV VAR HANDLING (OWASP #2
|
|
92
|
+
🔑 ENV VAR HANDLING (OWASP #4/#2)
|
|
93
93
|
──────────────────────────────────────────────────────────────
|
|
94
94
|
Status: ✅ SECURE | ⚠️ RISKS FOUND | ❌ VULNERABLE
|
|
95
95
|
|
|
@@ -117,7 +117,7 @@ Findings:
|
|
|
117
117
|
File: vercel.json
|
|
118
118
|
Fix: Restrict to explicit allowed origins
|
|
119
119
|
|
|
120
|
-
🔐 MARKETPLACE CREDENTIALS (OWASP #
|
|
120
|
+
🔐 MARKETPLACE CREDENTIALS (OWASP #3/#4)
|
|
121
121
|
──────────────────────────────────────────────────────────────
|
|
122
122
|
Status: ✅ LEAST PRIVILEGE | ⚠️ OVERSCOPED
|
|
123
123
|
|
|
@@ -133,7 +133,7 @@ Findings:
|
|
|
133
133
|
⚙️ LEGACY EDGE RUNTIME (migration items)
|
|
134
134
|
──────────────────────────────────────────────────────────────
|
|
135
135
|
[ℹ️ MIGRATION] export const runtime = 'edge' in middleware.ts
|
|
136
|
-
Fix: Migrate to the Node.js runtime default (Fluid Compute); Edge Runtime is
|
|
136
|
+
Fix: Migrate to the Node.js runtime default (Fluid Compute); Edge Runtime is discouraged
|
|
137
137
|
|
|
138
138
|
📦 DEPENDENCY AUDIT
|
|
139
139
|
──────────────────────────────────────────────────────────────
|
|
@@ -184,14 +184,14 @@ grep -rn "runtime.*=.*['\"]edge['\"]" api/ middleware.ts
|
|
|
184
184
|
## SECURITY CHECKLIST
|
|
185
185
|
|
|
186
186
|
```
|
|
187
|
-
[ ] No secret env var ever logged (OWASP #
|
|
188
|
-
[ ] .env.local gitignored, Preview/Production scoping deliberate (OWASP #
|
|
187
|
+
[ ] No secret env var ever logged (OWASP #4)
|
|
188
|
+
[ ] .env.local gitignored, Preview/Production scoping deliberate (OWASP #2)
|
|
189
189
|
[ ] Every crons[] target validates a shared secret before executing (OWASP #1)
|
|
190
190
|
[ ] No cron target reachable unauthenticated as a public route (OWASP #1)
|
|
191
191
|
[ ] CORS restricted to explicit origins on authenticated routes (OWASP #1)
|
|
192
|
-
[ ] CSP/HSTS/nosniff/frame-ancestors present in vercel.json headers[] (OWASP #
|
|
193
|
-
[ ] Marketplace credentials scoped to least privilege (OWASP #
|
|
192
|
+
[ ] CSP/HSTS/nosniff/frame-ancestors present in vercel.json headers[] (OWASP #2)
|
|
193
|
+
[ ] Marketplace credentials scoped to least privilege (OWASP #3)
|
|
194
194
|
[ ] @vercel/kv / @vercel/postgres usage flagged for Marketplace migration
|
|
195
195
|
[ ] No new code uses Edge Runtime; existing usage flagged for Fluid Compute migration
|
|
196
|
-
[ ] Dependencies audited, no moderate+ vulnerabilities (OWASP #
|
|
196
|
+
[ ] Dependencies audited, no moderate+ vulnerabilities (OWASP #3)
|
|
197
197
|
```
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
| Setting | Value |
|
|
23
23
|
|---------|-------|
|
|
24
24
|
| **Production regions** | {{DEPLOY_REGIONS}} <!-- e.g. iad1, cdg1 — see vercel.json "regions" -->|
|
|
25
|
-
| **Functions runtime** | Node.js runtime (Fluid Compute) <!-- Edge Runtime is
|
|
25
|
+
| **Functions runtime** | Node.js runtime (Fluid Compute) <!-- Edge Runtime is discouraged — do not select for new projects --> |
|
|
26
26
|
| **Cron Jobs** | {{CRON_JOBS_SUMMARY}} <!-- none, or list of schedule/path pairs from vercel.json "crons" --> |
|
|
27
27
|
| **Preview Deployments** | {{PREVIEW_POLICY}} <!-- e.g. auto on every PR, restricted to internal branches --> |
|
|
28
28
|
|
|
@@ -188,11 +188,11 @@ Choosing a runtime for an api/** handler or middleware:
|
|
|
188
188
|
├─ New code, no prior runtime pinned?
|
|
189
189
|
│ → Default to the Node.js runtime with Fluid Compute.
|
|
190
190
|
│ Full Node API access, bytecode caching gives fast cold
|
|
191
|
-
│ starts on Node
|
|
191
|
+
│ starts on Node 22+, Active CPU pricing (billed for actual
|
|
192
192
|
│ CPU work, not idle wall-clock time).
|
|
193
193
|
│
|
|
194
194
|
├─ Existing code has `export const runtime = 'edge'`?
|
|
195
|
-
│ → Recognize this as LEGACY. Edge Runtime is
|
|
195
|
+
│ → Recognize this as LEGACY. Edge Runtime is discouraged by
|
|
196
196
|
│ Vercel in favor of Fluid Compute. Do not extend or copy
|
|
197
197
|
│ this pattern into new handlers. Flag it during a migration
|
|
198
198
|
│ audit; plan removal of the `runtime = 'edge'` export and
|
|
@@ -39,7 +39,7 @@ export default async function handler(
|
|
|
39
39
|
}
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
**Rule**: type the handler with `VercelRequest`/`VercelResponse` from `@vercel/node`, not bare `Request`/`Response` — those are the Web Fetch API types used by the (
|
|
42
|
+
**Rule**: type the handler with `VercelRequest`/`VercelResponse` from `@vercel/node`, not bare `Request`/`Response` — those are the Web Fetch API types used by the (not-recommended-for-new-code) Edge runtime, and mixing the two signatures across the `api/` tree makes the runtime each function targets ambiguous at a glance.
|
|
43
43
|
|
|
44
44
|
### Method Dispatch — Guard Clauses, Not Nested Conditionals
|
|
45
45
|
|
|
@@ -114,6 +114,18 @@ npx ajv-cli validate -s https://openapi.vercel.sh/vercel.json -d vercel.json
|
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
117
|
+
## Platform Updates (CLI 63.x, October 2026)
|
|
118
|
+
|
|
119
|
+
Verified against the official Vercel docs (October 2026):
|
|
120
|
+
|
|
121
|
+
- **Node.js runtimes**: `24.x` (default) and `22.x` are available; Node.js 20 is deprecated since 2026-10-01. Pin with `package.json` `engines.node` (e.g. `"24.x"`) or the project setting.
|
|
122
|
+
- **Function duration**: with Fluid Compute (default), the default max duration is 300 s on all plans; the configurable maximum is 300 s on Hobby and 800 s on Pro/Enterprise (up to 1800 s in beta, set per function: `maxDuration` in code or `vercel.json` `functions`).
|
|
123
|
+
- **Edge Runtime**: Vercel recommends migrating from Edge to Node.js (both run on Fluid Compute), see https://vercel.com/docs/functions/runtimes/edge.
|
|
124
|
+
- **`vercel.ts`**: programmatic alternative to `vercel.json` (`npm i @vercel/config`; `import { routes, type VercelConfig } from '@vercel/config/v1'`; `export const config: VercelConfig = { ... }`). Use only one of `vercel.ts` or `vercel.json`.
|
|
125
|
+
- **Bun runtime (Beta)**: opt in with `"bunVersion": "1.x"` (or `"1.4.x"`) in `vercel.json`; Node.js remains the default.
|
|
126
|
+
- **`vercel upgrade`**: upgrades the CLI via the package manager that installed it (`--dry-run` previews the command, `--enable-auto`/`--disable-auto` toggle automatic updates).
|
|
127
|
+
- **`vercel api`**: makes authenticated HTTP requests to the Vercel REST API from the CLI.
|
|
128
|
+
|
|
117
129
|
## Storage & Marketplace Tooling
|
|
118
130
|
|
|
119
131
|
Native (first-party) products are provisioned directly from the CLI or dashboard:
|
|
@@ -20,7 +20,7 @@ Functions on Vercel expose two handler signatures depending on runtime:
|
|
|
20
20
|
| Runtime | Signature | Status |
|
|
21
21
|
|---------|-----------|--------|
|
|
22
22
|
| **Node.js runtime (Fluid Compute)** — default | `(req: VercelRequest, res: VercelResponse) => void` **or** `(req: Request) => Response` | Current, recommended |
|
|
23
|
-
| **Edge Runtime** | `(req: Request) => Response` | **
|
|
23
|
+
| **Edge Runtime** | `(req: Request) => Response` | **Not recommended** by Vercel — do not target for new code; only relevant when testing legacy handlers during migration |
|
|
24
24
|
|
|
25
25
|
Prefer the native `Request`/`Response` signature for new handlers under Fluid Compute — it is portable and trivial to unit test without mocking Vercel-specific types.
|
|
26
26
|
|
|
@@ -26,7 +26,7 @@ export default [
|
|
|
26
26
|
'no-console': ['warn', { allow: ['warn', 'error'] }],
|
|
27
27
|
'no-restricted-globals': [
|
|
28
28
|
'error',
|
|
29
|
-
{ name: 'EdgeRuntime', message: 'Edge Runtime is
|
|
29
|
+
{ name: 'EdgeRuntime', message: 'Edge Runtime is not recommended by Vercel — target the Node.js runtime (Fluid Compute) instead.' },
|
|
30
30
|
],
|
|
31
31
|
},
|
|
32
32
|
},
|
|
@@ -129,7 +129,7 @@ Native `@vercel/kv` and `@vercel/postgres` packages are **deprecated** — curre
|
|
|
129
129
|
|
|
130
130
|
## Edge Runtime Legacy-Code Security Gap
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
Vercel recommends migrating from Edge Runtime to Node.js on Fluid Compute (source: vercel.com/docs/functions/runtimes/edge) — it should not be targeted for new code. When auditing existing handlers still running on Edge Runtime, treat its reduced API surface as a **security-relevant gap**, not just a compatibility one: the historical absence of Node's `crypto` and `fs` modules on Edge Runtime pushed some codebases toward insecure workarounds (hand-rolled or under-vetted crypto implementations, non-constant-time comparisons for secret/signature checks, or fetching data that should have stayed server-side because a Node-only library couldn't run).
|
|
133
133
|
|
|
134
134
|
**Rule**: if a Function still targets Edge Runtime and its diff/history shows a custom crypto or signature-comparison routine, treat it as a migration priority — moving it to the Node.js runtime (Fluid Compute) restores access to Node's `crypto` module (`crypto.timingSafeEqual`, etc.) and removes the reason the workaround existed in the first place.
|
|
135
135
|
|
|
@@ -52,7 +52,7 @@ export default async function handler(req: Request): Promise<Response> {
|
|
|
52
52
|
|
|
53
53
|
// ============================================================================
|
|
54
54
|
// Edge Runtime migration notes (placeholder only — do NOT implement Edge
|
|
55
|
-
// Runtime code here; Edge Runtime is
|
|
55
|
+
// Runtime code here; Edge Runtime is not recommended by Vercel).
|
|
56
56
|
//
|
|
57
57
|
// If this handler is being converted FROM a legacy `export const runtime =
|
|
58
58
|
// 'edge'` file:
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
## Library Feature (new export)
|
|
18
18
|
|
|
19
19
|
- [ ] **Exported from `src/index.ts`** - single public entry stays the source of truth
|
|
20
|
-
- [ ] **Peer dependency added** to both `package.json` "peerDependencies" and `build.
|
|
20
|
+
- [ ] **Peer dependency added** to both `package.json` "peerDependencies" and `build.rolldownOptions.external`, if applicable
|
|
21
21
|
- [ ] **Type declarations verified** - `vite-plugin-dts` output includes the new export with correct types
|
|
22
22
|
- [ ] **Build-output smoke test updated** - `test/build-output.test.ts` covers the new public API surface
|
|
23
23
|
|
|
24
24
|
## Multi-Page Feature (new page)
|
|
25
25
|
|
|
26
|
-
- [ ] **HTML entry created** and added to `
|
|
26
|
+
- [ ] **HTML entry created** and added to top-level `input`
|
|
27
27
|
- [ ] **Entry key is stable, kebab-case**, matches folder/file naming convention
|
|
28
28
|
- [ ] **Shared code factored** into `src/shared/`, not duplicated across page entries
|
|
29
29
|
- [ ] **CSP verified** for the new entry (see `11-security-vite.md`)
|
|
@@ -30,8 +30,8 @@ npx eslint . && tsc -b --noEmit && npx vitest run
|
|
|
30
30
|
### Shape-Specific
|
|
31
31
|
|
|
32
32
|
- [ ] **Vanilla SPA**: `index.html` stayed at project root, not moved into `public/`
|
|
33
|
-
- [ ] **Library**: peer dependencies externalized in `build.
|
|
34
|
-
- [ ] **Multi-page**: `
|
|
33
|
+
- [ ] **Library**: peer dependencies externalized in `build.rolldownOptions.external`, not bundled
|
|
34
|
+
- [ ] **Multi-page**: top-level `input` keys unchanged/stable if renaming was not intentional
|
|
35
35
|
- [ ] **Worker/WASM**: worker message handler validates payload shape
|
|
36
36
|
|
|
37
37
|
### Testing
|
|
@@ -24,7 +24,7 @@ Detect which of the four project shapes the codebase implements, and validate it
|
|
|
24
24
|
[ ] Identify shape: vanilla-spa | library | multi-page | worker-wasm (or a combination)
|
|
25
25
|
[ ] index.html present at project root as a SOURCE file (not under public/) — vanilla-spa/multi-page
|
|
26
26
|
[ ] src/index.ts as the single public entry — library shape
|
|
27
|
-
[ ] build.
|
|
27
|
+
[ ] build.rolldownOptions.input is an object map — multi-page shape
|
|
28
28
|
[ ] worker/WASM entry points use import.meta.url / ?init — worker-wasm shape
|
|
29
29
|
```
|
|
30
30
|
|
|
@@ -42,7 +42,7 @@ Detect which of the four project shapes the codebase implements, and validate it
|
|
|
42
42
|
```
|
|
43
43
|
[ ] Vanilla SPA: single index.html, <script type="module" src="/src/main.ts">
|
|
44
44
|
[ ] Library: build.lib.entry points to src/index.ts, formats include 'es' and 'cjs'
|
|
45
|
-
[ ] MPA: build.
|
|
45
|
+
[ ] MPA: build.rolldownOptions.input keys are stable, kebab-case, match folder/file names
|
|
46
46
|
[ ] Worker/WASM: `new Worker(new URL('./x.worker.ts', import.meta.url), { type: 'module' })` pattern used (no bare string URLs)
|
|
47
47
|
```
|
|
48
48
|
|
|
@@ -57,7 +57,7 @@ Detect which of the four project shapes the codebase implements, and validate it
|
|
|
57
57
|
### 5. Dependency Externalization (library shape)
|
|
58
58
|
|
|
59
59
|
```
|
|
60
|
-
[ ] Peer dependencies declared in package.json AND in build.
|
|
60
|
+
[ ] Peer dependencies declared in package.json AND in build.rolldownOptions.external
|
|
61
61
|
[ ] package.json "exports" map covers both import and require conditions
|
|
62
62
|
[ ] "sideEffects": false set, unless the library genuinely has side-effectful modules
|
|
63
63
|
```
|
|
@@ -118,11 +118,11 @@ Issues:
|
|
|
118
118
|
📦 DEPENDENCY EXTERNALIZATION (if library)
|
|
119
119
|
──────────────────────────────────────────────────────────────
|
|
120
120
|
Peer deps declared: X
|
|
121
|
-
Externalized in
|
|
121
|
+
Externalized in rolldownOptions.external: X/X
|
|
122
122
|
|
|
123
123
|
Issues:
|
|
124
124
|
- "some-peer-lib" bundled into dist/ instead of externalized
|
|
125
|
-
→ Add to peerDependencies AND build.
|
|
125
|
+
→ Add to peerDependencies AND build.rolldownOptions.external
|
|
126
126
|
|
|
127
127
|
📤 OUTPUT STRUCTURE
|
|
128
128
|
──────────────────────────────────────────────────────────────
|
|
@@ -39,7 +39,7 @@ Confirm the library builds to ES + CJS + `.d.ts`, peer dependencies are correctl
|
|
|
39
39
|
### 3. Dependency Externalization
|
|
40
40
|
|
|
41
41
|
```
|
|
42
|
-
[ ] Every peer dependency appears in BOTH package.json "peerDependencies" AND build.
|
|
42
|
+
[ ] Every peer dependency appears in BOTH package.json "peerDependencies" AND build.rolldownOptions.external
|
|
43
43
|
[ ] No peer dependency's code is present in the built dist/ bundle (verify by inspecting dist/ output or the bundle-visualizer report)
|
|
44
44
|
[ ] Regular (non-peer) dependencies are intentionally bundled, not accidentally externalized
|
|
45
45
|
```
|
|
@@ -95,7 +95,7 @@ Status: ✅ CLEAN | ❌ LEAKS FOUND
|
|
|
95
95
|
|
|
96
96
|
Findings:
|
|
97
97
|
[🔴 HIGH] "some-peer-lib" bundled into dist/my-lib.js
|
|
98
|
-
Fix: Add to peerDependencies and build.
|
|
98
|
+
Fix: Add to peerDependencies and build.rolldownOptions.external
|
|
99
99
|
|
|
100
100
|
🗂️ PACKAGE.JSON EXPORTS MAP
|
|
101
101
|
──────────────────────────────────────────────────────────────
|
|
@@ -156,7 +156,7 @@ export default defineConfig({
|
|
|
156
156
|
formats: ['es', 'cjs'],
|
|
157
157
|
fileName: (format) => `my-lib.${format === 'es' ? 'js' : 'cjs'}`,
|
|
158
158
|
},
|
|
159
|
-
|
|
159
|
+
rolldownOptions: {
|
|
160
160
|
external: ['some-peer-lib'],
|
|
161
161
|
},
|
|
162
162
|
},
|
|
@@ -59,12 +59,12 @@ npm install -D vite-plugin-dts
|
|
|
59
59
|
- Move app entry logic out; create `src/index.ts` as the single public entry
|
|
60
60
|
- Rewrite `vite.config.ts` using `templates/vite.config.template.ts` (library section) + `templates/library-entry.template.ts`
|
|
61
61
|
- Add `"main"`, `"module"`, `"types"`, `"exports"`, `"files": ["dist"]`, `"sideEffects": false` to `package.json`
|
|
62
|
-
- Declare any host dependency as a peer dependency, and externalize it in `build.
|
|
62
|
+
- Declare any host dependency as a peer dependency, and externalize it in `build.rolldownOptions.external`
|
|
63
63
|
|
|
64
64
|
### Shape: `multi-page`
|
|
65
65
|
|
|
66
66
|
- Create one HTML file per page (`about.html`, `admin/index.html`, ...) alongside `index.html`
|
|
67
|
-
- Configure `
|
|
67
|
+
- Configure top-level `input` as an object map (page name → HTML path) — see `02-architecture-vite.md`, Shape 3
|
|
68
68
|
- Create one `src/<page>.ts` entry per HTML page
|
|
69
69
|
|
|
70
70
|
### Shape: `worker-wasm`
|
|
@@ -58,7 +58,7 @@ project-root/
|
|
|
58
58
|
|
|
59
59
|
## Shape 2 — Library Authoring
|
|
60
60
|
|
|
61
|
-
Published as an npm package. Vite bundles `src/index.ts` in **library mode** (`build.lib`), producing ES + CJS outputs plus type declarations via `vite-plugin-dts`. Peer dependencies (e.g. a host framework, if the library happens to wrap one) are excluded from the bundle via `
|
|
61
|
+
Published as an npm package. Vite bundles `src/index.ts` in **library mode** (`build.lib`), producing ES + CJS outputs plus type declarations via `vite-plugin-dts`. Peer dependencies (e.g. a host framework, if the library happens to wrap one) are excluded from the bundle via `rolldownOptions.external`.
|
|
62
62
|
|
|
63
63
|
```
|
|
64
64
|
my-lib/
|
|
@@ -98,13 +98,13 @@ my-lib/
|
|
|
98
98
|
}
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
**Rule**: never bundle a peer dependency into the library output — declare it in both `peerDependencies` and `build.
|
|
101
|
+
**Rule**: never bundle a peer dependency into the library output — declare it in both `peerDependencies` and `build.rolldownOptions.external`, otherwise consumers end up with duplicate copies (and duplicate global state) of that dependency.
|
|
102
102
|
|
|
103
103
|
---
|
|
104
104
|
|
|
105
105
|
## Shape 3 — Multi-Page App (MPA)
|
|
106
106
|
|
|
107
|
-
Multiple independent HTML entry points, each with its own module graph, sharing one `vite.config.ts`. Configured via `
|
|
107
|
+
Multiple independent HTML entry points, each with its own module graph, sharing one `vite.config.ts`. Configured via top-level `input` — an object mapping a page name to its HTML file.
|
|
108
108
|
|
|
109
109
|
```
|
|
110
110
|
project-root/
|
|
@@ -130,7 +130,7 @@ import { defineConfig } from 'vite'
|
|
|
130
130
|
|
|
131
131
|
export default defineConfig({
|
|
132
132
|
build: {
|
|
133
|
-
|
|
133
|
+
rolldownOptions: {
|
|
134
134
|
input: {
|
|
135
135
|
main: resolve(__dirname, 'index.html'),
|
|
136
136
|
about: resolve(__dirname, 'about.html'),
|
|
@@ -196,7 +196,7 @@ export async function loadImageFilter() {
|
|
|
196
196
|
- Do not let a "library" project accumulate an `index.html` dev harness inside `src/` — keep a separate `playground/` or `demo/` folder with its own `vite.config.ts` if a local preview is needed.
|
|
197
197
|
|
|
198
198
|
### 2. Explicit Entry Points
|
|
199
|
-
- Every HTML entry, worker, and WASM module must be reachable from the module graph via a static, analyzable reference (`
|
|
199
|
+
- Every HTML entry, worker, and WASM module must be reachable from the module graph via a static, analyzable reference (`rolldownOptions.input`, `new URL(..., import.meta.url)`, `?init`). Dynamic string concatenation defeats Vite's static analysis.
|
|
200
200
|
|
|
201
201
|
### 3. Externalize What You Don't Own
|
|
202
202
|
- Libraries externalize peer dependencies; apps do not — this is the one place library and app configs diverge (see `03-coding-standards.md`).
|
|
@@ -47,7 +47,7 @@ Keep top-level keys in this order for readability and diff-friendliness:
|
|
|
47
47
|
4. `envPrefix` / `envDir` (only if overriding the `VITE_` default)
|
|
48
48
|
5. `server` (dev server only)
|
|
49
49
|
6. `preview` (preview server only)
|
|
50
|
-
7. `build` (`lib`, `
|
|
50
|
+
7. `build` (`lib`, `rolldownOptions`, `target`, `sourcemap`)
|
|
51
51
|
8. `worker` (worker-specific build options)
|
|
52
52
|
9. `test` (Vitest — co-located, not a separate `vitest.config.ts`, unless the project needs a workspace)
|
|
53
53
|
|
|
@@ -26,7 +26,7 @@ npm create vite@latest my-app -- --template lit-ts
|
|
|
26
26
|
npm create vite@latest my-app -- --template lit
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
After scaffolding a **library**, discard the generated `index.html`/dev harness pattern in favor of the library layout described in `02-architecture-vite.md` — `create vite` templates always scaffold an app shape, never a library shape, so library projects need manual `vite.config.ts` adjustments (`build.lib`, `vite-plugin-dts`, `
|
|
29
|
+
After scaffolding a **library**, discard the generated `index.html`/dev harness pattern in favor of the library layout described in `02-architecture-vite.md` — `create vite` templates always scaffold an app shape, never a library shape, so library projects need manual `vite.config.ts` adjustments (`build.lib`, `vite-plugin-dts`, `rolldownOptions.external`).
|
|
30
30
|
|
|
31
31
|
## Environment API (Vite 6+)
|
|
32
32
|
|
|
@@ -105,7 +105,7 @@ if (import.meta.hot) {
|
|
|
105
105
|
|
|
106
106
|
As of Vite 8, the **Rolldown**-powered bundler is the default build engine (previously an opt-in `rolldown-vite` package in Vite 6/7). Practical consequences for framework-agnostic projects:
|
|
107
107
|
|
|
108
|
-
- `build.rollupOptions`
|
|
108
|
+
- `build.rollupOptions` is **deprecated** since Vite 8 (alias of `build.rolldownOptions`; same for `worker.rollupOptions` and `optimizeDeps.esbuildOptions` → `optimizeDeps.rolldownOptions`) — migrate to `rolldownOptions` (e.g. `input`, `external`), but some Rollup-specific output options changed shape — notably `output.manualChunks` as an **object** is removed; use `build.rolldownOptions.output.codeSplitting.groups` instead (see `08-quality-tools.md` for a full example).
|
|
109
109
|
- Library builds (`build.lib`) and `vite-plugin-dts` both work unchanged under Rolldown.
|
|
110
110
|
- If a project depends on a Rollup-only plugin that hasn't been ported, Rolldown can be disabled per-project (consult the current Vite release notes for the opt-out flag, since this is expected to be phased out over time) — treat this as a temporary escape hatch, not a long-term config.
|
|
111
111
|
|
|
@@ -154,7 +154,7 @@ describe('loadImageFilter', () => {
|
|
|
154
154
|
|
|
155
155
|
## Testing Library Build Output
|
|
156
156
|
|
|
157
|
-
A library's unit tests exercise the **source** (`src/`); a separate smoke test confirms the **published build** (`dist/`) is actually importable and shaped correctly — this catches `
|
|
157
|
+
A library's unit tests exercise the **source** (`src/`); a separate smoke test confirms the **published build** (`dist/`) is actually importable and shaped correctly — this catches `rolldownOptions.external` misconfigurations and broken `exports` maps that source-level tests cannot see.
|
|
158
158
|
|
|
159
159
|
```typescript
|
|
160
160
|
// test/build-output.test.ts — run AFTER `vite build`, not part of the regular unit suite
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## OWASP Top 10:2025 Focus Areas for This Stack
|
|
6
6
|
|
|
7
|
-
###
|
|
7
|
+
### A02:2025 - Security Misconfiguration — `envPrefix` / `define()` Secret Leakage
|
|
8
8
|
|
|
9
9
|
Vite inlines any environment variable matching `envPrefix` (default: `VITE_`) directly into the **client** bundle at build time, as plain-text string replacement — there is no runtime secret-fetch, no server boundary. The same is true of anything passed through `define()`. Both are permanent, public leaks once shipped: a value baked into a bundle by `define()` or `VITE_*` is retrievable by anyone who downloads the JS file, forever (until the artifact is rebuilt and redeployed).
|
|
10
10
|
|
|
@@ -38,7 +38,7 @@ VITE_API_BASE_URL=https://api.example.com // public endpoint, fine to expose
|
|
|
38
38
|
|
|
39
39
|
**Custom `envPrefix`**: if a project sets `envPrefix: ['PUBLIC_', 'APP_']` to move away from the `VITE_` convention, audit the prefix change itself — a broader or misconfigured prefix (e.g. accidentally matching `SECRET_` too) silently starts exposing variables that were previously safe by not matching the default `VITE_` filter.
|
|
40
40
|
|
|
41
|
-
###
|
|
41
|
+
### A02:2025 - Security Misconfiguration — CSP for Multi-Page Apps
|
|
42
42
|
|
|
43
43
|
Each HTML entry point in an MPA (Shape 3) is a separate document with its own `<head>` — a CSP `<meta>` tag added to `index.html` does **not** propagate to `admin/index.html` or `about.html`. Either template the CSP meta tag into every HTML entry consistently, or (preferred) set it once via server response headers so it applies uniformly regardless of which entry is served.
|
|
44
44
|
|
|
@@ -66,7 +66,7 @@ export default defineConfig({
|
|
|
66
66
|
|
|
67
67
|
**Rule**: for a multi-page app, verify the CSP (or its equivalent header configuration on the production host) against *every* entry, not just the root `index.html` — a common gap is a hardened root page next to an `admin/index.html` that was scaffolded later and never got the same treatment.
|
|
68
68
|
|
|
69
|
-
###
|
|
69
|
+
### A02:2025 - Security Misconfiguration — WASM Sandboxing
|
|
70
70
|
|
|
71
71
|
A WebAssembly module loaded via the `?init` suffix runs inside the **same** JavaScript sandbox as the rest of the page — it gains no elevated OS-level privileges, but it does share the page's origin and any capabilities explicitly passed to it through the imports object. Two practical implications:
|
|
72
72
|
|
|
@@ -87,7 +87,7 @@ export default defineConfig({
|
|
|
87
87
|
|
|
88
88
|
**Rule**: never grant a WASM module's imports object a host function it doesn't need (e.g. a raw `fetch` or filesystem-like capability) just because it's convenient — the imports object is the module's entire capability surface; treat it like a permissions list, not a utility bag.
|
|
89
89
|
|
|
90
|
-
###
|
|
90
|
+
### A05:2025 - Injection — Worker Message Contracts
|
|
91
91
|
|
|
92
92
|
A Web Worker (Shape 4) receiving untrusted `postMessage` payloads (e.g. data forwarded from a third-party iframe, or attacker-influenced input) must validate the message shape before acting on it — `onmessage` has no built-in origin check when the worker is same-document, but if a worker is ever exposed to `postMessage` from other windows/origins, validate `event.origin` before trusting `event.data`.
|
|
93
93
|
|
|
@@ -12,7 +12,7 @@ export type { {{PublicType}}, {{PublicOptions}} } from './core/{{public-module}}
|
|
|
12
12
|
// export * as {{subArea}} from './{{sub-area}}'
|
|
13
13
|
|
|
14
14
|
// ============================================================================
|
|
15
|
-
// vite.config.ts — build.lib entry +
|
|
15
|
+
// vite.config.ts — build.lib entry + rolldownOptions.external example
|
|
16
16
|
// ============================================================================
|
|
17
17
|
//
|
|
18
18
|
// import { resolve } from 'node:path'
|
|
@@ -27,7 +27,7 @@ export type { {{PublicType}}, {{PublicOptions}} } from './core/{{public-module}}
|
|
|
27
27
|
// formats: ['es', 'cjs'],
|
|
28
28
|
// fileName: (format) => `{{PACKAGE_NAME}}.${format === 'es' ? 'js' : 'cjs'}`,
|
|
29
29
|
// },
|
|
30
|
-
//
|
|
30
|
+
// rolldownOptions: {
|
|
31
31
|
// // Peer deps: declared in package.json "peerDependencies" AND excluded
|
|
32
32
|
// // from the bundle here — never both bundle AND declare as a peer dep.
|
|
33
33
|
// external: ['{{peer-dependency-name}}', /^{{peer-dependency-name}}\//],
|
|
@@ -59,14 +59,14 @@ export default defineConfig(({ mode, command }) => ({
|
|
|
59
59
|
// formats: ['es', 'cjs'],
|
|
60
60
|
// fileName: (format) => `{{PACKAGE_NAME}}.${format === 'es' ? 'js' : 'cjs'}`,
|
|
61
61
|
// },
|
|
62
|
-
//
|
|
62
|
+
// rolldownOptions: {
|
|
63
63
|
// external: [/* peer deps, e.g. 'some-peer-lib' */],
|
|
64
64
|
// },
|
|
65
65
|
|
|
66
66
|
// ============================================================
|
|
67
67
|
// {{SHAPE: multi-page}} — object map of page name -> HTML path
|
|
68
68
|
// ============================================================
|
|
69
|
-
//
|
|
69
|
+
// rolldownOptions: {
|
|
70
70
|
// input: {
|
|
71
71
|
// main: resolve(__dirname, 'index.html'),
|
|
72
72
|
// about: resolve(__dirname, 'about.html'),
|
|
@@ -277,7 +277,7 @@ auto-install-peers=true
|
|
|
277
277
|
pnpm install
|
|
278
278
|
|
|
279
279
|
# Add dependency
|
|
280
|
-
pnpm add vue-router pinia
|
|
280
|
+
pnpm add vue-router pinia @vue/devtools-api
|
|
281
281
|
|
|
282
282
|
# Add dev dependency
|
|
283
283
|
pnpm add -D vitest @vue/test-utils
|
|
@@ -349,7 +349,8 @@ const router = createRouter({ history: createWebHistory() });
|
|
|
349
349
|
"dependencies": {
|
|
350
350
|
"vue": "^3.5.0",
|
|
351
351
|
"vue-router": "^5.0.0",
|
|
352
|
-
"pinia": "^
|
|
352
|
+
"pinia": "^4.0.0",
|
|
353
|
+
"@vue/devtools-api": "^8.0.0"
|
|
353
354
|
},
|
|
354
355
|
"devDependencies": {
|
|
355
356
|
"@types/node": "^20.0.0",
|
|
@@ -46,8 +46,8 @@ Ist der Zustand synchron und wird für das Rendering verwendet?
|
|
|
46
46
|
|
|
47
47
|
**Zoneless als Standard (stabil) :**
|
|
48
48
|
- ~33 KB Bundle-Einsparung (Zone.js optional)
|
|
49
|
-
-
|
|
50
|
-
-
|
|
49
|
+
- Performance-Gewinne variieren je nach Anwendung (die Zahl „+30-40 %“ stammt aus einer Quelle von 2024): messen, nicht annehmen
|
|
50
|
+
- Kein Provider ab v21/v22 erforderlich: `provideZonelessChangeDetection()` wird nur in v20 benötigt (https://angular.dev/guide/zoneless)
|
|
51
51
|
|
|
52
52
|
**Signal Forms (stabil v22) :**
|
|
53
53
|
- Natives signal-basiertes Alternative zu Reactive Forms, **produktionsreif**
|
|
@@ -421,7 +421,7 @@ Verwendet die Anwendung Zoneless Change Detection?
|
|
|
421
421
|
JA --> Lösen Event-Listener die CD korrekt aus?
|
|
422
422
|
NEIN --> Wird Zone.js verwendet?
|
|
423
423
|
JA --> GERINGFÜGIG in v22+: Migration zu Zoneless empfohlen (spart ~33 KB)
|
|
424
|
-
NEIN --> Sicherstellen, dass
|
|
424
|
+
NEIN --> Sicherstellen, dass kein provideZoneChangeDetection() Zone.js reaktiviert (zoneless standardmäßig seit v21)
|
|
425
425
|
|
|
426
426
|
Wird httpResource() für repetitive HTTP-Anfragen verwendet?
|
|
427
427
|
NEIN --> Verwenden Komponenten signal + effect + HttpClient?
|
|
@@ -7,6 +7,20 @@ maxTurns: 8
|
|
|
7
7
|
tools: [Read, Glob, Grep, Edit, Write, Bash, WebFetch, WebSearch]
|
|
8
8
|
permissionMode: default
|
|
9
9
|
skills: [security, git-workflow]
|
|
10
|
+
disallowedTools:
|
|
11
|
+
- "Bash(rm -rf:*)"
|
|
12
|
+
- "Bash(dd:*)"
|
|
13
|
+
- "Bash(mkfs:*)"
|
|
14
|
+
- "Bash(kubectl delete:*)"
|
|
15
|
+
- "Bash(helm uninstall:*)"
|
|
16
|
+
- "Bash(terraform destroy:*)"
|
|
17
|
+
- "Bash(tofu destroy:*)"
|
|
18
|
+
- "Bash(docker system prune -a*)"
|
|
19
|
+
- "Bash(docker volume rm:*)"
|
|
20
|
+
- "Bash(curl * | sh*)"
|
|
21
|
+
- "Bash(wget * | sh*)"
|
|
22
|
+
- "Bash(git push --force*)"
|
|
23
|
+
- "Bash(git push -f*)"
|
|
10
24
|
---
|
|
11
25
|
|
|
12
26
|
# DevOps Engineer Agent
|
|
@@ -31,7 +45,7 @@ Sie sind ein **Senior DevOps Engineer** mit über 10 Jahren Erfahrung in CI/CD,
|
|
|
31
45
|
| Docker | Multi-Stage-Builds, Image-Optimierung, Security-Scanning |
|
|
32
46
|
| Docker Compose | Lokale Orchestrierung, Profiles, Extensions |
|
|
33
47
|
| Kubernetes | Deployments, Services, Ingress, ConfigMaps, Secrets |
|
|
34
|
-
| Helm | Charts, Values, Templating | 4.2.
|
|
48
|
+
| Helm | Charts, Values, Templating | 4.2.2 (Helm 4 = MAJOR — Server-Side Apply, WASM-Plugins, API v4 ; Helm 3 Sicherheits-EOL Nov. 2026) |
|
|
35
49
|
|
|
36
50
|
### Cloud-Provider
|
|
37
51
|
| Provider | Services |
|
|
@@ -5,8 +5,19 @@ model: opus
|
|
|
5
5
|
effort: xhigh
|
|
6
6
|
maxTurns: 10
|
|
7
7
|
memory: user
|
|
8
|
-
tools: [Read, Glob, Grep, Edit, Write, Bash,
|
|
8
|
+
tools: [Read, Glob, Grep, Edit, Write, Bash, Agent, WebFetch, WebSearch]
|
|
9
9
|
permissionMode: default
|
|
10
|
+
disallowedTools:
|
|
11
|
+
- "Bash(rm -rf:*)"
|
|
12
|
+
- "Bash(dd:*)"
|
|
13
|
+
- "Bash(mkfs:*)"
|
|
14
|
+
- "Bash(:(){:|:&};:*)"
|
|
15
|
+
- "Bash(sudo:*)"
|
|
16
|
+
- "Bash(chmod 777:*)"
|
|
17
|
+
- "Bash(curl * | sh*)"
|
|
18
|
+
- "Bash(wget * | sh*)"
|
|
19
|
+
- "Bash(git push --force*)"
|
|
20
|
+
- "Bash(git push -f*)"
|
|
10
21
|
---
|
|
11
22
|
|
|
12
23
|
# Ralph Conductor Agent v2.0
|