@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,462 @@
|
|
|
1
|
+
# Replay Testing for Determinism and Compatibility
|
|
2
|
+
|
|
3
|
+
Comprehensive guide for validating workflow determinism and ensuring safe code changes using replay testing.
|
|
4
|
+
|
|
5
|
+
## What is Replay Testing?
|
|
6
|
+
|
|
7
|
+
**Purpose**: Verify that workflow code changes are backward-compatible with existing workflow executions
|
|
8
|
+
|
|
9
|
+
**How it works**:
|
|
10
|
+
|
|
11
|
+
1. Temporal records every workflow decision as Event History
|
|
12
|
+
2. Replay testing re-executes workflow code against recorded history
|
|
13
|
+
3. If new code makes same decisions → deterministic (safe to deploy)
|
|
14
|
+
4. If decisions differ → non-deterministic (breaking change)
|
|
15
|
+
|
|
16
|
+
**Critical Use Cases**:
|
|
17
|
+
|
|
18
|
+
- Deploying workflow code changes to production
|
|
19
|
+
- Validating refactoring doesn't break running workflows
|
|
20
|
+
- CI/CD automated compatibility checks
|
|
21
|
+
- Version migration validation
|
|
22
|
+
|
|
23
|
+
## Basic Replay Testing
|
|
24
|
+
|
|
25
|
+
### Replayer Setup
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
from temporalio.worker import Replayer
|
|
29
|
+
from temporalio.client import Client
|
|
30
|
+
|
|
31
|
+
async def test_workflow_replay():
|
|
32
|
+
"""Test workflow against production history"""
|
|
33
|
+
|
|
34
|
+
# Connect to Temporal server
|
|
35
|
+
client = await Client.connect("localhost:7233")
|
|
36
|
+
|
|
37
|
+
# Create replayer with current workflow code
|
|
38
|
+
replayer = Replayer(
|
|
39
|
+
workflows=[OrderWorkflow, PaymentWorkflow]
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Fetch workflow history from production
|
|
43
|
+
handle = client.get_workflow_handle("order-123")
|
|
44
|
+
history = await handle.fetch_history()
|
|
45
|
+
|
|
46
|
+
# Replay history with current code
|
|
47
|
+
await replayer.replay_workflow(history)
|
|
48
|
+
# Success = deterministic, Exception = breaking change
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Testing Against Multiple Histories
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
import pytest
|
|
55
|
+
from temporalio.worker import Replayer
|
|
56
|
+
|
|
57
|
+
@pytest.mark.asyncio
|
|
58
|
+
async def test_replay_multiple_workflows():
|
|
59
|
+
"""Replay against multiple production histories"""
|
|
60
|
+
|
|
61
|
+
replayer = Replayer(workflows=[OrderWorkflow])
|
|
62
|
+
|
|
63
|
+
# Test against different workflow executions
|
|
64
|
+
workflow_ids = [
|
|
65
|
+
"order-success-123",
|
|
66
|
+
"order-cancelled-456",
|
|
67
|
+
"order-retry-789",
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
for workflow_id in workflow_ids:
|
|
71
|
+
handle = client.get_workflow_handle(workflow_id)
|
|
72
|
+
history = await handle.fetch_history()
|
|
73
|
+
|
|
74
|
+
# Replay should succeed for all variants
|
|
75
|
+
await replayer.replay_workflow(history)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Determinism Validation
|
|
79
|
+
|
|
80
|
+
### Common Non-Deterministic Patterns
|
|
81
|
+
|
|
82
|
+
**Problem: Random Number Generation**
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
# ❌ Non-deterministic (breaks replay)
|
|
86
|
+
@workflow.defn
|
|
87
|
+
class BadWorkflow:
|
|
88
|
+
@workflow.run
|
|
89
|
+
async def run(self) -> int:
|
|
90
|
+
return random.randint(1, 100) # Different on replay!
|
|
91
|
+
|
|
92
|
+
# ✅ Deterministic (safe for replay)
|
|
93
|
+
@workflow.defn
|
|
94
|
+
class GoodWorkflow:
|
|
95
|
+
@workflow.run
|
|
96
|
+
async def run(self) -> int:
|
|
97
|
+
return workflow.random().randint(1, 100) # Deterministic random
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Problem: Current Time**
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
# ❌ Non-deterministic
|
|
104
|
+
@workflow.defn
|
|
105
|
+
class BadWorkflow:
|
|
106
|
+
@workflow.run
|
|
107
|
+
async def run(self) -> str:
|
|
108
|
+
now = datetime.now() # Different on replay!
|
|
109
|
+
return now.isoformat()
|
|
110
|
+
|
|
111
|
+
# ✅ Deterministic
|
|
112
|
+
@workflow.defn
|
|
113
|
+
class GoodWorkflow:
|
|
114
|
+
@workflow.run
|
|
115
|
+
async def run(self) -> str:
|
|
116
|
+
now = workflow.now() # Deterministic time
|
|
117
|
+
return now.isoformat()
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Problem: Direct External Calls**
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
# ❌ Non-deterministic
|
|
124
|
+
@workflow.defn
|
|
125
|
+
class BadWorkflow:
|
|
126
|
+
@workflow.run
|
|
127
|
+
async def run(self) -> dict:
|
|
128
|
+
response = requests.get("https://api.example.com/data") # External call!
|
|
129
|
+
return response.json()
|
|
130
|
+
|
|
131
|
+
# ✅ Deterministic
|
|
132
|
+
@workflow.defn
|
|
133
|
+
class GoodWorkflow:
|
|
134
|
+
@workflow.run
|
|
135
|
+
async def run(self) -> dict:
|
|
136
|
+
# Use activity for external calls
|
|
137
|
+
return await workflow.execute_activity(
|
|
138
|
+
fetch_external_data,
|
|
139
|
+
start_to_close_timeout=timedelta(seconds=30),
|
|
140
|
+
)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Testing Determinism
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
@pytest.mark.asyncio
|
|
147
|
+
async def test_workflow_determinism():
|
|
148
|
+
"""Verify workflow produces same output on multiple runs"""
|
|
149
|
+
|
|
150
|
+
@workflow.defn
|
|
151
|
+
class DeterministicWorkflow:
|
|
152
|
+
@workflow.run
|
|
153
|
+
async def run(self, seed: int) -> list[int]:
|
|
154
|
+
# Use workflow.random() for determinism
|
|
155
|
+
rng = workflow.random()
|
|
156
|
+
rng.seed(seed)
|
|
157
|
+
return [rng.randint(1, 100) for _ in range(10)]
|
|
158
|
+
|
|
159
|
+
env = await WorkflowEnvironment.start_time_skipping()
|
|
160
|
+
|
|
161
|
+
# Run workflow twice with same input
|
|
162
|
+
results = []
|
|
163
|
+
for i in range(2):
|
|
164
|
+
async with Worker(
|
|
165
|
+
env.client,
|
|
166
|
+
task_queue="test",
|
|
167
|
+
workflows=[DeterministicWorkflow],
|
|
168
|
+
):
|
|
169
|
+
result = await env.client.execute_workflow(
|
|
170
|
+
DeterministicWorkflow.run,
|
|
171
|
+
42, # Same seed
|
|
172
|
+
id=f"determinism-test-{i}",
|
|
173
|
+
task_queue="test",
|
|
174
|
+
)
|
|
175
|
+
results.append(result)
|
|
176
|
+
|
|
177
|
+
await env.shutdown()
|
|
178
|
+
|
|
179
|
+
# Verify identical outputs
|
|
180
|
+
assert results[0] == results[1]
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Production History Replay
|
|
184
|
+
|
|
185
|
+
### Exporting Workflow History
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
from temporalio.client import Client
|
|
189
|
+
|
|
190
|
+
async def export_workflow_history(workflow_id: str, output_file: str):
|
|
191
|
+
"""Export workflow history for replay testing"""
|
|
192
|
+
|
|
193
|
+
client = await Client.connect("production.temporal.io:7233")
|
|
194
|
+
|
|
195
|
+
# Fetch workflow history
|
|
196
|
+
handle = client.get_workflow_handle(workflow_id)
|
|
197
|
+
history = await handle.fetch_history()
|
|
198
|
+
|
|
199
|
+
# Save to file for replay testing
|
|
200
|
+
with open(output_file, "wb") as f:
|
|
201
|
+
f.write(history.SerializeToString())
|
|
202
|
+
|
|
203
|
+
print(f"Exported history to {output_file}")
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Replaying from File
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
from temporalio.worker import Replayer
|
|
210
|
+
from temporalio.api.history.v1 import History
|
|
211
|
+
|
|
212
|
+
async def test_replay_from_file():
|
|
213
|
+
"""Replay workflow from exported history file"""
|
|
214
|
+
|
|
215
|
+
# Load history from file
|
|
216
|
+
with open("workflow_histories/order-123.pb", "rb") as f:
|
|
217
|
+
history = History.FromString(f.read())
|
|
218
|
+
|
|
219
|
+
# Replay with current workflow code
|
|
220
|
+
replayer = Replayer(workflows=[OrderWorkflow])
|
|
221
|
+
await replayer.replay_workflow(history)
|
|
222
|
+
# Success = safe to deploy
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## CI/CD Integration Patterns
|
|
226
|
+
|
|
227
|
+
### GitHub Actions Example
|
|
228
|
+
|
|
229
|
+
```yaml
|
|
230
|
+
# .github/workflows/replay-tests.yml
|
|
231
|
+
name: Replay Tests
|
|
232
|
+
|
|
233
|
+
on:
|
|
234
|
+
pull_request:
|
|
235
|
+
branches: [main]
|
|
236
|
+
|
|
237
|
+
jobs:
|
|
238
|
+
replay-tests:
|
|
239
|
+
runs-on: ubuntu-latest
|
|
240
|
+
|
|
241
|
+
steps:
|
|
242
|
+
- uses: actions/checkout@v3
|
|
243
|
+
|
|
244
|
+
- name: Set up Python
|
|
245
|
+
uses: actions/setup-python@v4
|
|
246
|
+
with:
|
|
247
|
+
python-version: "3.11"
|
|
248
|
+
|
|
249
|
+
- name: Install dependencies
|
|
250
|
+
run: |
|
|
251
|
+
pip install -r requirements.txt
|
|
252
|
+
pip install pytest pytest-asyncio
|
|
253
|
+
|
|
254
|
+
- name: Download production histories
|
|
255
|
+
run: |
|
|
256
|
+
# Fetch recent workflow histories from production
|
|
257
|
+
python scripts/export_histories.py
|
|
258
|
+
|
|
259
|
+
- name: Run replay tests
|
|
260
|
+
run: |
|
|
261
|
+
pytest tests/replay/ --verbose
|
|
262
|
+
|
|
263
|
+
- name: Upload results
|
|
264
|
+
if: failure()
|
|
265
|
+
uses: actions/upload-artifact@v3
|
|
266
|
+
with:
|
|
267
|
+
name: replay-failures
|
|
268
|
+
path: replay-failures/
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Automated History Export
|
|
272
|
+
|
|
273
|
+
```python
|
|
274
|
+
# scripts/export_histories.py
|
|
275
|
+
import asyncio
|
|
276
|
+
from temporalio.client import Client
|
|
277
|
+
from datetime import datetime, timedelta
|
|
278
|
+
|
|
279
|
+
async def export_recent_histories():
|
|
280
|
+
"""Export recent production workflow histories"""
|
|
281
|
+
|
|
282
|
+
client = await Client.connect("production.temporal.io:7233")
|
|
283
|
+
|
|
284
|
+
# Query recent completed workflows
|
|
285
|
+
workflows = client.list_workflows(
|
|
286
|
+
query="WorkflowType='OrderWorkflow' AND CloseTime > '7 days ago'"
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
count = 0
|
|
290
|
+
async for workflow in workflows:
|
|
291
|
+
# Export history
|
|
292
|
+
history = await workflow.fetch_history()
|
|
293
|
+
|
|
294
|
+
# Save to file
|
|
295
|
+
filename = f"workflow_histories/{workflow.id}.pb"
|
|
296
|
+
with open(filename, "wb") as f:
|
|
297
|
+
f.write(history.SerializeToString())
|
|
298
|
+
|
|
299
|
+
count += 1
|
|
300
|
+
if count >= 100: # Limit to 100 most recent
|
|
301
|
+
break
|
|
302
|
+
|
|
303
|
+
print(f"Exported {count} workflow histories")
|
|
304
|
+
|
|
305
|
+
if __name__ == "__main__":
|
|
306
|
+
asyncio.run(export_recent_histories())
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Replay Test Suite
|
|
310
|
+
|
|
311
|
+
```python
|
|
312
|
+
# tests/replay/test_workflow_replay.py
|
|
313
|
+
import pytest
|
|
314
|
+
import glob
|
|
315
|
+
from temporalio.worker import Replayer
|
|
316
|
+
from temporalio.api.history.v1 import History
|
|
317
|
+
from workflows import OrderWorkflow, PaymentWorkflow
|
|
318
|
+
|
|
319
|
+
@pytest.mark.asyncio
|
|
320
|
+
async def test_replay_all_histories():
|
|
321
|
+
"""Replay all production histories"""
|
|
322
|
+
|
|
323
|
+
replayer = Replayer(
|
|
324
|
+
workflows=[OrderWorkflow, PaymentWorkflow]
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
# Load all history files
|
|
328
|
+
history_files = glob.glob("workflow_histories/*.pb")
|
|
329
|
+
|
|
330
|
+
failures = []
|
|
331
|
+
for history_file in history_files:
|
|
332
|
+
try:
|
|
333
|
+
with open(history_file, "rb") as f:
|
|
334
|
+
history = History.FromString(f.read())
|
|
335
|
+
|
|
336
|
+
await replayer.replay_workflow(history)
|
|
337
|
+
print(f"✓ {history_file}")
|
|
338
|
+
|
|
339
|
+
except Exception as e:
|
|
340
|
+
failures.append((history_file, str(e)))
|
|
341
|
+
print(f"✗ {history_file}: {e}")
|
|
342
|
+
|
|
343
|
+
# Report failures
|
|
344
|
+
if failures:
|
|
345
|
+
pytest.fail(
|
|
346
|
+
f"Replay failed for {len(failures)} workflows:\n"
|
|
347
|
+
+ "\n".join(f" {file}: {error}" for file, error in failures)
|
|
348
|
+
)
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Version Compatibility Testing
|
|
352
|
+
|
|
353
|
+
### Testing Code Evolution
|
|
354
|
+
|
|
355
|
+
```python
|
|
356
|
+
@pytest.mark.asyncio
|
|
357
|
+
async def test_workflow_version_compatibility():
|
|
358
|
+
"""Test workflow with version changes"""
|
|
359
|
+
|
|
360
|
+
@workflow.defn
|
|
361
|
+
class EvolvingWorkflow:
|
|
362
|
+
@workflow.run
|
|
363
|
+
async def run(self) -> str:
|
|
364
|
+
# Use versioning for safe code evolution
|
|
365
|
+
version = workflow.get_version("feature-flag", 1, 2)
|
|
366
|
+
|
|
367
|
+
if version == 1:
|
|
368
|
+
# Old behavior
|
|
369
|
+
return "version-1"
|
|
370
|
+
else:
|
|
371
|
+
# New behavior
|
|
372
|
+
return "version-2"
|
|
373
|
+
|
|
374
|
+
env = await WorkflowEnvironment.start_time_skipping()
|
|
375
|
+
|
|
376
|
+
# Test version 1 behavior
|
|
377
|
+
async with Worker(
|
|
378
|
+
env.client,
|
|
379
|
+
task_queue="test",
|
|
380
|
+
workflows=[EvolvingWorkflow],
|
|
381
|
+
):
|
|
382
|
+
result_v1 = await env.client.execute_workflow(
|
|
383
|
+
EvolvingWorkflow.run,
|
|
384
|
+
id="evolving-v1",
|
|
385
|
+
task_queue="test",
|
|
386
|
+
)
|
|
387
|
+
assert result_v1 == "version-1"
|
|
388
|
+
|
|
389
|
+
# Simulate workflow executing again with version 2
|
|
390
|
+
result_v2 = await env.client.execute_workflow(
|
|
391
|
+
EvolvingWorkflow.run,
|
|
392
|
+
id="evolving-v2",
|
|
393
|
+
task_queue="test",
|
|
394
|
+
)
|
|
395
|
+
# New workflows use version 2
|
|
396
|
+
assert result_v2 == "version-2"
|
|
397
|
+
|
|
398
|
+
await env.shutdown()
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### Migration Strategy
|
|
402
|
+
|
|
403
|
+
```python
|
|
404
|
+
# Phase 1: Add version check
|
|
405
|
+
@workflow.defn
|
|
406
|
+
class MigratingWorkflow:
|
|
407
|
+
@workflow.run
|
|
408
|
+
async def run(self) -> dict:
|
|
409
|
+
version = workflow.get_version("new-logic", 1, 2)
|
|
410
|
+
|
|
411
|
+
if version == 1:
|
|
412
|
+
# Old logic (existing workflows)
|
|
413
|
+
return await self._old_implementation()
|
|
414
|
+
else:
|
|
415
|
+
# New logic (new workflows)
|
|
416
|
+
return await self._new_implementation()
|
|
417
|
+
|
|
418
|
+
# Phase 2: After all old workflows complete, remove old code
|
|
419
|
+
@workflow.defn
|
|
420
|
+
class MigratedWorkflow:
|
|
421
|
+
@workflow.run
|
|
422
|
+
async def run(self) -> dict:
|
|
423
|
+
# Only new logic remains
|
|
424
|
+
return await self._new_implementation()
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
## Best Practices
|
|
428
|
+
|
|
429
|
+
1. **Replay Before Deploy**: Always run replay tests before deploying workflow changes
|
|
430
|
+
2. **Export Regularly**: Continuously export production histories for testing
|
|
431
|
+
3. **CI/CD Integration**: Automated replay testing in pull request checks
|
|
432
|
+
4. **Version Tracking**: Use workflow.get_version() for safe code evolution
|
|
433
|
+
5. **History Retention**: Keep representative workflow histories for regression testing
|
|
434
|
+
6. **Determinism**: Never use random(), datetime.now(), or direct external calls
|
|
435
|
+
7. **Comprehensive Testing**: Test against various workflow execution paths
|
|
436
|
+
|
|
437
|
+
## Common Replay Errors
|
|
438
|
+
|
|
439
|
+
**Non-Deterministic Error**:
|
|
440
|
+
|
|
441
|
+
```
|
|
442
|
+
WorkflowNonDeterministicError: Workflow command mismatch at position 5
|
|
443
|
+
Expected: ScheduleActivityTask(activity_id='activity-1')
|
|
444
|
+
Got: ScheduleActivityTask(activity_id='activity-2')
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
**Solution**: Code change altered workflow decision sequence
|
|
448
|
+
|
|
449
|
+
**Version Mismatch Error**:
|
|
450
|
+
|
|
451
|
+
```
|
|
452
|
+
WorkflowVersionError: Workflow version changed from 1 to 2 without using get_version()
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
**Solution**: Use workflow.get_version() for backward-compatible changes
|
|
456
|
+
|
|
457
|
+
## Additional Resources
|
|
458
|
+
|
|
459
|
+
- Replay Testing: docs.temporal.io/develop/python/testing-suite#replay-testing
|
|
460
|
+
- Workflow Versioning: docs.temporal.io/workflows#versioning
|
|
461
|
+
- Determinism Guide: docs.temporal.io/workflows#deterministic-constraints
|
|
462
|
+
- CI/CD Integration: github.com/temporalio/samples-python/tree/main/.github/workflows
|