@synapta/skills 0.1.1 → 0.2.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/dist/index.js +11 -4
- package/package.json +3 -4
- package/skills/ATTRIBUTION.md +80 -0
- package/skills/accessibility-audit/SKILL.md +325 -0
- package/skills/accessibility-audit/reference/wcag-checklist.md +103 -0
- package/skills/apns-notifier/SKILL.md +86 -0
- package/skills/approval-policy-enforcer/SKILL.md +66 -0
- package/skills/apps-sdk-builder/LICENSE.txt +201 -0
- package/skills/apps-sdk-builder/SKILL.md +328 -0
- package/skills/apps-sdk-builder/agents/openai.yaml +13 -0
- package/skills/apps-sdk-builder/references/app-archetypes.md +132 -0
- package/skills/apps-sdk-builder/references/apps-sdk-docs-workflow.md +135 -0
- package/skills/apps-sdk-builder/references/interactive-state-sync-patterns.md +113 -0
- package/skills/apps-sdk-builder/references/repo-contract-and-validation.md +93 -0
- package/skills/apps-sdk-builder/references/search-fetch-standard.md +67 -0
- package/skills/apps-sdk-builder/references/upstream-example-workflow.md +79 -0
- package/skills/apps-sdk-builder/references/window-openai-patterns.md +79 -0
- package/skills/apps-sdk-builder/scripts/scaffold_node_ext_apps.mjs +606 -0
- package/skills/architecture-selector/SKILL.md +64 -0
- package/skills/backlog-planner/SKILL.md +68 -0
- package/skills/carplay-entitlement-checker/SKILL.md +82 -0
- package/skills/concept-deepener/SKILL.md +86 -0
- package/skills/concept-discovery/SKILL.md +517 -0
- package/skills/concept-discovery/assets/sample-analysis.json +81 -0
- package/skills/concept-discovery/expected_outputs/sample-enum-dictionary.md +25 -0
- package/skills/concept-discovery/expected_outputs/sample-page-user-list.md +83 -0
- package/skills/concept-discovery/expected_outputs/sample-prd-readme.md +43 -0
- package/skills/concept-discovery/references/framework-patterns.md +228 -0
- package/skills/concept-discovery/references/prd-quality-checklist.md +65 -0
- package/skills/concept-discovery/scripts/codebase_analyzer.py +732 -0
- package/skills/concept-discovery/scripts/prd_scaffolder.py +435 -0
- package/skills/dast-zap/SKILL.md +453 -0
- package/skills/dast-zap/assets/.gitkeep +9 -0
- package/skills/dast-zap/assets/github_action.yml +207 -0
- package/skills/dast-zap/assets/gitlab_ci.yml +226 -0
- package/skills/dast-zap/assets/zap_automation.yaml +196 -0
- package/skills/dast-zap/assets/zap_context.xml +192 -0
- package/skills/dast-zap/references/EXAMPLE.md +40 -0
- package/skills/dast-zap/references/api_testing_guide.md +475 -0
- package/skills/dast-zap/references/authentication_guide.md +431 -0
- package/skills/dast-zap/references/false_positive_handling.md +427 -0
- package/skills/dast-zap/references/owasp_mapping.md +255 -0
- package/skills/dep-sbom-scan/SKILL.md +466 -0
- package/skills/deploy-cloudflare/SKILL.md +930 -0
- package/skills/deploy-docker/SKILL.md +55 -0
- package/skills/deploy-fly/SKILL.md +228 -0
- package/skills/deploy-k8s/SKILL.md +108 -0
- package/skills/deploy-k8s/assets/logo.png +0 -0
- package/skills/deploy-k8s/docs/README.md +29 -0
- package/skills/deploy-k8s/docs/SUMMARY.md +56 -0
- package/skills/deploy-k8s/docs/advanced/token-efficiency.md +61 -0
- package/skills/deploy-k8s/docs/architecture/multi-tenancy.md +96 -0
- package/skills/deploy-k8s/docs/architecture/storage-and-state.md +102 -0
- package/skills/deploy-k8s/docs/architecture/workload-patterns.md +87 -0
- package/skills/deploy-k8s/docs/book.json +16 -0
- package/skills/deploy-k8s/docs/community/changelog.md +34 -0
- package/skills/deploy-k8s/docs/community/contributing.md +67 -0
- package/skills/deploy-k8s/docs/core-concepts/failure-modes.md +153 -0
- package/skills/deploy-k8s/docs/core-concepts/philosophy.md +83 -0
- package/skills/deploy-k8s/docs/core-concepts/workflow.md +124 -0
- package/skills/deploy-k8s/docs/examples/bad-patterns.md +47 -0
- package/skills/deploy-k8s/docs/examples/do-dont-checklist.md +37 -0
- package/skills/deploy-k8s/docs/examples/good-patterns.md +49 -0
- package/skills/deploy-k8s/docs/failure-modes/api-drift.md +104 -0
- package/skills/deploy-k8s/docs/failure-modes/fragile-rollouts.md +99 -0
- package/skills/deploy-k8s/docs/failure-modes/insecure-workload-defaults.md +80 -0
- package/skills/deploy-k8s/docs/failure-modes/network-exposure.md +98 -0
- package/skills/deploy-k8s/docs/failure-modes/privilege-sprawl.md +91 -0
- package/skills/deploy-k8s/docs/failure-modes/resource-starvation.md +85 -0
- package/skills/deploy-k8s/docs/getting-started/installation.md +152 -0
- package/skills/deploy-k8s/docs/getting-started/quick-start.md +115 -0
- package/skills/deploy-k8s/docs/guides/helm-patterns.md +71 -0
- package/skills/deploy-k8s/docs/guides/kustomize-patterns.md +65 -0
- package/skills/deploy-k8s/docs/guides/observability.md +67 -0
- package/skills/deploy-k8s/docs/guides/security-hardening.md +59 -0
- package/skills/deploy-k8s/docs/guides/validation-and-policy.md +66 -0
- package/skills/deploy-k8s/docs/integrations/mcp-integration.md +52 -0
- package/skills/deploy-k8s/docs/package-lock.json +2892 -0
- package/skills/deploy-k8s/docs/package.json +13 -0
- package/skills/deploy-k8s/references/api-drift.md +298 -0
- package/skills/deploy-k8s/references/conditional/aks-patterns.md +70 -0
- package/skills/deploy-k8s/references/conditional/eks-patterns.md +79 -0
- package/skills/deploy-k8s/references/conditional/gitops-controllers.md +71 -0
- package/skills/deploy-k8s/references/conditional/gke-patterns.md +74 -0
- package/skills/deploy-k8s/references/conditional/observability-stacks.md +80 -0
- package/skills/deploy-k8s/references/conditional/openshift-patterns.md +67 -0
- package/skills/deploy-k8s/references/daemonset-operator-patterns.md +155 -0
- package/skills/deploy-k8s/references/deployment-patterns.md +146 -0
- package/skills/deploy-k8s/references/do-dont-patterns.md +87 -0
- package/skills/deploy-k8s/references/examples-bad.md +282 -0
- package/skills/deploy-k8s/references/examples-good.md +440 -0
- package/skills/deploy-k8s/references/fragile-rollouts.md +303 -0
- package/skills/deploy-k8s/references/helm-patterns.md +203 -0
- package/skills/deploy-k8s/references/insecure-workload-defaults.md +300 -0
- package/skills/deploy-k8s/references/job-patterns.md +120 -0
- package/skills/deploy-k8s/references/kustomize-patterns.md +239 -0
- package/skills/deploy-k8s/references/multi-tenancy.md +343 -0
- package/skills/deploy-k8s/references/network-exposure.md +481 -0
- package/skills/deploy-k8s/references/observability.md +302 -0
- package/skills/deploy-k8s/references/privilege-sprawl.md +273 -0
- package/skills/deploy-k8s/references/resource-starvation.md +374 -0
- package/skills/deploy-k8s/references/security-hardening.md +209 -0
- package/skills/deploy-k8s/references/stateful-patterns.md +130 -0
- package/skills/deploy-k8s/references/storage-and-state.md +330 -0
- package/skills/deploy-k8s/references/validation-and-policy.md +242 -0
- package/skills/deploy-railway/SKILL.md +235 -0
- package/skills/deploy-railway/references/analyze-db-mongo.md +84 -0
- package/skills/deploy-railway/references/analyze-db-mysql.md +254 -0
- package/skills/deploy-railway/references/analyze-db-postgres.md +479 -0
- package/skills/deploy-railway/references/analyze-db-redis.md +208 -0
- package/skills/deploy-railway/references/analyze-db.md +344 -0
- package/skills/deploy-railway/references/configure.md +309 -0
- package/skills/deploy-railway/references/deploy.md +195 -0
- package/skills/deploy-railway/references/operate.md +214 -0
- package/skills/deploy-railway/references/request.md +248 -0
- package/skills/deploy-railway/references/setup.md +312 -0
- package/skills/deploy-railway/scripts/analyze-mongo.py +1549 -0
- package/skills/deploy-railway/scripts/analyze-mysql.py +1195 -0
- package/skills/deploy-railway/scripts/analyze-postgres.py +3058 -0
- package/skills/deploy-railway/scripts/analyze-redis.py +1090 -0
- package/skills/deploy-railway/scripts/dal.py +671 -0
- package/skills/deploy-railway/scripts/enable-pg-stats.py +170 -0
- package/skills/deploy-railway/scripts/pg-extensions.py +370 -0
- package/skills/deploy-railway/scripts/railway-api.sh +52 -0
- package/skills/deploy-ssh/SKILL.md +91 -0
- package/skills/deploy-vercel/SKILL.md +304 -0
- package/skills/deploy-vercel/resources/deploy-codex.sh +301 -0
- package/skills/deploy-vercel/resources/deploy.sh +301 -0
- package/skills/docs-runbooks/SKILL.md +399 -0
- package/skills/drive-status-renderer/SKILL.md +62 -0
- package/skills/iac-scan/SKILL.md +680 -0
- package/skills/iac-scan/assets/.gitkeep +9 -0
- package/skills/iac-scan/assets/checkov_config.yaml +94 -0
- package/skills/iac-scan/assets/github_actions.yml +199 -0
- package/skills/iac-scan/assets/gitlab_ci.yml +218 -0
- package/skills/iac-scan/assets/pre_commit_config.yaml +92 -0
- package/skills/iac-scan/references/EXAMPLE.md +40 -0
- package/skills/iac-scan/references/compliance_mapping.md +237 -0
- package/skills/iac-scan/references/custom_policies.md +460 -0
- package/skills/iac-scan/references/suppression_guide.md +431 -0
- package/skills/incident-briefing/SKILL.md +66 -0
- package/skills/incident-triage/SKILL.md +481 -0
- package/{LICENSE → skills/mcp-builder/LICENSE.txt} +15 -14
- package/skills/mcp-builder/SKILL.md +244 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/mobile-pairing/SKILL.md +52 -0
- package/skills/ops-sre/SKILL.md +297 -0
- package/skills/playwright-qa/LICENSE.txt +201 -0
- package/skills/playwright-qa/NOTICE.txt +14 -0
- package/skills/playwright-qa/SKILL.md +156 -0
- package/skills/playwright-qa/agents/openai.yaml +6 -0
- package/skills/playwright-qa/assets/playwright-small.svg +3 -0
- package/skills/playwright-qa/assets/playwright.png +0 -0
- package/skills/playwright-qa/references/cli.md +116 -0
- package/skills/playwright-qa/references/workflows.md +95 -0
- package/skills/playwright-qa/scripts/playwright_cli.sh +25 -0
- package/skills/release-publish/SKILL.md +85 -0
- package/skills/repo-bootstrap/SKILL.md +92 -0
- package/skills/repo-bootstrap/assets/example-workflows/validate-agents.yml +89 -0
- package/skills/repo-bootstrap/assets/root-thin.md +141 -0
- package/skills/repo-bootstrap/assets/root-verbose.md +149 -0
- package/skills/repo-bootstrap/assets/scoped/backend-go.md +107 -0
- package/skills/repo-bootstrap/assets/scoped/backend-php.md +94 -0
- package/skills/repo-bootstrap/assets/scoped/backend-python.md +84 -0
- package/skills/repo-bootstrap/assets/scoped/backend-typescript.md +89 -0
- package/skills/repo-bootstrap/assets/scoped/claude-code-skill.md +101 -0
- package/skills/repo-bootstrap/assets/scoped/cli.md +83 -0
- package/skills/repo-bootstrap/assets/scoped/concourse.md +196 -0
- package/skills/repo-bootstrap/assets/scoped/ddev.md +68 -0
- package/skills/repo-bootstrap/assets/scoped/docker.md +160 -0
- package/skills/repo-bootstrap/assets/scoped/documentation.md +98 -0
- package/skills/repo-bootstrap/assets/scoped/examples.md +96 -0
- package/skills/repo-bootstrap/assets/scoped/frontend-typescript.md +88 -0
- package/skills/repo-bootstrap/assets/scoped/github-actions.md +174 -0
- package/skills/repo-bootstrap/assets/scoped/gitlab-ci.md +174 -0
- package/skills/repo-bootstrap/assets/scoped/oro-bundle.md +209 -0
- package/skills/repo-bootstrap/assets/scoped/oro-project.md +170 -0
- package/skills/repo-bootstrap/assets/scoped/python-modern.md +170 -0
- package/skills/repo-bootstrap/assets/scoped/resources.md +96 -0
- package/skills/repo-bootstrap/assets/scoped/skill-repo.md +139 -0
- package/skills/repo-bootstrap/assets/scoped/symfony.md +168 -0
- package/skills/repo-bootstrap/assets/scoped/testing.md +87 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-docs.md +103 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-extension.md +133 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-project.md +137 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-testing.md +80 -0
- package/skills/repo-bootstrap/checkpoints.yaml +279 -0
- package/skills/repo-bootstrap/evals/evals.json +385 -0
- package/skills/repo-bootstrap/references/ai-contribution-guidelines.md +63 -0
- package/skills/repo-bootstrap/references/ai-tool-compatibility.md +223 -0
- package/skills/repo-bootstrap/references/directory-coverage.md +82 -0
- package/skills/repo-bootstrap/references/examples/coding-agent-cli/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/coding-agent-cli/go.mod +3 -0
- package/skills/repo-bootstrap/references/examples/coding-agent-cli/scripts-AGENTS.md +389 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/.env.example +13 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/AGENTS.md +91 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/package.json +33 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/pnpm-lock.yaml +3 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/AGENTS.md +91 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/config.ts +28 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/controllers/userController.ts +74 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/index.ts +26 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/errorHandler.ts +45 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/requestLogger.ts +18 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/health.ts +18 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/users.ts +13 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/errors.ts +40 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/logger.ts +14 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/tsconfig.json +24 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/.env.example +19 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/AGENTS.md +92 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/pyproject.toml +88 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/AGENTS.md +85 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/__init__.py +3 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/config.py +49 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/main.py +66 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/__init__.py +13 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/item.py +43 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/user.py +40 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/__init__.py +5 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/health.py +20 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/items.py +61 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/users.py +55 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/__init__.py +6 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/item_service.py +77 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/user_service.py +69 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/uv.lock +4 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/.scopes +3 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/AGENTS.md +86 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/package.json +20 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/src/App.tsx +5 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/cmd/api/main.go +7 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/go.mod +2 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/main.go +7 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/.scopes +3 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/AGENTS.md +89 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/go.mod +2 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/AGENTS.md +90 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/package.json +17 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/App.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Button.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Footer.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Header.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Sidebar.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/main.go +7 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package-lock.json +0 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package.json +12 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/go.mod +3 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-AGENTS.md +371 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-web-AGENTS.md +448 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/.scopes +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/AGENTS.md +91 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/composer.json +8 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/package.json +15 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/pnpm-lock.yaml +0 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/src/Controller.php +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/AGENTS.md +92 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/package.json +26 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/App.tsx +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Button.tsx +10 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Footer.tsx +9 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Header.tsx +9 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/main.tsx +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/tsconfig.json +13 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/AGENTS.md +75 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/package.json +7 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/package.json +11 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/src/index.ts +11 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-lock.yaml +42 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-workspace.yaml +2 -0
- package/skills/repo-bootstrap/references/examples/simple-ldap-go/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/simple-ldap-go/examples-AGENTS.md +45 -0
- package/skills/repo-bootstrap/references/examples/simple-ldap-go/go.mod +3 -0
- package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/Classes-AGENTS.md +392 -0
- package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/composer.json +8 -0
- package/skills/repo-bootstrap/references/feedback-memory-schema.md +135 -0
- package/skills/repo-bootstrap/references/git-hooks-setup.md +79 -0
- package/skills/repo-bootstrap/references/output-structure.md +124 -0
- package/skills/repo-bootstrap/references/scripts-guide.md +175 -0
- package/skills/repo-bootstrap/references/verification-guide.md +137 -0
- package/skills/repo-bootstrap/scripts/analyze-git-history.sh +315 -0
- package/skills/repo-bootstrap/scripts/check-freshness.sh +230 -0
- package/skills/repo-bootstrap/scripts/detect-golden-samples.sh +161 -0
- package/skills/repo-bootstrap/scripts/detect-heuristics.sh +93 -0
- package/skills/repo-bootstrap/scripts/detect-project.sh +486 -0
- package/skills/repo-bootstrap/scripts/detect-scopes.sh +330 -0
- package/skills/repo-bootstrap/scripts/detect-utilities.sh +133 -0
- package/skills/repo-bootstrap/scripts/extract-adrs.sh +194 -0
- package/skills/repo-bootstrap/scripts/extract-agent-configs.sh +331 -0
- package/skills/repo-bootstrap/scripts/extract-architecture-rules.sh +522 -0
- package/skills/repo-bootstrap/scripts/extract-ci-commands.sh +385 -0
- package/skills/repo-bootstrap/scripts/extract-ci-rules.sh +384 -0
- package/skills/repo-bootstrap/scripts/extract-commands.sh +358 -0
- package/skills/repo-bootstrap/scripts/extract-documentation.sh +308 -0
- package/skills/repo-bootstrap/scripts/extract-github-rulesets.sh +96 -0
- package/skills/repo-bootstrap/scripts/extract-github-settings.sh +88 -0
- package/skills/repo-bootstrap/scripts/extract-ide-settings.sh +228 -0
- package/skills/repo-bootstrap/scripts/extract-platform-files.sh +290 -0
- package/skills/repo-bootstrap/scripts/extract-quality-configs.sh +442 -0
- package/skills/repo-bootstrap/scripts/generate-agents.sh +2424 -0
- package/skills/repo-bootstrap/scripts/generate-file-map.sh +153 -0
- package/skills/repo-bootstrap/scripts/lib/config-root.sh +211 -0
- package/skills/repo-bootstrap/scripts/lib/summary.sh +244 -0
- package/skills/repo-bootstrap/scripts/lib/template.sh +397 -0
- package/skills/repo-bootstrap/scripts/validate-structure.sh +324 -0
- package/skills/repo-bootstrap/scripts/verify-commands.sh +615 -0
- package/skills/repo-bootstrap/scripts/verify-content.sh +302 -0
- package/skills/schema-api-contracts/SKILL.md +56 -0
- package/skills/secret-hygiene/SKILL.md +511 -0
- package/skills/secret-hygiene/assets/.gitkeep +9 -0
- package/skills/secret-hygiene/assets/config-balanced.toml +81 -0
- package/skills/secret-hygiene/assets/config-custom.toml +178 -0
- package/skills/secret-hygiene/assets/config-strict.toml +48 -0
- package/skills/secret-hygiene/assets/github-action.yml +181 -0
- package/skills/secret-hygiene/assets/gitlab-ci.yml +257 -0
- package/skills/secret-hygiene/assets/precommit-config.yaml +70 -0
- package/skills/secret-hygiene/references/EXAMPLE.md +40 -0
- package/skills/secret-hygiene/references/compliance_mapping.md +538 -0
- package/skills/secret-hygiene/references/detection_rules.md +276 -0
- package/skills/secret-hygiene/references/false_positives.md +598 -0
- package/skills/secret-hygiene/references/remediation_guide.md +530 -0
- package/skills/stack-selector/SKILL.md +56 -0
- package/skills/telegram-control/SKILL.md +110 -0
- package/skills/telegram-control/references/architecture.md +184 -0
- package/skills/telegram-control/references/convex.md +173 -0
- package/skills/telegram-control/references/error_handling.md +212 -0
- package/skills/telegram-control/references/initial_setup.md +165 -0
- package/skills/telegram-control/references/telegram_api.md +156 -0
- package/skills/telegram-control/scripts/cancel_message.ts +53 -0
- package/skills/telegram-control/scripts/list_scheduled.ts +103 -0
- package/skills/telegram-control/scripts/logger.ts +121 -0
- package/skills/telegram-control/scripts/proxy-util.ts +11 -0
- package/skills/telegram-control/scripts/schedule_message.ts +216 -0
- package/skills/telegram-control/scripts/send_message.ts +115 -0
- package/skills/telegram-control/scripts/setup.ts +185 -0
- package/skills/telegram-control/scripts/types.ts +75 -0
- package/skills/telegram-control/scripts/view_history.ts +74 -0
- package/skills/test-strategy/SKILL.md +352 -0
- package/skills/threat-model/SKILL.md +303 -0
- package/skills/threat-model/examples/example-output.md +196 -0
- package/skills/threat-model/template.md +96 -0
- package/skills/ts-lint/SKILL.md +80 -0
- package/skills/ui-flow/SKILL.md +668 -0
- package/skills/voice-command-router/SKILL.md +51 -0
- package/skills/widget-live-activity-sync/SKILL.md +66 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Observability Stacks
|
|
2
|
+
|
|
3
|
+
**Load this reference when detected:** Prometheus Operator, kube-prometheus-stack, ServiceMonitor, PodMonitor, PrometheusRule, AlertmanagerConfig, OpenTelemetry Collector, OpenTelemetry Operator, Loki, Grafana, Tempo, metrics, logs, traces, dashboards, or telemetry pipelines.
|
|
4
|
+
|
|
5
|
+
## Why this matters
|
|
6
|
+
|
|
7
|
+
Observability add-ons use CRDs, label selectors, generated scrape config, and deployment modes that differ by stack. LLMs frequently generate resources that apply successfully but are never selected, never scraped, or duplicate data. Do not load this file for basic application logging unless an observability stack is involved.
|
|
8
|
+
|
|
9
|
+
## Prometheus Operator
|
|
10
|
+
|
|
11
|
+
ServiceMonitor and PodMonitor behavior depends on selectors.
|
|
12
|
+
|
|
13
|
+
- `ServiceMonitor` selects Services, not Deployments.
|
|
14
|
+
- The Service must expose a named port, and the ServiceMonitor endpoint should reference that port name.
|
|
15
|
+
- `PodMonitor` selects Pods directly and should be used only when a Service is unnecessary or unavailable.
|
|
16
|
+
- Prometheus or PrometheusAgent selects monitors through label and namespace selectors; labels must match both sides.
|
|
17
|
+
- `PrometheusRule` must be selected by the relevant Prometheus rule selectors.
|
|
18
|
+
- Do not create ServiceMonitor/PodMonitor resources unless the CRDs are installed.
|
|
19
|
+
|
|
20
|
+
## OpenTelemetry Collector
|
|
21
|
+
|
|
22
|
+
Choose collector mode by signal source.
|
|
23
|
+
|
|
24
|
+
- `DaemonSet`: node-local logs, host metrics, kubelet metrics, or per-node collection.
|
|
25
|
+
- `Deployment`: centralized OTLP gateway, cluster events, or singleton receivers.
|
|
26
|
+
- `StatefulSet`: stable identity or persistent queue/storage requirements.
|
|
27
|
+
- Avoid duplicate cluster-wide receivers across multiple replicas unless the receiver supports it.
|
|
28
|
+
- Set memory limits and memory limiter processor together.
|
|
29
|
+
- Bind receivers as narrowly as practical and expose OTLP only inside the cluster unless explicitly required.
|
|
30
|
+
|
|
31
|
+
## Loki and Logs
|
|
32
|
+
|
|
33
|
+
- Choose Loki deployment mode by scale: monolithic for small stacks, scalable or microservices for production/high volume.
|
|
34
|
+
- Configure durable object storage for production Loki; do not rely on ephemeral storage.
|
|
35
|
+
- Keep log labels low-cardinality. Do not label on request IDs, user IDs, pod UIDs, or raw paths.
|
|
36
|
+
- Prefer structured JSON logs to stdout/stderr from applications.
|
|
37
|
+
- Separate log collection agents from application pods unless the sidecar is explicitly required.
|
|
38
|
+
|
|
39
|
+
## Grafana and Dashboards
|
|
40
|
+
|
|
41
|
+
- Treat dashboards and datasources as configuration owned by the observability platform.
|
|
42
|
+
- Avoid embedding secrets in dashboard ConfigMaps or Helm values.
|
|
43
|
+
- When using sidecar dashboard discovery, ensure labels match the sidecar selector.
|
|
44
|
+
- Keep dashboard ConfigMaps namespace and RBAC aligned with the deployed Grafana chart.
|
|
45
|
+
|
|
46
|
+
## Alerting
|
|
47
|
+
|
|
48
|
+
- Alerts should be actionable, routed, and include runbook context.
|
|
49
|
+
- Use `for:` durations to reduce flapping.
|
|
50
|
+
- Avoid high-cardinality alert labels.
|
|
51
|
+
- Separate symptom alerts from cause alerts; do not page on every transient pod restart.
|
|
52
|
+
- Validate PromQL against the actual metric names emitted by the stack.
|
|
53
|
+
|
|
54
|
+
## Validation
|
|
55
|
+
|
|
56
|
+
- `kubectl get crd | grep -Ei "servicemonitors|podmonitors|prometheusrules"` (or `findstr /i` on Windows)
|
|
57
|
+
- `kubectl get servicemonitor,podmonitor,prometheusrule -A`
|
|
58
|
+
- Inspect Prometheus target discovery for selected monitors.
|
|
59
|
+
- Check generated Prometheus config or operator logs when targets are missing.
|
|
60
|
+
- `helm template` observability charts and validate rendered CRDs/resources before applying.
|
|
61
|
+
- For OpenTelemetry, inspect Collector logs for invalid pipeline components and dropped data.
|
|
62
|
+
|
|
63
|
+
## LLM Mistake Checklist
|
|
64
|
+
|
|
65
|
+
- Creating ServiceMonitor selectors that match Deployment labels but not Service labels.
|
|
66
|
+
- Referencing a numeric port when the ServiceMonitor expects a named Service port.
|
|
67
|
+
- Forgetting that Prometheus selectors must select the monitor.
|
|
68
|
+
- Creating monitoring CRDs when the Prometheus Operator is not installed.
|
|
69
|
+
- Running cluster-wide OpenTelemetry receivers in multiple replicas and duplicating data.
|
|
70
|
+
- Choosing Loki monolithic mode for high-volume production without durable storage.
|
|
71
|
+
- Creating high-cardinality Loki labels or alert labels.
|
|
72
|
+
- Shipping dashboards with plaintext datasource credentials.
|
|
73
|
+
|
|
74
|
+
## Grounding Sources
|
|
75
|
+
|
|
76
|
+
- Prometheus Operator design: https://prometheus-operator.dev/docs/getting-started/design/
|
|
77
|
+
- Prometheus Operator ServiceMonitor and PodMonitor getting started: https://prometheus-operator.dev/docs/developer/getting-started/
|
|
78
|
+
- Prometheus Operator troubleshooting: https://prometheus-operator.dev/docs/platform/troubleshooting/
|
|
79
|
+
- OpenTelemetry Collector Helm chart: https://opentelemetry.io/docs/platforms/kubernetes/helm/collector/
|
|
80
|
+
- Loki Helm installation: https://grafana.com/docs/loki/latest/setup/install/helm/
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# OpenShift Patterns
|
|
2
|
+
|
|
3
|
+
**Load this reference when detected:** OpenShift, OKD, ROSA, ARO, Route, SecurityContextConstraints, SCC, restricted-v2, OpenShift Pipelines, OpenShift GitOps, OperatorHub, OLM, ImageStream, or `oc`.
|
|
4
|
+
|
|
5
|
+
## Why this matters
|
|
6
|
+
|
|
7
|
+
OpenShift is Kubernetes with important platform APIs and security defaults. Generic upstream manifests often fail because of SecurityContextConstraints, arbitrary UID requirements, Routes, and operator-managed platform components. Do not load this file for vanilla clusters unless OpenShift APIs are present.
|
|
8
|
+
|
|
9
|
+
## Security Context Constraints
|
|
10
|
+
|
|
11
|
+
SCCs are admission controls for pod privileges.
|
|
12
|
+
|
|
13
|
+
- Do not modify default SCCs.
|
|
14
|
+
- Prefer workloads that run under `restricted-v2` or the platform default restricted SCC.
|
|
15
|
+
- Do not hardcode `runAsUser: 1000` or another fixed UID unless the namespace/SCC permits it.
|
|
16
|
+
- Build images to run with an arbitrary UID and writable group-owned paths.
|
|
17
|
+
- If a workload needs `anyuid`, host networking, host mounts, or privileged mode, require a justification and bind the narrowest SCC only to the dedicated ServiceAccount.
|
|
18
|
+
- Use RBAC to grant SCC use to ServiceAccounts, not broad users or groups.
|
|
19
|
+
|
|
20
|
+
## Routes and Ingress
|
|
21
|
+
|
|
22
|
+
OpenShift Routes are first-class edge routing resources.
|
|
23
|
+
|
|
24
|
+
- Use `Route` when the user asks for OpenShift-native exposure.
|
|
25
|
+
- Choose TLS termination deliberately: edge, passthrough, or re-encrypt.
|
|
26
|
+
- Do not assume Ingress annotations from nginx, AWS, GCE, or AGIC apply to Routes.
|
|
27
|
+
- For portable upstream manifests, use Ingress only when the target OpenShift cluster supports the intended IngressController behavior.
|
|
28
|
+
|
|
29
|
+
## Images and Runtime Assumptions
|
|
30
|
+
|
|
31
|
+
OpenShift security often exposes image problems.
|
|
32
|
+
|
|
33
|
+
- Avoid images that require root by default.
|
|
34
|
+
- Ensure writable directories can be written by an arbitrary UID, commonly through group permissions.
|
|
35
|
+
- Do not rely on Docker socket mounts or hostPath except for platform-level agents with explicit SCC approval.
|
|
36
|
+
- For internal registry or ImageStream workflows, keep image references and pull policies aligned with the platform's promotion model.
|
|
37
|
+
|
|
38
|
+
## Operators and OLM
|
|
39
|
+
|
|
40
|
+
When OperatorHub, OLM, or custom operators are in scope:
|
|
41
|
+
|
|
42
|
+
- Prefer Subscription/OperatorGroup/InstallPlan patterns only when the user is actually managing operators.
|
|
43
|
+
- Do not hand-roll CRDs owned by an installed operator unless the operator documentation requires it.
|
|
44
|
+
- Validate custom resources against installed CRDs, not only generic Kubernetes schemas.
|
|
45
|
+
|
|
46
|
+
## Validation
|
|
47
|
+
|
|
48
|
+
- `oc apply --dry-run=server -f <manifest>`
|
|
49
|
+
- `oc auth can-i use scc/restricted-v2 --as=system:serviceaccount:<namespace>:<serviceaccount>`
|
|
50
|
+
- `oc describe pod <name>` for SCC admission failures
|
|
51
|
+
- `oc get route -n <namespace>` for Route readiness
|
|
52
|
+
- `oc get csv,subscription,operatorgroup -A` when OLM-managed resources are involved
|
|
53
|
+
|
|
54
|
+
## LLM Mistake Checklist
|
|
55
|
+
|
|
56
|
+
- Hardcoding a UID that violates OpenShift namespace UID ranges.
|
|
57
|
+
- Asking users to edit default SCCs.
|
|
58
|
+
- Granting `anyuid` or `privileged` SCC to broad groups.
|
|
59
|
+
- Generating Ingress-controller annotations for OpenShift Routes.
|
|
60
|
+
- Assuming root-capable images will run under restricted SCCs.
|
|
61
|
+
- Forgetting `oc` validation and SCC checks.
|
|
62
|
+
- Creating operator-owned resources without verifying the CRD exists.
|
|
63
|
+
|
|
64
|
+
## Grounding Sources
|
|
65
|
+
|
|
66
|
+
- OpenShift SecurityContextConstraints: https://docs.redhat.com/en/documentation/openshift_container_platform/latest/html/authentication_and_authorization/managing-pod-security-policies
|
|
67
|
+
- OpenShift Routes: https://docs.redhat.com/en/documentation/openshift_container_platform/latest/html/ingress_and_load_balancing/routes
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# DaemonSet and Operator Patterns -- Node-Level and Custom Controllers
|
|
2
|
+
|
|
3
|
+
**Load this reference when generating:** DaemonSet, PriorityClass, CRDs, or any workload that must run on every (or a targeted subset of) node(s).
|
|
4
|
+
|
|
5
|
+
## When to Use a DaemonSet
|
|
6
|
+
Exactly one pod per qualifying node: log collectors (Fluent Bit, Vector), monitoring agents (node-exporter, Datadog), network plugins (CNI, kube-proxy, Cilium), CSI node drivers, security agents (Falco). If you need multiple replicas per node or the workload is not node-scoped, use a Deployment.
|
|
7
|
+
|
|
8
|
+
## Update Strategies
|
|
9
|
+
| Strategy | Behavior | Use when |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `RollingUpdate` | Replaces pods node-by-node; `maxUnavailable` controls pace | Normal updates |
|
|
12
|
+
| `OnDelete` | Pods replaced only when manually deleted | Critical infra (CNI, kube-proxy) needing manual control |
|
|
13
|
+
|
|
14
|
+
For large clusters, set `maxUnavailable` to a percentage (e.g., `"10%"`) to speed rollouts.
|
|
15
|
+
|
|
16
|
+
## Node Selectors and Tolerations
|
|
17
|
+
**Targeting**: use `nodeSelector` for simple matching, `nodeAffinity` for richer expressions:
|
|
18
|
+
```yaml
|
|
19
|
+
nodeSelector:
|
|
20
|
+
node.kubernetes.io/os: linux
|
|
21
|
+
kubernetes.io/arch: amd64
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Tolerations**: DaemonSets often must run on tainted nodes (control-plane, GPU pools). Add only the tolerations you need:
|
|
25
|
+
```yaml
|
|
26
|
+
tolerations:
|
|
27
|
+
- key: node-role.kubernetes.io/control-plane
|
|
28
|
+
operator: Exists
|
|
29
|
+
effect: NoSchedule
|
|
30
|
+
- key: node.kubernetes.io/not-ready
|
|
31
|
+
operator: Exists
|
|
32
|
+
effect: NoExecute
|
|
33
|
+
```
|
|
34
|
+
Never use `operator: Exists` without a `key` (tolerates everything) unless the DaemonSet truly belongs on every node.
|
|
35
|
+
|
|
36
|
+
## Resource Management
|
|
37
|
+
DaemonSet pods run on **every node**. 200m CPU x 100 nodes = 20 cores cluster-wide. Be conservative:
|
|
38
|
+
- `requests` = steady-state consumption. `limits` = burst cap.
|
|
39
|
+
- Monitor actual usage and right-size iteratively.
|
|
40
|
+
|
|
41
|
+
## Priority Classes
|
|
42
|
+
Prevent preemption of system DaemonSets with a custom PriorityClass:
|
|
43
|
+
```yaml
|
|
44
|
+
apiVersion: scheduling.k8s.io/v1
|
|
45
|
+
kind: PriorityClass
|
|
46
|
+
metadata:
|
|
47
|
+
name: system-node-agent
|
|
48
|
+
value: 1000000
|
|
49
|
+
globalDefault: false
|
|
50
|
+
preemptionPolicy: PreemptLowerPriority
|
|
51
|
+
description: "Node-level DaemonSet agents (logging, monitoring)."
|
|
52
|
+
```
|
|
53
|
+
Built-in `system-cluster-critical` and `system-node-critical` are reserved for core components. Use a custom class in the 100000-10000000 range.
|
|
54
|
+
|
|
55
|
+
## Operator Pattern Overview
|
|
56
|
+
An operator is a custom controller that watches CRs and reconciles cluster state. Use when:
|
|
57
|
+
- Complex operational logic (failover, backup, scaling) exceeds built-in controllers.
|
|
58
|
+
- Users need a simple declarative API for a complex system (database, queue).
|
|
59
|
+
- Manual runbooks are error-prone and should be codified.
|
|
60
|
+
|
|
61
|
+
Do NOT build an operator when Helm, Kustomize, or a Job suffices. Operators carry significant maintenance burden.
|
|
62
|
+
|
|
63
|
+
## CRD Basics
|
|
64
|
+
```yaml
|
|
65
|
+
apiVersion: apiextensions.k8s.io/v1
|
|
66
|
+
kind: CustomResourceDefinition
|
|
67
|
+
metadata:
|
|
68
|
+
name: postgresclusters.db.example.com
|
|
69
|
+
spec:
|
|
70
|
+
group: db.example.com
|
|
71
|
+
scope: Namespaced
|
|
72
|
+
names: { plural: postgresclusters, singular: postgrescluster, kind: PostgresCluster, shortNames: ["pgc"] }
|
|
73
|
+
versions:
|
|
74
|
+
- name: v1alpha1
|
|
75
|
+
served: true
|
|
76
|
+
storage: true
|
|
77
|
+
schema:
|
|
78
|
+
openAPIV3Schema:
|
|
79
|
+
type: object
|
|
80
|
+
properties:
|
|
81
|
+
spec:
|
|
82
|
+
type: object
|
|
83
|
+
required: ["replicas", "version"]
|
|
84
|
+
properties:
|
|
85
|
+
replicas: { type: integer, minimum: 1, maximum: 10 }
|
|
86
|
+
version: { type: string, enum: ["15", "16"] }
|
|
87
|
+
storage:
|
|
88
|
+
type: object
|
|
89
|
+
properties:
|
|
90
|
+
size: { type: string, pattern: "^[0-9]+Gi$" }
|
|
91
|
+
```
|
|
92
|
+
Always include `openAPIV3Schema` with validation. CRDs without it accept arbitrary YAML, causing runtime errors.
|
|
93
|
+
|
|
94
|
+
## Operator Frameworks
|
|
95
|
+
- **kubebuilder**: upstream Go framework. Generates scaffolding, RBAC, CRD manifests, webhooks. Preferred for Go teams.
|
|
96
|
+
- **operator-sdk**: extends kubebuilder; adds Ansible and Helm operator support for non-Go teams.
|
|
97
|
+
|
|
98
|
+
Both produce the same runtime pattern: a manager running reconciliation loops.
|
|
99
|
+
|
|
100
|
+
## Example: Log Collector DaemonSet
|
|
101
|
+
```yaml
|
|
102
|
+
apiVersion: apps/v1
|
|
103
|
+
kind: DaemonSet
|
|
104
|
+
metadata:
|
|
105
|
+
name: fluent-bit
|
|
106
|
+
labels: { app.kubernetes.io/name: fluent-bit, app.kubernetes.io/component: log-collector }
|
|
107
|
+
spec:
|
|
108
|
+
selector:
|
|
109
|
+
matchLabels: { app.kubernetes.io/name: fluent-bit, app.kubernetes.io/component: log-collector }
|
|
110
|
+
updateStrategy: { type: RollingUpdate, rollingUpdate: { maxUnavailable: "10%" } }
|
|
111
|
+
template:
|
|
112
|
+
metadata:
|
|
113
|
+
labels: { app.kubernetes.io/name: fluent-bit, app.kubernetes.io/component: log-collector }
|
|
114
|
+
spec:
|
|
115
|
+
priorityClassName: system-node-agent
|
|
116
|
+
serviceAccountName: fluent-bit
|
|
117
|
+
nodeSelector: { node.kubernetes.io/os: linux }
|
|
118
|
+
tolerations:
|
|
119
|
+
- { key: node-role.kubernetes.io/control-plane, operator: Exists, effect: NoSchedule }
|
|
120
|
+
- { key: node.kubernetes.io/not-ready, operator: Exists, effect: NoExecute, tolerationSeconds: 60 }
|
|
121
|
+
securityContext:
|
|
122
|
+
runAsNonRoot: true
|
|
123
|
+
runAsUser: 10000
|
|
124
|
+
runAsGroup: 10000
|
|
125
|
+
seccompProfile: { type: RuntimeDefault }
|
|
126
|
+
containers:
|
|
127
|
+
- name: fluent-bit
|
|
128
|
+
image: fluent/fluent-bit:3.0.4
|
|
129
|
+
ports: [{ containerPort: 2020, name: metrics, protocol: TCP }]
|
|
130
|
+
resources:
|
|
131
|
+
requests: { cpu: 50m, memory: 64Mi }
|
|
132
|
+
limits: { cpu: 200m, memory: 128Mi }
|
|
133
|
+
securityContext:
|
|
134
|
+
allowPrivilegeEscalation: false
|
|
135
|
+
readOnlyRootFilesystem: true
|
|
136
|
+
capabilities: { drop: ["ALL"] }
|
|
137
|
+
volumeMounts:
|
|
138
|
+
- { name: varlog, mountPath: /var/log, readOnly: true }
|
|
139
|
+
- { name: config, mountPath: /fluent-bit/etc, readOnly: true }
|
|
140
|
+
- { name: buffer, mountPath: /fluent-bit/buffer }
|
|
141
|
+
volumes:
|
|
142
|
+
- { name: varlog, hostPath: { path: /var/log, type: Directory } }
|
|
143
|
+
- { name: config, configMap: { name: fluent-bit-config } }
|
|
144
|
+
- { name: buffer, emptyDir: { sizeLimit: 256Mi } }
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## LLM Mistake Checklist
|
|
148
|
+
1. **DaemonSet with `replicas` field.** DaemonSets have no `replicas`. The scheduler places one pod per qualifying node. Including it is an API error.
|
|
149
|
+
2. **Missing tolerations for tainted nodes.** Without explicit tolerations, pods stay Pending on control-plane or special-purpose nodes.
|
|
150
|
+
3. **Overly generous resource requests.** Multiplied across every node, small over-requests waste enormous capacity. Keep requests minimal.
|
|
151
|
+
4. **Using system-node-critical without justification.** Reserved for core components. Use a custom PriorityClass for application agents.
|
|
152
|
+
5. **hostPath without `type`.** Always set `hostPath.type` (Directory, Socket, File) to catch mount errors at startup, not runtime.
|
|
153
|
+
6. **CRD without openAPIV3Schema.** No validation = any YAML accepted = inscrutable controller errors. Always define a strict schema.
|
|
154
|
+
7. **Blanket toleration (no key).** `operator: Exists` with no `key` tolerates every taint including NoExecute eviction taints. Only tolerate specific, known taints.
|
|
155
|
+
8. **Forgetting serviceAccountName.** DaemonSets accessing host paths or the API need a dedicated ServiceAccount with minimal RBAC.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Deployment Patterns -- Stateless Workloads
|
|
2
|
+
|
|
3
|
+
**Load this reference when generating:** Deployment, Service, HPA, PDB, Ingress, or any stateless application manifest.
|
|
4
|
+
|
|
5
|
+
## When to Use a Deployment
|
|
6
|
+
Any workload that is stateless: web apps, REST/gRPC APIs, microservices, frontend proxies, queue-consuming workers. If pods are interchangeable and need no stable identity or persistent local storage, use a Deployment.
|
|
7
|
+
|
|
8
|
+
## Minimum Production Checklist
|
|
9
|
+
1. `replicas` >= 2 -- never ship a single replica to production.
|
|
10
|
+
2. `resources.requests` AND `resources.limits` on every container (cpu + memory).
|
|
11
|
+
3. Pod-level `securityContext` satisfying PSS **restricted** profile.
|
|
12
|
+
4. `readinessProbe` (gates traffic) and `livenessProbe` (restarts stuck pods) on separate endpoints.
|
|
13
|
+
5. `topologySpreadConstraints` or pod anti-affinity across failure domains.
|
|
14
|
+
6. An accompanying `PodDisruptionBudget`.
|
|
15
|
+
|
|
16
|
+
## Label Strategy
|
|
17
|
+
```yaml
|
|
18
|
+
labels:
|
|
19
|
+
app.kubernetes.io/name: order-service # app identity -- use in selectors
|
|
20
|
+
app.kubernetes.io/version: "1.4.2" # NEVER put in selector.matchLabels
|
|
21
|
+
app.kubernetes.io/component: api # role: api | worker | cache
|
|
22
|
+
app.kubernetes.io/part-of: ecommerce # higher-level system
|
|
23
|
+
app.kubernetes.io/managed-by: helm # tooling
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Service Wiring
|
|
27
|
+
Default: **ClusterIP + Ingress**. ClusterIP for in-cluster traffic; Ingress terminates TLS and routes externally. Avoid LoadBalancer Services unless no Ingress controller exists or the workload needs raw TCP/UDP.
|
|
28
|
+
|
|
29
|
+
## Config Mounting
|
|
30
|
+
- **Prefer volume mounts** for file-based config -- enables atomic updates on ConfigMap rotation.
|
|
31
|
+
- Use `env`/`envFrom` only for simple key-value pairs.
|
|
32
|
+
- Set `immutable: true` on Secrets that should never change in place.
|
|
33
|
+
|
|
34
|
+
## Environment-Specific Configuration
|
|
35
|
+
- **Kustomize overlays**: `base/` + `overlays/{dev,staging,prod}/` for per-env patching (replicas, resources, images).
|
|
36
|
+
- **Helm values**: `values-prod.yaml` per environment when conditionals or loops are needed.
|
|
37
|
+
|
|
38
|
+
## Example: Production Deployment + Service + HPA
|
|
39
|
+
```yaml
|
|
40
|
+
apiVersion: apps/v1
|
|
41
|
+
kind: Deployment
|
|
42
|
+
metadata:
|
|
43
|
+
name: order-service
|
|
44
|
+
labels: &labels
|
|
45
|
+
app.kubernetes.io/name: order-service
|
|
46
|
+
app.kubernetes.io/component: api
|
|
47
|
+
app.kubernetes.io/part-of: ecommerce
|
|
48
|
+
spec:
|
|
49
|
+
replicas: 3
|
|
50
|
+
revisionHistoryLimit: 5
|
|
51
|
+
selector:
|
|
52
|
+
matchLabels: { app.kubernetes.io/name: order-service, app.kubernetes.io/component: api }
|
|
53
|
+
strategy: { type: RollingUpdate, rollingUpdate: { maxSurge: 1, maxUnavailable: 0 } }
|
|
54
|
+
template:
|
|
55
|
+
metadata:
|
|
56
|
+
labels: { <<: *labels, app.kubernetes.io/version: "1.4.2" }
|
|
57
|
+
spec:
|
|
58
|
+
securityContext:
|
|
59
|
+
runAsNonRoot: true
|
|
60
|
+
runAsUser: 10000
|
|
61
|
+
runAsGroup: 10000
|
|
62
|
+
fsGroup: 10000
|
|
63
|
+
seccompProfile: { type: RuntimeDefault }
|
|
64
|
+
topologySpreadConstraints:
|
|
65
|
+
- maxSkew: 1
|
|
66
|
+
topologyKey: topology.kubernetes.io/zone
|
|
67
|
+
whenUnsatisfiable: DoNotSchedule
|
|
68
|
+
labelSelector:
|
|
69
|
+
matchLabels: { app.kubernetes.io/name: order-service }
|
|
70
|
+
containers:
|
|
71
|
+
- name: order-service
|
|
72
|
+
image: registry.example.com/order-service:1.4.2
|
|
73
|
+
ports: [{ containerPort: 8080, protocol: TCP }]
|
|
74
|
+
resources:
|
|
75
|
+
requests: { cpu: 250m, memory: 256Mi }
|
|
76
|
+
limits: { cpu: "1", memory: 512Mi }
|
|
77
|
+
securityContext:
|
|
78
|
+
allowPrivilegeEscalation: false
|
|
79
|
+
readOnlyRootFilesystem: true
|
|
80
|
+
capabilities: { drop: ["ALL"] }
|
|
81
|
+
readinessProbe:
|
|
82
|
+
httpGet: { path: /healthz/ready, port: 8080 }
|
|
83
|
+
initialDelaySeconds: 5
|
|
84
|
+
periodSeconds: 10
|
|
85
|
+
livenessProbe:
|
|
86
|
+
httpGet: { path: /healthz/live, port: 8080 }
|
|
87
|
+
initialDelaySeconds: 15
|
|
88
|
+
periodSeconds: 20
|
|
89
|
+
volumeMounts:
|
|
90
|
+
- { name: config, mountPath: /etc/order-service, readOnly: true }
|
|
91
|
+
- { name: tmp, mountPath: /tmp }
|
|
92
|
+
volumes:
|
|
93
|
+
- { name: config, configMap: { name: order-service-config } }
|
|
94
|
+
- { name: tmp, emptyDir: {} }
|
|
95
|
+
---
|
|
96
|
+
apiVersion: v1
|
|
97
|
+
kind: Service
|
|
98
|
+
metadata:
|
|
99
|
+
name: order-service
|
|
100
|
+
spec:
|
|
101
|
+
type: ClusterIP
|
|
102
|
+
selector: { app.kubernetes.io/name: order-service, app.kubernetes.io/component: api }
|
|
103
|
+
ports: [{ port: 80, targetPort: 8080, protocol: TCP }]
|
|
104
|
+
---
|
|
105
|
+
apiVersion: autoscaling/v2
|
|
106
|
+
kind: HorizontalPodAutoscaler
|
|
107
|
+
metadata:
|
|
108
|
+
name: order-service
|
|
109
|
+
spec:
|
|
110
|
+
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: order-service }
|
|
111
|
+
minReplicas: 3
|
|
112
|
+
maxReplicas: 15
|
|
113
|
+
metrics:
|
|
114
|
+
- type: Resource
|
|
115
|
+
resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }
|
|
116
|
+
- type: Pods
|
|
117
|
+
pods:
|
|
118
|
+
metric: { name: http_requests_per_second }
|
|
119
|
+
target: { type: AverageValue, averageValue: "1000" }
|
|
120
|
+
behavior:
|
|
121
|
+
scaleDown:
|
|
122
|
+
stabilizationWindowSeconds: 300
|
|
123
|
+
policies: [{ type: Percent, value: 25, periodSeconds: 60 }]
|
|
124
|
+
scaleUp:
|
|
125
|
+
stabilizationWindowSeconds: 30
|
|
126
|
+
policies: [{ type: Percent, value: 50, periodSeconds: 60 }]
|
|
127
|
+
---
|
|
128
|
+
apiVersion: policy/v1
|
|
129
|
+
kind: PodDisruptionBudget
|
|
130
|
+
metadata:
|
|
131
|
+
name: order-service
|
|
132
|
+
spec:
|
|
133
|
+
minAvailable: 2
|
|
134
|
+
selector:
|
|
135
|
+
matchLabels: { app.kubernetes.io/name: order-service, app.kubernetes.io/component: api }
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## LLM Mistake Checklist
|
|
139
|
+
1. **Version label in selector.** Never put `app.kubernetes.io/version` in `selector.matchLabels` -- selectors are immutable; this breaks upgrades.
|
|
140
|
+
2. **Missing readOnlyRootFilesystem.** PSS restricted requires it. Mount an `emptyDir` at `/tmp` if the app writes temp files.
|
|
141
|
+
3. **Omitting resource limits.** Both `requests` and `limits` are required. Without them the pod is BestEffort QoS and evicted first.
|
|
142
|
+
4. **Single replica in production.** Always `replicas >= 2` with a PDB. One replica = zero availability during node drains.
|
|
143
|
+
5. **HPA without scaleDown stabilization.** Default scale-down is aggressive. Set `stabilizationWindowSeconds: 300` to prevent thrashing.
|
|
144
|
+
6. **Probes hitting the main API path.** Use dedicated `/healthz/*` endpoints to avoid cascading failures under load.
|
|
145
|
+
7. **Forgetting /tmp emptyDir.** With `readOnlyRootFilesystem: true`, processes writing to `/tmp` crash without this volume.
|
|
146
|
+
8. **LoadBalancer Service by default.** Each provisions a cloud LB -- use ClusterIP + Ingress instead.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Do / Don't Quick Reference
|
|
2
|
+
|
|
3
|
+
> Terse checklist of Kubernetes best practices organized by category. Each line is
|
|
4
|
+
> a standalone rule. Default security posture is PSS "restricted" profile.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Security Contexts
|
|
9
|
+
|
|
10
|
+
- DO set `runAsNonRoot: true` and explicit `runAsUser`/`runAsGroup` on every pod.
|
|
11
|
+
- DO set `allowPrivilegeEscalation: false` on every container.
|
|
12
|
+
- DO set `readOnlyRootFilesystem: true` and mount writable paths as emptyDir.
|
|
13
|
+
- DO set `capabilities.drop: ["ALL"]` and only add back specific caps if required.
|
|
14
|
+
- DO set `seccompProfile.type: RuntimeDefault` at the pod level.
|
|
15
|
+
- DON'T set `privileged: true` unless the workload genuinely requires it (CNI plugins, node agents).
|
|
16
|
+
- DON'T omit the security context and rely on cluster defaults.
|
|
17
|
+
|
|
18
|
+
## RBAC
|
|
19
|
+
|
|
20
|
+
- DO use namespace-scoped Role + RoleBinding for workloads that operate in one namespace.
|
|
21
|
+
- DO grant only the specific verbs, API groups, and resources needed.
|
|
22
|
+
- DO use `resourceNames` to scope access to specific objects when possible.
|
|
23
|
+
- DON'T bind to `cluster-admin` for application workloads.
|
|
24
|
+
- DON'T use ClusterRoleBinding when RoleBinding is sufficient.
|
|
25
|
+
- DON'T grant `*` (wildcard) verbs or resources.
|
|
26
|
+
- DON'T leave `automountServiceAccountToken: true` on pods that do not call the Kubernetes API.
|
|
27
|
+
|
|
28
|
+
## Resource Management
|
|
29
|
+
|
|
30
|
+
- DO set `requests` for both CPU and memory on every container.
|
|
31
|
+
- DO set `limits.memory` to prevent OOM from killing other workloads.
|
|
32
|
+
- DO set ResourceQuota and LimitRange on every namespace.
|
|
33
|
+
- DO leave CPU limits unset or generous to avoid CPU throttling.
|
|
34
|
+
- DON'T omit resource requests -- the scheduler cannot bin-pack without them.
|
|
35
|
+
- DON'T set requests equal to limits unless you need Guaranteed QoS class intentionally.
|
|
36
|
+
|
|
37
|
+
## Networking
|
|
38
|
+
|
|
39
|
+
- DO create a default-deny NetworkPolicy in every namespace.
|
|
40
|
+
- DO allow DNS egress (UDP/TCP 53 to kube-dns) in every allow-list policy.
|
|
41
|
+
- DO use `ingressClassName` instead of the deprecated `kubernetes.io/ingress.class` annotation.
|
|
42
|
+
- DO use `networking.k8s.io/v1` for Ingress and NetworkPolicy resources.
|
|
43
|
+
- DON'T expose Services as `type: LoadBalancer` without understanding cost and security implications.
|
|
44
|
+
- DON'T use `type: NodePort` in production without firewall rules.
|
|
45
|
+
|
|
46
|
+
## Probes and Rollouts
|
|
47
|
+
|
|
48
|
+
- DO set a readiness probe on every container that serves traffic.
|
|
49
|
+
- DO set a liveness probe that checks only the process's own health.
|
|
50
|
+
- DO set `initialDelaySeconds` to account for application startup time.
|
|
51
|
+
- DO set `revisionHistoryLimit` to a small number (3-5) to reduce etcd storage.
|
|
52
|
+
- DO use `maxUnavailable: 0` with `maxSurge: 1` for zero-downtime rolling updates.
|
|
53
|
+
- DON'T point liveness probes at external dependencies.
|
|
54
|
+
- DON'T set liveness and readiness probes to the same endpoint and thresholds without understanding the difference.
|
|
55
|
+
- DON'T set `failureThreshold: 1` on liveness probes -- one slow response kills the pod.
|
|
56
|
+
|
|
57
|
+
## Image Management
|
|
58
|
+
|
|
59
|
+
- DO use immutable image tags (`v1.2.3`) or digests (`@sha256:...`).
|
|
60
|
+
- DO set `imagePullPolicy: IfNotPresent` with immutable tags.
|
|
61
|
+
- DO reference images from a private registry with `imagePullSecrets`.
|
|
62
|
+
- DON'T use `:latest` -- it is mutable, breaks rollback, and causes inconsistent replicas.
|
|
63
|
+
- DON'T omit the image tag entirely -- it implicitly defaults to `:latest`.
|
|
64
|
+
|
|
65
|
+
## Storage
|
|
66
|
+
|
|
67
|
+
- DO verify the storage class supports the requested access mode before creating a PVC.
|
|
68
|
+
- DO use `ReadWriteOnce` for block storage (EBS, Persistent Disk).
|
|
69
|
+
- DO use StatefulSet with `volumeClaimTemplates` for per-replica storage.
|
|
70
|
+
- DON'T request `ReadWriteMany` with block storage classes (gp3, pd-ssd).
|
|
71
|
+
- DON'T use `hostPath` volumes in production workloads.
|
|
72
|
+
|
|
73
|
+
## Configuration
|
|
74
|
+
|
|
75
|
+
- DO store credentials in Secrets, not ConfigMaps.
|
|
76
|
+
- DO use ExternalSecrets or Sealed Secrets so plain-text credentials never enter version control.
|
|
77
|
+
- DO use ConfigMap/Secret hash-based naming (Kustomize generator, Helm sha annotation) to trigger rolling updates on config change.
|
|
78
|
+
- DON'T embed passwords in connection string environment variables inside ConfigMaps.
|
|
79
|
+
- DON'T commit raw Secret manifests to Git.
|
|
80
|
+
|
|
81
|
+
## Namespaces and Isolation
|
|
82
|
+
|
|
83
|
+
- DO apply PSA labels (`pod-security.kubernetes.io/enforce: restricted`) to every namespace.
|
|
84
|
+
- DO create ResourceQuota in every namespace to prevent noisy-neighbor resource exhaustion.
|
|
85
|
+
- DO use separate namespaces for separate trust boundaries.
|
|
86
|
+
- DON'T deploy application workloads in `default`, `kube-system`, or `kube-public`.
|
|
87
|
+
- DON'T assume namespace isolation provides network isolation -- it does not without NetworkPolicies.
|