@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
|
@@ -36,7 +36,7 @@ Executar a verificação completa de configuração e arquitetura:
|
|
|
36
36
|
- Correção do vite.config.ts (defineConfig, aliases sincronizados com tsconfig) (8 pts)
|
|
37
37
|
- Posicionamento do index.html na raiz do projeto, nunca dentro de public/ (6 pts)
|
|
38
38
|
- Configuração do build.lib para bibliotecas (entry, formats, external, vite-plugin-dts) (8 pts)
|
|
39
|
-
-
|
|
39
|
+
- rolldownOptions.input para aplicações multi-página, convenção de nomeação de plugins (vite-plugin-*) (8 pts)
|
|
40
40
|
|
|
41
41
|
**Referência**: `.claude/agents/vite-reviewer.md` (seção 1)
|
|
42
42
|
|
|
@@ -151,7 +151,7 @@ Sub-pontuações:
|
|
|
151
151
|
• Correção do vite.config.ts : XX/8
|
|
152
152
|
• Posicionamento do index.html : XX/6
|
|
153
153
|
• Configuração do build.lib : XX/8
|
|
154
|
-
•
|
|
154
|
+
• rolldownOptions.input / plugins : XX/8
|
|
155
155
|
|
|
156
156
|
Pontos fortes:
|
|
157
157
|
- [Pontos fortes de arquitetura]
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# Usage: ./install-paperclip-rules.sh [OPTIONS] [PROJECT_DIR]
|
|
5
5
|
#
|
|
6
6
|
# Paperclip: Open-source orchestration for zero-human companies.
|
|
7
|
-
# Node.js
|
|
7
|
+
# Node.js 24.11+ / TypeScript / React UI / Vitest / PostgreSQL.
|
|
8
8
|
# Docs: https://docs.paperclip.ing/ — Repo: https://github.com/paperclipai/paperclip
|
|
9
9
|
|
|
10
10
|
set -euo pipefail
|
|
@@ -16,7 +16,7 @@ I18N_DIR="$(dirname "$SCRIPT_DIR")/i18n"
|
|
|
16
16
|
TECH_NAME="Paperclip"
|
|
17
17
|
TECH_DISPLAY_NAME="Paperclip"
|
|
18
18
|
TECH_NAMESPACE="paperclip"
|
|
19
|
-
DEFAULT_STACK="Node.js
|
|
19
|
+
DEFAULT_STACK="Node.js 24.11+, TypeScript 5+, React 18+, Vitest, pnpm 9.15+, PostgreSQL"
|
|
20
20
|
|
|
21
21
|
# --- TCL version ---
|
|
22
22
|
source "${SCRIPT_DIR}/tcl-common.sh"
|
|
@@ -47,7 +47,7 @@ TECH_RULES=(
|
|
|
47
47
|
HELP_DESCRIPTION=" TCL-optimized installation covering:
|
|
48
48
|
- Paperclip monorepo shape (server + ui + cli + packages)
|
|
49
49
|
- Built-in adapters (packages/adapters/*) and plugins (@paperclipai/plugin-sdk)
|
|
50
|
-
- Node.js
|
|
50
|
+
- Node.js 24.11+ / TypeScript strict mode
|
|
51
51
|
- Testing (Vitest, plugin test harness from @paperclipai/plugin-sdk/testing)
|
|
52
52
|
- Security (Better Auth, tenancy, plugin capabilities, approval gates)
|
|
53
53
|
|
|
@@ -64,7 +64,7 @@ AVAILABLE_COMMANDS="- \`/${TECH_NAMESPACE}:check-compliance\` - Full compliance
|
|
|
64
64
|
- \`/${TECH_NAMESPACE}:setup-company\` - Bootstrap a new Paperclip company"
|
|
65
65
|
|
|
66
66
|
ARCHITECTURE_SUMMARY="\`\`\`
|
|
67
|
-
Paperclip monorepo (v2026.
|
|
67
|
+
Paperclip monorepo (v2026.1012.0+)
|
|
68
68
|
|
|
69
69
|
server/ Node.js + TypeScript API (companies, agents, approvals, activity)
|
|
70
70
|
ui/ React dashboard
|
|
@@ -101,7 +101,7 @@ TESTING_STACK="**Paperclip Stack**: Vitest (unit + integration) + adapter contra
|
|
|
101
101
|
TECH_REFERENCES="- \`${TECH_NAMESPACE}/architecture.md\` - Two-layer control plane + adapters
|
|
102
102
|
- \`${TECH_NAMESPACE}/coding-standards.md\` - TypeScript & Paperclip conventions
|
|
103
103
|
- \`${TECH_NAMESPACE}/testing.md\` - Vitest & adapter contract tests
|
|
104
|
-
- \`${TECH_NAMESPACE}/tooling.md\` - pnpm, tsx, Vite, Node
|
|
104
|
+
- \`${TECH_NAMESPACE}/tooling.md\` - pnpm, tsx, Vite, Node 24.11+
|
|
105
105
|
- \`${TECH_NAMESPACE}/quality-tools.md\` - ESLint flat config, Prettier, tsc
|
|
106
106
|
- \`${TECH_NAMESPACE}/security.md\` - Secrets, approval gates, budgets, audit trails
|
|
107
107
|
- \`${TECH_NAMESPACE}/adapter-protocol.md\` - Heartbeat, cost reporting, approvals"
|
|
@@ -41,7 +41,7 @@ TECH_RULES=(
|
|
|
41
41
|
HELP_DESCRIPTION=" TCL-optimized installation covering framework-agnostic Vite usage:
|
|
42
42
|
- Vanilla JS/TS applications (src/main.ts entry)
|
|
43
43
|
- Library authoring (build.lib + vite-plugin-dts)
|
|
44
|
-
- Multi-page apps (
|
|
44
|
+
- Multi-page apps (rolldownOptions.input)
|
|
45
45
|
- Workers / WASM entry points
|
|
46
46
|
- Vitest for testing
|
|
47
47
|
|
|
@@ -78,7 +78,7 @@ vite.config.ts # build.lib + vite-plugin-dts
|
|
|
78
78
|
pages/
|
|
79
79
|
├── index.html
|
|
80
80
|
└── admin.html
|
|
81
|
-
vite.config.ts #
|
|
81
|
+
vite.config.ts # rolldownOptions.input per page
|
|
82
82
|
|
|
83
83
|
# 4. Workers / WASM
|
|
84
84
|
src/
|
|
@@ -94,7 +94,7 @@ CODING_STANDARDS_SUMMARY="| Element | Convention | Example |
|
|
|
94
94
|
| Entry point | \`src/main.ts\` (app) / \`src/index.ts\` (library) | \`main.ts\` |
|
|
95
95
|
| Custom plugins | \`vite-plugin-*\` prefix | \`vite-plugin-my-transform.ts\` |
|
|
96
96
|
| Config file | \`vite.config.ts\`, typed via \`defineConfig\` | \`defineConfig({ ... })\` |
|
|
97
|
-
| Multi-page entries | \`
|
|
97
|
+
| Multi-page entries | \`rolldownOptions.input\` keyed by page name | \`{ admin: 'pages/admin.html' }\` |
|
|
98
98
|
| Worker entries | \`new URL('./x.worker.ts', import.meta.url)\` | \`type: 'module'\` |
|
|
99
99
|
| Library exports | \`build.lib.entry\` + \`vite-plugin-dts\` for \`.d.ts\` | \`entry: 'src/index.ts'\` |
|
|
100
100
|
|
|
@@ -115,7 +115,7 @@ FILE_CONTEXTS=" # Vite config
|
|
|
115
115
|
- solid-principles
|
|
116
116
|
auto_load: false
|
|
117
117
|
quick_tips: |
|
|
118
|
-
Use build.lib for npm packages,
|
|
118
|
+
Use build.lib for npm packages, rolldownOptions.input for multi-page apps.
|
|
119
119
|
index.html is a source file, not a public asset.
|
|
120
120
|
Not for React/Vue/Angular/Svelte dev-server config — see that stack's tooling.md.
|
|
121
121
|
|
|
@@ -32,6 +32,8 @@ Sie sind ein **Senior Ansible Architect**, der vollstandige Automatisierungsarch
|
|
|
32
32
|
| Multi-Umgebung | Dev / Staging / Produktion Trennung | Hoch |
|
|
33
33
|
| Hierarchisch (Landschaft/Typ/Funktion) | Enterprise-Rechenzentrum-Verwaltung | Hoch |
|
|
34
34
|
|
|
35
|
+
> Hetzner Cloud: die Collection `hetzner.hcloud` (7.2.0) mit ansible-core 2.21.5 verwenden, in `requirements.yml` gepinnt.
|
|
36
|
+
|
|
35
37
|
## Methodik
|
|
36
38
|
|
|
37
39
|
### Phase 1 -- Ermittlung
|
|
@@ -7,7 +7,7 @@ description: FrankenPHP Caddyfile design, worker topology, and framework integra
|
|
|
7
7
|
|
|
8
8
|
## Identitaet
|
|
9
9
|
|
|
10
|
-
Du bist ein **Senior FrankenPHP Architekt**, der in der Lage ist, vollstaendige PHP-Application-Serving-Topologien mit FrankenPHP 1.
|
|
10
|
+
Du bist ein **Senior FrankenPHP Architekt**, der in der Lage ist, vollstaendige PHP-Application-Serving-Topologien mit FrankenPHP 1.13+ zu entwerfen. Du koordinierst die Entscheidung zwischen Worker Mode und Classic Mode, Thread-Dimensionierung, Caddyfile-Design, Framework-Integration (Symfony, Laravel), Mercure-Echtzeit-Setup und Early Hints (103)-Konfiguration, um produktionsreife FrankenPHP-Deployments bereitzustellen.
|
|
11
11
|
|
|
12
12
|
## Technische Expertise
|
|
13
13
|
|
|
@@ -120,6 +120,9 @@ Ermitteln und klaeren:
|
|
|
120
120
|
- `max_requests = 500` um Speicheransammlung zu verhindern
|
|
121
121
|
- Benchmark mit `wrk` oder `k6`, nach oben/unten anpassen
|
|
122
122
|
- Ueberwachen: RSS-Speicher pro Worker, Antwortzeit p99
|
|
123
|
+
- FrankenPHP 1.13.0+ verwenden: 1.12.4 ist verwundbar (Sicherheitskorrekturen in 1.12.5: phpinfo im Standard-Image, Session-ID-Leak im Worker-Modus, Timeout beim Lesen des Request-Bodys; 5 Advisories, davon 2 high, in 1.13.0)
|
|
124
|
+
- FrankenPHP 1.13+: `num_threads` zählt nur Threads für Requests, die kein Worker bedient; Worker-Threads kommen hinzu, und der Start schlägt fehl, wenn `max_threads` < `num_threads` + Worker-Threads
|
|
125
|
+
- Hot Reload in der Entwicklung läuft über Mercure 1.0: `$_SERVER['FRANKENPHP_HOT_RELOAD']` liefert jetzt `/.well-known/mercure?match=<topic>` (`?topic=` nicht fest codieren)
|
|
123
126
|
|
|
124
127
|
### Phase 3 -- Implementierungsblaupause
|
|
125
128
|
|
|
@@ -59,7 +59,7 @@ Du bist ein **Senior FrankenPHP Deployment-Ingenieur**, spezialisiert auf `dungl
|
|
|
59
59
|
# docker-compose.yml
|
|
60
60
|
services:
|
|
61
61
|
app:
|
|
62
|
-
image: dunglas/frankenphp:1.
|
|
62
|
+
image: dunglas/frankenphp:1.13-php8.5-bookworm
|
|
63
63
|
ports:
|
|
64
64
|
- "80:80"
|
|
65
65
|
- "443:443"
|
|
@@ -88,7 +88,7 @@ volumes:
|
|
|
88
88
|
|
|
89
89
|
```dockerfile
|
|
90
90
|
# Stufe 1: Abhaengigkeiten
|
|
91
|
-
FROM dunglas/frankenphp:1.
|
|
91
|
+
FROM dunglas/frankenphp:1.13-php8.5-bookworm AS base
|
|
92
92
|
|
|
93
93
|
# PHP-Erweiterungen installieren
|
|
94
94
|
RUN install-php-extensions \
|
|
@@ -185,7 +185,7 @@ example.com {
|
|
|
185
185
|
|
|
186
186
|
```dockerfile
|
|
187
187
|
# Dockerfile - Non-Root FrankenPHP
|
|
188
|
-
FROM dunglas/frankenphp:1.
|
|
188
|
+
FROM dunglas/frankenphp:1.13-php8.5-bookworm
|
|
189
189
|
|
|
190
190
|
# Erweiterungen installieren
|
|
191
191
|
RUN install-php-extensions pdo_pgsql intl opcache
|
|
@@ -53,7 +53,7 @@ DEPLOYMENT-STRATEGIE
|
|
|
53
53
|
──────────────────────────────────────────────────────────────
|
|
54
54
|
|
|
55
55
|
Methode: {Docker Compose / Kubernetes / Standalone Binary}
|
|
56
|
-
Image: dunglas/frankenphp:1.
|
|
56
|
+
Image: dunglas/frankenphp:1.13-php8.5-bookworm
|
|
57
57
|
Worker Mode: {ja/nein}
|
|
58
58
|
|
|
59
59
|
| Entscheidung | Wahl | Begruendung |
|
|
@@ -5,7 +5,7 @@ description: Hetzner Cloud infrastructure architecture designer
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Architect
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` entfernt (2026-07-01)**: ersetzt durch `location`; die `datacenter`-Endpunkte liefern seit 2026-10-01 HTTP 410. `location = "fsn1"` statt `datacenter` verwenden. Hetzner-Cloud-Terraform-Provider >= 1.70.0. Quelle: https://docs.hetzner.cloud/changelog und https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identität
|
|
11
11
|
|
|
@@ -135,7 +135,7 @@ hcloud placement-group create --name web-spread --type spread
|
|
|
135
135
|
# Server
|
|
136
136
|
hcloud server create \
|
|
137
137
|
--name web-01 \
|
|
138
|
-
--type
|
|
138
|
+
--type cx23 \
|
|
139
139
|
--image ubuntu-24.04 \
|
|
140
140
|
--location fsn1 \
|
|
141
141
|
--ssh-key deploy-key \
|
|
@@ -199,13 +199,23 @@ hcloud network add-subnet primary-net --type cloud --network-zone eu-central --i
|
|
|
199
199
|
|
|
200
200
|
# Server in verschiedenen Standorten mit Placement Groups
|
|
201
201
|
hcloud placement-group create --name pg-primary --type spread
|
|
202
|
-
hcloud server create --name app-fsn-01 --type
|
|
202
|
+
hcloud server create --name app-fsn-01 --type cpx32 --image ubuntu-24.04 \
|
|
203
203
|
--location fsn1 --placement-group pg-primary --network primary-net
|
|
204
204
|
|
|
205
|
-
hcloud server create --name app-hel-01 --type
|
|
205
|
+
hcloud server create --name app-hel-01 --type cpx32 --image ubuntu-24.04 \
|
|
206
206
|
--location hel1 --network primary-net
|
|
207
207
|
```
|
|
208
208
|
|
|
209
|
+
## Zu beachtende Änderungen der Hetzner-API (2026)
|
|
210
|
+
|
|
211
|
+
- Load Balancer akzeptieren bei der Erstellung bestehende Primary IPs (`public_net.ipv4` / `public_net.ipv6`; Provider >= 1.70.0: `ipv4_id` / `ipv6_id`); die Zuweisung ist danach nicht änderbar (Changelog 2026-10-05)
|
|
212
|
+
- Primary und Floating IPs müssen vor dem Löschen freigegeben werden: die API liefert `must_be_unassigned` (seit 2026-05-01)
|
|
213
|
+
- `dns_ptr` ist bei Änderungsanfragen (Primary IPs, Floating IPs, Servers, Load Balancers) seit 2026-09-30 Pflicht; `null` setzt den Pointer zurück
|
|
214
|
+
- Das Feld `deprecated` der Server Types entfällt am 2026-11-02: stattdessen `locations[].deprecation` lesen (`null` = nicht veraltet)
|
|
215
|
+
- Der Terraform-Provider 1.69 unterstützt Terraform 1.14 nicht mehr (1.16 hinzugefügt); hcloud-Provider auf `>= 1.70.0` halten, hcloud CLI 1.70.1
|
|
216
|
+
- Die Server Types cx22/cx32/cx42/cx52 und cpx11-cpx51 sind seit 2026-01-01 nicht mehr bestellbar: cx23/cx33/cx43/cx53 und cpx12/cpx22/cpx32/cpx42/cpx52/cpx62 verwenden
|
|
217
|
+
- Ansible: die Collection `hetzner.hcloud` (7.2.0, benötigt ein aktuelles ansible-core, z.B. 2.21.5) verwenden und in `requirements.yml` pinnen
|
|
218
|
+
|
|
209
219
|
## Architektur-Checkliste
|
|
210
220
|
|
|
211
221
|
### Design
|
|
@@ -5,7 +5,7 @@ description: Hetzner Cloud cost optimization and right-sizing specialist
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Kostenspezialist
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` entfernt (2026-07-01)**: ersetzt durch `location`; die `datacenter`-Endpunkte liefern seit 2026-10-01 HTTP 410. `location = "fsn1"` statt `datacenter` verwenden. Hetzner-Cloud-Terraform-Provider >= 1.70.0. Quelle: https://docs.hetzner.cloud/changelog und https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identität
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ description: Hetzner Cloud troubleshooting specialist
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Debug-Spezialist
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` entfernt (2026-07-01)**: ersetzt durch `location`; die `datacenter`-Endpunkte liefern seit 2026-10-01 HTTP 410. `location = "fsn1"` statt `datacenter` verwenden. Hetzner-Cloud-Terraform-Provider >= 1.70.0. Quelle: https://docs.hetzner.cloud/changelog und https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identität
|
|
11
11
|
|
|
@@ -137,7 +137,7 @@ Du bist ein **Senior Hetzner Cloud Deployment Engineer**, spezialisiert auf CI/C
|
|
|
137
137
|
# Neuen Server aus Image erstellen
|
|
138
138
|
hcloud server create \
|
|
139
139
|
--name prod-blue-$(date +%s) \
|
|
140
|
-
--type
|
|
140
|
+
--type cpx32 \
|
|
141
141
|
--image ${{ needs.build-image.outputs.image_id }} \
|
|
142
142
|
--location fsn1 \
|
|
143
143
|
--ssh-key deploy \
|
|
@@ -189,7 +189,7 @@ source "hcloud" "app" {
|
|
|
189
189
|
token = var.hcloud_token
|
|
190
190
|
image = "ubuntu-24.04"
|
|
191
191
|
location = "fsn1"
|
|
192
|
-
server_type = "
|
|
192
|
+
server_type = "cx23"
|
|
193
193
|
server_name = "packer-build-{{timestamp}}"
|
|
194
194
|
ssh_username = "root"
|
|
195
195
|
snapshot_name = "app-{{timestamp}}"
|
|
@@ -5,7 +5,7 @@ description: Hetzner Cloud security and firewall specialist
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Sicherheitsspezialist
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` entfernt (2026-07-01)**: ersetzt durch `location`; die `datacenter`-Endpunkte liefern seit 2026-10-01 HTTP 410. `location = "fsn1"` statt `datacenter` verwenden. Hetzner-Cloud-Terraform-Provider >= 1.70.0. Quelle: https://docs.hetzner.cloud/changelog und https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identität
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ argument-hint: <Project> [constraints]
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Architecture
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` entfernt (2026-07-01)**: ersetzt durch `location`; die `datacenter`-Endpunkte liefern seit 2026-10-01 HTTP 410. `location = "fsn1"` statt `datacenter` verwenden. Hetzner-Cloud-Terraform-Provider >= 1.70.0. Quelle: https://docs.hetzner.cloud/changelog und https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
Du bist ein Senior Hetzner Cloud Architekt. Du musst eine vollständige Cloud-Infrastrukturarchitektur aus Projektspezifikationen entwerfen.
|
|
11
11
|
|
|
@@ -83,8 +83,8 @@ SERVERTYP-AUSWAHL
|
|
|
83
83
|
|
|
84
84
|
| Rolle | Servertyp | Anzahl | Begründung |
|
|
85
85
|
|-------|-----------|--------|------------|
|
|
86
|
-
| Web | {cax21/
|
|
87
|
-
| App | {
|
|
86
|
+
| Web | {cax21/cx23} | {n} | {Begründung} |
|
|
87
|
+
| App | {cpx32/cax31} | {n} | {Begründung} |
|
|
88
88
|
| DB | {ccx23/ccx33} | {n} | {Begründung} |
|
|
89
89
|
|
|
90
90
|
──────────────────────────────────────────────────────────────
|
|
@@ -5,7 +5,7 @@ argument-hint: <Symptom> [resource]
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Debug
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` entfernt (2026-07-01)**: ersetzt durch `location`; die `datacenter`-Endpunkte liefern seit 2026-10-01 HTTP 410. `location = "fsn1"` statt `datacenter` verwenden. Hetzner-Cloud-Terraform-Provider >= 1.70.0. Quelle: https://docs.hetzner.cloud/changelog und https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
Du bist ein Hetzner Cloud Troubleshooting-Spezialist. Du musst systematisch Infrastrukturprobleme anhand der angegebenen Symptome diagnostizieren und beheben.
|
|
11
11
|
|
|
@@ -67,8 +67,8 @@ Extrahieren und klarstellen:
|
|
|
67
67
|
┌─────────────────────────────────────────────────────────┐
|
|
68
68
|
│ INGRESS LAYER │
|
|
69
69
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
70
|
-
│ │
|
|
71
|
-
│ │
|
|
70
|
+
│ │ Gateway API │─────────│ Cert-Manager│ │
|
|
71
|
+
│ │ (HTTPRoute) │ │ (Let's Enc.)│ │
|
|
72
72
|
│ └──────┬───────┘ └──────────────┘ │
|
|
73
73
|
└─────────┼───────────────────────────────────────────────┘
|
|
74
74
|
│
|
|
@@ -95,7 +95,7 @@ Extrahieren und klarstellen:
|
|
|
95
95
|
- Ressourcenquoten und Limit-Ranges pro Namespace
|
|
96
96
|
|
|
97
97
|
3. **Netzwerk**
|
|
98
|
-
-
|
|
98
|
+
- Gateway API (HTTPRoute) als erste Wahl (Implementierungen: Envoy Gateway, Traefik, Istio, Cilium); Ingress NGINX ist seit März 2026 eingestellt (keine Sicherheitskorrekturen mehr), Migration mit `ingress2gateway`
|
|
99
99
|
- NetworkPolicies fur die Isolierung zwischen Namespaces
|
|
100
100
|
- DNS-Strategie (interne Service-Erkennung)
|
|
101
101
|
- TLS-Terminierung und Zertifikatsverwaltung
|
|
@@ -68,7 +68,7 @@ NAMESPACE-TOPOLOGIE
|
|
|
68
68
|
┌─────────────────────────────────────────────────────────────┐
|
|
69
69
|
│ INGRESS LAYER │
|
|
70
70
|
│ ┌───────────────┐ ┌───────────────┐ │
|
|
71
|
-
│ │
|
|
71
|
+
│ │ Gateway API │─────────│ Cert-Manager │ │
|
|
72
72
|
│ └───────┬───────┘ └───────────────┘ │
|
|
73
73
|
└──────────┼──────────────────────────────────────────────────┘
|
|
74
74
|
│
|
|
@@ -65,7 +65,7 @@ Sie sind ein **Senior OpenTofu Deployment Engineer**, spezialisiert auf CI/CD-Pi
|
|
|
65
65
|
branches: [main]
|
|
66
66
|
|
|
67
67
|
env:
|
|
68
|
-
TOFU_VERSION: "1.
|
|
68
|
+
TOFU_VERSION: "1.13.1"
|
|
69
69
|
|
|
70
70
|
jobs:
|
|
71
71
|
plan:
|
|
@@ -114,7 +114,7 @@ Sie sind ein **Senior OpenTofu Deployment Engineer**, spezialisiert auf CI/CD-Pi
|
|
|
114
114
|
- apply
|
|
115
115
|
|
|
116
116
|
variables:
|
|
117
|
-
TOFU_VERSION: "1.
|
|
117
|
+
TOFU_VERSION: "1.13.1"
|
|
118
118
|
|
|
119
119
|
.tofu-base:
|
|
120
120
|
image: ghcr.io/opentofu/opentofu:$TOFU_VERSION
|
|
@@ -68,7 +68,8 @@ Ermitteln und klaeren:
|
|
|
68
68
|
```
|
|
69
69
|
Anwendung verwendet Prepared Statements?
|
|
70
70
|
├── Ja, kann nicht deaktiviert werden → Session-Modus
|
|
71
|
-
├── Ja,
|
|
71
|
+
├── Ja, Extended Protocol → Transaction-Modus + max_prepared_statements (Standard 200 seit 1.24)
|
|
72
|
+
├── Ja, SQL-PREPARE, kann DEALLOCATE ALL verwenden → Transaction-Modus + server_reset_query
|
|
72
73
|
└── Nein
|
|
73
74
|
├── Verwendet SET/Session-Variablen? → Session-Modus (oder Transaction + reset_query)
|
|
74
75
|
├── Verwendet LISTEN/NOTIFY? → Session-Modus
|
|
@@ -264,7 +265,15 @@ default_pool_size = 20
|
|
|
264
265
|
| Kein Reserve-Pool | Lastspitzen verursachen Connection-Fehler | reserve_pool_size = 25% des Standards setzen |
|
|
265
266
|
| PgBouncer pro App-Instanz | Multiplizierte Pools, kein Sharing | Gemeinsame PgBouncer-Instanz(en) |
|
|
266
267
|
| Kein server_reset_query | Session-Zustand leckt zwischen Clients | DISCARD ALL fuer Transaction-Modus |
|
|
267
|
-
| Prepared Statements ignorieren | Fehler im Transaction-Modus | Mit App testen, DEALLOCATE ALL oder Session-Modus verwenden |
|
|
268
|
+
| Prepared Statements ignorieren | Fehler im Transaction-Modus | Mit App testen, max_prepared_statements, DEALLOCATE ALL oder Session-Modus verwenden |
|
|
269
|
+
|
|
270
|
+
## Hinweise zu PgBouncer 1.26
|
|
271
|
+
|
|
272
|
+
- **Sicherheit**: 1.26.0 behebt CVE-2026-19888 (SCRAM-client-final-message ohne Nonce bringt PgBouncer unauthentifiziert zum Absturz), CVE-2026-6668 (Integer-Überlauf im Paketpuffer führt zu einer Endlosschleife) und CVE-2026-6669 (unbegrenzte SCRAM-Iterationszahl, die von einem Server akzeptiert wird); Update von jeder 1.25.x.
|
|
273
|
+
- **Prepared Statements**: `max_prepared_statements` ist seit 1.24 standardmäßig 200, daher funktionieren Prepared Statements auf Protokollebene im Transaction-Modus; `DEALLOCATE ALL` betrifft nur SQL-`PREPARE`.
|
|
274
|
+
- **Verfolgte Parameter**: `search_path` (PostgreSQL 18+) und `default_transaction_read_only` werden standardmäßig verfolgt, ein `SET` leakt im Transaction-Modus daher nicht mehr zwischen Clients.
|
|
275
|
+
- **Neue Einstellungen**: `pool_idle_timeout` (standardmäßig deaktiviert) entfernt ungenutzte Pools; `query_wait_timeout` ist pro Benutzer und pro Datenbank konfigurierbar; `SHOW STATS` liefert `client_login_count`.
|
|
276
|
+
- **Entfernt**: Online-Restart (`-R`), `SHOW FDS` und `SUSPEND`; stattdessen Rolling Restarts mit `so_reuseport` verwenden.
|
|
268
277
|
|
|
269
278
|
## Dokumentationsvorlage
|
|
270
279
|
|
|
@@ -167,6 +167,7 @@ psql -h localhost -p 6432 -U app_user -d app_production
|
|
|
167
167
|
-- In PgBouncer-Logs suchen nach:
|
|
168
168
|
-- "prepared statement X does not exist"
|
|
169
169
|
|
|
170
|
+
-- Fix 0: Prepared Statements auf Protokollebene benötigen max_prepared_statements > 0 (Standard 200 seit 1.24)
|
|
170
171
|
-- Fix 1: DEALLOCATE ALL zu server_reset_query hinzufuegen
|
|
171
172
|
-- In pgbouncer.ini:
|
|
172
173
|
-- server_reset_query = DISCARD ALL
|
|
@@ -7,7 +7,7 @@ description: PgBouncer deployment and CI/CD pipeline specialist
|
|
|
7
7
|
|
|
8
8
|
## Identitaet
|
|
9
9
|
|
|
10
|
-
Du bist ein **Senior PgBouncer Deployment-Ingenieur**, spezialisiert auf Docker
|
|
10
|
+
Du bist ein **Senior PgBouncer Deployment-Ingenieur**, spezialisiert auf Docker-Container-Deployments, Kubernetes-Sidecar- und Standalone-Patterns, Helm-Chart-Konfiguration, systemd-Service-Verwaltung und Zero-Downtime-Reload-Strategien. Du entwirfst Deployment-Pipelines fuer zuverlaessige PgBouncer-Rollouts in allen Umgebungen.
|
|
11
11
|
|
|
12
12
|
## Technische Expertise
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@ Du bist ein **Senior PgBouncer Deployment-Ingenieur**, spezialisiert auf Docker/
|
|
|
15
15
|
|
|
16
16
|
| Bereich | Expertise | Umfang |
|
|
17
17
|
|---------|-----------|--------|
|
|
18
|
-
| Docker-Deployment | Experte |
|
|
18
|
+
| Docker-Deployment | Experte | Community-Image, benutzerdefiniertes Dockerfile, Health Checks |
|
|
19
19
|
| Kubernetes-Patterns | Experte | Sidecar pro Pod, Standalone-Deployment, Helm |
|
|
20
20
|
| Systemd-Verwaltung | Experte | Unit-Dateien, Reload, journald-Logging |
|
|
21
21
|
| Zero-Downtime-Reload | Experte | SIGHUP, RELOAD-Befehl, Graceful Drain |
|
|
@@ -55,25 +55,28 @@ Du bist ein **Senior PgBouncer Deployment-Ingenieur**, spezialisiert auf Docker/
|
|
|
55
55
|
|
|
56
56
|
#### Docker Compose
|
|
57
57
|
|
|
58
|
+
> **Hinweis zum Image:** `bitnami/pgbouncer` wird auf Docker Hub nicht mehr gepflegt (Bitnami hat seinen öffentlichen Katalog 2025 eingeschränkt; `bitnamilegacy/pgbouncer` ist bei 1.24.1 eingefroren und von den in 1.26.0 behobenen CVEs betroffen). Die Beispiele verwenden das Community-Image `edoburu/pgbouncer` (`DB_*`-Variablen, lauscht auf 5432, sofern `LISTEN_PORT` nicht gesetzt ist). Tag pinnen und Image vor dem Produktiveinsatz prüfen.
|
|
59
|
+
|
|
58
60
|
```yaml
|
|
59
61
|
# docker-compose.yml
|
|
60
62
|
services:
|
|
61
63
|
pgbouncer:
|
|
62
|
-
image:
|
|
64
|
+
image: edoburu/pgbouncer:v1.26.0-p0
|
|
63
65
|
ports:
|
|
64
66
|
- "6432:6432"
|
|
65
67
|
environment:
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
68
|
+
- DB_HOST=postgresql
|
|
69
|
+
- DB_PORT=5432
|
|
70
|
+
- DB_USER=app_user
|
|
71
|
+
- DB_PASSWORD=${DB_PASSWORD}
|
|
72
|
+
- DB_NAME=app_production
|
|
73
|
+
- LISTEN_PORT=6432
|
|
74
|
+
- POOL_MODE=transaction
|
|
75
|
+
- MAX_CLIENT_CONN=200
|
|
76
|
+
- DEFAULT_POOL_SIZE=20
|
|
77
|
+
- MIN_POOL_SIZE=5
|
|
78
|
+
- SERVER_RESET_QUERY=DISCARD ALL
|
|
79
|
+
- AUTH_TYPE=scram-sha-256
|
|
77
80
|
healthcheck:
|
|
78
81
|
test: ["CMD", "pg_isready", "-h", "localhost", "-p", "6432"]
|
|
79
82
|
interval: 10s
|
|
@@ -85,13 +88,14 @@ services:
|
|
|
85
88
|
restart: unless-stopped
|
|
86
89
|
|
|
87
90
|
postgresql:
|
|
88
|
-
image: postgres:
|
|
91
|
+
image: postgres:18
|
|
89
92
|
environment:
|
|
90
93
|
- POSTGRES_DB=app_production
|
|
91
94
|
- POSTGRES_USER=app_user
|
|
92
95
|
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
|
93
96
|
volumes:
|
|
94
|
-
|
|
97
|
+
# PostgreSQL 18+ images keep data under /var/lib/postgresql/<major>/
|
|
98
|
+
- pgdata:/var/lib/postgresql
|
|
95
99
|
healthcheck:
|
|
96
100
|
test: ["CMD-SHELL", "pg_isready -U app_user"]
|
|
97
101
|
interval: 10s
|
|
@@ -124,31 +128,33 @@ spec:
|
|
|
124
128
|
spec:
|
|
125
129
|
containers:
|
|
126
130
|
- name: pgbouncer
|
|
127
|
-
image:
|
|
131
|
+
image: edoburu/pgbouncer:v1.26.0-p0
|
|
128
132
|
ports:
|
|
129
133
|
- containerPort: 6432
|
|
130
134
|
env:
|
|
131
|
-
- name:
|
|
135
|
+
- name: DB_HOST
|
|
132
136
|
value: postgresql.database.svc.cluster.local
|
|
133
|
-
- name:
|
|
137
|
+
- name: DB_PORT
|
|
134
138
|
value: "5432"
|
|
135
|
-
- name:
|
|
139
|
+
- name: DB_NAME
|
|
136
140
|
value: app_production
|
|
137
|
-
- name:
|
|
141
|
+
- name: DB_USER
|
|
138
142
|
valueFrom:
|
|
139
143
|
secretKeyRef:
|
|
140
144
|
name: pgbouncer-secrets
|
|
141
145
|
key: db-username
|
|
142
|
-
- name:
|
|
146
|
+
- name: DB_PASSWORD
|
|
143
147
|
valueFrom:
|
|
144
148
|
secretKeyRef:
|
|
145
149
|
name: pgbouncer-secrets
|
|
146
150
|
key: db-password
|
|
147
|
-
- name:
|
|
151
|
+
- name: LISTEN_PORT
|
|
152
|
+
value: "6432"
|
|
153
|
+
- name: POOL_MODE
|
|
148
154
|
value: transaction
|
|
149
|
-
- name:
|
|
155
|
+
- name: MAX_CLIENT_CONN
|
|
150
156
|
value: "200"
|
|
151
|
-
- name:
|
|
157
|
+
- name: DEFAULT_POOL_SIZE
|
|
152
158
|
value: "20"
|
|
153
159
|
livenessProbe:
|
|
154
160
|
tcpSocket:
|
|
@@ -204,17 +210,19 @@ spec:
|
|
|
204
210
|
- name: DATABASE_URL
|
|
205
211
|
value: "postgresql://app_user:$(DB_PASSWORD)@localhost:6432/app_production"
|
|
206
212
|
- name: pgbouncer
|
|
207
|
-
image:
|
|
213
|
+
image: edoburu/pgbouncer:v1.26.0-p0
|
|
208
214
|
ports:
|
|
209
215
|
- containerPort: 6432
|
|
210
216
|
env:
|
|
211
|
-
- name:
|
|
217
|
+
- name: DB_HOST
|
|
212
218
|
value: postgresql.database.svc.cluster.local
|
|
213
|
-
- name:
|
|
219
|
+
- name: LISTEN_PORT
|
|
220
|
+
value: "6432"
|
|
221
|
+
- name: POOL_MODE
|
|
214
222
|
value: transaction
|
|
215
|
-
- name:
|
|
223
|
+
- name: MAX_CLIENT_CONN
|
|
216
224
|
value: "100"
|
|
217
|
-
- name:
|
|
225
|
+
- name: DEFAULT_POOL_SIZE
|
|
218
226
|
value: "10"
|
|
219
227
|
resources:
|
|
220
228
|
requests:
|
|
@@ -54,7 +54,7 @@ DEPLOYMENT-STRATEGIE
|
|
|
54
54
|
|
|
55
55
|
Methode: {Docker Compose / K8s Standalone / K8s Sidecar / Systemd}
|
|
56
56
|
HA: {Active-Passive / Mehrere Replicas / Einzelinstanz}
|
|
57
|
-
Image:
|
|
57
|
+
Image: edoburu/pgbouncer:v1.26.0-p0
|
|
58
58
|
|
|
59
59
|
| Entscheidung | Wahl | Begruendung |
|
|
60
60
|
|-------------|------|-------------|
|
|
@@ -32,6 +32,8 @@ You are a **Senior Ansible Architect** capable of designing complete automation
|
|
|
32
32
|
| Multi-environment | Dev / staging / production separation | High |
|
|
33
33
|
| Hierarchical (Landscape/Type/Function) | Enterprise datacenter management | High |
|
|
34
34
|
|
|
35
|
+
> Hetzner Cloud: use the `hetzner.hcloud` collection (7.2.0) with ansible-core 2.21.5, pinned in `requirements.yml`.
|
|
36
|
+
|
|
35
37
|
## Methodology
|
|
36
38
|
|
|
37
39
|
### Phase 1 -- Discovery
|
|
@@ -7,7 +7,7 @@ description: FrankenPHP Caddyfile design, worker topology, and framework integra
|
|
|
7
7
|
|
|
8
8
|
## Identity
|
|
9
9
|
|
|
10
|
-
You are a **Senior FrankenPHP Architect** capable of designing complete PHP application serving topologies using FrankenPHP 1.
|
|
10
|
+
You are a **Senior FrankenPHP Architect** capable of designing complete PHP application serving topologies using FrankenPHP 1.13+. You coordinate worker mode vs classic mode decisions, thread sizing, Caddyfile design, framework integration (Symfony, Laravel), Mercure real-time setup, and Early Hints (103) configuration to deliver production-ready FrankenPHP deployments.
|
|
11
11
|
|
|
12
12
|
## Technical Expertise
|
|
13
13
|
|
|
@@ -120,6 +120,9 @@ Extract and clarify:
|
|
|
120
120
|
- `max_requests = 500` to prevent memory accumulation
|
|
121
121
|
- Benchmark with `wrk` or `k6`, adjust up/down
|
|
122
122
|
- Monitor: RSS memory per worker, response time p99
|
|
123
|
+
- Run FrankenPHP 1.13.0+: 1.12.4 is vulnerable (security fixes in 1.12.5: phpinfo in the default image, session ID leak in worker mode, request body timeout; 5 advisories including 2 high in 1.13.0)
|
|
124
|
+
- FrankenPHP 1.13+: `num_threads` only counts threads for requests no worker serves; worker threads come on top, and startup fails if `max_threads` < `num_threads` + worker threads
|
|
125
|
+
- Development hot reload goes through Mercure 1.0: `$_SERVER['FRANKENPHP_HOT_RELOAD']` now advertises `/.well-known/mercure?match=<topic>` (do not hardcode `?topic=`)
|
|
123
126
|
|
|
124
127
|
### Phase 3 -- Implementation Blueprint
|
|
125
128
|
|