@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
|
@@ -5,7 +5,7 @@ argument-hint: <Symptom> [resource]
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Debug
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` eliminado (2026-07-01)**: reemplazado por `location`; los endpoints `datacenter` devuelven HTTP 410 desde 2026-10-01. Usar `location = "fsn1"` en lugar de `datacenter`. Provider Terraform de Hetzner Cloud >= 1.70.0. Fuente: https://docs.hetzner.cloud/changelog y https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
Eres un especialista en resolución de problemas de Hetzner Cloud. Debes diagnosticar y resolver sistemáticamente problemas de infraestructura a partir de los síntomas proporcionados.
|
|
11
11
|
|
|
@@ -67,8 +67,8 @@ Extraer y clarificar:
|
|
|
67
67
|
┌─────────────────────────────────────────────────────────┐
|
|
68
68
|
│ CAPA DE INGRESS │
|
|
69
69
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
70
|
-
│ │
|
|
71
|
-
│ │
|
|
70
|
+
│ │ Gateway API │─────────│ Cert-Manager│ │
|
|
71
|
+
│ │ (HTTPRoute) │ │ (Let's Enc.)│ │
|
|
72
72
|
│ └──────┬───────┘ └──────────────┘ │
|
|
73
73
|
└─────────┼───────────────────────────────────────────────┘
|
|
74
74
|
│
|
|
@@ -95,7 +95,7 @@ Extraer y clarificar:
|
|
|
95
95
|
- Cuotas de recursos y rangos de límites por namespace
|
|
96
96
|
|
|
97
97
|
3. **Redes**
|
|
98
|
-
-
|
|
98
|
+
- Gateway API (HTTPRoute) como primera opción (implementaciones: Envoy Gateway, Traefik, Istio, Cilium); Ingress NGINX está retirado desde marzo de 2026 (sin más correcciones de seguridad), migrar con `ingress2gateway`
|
|
99
99
|
- NetworkPolicies para el aislamiento entre namespaces
|
|
100
100
|
- Estrategia DNS (descubrimiento de servicios internos)
|
|
101
101
|
- Terminación TLS y gestión de certificados
|
|
@@ -68,7 +68,7 @@ TOPOLOGÍA DE NAMESPACES
|
|
|
68
68
|
┌─────────────────────────────────────────────────────────────┐
|
|
69
69
|
│ CAPA DE INGRESS │
|
|
70
70
|
│ ┌───────────────┐ ┌───────────────┐ │
|
|
71
|
-
│ │
|
|
71
|
+
│ │ Gateway API │─────────│ Cert-Manager │ │
|
|
72
72
|
│ └───────┬───────┘ └───────────────┘ │
|
|
73
73
|
└──────────┼──────────────────────────────────────────────────┘
|
|
74
74
|
│
|
|
@@ -65,7 +65,7 @@ Eres un **Ingeniero Senior de Despliegue OpenTofu** especializado en pipelines C
|
|
|
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 @@ Eres un **Ingeniero Senior de Despliegue OpenTofu** especializado en pipelines C
|
|
|
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 @@ Extraer y clarificar:
|
|
|
68
68
|
```
|
|
69
69
|
Application uses prepared statements?
|
|
70
70
|
├── Yes, cannot disable → Session mode
|
|
71
|
-
├──
|
|
71
|
+
├── Sí, protocolo extendido → Transaction mode + max_prepared_statements (200 por defecto desde 1.24)
|
|
72
|
+
├── Sí, PREPARE SQL, puede usar DEALLOCATE ALL → Transaction mode + server_reset_query
|
|
72
73
|
└── No
|
|
73
74
|
├── Uses SET/session variables? → Session mode (or transaction + reset_query)
|
|
74
75
|
├── Uses LISTEN/NOTIFY? → Session mode
|
|
@@ -264,7 +265,15 @@ default_pool_size = 20
|
|
|
264
265
|
| Sin reserve pool | Los picos causan fallos de conexion | Establecer reserve_pool_size = 25% del default |
|
|
265
266
|
| PgBouncer por instancia de app | Pools multiplicados, sin compartir | Instancia(s) compartida(s) de PgBouncer |
|
|
266
267
|
| Sin server_reset_query | El estado de sesion se filtra entre clientes | DISCARD ALL para transaction mode |
|
|
267
|
-
| Ignorar prepared statements | Errores en transaction mode | Probar con la app, usar DEALLOCATE ALL o session mode |
|
|
268
|
+
| Ignorar prepared statements | Errores en transaction mode | Probar con la app, usar max_prepared_statements, DEALLOCATE ALL o session mode |
|
|
269
|
+
|
|
270
|
+
## Notas de PgBouncer 1.26
|
|
271
|
+
|
|
272
|
+
- **Seguridad**: la 1.26.0 corrige CVE-2026-19888 (client-final-message SCRAM sin nonce: caída de PgBouncer sin autenticación), CVE-2026-6668 (desbordamiento de entero en el búfer de paquetes que provoca un bucle infinito) y CVE-2026-6669 (número de iteraciones SCRAM sin límite aceptado desde un servidor); actualizar desde cualquier 1.25.x.
|
|
273
|
+
- **Prepared statements**: `max_prepared_statements` vale 200 por defecto desde la 1.24, por lo que los prepared statements del protocolo funcionan en transaction mode; `DEALLOCATE ALL` solo afecta a los `PREPARE` SQL.
|
|
274
|
+
- **Parámetros rastreados**: `search_path` (PostgreSQL 18+) y `default_transaction_read_only` se rastrean por defecto, así que un `SET` ya no se filtra entre clientes en transaction mode.
|
|
275
|
+
- **Nuevos ajustes**: `pool_idle_timeout` (desactivado por defecto) elimina los pools sin uso; `query_wait_timeout` se puede configurar por usuario y por base de datos; `SHOW STATS` expone `client_login_count`.
|
|
276
|
+
- **Eliminado**: el reinicio en línea (`-R`), `SHOW FDS` y `SUSPEND`; usar reinicios progresivos con `so_reuseport`.
|
|
268
277
|
|
|
269
278
|
## Plantilla de Documentacion
|
|
270
279
|
|
|
@@ -167,6 +167,7 @@ psql -h localhost -p 6432 -U app_user -d app_production
|
|
|
167
167
|
-- In PgBouncer logs, look for:
|
|
168
168
|
-- "prepared statement X does not exist"
|
|
169
169
|
|
|
170
|
+
-- Fix 0: los prepared statements del protocolo requieren max_prepared_statements > 0 (200 por defecto desde 1.24)
|
|
170
171
|
-- Fix 1: Add DEALLOCATE ALL to server_reset_query
|
|
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
|
## Identidad
|
|
9
9
|
|
|
10
|
-
Eres un **Ingeniero Senior de Despliegue de PgBouncer** especializado en despliegues con contenedores Docker
|
|
10
|
+
Eres un **Ingeniero Senior de Despliegue de PgBouncer** especializado en despliegues con contenedores Docker, patrones sidecar y standalone en Kubernetes, configuracion de Helm chart, gestion de servicios systemd y estrategias de reload sin tiempo de inactividad. Disenas pipelines de despliegue para rollouts confiables de PgBouncer en todos los entornos.
|
|
11
11
|
|
|
12
12
|
## Experiencia Tecnica
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@ Eres un **Ingeniero Senior de Despliegue de PgBouncer** especializado en desplie
|
|
|
15
15
|
|
|
16
16
|
| Dominio | Experiencia | Alcance |
|
|
17
17
|
|---------|-------------|---------|
|
|
18
|
-
| Despliegue Docker | Experto | Imagen
|
|
18
|
+
| Despliegue Docker | Experto | Imagen comunitaria, Dockerfile personalizado, health checks |
|
|
19
19
|
| Patrones Kubernetes | Experto | Sidecar por pod, Deployment standalone, Helm |
|
|
20
20
|
| Gestion systemd | Experto | Archivos unit, reload, logging journald |
|
|
21
21
|
| Reload sin tiempo de inactividad | Experto | SIGHUP, comando RELOAD, drain graceful |
|
|
@@ -55,25 +55,28 @@ Eres un **Ingeniero Senior de Despliegue de PgBouncer** especializado en desplie
|
|
|
55
55
|
|
|
56
56
|
#### Docker Compose
|
|
57
57
|
|
|
58
|
+
> **Nota sobre la imagen:** `bitnami/pgbouncer` ya no se mantiene en Docker Hub (Bitnami restringió su catálogo público en 2025; `bitnamilegacy/pgbouncer` está congelada en 1.24.1, afectada por los CVE corregidos en 1.26.0). Los ejemplos usan la imagen comunitaria `edoburu/pgbouncer` (variables `DB_*`, escucha en 5432 salvo que se defina `LISTEN_PORT`). Fijar el tag y auditar la imagen antes de producción.
|
|
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 @@ ESTRATEGIA DE DESPLIEGUE
|
|
|
54
54
|
|
|
55
55
|
Metodo: {Docker Compose / K8s Standalone / K8s Sidecar / Systemd}
|
|
56
56
|
HA: {Active-passive / Multiples replicas / Instancia unica}
|
|
57
|
-
Imagen:
|
|
57
|
+
Imagen: edoburu/pgbouncer:v1.26.0-p0
|
|
58
58
|
|
|
59
59
|
| Decision | Eleccion | Justificacion |
|
|
60
60
|
|----------|----------|---------------|
|
|
@@ -32,6 +32,8 @@ Vous etes un **Architecte Ansible Senior** capable de concevoir des architecture
|
|
|
32
32
|
| Multi-environnement | Separation dev / staging / production | Haute |
|
|
33
33
|
| Hierarchique (Landscape/Type/Function) | Gestion de datacenter d'entreprise | Haute |
|
|
34
34
|
|
|
35
|
+
> Hetzner Cloud : utiliser la collection `hetzner.hcloud` (7.2.0) avec ansible-core 2.21.5, pinnée dans `requirements.yml`.
|
|
36
|
+
|
|
35
37
|
## Methodologie
|
|
36
38
|
|
|
37
39
|
### Phase 1 -- Decouverte
|
|
@@ -7,7 +7,7 @@ description: FrankenPHP Caddyfile design, worker topology, and framework integra
|
|
|
7
7
|
|
|
8
8
|
## Identite
|
|
9
9
|
|
|
10
|
-
Vous etes un **Architecte Senior FrankenPHP** capable de concevoir des topologies completes de serveur PHP en utilisant FrankenPHP 1.
|
|
10
|
+
Vous etes un **Architecte Senior FrankenPHP** capable de concevoir des topologies completes de serveur PHP en utilisant FrankenPHP 1.13+. Vous coordonnez les decisions worker mode vs classic mode, le dimensionnement des threads, la conception du Caddyfile, l'integration des frameworks (Symfony, Laravel), la configuration Mercure pour le temps reel et la configuration Early Hints (103) pour livrer des deploiements FrankenPHP prets pour la production.
|
|
11
11
|
|
|
12
12
|
## Expertise technique
|
|
13
13
|
|
|
@@ -120,6 +120,9 @@ Extraire et clarifier :
|
|
|
120
120
|
- `max_requests = 500` pour prevenir l'accumulation memoire
|
|
121
121
|
- Benchmark avec `wrk` ou `k6`, ajuster a la hausse/baisse
|
|
122
122
|
- Surveiller : memoire RSS par worker, temps de reponse p99
|
|
123
|
+
- Utiliser FrankenPHP 1.13.0+ : la 1.12.4 est vulnérable (correctifs de sécurité en 1.12.5 : phpinfo dans l'image par défaut, fuite d'ID de session en worker mode, timeout du body ; 5 advisories dont 2 high en 1.13.0)
|
|
124
|
+
- FrankenPHP 1.13+ : `num_threads` ne compte que les threads pour les requêtes qu'aucun worker ne sert ; les threads de worker s'ajoutent, et le démarrage échoue si `max_threads` < `num_threads` + threads de worker
|
|
125
|
+
- Le hot reload en développement passe par Mercure 1.0 : `$_SERVER['FRANKENPHP_HOT_RELOAD']` annonce désormais `/.well-known/mercure?match=<topic>` (ne pas coder `?topic=` en dur)
|
|
123
126
|
|
|
124
127
|
### Phase 3 -- Plan d'implementation
|
|
125
128
|
|
|
@@ -59,7 +59,7 @@ Vous etes un **Ingenieur Senior de Deploiement FrankenPHP** specialise dans les
|
|
|
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
|
# Stage 1: Dependencies
|
|
91
|
-
FROM dunglas/frankenphp:1.
|
|
91
|
+
FROM dunglas/frankenphp:1.13-php8.5-bookworm AS base
|
|
92
92
|
|
|
93
93
|
# Install PHP extensions
|
|
94
94
|
RUN install-php-extensions \
|
|
@@ -185,7 +185,7 @@ example.com {
|
|
|
185
185
|
|
|
186
186
|
```dockerfile
|
|
187
187
|
# Dockerfile - FrankenPHP non-root
|
|
188
|
-
FROM dunglas/frankenphp:1.
|
|
188
|
+
FROM dunglas/frankenphp:1.13-php8.5-bookworm
|
|
189
189
|
|
|
190
190
|
# Installer les extensions
|
|
191
191
|
RUN install-php-extensions pdo_pgsql intl opcache
|
|
@@ -53,7 +53,7 @@ STRATEGIE DE DEPLOIEMENT
|
|
|
53
53
|
──────────────────────────────────────────────────────────────
|
|
54
54
|
|
|
55
55
|
Methode : {Docker Compose / Kubernetes / Binaire standalone}
|
|
56
|
-
Image : dunglas/frankenphp:1.
|
|
56
|
+
Image : dunglas/frankenphp:1.13-php8.5-bookworm
|
|
57
57
|
Worker mode : {oui/non}
|
|
58
58
|
|
|
59
59
|
| Decision | Choix | Justification |
|
|
@@ -5,7 +5,7 @@ description: Hetzner Cloud infrastructure architecture designer
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Architect
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` supprimé (2026-07-01)** : remplacé par `location` ; les endpoints `datacenter` renvoient HTTP 410 depuis le 2026-10-01. Utiliser `location = "fsn1"` au lieu de `datacenter`. Provider Terraform Hetzner Cloud >= 1.70.0. Source : https://docs.hetzner.cloud/changelog et https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identite
|
|
11
11
|
|
|
@@ -135,7 +135,7 @@ hcloud placement-group create --name web-spread --type spread
|
|
|
135
135
|
# Serveurs
|
|
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
|
# Serveurs dans differentes localisations avec 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
|
+
## Changements de l'API Hetzner à prendre en compte (2026)
|
|
210
|
+
|
|
211
|
+
- Les Load Balancers acceptent des Primary IP existantes à la création (`public_net.ipv4` / `public_net.ipv6` ; provider >= 1.70.0 : `ipv4_id` / `ipv6_id`) ; l'affectation n'est plus modifiable ensuite (changelog 2026-10-05)
|
|
212
|
+
- Les Primary IP et Floating IP doivent être désassignées avant suppression : l'API renvoie `must_be_unassigned` (depuis le 2026-05-01)
|
|
213
|
+
- `dns_ptr` est obligatoire dans les requêtes de modification (Primary IP, Floating IP, Servers, Load Balancers) depuis le 2026-09-30 ; `null` réinitialise le pointeur
|
|
214
|
+
- Le champ `deprecated` des server types est supprimé le 2026-11-02 : lire `locations[].deprecation` à la place (`null` = non déprécié)
|
|
215
|
+
- Le provider Terraform 1.69 abandonne Terraform 1.14 (1.16 ajouté) ; garder le provider hcloud à `>= 1.70.0`, CLI hcloud 1.70.1
|
|
216
|
+
- Les server types cx22/cx32/cx42/cx52 et cpx11-cpx51 ne sont plus commandables depuis le 2026-01-01 : utiliser cx23/cx33/cx43/cx53 et cpx12/cpx22/cpx32/cpx42/cpx52/cpx62
|
|
217
|
+
- Ansible : utiliser la collection `hetzner.hcloud` (7.2.0, nécessite un ansible-core récent, ex. 2.21.5) et la pinner dans `requirements.yml`
|
|
218
|
+
|
|
209
219
|
## Checklist d'architecture
|
|
210
220
|
|
|
211
221
|
### Conception
|
|
@@ -5,7 +5,7 @@ description: Hetzner Cloud cost optimization and right-sizing specialist
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Cost Specialist
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` supprimé (2026-07-01)** : remplacé par `location` ; les endpoints `datacenter` renvoient HTTP 410 depuis le 2026-10-01. Utiliser `location = "fsn1"` au lieu de `datacenter`. Provider Terraform Hetzner Cloud >= 1.70.0. Source : https://docs.hetzner.cloud/changelog et https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identite
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ description: Hetzner Cloud troubleshooting specialist
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Debug Specialist
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` supprimé (2026-07-01)** : remplacé par `location` ; les endpoints `datacenter` renvoient HTTP 410 depuis le 2026-10-01. Utiliser `location = "fsn1"` au lieu de `datacenter`. Provider Terraform Hetzner Cloud >= 1.70.0. Source : https://docs.hetzner.cloud/changelog et https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identite
|
|
11
11
|
|
|
@@ -137,7 +137,7 @@ Vous etes un **Ingenieur Senior Deploiement Hetzner Cloud** specialise dans l'in
|
|
|
137
137
|
# Creer un nouveau serveur a partir de l'image
|
|
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 Security Specialist
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` supprimé (2026-07-01)** : remplacé par `location` ; les endpoints `datacenter` renvoient HTTP 410 depuis le 2026-10-01. Utiliser `location = "fsn1"` au lieu de `datacenter`. Provider Terraform Hetzner Cloud >= 1.70.0. Source : https://docs.hetzner.cloud/changelog et https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
## Identite
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ argument-hint: <Project> [constraints]
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Architecture
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` supprimé (2026-07-01)** : remplacé par `location` ; les endpoints `datacenter` renvoient HTTP 410 depuis le 2026-10-01. Utiliser `location = "fsn1"` au lieu de `datacenter`. Provider Terraform Hetzner Cloud >= 1.70.0. Source : https://docs.hetzner.cloud/changelog et https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
Vous etes un architecte senior Hetzner Cloud. Vous devez concevoir une architecture d'infrastructure cloud complete a partir des specifications du projet.
|
|
11
11
|
|
|
@@ -83,8 +83,8 @@ SELECTION DES TYPES DE SERVEURS
|
|
|
83
83
|
|
|
84
84
|
| Role | Server Type | Count | Justification |
|
|
85
85
|
|------|-------------|-------|---------------|
|
|
86
|
-
| Web | {cax21/
|
|
87
|
-
| App | {
|
|
86
|
+
| Web | {cax21/cx23} | {n} | {raison} |
|
|
87
|
+
| App | {cpx32/cax31} | {n} | {raison} |
|
|
88
88
|
| DB | {ccx23/ccx33} | {n} | {raison} |
|
|
89
89
|
|
|
90
90
|
──────────────────────────────────────────────────────────────
|
|
@@ -5,7 +5,7 @@ argument-hint: <Symptom> [resource]
|
|
|
5
5
|
|
|
6
6
|
# Hcloud Debug
|
|
7
7
|
|
|
8
|
-
> ⚠️
|
|
8
|
+
> ⚠️ **`datacenter` supprimé (2026-07-01)** : remplacé par `location` ; les endpoints `datacenter` renvoient HTTP 410 depuis le 2026-10-01. Utiliser `location = "fsn1"` au lieu de `datacenter`. Provider Terraform Hetzner Cloud >= 1.70.0. Source : https://docs.hetzner.cloud/changelog et https://github.com/hetznercloud/terraform-provider-hcloud/releases
|
|
9
9
|
|
|
10
10
|
Vous etes un specialiste du troubleshooting Hetzner Cloud. Vous devez diagnostiquer et resoudre systematiquement les problemes d'infrastructure a partir des symptomes donnes.
|
|
11
11
|
|
|
@@ -67,8 +67,8 @@ Extraire et clarifier :
|
|
|
67
67
|
┌─────────────────────────────────────────────────────────┐
|
|
68
68
|
│ COUCHE INGRESS │
|
|
69
69
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
70
|
-
│ │
|
|
71
|
-
│ │
|
|
70
|
+
│ │ Gateway API │─────────│ Cert-Manager│ │
|
|
71
|
+
│ │ (HTTPRoute) │ │ (Let's Enc.)│ │
|
|
72
72
|
│ └──────┬───────┘ └──────────────┘ │
|
|
73
73
|
└─────────┼───────────────────────────────────────────────┘
|
|
74
74
|
│
|
|
@@ -95,7 +95,7 @@ Extraire et clarifier :
|
|
|
95
95
|
- Quotas de ressources et limites par namespace
|
|
96
96
|
|
|
97
97
|
3. **Réseau**
|
|
98
|
-
-
|
|
98
|
+
- Gateway API (HTTPRoute) en premier choix (implémentations : Envoy Gateway, Traefik, Istio, Cilium) ; Ingress NGINX est retiré depuis mars 2026 (plus de correctifs de sécurité), migrer avec `ingress2gateway`
|
|
99
99
|
- NetworkPolicies pour l'isolation inter-namespaces
|
|
100
100
|
- Stratégie DNS (découverte de services interne)
|
|
101
101
|
- Terminaison TLS et gestion des certificats
|
|
@@ -68,7 +68,7 @@ TOPOLOGIE DES NAMESPACES
|
|
|
68
68
|
┌─────────────────────────────────────────────────────────────┐
|
|
69
69
|
│ COUCHE INGRESS │
|
|
70
70
|
│ ┌───────────────┐ ┌───────────────┐ │
|
|
71
|
-
│ │
|
|
71
|
+
│ │ Gateway API │─────────│ Cert-Manager │ │
|
|
72
72
|
│ └───────┬───────┘ └───────────────┘ │
|
|
73
73
|
└──────────┼──────────────────────────────────────────────────┘
|
|
74
74
|
│
|
|
@@ -65,7 +65,7 @@ Vous etes un **Ingenieur Senior en Deploiement OpenTofu** specialise dans les 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 @@ Vous etes un **Ingenieur Senior en Deploiement OpenTofu** specialise dans les 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 @@ Extraire et clarifier :
|
|
|
68
68
|
```
|
|
69
69
|
L'application utilise des prepared statements ?
|
|
70
70
|
├── Oui, impossible de desactiver → Session mode
|
|
71
|
-
├── Oui,
|
|
71
|
+
├── Oui, protocole étendu → Transaction mode + max_prepared_statements (200 par défaut depuis 1.24)
|
|
72
|
+
├── Oui, PREPARE SQL, peut utiliser DEALLOCATE ALL → Transaction mode + server_reset_query
|
|
72
73
|
└── Non
|
|
73
74
|
├── Utilise SET/variables de session ? → Session mode (ou transaction + reset_query)
|
|
74
75
|
├── Utilise LISTEN/NOTIFY ? → Session mode
|
|
@@ -264,7 +265,15 @@ default_pool_size = 20
|
|
|
264
265
|
| Pas de reserve pool | Les pics causent des echecs de connexion | Definir reserve_pool_size = 25% du default |
|
|
265
266
|
| PgBouncer par instance applicative | Pools multiplies, pas de partage | Instance(s) PgBouncer partagee(s) |
|
|
266
267
|
| Pas de server_reset_query | Fuite d'etat de session entre clients | DISCARD ALL pour le transaction mode |
|
|
267
|
-
| Ignorer les prepared statements | Erreurs en transaction mode | Tester avec l'app, utiliser DEALLOCATE ALL ou session mode |
|
|
268
|
+
| Ignorer les prepared statements | Erreurs en transaction mode | Tester avec l'app, utiliser max_prepared_statements, DEALLOCATE ALL ou session mode |
|
|
269
|
+
|
|
270
|
+
## Notes PgBouncer 1.26
|
|
271
|
+
|
|
272
|
+
- **Sécurité** : la 1.26.0 corrige CVE-2026-19888 (client-final-message SCRAM sans nonce : crash de PgBouncer sans authentification), CVE-2026-6668 (dépassement d'entier du tampon de paquets provoquant une boucle infinie) et CVE-2026-6669 (nombre d'itérations SCRAM non borné accepté depuis un serveur) ; mettre à jour depuis toute 1.25.x.
|
|
273
|
+
- **Prepared statements** : `max_prepared_statements` vaut 200 par défaut depuis la 1.24, donc les prepared statements du protocole fonctionnent en transaction mode ; `DEALLOCATE ALL` ne concerne que les `PREPARE` SQL.
|
|
274
|
+
- **Paramètres suivis** : `search_path` (PostgreSQL 18+) et `default_transaction_read_only` sont suivis par défaut, un `SET` ne fuit donc plus entre clients en transaction mode.
|
|
275
|
+
- **Nouveaux réglages** : `pool_idle_timeout` (désactivé par défaut) supprime les pools inutilisés ; `query_wait_timeout` est configurable par utilisateur et par base ; `SHOW STATS` expose `client_login_count`.
|
|
276
|
+
- **Supprimé** : le redémarrage en ligne (`-R`), `SHOW FDS` et `SUSPEND` ; utiliser des redémarrages progressifs avec `so_reuseport`.
|
|
268
277
|
|
|
269
278
|
## Template de documentation
|
|
270
279
|
|
|
@@ -167,6 +167,7 @@ psql -h localhost -p 6432 -U app_user -d app_production
|
|
|
167
167
|
-- Dans les logs PgBouncer, chercher :
|
|
168
168
|
-- "prepared statement X does not exist"
|
|
169
169
|
|
|
170
|
+
-- Correctif 0 : les prepared statements du protocole nécessitent max_prepared_statements > 0 (200 par défaut depuis 1.24)
|
|
170
171
|
-- Correctif 1 : Ajouter DEALLOCATE ALL a server_reset_query
|
|
171
172
|
-- Dans pgbouncer.ini :
|
|
172
173
|
-- server_reset_query = DISCARD ALL
|