@jetrabbits/agentic 0.0.1
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/AGENTS.md +143 -0
- package/README.md +154 -0
- package/agentic +1615 -0
- package/areas/devops/ci-cd/AGENTS.md +48 -0
- package/areas/devops/ci-cd/PROMPTS.md +7 -0
- package/areas/devops/ci-cd/prompts/onboard-repo.md +97 -0
- package/areas/devops/ci-cd/prompts/pipeline-debug.md +103 -0
- package/areas/devops/ci-cd/prompts/release-pipeline.md +115 -0
- package/areas/devops/ci-cd/rules/pipeline-standards.md +33 -0
- package/areas/devops/ci-cd/rules/quality-gates.md +24 -0
- package/areas/devops/ci-cd/rules/supply-chain-security.md +34 -0
- package/areas/devops/ci-cd/skills/artifact-management/SKILL.md +157 -0
- package/areas/devops/ci-cd/skills/build-optimization/SKILL.md +168 -0
- package/areas/devops/ci-cd/skills/github-actions-patterns/SKILL.md +190 -0
- package/areas/devops/ci-cd/skills/gitlab-ci-patterns/SKILL.md +169 -0
- package/areas/devops/ci-cd/skills/pipeline-security/SKILL.md +161 -0
- package/areas/devops/ci-cd/workflows/onboard-repo.md +73 -0
- package/areas/devops/ci-cd/workflows/pipeline-debug.md +66 -0
- package/areas/devops/ci-cd/workflows/release-pipeline.md +115 -0
- package/areas/devops/database-ops/AGENTS.md +47 -0
- package/areas/devops/database-ops/prompts/backup-verify.md +83 -0
- package/areas/devops/database-ops/prompts/db-incident.md +127 -0
- package/areas/devops/database-ops/rules/access-control.md +20 -0
- package/areas/devops/database-ops/rules/backup-policy.md +33 -0
- package/areas/devops/database-ops/rules/migration-runbook.md +32 -0
- package/areas/devops/database-ops/skills/backup-restore/SKILL.md +226 -0
- package/areas/devops/database-ops/skills/db-performance/SKILL.md +205 -0
- package/areas/devops/database-ops/skills/migration-safety/SKILL.md +155 -0
- package/areas/devops/database-ops/skills/postgres-operations/SKILL.md +156 -0
- package/areas/devops/database-ops/skills/redis-operations/SKILL.md +174 -0
- package/areas/devops/database-ops/workflows/backup-verify.md +107 -0
- package/areas/devops/database-ops/workflows/db-incident.md +86 -0
- package/areas/devops/devsecops/AGENTS.md +47 -0
- package/areas/devops/devsecops/prompts/policy-onboard.md +79 -0
- package/areas/devops/devsecops/prompts/security-scan-pipeline.md +131 -0
- package/areas/devops/devsecops/rules/container-security.md +22 -0
- package/areas/devops/devsecops/rules/policy-as-code.md +37 -0
- package/areas/devops/devsecops/rules/shift-left-policy.md +26 -0
- package/areas/devops/devsecops/skills/container-hardening/SKILL.md +146 -0
- package/areas/devops/devsecops/skills/opa-policies/SKILL.md +188 -0
- package/areas/devops/devsecops/skills/sbom-supply-chain/SKILL.md +165 -0
- package/areas/devops/devsecops/skills/secret-detection/SKILL.md +190 -0
- package/areas/devops/devsecops/skills/sigstore-signing/SKILL.md +184 -0
- package/areas/devops/devsecops/workflows/policy-onboard.md +104 -0
- package/areas/devops/devsecops/workflows/security-scan-pipeline.md +155 -0
- package/areas/devops/infrastructure/AGENTS.md +50 -0
- package/areas/devops/infrastructure/prompts/destroy-environment.md +81 -0
- package/areas/devops/infrastructure/prompts/drift-remediation.md +71 -0
- package/areas/devops/infrastructure/prompts/module-development.md +69 -0
- package/areas/devops/infrastructure/prompts/provision-environment.md +121 -0
- package/areas/devops/infrastructure/rules/iac-standards.md +80 -0
- package/areas/devops/infrastructure/rules/immutability.md +28 -0
- package/areas/devops/infrastructure/rules/secret-hygiene.md +53 -0
- package/areas/devops/infrastructure/rules/state-management.md +47 -0
- package/areas/devops/infrastructure/skills/ansible-playbooks/SKILL.md +174 -0
- package/areas/devops/infrastructure/skills/cost-optimization/SKILL.md +177 -0
- package/areas/devops/infrastructure/skills/drift-detection/SKILL.md +178 -0
- package/areas/devops/infrastructure/skills/state-management/SKILL.md +159 -0
- package/areas/devops/infrastructure/skills/terraform-modules/SKILL.md +169 -0
- package/areas/devops/infrastructure/workflows/destroy-environment.md +96 -0
- package/areas/devops/infrastructure/workflows/drift-remediation.md +66 -0
- package/areas/devops/infrastructure/workflows/module-development.md +101 -0
- package/areas/devops/infrastructure/workflows/provision-environment.md +96 -0
- package/areas/devops/kubernetes/AGENTS.md +57 -0
- package/areas/devops/kubernetes/PROMPTS.md +9 -0
- package/areas/devops/kubernetes/prompts/cluster-bootstrap.md +67 -0
- package/areas/devops/kubernetes/prompts/debug-workload.md +91 -0
- package/areas/devops/kubernetes/prompts/onboard-service.md +101 -0
- package/areas/devops/kubernetes/prompts/upgrade-cluster.md +63 -0
- package/areas/devops/kubernetes/rules/cluster-standards.md +51 -0
- package/areas/devops/kubernetes/rules/resource-governance.md +80 -0
- package/areas/devops/kubernetes/rules/upgrade-policy.md +52 -0
- package/areas/devops/kubernetes/rules/workload-security.md +64 -0
- package/areas/devops/kubernetes/skills/cluster-operations/SKILL.md +136 -0
- package/areas/devops/kubernetes/skills/helm-charts/SKILL.md +152 -0
- package/areas/devops/kubernetes/skills/network-policies/SKILL.md +169 -0
- package/areas/devops/kubernetes/skills/pod-troubleshooting/SKILL.md +129 -0
- package/areas/devops/kubernetes/skills/rbac-design/SKILL.md +148 -0
- package/areas/devops/kubernetes/skills/resource-tuning/SKILL.md +156 -0
- package/areas/devops/kubernetes/workflows/cluster-bootstrap.md +194 -0
- package/areas/devops/kubernetes/workflows/debug-workload.md +108 -0
- package/areas/devops/kubernetes/workflows/onboard-service.md +124 -0
- package/areas/devops/kubernetes/workflows/upgrade-cluster.md +165 -0
- package/areas/devops/networking/AGENTS.md +47 -0
- package/areas/devops/networking/prompts/onboard-ingress.md +119 -0
- package/areas/devops/networking/prompts/service-mesh-onboard.md +77 -0
- package/areas/devops/networking/rules/ingress-standards.md +17 -0
- package/areas/devops/networking/rules/network-segmentation.md +24 -0
- package/areas/devops/networking/rules/tls-policy.md +32 -0
- package/areas/devops/networking/skills/dns-management/SKILL.md +169 -0
- package/areas/devops/networking/skills/ingress-patterns/SKILL.md +165 -0
- package/areas/devops/networking/skills/service-mesh/SKILL.md +206 -0
- package/areas/devops/networking/skills/tls-termination/SKILL.md +198 -0
- package/areas/devops/networking/skills/vpc-design/SKILL.md +132 -0
- package/areas/devops/networking/workflows/onboard-ingress.md +64 -0
- package/areas/devops/networking/workflows/service-mesh-onboard.md +122 -0
- package/areas/devops/observability/AGENTS.md +48 -0
- package/areas/devops/observability/prompts/alert-investigation.md +117 -0
- package/areas/devops/observability/prompts/observability-stack-setup.md +99 -0
- package/areas/devops/observability/prompts/onboard-service-monitoring.md +79 -0
- package/areas/devops/observability/rules/alerting-standards.md +36 -0
- package/areas/devops/observability/rules/data-retention.md +19 -0
- package/areas/devops/observability/rules/golden-signals.md +28 -0
- package/areas/devops/observability/skills/distributed-tracing/SKILL.md +149 -0
- package/areas/devops/observability/skills/grafana-dashboards/SKILL.md +201 -0
- package/areas/devops/observability/skills/log-aggregation/SKILL.md +159 -0
- package/areas/devops/observability/skills/prometheus-alertmanager/SKILL.md +188 -0
- package/areas/devops/observability/skills/slo-implementation/SKILL.md +189 -0
- package/areas/devops/observability/workflows/alert-investigation.md +98 -0
- package/areas/devops/observability/workflows/observability-stack-setup.md +156 -0
- package/areas/devops/observability/workflows/onboard-service-monitoring.md +83 -0
- package/areas/devops/sre/AGENTS.md +48 -0
- package/areas/devops/sre/prompts/incident-response.md +129 -0
- package/areas/devops/sre/prompts/postmortem.md +101 -0
- package/areas/devops/sre/prompts/slo-review.md +125 -0
- package/areas/devops/sre/rules/error-budget-policy.md +25 -0
- package/areas/devops/sre/rules/on-call-standards.md +25 -0
- package/areas/devops/sre/rules/slo-policy.md +31 -0
- package/areas/devops/sre/skills/capacity-planning/SKILL.md +162 -0
- package/areas/devops/sre/skills/chaos-engineering/SKILL.md +186 -0
- package/areas/devops/sre/skills/incident-command/SKILL.md +119 -0
- package/areas/devops/sre/skills/postmortem-analysis/SKILL.md +104 -0
- package/areas/devops/sre/skills/slo-sli-design/SKILL.md +145 -0
- package/areas/devops/sre/workflows/incident-response.md +66 -0
- package/areas/devops/sre/workflows/postmortem.md +90 -0
- package/areas/devops/sre/workflows/slo-review.md +95 -0
- package/areas/software/backend/AGENTS.md +59 -0
- package/areas/software/backend/PROMPTS.md +50 -0
- package/areas/software/backend/README.md +48 -0
- package/areas/software/backend/prompts/add-migration.md +93 -0
- package/areas/software/backend/prompts/create-endpoint.md +97 -0
- package/areas/software/backend/prompts/debug-issue.md +87 -0
- package/areas/software/backend/prompts/develop-epic.md +83 -0
- package/areas/software/backend/prompts/develop-feature.md +91 -0
- package/areas/software/backend/prompts/refactor-module.md +79 -0
- package/areas/software/backend/prompts/test-feature.md +89 -0
- package/areas/software/backend/rules/architecture.md +20 -0
- package/areas/software/backend/rules/data_access.md +20 -0
- package/areas/software/backend/rules/security.md +20 -0
- package/areas/software/backend/rules/testing.md +19 -0
- package/areas/software/backend/skills/api-design/SKILL.md +170 -0
- package/areas/software/backend/skills/async-processing/SKILL.md +152 -0
- package/areas/software/backend/skills/database-modeling/SKILL.md +173 -0
- package/areas/software/backend/skills/observability/SKILL.md +162 -0
- package/areas/software/backend/skills/troubleshooting/SKILL.md +139 -0
- package/areas/software/backend/workflows/add-migration.md +79 -0
- package/areas/software/backend/workflows/create-endpoint.md +89 -0
- package/areas/software/backend/workflows/debug-issue.md +77 -0
- package/areas/software/backend/workflows/develop-epic.md +78 -0
- package/areas/software/backend/workflows/develop-feature.md +98 -0
- package/areas/software/backend/workflows/refactor-module.md +73 -0
- package/areas/software/backend/workflows/test-feature.md +67 -0
- package/areas/software/data-engineering/AGENTS.md +59 -0
- package/areas/software/data-engineering/PROMPTS.md +32 -0
- package/areas/software/data-engineering/prompts/backfill-data.md +107 -0
- package/areas/software/data-engineering/prompts/data-quality-incident.md +109 -0
- package/areas/software/data-engineering/prompts/lineage-trace.md +121 -0
- package/areas/software/data-engineering/prompts/new-model.md +117 -0
- package/areas/software/data-engineering/prompts/schema-migration.md +111 -0
- package/areas/software/data-engineering/rules/data-governance.md +11 -0
- package/areas/software/data-engineering/rules/pii-handling.md +19 -0
- package/areas/software/data-engineering/rules/pipeline-integrity.md +11 -0
- package/areas/software/data-engineering/rules/schema-management.md +21 -0
- package/areas/software/data-engineering/skills/data-modeling/SKILL.md +49 -0
- package/areas/software/data-engineering/skills/dbt-patterns/SKILL.md +43 -0
- package/areas/software/data-engineering/skills/lineage-governance/SKILL.md +38 -0
- package/areas/software/data-engineering/skills/orchestration/SKILL.md +35 -0
- package/areas/software/data-engineering/skills/quality-checks/SKILL.md +50 -0
- package/areas/software/data-engineering/skills/sql-optimization/SKILL.md +47 -0
- package/areas/software/data-engineering/skills/streaming-patterns/SKILL.md +48 -0
- package/areas/software/data-engineering/workflows/backfill-data.md +59 -0
- package/areas/software/data-engineering/workflows/data-quality-incident.md +64 -0
- package/areas/software/data-engineering/workflows/lineage-trace.md +56 -0
- package/areas/software/data-engineering/workflows/new-model.md +71 -0
- package/areas/software/data-engineering/workflows/schema-migration.md +67 -0
- package/areas/software/frontend/AGENTS.md +60 -0
- package/areas/software/frontend/PROMPTS.md +32 -0
- package/areas/software/frontend/prompts/a11y-fix.md +75 -0
- package/areas/software/frontend/prompts/bundle-analyze.md +75 -0
- package/areas/software/frontend/prompts/release-prep.md +83 -0
- package/areas/software/frontend/prompts/scaffold-component.md +69 -0
- package/areas/software/frontend/prompts/visual-regression.md +73 -0
- package/areas/software/frontend/rules/accessibility.md +16 -0
- package/areas/software/frontend/rules/architecture.md +29 -0
- package/areas/software/frontend/rules/performance.md +23 -0
- package/areas/software/frontend/rules/quality.md +12 -0
- package/areas/software/frontend/skills/a11y-audit/SKILL.md +61 -0
- package/areas/software/frontend/skills/api-integration/SKILL.md +58 -0
- package/areas/software/frontend/skills/component-design/SKILL.md +171 -0
- package/areas/software/frontend/skills/css-architecture/SKILL.md +146 -0
- package/areas/software/frontend/skills/error-handling/SKILL.md +55 -0
- package/areas/software/frontend/skills/performance-tuning/SKILL.md +58 -0
- package/areas/software/frontend/skills/state-management/SKILL.md +54 -0
- package/areas/software/frontend/skills/testing-patterns/SKILL.md +69 -0
- package/areas/software/frontend/workflows/a11y-fix.md +63 -0
- package/areas/software/frontend/workflows/bundle-analyze.md +56 -0
- package/areas/software/frontend/workflows/release-prep.md +66 -0
- package/areas/software/frontend/workflows/scaffold-component.md +67 -0
- package/areas/software/frontend/workflows/visual-regression.md +65 -0
- package/areas/software/full-stack/AGENTS.md +72 -0
- package/areas/software/full-stack/PROMPTS.md +66 -0
- package/areas/software/full-stack/prompts/backend-project-full-cycle.md +141 -0
- package/areas/software/full-stack/prompts/debug-issue.md +115 -0
- package/areas/software/full-stack/prompts/develop-feature.md +119 -0
- package/areas/software/full-stack/prompts/feature-implementation-flow.md +137 -0
- package/areas/software/full-stack/prompts/testing-ci-pipeline.md +119 -0
- package/areas/software/full-stack/rules/api-design-guide.md +24 -0
- package/areas/software/full-stack/rules/async-concurrency-guide.md +21 -0
- package/areas/software/full-stack/rules/backend-architecture-rule.md +41 -0
- package/areas/software/full-stack/rules/background-jobs-guide.md +20 -0
- package/areas/software/full-stack/rules/code-quality-guide.md +22 -0
- package/areas/software/full-stack/rules/database-access-guide.md +24 -0
- package/areas/software/full-stack/rules/database-migrations-guide.md +24 -0
- package/areas/software/full-stack/rules/domain-models-guide.md +28 -0
- package/areas/software/full-stack/rules/e2e-test-guide.md +18 -0
- package/areas/software/full-stack/rules/env-settings-guide.md +34 -0
- package/areas/software/full-stack/rules/error-handling-guide.md +20 -0
- package/areas/software/full-stack/rules/logging-observability-guide.md +22 -0
- package/areas/software/full-stack/rules/project-guide.md +34 -0
- package/areas/software/full-stack/rules/python-venv-guide.md +23 -0
- package/areas/software/full-stack/rules/security-guide.md +22 -0
- package/areas/software/full-stack/rules/svt-test-guide.md +17 -0
- package/areas/software/full-stack/rules/testing-ci-guide.md +25 -0
- package/areas/software/full-stack/skills/api-design-principles/SKILL.md +125 -0
- package/areas/software/full-stack/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/areas/software/full-stack/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/areas/software/full-stack/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/areas/software/full-stack/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/areas/software/full-stack/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/areas/software/full-stack/skills/api-patterns/SKILL.md +81 -0
- package/areas/software/full-stack/skills/api-patterns/api-style.md +42 -0
- package/areas/software/full-stack/skills/api-patterns/auth.md +24 -0
- package/areas/software/full-stack/skills/api-patterns/documentation.md +26 -0
- package/areas/software/full-stack/skills/api-patterns/graphql.md +41 -0
- package/areas/software/full-stack/skills/api-patterns/rate-limiting.md +31 -0
- package/areas/software/full-stack/skills/api-patterns/response.md +37 -0
- package/areas/software/full-stack/skills/api-patterns/rest.md +40 -0
- package/areas/software/full-stack/skills/api-patterns/scripts/api_validator.py +211 -0
- package/areas/software/full-stack/skills/api-patterns/security-testing.md +122 -0
- package/areas/software/full-stack/skills/api-patterns/trpc.md +41 -0
- package/areas/software/full-stack/skills/api-patterns/versioning.md +22 -0
- package/areas/software/full-stack/skills/app-builder/SKILL.md +135 -0
- package/areas/software/full-stack/skills/app-builder/agent-coordination.md +71 -0
- package/areas/software/full-stack/skills/app-builder/feature-building.md +53 -0
- package/areas/software/full-stack/skills/app-builder/project-detection.md +34 -0
- package/areas/software/full-stack/skills/app-builder/scaffolding.md +118 -0
- package/areas/software/full-stack/skills/app-builder/tech-stack.md +40 -0
- package/areas/software/full-stack/skills/app-builder/templates/SKILL.md +39 -0
- package/areas/software/full-stack/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/areas/software/full-stack/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/areas/software/full-stack/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/areas/software/full-stack/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/areas/software/full-stack/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/areas/software/full-stack/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/areas/software/full-stack/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/areas/software/full-stack/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
- package/areas/software/full-stack/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/areas/software/full-stack/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/areas/software/full-stack/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/areas/software/full-stack/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/areas/software/full-stack/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/areas/software/full-stack/skills/backend-developer/SKILL.md +58 -0
- package/areas/software/full-stack/skills/bash-pro/SKILL.md +310 -0
- package/areas/software/full-stack/skills/blackbox-test/SKILL.md +84 -0
- package/areas/software/full-stack/skills/prompt-project-planner/SKILL.md +130 -0
- package/areas/software/full-stack/skills/prompt-project-planner/output.schema.md +68 -0
- package/areas/software/full-stack/skills/prompt-project-planner/questions.md +80 -0
- package/areas/software/full-stack/skills/python-pro/SKILL.md +158 -0
- package/areas/software/full-stack/skills/skill-creator/LICENSE.txt +202 -0
- package/areas/software/full-stack/skills/skill-creator/SKILL.md +356 -0
- package/areas/software/full-stack/skills/skill-creator/references/output-patterns.md +82 -0
- package/areas/software/full-stack/skills/skill-creator/references/workflows.md +28 -0
- package/areas/software/full-stack/skills/skill-creator/scripts/init_skill.py +303 -0
- package/areas/software/full-stack/skills/skill-creator/scripts/package_skill.py +110 -0
- package/areas/software/full-stack/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/areas/software/full-stack/workflows/backend-project-full-cycle.md +132 -0
- package/areas/software/full-stack/workflows/debug-issue.md +70 -0
- package/areas/software/full-stack/workflows/develop-feature.md +85 -0
- package/areas/software/full-stack/workflows/feature-implementation-flow.md +78 -0
- package/areas/software/full-stack/workflows/testing-ci-pipeline.md +65 -0
- package/areas/software/general/AGENTS.md +68 -0
- package/areas/software/general/prompts/code-review-workflow.md +87 -0
- package/areas/software/general/prompts/development-cycle-workflow.md +83 -0
- package/areas/software/general/prompts/project-setup-workflow.md +93 -0
- package/areas/software/general/rules/code-style-guide.md +31 -0
- package/areas/software/general/rules/docker-compose-guide.md +27 -0
- package/areas/software/general/rules/git-workflow-guide.md +27 -0
- package/areas/software/general/rules/github-workflow-guide.md +27 -0
- package/areas/software/general/rules/gitlab-ci-guide.md +27 -0
- package/areas/software/general/rules/lint-format-guide.md +29 -0
- package/areas/software/general/rules/makefile-guide.md +34 -0
- package/areas/software/general/rules/readme-sync-guide.md +40 -0
- package/areas/software/general/rules/sdlc-methodology-guide.md +27 -0
- package/areas/software/general/rules/sdlc-role-responsibilities.md +108 -0
- package/areas/software/general/skills/general-dev-tools/SKILL.md +324 -0
- package/areas/software/general/workflows/code-review-workflow.md +84 -0
- package/areas/software/general/workflows/development-cycle-workflow.md +85 -0
- package/areas/software/general/workflows/project-setup-workflow.md +94 -0
- package/areas/software/mlops/AGENTS.md +57 -0
- package/areas/software/mlops/PROMPTS.md +32 -0
- package/areas/software/mlops/prompts/champion-challenger.md +87 -0
- package/areas/software/mlops/prompts/deploy-endpoint.md +91 -0
- package/areas/software/mlops/prompts/evaluate-model.md +87 -0
- package/areas/software/mlops/prompts/model-incident.md +87 -0
- package/areas/software/mlops/prompts/train-experiment.md +83 -0
- package/areas/software/mlops/rules/data-integrity.md +9 -0
- package/areas/software/mlops/rules/model-governance.md +9 -0
- package/areas/software/mlops/rules/production-safety.md +9 -0
- package/areas/software/mlops/rules/reproducibility.md +9 -0
- package/areas/software/mlops/skills/experiment-tracking/SKILL.md +29 -0
- package/areas/software/mlops/skills/feature-engineering/SKILL.md +44 -0
- package/areas/software/mlops/skills/inference-serving/SKILL.md +35 -0
- package/areas/software/mlops/skills/model-evaluation/SKILL.md +40 -0
- package/areas/software/mlops/skills/model-monitoring/SKILL.md +32 -0
- package/areas/software/mlops/workflows/champion-challenger.md +65 -0
- package/areas/software/mlops/workflows/deploy-endpoint.md +70 -0
- package/areas/software/mlops/workflows/evaluate-model.md +63 -0
- package/areas/software/mlops/workflows/model-incident.md +64 -0
- package/areas/software/mlops/workflows/train-experiment.md +56 -0
- package/areas/software/mobile/AGENTS.md +58 -0
- package/areas/software/mobile/PROMPTS.md +32 -0
- package/areas/software/mobile/prompts/crash-triage.md +63 -0
- package/areas/software/mobile/prompts/device-testing.md +83 -0
- package/areas/software/mobile/prompts/ota-update.md +75 -0
- package/areas/software/mobile/prompts/release-build.md +67 -0
- package/areas/software/mobile/prompts/store-submission.md +79 -0
- package/areas/software/mobile/rules/offline-first.md +10 -0
- package/areas/software/mobile/rules/performance-budget.md +20 -0
- package/areas/software/mobile/rules/platform-compliance.md +17 -0
- package/areas/software/mobile/rules/security-mobile.md +9 -0
- package/areas/software/mobile/skills/app-store-prep/SKILL.md +27 -0
- package/areas/software/mobile/skills/mobile-testing/SKILL.md +36 -0
- package/areas/software/mobile/skills/native-modules/SKILL.md +38 -0
- package/areas/software/mobile/skills/navigation-patterns/SKILL.md +49 -0
- package/areas/software/mobile/skills/push-notifications/SKILL.md +40 -0
- package/areas/software/mobile/skills/state-sync/SKILL.md +48 -0
- package/areas/software/mobile/workflows/crash-triage.md +63 -0
- package/areas/software/mobile/workflows/device-testing.md +54 -0
- package/areas/software/mobile/workflows/ota-update.md +54 -0
- package/areas/software/mobile/workflows/release-build.md +67 -0
- package/areas/software/mobile/workflows/store-submission.md +63 -0
- package/areas/software/platform/AGENTS.md +67 -0
- package/areas/software/platform/PROMPTS.md +32 -0
- package/areas/software/platform/prompts/cost-audit.md +117 -0
- package/areas/software/platform/prompts/deploy-production.md +109 -0
- package/areas/software/platform/prompts/drift-check.md +107 -0
- package/areas/software/platform/prompts/incident-response.md +121 -0
- package/areas/software/platform/prompts/provision-env.md +113 -0
- package/areas/software/platform/rules/cost-governance.md +11 -0
- package/areas/software/platform/rules/immutability.md +17 -0
- package/areas/software/platform/rules/reliability.md +19 -0
- package/areas/software/platform/rules/security-posture.md +12 -0
- package/areas/software/platform/skills/ci-cd-pipelines/SKILL.md +58 -0
- package/areas/software/platform/skills/incident-response/SKILL.md +41 -0
- package/areas/software/platform/skills/k8s-manifests/SKILL.md +56 -0
- package/areas/software/platform/skills/networking/SKILL.md +44 -0
- package/areas/software/platform/skills/observability-setup/SKILL.md +49 -0
- package/areas/software/platform/skills/secrets-management/SKILL.md +43 -0
- package/areas/software/platform/skills/terraform-patterns/SKILL.md +75 -0
- package/areas/software/platform/workflows/cost-audit.md +61 -0
- package/areas/software/platform/workflows/deploy-production.md +67 -0
- package/areas/software/platform/workflows/drift-check.md +61 -0
- package/areas/software/platform/workflows/incident-response.md +69 -0
- package/areas/software/platform/workflows/provision-env.md +77 -0
- package/areas/software/qa/AGENTS.md +58 -0
- package/areas/software/qa/PROMPTS.md +32 -0
- package/areas/software/qa/prompts/flakiness-investigation.md +61 -0
- package/areas/software/qa/prompts/performance-audit.md +65 -0
- package/areas/software/qa/prompts/regression-suite.md +61 -0
- package/areas/software/qa/prompts/smoke-test.md +65 -0
- package/areas/software/qa/prompts/test-coverage-report.md +61 -0
- package/areas/software/qa/rules/flakiness-policy.md +12 -0
- package/areas/software/qa/rules/quality-gates.md +28 -0
- package/areas/software/qa/rules/test-data.md +9 -0
- package/areas/software/qa/rules/test-strategy.md +11 -0
- package/areas/software/qa/skills/accessibility-testing/SKILL.md +139 -0
- package/areas/software/qa/skills/api-testing/SKILL.md +140 -0
- package/areas/software/qa/skills/e2e-patterns/SKILL.md +152 -0
- package/areas/software/qa/skills/performance-testing/SKILL.md +177 -0
- package/areas/software/qa/skills/test-data-management/SKILL.md +161 -0
- package/areas/software/qa/skills/test-pyramid/SKILL.md +127 -0
- package/areas/software/qa/workflows/flakiness-investigation.md +63 -0
- package/areas/software/qa/workflows/performance-audit.md +59 -0
- package/areas/software/qa/workflows/regression-suite.md +59 -0
- package/areas/software/qa/workflows/smoke-test.md +64 -0
- package/areas/software/qa/workflows/test-coverage-report.md +57 -0
- package/areas/software/security/AGENTS.md +58 -0
- package/areas/software/security/PROMPTS.md +32 -0
- package/areas/software/security/prompts/compliance-report.md +113 -0
- package/areas/software/security/prompts/pen-test-sim.md +113 -0
- package/areas/software/security/prompts/secret-rotation.md +115 -0
- package/areas/software/security/prompts/security-scan.md +91 -0
- package/areas/software/security/prompts/threat-model-review.md +105 -0
- package/areas/software/security/rules/compliance-baseline.md +23 -0
- package/areas/software/security/rules/dependency-policy.md +12 -0
- package/areas/software/security/rules/secrets-policy.md +22 -0
- package/areas/software/security/rules/secure-coding.md +22 -0
- package/areas/software/security/skills/auth-patterns/SKILL.md +42 -0
- package/areas/software/security/skills/crypto-standards/SKILL.md +42 -0
- package/areas/software/security/skills/dependency-audit/SKILL.md +29 -0
- package/areas/software/security/skills/sast-dast-interpretation/SKILL.md +33 -0
- package/areas/software/security/skills/security-headers/SKILL.md +29 -0
- package/areas/software/security/skills/threat-modeling/SKILL.md +36 -0
- package/areas/software/security/workflows/compliance-report.md +57 -0
- package/areas/software/security/workflows/pen-test-sim.md +63 -0
- package/areas/software/security/workflows/secret-rotation.md +67 -0
- package/areas/software/security/workflows/security-scan.md +64 -0
- package/areas/software/security/workflows/threat-model-review.md +62 -0
- package/areas/template/AGENTS-area.tmpl.md +61 -0
- package/areas/template/AGENTS.tmpl.md +67 -0
- package/areas/template/GUIDE.md +102 -0
- package/areas/template/PROMPTS.tmpl.md +29 -0
- package/areas/template/README.md +57 -0
- package/areas/template/README.tmpl.md +51 -0
- package/areas/template/prompt.tmpl.md +101 -0
- package/areas/template/rule.tmpl.md +71 -0
- package/areas/template/skill.tmpl.md +108 -0
- package/areas/template/workflow.tmpl.md +104 -0
- package/bin/agentic.js +24 -0
- package/extensions/antigravity/GEMINI.md +10 -0
- package/extensions/claude/CLAUDE.md +10 -0
- package/extensions/codex/AGENTS.override.md +93 -0
- package/extensions/gemini/GEMINI.md +10 -0
- package/extensions/opencode/agents/designer.md +65 -0
- package/extensions/opencode/agents/developer.md +63 -0
- package/extensions/opencode/agents/devops-engineer.md +69 -0
- package/extensions/opencode/agents/pm.md +61 -0
- package/extensions/opencode/agents/product-owner.md +76 -0
- package/extensions/opencode/agents/qa.md +66 -0
- package/extensions/opencode/agents/team-lead.md +67 -0
- package/extensions/opencode/commands/feature.md +75 -0
- package/extensions/opencode/opencode.json +93 -0
- package/extensions/opencode/plugins/model-checker.json +14 -0
- package/extensions/opencode/plugins/model-checker.ts +279 -0
- package/extensions/opencode/plugins/sound-notification.ts +13 -0
- package/extensions/opencode/plugins/telegram-notification.ts +86 -0
- package/extensions/opencode/skills/code_review_expert/SKILL.md +144 -0
- package/extensions/opencode/skills/design_expert/SKILL.md +42 -0
- package/extensions/opencode/skills/qa_expert/SKILL.md +116 -0
- package/package.json +19 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backup-restore
|
|
3
|
+
type: skill
|
|
4
|
+
description: PostgreSQL backup and restore with pgBackRest — full/incremental/WAL, PITR, K8s CronJob scheduling, and restore verification.
|
|
5
|
+
related-rules:
|
|
6
|
+
- backup-policy.md
|
|
7
|
+
allowed-tools: Read, Write, Edit, Bash
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Skill: Backup & Restore
|
|
11
|
+
|
|
12
|
+
> **Expertise:** pgBackRest full/WAL/incremental backup, PITR, S3/MinIO storage, CronJob scheduling, CloudNativePG backup CRDs.
|
|
13
|
+
|
|
14
|
+
## When to load
|
|
15
|
+
|
|
16
|
+
When configuring backup infrastructure, running a restore, verifying backup integrity, or recovering from data loss.
|
|
17
|
+
|
|
18
|
+
## pgBackRest Configuration
|
|
19
|
+
|
|
20
|
+
```ini
|
|
21
|
+
# /etc/pgbackrest/pgbackrest.conf
|
|
22
|
+
[global]
|
|
23
|
+
repo1-type=s3
|
|
24
|
+
repo1-path=/postgres-backups
|
|
25
|
+
repo1-s3-bucket=mycompany-db-backups
|
|
26
|
+
repo1-s3-endpoint=s3.eu-west-1.amazonaws.com
|
|
27
|
+
repo1-s3-region=eu-west-1
|
|
28
|
+
repo1-s3-key=<AWS_ACCESS_KEY>
|
|
29
|
+
repo1-s3-key-secret=<AWS_SECRET_KEY>
|
|
30
|
+
repo1-cipher-type=aes-256-cbc
|
|
31
|
+
repo1-cipher-pass=<STRONG_PASSPHRASE> # rotate annually
|
|
32
|
+
repo1-retention-full=4 # keep 4 full backups
|
|
33
|
+
repo1-retention-diff=14 # keep 14 differential backups
|
|
34
|
+
|
|
35
|
+
[global:archive-push]
|
|
36
|
+
compress-level=3
|
|
37
|
+
|
|
38
|
+
[production-db]
|
|
39
|
+
pg1-path=/var/lib/postgresql/data
|
|
40
|
+
pg1-host=postgres-primary
|
|
41
|
+
pg1-host-user=postgres
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## PostgreSQL: Enable WAL Archiving
|
|
45
|
+
|
|
46
|
+
```sql
|
|
47
|
+
-- postgresql.conf (or via ALTER SYSTEM)
|
|
48
|
+
ALTER SYSTEM SET wal_level = replica;
|
|
49
|
+
ALTER SYSTEM SET archive_mode = on;
|
|
50
|
+
ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=production-db archive-push %p';
|
|
51
|
+
ALTER SYSTEM SET archive_timeout = '300'; -- archive segment at least every 5 min
|
|
52
|
+
SELECT pg_reload_conf();
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Backup Commands
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Initialize stanza (run once)
|
|
59
|
+
pgbackrest --stanza=production-db stanza-create
|
|
60
|
+
|
|
61
|
+
# Full backup (schedule: weekly)
|
|
62
|
+
pgbackrest --stanza=production-db --type=full backup
|
|
63
|
+
|
|
64
|
+
# Differential backup (changes since last full — schedule: daily)
|
|
65
|
+
pgbackrest --stanza=production-db --type=diff backup
|
|
66
|
+
|
|
67
|
+
# Incremental backup (changes since last backup — schedule: hourly)
|
|
68
|
+
pgbackrest --stanza=production-db --type=incr backup
|
|
69
|
+
|
|
70
|
+
# Check backup catalog
|
|
71
|
+
pgbackrest --stanza=production-db info
|
|
72
|
+
|
|
73
|
+
# Verify backup integrity (reads and checksums)
|
|
74
|
+
pgbackrest --stanza=production-db --set=<backup-label> check
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## PITR Restore (Point-in-Time Recovery)
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# PITR to specific timestamp (e.g., 1 minute before accidental DELETE)
|
|
81
|
+
# Step 1: Stop PostgreSQL
|
|
82
|
+
systemctl stop postgresql
|
|
83
|
+
|
|
84
|
+
# Step 2: Restore
|
|
85
|
+
pgbackrest --stanza=production-db \
|
|
86
|
+
--delta \
|
|
87
|
+
--target="2024-11-15 03:40:00+00" \
|
|
88
|
+
--target-action=promote \
|
|
89
|
+
--target-timeline=current \
|
|
90
|
+
restore
|
|
91
|
+
|
|
92
|
+
# Step 3: Start PostgreSQL in recovery mode
|
|
93
|
+
systemctl start postgresql
|
|
94
|
+
|
|
95
|
+
# Step 4: Monitor recovery progress
|
|
96
|
+
tail -f /var/log/postgresql/postgresql.log
|
|
97
|
+
# Watch for: "recovery stopping before commit of transaction"
|
|
98
|
+
# Then: "database system is ready to accept connections"
|
|
99
|
+
|
|
100
|
+
# Step 5: Verify data integrity
|
|
101
|
+
psql -c "SELECT count(*) FROM orders WHERE created_at > '2024-11-15 03:39:00';"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## K8s CronJob: Automated Backups
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
apiVersion: batch/v1
|
|
108
|
+
kind: CronJob
|
|
109
|
+
metadata:
|
|
110
|
+
name: postgres-backup-daily
|
|
111
|
+
namespace: database
|
|
112
|
+
spec:
|
|
113
|
+
schedule: "0 2 * * *" # 02:00 UTC daily
|
|
114
|
+
concurrencyPolicy: Forbid
|
|
115
|
+
successfulJobsHistoryLimit: 3
|
|
116
|
+
failedJobsHistoryLimit: 3
|
|
117
|
+
jobTemplate:
|
|
118
|
+
spec:
|
|
119
|
+
template:
|
|
120
|
+
spec:
|
|
121
|
+
serviceAccountName: postgres-backup
|
|
122
|
+
restartPolicy: OnFailure
|
|
123
|
+
containers:
|
|
124
|
+
- name: pgbackrest
|
|
125
|
+
image: pgbackrest/pgbackrest:2.50
|
|
126
|
+
command:
|
|
127
|
+
- /bin/sh
|
|
128
|
+
- -c
|
|
129
|
+
- |
|
|
130
|
+
pgbackrest --stanza=production-db --type=diff backup
|
|
131
|
+
pgbackrest --stanza=production-db check
|
|
132
|
+
envFrom:
|
|
133
|
+
- secretRef:
|
|
134
|
+
name: pgbackrest-s3-credentials
|
|
135
|
+
volumeMounts:
|
|
136
|
+
- name: pgbackrest-config
|
|
137
|
+
mountPath: /etc/pgbackrest
|
|
138
|
+
volumes:
|
|
139
|
+
- name: pgbackrest-config
|
|
140
|
+
configMap:
|
|
141
|
+
name: pgbackrest-config
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## CloudNativePG Backup (K8s Operator)
|
|
145
|
+
|
|
146
|
+
```yaml
|
|
147
|
+
# Cluster with scheduled backup
|
|
148
|
+
apiVersion: postgresql.cnpg.io/v1
|
|
149
|
+
kind: Cluster
|
|
150
|
+
metadata:
|
|
151
|
+
name: postgres-cluster
|
|
152
|
+
spec:
|
|
153
|
+
backup:
|
|
154
|
+
barmanObjectStore:
|
|
155
|
+
destinationPath: s3://mycompany-db-backups/production
|
|
156
|
+
s3Credentials:
|
|
157
|
+
accessKeyId:
|
|
158
|
+
name: s3-creds
|
|
159
|
+
key: ACCESS_KEY_ID
|
|
160
|
+
secretAccessKey:
|
|
161
|
+
name: s3-creds
|
|
162
|
+
key: SECRET_ACCESS_KEY
|
|
163
|
+
wal:
|
|
164
|
+
compression: gzip
|
|
165
|
+
data:
|
|
166
|
+
compression: gzip
|
|
167
|
+
retentionPolicy: "30d"
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
# Scheduled backup CRD
|
|
171
|
+
apiVersion: postgresql.cnpg.io/v1
|
|
172
|
+
kind: ScheduledBackup
|
|
173
|
+
metadata:
|
|
174
|
+
name: postgres-daily
|
|
175
|
+
spec:
|
|
176
|
+
schedule: "0 2 * * *"
|
|
177
|
+
backupOwnerReference: self
|
|
178
|
+
cluster:
|
|
179
|
+
name: postgres-cluster
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Restore Verification Script (weekly)
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
#!/bin/bash
|
|
186
|
+
# verify-backup.sh — restore to isolated pod and check row counts
|
|
187
|
+
|
|
188
|
+
STANZA="production-db"
|
|
189
|
+
RESTORE_HOST="postgres-restore-test"
|
|
190
|
+
TABLES=("orders" "payments" "users")
|
|
191
|
+
|
|
192
|
+
echo "=== pgBackRest Backup Verification $(date) ==="
|
|
193
|
+
|
|
194
|
+
# 1. Check last backup age
|
|
195
|
+
LAST_BACKUP=$(pgbackrest --stanza=$STANZA info --output=json | \
|
|
196
|
+
jq -r '.[] | .backup[-1].timestamp.stop')
|
|
197
|
+
echo "Last backup: $LAST_BACKUP"
|
|
198
|
+
|
|
199
|
+
AGE_HOURS=$(( ($(date +%s) - $(date -d "$LAST_BACKUP" +%s)) / 3600 ))
|
|
200
|
+
if [ $AGE_HOURS -gt 26 ]; then
|
|
201
|
+
echo "ERROR: Last backup is ${AGE_HOURS}h old — exceeds 26h threshold"
|
|
202
|
+
exit 1
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
# 2. Restore to test instance
|
|
206
|
+
pgbackrest --stanza=$STANZA --delta --pg1-host=$RESTORE_HOST restore
|
|
207
|
+
|
|
208
|
+
# 3. Start test PostgreSQL
|
|
209
|
+
pg_ctl -D /var/lib/postgresql/restore -l /tmp/restore.log start
|
|
210
|
+
|
|
211
|
+
# 4. Verify row counts match production
|
|
212
|
+
for table in "${TABLES[@]}"; do
|
|
213
|
+
PROD_COUNT=$(psql -h postgres-primary -c "SELECT count(*) FROM $table;" -t | tr -d ' ')
|
|
214
|
+
REST_COUNT=$(psql -h $RESTORE_HOST -c "SELECT count(*) FROM $table;" -t | tr -d ' ')
|
|
215
|
+
if [ "$PROD_COUNT" != "$REST_COUNT" ]; then
|
|
216
|
+
echo "MISMATCH in $table: prod=$PROD_COUNT restore=$REST_COUNT"
|
|
217
|
+
FAILED=1
|
|
218
|
+
else
|
|
219
|
+
echo "OK: $table = $PROD_COUNT rows"
|
|
220
|
+
fi
|
|
221
|
+
done
|
|
222
|
+
|
|
223
|
+
pg_ctl -D /var/lib/postgresql/restore stop
|
|
224
|
+
|
|
225
|
+
[ -z "$FAILED" ] && echo "BACKUP VERIFICATION PASSED" || exit 1
|
|
226
|
+
```
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: db-performance
|
|
3
|
+
type: skill
|
|
4
|
+
description: PostgreSQL query performance — EXPLAIN ANALYZE, index design, pg_stat_statements, slow query detection, connection pool tuning.
|
|
5
|
+
related-rules:
|
|
6
|
+
- access-control.md
|
|
7
|
+
- migration-runbook.md
|
|
8
|
+
allowed-tools: Read, Bash
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: Database Performance
|
|
12
|
+
|
|
13
|
+
> **Expertise:** EXPLAIN ANALYZE, index design (partial/covering), pg_stat_statements, autovacuum tuning, PgBouncer sizing.
|
|
14
|
+
|
|
15
|
+
## When to load
|
|
16
|
+
|
|
17
|
+
When investigating slow queries, designing indexes, tuning PostgreSQL config, or sizing PgBouncer pools.
|
|
18
|
+
|
|
19
|
+
## Query Analysis with pg_stat_statements
|
|
20
|
+
|
|
21
|
+
```sql
|
|
22
|
+
-- Enable (add to postgresql.conf, then restart or reload)
|
|
23
|
+
-- shared_preload_libraries = 'pg_stat_statements'
|
|
24
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
25
|
+
|
|
26
|
+
-- Top 10 slowest queries by total time
|
|
27
|
+
SELECT
|
|
28
|
+
left(query, 120) AS query_snippet,
|
|
29
|
+
calls,
|
|
30
|
+
round(total_exec_time::numeric, 2) AS total_ms,
|
|
31
|
+
round(mean_exec_time::numeric, 2) AS mean_ms,
|
|
32
|
+
round(stddev_exec_time::numeric, 2) AS stddev_ms,
|
|
33
|
+
rows
|
|
34
|
+
FROM pg_stat_statements
|
|
35
|
+
ORDER BY total_exec_time DESC
|
|
36
|
+
LIMIT 10;
|
|
37
|
+
|
|
38
|
+
-- Top queries by mean execution time (find worst-per-call)
|
|
39
|
+
SELECT
|
|
40
|
+
left(query, 120),
|
|
41
|
+
calls,
|
|
42
|
+
round(mean_exec_time::numeric, 2) AS mean_ms,
|
|
43
|
+
round(rows::numeric / calls, 1) AS rows_per_call
|
|
44
|
+
FROM pg_stat_statements
|
|
45
|
+
WHERE calls > 100 -- ignore one-offs
|
|
46
|
+
ORDER BY mean_exec_time DESC
|
|
47
|
+
LIMIT 10;
|
|
48
|
+
|
|
49
|
+
-- Queries with high I/O (missing index candidates)
|
|
50
|
+
SELECT
|
|
51
|
+
left(query, 120),
|
|
52
|
+
calls,
|
|
53
|
+
round(mean_exec_time::numeric, 1) AS mean_ms,
|
|
54
|
+
shared_blks_read + shared_blks_hit AS total_blocks,
|
|
55
|
+
round(shared_blks_hit::numeric / NULLIF(shared_blks_hit + shared_blks_read, 0) * 100, 1) AS cache_hit_pct
|
|
56
|
+
FROM pg_stat_statements
|
|
57
|
+
WHERE calls > 50
|
|
58
|
+
ORDER BY shared_blks_read DESC
|
|
59
|
+
LIMIT 10;
|
|
60
|
+
|
|
61
|
+
-- Reset stats after tuning
|
|
62
|
+
SELECT pg_stat_statements_reset();
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## EXPLAIN ANALYZE (reading execution plans)
|
|
66
|
+
|
|
67
|
+
```sql
|
|
68
|
+
-- Always use ANALYZE BUFFERS for real cost data
|
|
69
|
+
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
|
|
70
|
+
SELECT o.*, c.email
|
|
71
|
+
FROM orders o
|
|
72
|
+
JOIN customers c ON c.id = o.customer_id
|
|
73
|
+
WHERE o.status = 'pending'
|
|
74
|
+
AND o.created_at > now() - interval '7 days';
|
|
75
|
+
|
|
76
|
+
/* Reading the output:
|
|
77
|
+
Seq Scan → full table scan, may need index
|
|
78
|
+
Index Scan → good, using index
|
|
79
|
+
Index Only Scan → best, covering index (no heap access)
|
|
80
|
+
Nested Loop → OK for small datasets; bad for large
|
|
81
|
+
Hash Join → good for large joins
|
|
82
|
+
Merge Join → good for pre-sorted data
|
|
83
|
+
|
|
84
|
+
Key numbers:
|
|
85
|
+
- actual time=START..END ms per row
|
|
86
|
+
- rows=N vs rows=N (estimated vs actual — big diff = stale stats)
|
|
87
|
+
- Buffers: hit=N read=N (high 'read' = cache miss → index opportunity)
|
|
88
|
+
*/
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Index Design Patterns
|
|
92
|
+
|
|
93
|
+
```sql
|
|
94
|
+
-- Standard B-tree (equality and range queries)
|
|
95
|
+
CREATE INDEX CONCURRENTLY idx_orders_status_created
|
|
96
|
+
ON orders(status, created_at)
|
|
97
|
+
WHERE status IN ('pending', 'processing'); -- partial index — smaller, faster
|
|
98
|
+
|
|
99
|
+
-- Covering index (index-only scan — no heap access)
|
|
100
|
+
CREATE INDEX CONCURRENTLY idx_orders_customer_covering
|
|
101
|
+
ON orders(customer_id, created_at)
|
|
102
|
+
INCLUDE (status, total_amount); -- INCLUDE avoids heap fetch for these columns
|
|
103
|
+
|
|
104
|
+
-- Expression index (for function-based queries)
|
|
105
|
+
CREATE INDEX CONCURRENTLY idx_users_email_lower
|
|
106
|
+
ON users(lower(email)); -- for: WHERE lower(email) = lower($1)
|
|
107
|
+
|
|
108
|
+
-- JSON/JSONB index
|
|
109
|
+
CREATE INDEX CONCURRENTLY idx_events_data_type
|
|
110
|
+
ON events USING GIN (data jsonb_path_ops); -- for: WHERE data @> '{"type":"click"}'
|
|
111
|
+
|
|
112
|
+
-- Multicolumn order: selectivity matters
|
|
113
|
+
-- For: WHERE status='active' AND created_at > X
|
|
114
|
+
-- ✅ (status, created_at) — filter on status first (low cardinality OK as prefix)
|
|
115
|
+
-- ❌ (created_at, status) — date range first is wide; wastes I/O
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Identifying Missing Indexes
|
|
119
|
+
|
|
120
|
+
```sql
|
|
121
|
+
-- Tables with high sequential scans (candidates for indexing)
|
|
122
|
+
SELECT
|
|
123
|
+
schemaname || '.' || relname AS table,
|
|
124
|
+
seq_scan,
|
|
125
|
+
seq_tup_read,
|
|
126
|
+
idx_scan,
|
|
127
|
+
round(seq_scan::numeric / NULLIF(seq_scan + idx_scan, 0) * 100, 1) AS seq_pct
|
|
128
|
+
FROM pg_stat_user_tables
|
|
129
|
+
WHERE seq_scan > 1000
|
|
130
|
+
AND seq_tup_read > 10000
|
|
131
|
+
ORDER BY seq_tup_read DESC
|
|
132
|
+
LIMIT 20;
|
|
133
|
+
|
|
134
|
+
-- Unused indexes (wasting write overhead)
|
|
135
|
+
SELECT
|
|
136
|
+
schemaname || '.' || tablename AS table,
|
|
137
|
+
indexname,
|
|
138
|
+
pg_size_pretty(pg_relation_size(indexrelid)) AS size,
|
|
139
|
+
idx_scan AS scans
|
|
140
|
+
FROM pg_stat_user_indexes
|
|
141
|
+
JOIN pg_index USING (indexrelid)
|
|
142
|
+
WHERE idx_scan = 0
|
|
143
|
+
AND NOT indisunique -- don't drop unique constraints
|
|
144
|
+
AND indpred IS NULL -- don't drop partial indexes without analysis
|
|
145
|
+
ORDER BY pg_relation_size(indexrelid) DESC;
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## PostgreSQL Configuration Tuning
|
|
149
|
+
|
|
150
|
+
```sql
|
|
151
|
+
-- Key parameters for a 16GB RAM server
|
|
152
|
+
ALTER SYSTEM SET shared_buffers = '4GB'; -- 25% of RAM
|
|
153
|
+
ALTER SYSTEM SET effective_cache_size = '12GB'; -- 75% of RAM
|
|
154
|
+
ALTER SYSTEM SET work_mem = '64MB'; -- per sort/hash; set conservatively
|
|
155
|
+
ALTER SYSTEM SET maintenance_work_mem = '1GB'; -- for VACUUM, CREATE INDEX
|
|
156
|
+
ALTER SYSTEM SET max_worker_processes = 8;
|
|
157
|
+
ALTER SYSTEM SET max_parallel_workers = 4;
|
|
158
|
+
ALTER SYSTEM SET max_parallel_workers_per_gather = 2;
|
|
159
|
+
|
|
160
|
+
-- WAL tuning (for high-write workloads)
|
|
161
|
+
ALTER SYSTEM SET wal_buffers = '64MB';
|
|
162
|
+
ALTER SYSTEM SET checkpoint_completion_target = 0.9;
|
|
163
|
+
ALTER SYSTEM SET min_wal_size = '1GB';
|
|
164
|
+
ALTER SYSTEM SET max_wal_size = '4GB';
|
|
165
|
+
|
|
166
|
+
SELECT pg_reload_conf();
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## PgBouncer Pool Sizing
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
Formula:
|
|
173
|
+
max_server_connections = min(max_connections_pg - 5, available_connections)
|
|
174
|
+
default_pool_size = max_server_connections / number_of_services
|
|
175
|
+
max_client_conn = default_pool_size × 10 (clients can queue)
|
|
176
|
+
|
|
177
|
+
Example (max_connections=200, 5 services):
|
|
178
|
+
default_pool_size = (200 - 5) / 5 = 39 → set to 40
|
|
179
|
+
max_client_conn = 400
|
|
180
|
+
reserve_pool_size = 5 (emergency burst)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
```ini
|
|
184
|
+
# pgbouncer.ini
|
|
185
|
+
[pgbouncer]
|
|
186
|
+
pool_mode = transaction # best for stateless apps
|
|
187
|
+
max_client_conn = 500 # total client connections
|
|
188
|
+
default_pool_size = 40 # server connections per database+user
|
|
189
|
+
reserve_pool_size = 5
|
|
190
|
+
reserve_pool_timeout = 3
|
|
191
|
+
server_idle_timeout = 600
|
|
192
|
+
client_idle_timeout = 0
|
|
193
|
+
query_wait_timeout = 30 # fail fast if no server available
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Autovacuum Tuning for High-Write Tables
|
|
197
|
+
|
|
198
|
+
```sql
|
|
199
|
+
-- Per-table autovacuum settings for hot tables
|
|
200
|
+
ALTER TABLE orders SET (
|
|
201
|
+
autovacuum_vacuum_scale_factor = 0.01, -- vacuum at 1% dead rows (default 20%)
|
|
202
|
+
autovacuum_analyze_scale_factor = 0.005, -- analyze at 0.5% (default 10%)
|
|
203
|
+
autovacuum_vacuum_cost_delay = 2 -- less aggressive throttling
|
|
204
|
+
);
|
|
205
|
+
```
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: migration-safety
|
|
3
|
+
type: skill
|
|
4
|
+
description: Safe database migrations in production — expand-and-contract, lock-safe DDL, timing estimation, rollback SQL.
|
|
5
|
+
related-rules:
|
|
6
|
+
- migration-runbook.md
|
|
7
|
+
- backup-policy.md
|
|
8
|
+
allowed-tools: Read, Write, Edit, Bash
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: Migration Safety
|
|
12
|
+
|
|
13
|
+
> **Expertise:** Expand-and-contract, `CREATE INDEX CONCURRENTLY`, migration timing estimation, rollback planning.
|
|
14
|
+
|
|
15
|
+
## When to load
|
|
16
|
+
|
|
17
|
+
When planning or executing a production database migration, estimating migration duration, or writing rollback SQL.
|
|
18
|
+
|
|
19
|
+
## Expand-and-Contract Pattern
|
|
20
|
+
|
|
21
|
+
```sql
|
|
22
|
+
-- ❌ DANGEROUS: direct rename locks table and breaks old app version
|
|
23
|
+
ALTER TABLE orders RENAME COLUMN user_id TO customer_id;
|
|
24
|
+
|
|
25
|
+
-- ✅ SAFE: expand-and-contract over multiple deploys
|
|
26
|
+
|
|
27
|
+
-- Phase 1: EXPAND (add new column, keep old)
|
|
28
|
+
ALTER TABLE orders ADD COLUMN customer_id BIGINT;
|
|
29
|
+
|
|
30
|
+
-- Phase 2: DUAL-WRITE (app v2 writes to both; reads from customer_id)
|
|
31
|
+
-- (code change, no migration needed)
|
|
32
|
+
|
|
33
|
+
-- Phase 3: BACKFILL (run in small batches to avoid lock)
|
|
34
|
+
UPDATE orders SET customer_id = user_id
|
|
35
|
+
WHERE customer_id IS NULL
|
|
36
|
+
AND id BETWEEN <batch_start> AND <batch_end>;
|
|
37
|
+
|
|
38
|
+
-- Phase 4: CONTRACT (app v3 no longer uses user_id)
|
|
39
|
+
ALTER TABLE orders DROP COLUMN user_id;
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Lock-Safe DDL
|
|
43
|
+
|
|
44
|
+
```sql
|
|
45
|
+
-- ✅ Safe: CREATE INDEX CONCURRENTLY (no table lock)
|
|
46
|
+
CREATE INDEX CONCURRENTLY idx_orders_customer_id ON orders(customer_id);
|
|
47
|
+
-- If concurrent creation fails:
|
|
48
|
+
DROP INDEX CONCURRENTLY idx_orders_customer_id_invalid;
|
|
49
|
+
-- Then retry
|
|
50
|
+
|
|
51
|
+
-- ❌ Dangerous on large tables: full table lock
|
|
52
|
+
CREATE INDEX idx_orders_customer_id ON orders(customer_id);
|
|
53
|
+
|
|
54
|
+
-- ✅ Safe: ADD COLUMN with no default (instant in PostgreSQL 11+)
|
|
55
|
+
ALTER TABLE orders ADD COLUMN processed_at TIMESTAMPTZ;
|
|
56
|
+
|
|
57
|
+
-- ❌ Dangerous: ADD COLUMN with DEFAULT rewrites all rows (pre-PG11) / blocks (PG11+)
|
|
58
|
+
ALTER TABLE orders ADD COLUMN processed_at TIMESTAMPTZ NOT NULL DEFAULT now();
|
|
59
|
+
-- ✅ Safe alternative: add nullable, backfill, add constraint
|
|
60
|
+
ALTER TABLE orders ADD COLUMN processed_at TIMESTAMPTZ;
|
|
61
|
+
UPDATE orders SET processed_at = created_at WHERE processed_at IS NULL;
|
|
62
|
+
ALTER TABLE orders ALTER COLUMN processed_at SET NOT NULL;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Estimating Migration Duration
|
|
66
|
+
|
|
67
|
+
```sql
|
|
68
|
+
-- Estimate rows to process
|
|
69
|
+
SELECT reltuples::BIGINT AS estimated_rows
|
|
70
|
+
FROM pg_class
|
|
71
|
+
WHERE relname = 'orders';
|
|
72
|
+
|
|
73
|
+
-- Rough timing: ~100k rows/sec for simple UPDATE on indexed column
|
|
74
|
+
-- ~10k rows/sec for complex JOIN-based UPDATE
|
|
75
|
+
-- Always test on production-size staging first!
|
|
76
|
+
|
|
77
|
+
-- Watch migration progress (PostgreSQL 9.6+)
|
|
78
|
+
SELECT
|
|
79
|
+
phase,
|
|
80
|
+
blocks_done,
|
|
81
|
+
blocks_total,
|
|
82
|
+
round(100.0 * blocks_done / NULLIF(blocks_total, 0), 1) AS pct_done
|
|
83
|
+
FROM pg_stat_progress_create_index
|
|
84
|
+
WHERE relid = 'orders'::regclass;
|
|
85
|
+
|
|
86
|
+
SELECT
|
|
87
|
+
phase,
|
|
88
|
+
tuples_done,
|
|
89
|
+
tuples_total,
|
|
90
|
+
round(100.0 * tuples_done / NULLIF(tuples_total, 0), 1) AS pct_done
|
|
91
|
+
FROM pg_stat_progress_vacuum
|
|
92
|
+
WHERE relid = 'orders'::regclass;
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Batched Backfill (avoid long transactions)
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
# Never: UPDATE orders SET customer_id = user_id (locks all rows, huge transaction)
|
|
99
|
+
# Always: batch by primary key range
|
|
100
|
+
|
|
101
|
+
import psycopg2
|
|
102
|
+
|
|
103
|
+
BATCH_SIZE = 10_000
|
|
104
|
+
|
|
105
|
+
with psycopg2.connect(DSN) as conn:
|
|
106
|
+
with conn.cursor() as cur:
|
|
107
|
+
cur.execute("SELECT MIN(id), MAX(id) FROM orders WHERE customer_id IS NULL")
|
|
108
|
+
min_id, max_id = cur.fetchone()
|
|
109
|
+
|
|
110
|
+
batch_start = min_id
|
|
111
|
+
while batch_start <= max_id:
|
|
112
|
+
batch_end = batch_start + BATCH_SIZE
|
|
113
|
+
with conn.cursor() as cur:
|
|
114
|
+
cur.execute("""
|
|
115
|
+
UPDATE orders
|
|
116
|
+
SET customer_id = user_id
|
|
117
|
+
WHERE id >= %s AND id < %s AND customer_id IS NULL
|
|
118
|
+
""", (batch_start, batch_end))
|
|
119
|
+
conn.commit() # commit each batch — releases row locks
|
|
120
|
+
print(f"Backfilled {batch_start}–{batch_end}")
|
|
121
|
+
batch_start = batch_end
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Rollback SQL Template
|
|
125
|
+
|
|
126
|
+
```sql
|
|
127
|
+
-- Every migration should have a paired rollback script
|
|
128
|
+
|
|
129
|
+
-- Migration (forward):
|
|
130
|
+
-- ALTER TABLE orders ADD COLUMN customer_id BIGINT;
|
|
131
|
+
-- CREATE INDEX CONCURRENTLY idx_orders_customer_id ON orders(customer_id);
|
|
132
|
+
|
|
133
|
+
-- Rollback:
|
|
134
|
+
DROP INDEX CONCURRENTLY IF EXISTS idx_orders_customer_id;
|
|
135
|
+
ALTER TABLE orders DROP COLUMN IF EXISTS customer_id;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Pre-Migration Checklist
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# 1. Take snapshot backup
|
|
142
|
+
pgbackrest --stanza=main --type=full backup
|
|
143
|
+
pgbackrest --stanza=main info # verify backup completed
|
|
144
|
+
|
|
145
|
+
# 2. Check current lock activity (no long-running transactions)
|
|
146
|
+
psql -c "SELECT pid, now() - query_start AS duration, state, query
|
|
147
|
+
FROM pg_stat_activity
|
|
148
|
+
WHERE state != 'idle'
|
|
149
|
+
ORDER BY duration DESC LIMIT 10;"
|
|
150
|
+
|
|
151
|
+
# 3. Set statement_timeout for migration session (prevent runaway)
|
|
152
|
+
psql -c "SET statement_timeout = '10min'; <migration_sql>"
|
|
153
|
+
|
|
154
|
+
# 4. Test rollback on staging first
|
|
155
|
+
```
|