@ruaruababa/vibe-kit 1.0.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/CATALOG.md +317 -0
- package/README.md +121 -0
- package/aliases.json +65 -0
- package/bin/vibe.js +2 -0
- package/bundles.json +265 -0
- package/catalog.json +1560 -0
- package/dist/antigravity-skills/bin/cli.js +438 -0
- package/dist/antigravity-skills/lib/skill-utils.js +158 -0
- package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
- package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
- package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
- package/dist/bin/vibe.js +2 -0
- package/dist/dist/src/cli/index.js +26 -0
- package/dist/lib/skill-utils.js +158 -0
- package/dist/scripts/build-catalog.js +50 -0
- package/dist/scripts/normalize-frontmatter.js +144 -0
- package/dist/scripts/validate-skills.js +56 -0
- package/dist/src/cli/index.js +146 -0
- package/dist/src/types/index.js +13 -0
- package/dist/src/utils/fs.js +1 -0
- package/package.json +43 -0
- package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
- package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
- package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
- package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
- package/skills/agent-orchestrator/SKILL.md +24 -0
- package/skills/ai-engineer/SKILL.md +171 -0
- package/skills/airflow-dag-patterns/SKILL.md +41 -0
- package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
- package/skills/angular-migration/SKILL.md +428 -0
- package/skills/anti-reversing-techniques/SKILL.md +42 -0
- package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
- package/skills/api-design-principles/SKILL.md +37 -0
- package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/skills/api-documenter/SKILL.md +184 -0
- package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
- package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
- package/skills/application-performance-performance-optimization/SKILL.md +154 -0
- package/skills/architect-review/SKILL.md +174 -0
- package/skills/architecture-decision-records/SKILL.md +441 -0
- package/skills/architecture-patterns/SKILL.md +37 -0
- package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
- package/skills/arm-cortex-expert/SKILL.md +306 -0
- package/skills/async-python-patterns/SKILL.md +39 -0
- package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
- package/skills/attack-tree-construction/SKILL.md +38 -0
- package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
- package/skills/auth-implementation-patterns/SKILL.md +39 -0
- package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
- package/skills/backend-architect/SKILL.md +333 -0
- package/skills/backend-development-feature-development/SKILL.md +180 -0
- package/skills/backend-security-coder/SKILL.md +156 -0
- package/skills/backtesting-frameworks/SKILL.md +39 -0
- package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
- package/skills/bash-defensive-patterns/SKILL.md +43 -0
- package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
- package/skills/bash-pro/SKILL.md +310 -0
- package/skills/bats-testing-patterns/SKILL.md +34 -0
- package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
- package/skills/bazel-build-optimization/SKILL.md +397 -0
- package/skills/billing-automation/SKILL.md +42 -0
- package/skills/billing-automation/resources/implementation-playbook.md +544 -0
- package/skills/binary-analysis-patterns/SKILL.md +450 -0
- package/skills/blockchain-developer/SKILL.md +208 -0
- package/skills/business-analyst/SKILL.md +182 -0
- package/skills/c-pro/SKILL.md +56 -0
- package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
- package/skills/c4-code/SKILL.md +244 -0
- package/skills/c4-component/SKILL.md +153 -0
- package/skills/c4-container/SKILL.md +171 -0
- package/skills/c4-context/SKILL.md +150 -0
- package/skills/changelog-automation/SKILL.md +38 -0
- package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
- package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
- package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
- package/skills/clean-markdown/SKILL.md +23 -0
- package/skills/cloud-architect/SKILL.md +135 -0
- package/skills/code-documentation-code-explain/SKILL.md +46 -0
- package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
- package/skills/code-documentation-doc-generate/SKILL.md +48 -0
- package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/code-refactoring-context-restore/SKILL.md +179 -0
- package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
- package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
- package/skills/code-review-ai-ai-review/SKILL.md +450 -0
- package/skills/code-review-excellence/SKILL.md +40 -0
- package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
- package/skills/code-reviewer/SKILL.md +178 -0
- package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
- package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
- package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
- package/skills/competitive-landscape/SKILL.md +34 -0
- package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
- package/skills/comprehensive-review-full-review/SKILL.md +146 -0
- package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
- package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
- package/skills/conductor-implement/SKILL.md +388 -0
- package/skills/conductor-manage/SKILL.md +39 -0
- package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
- package/skills/conductor-new-track/SKILL.md +433 -0
- package/skills/conductor-revert/SKILL.md +372 -0
- package/skills/conductor-setup/SKILL.md +426 -0
- package/skills/conductor-status/SKILL.md +338 -0
- package/skills/conductor-validator/SKILL.md +62 -0
- package/skills/content-marketer/SKILL.md +170 -0
- package/skills/context-driven-development/SKILL.md +400 -0
- package/skills/context-management-context-restore/SKILL.md +179 -0
- package/skills/context-management-context-save/SKILL.md +177 -0
- package/skills/context-manager/SKILL.md +185 -0
- package/skills/cost-optimization/SKILL.md +286 -0
- package/skills/cpp-pro/SKILL.md +59 -0
- package/skills/cqrs-implementation/SKILL.md +35 -0
- package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
- package/skills/csharp-pro/SKILL.md +59 -0
- package/skills/customer-support/SKILL.md +170 -0
- package/skills/data-engineer/SKILL.md +224 -0
- package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
- package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
- package/skills/data-quality-frameworks/SKILL.md +40 -0
- package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
- package/skills/data-scientist/SKILL.md +199 -0
- package/skills/data-storytelling/SKILL.md +465 -0
- package/skills/database-admin/SKILL.md +165 -0
- package/skills/database-architect/SKILL.md +268 -0
- package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
- package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
- package/skills/database-migration/SKILL.md +436 -0
- package/skills/database-migrations-migration-observability/SKILL.md +420 -0
- package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
- package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
- package/skills/database-optimizer/SKILL.md +167 -0
- package/skills/dbt-transformation-patterns/SKILL.md +34 -0
- package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
- package/skills/debugger/SKILL.md +49 -0
- package/skills/debugging-strategies/SKILL.md +34 -0
- package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
- package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
- package/skills/defi-protocol-templates/SKILL.md +466 -0
- package/skills/dependency-management-deps-audit/SKILL.md +44 -0
- package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/dependency-upgrade/SKILL.md +421 -0
- package/skills/deployment-engineer/SKILL.md +170 -0
- package/skills/deployment-pipeline-design/SKILL.md +371 -0
- package/skills/deployment-validation-config-validate/SKILL.md +496 -0
- package/skills/devops-troubleshooter/SKILL.md +161 -0
- package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
- package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
- package/skills/distributed-tracing/SKILL.md +450 -0
- package/skills/django-pro/SKILL.md +180 -0
- package/skills/docs-architect/SKILL.md +98 -0
- package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
- package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/dotnet-architect/SKILL.md +197 -0
- package/skills/dotnet-backend-patterns/SKILL.md +37 -0
- package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
- package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
- package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
- package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
- package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
- package/skills/dummy-skill/SKILL.md +5 -0
- package/skills/dx-optimizer/SKILL.md +83 -0
- package/skills/e2e-testing-patterns/SKILL.md +41 -0
- package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
- package/skills/elixir-pro/SKILL.md +59 -0
- package/skills/embedding-strategies/SKILL.md +491 -0
- package/skills/employment-contract-templates/SKILL.md +39 -0
- package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
- package/skills/error-debugging-error-analysis/SKILL.md +47 -0
- package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-debugging-error-trace/SKILL.md +43 -0
- package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
- package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
- package/skills/error-detective/SKILL.md +53 -0
- package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
- package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
- package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
- package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
- package/skills/error-handling-patterns/SKILL.md +35 -0
- package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
- package/skills/event-sourcing-architect/SKILL.md +58 -0
- package/skills/event-store-design/SKILL.md +449 -0
- package/skills/fastapi-pro/SKILL.md +192 -0
- package/skills/fastapi-templates/SKILL.md +32 -0
- package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
- package/skills/final-test/SKILL.md +5 -0
- package/skills/firmware-analyst/SKILL.md +320 -0
- package/skills/flutter-expert/SKILL.md +200 -0
- package/skills/framework-migration-code-migrate/SKILL.md +48 -0
- package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
- package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
- package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
- package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
- package/skills/frontend-developer/SKILL.md +171 -0
- package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
- package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
- package/skills/frontend-security-coder/SKILL.md +170 -0
- package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
- package/skills/gdpr-data-handling/SKILL.md +33 -0
- package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
- package/skills/git-advanced-workflows/SKILL.md +412 -0
- package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
- package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
- package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
- package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
- package/skills/github-actions-templates/SKILL.md +345 -0
- package/skills/gitlab-ci-patterns/SKILL.md +283 -0
- package/skills/gitops-workflow/SKILL.md +303 -0
- package/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/skills/go-concurrency-patterns/SKILL.md +33 -0
- package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
- package/skills/godot-gdscript-patterns/SKILL.md +33 -0
- package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
- package/skills/golang-pro/SKILL.md +179 -0
- package/skills/grafana-dashboards/SKILL.md +381 -0
- package/skills/graphql-architect/SKILL.md +182 -0
- package/skills/haskell-pro/SKILL.md +56 -0
- package/skills/helm-chart-scaffolding/SKILL.md +34 -0
- package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
- package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/skills/hr-pro/SKILL.md +126 -0
- package/skills/hybrid-cloud-architect/SKILL.md +168 -0
- package/skills/hybrid-cloud-networking/SKILL.md +238 -0
- package/skills/hybrid-search-implementation/SKILL.md +32 -0
- package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
- package/skills/incident-responder/SKILL.md +213 -0
- package/skills/incident-response-incident-response/SKILL.md +168 -0
- package/skills/incident-response-smart-fix/SKILL.md +29 -0
- package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
- package/skills/incident-runbook-templates/SKILL.md +395 -0
- package/skills/ios-developer/SKILL.md +219 -0
- package/skills/istio-traffic-management/SKILL.md +337 -0
- package/skills/java-pro/SKILL.md +177 -0
- package/skills/javascript-pro/SKILL.md +57 -0
- package/skills/javascript-testing-patterns/SKILL.md +35 -0
- package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
- package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
- package/skills/julia-pro/SKILL.md +209 -0
- package/skills/k8s-manifest-generator/SKILL.md +35 -0
- package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
- package/skills/k8s-security-policies/SKILL.md +346 -0
- package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/skills/kpi-dashboard-design/SKILL.md +440 -0
- package/skills/kubernetes-architect/SKILL.md +170 -0
- package/skills/langchain-architecture/SKILL.md +350 -0
- package/skills/legacy-modernizer/SKILL.md +53 -0
- package/skills/legal-advisor/SKILL.md +70 -0
- package/skills/linkerd-patterns/SKILL.md +321 -0
- package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
- package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
- package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
- package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
- package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
- package/skills/llm-evaluation/SKILL.md +483 -0
- package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
- package/skills/malware-analyst/SKILL.md +247 -0
- package/skills/market-sizing-analysis/SKILL.md +425 -0
- package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
- package/skills/market-sizing-analysis/references/data-sources.md +360 -0
- package/skills/memory-forensics/SKILL.md +491 -0
- package/skills/memory-safety-patterns/SKILL.md +33 -0
- package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
- package/skills/mermaid-expert/SKILL.md +59 -0
- package/skills/microservices-patterns/SKILL.md +35 -0
- package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
- package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
- package/skills/ml-engineer/SKILL.md +168 -0
- package/skills/ml-pipeline-workflow/SKILL.md +257 -0
- package/skills/mlops-engineer/SKILL.md +219 -0
- package/skills/mobile-developer/SKILL.md +205 -0
- package/skills/mobile-security-coder/SKILL.md +184 -0
- package/skills/modern-javascript-patterns/SKILL.md +35 -0
- package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
- package/skills/monorepo-architect/SKILL.md +61 -0
- package/skills/monorepo-management/SKILL.md +35 -0
- package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
- package/skills/mtls-configuration/SKILL.md +359 -0
- package/skills/multi-cloud-architecture/SKILL.md +189 -0
- package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
- package/skills/network-engineer/SKILL.md +169 -0
- package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
- package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
- package/skills/nft-standards/SKILL.md +395 -0
- package/skills/node-expert/SKILL.md +23 -0
- package/skills/nodejs-backend-patterns/SKILL.md +35 -0
- package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
- package/skills/nx-workspace-patterns/SKILL.md +464 -0
- package/skills/observability-engineer/SKILL.md +237 -0
- package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
- package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
- package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
- package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
- package/skills/on-call-handoff-patterns/SKILL.md +453 -0
- package/skills/openapi-spec-generation/SKILL.md +33 -0
- package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
- package/skills/payment-integration/SKILL.md +77 -0
- package/skills/paypal-integration/SKILL.md +479 -0
- package/skills/pci-compliance/SKILL.md +478 -0
- package/skills/performance-engineer/SKILL.md +180 -0
- package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
- package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
- package/skills/php-pro/SKILL.md +63 -0
- package/skills/posix-shell-pro/SKILL.md +304 -0
- package/skills/postgresql/SKILL.md +230 -0
- package/skills/postmortem-writing/SKILL.md +386 -0
- package/skills/projection-patterns/SKILL.md +33 -0
- package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
- package/skills/prometheus-configuration/SKILL.md +404 -0
- package/skills/prompt-engineer/SKILL.md +272 -0
- package/skills/prompt-engineering-patterns/SKILL.md +213 -0
- package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
- package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
- package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
- package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
- package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
- package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
- package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
- package/skills/protocol-reverse-engineering/SKILL.md +29 -0
- package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
- package/skills/python-development-python-scaffold/SKILL.md +331 -0
- package/skills/python-packaging/SKILL.md +36 -0
- package/skills/python-packaging/resources/implementation-playbook.md +869 -0
- package/skills/python-performance-optimization/SKILL.md +36 -0
- package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
- package/skills/python-pro/SKILL.md +158 -0
- package/skills/python-testing-patterns/SKILL.md +37 -0
- package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
- package/skills/quant-analyst/SKILL.md +53 -0
- package/skills/rag-implementation/SKILL.md +421 -0
- package/skills/react-modernization/SKILL.md +34 -0
- package/skills/react-modernization/resources/implementation-playbook.md +512 -0
- package/skills/react-native-architecture/SKILL.md +33 -0
- package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
- package/skills/react-state-management/SKILL.md +441 -0
- package/skills/reference-builder/SKILL.md +188 -0
- package/skills/reverse-engineer/SKILL.md +173 -0
- package/skills/risk-manager/SKILL.md +61 -0
- package/skills/risk-metrics-calculation/SKILL.md +33 -0
- package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
- package/skills/ruby-pro/SKILL.md +56 -0
- package/skills/rust-async-patterns/SKILL.md +33 -0
- package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
- package/skills/rust-pro/SKILL.md +178 -0
- package/skills/saga-orchestration/SKILL.md +496 -0
- package/skills/sales-automator/SKILL.md +55 -0
- package/skills/sast-configuration/SKILL.md +212 -0
- package/skills/scala-pro/SKILL.md +82 -0
- package/skills/screen-reader-testing/SKILL.md +33 -0
- package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
- package/skills/search-specialist/SKILL.md +80 -0
- package/skills/secrets-management/SKILL.md +364 -0
- package/skills/security-auditor/SKILL.md +169 -0
- package/skills/security-compliance-compliance-check/SKILL.md +55 -0
- package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
- package/skills/security-requirement-extraction/SKILL.md +33 -0
- package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
- package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
- package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
- package/skills/security-scanning-security-hardening/SKILL.md +147 -0
- package/skills/security-scanning-security-sast/SKILL.md +495 -0
- package/skills/seo-authority-builder/SKILL.md +136 -0
- package/skills/seo-cannibalization-detector/SKILL.md +123 -0
- package/skills/seo-content-auditor/SKILL.md +83 -0
- package/skills/seo-content-planner/SKILL.md +108 -0
- package/skills/seo-content-refresher/SKILL.md +118 -0
- package/skills/seo-content-writer/SKILL.md +96 -0
- package/skills/seo-keyword-strategist/SKILL.md +95 -0
- package/skills/seo-meta-optimizer/SKILL.md +92 -0
- package/skills/seo-snippet-hunter/SKILL.md +114 -0
- package/skills/seo-structure-architect/SKILL.md +108 -0
- package/skills/service-mesh-expert/SKILL.md +58 -0
- package/skills/service-mesh-observability/SKILL.md +395 -0
- package/skills/shellcheck-configuration/SKILL.md +466 -0
- package/skills/similarity-search-patterns/SKILL.md +33 -0
- package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
- package/skills/slo-implementation/SKILL.md +341 -0
- package/skills/solidity-security/SKILL.md +34 -0
- package/skills/solidity-security/resources/implementation-playbook.md +524 -0
- package/skills/spark-optimization/SKILL.md +427 -0
- package/skills/sql-optimization-patterns/SKILL.md +35 -0
- package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
- package/skills/sql-pro/SKILL.md +173 -0
- package/skills/startup-analyst/SKILL.md +328 -0
- package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
- package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
- package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
- package/skills/startup-financial-modeling/SKILL.md +467 -0
- package/skills/startup-metrics-framework/SKILL.md +34 -0
- package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
- package/skills/stride-analysis-patterns/SKILL.md +33 -0
- package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
- package/skills/stripe-integration/SKILL.md +454 -0
- package/skills/systems-programming-rust-project/SKILL.md +440 -0
- package/skills/tailwind-design-system/SKILL.md +33 -0
- package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
- package/skills/tdd-orchestrator/SKILL.md +205 -0
- package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
- package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
- package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
- package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
- package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
- package/skills/team-collaboration-issue/SKILL.md +37 -0
- package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
- package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
- package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
- package/skills/team-composition-analysis/SKILL.md +413 -0
- package/skills/temporal-python-pro/SKILL.md +370 -0
- package/skills/temporal-python-testing/SKILL.md +170 -0
- package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
- package/skills/temporal-python-testing/resources/local-setup.md +553 -0
- package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
- package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
- package/skills/terraform-module-library/SKILL.md +261 -0
- package/skills/terraform-module-library/references/aws-modules.md +63 -0
- package/skills/terraform-specialist/SKILL.md +166 -0
- package/skills/test-automator/SKILL.md +224 -0
- package/skills/threat-mitigation-mapping/SKILL.md +33 -0
- package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
- package/skills/threat-modeling-expert/SKILL.md +60 -0
- package/skills/track-management/SKILL.md +38 -0
- package/skills/track-management/resources/implementation-playbook.md +591 -0
- package/skills/turborepo-caching/SKILL.md +419 -0
- package/skills/tutorial-engineer/SKILL.md +139 -0
- package/skills/typescript-advanced-types/SKILL.md +35 -0
- package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
- package/skills/typescript-pro/SKILL.md +55 -0
- package/skills/ui-minimal/SKILL.md +23 -0
- package/skills/ui-ux-designer/SKILL.md +209 -0
- package/skills/ui-visual-validator/SKILL.md +214 -0
- package/skills/unit-testing-test-generate/SKILL.md +319 -0
- package/skills/unity-developer/SKILL.md +230 -0
- package/skills/unity-ecs-patterns/SKILL.md +33 -0
- package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
- package/skills/uv-package-manager/SKILL.md +37 -0
- package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
- package/skills/vector-database-engineer/SKILL.md +60 -0
- package/skills/vector-index-tuning/SKILL.md +42 -0
- package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
- package/skills/wcag-audit-patterns/SKILL.md +41 -0
- package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
- package/skills/web3-testing/SKILL.md +427 -0
- package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
- package/skills/workflow-patterns/SKILL.md +38 -0
- package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
|
@@ -0,0 +1,654 @@
|
|
|
1
|
+
# Go Concurrency Patterns Implementation Playbook
|
|
2
|
+
|
|
3
|
+
This file contains detailed patterns, checklists, and code samples referenced by the skill.
|
|
4
|
+
|
|
5
|
+
# Go Concurrency Patterns
|
|
6
|
+
|
|
7
|
+
Production patterns for Go concurrency including goroutines, channels, synchronization primitives, and context management.
|
|
8
|
+
|
|
9
|
+
## When to Use This Skill
|
|
10
|
+
|
|
11
|
+
- Building concurrent Go applications
|
|
12
|
+
- Implementing worker pools and pipelines
|
|
13
|
+
- Managing goroutine lifecycles
|
|
14
|
+
- Using channels for communication
|
|
15
|
+
- Debugging race conditions
|
|
16
|
+
- Implementing graceful shutdown
|
|
17
|
+
|
|
18
|
+
## Core Concepts
|
|
19
|
+
|
|
20
|
+
### 1. Go Concurrency Primitives
|
|
21
|
+
|
|
22
|
+
| Primitive | Purpose |
|
|
23
|
+
|-----------|---------|
|
|
24
|
+
| `goroutine` | Lightweight concurrent execution |
|
|
25
|
+
| `channel` | Communication between goroutines |
|
|
26
|
+
| `select` | Multiplex channel operations |
|
|
27
|
+
| `sync.Mutex` | Mutual exclusion |
|
|
28
|
+
| `sync.WaitGroup` | Wait for goroutines to complete |
|
|
29
|
+
| `context.Context` | Cancellation and deadlines |
|
|
30
|
+
|
|
31
|
+
### 2. Go Concurrency Mantra
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Don't communicate by sharing memory;
|
|
35
|
+
share memory by communicating.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quick Start
|
|
39
|
+
|
|
40
|
+
```go
|
|
41
|
+
package main
|
|
42
|
+
|
|
43
|
+
import (
|
|
44
|
+
"context"
|
|
45
|
+
"fmt"
|
|
46
|
+
"sync"
|
|
47
|
+
"time"
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
func main() {
|
|
51
|
+
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
52
|
+
defer cancel()
|
|
53
|
+
|
|
54
|
+
results := make(chan string, 10)
|
|
55
|
+
var wg sync.WaitGroup
|
|
56
|
+
|
|
57
|
+
// Spawn workers
|
|
58
|
+
for i := 0; i < 3; i++ {
|
|
59
|
+
wg.Add(1)
|
|
60
|
+
go worker(ctx, i, results, &wg)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Close results when done
|
|
64
|
+
go func() {
|
|
65
|
+
wg.Wait()
|
|
66
|
+
close(results)
|
|
67
|
+
}()
|
|
68
|
+
|
|
69
|
+
// Collect results
|
|
70
|
+
for result := range results {
|
|
71
|
+
fmt.Println(result)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
func worker(ctx context.Context, id int, results chan<- string, wg *sync.WaitGroup) {
|
|
76
|
+
defer wg.Done()
|
|
77
|
+
|
|
78
|
+
select {
|
|
79
|
+
case <-ctx.Done():
|
|
80
|
+
return
|
|
81
|
+
case results <- fmt.Sprintf("Worker %d done", id):
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Patterns
|
|
87
|
+
|
|
88
|
+
### Pattern 1: Worker Pool
|
|
89
|
+
|
|
90
|
+
```go
|
|
91
|
+
package main
|
|
92
|
+
|
|
93
|
+
import (
|
|
94
|
+
"context"
|
|
95
|
+
"fmt"
|
|
96
|
+
"sync"
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
type Job struct {
|
|
100
|
+
ID int
|
|
101
|
+
Data string
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
type Result struct {
|
|
105
|
+
JobID int
|
|
106
|
+
Output string
|
|
107
|
+
Err error
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
func WorkerPool(ctx context.Context, numWorkers int, jobs <-chan Job) <-chan Result {
|
|
111
|
+
results := make(chan Result, len(jobs))
|
|
112
|
+
|
|
113
|
+
var wg sync.WaitGroup
|
|
114
|
+
for i := 0; i < numWorkers; i++ {
|
|
115
|
+
wg.Add(1)
|
|
116
|
+
go func(workerID int) {
|
|
117
|
+
defer wg.Done()
|
|
118
|
+
for job := range jobs {
|
|
119
|
+
select {
|
|
120
|
+
case <-ctx.Done():
|
|
121
|
+
return
|
|
122
|
+
default:
|
|
123
|
+
result := processJob(job)
|
|
124
|
+
results <- result
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}(i)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
go func() {
|
|
131
|
+
wg.Wait()
|
|
132
|
+
close(results)
|
|
133
|
+
}()
|
|
134
|
+
|
|
135
|
+
return results
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
func processJob(job Job) Result {
|
|
139
|
+
// Simulate work
|
|
140
|
+
return Result{
|
|
141
|
+
JobID: job.ID,
|
|
142
|
+
Output: fmt.Sprintf("Processed: %s", job.Data),
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Usage
|
|
147
|
+
func main() {
|
|
148
|
+
ctx, cancel := context.WithCancel(context.Background())
|
|
149
|
+
defer cancel()
|
|
150
|
+
|
|
151
|
+
jobs := make(chan Job, 100)
|
|
152
|
+
|
|
153
|
+
// Send jobs
|
|
154
|
+
go func() {
|
|
155
|
+
for i := 0; i < 50; i++ {
|
|
156
|
+
jobs <- Job{ID: i, Data: fmt.Sprintf("job-%d", i)}
|
|
157
|
+
}
|
|
158
|
+
close(jobs)
|
|
159
|
+
}()
|
|
160
|
+
|
|
161
|
+
// Process with 5 workers
|
|
162
|
+
results := WorkerPool(ctx, 5, jobs)
|
|
163
|
+
|
|
164
|
+
for result := range results {
|
|
165
|
+
fmt.Printf("Result: %+v\n", result)
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Pattern 2: Fan-Out/Fan-In Pipeline
|
|
171
|
+
|
|
172
|
+
```go
|
|
173
|
+
package main
|
|
174
|
+
|
|
175
|
+
import (
|
|
176
|
+
"context"
|
|
177
|
+
"sync"
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
// Stage 1: Generate numbers
|
|
181
|
+
func generate(ctx context.Context, nums ...int) <-chan int {
|
|
182
|
+
out := make(chan int)
|
|
183
|
+
go func() {
|
|
184
|
+
defer close(out)
|
|
185
|
+
for _, n := range nums {
|
|
186
|
+
select {
|
|
187
|
+
case <-ctx.Done():
|
|
188
|
+
return
|
|
189
|
+
case out <- n:
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}()
|
|
193
|
+
return out
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Stage 2: Square numbers (can run multiple instances)
|
|
197
|
+
func square(ctx context.Context, in <-chan int) <-chan int {
|
|
198
|
+
out := make(chan int)
|
|
199
|
+
go func() {
|
|
200
|
+
defer close(out)
|
|
201
|
+
for n := range in {
|
|
202
|
+
select {
|
|
203
|
+
case <-ctx.Done():
|
|
204
|
+
return
|
|
205
|
+
case out <- n * n:
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}()
|
|
209
|
+
return out
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Fan-in: Merge multiple channels into one
|
|
213
|
+
func merge(ctx context.Context, cs ...<-chan int) <-chan int {
|
|
214
|
+
var wg sync.WaitGroup
|
|
215
|
+
out := make(chan int)
|
|
216
|
+
|
|
217
|
+
// Start output goroutine for each input channel
|
|
218
|
+
output := func(c <-chan int) {
|
|
219
|
+
defer wg.Done()
|
|
220
|
+
for n := range c {
|
|
221
|
+
select {
|
|
222
|
+
case <-ctx.Done():
|
|
223
|
+
return
|
|
224
|
+
case out <- n:
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
wg.Add(len(cs))
|
|
230
|
+
for _, c := range cs {
|
|
231
|
+
go output(c)
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Close out after all inputs are done
|
|
235
|
+
go func() {
|
|
236
|
+
wg.Wait()
|
|
237
|
+
close(out)
|
|
238
|
+
}()
|
|
239
|
+
|
|
240
|
+
return out
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
func main() {
|
|
244
|
+
ctx, cancel := context.WithCancel(context.Background())
|
|
245
|
+
defer cancel()
|
|
246
|
+
|
|
247
|
+
// Generate input
|
|
248
|
+
in := generate(ctx, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
|
|
249
|
+
|
|
250
|
+
// Fan out to multiple squarers
|
|
251
|
+
c1 := square(ctx, in)
|
|
252
|
+
c2 := square(ctx, in)
|
|
253
|
+
c3 := square(ctx, in)
|
|
254
|
+
|
|
255
|
+
// Fan in results
|
|
256
|
+
for result := range merge(ctx, c1, c2, c3) {
|
|
257
|
+
fmt.Println(result)
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Pattern 3: Bounded Concurrency with Semaphore
|
|
263
|
+
|
|
264
|
+
```go
|
|
265
|
+
package main
|
|
266
|
+
|
|
267
|
+
import (
|
|
268
|
+
"context"
|
|
269
|
+
"fmt"
|
|
270
|
+
"golang.org/x/sync/semaphore"
|
|
271
|
+
"sync"
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
type RateLimitedWorker struct {
|
|
275
|
+
sem *semaphore.Weighted
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
func NewRateLimitedWorker(maxConcurrent int64) *RateLimitedWorker {
|
|
279
|
+
return &RateLimitedWorker{
|
|
280
|
+
sem: semaphore.NewWeighted(maxConcurrent),
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
func (w *RateLimitedWorker) Do(ctx context.Context, tasks []func() error) []error {
|
|
285
|
+
var (
|
|
286
|
+
wg sync.WaitGroup
|
|
287
|
+
mu sync.Mutex
|
|
288
|
+
errors []error
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
for _, task := range tasks {
|
|
292
|
+
// Acquire semaphore (blocks if at limit)
|
|
293
|
+
if err := w.sem.Acquire(ctx, 1); err != nil {
|
|
294
|
+
return []error{err}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
wg.Add(1)
|
|
298
|
+
go func(t func() error) {
|
|
299
|
+
defer wg.Done()
|
|
300
|
+
defer w.sem.Release(1)
|
|
301
|
+
|
|
302
|
+
if err := t(); err != nil {
|
|
303
|
+
mu.Lock()
|
|
304
|
+
errors = append(errors, err)
|
|
305
|
+
mu.Unlock()
|
|
306
|
+
}
|
|
307
|
+
}(task)
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
wg.Wait()
|
|
311
|
+
return errors
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Alternative: Channel-based semaphore
|
|
315
|
+
type Semaphore chan struct{}
|
|
316
|
+
|
|
317
|
+
func NewSemaphore(n int) Semaphore {
|
|
318
|
+
return make(chan struct{}, n)
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
func (s Semaphore) Acquire() {
|
|
322
|
+
s <- struct{}{}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
func (s Semaphore) Release() {
|
|
326
|
+
<-s
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Pattern 4: Graceful Shutdown
|
|
331
|
+
|
|
332
|
+
```go
|
|
333
|
+
package main
|
|
334
|
+
|
|
335
|
+
import (
|
|
336
|
+
"context"
|
|
337
|
+
"fmt"
|
|
338
|
+
"os"
|
|
339
|
+
"os/signal"
|
|
340
|
+
"sync"
|
|
341
|
+
"syscall"
|
|
342
|
+
"time"
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
type Server struct {
|
|
346
|
+
shutdown chan struct{}
|
|
347
|
+
wg sync.WaitGroup
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
func NewServer() *Server {
|
|
351
|
+
return &Server{
|
|
352
|
+
shutdown: make(chan struct{}),
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
func (s *Server) Start(ctx context.Context) {
|
|
357
|
+
// Start workers
|
|
358
|
+
for i := 0; i < 5; i++ {
|
|
359
|
+
s.wg.Add(1)
|
|
360
|
+
go s.worker(ctx, i)
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
func (s *Server) worker(ctx context.Context, id int) {
|
|
365
|
+
defer s.wg.Done()
|
|
366
|
+
defer fmt.Printf("Worker %d stopped\n", id)
|
|
367
|
+
|
|
368
|
+
ticker := time.NewTicker(time.Second)
|
|
369
|
+
defer ticker.Stop()
|
|
370
|
+
|
|
371
|
+
for {
|
|
372
|
+
select {
|
|
373
|
+
case <-ctx.Done():
|
|
374
|
+
// Cleanup
|
|
375
|
+
fmt.Printf("Worker %d cleaning up...\n", id)
|
|
376
|
+
time.Sleep(500 * time.Millisecond) // Simulated cleanup
|
|
377
|
+
return
|
|
378
|
+
case <-ticker.C:
|
|
379
|
+
fmt.Printf("Worker %d working...\n", id)
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
func (s *Server) Shutdown(timeout time.Duration) {
|
|
385
|
+
// Signal shutdown
|
|
386
|
+
close(s.shutdown)
|
|
387
|
+
|
|
388
|
+
// Wait with timeout
|
|
389
|
+
done := make(chan struct{})
|
|
390
|
+
go func() {
|
|
391
|
+
s.wg.Wait()
|
|
392
|
+
close(done)
|
|
393
|
+
}()
|
|
394
|
+
|
|
395
|
+
select {
|
|
396
|
+
case <-done:
|
|
397
|
+
fmt.Println("Clean shutdown completed")
|
|
398
|
+
case <-time.After(timeout):
|
|
399
|
+
fmt.Println("Shutdown timed out, forcing exit")
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
func main() {
|
|
404
|
+
// Setup signal handling
|
|
405
|
+
ctx, cancel := context.WithCancel(context.Background())
|
|
406
|
+
|
|
407
|
+
sigCh := make(chan os.Signal, 1)
|
|
408
|
+
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
|
|
409
|
+
|
|
410
|
+
server := NewServer()
|
|
411
|
+
server.Start(ctx)
|
|
412
|
+
|
|
413
|
+
// Wait for signal
|
|
414
|
+
sig := <-sigCh
|
|
415
|
+
fmt.Printf("\nReceived signal: %v\n", sig)
|
|
416
|
+
|
|
417
|
+
// Cancel context to stop workers
|
|
418
|
+
cancel()
|
|
419
|
+
|
|
420
|
+
// Wait for graceful shutdown
|
|
421
|
+
server.Shutdown(5 * time.Second)
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Pattern 5: Error Group with Cancellation
|
|
426
|
+
|
|
427
|
+
```go
|
|
428
|
+
package main
|
|
429
|
+
|
|
430
|
+
import (
|
|
431
|
+
"context"
|
|
432
|
+
"fmt"
|
|
433
|
+
"golang.org/x/sync/errgroup"
|
|
434
|
+
"net/http"
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
func fetchAllURLs(ctx context.Context, urls []string) ([]string, error) {
|
|
438
|
+
g, ctx := errgroup.WithContext(ctx)
|
|
439
|
+
|
|
440
|
+
results := make([]string, len(urls))
|
|
441
|
+
|
|
442
|
+
for i, url := range urls {
|
|
443
|
+
i, url := i, url // Capture loop variables
|
|
444
|
+
|
|
445
|
+
g.Go(func() error {
|
|
446
|
+
req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
|
|
447
|
+
if err != nil {
|
|
448
|
+
return fmt.Errorf("creating request for %s: %w", url, err)
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
resp, err := http.DefaultClient.Do(req)
|
|
452
|
+
if err != nil {
|
|
453
|
+
return fmt.Errorf("fetching %s: %w", url, err)
|
|
454
|
+
}
|
|
455
|
+
defer resp.Body.Close()
|
|
456
|
+
|
|
457
|
+
results[i] = fmt.Sprintf("%s: %d", url, resp.StatusCode)
|
|
458
|
+
return nil
|
|
459
|
+
})
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// Wait for all goroutines to complete or one to fail
|
|
463
|
+
if err := g.Wait(); err != nil {
|
|
464
|
+
return nil, err // First error cancels all others
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
return results, nil
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// With concurrency limit
|
|
471
|
+
func fetchWithLimit(ctx context.Context, urls []string, limit int) ([]string, error) {
|
|
472
|
+
g, ctx := errgroup.WithContext(ctx)
|
|
473
|
+
g.SetLimit(limit) // Max concurrent goroutines
|
|
474
|
+
|
|
475
|
+
results := make([]string, len(urls))
|
|
476
|
+
var mu sync.Mutex
|
|
477
|
+
|
|
478
|
+
for i, url := range urls {
|
|
479
|
+
i, url := i, url
|
|
480
|
+
|
|
481
|
+
g.Go(func() error {
|
|
482
|
+
result, err := fetchURL(ctx, url)
|
|
483
|
+
if err != nil {
|
|
484
|
+
return err
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
mu.Lock()
|
|
488
|
+
results[i] = result
|
|
489
|
+
mu.Unlock()
|
|
490
|
+
return nil
|
|
491
|
+
})
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
if err := g.Wait(); err != nil {
|
|
495
|
+
return nil, err
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
return results, nil
|
|
499
|
+
}
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### Pattern 6: Concurrent Map with sync.Map
|
|
503
|
+
|
|
504
|
+
```go
|
|
505
|
+
package main
|
|
506
|
+
|
|
507
|
+
import (
|
|
508
|
+
"sync"
|
|
509
|
+
)
|
|
510
|
+
|
|
511
|
+
// For frequent reads, infrequent writes
|
|
512
|
+
type Cache struct {
|
|
513
|
+
m sync.Map
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
func (c *Cache) Get(key string) (interface{}, bool) {
|
|
517
|
+
return c.m.Load(key)
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
func (c *Cache) Set(key string, value interface{}) {
|
|
521
|
+
c.m.Store(key, value)
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
func (c *Cache) GetOrSet(key string, value interface{}) (interface{}, bool) {
|
|
525
|
+
return c.m.LoadOrStore(key, value)
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
func (c *Cache) Delete(key string) {
|
|
529
|
+
c.m.Delete(key)
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// For write-heavy workloads, use sharded map
|
|
533
|
+
type ShardedMap struct {
|
|
534
|
+
shards []*shard
|
|
535
|
+
numShards int
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
type shard struct {
|
|
539
|
+
sync.RWMutex
|
|
540
|
+
data map[string]interface{}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
func NewShardedMap(numShards int) *ShardedMap {
|
|
544
|
+
m := &ShardedMap{
|
|
545
|
+
shards: make([]*shard, numShards),
|
|
546
|
+
numShards: numShards,
|
|
547
|
+
}
|
|
548
|
+
for i := range m.shards {
|
|
549
|
+
m.shards[i] = &shard{data: make(map[string]interface{})}
|
|
550
|
+
}
|
|
551
|
+
return m
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
func (m *ShardedMap) getShard(key string) *shard {
|
|
555
|
+
// Simple hash
|
|
556
|
+
h := 0
|
|
557
|
+
for _, c := range key {
|
|
558
|
+
h = 31*h + int(c)
|
|
559
|
+
}
|
|
560
|
+
return m.shards[h%m.numShards]
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
func (m *ShardedMap) Get(key string) (interface{}, bool) {
|
|
564
|
+
shard := m.getShard(key)
|
|
565
|
+
shard.RLock()
|
|
566
|
+
defer shard.RUnlock()
|
|
567
|
+
v, ok := shard.data[key]
|
|
568
|
+
return v, ok
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
func (m *ShardedMap) Set(key string, value interface{}) {
|
|
572
|
+
shard := m.getShard(key)
|
|
573
|
+
shard.Lock()
|
|
574
|
+
defer shard.Unlock()
|
|
575
|
+
shard.data[key] = value
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
### Pattern 7: Select with Timeout and Default
|
|
580
|
+
|
|
581
|
+
```go
|
|
582
|
+
func selectPatterns() {
|
|
583
|
+
ch := make(chan int)
|
|
584
|
+
|
|
585
|
+
// Timeout pattern
|
|
586
|
+
select {
|
|
587
|
+
case v := <-ch:
|
|
588
|
+
fmt.Println("Received:", v)
|
|
589
|
+
case <-time.After(time.Second):
|
|
590
|
+
fmt.Println("Timeout!")
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
// Non-blocking send/receive
|
|
594
|
+
select {
|
|
595
|
+
case ch <- 42:
|
|
596
|
+
fmt.Println("Sent")
|
|
597
|
+
default:
|
|
598
|
+
fmt.Println("Channel full, skipping")
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
// Priority select (check high priority first)
|
|
602
|
+
highPriority := make(chan int)
|
|
603
|
+
lowPriority := make(chan int)
|
|
604
|
+
|
|
605
|
+
for {
|
|
606
|
+
select {
|
|
607
|
+
case msg := <-highPriority:
|
|
608
|
+
fmt.Println("High priority:", msg)
|
|
609
|
+
default:
|
|
610
|
+
select {
|
|
611
|
+
case msg := <-highPriority:
|
|
612
|
+
fmt.Println("High priority:", msg)
|
|
613
|
+
case msg := <-lowPriority:
|
|
614
|
+
fmt.Println("Low priority:", msg)
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
## Race Detection
|
|
622
|
+
|
|
623
|
+
```bash
|
|
624
|
+
# Run tests with race detector
|
|
625
|
+
go test -race ./...
|
|
626
|
+
|
|
627
|
+
# Build with race detector
|
|
628
|
+
go build -race .
|
|
629
|
+
|
|
630
|
+
# Run with race detector
|
|
631
|
+
go run -race main.go
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
## Best Practices
|
|
635
|
+
|
|
636
|
+
### Do's
|
|
637
|
+
- **Use context** - For cancellation and deadlines
|
|
638
|
+
- **Close channels** - From sender side only
|
|
639
|
+
- **Use errgroup** - For concurrent operations with errors
|
|
640
|
+
- **Buffer channels** - When you know the count
|
|
641
|
+
- **Prefer channels** - Over mutexes when possible
|
|
642
|
+
|
|
643
|
+
### Don'ts
|
|
644
|
+
- **Don't leak goroutines** - Always have exit path
|
|
645
|
+
- **Don't close from receiver** - Causes panic
|
|
646
|
+
- **Don't use shared memory** - Unless necessary
|
|
647
|
+
- **Don't ignore context cancellation** - Check ctx.Done()
|
|
648
|
+
- **Don't use time.Sleep for sync** - Use proper primitives
|
|
649
|
+
|
|
650
|
+
## Resources
|
|
651
|
+
|
|
652
|
+
- [Go Concurrency Patterns](https://go.dev/blog/pipelines)
|
|
653
|
+
- [Effective Go - Concurrency](https://go.dev/doc/effective_go#concurrency)
|
|
654
|
+
- [Go by Example - Goroutines](https://gobyexample.com/goroutines)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: godot-gdscript-patterns
|
|
3
|
+
description: Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization. Use when building Godot games, implementing game systems, or learning GDScript best practices.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Godot GDScript Patterns
|
|
7
|
+
|
|
8
|
+
Production patterns for Godot 4.x game development with GDScript, covering architecture, signals, scenes, and optimization.
|
|
9
|
+
|
|
10
|
+
## Use this skill when
|
|
11
|
+
|
|
12
|
+
- Building games with Godot 4
|
|
13
|
+
- Implementing game systems in GDScript
|
|
14
|
+
- Designing scene architecture
|
|
15
|
+
- Managing game state
|
|
16
|
+
- Optimizing GDScript performance
|
|
17
|
+
- Learning Godot best practices
|
|
18
|
+
|
|
19
|
+
## Do not use this skill when
|
|
20
|
+
|
|
21
|
+
- The task is unrelated to godot gdscript patterns
|
|
22
|
+
- You need a different domain or tool outside this scope
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
- Clarify goals, constraints, and required inputs.
|
|
27
|
+
- Apply relevant best practices and validate outcomes.
|
|
28
|
+
- Provide actionable steps and verification.
|
|
29
|
+
- If detailed examples are required, open `resources/implementation-playbook.md`.
|
|
30
|
+
|
|
31
|
+
## Resources
|
|
32
|
+
|
|
33
|
+
- `resources/implementation-playbook.md` for detailed patterns and examples.
|