@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,298 @@
|
|
|
1
|
+
# API Drift
|
|
2
|
+
|
|
3
|
+
**Directive:** When generating any Kubernetes manifest, Helm chart, or Kustomize overlay, ALWAYS use the current stable API version for the target cluster version. Never assume an API version is correct from training data -- verify it. LLMs hallucinate deprecated and removed API versions frequently.
|
|
4
|
+
|
|
5
|
+
## When to use
|
|
6
|
+
|
|
7
|
+
Consult this reference whenever the task involves:
|
|
8
|
+
- Generating any Kubernetes manifest from scratch
|
|
9
|
+
- Upgrading manifests for a newer cluster version
|
|
10
|
+
- Writing or reviewing Helm templates
|
|
11
|
+
- Writing or reviewing Kustomize overlays and patches
|
|
12
|
+
- Validating manifests before applying to a cluster
|
|
13
|
+
|
|
14
|
+
## Symptoms of API drift
|
|
15
|
+
|
|
16
|
+
| Symptom | Cause |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `error: unable to recognize: no matches for kind "Ingress" in version "extensions/v1beta1"` | Using a removed apiVersion |
|
|
19
|
+
| `Warning: policy/v1beta1 PodDisruptionBudget is deprecated` | Using deprecated but not yet removed apiVersion |
|
|
20
|
+
| Fields silently ignored after upgrade | Field existed in beta, removed or renamed in stable |
|
|
21
|
+
| `unknown field "spec.hard"` in `kubectl apply` | Structural schema validation rejects unknown fields in stable APIs |
|
|
22
|
+
| Helm template renders but `kubectl apply` fails | Template produces syntactically valid YAML with wrong apiVersion |
|
|
23
|
+
|
|
24
|
+
## Root causes
|
|
25
|
+
|
|
26
|
+
1. LLM training data contains outdated manifests from blog posts, Stack Overflow, and old documentation.
|
|
27
|
+
2. Copy-paste from tutorials written for Kubernetes 1.18-1.21 era.
|
|
28
|
+
3. Helm charts pinned to old API versions without `Capabilities` checks.
|
|
29
|
+
4. Not running schema validation against the target cluster version.
|
|
30
|
+
5. Confusing "deprecated" (still works, prints warning) with "removed" (hard failure).
|
|
31
|
+
|
|
32
|
+
## The API deprecation lifecycle
|
|
33
|
+
|
|
34
|
+
Kubernetes follows a predictable pattern:
|
|
35
|
+
|
|
36
|
+
1. **Beta API introduced** (e.g., `extensions/v1beta1 Ingress` in 1.1)
|
|
37
|
+
2. **Stable API introduced** (e.g., `networking.k8s.io/v1 Ingress` in 1.19)
|
|
38
|
+
3. **Beta API deprecated** (same release as stable introduction, or one release later)
|
|
39
|
+
4. **Beta API removed** (usually 2-3 minor versions after deprecation, per policy)
|
|
40
|
+
|
|
41
|
+
Once removed, the API server rejects manifests using that version. There is no graceful fallback.
|
|
42
|
+
|
|
43
|
+
## Major API migrations LLMs frequently get wrong
|
|
44
|
+
|
|
45
|
+
### Ingress: extensions/v1beta1 and networking.k8s.io/v1beta1 -> networking.k8s.io/v1
|
|
46
|
+
|
|
47
|
+
- Removed in: **Kubernetes 1.22**
|
|
48
|
+
- Key structural changes in v1:
|
|
49
|
+
- `spec.backend` renamed to `spec.defaultBackend`
|
|
50
|
+
- `serviceName` and `servicePort` replaced with `service.name` and `service.port.number` (or `service.port.name`)
|
|
51
|
+
- `pathType` is now **required** on every path (was optional in beta)
|
|
52
|
+
- `ingressClassName` replaces the `kubernetes.io/ingress.class` annotation
|
|
53
|
+
|
|
54
|
+
### PodDisruptionBudget: policy/v1beta1 -> policy/v1
|
|
55
|
+
|
|
56
|
+
- Removed in: **Kubernetes 1.25**
|
|
57
|
+
- Key changes in v1:
|
|
58
|
+
- `spec.selector` is now immutable after creation
|
|
59
|
+
- Unhealthy pod eviction policy field added (`spec.unhealthyPodEvictionPolicy`)
|
|
60
|
+
|
|
61
|
+
### HorizontalPodAutoscaler: autoscaling/v2beta1 and v2beta2 -> autoscaling/v2
|
|
62
|
+
|
|
63
|
+
- v2beta1 removed in: **Kubernetes 1.25**
|
|
64
|
+
- v2beta2 removed in: **Kubernetes 1.26**
|
|
65
|
+
- Key changes in v2:
|
|
66
|
+
- `targetAverageUtilization` moved under `target.averageUtilization`
|
|
67
|
+
- `metrics[].type` uses `ContainerResource` for per-container scaling
|
|
68
|
+
- `behavior` field for scale-up/scale-down policies is stable
|
|
69
|
+
|
|
70
|
+
### FlowSchema/PriorityLevelConfiguration: flowcontrol.apiserver.k8s.io/v1beta1 -> v1beta3 -> v1
|
|
71
|
+
|
|
72
|
+
- v1beta1 removed in: **Kubernetes 1.26**
|
|
73
|
+
- v1beta2 removed in: **Kubernetes 1.29**
|
|
74
|
+
- v1beta3 removed in: **Kubernetes 1.32**
|
|
75
|
+
|
|
76
|
+
### Other common migrations
|
|
77
|
+
|
|
78
|
+
| Resource | Old API | Current Stable API | Removed in |
|
|
79
|
+
|---|---|---|---|
|
|
80
|
+
| CronJob | batch/v1beta1 | batch/v1 | 1.25 |
|
|
81
|
+
| EndpointSlice | discovery.k8s.io/v1beta1 | discovery.k8s.io/v1 | 1.25 |
|
|
82
|
+
| CSIDriver, CSINode | storage.k8s.io/v1beta1 | storage.k8s.io/v1 | 1.22 |
|
|
83
|
+
| CertificateSigningRequest | certificates.k8s.io/v1beta1 | certificates.k8s.io/v1 | 1.22 |
|
|
84
|
+
| TokenReview | authentication.k8s.io/v1beta1 | authentication.k8s.io/v1 | 1.22 |
|
|
85
|
+
|
|
86
|
+
## API version quick reference (current stable)
|
|
87
|
+
|
|
88
|
+
| Resource | apiVersion |
|
|
89
|
+
|---|---|
|
|
90
|
+
| Deployment, ReplicaSet, StatefulSet, DaemonSet | apps/v1 |
|
|
91
|
+
| Service, ConfigMap, Secret, Pod, Namespace | v1 |
|
|
92
|
+
| Ingress | networking.k8s.io/v1 |
|
|
93
|
+
| NetworkPolicy | networking.k8s.io/v1 |
|
|
94
|
+
| HorizontalPodAutoscaler | autoscaling/v2 |
|
|
95
|
+
| PodDisruptionBudget | policy/v1 |
|
|
96
|
+
| CronJob, Job | batch/v1 |
|
|
97
|
+
| ServiceAccount | v1 |
|
|
98
|
+
| Role, ClusterRole, RoleBinding, ClusterRoleBinding | rbac.authorization.k8s.io/v1 |
|
|
99
|
+
| PersistentVolumeClaim, PersistentVolume | v1 |
|
|
100
|
+
| StorageClass | storage.k8s.io/v1 |
|
|
101
|
+
| IngressClass | networking.k8s.io/v1 |
|
|
102
|
+
| EndpointSlice | discovery.k8s.io/v1 |
|
|
103
|
+
| ValidatingWebhookConfiguration | admissionregistration.k8s.io/v1 |
|
|
104
|
+
|
|
105
|
+
## Schema validation
|
|
106
|
+
|
|
107
|
+
### Structural vs semantic validity
|
|
108
|
+
|
|
109
|
+
A manifest can be valid YAML and even match the general shape of a Kubernetes resource while still being wrong:
|
|
110
|
+
- **Structural validity**: "Does this YAML parse? Do the fields exist in the schema?" -- caught by `kubeconform` or `--dry-run=server`.
|
|
111
|
+
- **Semantic validity**: "Does this make sense? Does the referenced Service exist? Is the port correct?" -- only caught at apply time or with policy tools.
|
|
112
|
+
|
|
113
|
+
### kubeconform usage
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Validate against a specific Kubernetes version
|
|
117
|
+
kubeconform -kubernetes-version 1.29.0 -strict manifests/
|
|
118
|
+
|
|
119
|
+
# Validate with CRD schemas (e.g., from datreeio/CRDs-catalog)
|
|
120
|
+
kubeconform -kubernetes-version 1.29.0 \
|
|
121
|
+
-schema-location default \
|
|
122
|
+
-schema-location 'https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/{{.Group}}/{{.ResourceKind}}_{{.ResourceAPIVersion}}.json' \
|
|
123
|
+
manifests/
|
|
124
|
+
|
|
125
|
+
# Validate Helm output
|
|
126
|
+
helm template my-release ./chart | kubeconform -kubernetes-version 1.29.0 -strict
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### kubectl dry-run
|
|
130
|
+
|
|
131
|
+
- `--dry-run=client`: validates locally against the client's built-in schema. Fast but may be outdated.
|
|
132
|
+
- `--dry-run=server`: sends the request to the API server for validation without persisting. More accurate -- catches unknown fields, CRD validation, admission webhooks.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Server-side dry-run (preferred)
|
|
136
|
+
kubectl apply -f manifest.yaml --dry-run=server
|
|
137
|
+
|
|
138
|
+
# Client-side dry-run (no cluster needed)
|
|
139
|
+
kubectl apply -f manifest.yaml --dry-run=client
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Helm-specific drift errors
|
|
143
|
+
|
|
144
|
+
- **Broken Go templates**: `{{ .Values.replicas }}` fails if `replicas` is not defined in `values.yaml`. Always use `{{ .Values.replicas | default 3 }}` or check with `{{ if .Values.replicas }}`.
|
|
145
|
+
- **API version in templates**: Use `Capabilities.APIVersions` to branch on cluster version:
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
|
|
149
|
+
apiVersion: networking.k8s.io/v1
|
|
150
|
+
{{- else }}
|
|
151
|
+
apiVersion: networking.k8s.io/v1beta1
|
|
152
|
+
{{- end }}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
- **Missing Chart.yaml fields**: `apiVersion: v2` is required for Helm 3. `type: application` (default) or `type: library` must be valid.
|
|
156
|
+
|
|
157
|
+
## Kustomize-specific drift errors
|
|
158
|
+
|
|
159
|
+
- **Invalid patch target**: the `target` in a strategic merge patch must specify the correct `group`, `version`, `kind`. A wrong API group silently fails to match.
|
|
160
|
+
- **Wrong resource in kustomization.yaml**: listing a file with a removed apiVersion causes `kustomize build` to fail.
|
|
161
|
+
|
|
162
|
+
## Patterns and examples
|
|
163
|
+
|
|
164
|
+
### GOOD: Manifest with correct current apiVersions
|
|
165
|
+
|
|
166
|
+
```yaml
|
|
167
|
+
apiVersion: networking.k8s.io/v1
|
|
168
|
+
kind: Ingress
|
|
169
|
+
metadata:
|
|
170
|
+
name: web-ingress
|
|
171
|
+
namespace: frontend
|
|
172
|
+
spec:
|
|
173
|
+
ingressClassName: nginx # not annotation
|
|
174
|
+
rules:
|
|
175
|
+
- host: app.example.com
|
|
176
|
+
http:
|
|
177
|
+
paths:
|
|
178
|
+
- path: /
|
|
179
|
+
pathType: Prefix # required in v1
|
|
180
|
+
backend:
|
|
181
|
+
service:
|
|
182
|
+
name: web-frontend
|
|
183
|
+
port:
|
|
184
|
+
number: 8080 # nested under service.port
|
|
185
|
+
---
|
|
186
|
+
apiVersion: autoscaling/v2
|
|
187
|
+
kind: HorizontalPodAutoscaler
|
|
188
|
+
metadata:
|
|
189
|
+
name: web-frontend-hpa
|
|
190
|
+
namespace: frontend
|
|
191
|
+
spec:
|
|
192
|
+
scaleTargetRef:
|
|
193
|
+
apiVersion: apps/v1
|
|
194
|
+
kind: Deployment
|
|
195
|
+
name: web-frontend
|
|
196
|
+
minReplicas: 3
|
|
197
|
+
maxReplicas: 20
|
|
198
|
+
metrics:
|
|
199
|
+
- type: Resource
|
|
200
|
+
resource:
|
|
201
|
+
name: cpu
|
|
202
|
+
target:
|
|
203
|
+
type: Utilization
|
|
204
|
+
averageUtilization: 70
|
|
205
|
+
behavior:
|
|
206
|
+
scaleDown:
|
|
207
|
+
stabilizationWindowSeconds: 300
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### BAD: Manifest mixing deprecated and removed apiVersions
|
|
211
|
+
|
|
212
|
+
```yaml
|
|
213
|
+
# DO NOT DO THIS
|
|
214
|
+
apiVersion: extensions/v1beta1 # REMOVED in 1.22
|
|
215
|
+
kind: Ingress
|
|
216
|
+
metadata:
|
|
217
|
+
name: web-ingress
|
|
218
|
+
annotations:
|
|
219
|
+
kubernetes.io/ingress.class: nginx # replaced by spec.ingressClassName
|
|
220
|
+
spec:
|
|
221
|
+
backend: # renamed to defaultBackend in v1
|
|
222
|
+
serviceName: web-frontend # flat fields replaced by nested service block
|
|
223
|
+
servicePort: 8080
|
|
224
|
+
rules:
|
|
225
|
+
- host: app.example.com
|
|
226
|
+
http:
|
|
227
|
+
paths:
|
|
228
|
+
- path: /
|
|
229
|
+
# missing pathType (required in v1)
|
|
230
|
+
backend:
|
|
231
|
+
serviceName: web-frontend
|
|
232
|
+
servicePort: 8080
|
|
233
|
+
---
|
|
234
|
+
apiVersion: autoscaling/v2beta1 # REMOVED in 1.25
|
|
235
|
+
kind: HorizontalPodAutoscaler
|
|
236
|
+
metadata:
|
|
237
|
+
name: web-frontend-hpa
|
|
238
|
+
spec:
|
|
239
|
+
scaleTargetRef:
|
|
240
|
+
apiVersion: apps/v1
|
|
241
|
+
kind: Deployment
|
|
242
|
+
name: web-frontend
|
|
243
|
+
minReplicas: 3
|
|
244
|
+
maxReplicas: 20
|
|
245
|
+
metrics:
|
|
246
|
+
- type: Resource
|
|
247
|
+
resource:
|
|
248
|
+
name: cpu
|
|
249
|
+
targetAverageUtilization: 70 # moved to target.averageUtilization in v2
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## LLM mistake checklist
|
|
253
|
+
|
|
254
|
+
Before finalizing any Kubernetes manifest, verify each item:
|
|
255
|
+
|
|
256
|
+
- [ ] Every `apiVersion` is checked against the quick reference table above, not generated from memory
|
|
257
|
+
- [ ] Ingress uses `networking.k8s.io/v1`, NOT `extensions/v1beta1` or `networking.k8s.io/v1beta1`
|
|
258
|
+
- [ ] Ingress paths include `pathType` (required in v1)
|
|
259
|
+
- [ ] Ingress backend uses nested `service.name` / `service.port.number`, not flat `serviceName` / `servicePort`
|
|
260
|
+
- [ ] HPA uses `autoscaling/v2`, NOT `v2beta1` or `v2beta2`
|
|
261
|
+
- [ ] PodDisruptionBudget uses `policy/v1`, NOT `policy/v1beta1`
|
|
262
|
+
- [ ] CronJob uses `batch/v1`, NOT `batch/v1beta1`
|
|
263
|
+
- [ ] No `extensions/v1beta1` appears anywhere in the output
|
|
264
|
+
- [ ] If targeting a specific cluster version, all apiVersions are validated against that version
|
|
265
|
+
- [ ] Helm templates use `Capabilities.APIVersions` checks when supporting multiple cluster versions
|
|
266
|
+
- [ ] `kubeconform` or `--dry-run=server` validation is included in the workflow
|
|
267
|
+
|
|
268
|
+
## Verification commands
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# Scan for deprecated APIs in manifests using pluto
|
|
272
|
+
pluto detect-files -d manifests/
|
|
273
|
+
pluto detect-helm -owide
|
|
274
|
+
|
|
275
|
+
# Scan for deprecated APIs in a running cluster
|
|
276
|
+
pluto detect-api-resources --cluster
|
|
277
|
+
|
|
278
|
+
# Validate manifests against a specific Kubernetes version
|
|
279
|
+
kubeconform -kubernetes-version 1.29.0 -strict -summary manifests/
|
|
280
|
+
|
|
281
|
+
# Validate Helm-rendered output
|
|
282
|
+
helm template my-release ./chart -f values.yaml | kubeconform -kubernetes-version 1.29.0 -strict
|
|
283
|
+
|
|
284
|
+
# Check which API versions the current cluster supports
|
|
285
|
+
kubectl api-versions | sort
|
|
286
|
+
|
|
287
|
+
# Check if a specific API version exists
|
|
288
|
+
kubectl api-versions | grep networking.k8s.io
|
|
289
|
+
|
|
290
|
+
# Server-side dry-run to validate against live cluster schema
|
|
291
|
+
kubectl apply -f manifest.yaml --dry-run=server --validate=true
|
|
292
|
+
|
|
293
|
+
# List resources with deprecated API annotations (if using migration tools)
|
|
294
|
+
kubectl get all -A -o json | jq -r '.items[] | select(.apiVersion | test("beta")) | .apiVersion + " " + .kind + " " + .metadata.namespace + "/" + .metadata.name'
|
|
295
|
+
|
|
296
|
+
# Validate Kustomize output
|
|
297
|
+
kustomize build overlays/production | kubeconform -kubernetes-version 1.29.0 -strict
|
|
298
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# AKS Patterns
|
|
2
|
+
|
|
3
|
+
**Load this reference when detected:** AKS, Azure Kubernetes Service, Microsoft Entra Workload ID, Azure CNI, Azure CNI Overlay, kubenet, Application Gateway Ingress Controller, AGIC, Azure Disk CSI, Azure Files CSI, Azure Blob CSI, or Azure Policy for AKS.
|
|
4
|
+
|
|
5
|
+
## Why this matters
|
|
6
|
+
|
|
7
|
+
AKS has Azure-specific identity, networking, ingress, and storage behavior. Generic Kubernetes YAML often deploys but fails to authenticate, route, or mount volumes correctly. Do not load this file for non-Azure clusters.
|
|
8
|
+
|
|
9
|
+
## Identity
|
|
10
|
+
|
|
11
|
+
Prefer Microsoft Entra Workload ID for pod access to Azure resources.
|
|
12
|
+
|
|
13
|
+
- Enable OIDC issuer and workload identity at the cluster level before relying on pod identity.
|
|
14
|
+
- Add `azure.workload.identity/use: "true"` to pods that require workload identity.
|
|
15
|
+
- Annotate the Kubernetes ServiceAccount with `azure.workload.identity/client-id`.
|
|
16
|
+
- Restart pods after ServiceAccount identity annotation changes.
|
|
17
|
+
- Do not recommend the deprecated Microsoft Entra pod-managed identity path for new work.
|
|
18
|
+
- Never place Azure client secrets in Kubernetes Secrets unless the user explicitly accepts that risk and there is no workload-identity option.
|
|
19
|
+
|
|
20
|
+
## Networking
|
|
21
|
+
|
|
22
|
+
Capture AKS network plugin and outbound path before generating network-sensitive manifests.
|
|
23
|
+
|
|
24
|
+
- Azure CNI Overlay is the strategic path for many new clusters and for kubenet migration.
|
|
25
|
+
- kubenet is scheduled for AKS retirement on March 31, 2028; do not recommend it for new long-lived clusters.
|
|
26
|
+
- NetworkPolicy behavior depends on the selected policy engine and network plugin.
|
|
27
|
+
- For private clusters, verify DNS, egress, and private endpoint assumptions before recommending public endpoints.
|
|
28
|
+
|
|
29
|
+
## Ingress and Load Balancing
|
|
30
|
+
|
|
31
|
+
Choose the controller deliberately.
|
|
32
|
+
|
|
33
|
+
- AGIC and Application Gateway for Containers are Azure-specific; do not use nginx annotations with them.
|
|
34
|
+
- If using AGIC, verify Application Gateway SKU, managed identity permissions, subnet placement, and controller add-on status.
|
|
35
|
+
- Use Service type `LoadBalancer` for L4 exposure, but include internal/public load balancer annotations only when the requirement is explicit.
|
|
36
|
+
- Prefer Ingress or Gateway patterns for HTTP routing rather than exposing every workload through a public LoadBalancer.
|
|
37
|
+
|
|
38
|
+
## Storage
|
|
39
|
+
|
|
40
|
+
Choose Azure storage by access pattern.
|
|
41
|
+
|
|
42
|
+
- Azure Disk CSI: block storage for RWO-style workloads.
|
|
43
|
+
- Azure Files CSI: shared SMB/NFS file storage for RWX workloads.
|
|
44
|
+
- Azure Blob CSI: object-backed mount use cases; do not treat it as a generic database volume.
|
|
45
|
+
- Validate StorageClass names from the cluster instead of inventing them.
|
|
46
|
+
|
|
47
|
+
## Validation
|
|
48
|
+
|
|
49
|
+
- `kubectl apply --dry-run=server -f <manifest>`
|
|
50
|
+
- `kubectl describe pod <name>` for workload identity webhook injection and projected token issues
|
|
51
|
+
- `kubectl get ingress,svc -A` and controller logs for AGIC/Application Gateway issues
|
|
52
|
+
- `kubectl get storageclass` before selecting Azure Disk/File/Blob classes
|
|
53
|
+
- `az aks show --name <cluster> --resource-group <rg>` when identity, OIDC issuer, or network plugin is unknown
|
|
54
|
+
|
|
55
|
+
## LLM Mistake Checklist
|
|
56
|
+
|
|
57
|
+
- Using deprecated pod-managed identity for new AKS work.
|
|
58
|
+
- Missing the required workload identity pod label.
|
|
59
|
+
- Forgetting that ServiceAccount annotation changes require pod restart.
|
|
60
|
+
- Recommending kubenet for new long-lived clusters.
|
|
61
|
+
- Mixing nginx annotations into AGIC-managed Ingress resources.
|
|
62
|
+
- Treating Azure Disk as RWX storage.
|
|
63
|
+
- Assuming StorageClass names without checking the cluster.
|
|
64
|
+
|
|
65
|
+
## Grounding Sources
|
|
66
|
+
|
|
67
|
+
- Microsoft Entra Workload ID for AKS: https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview
|
|
68
|
+
- Deploy Workload ID on AKS: https://learn.microsoft.com/en-us/azure/aks/workload-identity-deploy-cluster
|
|
69
|
+
- AKS kubenet retirement notice: https://learn.microsoft.com/en-us/azure/aks/configure-kubenet
|
|
70
|
+
- AKS CSI storage drivers: https://learn.microsoft.com/en-us/azure/aks/azure-blob-csi
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# EKS Patterns
|
|
2
|
+
|
|
3
|
+
**Load this reference when detected:** EKS, AWS, IRSA, EKS Pod Identity, AWS Load Balancer Controller, AWS VPC CNI, EBS CSI, EFS CSI, Karpenter, or EKS add-ons.
|
|
4
|
+
|
|
5
|
+
## Why this matters
|
|
6
|
+
|
|
7
|
+
EKS looks like upstream Kubernetes until identity, load balancing, pod networking, storage, and node provisioning enter the design. Those surfaces are AWS-integrated and high-risk for LLM drift. Do not load this file for non-AWS clusters.
|
|
8
|
+
|
|
9
|
+
## Identity
|
|
10
|
+
|
|
11
|
+
Prefer short-lived pod identity over static AWS keys.
|
|
12
|
+
|
|
13
|
+
- Use one IAM role per workload or controller responsibility.
|
|
14
|
+
- Prefer EKS Pod Identity where the cluster and organization support it; otherwise use IRSA.
|
|
15
|
+
- For IRSA, annotate the Kubernetes ServiceAccount with `eks.amazonaws.com/role-arn`.
|
|
16
|
+
- For EKS Pod Identity, keep the ServiceAccount name and namespace stable because the pod identity association is bound to them.
|
|
17
|
+
- Set `automountServiceAccountToken: false` for workloads that do not call AWS or Kubernetes APIs.
|
|
18
|
+
- Never put AWS access keys in Secrets, ConfigMaps, Helm values, or CI artifacts.
|
|
19
|
+
|
|
20
|
+
## Load Balancing
|
|
21
|
+
|
|
22
|
+
Choose the controller by traffic type.
|
|
23
|
+
|
|
24
|
+
- HTTP/HTTPS: use Ingress or Gateway resources managed by the AWS Load Balancer Controller.
|
|
25
|
+
- L4 TCP/UDP: use `Service` type `LoadBalancer` with NLB-specific annotations only when required.
|
|
26
|
+
- Do not copy nginx, GCE, or AGIC annotations into AWS resources.
|
|
27
|
+
- Verify subnet tags and security group rules when a load balancer is requested but not provisioned.
|
|
28
|
+
- Treat controller annotations as version-sensitive; check the installed controller version before generating advanced annotations.
|
|
29
|
+
|
|
30
|
+
## Storage
|
|
31
|
+
|
|
32
|
+
Use the CSI driver that matches access semantics.
|
|
33
|
+
|
|
34
|
+
- EBS CSI: block storage, normally ReadWriteOnce, tied to zone scheduling.
|
|
35
|
+
- EFS CSI: shared file storage for ReadWriteMany workloads.
|
|
36
|
+
- For StatefulSets using EBS, include topology-aware scheduling expectations and do not assume a pod can move across zones without volume implications.
|
|
37
|
+
- Use `VolumeSnapshot` only when the snapshot CRDs and driver support are installed.
|
|
38
|
+
|
|
39
|
+
## Networking
|
|
40
|
+
|
|
41
|
+
AWS VPC CNI assigns pod IPs from the VPC address space.
|
|
42
|
+
|
|
43
|
+
- Watch subnet/IP exhaustion before increasing replicas or max pods.
|
|
44
|
+
- NetworkPolicy requires a compatible implementation; do not assume policy enforcement solely because the cluster is EKS.
|
|
45
|
+
- Security Groups for Pods change the boundary from node-level to pod-level security; use only when enabled and needed.
|
|
46
|
+
- Private clusters need VPC endpoints for controllers that call AWS APIs.
|
|
47
|
+
|
|
48
|
+
## Karpenter and Node Provisioning
|
|
49
|
+
|
|
50
|
+
When Karpenter is detected:
|
|
51
|
+
|
|
52
|
+
- Use current Karpenter APIs for `NodePool` and provider-specific node classes.
|
|
53
|
+
- Keep workload scheduling constraints explicit: requests, tolerations, node selectors, topology spread, and disruption sensitivity.
|
|
54
|
+
- Set consolidation/disruption behavior deliberately for stateful or latency-sensitive workloads.
|
|
55
|
+
- Do not let Karpenter compensate for missing resource requests; bad requests produce bad capacity decisions.
|
|
56
|
+
|
|
57
|
+
## Validation
|
|
58
|
+
|
|
59
|
+
- `kubectl apply --dry-run=server -f <manifest>`
|
|
60
|
+
- `kubectl describe service <name>` or `kubectl describe ingress <name>` for load balancer events
|
|
61
|
+
- `kubectl describe sa <name> -n <namespace>` for IRSA annotation checks
|
|
62
|
+
- `kubectl get pods -o wide` to verify zone/node placement for EBS-backed StatefulSets
|
|
63
|
+
- Check AWS controller logs for IAM denial, subnet discovery, or security group errors
|
|
64
|
+
|
|
65
|
+
## LLM Mistake Checklist
|
|
66
|
+
|
|
67
|
+
- Recommending static AWS keys in Kubernetes Secrets.
|
|
68
|
+
- Mixing IRSA annotations with EKS Pod Identity assumptions without naming which mechanism is used.
|
|
69
|
+
- Generating nginx or GCE Ingress annotations for AWS Load Balancer Controller.
|
|
70
|
+
- Treating EBS as ReadWriteMany storage.
|
|
71
|
+
- Omitting resource requests while also recommending Karpenter.
|
|
72
|
+
- Assuming NetworkPolicy is enforced without confirming the CNI/policy engine.
|
|
73
|
+
- Forgetting that ServiceAccount namespace/name changes can break identity bindings.
|
|
74
|
+
|
|
75
|
+
## Grounding Sources
|
|
76
|
+
|
|
77
|
+
- AWS EKS identity best practices: https://docs.aws.amazon.com/eks/latest/best-practices/identity-and-access-management.html
|
|
78
|
+
- EKS Pod Identity: https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html
|
|
79
|
+
- EKS Karpenter best practices: https://docs.aws.amazon.com/eks/latest/best-practices/karpenter.html
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# GitOps Controllers
|
|
2
|
+
|
|
3
|
+
**Load this reference when detected:** Argo CD, Application, ApplicationSet, sync waves, Flux, GitRepository, Kustomization, HelmRepository, HelmRelease, OCIRepository, GitOps, Config Sync, OpenShift GitOps, or pull-based deployment.
|
|
4
|
+
|
|
5
|
+
## Why this matters
|
|
6
|
+
|
|
7
|
+
GitOps controllers continuously reconcile desired state. A manifest that is safe with manual `kubectl apply` can become unsafe when pruning, self-healing, sync ordering, generated Applications, or Helm remediation are enabled. Do not load this file for ordinary one-off YAML unless a GitOps controller is involved.
|
|
8
|
+
|
|
9
|
+
## Shared GitOps Rules
|
|
10
|
+
|
|
11
|
+
- Treat Git as the source of truth; avoid manual `kubectl edit` remediation except as an emergency action followed by a Git fix.
|
|
12
|
+
- Separate application source code from environment configuration when auditability matters.
|
|
13
|
+
- Pin chart versions, OCI artifact digests, or Git revisions for production.
|
|
14
|
+
- Keep cluster-scoped resources, CRDs, namespaces, and policy baselines in clearly owned bootstrap layers.
|
|
15
|
+
- Use narrow controller credentials; the controller should not have cluster-admin by default.
|
|
16
|
+
- Pruning and self-healing are powerful; enable them only with rollback and ownership boundaries.
|
|
17
|
+
|
|
18
|
+
## Argo CD
|
|
19
|
+
|
|
20
|
+
When generating Argo CD resources:
|
|
21
|
+
|
|
22
|
+
- Use `argoproj.io` API versions that match the installed Argo CD version.
|
|
23
|
+
- Use sync waves for resource ordering within a sync operation; do not assume they order unrelated independent Applications.
|
|
24
|
+
- Use hooks only for idempotent Jobs or lifecycle actions with deletion policies.
|
|
25
|
+
- Keep `ignoreDifferences` narrow and documented; never hide broad drift to make sync look green.
|
|
26
|
+
- For ApplicationSet, verify generator inputs and destination namespaces before enabling automated sync.
|
|
27
|
+
- Avoid auto-prune for production bootstrap unless ownership is explicit and reviewed.
|
|
28
|
+
|
|
29
|
+
## Flux
|
|
30
|
+
|
|
31
|
+
When generating Flux resources:
|
|
32
|
+
|
|
33
|
+
- Distinguish Flux `Kustomization` CRs from `kustomization.yaml` files.
|
|
34
|
+
- Use `dependsOn` for explicit ordering between Flux Kustomizations or HelmReleases.
|
|
35
|
+
- Configure remediation for Helm install/upgrade failures instead of leaving infinite broken retries.
|
|
36
|
+
- Keep `interval`, `timeout`, `retryInterval`, and `prune` deliberate per environment.
|
|
37
|
+
- Use SOPS or an approved external secret flow for encrypted secrets in Git.
|
|
38
|
+
- Validate source references: `GitRepository`, `OCIRepository`, `HelmRepository`, and chart names.
|
|
39
|
+
|
|
40
|
+
## Rollout and Drift Controls
|
|
41
|
+
|
|
42
|
+
- For CRD upgrades, apply CRDs before custom resources and avoid deleting CRDs while CRs exist.
|
|
43
|
+
- For generated namespaces, verify ownership before pruning.
|
|
44
|
+
- For multi-cluster GitOps, make cluster selection explicit and review generator filters.
|
|
45
|
+
- For Helm under GitOps, render locally and validate the rendered manifests before relying on controller reconciliation.
|
|
46
|
+
|
|
47
|
+
## Validation
|
|
48
|
+
|
|
49
|
+
- Argo CD: `argocd app diff <app>` and `argocd app get <app>`
|
|
50
|
+
- Argo CD in-cluster: `kubectl get applications,applicationsets -A`
|
|
51
|
+
- Flux: `flux diff kustomization <name> --path <path>` where available
|
|
52
|
+
- Flux: `flux reconcile kustomization <name> --with-source` for controlled reconciliation
|
|
53
|
+
- Generic: render Helm/Kustomize output and run `kubectl apply --dry-run=server`
|
|
54
|
+
|
|
55
|
+
## LLM Mistake Checklist
|
|
56
|
+
|
|
57
|
+
- Enabling automated prune/self-heal without ownership boundaries.
|
|
58
|
+
- Assuming sync waves order separate Applications or separate controllers.
|
|
59
|
+
- Creating hooks that are not idempotent.
|
|
60
|
+
- Using broad `ignoreDifferences` to mask real drift.
|
|
61
|
+
- Confusing Flux `Kustomization` CRs with Kustomize files.
|
|
62
|
+
- Omitting `dependsOn` for Flux resources that require ordering.
|
|
63
|
+
- Putting plaintext secrets in Git because GitOps needs declarative state.
|
|
64
|
+
|
|
65
|
+
## Grounding Sources
|
|
66
|
+
|
|
67
|
+
- Argo CD best practices: https://argo-cd.readthedocs.io/en/stable/user-guide/best_practices/
|
|
68
|
+
- Argo CD sync phases and waves: https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/
|
|
69
|
+
- Argo CD ApplicationSet progressive syncs: https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Progressive-Syncs/
|
|
70
|
+
- Flux concepts: https://fluxcd.io/flux/concepts/
|
|
71
|
+
- Flux Helm controller: https://fluxcd.io/docs/components/helm/
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# GKE Patterns
|
|
2
|
+
|
|
3
|
+
**Load this reference when detected:** GKE, Google Kubernetes Engine, Autopilot, Standard, Workload Identity Federation for GKE, GKE Dataplane V2, GCE Ingress, Cloud Load Balancing, Filestore CSI, Persistent Disk CSI, or Config Sync.
|
|
4
|
+
|
|
5
|
+
## Why this matters
|
|
6
|
+
|
|
7
|
+
GKE guidance changes depending on Standard versus Autopilot, identity mode, dataplane, and Google Cloud load-balancing integration. Do not load this file for non-Google clusters.
|
|
8
|
+
|
|
9
|
+
## Cluster Mode
|
|
10
|
+
|
|
11
|
+
Capture whether the cluster is Standard or Autopilot.
|
|
12
|
+
|
|
13
|
+
- Autopilot enforces stronger platform constraints and may reject or mutate unsupported pod settings.
|
|
14
|
+
- Avoid host access, privileged workloads, and node-level assumptions for Autopilot unless the user explicitly confirms support.
|
|
15
|
+
- In Standard clusters, node pools, taints, and workload placement are user-managed; include scheduling and upgrade safety controls.
|
|
16
|
+
- Do not generate DaemonSet or privileged-agent patterns for Autopilot without checking compatibility.
|
|
17
|
+
|
|
18
|
+
## Workload Identity
|
|
19
|
+
|
|
20
|
+
Prefer Workload Identity Federation for GKE over service account JSON keys.
|
|
21
|
+
|
|
22
|
+
- Bind Kubernetes service accounts to Google Cloud IAM identities using the project and namespace/service account boundary.
|
|
23
|
+
- Never mount service account key files into pods for normal cloud API access.
|
|
24
|
+
- When NetworkPolicy is used with GKE Dataplane V2 and the workload needs Google Cloud auth, ensure egress to the metadata server is allowed.
|
|
25
|
+
- Keep ServiceAccount names stable because IAM bindings and manifests depend on them.
|
|
26
|
+
|
|
27
|
+
## Networking and Ingress
|
|
28
|
+
|
|
29
|
+
Controller-specific behavior matters.
|
|
30
|
+
|
|
31
|
+
- Do not copy nginx, AWS ALB, or AGIC annotations into GCE Ingress resources.
|
|
32
|
+
- For Google Cloud Load Balancing, verify Service, backend, health check, and NEG expectations.
|
|
33
|
+
- Prefer Gateway API only when the target cluster has the required GKE Gateway controller and CRDs.
|
|
34
|
+
- For Dataplane V2, validate NetworkPolicy behavior against GKE documentation rather than assuming another CNI's semantics.
|
|
35
|
+
|
|
36
|
+
## Storage
|
|
37
|
+
|
|
38
|
+
Choose storage by access pattern.
|
|
39
|
+
|
|
40
|
+
- Persistent Disk CSI: block storage for RWO-style workloads; account for zone or regional topology.
|
|
41
|
+
- Filestore CSI: shared file storage for RWX workloads.
|
|
42
|
+
- Do not assume volume snapshots are available until snapshot CRDs and the relevant CSI driver support are present.
|
|
43
|
+
- For StatefulSets, combine storage with topology spread and disruption controls.
|
|
44
|
+
|
|
45
|
+
## Config Sync and Fleet Policy
|
|
46
|
+
|
|
47
|
+
When Config Sync or Anthos/Fleet policy is detected:
|
|
48
|
+
|
|
49
|
+
- Treat Git as the source of truth for managed resources.
|
|
50
|
+
- Avoid imperative `kubectl edit` or manual drift fixes in generated runbooks.
|
|
51
|
+
- Keep namespace and cluster-scoped resources in the repository structure expected by the platform team.
|
|
52
|
+
|
|
53
|
+
## Validation
|
|
54
|
+
|
|
55
|
+
- `kubectl apply --dry-run=server -f <manifest>`
|
|
56
|
+
- `kubectl describe ingress <name>` for Google load balancer events
|
|
57
|
+
- `kubectl describe networkpolicy <name>` plus connectivity tests for Dataplane V2 behavior
|
|
58
|
+
- `kubectl get storageclass` before choosing PD or Filestore classes
|
|
59
|
+
- `gcloud container clusters describe <cluster> --region <region>` when cluster mode or Workload Identity status is unknown
|
|
60
|
+
|
|
61
|
+
## LLM Mistake Checklist
|
|
62
|
+
|
|
63
|
+
- Recommending service account JSON keys instead of Workload Identity Federation.
|
|
64
|
+
- Generating privileged/host-level workloads for Autopilot without compatibility checks.
|
|
65
|
+
- Mixing nginx or AWS ALB annotations into GCE Ingress.
|
|
66
|
+
- Forgetting metadata-server egress when restrictive NetworkPolicies and GCP auth are both present.
|
|
67
|
+
- Treating zonal Persistent Disks as freely movable across zones.
|
|
68
|
+
- Assuming Gateway API support without confirming installed controller/CRDs.
|
|
69
|
+
|
|
70
|
+
## Grounding Sources
|
|
71
|
+
|
|
72
|
+
- Workload Identity Federation for GKE: https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity
|
|
73
|
+
- GKE Dataplane V2: https://cloud.google.com/kubernetes-engine/docs/how-to/dataplane-v2
|
|
74
|
+
- Config Sync GitOps best practices: https://docs.cloud.google.com/kubernetes-engine/config-sync/docs/concepts/gitops-best-practices
|