claude-code-kit 0.36.0__tar.gz → 0.38.0__tar.gz
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.
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/.claude-plugin/marketplace.json +1 -1
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/.claude-plugin/plugin.json +1 -1
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/CHANGELOG.md +41 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/PKG-INFO +4 -4
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/README.md +3 -3
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/stack-skills/README.md +2 -1
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/pyproject.toml +1 -1
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/code-review-and-quality/SKILL.md +2 -0
- claude_code_kit-0.38.0/skills/library-review/SKILL.md +104 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/README.md +8 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/SKILL.md +7 -1
- claude_code_kit-0.38.0/skills/temporal-developer/README.md +38 -0
- claude_code_kit-0.38.0/skills/temporal-developer/SKILL.md +94 -0
- claude_code_kit-0.38.0/skills/temporal-developer/references/cli.md +63 -0
- claude_code_kit-0.38.0/skills/temporal-developer/references/determinism.md +72 -0
- claude_code_kit-0.38.0/skills/temporal-developer/references/gotchas.md +69 -0
- claude_code_kit-0.38.0/skills/temporal-developer/references/languages.md +110 -0
- claude_code_kit-0.38.0/skills/temporal-developer/references/testing.md +80 -0
- claude_code_kit-0.38.0/skills/temporal-developer/references/versioning.md +82 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/test-driven-development/SKILL.md +29 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/__init__.py +1 -1
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/.gitignore +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/CLAUDE.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/CONTRIBUTING.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/LICENSE +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/acceptance-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/auditor.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/dependency-scanner.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/developer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/devils-advocate.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/devops-engineer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/e2e-tester.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/em-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/incident-responder.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/merge-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/observability-engineer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/orchestrator.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/owasp-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/policy-validator.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/pr-raiser.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/risk-classifier.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/sdlc-code-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/secret-scanner.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/security-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/senior-backend-dev.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/senior-frontend-dev.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/senior-tester.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/spec-doc-writer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/story-planner.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/technical-architect.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/tester.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/ui-designer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/agents/unit-tester.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/catalog/capture.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/catalog/mcp.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/catalog/org.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/catalog/profiles.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/catalog/stacks.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/commands/abort.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/commands/init.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/commands/sdlc.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/commands/status.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/agentic-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/agents.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/architecture.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/capture-a-real-run.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/coverage-audit.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/eval-harness.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/org-capabilities.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/stack-skills/GAP-ANALYSIS.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/docs/stack-skills/REPO-INVENTORY.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/hooks.json +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/audit-log.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/capture-learnings.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/guard-destructive-git.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/guard-kubectl-delete.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/guard-secrets.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/lint-fix.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/load-autonomy.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/load-continuity.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/load-learnings.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/type-check.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/validate-frontmatter.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/validate-settings.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/warn-large-edits.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/warn-llm-io.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/warn-missing-tests.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/warn-sensitive-files.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/hooks/scripts/warn-shared-modules.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/agent-guardrails.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/agent-memory.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/agent-resilience.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/autonomy-levels.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/code-organization.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/continuity.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/design-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/devops-observability.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/documentation.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/evals.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/frontend-best-practices.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/goal-setting-and-monitoring.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/human-in-the-loop.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/linting-and-formatting.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/mandatory-workflow.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/model-tiers.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/quality-gates.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/rarv-cycle.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/reasoning-techniques.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/responsive-and-accessibility.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/risk-classification.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/testing.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/rules/tool-design.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/scripts/capture-sdlc-run.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/scripts/check_docs_consistency.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/scripts/gen_hooks.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/scripts/init.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/_references/accessibility-checklist.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/_references/orchestration-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/_references/performance-checklist.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/_references/security-checklist.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/_references/testing-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/accessibility-review/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/alembic-migrations/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/alembic-migrations/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/alembic-migrations/references/alembic-setup-and-env.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/alembic-migrations/references/async-and-multitenant-migrations.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/alembic-migrations/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/alembic-migrations/references/troubleshooting-and-debugging.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/alembic-migrations/references/writing-migrations.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/anthropic-vertex-integration/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/anthropic-vertex-integration/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/anthropic-vertex-integration/references/generate-helpers-and-retry.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/anthropic-vertex-integration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/anthropic-vertex-integration/references/vertex-client-and-auth.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/api-and-interface-design/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/api-integration/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/api-pagination-filtering-sorting/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/api-pagination-filtering-sorting/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/api-pagination-filtering-sorting/references/query-params-conventions.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/api-pagination-filtering-sorting/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/api-pagination-filtering-sorting/references/response-metadata.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/archive-sprint/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/async-python-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/async-python-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/async-python-patterns/references/async-boundaries.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/async-python-patterns/references/lifecycle-and-gather.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/async-python-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/auth-and-rbac/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/auth-and-rbac/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/auth-and-rbac/references/auth-dependencies.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/auth-and-rbac/references/rbac-and-permissions.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/auth-and-rbac/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/auth-and-rbac/references/security-hardening.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/auth-and-rbac/references/tokens-and-hashing.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backend-repo-architecture/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backend-repo-architecture/references/deployment-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backend-repo-architecture/references/entrypoint-and-config.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backend-repo-architecture/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backend-repo-architecture/references/structure-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backend-repo-architecture/references/troubleshooting.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backlog/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/backlog/item-template.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/browser-testing-with-devtools/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/bug-hunt/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/ci-cd-and-automation/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/code-simplification/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/component-design/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/configargparse-yaml-env-layering/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/configargparse-yaml-env-layering/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/configargparse-yaml-env-layering/references/config-layering-anatomy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/configargparse-yaml-env-layering/references/mode-dispatch-and-precedence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/configargparse-yaml-env-layering/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/consolidate-learnings/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/references/deployment-and-secrets.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/references/dockerfile-and-compose.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/references/entrypoint-and-modes.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/references/kerberos-kinit-bootstrap.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/references/makefile-dev-workflow.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/containerization-and-deployment/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/context-engineering/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/cron-and-scheduled-jobs/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/cron-and-scheduled-jobs/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/cron-and-scheduled-jobs/references/choosing-and-operations.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/cron-and-scheduled-jobs/references/kubernetes-cronjob.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/cron-and-scheduled-jobs/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/cron-and-scheduled-jobs/references/temporal-schedules.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/data-engineering-bigquery-gcs/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/data-engineering-bigquery-gcs/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/data-engineering-bigquery-gcs/references/bigquery-advanced-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/data-engineering-bigquery-gcs/references/bigquery-gcs-io.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/data-engineering-bigquery-gcs/references/medallion-architecture.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/data-engineering-bigquery-gcs/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/data-engineering-bigquery-gcs/references/temp-table-merge-pattern.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/debugging-and-error-recovery/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/decision/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/decision/adr-template.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/deprecation-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/references/anti-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/references/naming-and-layout.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/references/patterns-catalog.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/references/testing-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/design-patterns-and-conventions/references/troubleshooting.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-compose/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-compose/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-compose/references/compose-services-and-healthchecks.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-compose/references/dev-vs-prod-variants.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-compose/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-shared/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-shared/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-shared/references/dockerignore-and-build-secrets.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-shared/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-shared/references/shared-base-images.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/docker-shared/references/shared-compose-fragments.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-backend/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-backend/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-backend/references/backend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-backend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-backend/references/system-deps-and-caching.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-frontend/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-frontend/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-frontend/references/build-args-and-nginx.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-frontend/references/frontend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/dockerfile-frontend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/documentation-and-adrs/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/doubt-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/edge-to-service-trust-boundary/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/edge-to-service-trust-boundary/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/edge-to-service-trust-boundary/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/edge-to-service-trust-boundary/references/trust-contract.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/execute/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/references/api-versioning.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/references/app-factory-and-lifespan.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/references/custom-route-and-middleware.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/references/dependency-injection.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/references/model-and-serialization-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/fastapi-service-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/file-export-and-reporting/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/file-export-and-reporting/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/file-export-and-reporting/references/excel-generation.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/file-export-and-reporting/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/file-export-and-reporting/references/streaming-and-downloads.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-repo-architecture/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-repo-architecture/references/api-layer-and-types.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-repo-architecture/references/divergences.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-repo-architecture/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-repo-architecture/references/structure-and-state.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-repo-architecture/references/testing-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/frontend-ui-engineering/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcp-cloud-run-github-actions/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcp-cloud-run-github-actions/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcp-cloud-run-github-actions/references/cloud-run-deploy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcp-cloud-run-github-actions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcp-cloud-run-github-actions/references/workflow-structure.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcs-file-storage-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcs-file-storage-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcs-file-storage-patterns/references/client-and-uploads.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcs-file-storage-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/gcs-file-storage-patterns/references/signed-urls-and-reads.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/git-workflow-and-versioning/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/grafana-dashboards-and-alerts/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/grafana-dashboards-and-alerts/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/grafana-dashboards-and-alerts/references/dashboard-json-and-templating.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/grafana-dashboards-and-alerts/references/provisioning-and-organization.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/grafana-dashboards-and-alerts/references/red-metrics-queries.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/grafana-dashboards-and-alerts/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/grafana-dashboards-and-alerts/references/unified-alerting.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/graphql-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/graphql-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/graphql-patterns/references/apollo-client-frontend.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/graphql-patterns/references/apollo-client-setup.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/graphql-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/graphql-patterns/references/strawberry-backend.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/graphql-patterns/references/when-to-use-graphql.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/idea-refine/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/idea-refine/examples.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/idea-refine/frameworks.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/idea-refine/refinement-criteria.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/idea-refine/scripts/idea-refine.sh +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/incident-postmortem/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/incremental-implementation/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/interview-me/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kafka-config-driven/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kafka-config-driven/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kafka-config-driven/references/config-and-sasl-kerberos.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kafka-config-driven/references/consumer-producer-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kafka-config-driven/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kafka-config-driven/references/troubleshooting-and-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubectl-operations/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubectl-operations/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubectl-operations/references/command-reference.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubectl-operations/references/context-namespace-rbac.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubectl-operations/references/debugging-playbooks.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubectl-operations/references/output-formats-and-selectors.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubectl-operations/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubernetes-workload-hardening/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubernetes-workload-hardening/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubernetes-workload-hardening/references/networkpolicy-and-rbac.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubernetes-workload-hardening/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/kubernetes-workload-hardening/references/securitycontext-and-podsecurity.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/langfuse-llm-tracing/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/langfuse-llm-tracing/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/langfuse-llm-tracing/references/langfuse-client-and-tracing.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/langfuse-llm-tracing/references/python-and-typescript.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/langfuse-llm-tracing/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/load-testing/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/manual-test/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/modernization-and-migration/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/modernization-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/modernization-and-migration/references/migration-best-practices.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/modernization-and-migration/references/pydantic-v1-to-v2.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/modernization-and-migration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/modernization-and-migration/references/shared-internal-library.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/modernization-and-migration/references/sqlalchemy-14-to-20.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/multi-tenancy-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/multi-tenancy-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/multi-tenancy-patterns/references/caching-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/multi-tenancy-patterns/references/isolation-strategies.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/multi-tenancy-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/multi-tenancy-patterns/references/tenant-resolution.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-express-service/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-express-service/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-express-service/references/app-factory-and-mode-dispatch.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-express-service/references/config-and-module-alias.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-express-service/references/middleware-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-express-service/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-objection-knex/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-objection-knex/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-objection-knex/references/migrations-and-validation.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-objection-knex/references/objection-model-and-knex.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/node-objection-knex/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/notifications-and-messaging/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/notifications-and-messaging/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/notifications-and-messaging/references/provider-abstraction.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/notifications-and-messaging/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/notifications-and-messaging/references/templates-and-fallback.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/references/health-and-readiness.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/references/logging-and-structlog.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/references/outbound-metrics-and-multi-mode.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/references/pii-redaction.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/observability-and-logging/references/tracing-and-metrics.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/over-engineering-review/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/performance-optimization/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/planning-and-task-breakdown/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/playwright-verification/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/pydantic-schema-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/pydantic-schema-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/pydantic-schema-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/pydantic-schema-patterns/references/settings-and-validation.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/pydantic-schema-patterns/references/troubleshooting-and-common-errors.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/pydantic-schema-patterns/references/v1-vs-v2.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/references/advanced-query-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/references/basedao-and-sessions.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/references/mongodb-advanced.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/references/other-db-mongodb.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/python-dao-and-database/references/sqlalchemy-1x-vs-2x.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/radix-tailwind-component-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/radix-tailwind-component-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/radix-tailwind-component-patterns/references/radix-primitives-and-variants.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/radix-tailwind-component-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/radix-tailwind-component-patterns/references/tailwind-theme-and-cn.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/react-hook-form-zod-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/react-hook-form-zod-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/react-hook-form-zod-patterns/references/form-setup-and-zod.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/react-hook-form-zod-patterns/references/multi-step-and-modes.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/react-hook-form-zod-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/redis-caching-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/redis-caching-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/redis-caching-patterns/references/cache-manager-and-fallback.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/redis-caching-patterns/references/namespacing-and-invalidation.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/redis-caching-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/refresh-docs/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/remember/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/scope/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/scope/scope-template.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/sdlc/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/security-and-hardening/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/security-verification/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/shannon-ai-pentest/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/shannon-ai-pentest/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/shannon-ai-pentest/references/operating-guide.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/shipping-and-launch/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/simplification-debt/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/smoke-test/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/source-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/spec-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/sprint/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/sprint/sprint-template.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/tanstack-react-query-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/tanstack-react-query-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/tanstack-react-query-patterns/references/mutations-and-cache.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/tanstack-react-query-patterns/references/query-keys-and-hooks.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/tanstack-react-query-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/task-tracker-sync/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/references/config-and-retry-idempotency.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/references/dag-dsl-interpreter.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/references/schedule-registration.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/references/schedules-and-cron.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/temporal-config-driven/references/worker-workflow-activity-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/test-plan-review/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/async-and-mocking.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/coverage-gap-and-recommendations.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/github-actions-test-orchestration.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/pytest-and-fixtures.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/pytest-asyncio-modes.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/security-regression-tests.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/testing-conventions/references/vitest-frontend-testing.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/threat-model/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/triage/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/ui-ux-design/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/unit-test/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/using-agent-skills/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/vitest-rtl-msw-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/vitest-rtl-msw-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/vitest-rtl-msw-patterns/references/msw-and-contract-tests.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/vitest-rtl-msw-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/vitest-rtl-msw-patterns/references/vitest-rtl-setup.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zap-vapt-scanning/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zap-vapt-scanning/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zap-vapt-scanning/references/operating-guide.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zap-vapt-scanning/scripts/endpoints.example.txt +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zap-vapt-scanning/scripts/requirements.txt +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zap-vapt-scanning/scripts/zap_vapt.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zustand-state-patterns/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zustand-state-patterns/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zustand-state-patterns/references/async-polling-and-persistence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zustand-state-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/skills/zustand-state-patterns/references/store-structure-and-selectors.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/__main__.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/catalog.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/cli.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/hooks.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/models.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/pipeline.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/prompts.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/render.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/scaffold.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/upgrader.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/src/claude_kit/validator.py +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/CLAUDE.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/CLAUDE.stack.md.tmpl +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/CONTINUITY.template.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/README.claude-sdlc.md.tmpl +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/agent-memory/MEMORY.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/agent-memory/api/.gitkeep +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/agent-memory/architecture/.gitkeep +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/agent-memory/debugging/.gitkeep +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/agent-memory/gotchas/.gitkeep +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/agent-memory/patterns/.gitkeep +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/agent-memory/performance/.gitkeep +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/adr.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/api-change-report.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/change-proposal.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/feature-spec.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/release-plan.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/runbook.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/security-review.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/artifacts/test-plan.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/agents/data-workflow-agent.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/agents/founder-prototype-agent.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/agents/internal-tools-builder.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/agents/pm-copilot.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/agents/staff-pm-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/agents/support-ticket-engineer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/devops-and-release/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/devops-and-release/pack.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/engineering-core/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/engineering-core/pack.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/non-engineer-builder/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/non-engineer-builder/pack.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/onboarding-and-docs/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/onboarding-and-docs/pack.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/product-to-code/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/product-to-code/pack.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/quality-and-review/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/quality-and-review/pack.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/security-and-compliance/README.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/packs/security-and-compliance/pack.yaml +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/ai-working-agreement.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/ambiguity-resolution.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/branch-and-pr-policy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/compliance-policy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/non-engineer-safe-coding.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/pii-policy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/production-data-policy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/prompt-to-task-conversion.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/prototype-boundaries.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/rules/secrets-policy.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/customer-issue-to-fix/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/feature-from-idea/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/prompt-to-safe-task/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/prototype-to-production/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/repo-onboarding/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/review-scope/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/review-sprint/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/review-sprint-plan/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/org/skills/review-ux-flow/SKILL.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/settings.json +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/backend/go/net-http/rules/go-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/backend/python/fastapi/rules/fastapi-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/mongodb/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/mongodb/agents/mongodb-specialist.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/mongodb/rules/mongodb-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/postgres/agents/db-performance-reviewer.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/postgres/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/postgres/agents/postgres-specialist.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/postgres/rules/database-performance.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/db/postgres/rules/postgres-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/frontend/react/rules/design-system-compliance.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/frontend/react/rules/mobile-design-guidelines.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/frontend/react/rules/react-patterns.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/frontend/react/rules/ui-design-system.md +0 -0
- {claude_code_kit-0.36.0 → claude_code_kit-0.38.0}/templates/stacks/frontend/react/rules/ux-patterns.md +0 -0
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"name": "claude-kit",
|
|
11
11
|
"source": "./",
|
|
12
12
|
"description": "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC config (no app code, no Docker): install CLAUDE.md + .claude/ (rules, the profile's agents/skills, hooks, artifact templates) + optional .mcp.json, then run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop.",
|
|
13
|
-
"version": "0.
|
|
13
|
+
"version": "0.38.0",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"keywords": ["sdlc", "agents", "orchestration", "quality-gates", "workflow", "scaffold", "cookiecutter"]
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0",
|
|
4
4
|
"description": "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC config (no app code, no Docker). `claude-kit init` asks ordered questions and installs CLAUDE.md + .claude/ (rules, the profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates with working memory and a self-improving learnings loop.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Arjunsingh Yadav",
|
|
@@ -4,6 +4,47 @@ All notable changes to claude-kit are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/), and the project uses
|
|
5
5
|
[semantic versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [0.38.0] — 2026-06-26
|
|
8
|
+
|
|
9
|
+
**New `library-review` core skill + a property-based-testing note** (two genuinely-new ideas
|
|
10
|
+
cherry-picked, stack-agnostic, from the MIT [`wdm0006/python-skills`](https://github.com/wdm0006/python-skills);
|
|
11
|
+
the rest of that collection was skipped as redundant with existing core/collection skills).
|
|
12
|
+
|
|
13
|
+
- **`skills/library-review/`** (core — SKILL.md only, stack-agnostic) — a structured **pre-add
|
|
14
|
+
dependency-adoption evaluation**: need & fit, alternatives (stdlib/native/existing dep),
|
|
15
|
+
maintenance & bus factor, license compatibility, security/supply-chain history, transitive weight,
|
|
16
|
+
lock-in/exit cost, and a documented adopt/reject decision. Re-cast (health-signal dimensions
|
|
17
|
+
adapted from the MIT upstream's `reviewing-python-libraries`) as an *adoption* gate. Reuse-first:
|
|
18
|
+
cross-linked to and explicitly bounded against `mandatory-workflow.md` §2a.5 (whether a dep is
|
|
19
|
+
needed at all), `over-engineering-review`, the `dependency-scanner` agent (audits *installed* deps —
|
|
20
|
+
this is its pre-add counterpart), and `code-review-and-quality` (whose 5-point Dependency
|
|
21
|
+
Discipline list now points here as its full form).
|
|
22
|
+
- **`test-driven-development`** gains a **Property-Based Testing** section (count-neutral edit):
|
|
23
|
+
what it is, when to reach for it, the round-trip/idempotence/invariant/metamorphic property shapes,
|
|
24
|
+
and one-per-language ecosystem pointers (Hypothesis · fast-check · jqwik · proptest · …).
|
|
25
|
+
- Counts: **97 → 98** total skills (**51 → 52** core; stack-collection unchanged at 46). No
|
|
26
|
+
`docs/stack-skills` row (core skills aren't listed there). Version bumped across the 5 parity files.
|
|
27
|
+
|
|
28
|
+
## [0.37.0] — 2026-06-26
|
|
29
|
+
|
|
30
|
+
**New `temporal-developer` collection skill — Temporal *fundamentals*, language-agnostic** (re-derived
|
|
31
|
+
concisely from the official MIT [`temporalio/skill-temporal-developer`](https://github.com/temporalio/skill-temporal-developer);
|
|
32
|
+
nothing vendored, cross-checked against https://docs.temporal.io). Complements — does **not** duplicate —
|
|
33
|
+
the existing `temporal-config-driven` skill (which stays scoped to this kit's config-driven worker-map /
|
|
34
|
+
DAG-as-data architecture and *assumes* these fundamentals).
|
|
35
|
+
|
|
36
|
+
- **`skills/temporal-developer/`** (SKILL.md + README.md with MIT provenance) covers the durable-execution
|
|
37
|
+
model, **why workflows must be deterministic** (history replay → Command/Event matching), the
|
|
38
|
+
workflow/activity/worker split, Query vs Signal vs Update, and six compact references:
|
|
39
|
+
`determinism.md`, `versioning.md` (patching · workflow-type · worker/Build-ID versioning),
|
|
40
|
+
`testing.md` (local/time-skipping env, activity mocking, replay tests), `gotchas.md`,
|
|
41
|
+
`cli.md` (`temporal server start-dev` + the `workflow start/execute/signal/query/update` dev loop),
|
|
42
|
+
and `languages.md` (Python/Go/TypeScript starters + pointer to upstream Java/.NET/Ruby/Rust depth).
|
|
43
|
+
- **Auto-trigger boundary** wired both ways: each skill's `description` carries an explicit
|
|
44
|
+
`Do NOT use … → use <sibling>` clause, with reciprocal pointers in both SKILL.md/README.md bodies.
|
|
45
|
+
- Counts: **96 → 97** total skills (**45 → 46** stack-collection; core unchanged at 51), plus a new
|
|
46
|
+
`docs/stack-skills` catalog row. No catalog/stack/hook/agent changes (Temporal is a skill, not a stack axis).
|
|
47
|
+
|
|
7
48
|
## [0.36.0] — 2026-06-25
|
|
8
49
|
|
|
9
50
|
**Rule-presentation + context-hygiene polish** (patterns adopted from Karpathy-skills, addyosmani/agent-skills,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-kit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.38.0
|
|
4
4
|
Summary: Cookiecutter-style scaffolder for an autonomous Claude Code SDLC configuration (no app code, no Docker). Asks ordered questions and installs CLAUDE.md + .claude/ (rules, the chosen profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ajyadav013/claude-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/ajyadav013/claude-kit
|
|
@@ -84,7 +84,7 @@ Quick start) for the full breakdown of any row.
|
|
|
84
84
|
| 🔁 **Pipeline & quality gates** | Gate-enforced progression (zero open Critical/High/Medium to advance), per-profile gate sets, a fast-track for small changes, and an anti-sycophancy `devils-advocate` pass |
|
|
85
85
|
| 🤖 **Agent roster** | **28** tiered agents + per-database overlays + **6** org personas, led by an Orchestrator that never writes code |
|
|
86
86
|
| 🔍 **Self-verification & review** | RARV green-Verify (real commands, not imagined), blind parallel review, and read-only risk classification |
|
|
87
|
-
| 📐 **Rules & skills** | **23** stack-agnostic core rules (incl. 8 agent-operation rules) + **
|
|
87
|
+
| 📐 **Rules & skills** | **23** stack-agnostic core rules (incl. 8 agent-operation rules) + **98** context-activated skills (52 core + 46 stack-collection) |
|
|
88
88
|
| 🧱 **Stacks & overlays** | Stack-agnostic core + **10** overlay rule sets (React · FastAPI · Go · Postgres · Mongo) wired to your exact commands, incl. a full React design system |
|
|
89
89
|
| 🎚️ **Profiles, scopes & org** | **3** rigor profiles · **3** scopes · **5** autonomy levels · **7** org packs + **10** policy rules |
|
|
90
90
|
| 🧠 **Memory & learning** | Working memory across context compaction + a cost-aware learnings loop (`capture_mode`) so the same mistake isn't repeated |
|
|
@@ -281,7 +281,7 @@ need.
|
|
|
281
281
|
- **23 stack-agnostic core rules** in [`rules/`](rules/) — `mandatory-workflow`, `quality-gates`,
|
|
282
282
|
`rarv-cycle`, `continuity`, plus eight agent-operation rules and `autonomy-levels` +
|
|
283
283
|
`risk-classification` (see [`docs/agentic-patterns.md`](docs/agentic-patterns.md)).
|
|
284
|
-
- **
|
|
284
|
+
- **98 on-demand skills** in [`skills/`](skills/) (52 core + 46 stack-collection) — spec-driven dev, planning, TDD, debugging, code
|
|
285
285
|
review, threat modeling, and more — activated by context and led by the `sdlc` entrypoint.
|
|
286
286
|
- **Profile-subset install** — each profile installs a strict subset of agents, skills, hooks, and
|
|
287
287
|
rules (`lean ⊂ standard ⊂ enterprise`), from fast track to full audit.
|
|
@@ -437,7 +437,7 @@ owned gates, and the rule that **no gate passes on an unproven verdict**.
|
|
|
437
437
|
| **[wshobson/agents](https://github.com/wshobson/agents)** & similar agent collections | Large libraries of individual subagent prompts you pick from | A **smaller, opinionated set wired into a sequenced pipeline with owned quality gates** — agents aren't a menu, they're stages that hand off and block on each other. Adopt-by-reuse, not by accumulation. |
|
|
438
438
|
| **[GitHub spec-kit](https://github.com/github/spec-kit)** | A spec-driven workflow (constitution → spec → tasks → analyze) | The same coverage-gate idea (the `story-planner` 1f gate + `task-tracker-sync`) **absorbed into a broader** lifecycle that also covers review, security, build, test, release, and observability gates. Complementary, wider scope. |
|
|
439
439
|
| **claude-flow / multi-agent runtimes** | Runtime orchestrators that *execute* swarms of agents | **Portable configuration**, not a running process — the orchestration is described in rules the host (Claude Code) executes. No daemon, no lock-in, no app code. |
|
|
440
|
-
| **dotfiles / `CLAUDE.md` starters** | A single rules file or settings snippet | A **catalog-driven generator**: resolves your stack/profile/scope into the right subset of 23 rules, 28 agents,
|
|
440
|
+
| **dotfiles / `CLAUDE.md` starters** | A single rules file or settings snippet | A **catalog-driven generator**: resolves your stack/profile/scope into the right subset of 23 rules, 28 agents, 98 skills, gates, and hooks, kept **upgradeable** (`claude-kit upgrade` preserves your edits via owner + checksum). |
|
|
441
441
|
|
|
442
442
|
**Choose claude-kit when** you want a consistent, reviewable, **gate-enforced** autonomous-SDLC setup
|
|
443
443
|
that's the same across every repo and stack, installs in seconds, ships nothing you have to run, and
|
|
@@ -54,7 +54,7 @@ Quick start) for the full breakdown of any row.
|
|
|
54
54
|
| 🔁 **Pipeline & quality gates** | Gate-enforced progression (zero open Critical/High/Medium to advance), per-profile gate sets, a fast-track for small changes, and an anti-sycophancy `devils-advocate` pass |
|
|
55
55
|
| 🤖 **Agent roster** | **28** tiered agents + per-database overlays + **6** org personas, led by an Orchestrator that never writes code |
|
|
56
56
|
| 🔍 **Self-verification & review** | RARV green-Verify (real commands, not imagined), blind parallel review, and read-only risk classification |
|
|
57
|
-
| 📐 **Rules & skills** | **23** stack-agnostic core rules (incl. 8 agent-operation rules) + **
|
|
57
|
+
| 📐 **Rules & skills** | **23** stack-agnostic core rules (incl. 8 agent-operation rules) + **98** context-activated skills (52 core + 46 stack-collection) |
|
|
58
58
|
| 🧱 **Stacks & overlays** | Stack-agnostic core + **10** overlay rule sets (React · FastAPI · Go · Postgres · Mongo) wired to your exact commands, incl. a full React design system |
|
|
59
59
|
| 🎚️ **Profiles, scopes & org** | **3** rigor profiles · **3** scopes · **5** autonomy levels · **7** org packs + **10** policy rules |
|
|
60
60
|
| 🧠 **Memory & learning** | Working memory across context compaction + a cost-aware learnings loop (`capture_mode`) so the same mistake isn't repeated |
|
|
@@ -251,7 +251,7 @@ need.
|
|
|
251
251
|
- **23 stack-agnostic core rules** in [`rules/`](rules/) — `mandatory-workflow`, `quality-gates`,
|
|
252
252
|
`rarv-cycle`, `continuity`, plus eight agent-operation rules and `autonomy-levels` +
|
|
253
253
|
`risk-classification` (see [`docs/agentic-patterns.md`](docs/agentic-patterns.md)).
|
|
254
|
-
- **
|
|
254
|
+
- **98 on-demand skills** in [`skills/`](skills/) (52 core + 46 stack-collection) — spec-driven dev, planning, TDD, debugging, code
|
|
255
255
|
review, threat modeling, and more — activated by context and led by the `sdlc` entrypoint.
|
|
256
256
|
- **Profile-subset install** — each profile installs a strict subset of agents, skills, hooks, and
|
|
257
257
|
rules (`lean ⊂ standard ⊂ enterprise`), from fast track to full audit.
|
|
@@ -407,7 +407,7 @@ owned gates, and the rule that **no gate passes on an unproven verdict**.
|
|
|
407
407
|
| **[wshobson/agents](https://github.com/wshobson/agents)** & similar agent collections | Large libraries of individual subagent prompts you pick from | A **smaller, opinionated set wired into a sequenced pipeline with owned quality gates** — agents aren't a menu, they're stages that hand off and block on each other. Adopt-by-reuse, not by accumulation. |
|
|
408
408
|
| **[GitHub spec-kit](https://github.com/github/spec-kit)** | A spec-driven workflow (constitution → spec → tasks → analyze) | The same coverage-gate idea (the `story-planner` 1f gate + `task-tracker-sync`) **absorbed into a broader** lifecycle that also covers review, security, build, test, release, and observability gates. Complementary, wider scope. |
|
|
409
409
|
| **claude-flow / multi-agent runtimes** | Runtime orchestrators that *execute* swarms of agents | **Portable configuration**, not a running process — the orchestration is described in rules the host (Claude Code) executes. No daemon, no lock-in, no app code. |
|
|
410
|
-
| **dotfiles / `CLAUDE.md` starters** | A single rules file or settings snippet | A **catalog-driven generator**: resolves your stack/profile/scope into the right subset of 23 rules, 28 agents,
|
|
410
|
+
| **dotfiles / `CLAUDE.md` starters** | A single rules file or settings snippet | A **catalog-driven generator**: resolves your stack/profile/scope into the right subset of 23 rules, 28 agents, 98 skills, gates, and hooks, kept **upgradeable** (`claude-kit upgrade` preserves your edits via owner + checksum). |
|
|
411
411
|
|
|
412
412
|
**Choose claude-kit when** you want a consistent, reviewable, **gate-enforced** autonomous-SDLC setup
|
|
413
413
|
that's the same across every repo and stack, installs in seconds, ships nothing you have to run, and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Production Engineering Skills Collection
|
|
2
2
|
|
|
3
|
-
These forty-
|
|
3
|
+
These forty-six Claude Code skills encode production-proven engineering conventions derived from real-world Python/FastAPI, Node/Express, and React services. Each skill was extracted from analyzing patterns across multiple production backend and frontend services, capturing canonical patterns for FastAPI microservices, async Python, Kafka/Temporal integration, multi-tenancy, database access, layered configuration, Redis caching, GCS file handling, LLM integration (Vertex AI / Langfuse), Node/Express services, React frontends (state, data-fetching, forms, design systems, testing), observability (including Grafana dashboards & unified alerting), authentication, containerization (with granular Dockerfile/compose deep-dives), testing, data pipelines, security scanning (OWASP ZAP VAPT/DAST and autonomous AI pentesting), security architecture (edge-to-service signed-identity trust boundary, Kubernetes workload hardening), scheduled & recurring jobs (Kubernetes CronJob + Temporal Schedule), kubectl day-2 operations, and modernization strategies. Use them to align new projects with established patterns, audit existing services, or onboard engineers to modern Python, Node, and React development practices.
|
|
4
4
|
|
|
5
5
|
> **Where these live in this repo:** the skill folders are under [`skills/`](../../skills/) (auto-discovered by the claude-kit plugin). The links below point there.
|
|
6
6
|
|
|
@@ -15,6 +15,7 @@ These forty-five Claude Code skills encode production-proven engineering convent
|
|
|
15
15
|
| **async-python-patterns** | Async Python best practices — asyncio coordination (gather/wait_for/TaskGroup), cancellation handling, resource lifecycle, connection pool management, structured concurrency | [SKILL.md](../../skills/async-python-patterns/SKILL.md) |
|
|
16
16
|
| **kafka-config-driven** | Config-driven Kafka producer/consumer infrastructure — JSON DSL topic/consumer config, message handling abstraction, aiokafka vs confluent_kafka, GSSAPI/SASL_SSL auth | [SKILL.md](../../skills/kafka-config-driven/SKILL.md) |
|
|
17
17
|
| **temporal-config-driven** | Config-driven Temporal workflow/activity orchestration — JSON DSL workflow registry, worker launcher, schedule/cron management, RetryPolicy patterns | [SKILL.md](../../skills/temporal-config-driven/SKILL.md) |
|
|
18
|
+
| **temporal-developer** | Temporal *fundamentals* (language-agnostic; complement to temporal-config-driven) — durable execution, why workflows must be deterministic (history replay), signals/queries/updates, safe versioning of running workflows (patching/worker versioning), testing (time-skipping/replay), gotchas, the `temporal` CLI dev loop, + Python/Go/TS starters; re-derived from the MIT temporalio/skill-temporal-developer | [SKILL.md](../../skills/temporal-developer/SKILL.md) |
|
|
18
19
|
| **frontend-repo-architecture** | React + Vite + TypeScript frontend structure — three organizational models (module-scoped, feature-sliced, GraphQL-based), API layer strategies, hand-written types, state management | [SKILL.md](../../skills/frontend-repo-architecture/SKILL.md) |
|
|
19
20
|
| **design-patterns-and-conventions** | Design conventions across repos — naming (classes/files/routes), error handling (ResponseData envelope), config hierarchy, logging structured-log patterns, code organization | [SKILL.md](../../skills/design-patterns-and-conventions/SKILL.md) |
|
|
20
21
|
| **multi-tenancy-patterns** | Multi-tenant isolation strategies — tenant resolution (header/JWT/session), Postgres RLS, multi-pool databases, lazy connectors, data-layer org_id tenancy | [SKILL.md](../../skills/multi-tenancy-patterns/SKILL.md) |
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "claude-code-kit"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.38.0"
|
|
8
8
|
description = "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC configuration (no app code, no Docker). Asks ordered questions and installs CLAUDE.md + .claude/ (rules, the chosen profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -280,6 +280,8 @@ Part of code review is dependency review:
|
|
|
280
280
|
|
|
281
281
|
**Rule:** Prefer standard library and existing utilities over new dependencies. Every dependency is a liability.
|
|
282
282
|
|
|
283
|
+
For a full pre-add evaluation of a specific candidate (maintenance/bus-factor, license, supply-chain history, transitive weight, lock-in, adopt/reject decision), use the `library-review` skill — this 5-point list is its quick form.
|
|
284
|
+
|
|
283
285
|
## The Review Checklist
|
|
284
286
|
|
|
285
287
|
```markdown
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: library-review
|
|
3
|
+
description: Structured pre-add evaluation of a candidate third-party dependency before you adopt it—need & fit, alternatives (stdlib/native/existing dep), maintenance & bus factor, adoption signals, license compatibility, security & supply-chain history, install weight & transitive deps, lock-in/exit cost, and a documented adopt/reject decision. Stack-agnostic (pip, npm, cargo, go modules, maven, gems, …). Use when proposing or choosing between new libraries, or when mandatory-workflow §2a.5 rung 5 ("can an existing dependency do it?") points at pulling in a new one. Do NOT use to decide whether you need a dependency at all (use the §2a.5 reuse/YAGNI gate + over-engineering-review) or to audit ALREADY-installed dependencies for CVEs (use the dependency-scanner agent).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Library Review (pre-add dependency evaluation)
|
|
7
|
+
|
|
8
|
+
> Health-signal dimensions adapted (stack-agnostic, re-cast as an *adoption* decision) from the
|
|
9
|
+
> MIT-licensed [`wdm0006/python-skills`](https://github.com/wdm0006/python-skills)
|
|
10
|
+
> `reviewing-python-libraries` skill (© Will McGinnis). That skill audits a library's *own* quality
|
|
11
|
+
> for publishing; this one turns the same signals into a **"should we take on this dependency?"** gate.
|
|
12
|
+
|
|
13
|
+
## What this is (and is not)
|
|
14
|
+
|
|
15
|
+
Adding a dependency is a long-lived liability: it ships its bugs, its CVEs, its license, its
|
|
16
|
+
maintainer's availability, and its transitive tree into your project, and removing it later is rarely
|
|
17
|
+
free. This skill is the **structured evaluation you run before adopting a specific candidate** — or
|
|
18
|
+
when choosing between two or three.
|
|
19
|
+
|
|
20
|
+
It is deliberately scoped, and it composes with three things already in the kit — use those first /
|
|
21
|
+
alongside, don't duplicate them:
|
|
22
|
+
|
|
23
|
+
- **Do we even need a new dependency?** That is the **§2a.5 Reuse & YAGNI Gate**
|
|
24
|
+
(`.claude/rules/mandatory-workflow.md`) and the `over-engineering-review` skill — walk the ladder
|
|
25
|
+
(need it at all? → in the codebase? → stdlib? → native platform? → an *existing* dependency?) and
|
|
26
|
+
only reach this skill once a *new* dependency is genuinely on the table.
|
|
27
|
+
- **Auditing dependencies you have ALREADY installed** for known CVEs / outdated versions is the
|
|
28
|
+
`dependency-scanner` agent. This skill is its **pre-add counterpart** — it runs *before* the
|
|
29
|
+
dependency is in the lockfile.
|
|
30
|
+
- The 5-point "Before adding any dependency" list in `code-review-and-quality` is the quick form;
|
|
31
|
+
this skill is its full expansion.
|
|
32
|
+
|
|
33
|
+
## When to use
|
|
34
|
+
|
|
35
|
+
- A new third-party dependency is being proposed (by you or in review)
|
|
36
|
+
- Choosing between 2–3 candidate libraries for the same need
|
|
37
|
+
- §2a.5 rung 5 surfaced a *new* dependency as the cheapest option
|
|
38
|
+
- A dependency upgrade crosses a major version, changes its license, or changes maintainership
|
|
39
|
+
|
|
40
|
+
**When NOT to use:** deciding *whether* you need a dependency (→ §2a.5 / `over-engineering-review`);
|
|
41
|
+
scanning installed deps for CVEs (→ `dependency-scanner`); reviewing your *own* code (→
|
|
42
|
+
`code-review-and-quality`).
|
|
43
|
+
|
|
44
|
+
## Evaluation dimensions
|
|
45
|
+
|
|
46
|
+
Score each; a single hard failure (incompatible license, unpatched critical CVE, abandoned) is
|
|
47
|
+
disqualifying regardless of the rest.
|
|
48
|
+
|
|
49
|
+
| Dimension | What to check | Disqualifier |
|
|
50
|
+
|-----------|---------------|--------------|
|
|
51
|
+
| **Need & fit** | Does it solve the *actual* problem, not a superset? How much of its API will you really use? | You'd use 5% of a large lib for one function |
|
|
52
|
+
| **Alternatives** | stdlib / native platform feature / an already-installed dep / ~20 lines of your own | A cheaper rung of §2a.5 satisfies it |
|
|
53
|
+
| **Maintenance & bus factor** | Recent commits, release cadence, issue/PR responsiveness, number of active maintainers, is it archived/deprecated? | Abandoned (no commits ~1yr), sole unresponsive maintainer, archived |
|
|
54
|
+
| **Adoption & trust** | Real-world usage; downloads/dependents as *weak* signals (not popularity contests); who else relies on it | Effectively unused / no track record for critical use |
|
|
55
|
+
| **License** | Compatible with *your* project's license and distribution model. Copyleft (GPL/AGPL) vs permissive (MIT/BSD/Apache); transitive licenses too. A copyleft dep in a permissive project may mean *document, don't vendor* | Incompatible / missing license |
|
|
56
|
+
| **Security & supply chain** | CVE/advisory history *and how fast they're patched*; signed/2FA'd releases; typosquat/name-confusion check; provenance | Unpatched critical CVE; suspicious provenance |
|
|
57
|
+
| **Weight & transitive deps** | Install/bundle/binary size; count and quality of transitive deps (each is its own liability); platform/runtime support | Huge transitive blast radius for a small need |
|
|
58
|
+
| **API fit & lock-in** | Idiomatic for your stack? Type stubs/typings? How deeply would it thread through your code — i.e. exit cost? | Pervasive lock-in with no seam to swap it |
|
|
59
|
+
| **Operational fit** | Compatible version range with your runtime/other deps; maintenance burden of pinning/upgrading | Conflicts with existing pinned deps |
|
|
60
|
+
|
|
61
|
+
## Red flags 🚩 / Green flags ✅
|
|
62
|
+
|
|
63
|
+
**🚩** No tests · no license · last release long ago · single unresponsive maintainer · exact-pins
|
|
64
|
+
everything (fragile) · heavy transitive tree for a tiny need · unpatched advisories · you'd vendor
|
|
65
|
+
just one helper from it.
|
|
66
|
+
|
|
67
|
+
**✅** Active, regular releases · clear changelog + semver · permissive compatible license · security
|
|
68
|
+
scanning / signed releases · small focused surface · typings available · several reputable dependents.
|
|
69
|
+
|
|
70
|
+
## The decision
|
|
71
|
+
|
|
72
|
+
Conclude explicitly — never let a dependency slip in undecided:
|
|
73
|
+
|
|
74
|
+
1. **Adopt** — passes every dimension; pin sensibly and move on.
|
|
75
|
+
2. **Adopt behind a seam** — acceptable but with real lock-in/risk → wrap it behind a thin interface
|
|
76
|
+
so it can be swapped, and note the exit path.
|
|
77
|
+
3. **Reject** — a disqualifier fires, or a cheaper §2a.5 rung wins → record what you'll do instead.
|
|
78
|
+
|
|
79
|
+
**Adding a dependency needs user approval** (per §2a.5 rung 5 / mandatory-workflow 2a). Record the
|
|
80
|
+
decision and its rationale where future readers will find it — an ADR via `documentation-and-adrs`
|
|
81
|
+
for a consequential one, or at minimum a line in the PR / change proposal. A rejected candidate is
|
|
82
|
+
worth recording too, so the question isn't re-litigated.
|
|
83
|
+
|
|
84
|
+
## Quick checklist
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
- [ ] §2a.5 walked first — a new dependency is genuinely the cheapest rung
|
|
88
|
+
- [ ] Need & fit: solves the real problem; we use a meaningful share of it
|
|
89
|
+
- [ ] No cheaper alternative (stdlib / native / existing dep / a few lines)
|
|
90
|
+
- [ ] Actively maintained; bus factor > 1; not archived/deprecated
|
|
91
|
+
- [ ] License compatible with the project (incl. transitive)
|
|
92
|
+
- [ ] No unpatched critical/high CVEs; releases are patched promptly
|
|
93
|
+
- [ ] Transitive-dep weight acceptable for the value gained
|
|
94
|
+
- [ ] Lock-in understood; seam added if exit cost is high
|
|
95
|
+
- [ ] User approval obtained; decision + rationale recorded
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Related
|
|
99
|
+
|
|
100
|
+
- `.claude/rules/mandatory-workflow.md` (§2a.5 Reuse & YAGNI Gate) — the gate that decides *whether* a dep is needed
|
|
101
|
+
- `over-engineering-review` — reactive twin of §2a.5; stdlib/native/yagni lenses
|
|
102
|
+
- `dependency-scanner` agent — audits *already-installed* deps for CVEs (this skill's post-add counterpart)
|
|
103
|
+
- `code-review-and-quality` (Dependency Discipline) — the quick 5-point form of this evaluation
|
|
104
|
+
- `documentation-and-adrs` — record a consequential adopt/reject as an ADR
|
|
@@ -11,6 +11,14 @@ Temporal workflow orchestration patterns derived from real-world production Pyth
|
|
|
11
11
|
- **Dynamic worker generation** for matrix-based workers (e.g., file_type × business_unit)
|
|
12
12
|
- **Graceful shutdown** patterns (SIGTERM/SIGINT handling in worker processes)
|
|
13
13
|
|
|
14
|
+
## Related skill
|
|
15
|
+
|
|
16
|
+
For Temporal **fundamentals** — durable execution, why workflows must be deterministic (history
|
|
17
|
+
replay), safely changing running workflows (patching/worker versioning), testing
|
|
18
|
+
(time-skipping/replay), signals/queries/updates, and non-Python SDKs — use the complementary
|
|
19
|
+
**`temporal-developer`** skill. This skill assumes those fundamentals and focuses on the
|
|
20
|
+
config-driven worker-map / DAG-as-data architecture.
|
|
21
|
+
|
|
14
22
|
## Source provenance
|
|
15
23
|
|
|
16
24
|
Derived from real-world production Python/FastAPI services implementing Temporal orchestration at scale.
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: temporal-config-driven
|
|
3
|
-
description: Encodes Temporal workflow orchestration patterns derived from production Python/FastAPI services—config-driven worker maps, workflow/activity definitions, retry policies, idempotency via activity_id, cron-based schedules, and DAG-based config-as-data orchestration. Use when implementing or debugging
|
|
3
|
+
description: Encodes Temporal workflow orchestration patterns derived from production Python/FastAPI services—config-driven worker maps, workflow/activity definitions, retry policies, idempotency via activity_id, cron-based schedules, and DAG-based config-as-data orchestration. Use when implementing or debugging this kit's config-driven Temporal architecture (WORKER_MODE_CONFIG_MAP, _execute_dag/NODE_TYPE_MAP, schedule registration), worker bootstrap with graceful shutdown, or DAG-based config-as-data orchestration systems. Do NOT use for Temporal fundamentals (determinism/history replay, safe versioning of running workflows, testing, signals/queries/updates) or non-Python SDKs—use temporal-developer for those.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# temporal-config-driven
|
|
7
7
|
|
|
8
8
|
Temporal workflow orchestration using config-driven worker maps and DAG-based execution.
|
|
9
9
|
|
|
10
|
+
> **Fundamentals live elsewhere.** This skill is the *config-driven architecture* layer and assumes
|
|
11
|
+
> you already understand durable execution. For Temporal **fundamentals** — why workflows must be
|
|
12
|
+
> deterministic (history replay), safely versioning running workflows, testing (time-skipping/replay),
|
|
13
|
+
> signals/queries/updates, and non-Python SDKs — use the **`temporal-developer`** skill. They are
|
|
14
|
+
> complementary.
|
|
15
|
+
|
|
10
16
|
## When to use
|
|
11
17
|
|
|
12
18
|
- Implementing Temporal workers with mode-based configuration (WORKER_MODE_CONFIG_MAP)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# temporal-developer
|
|
2
|
+
|
|
3
|
+
Temporal **fundamentals** for durable execution, language-agnostic: the workflow/activity/worker
|
|
4
|
+
split, why workflows must be deterministic (history replay), signals/queries/updates, child
|
|
5
|
+
workflows, saga, continue-as-new, retry/timeout/cancellation, safe versioning of running workflows,
|
|
6
|
+
testing, and the `temporal` CLI dev loop.
|
|
7
|
+
|
|
8
|
+
This is the conceptual layer *underneath* a Temporal codebase. It is **complementary** to this kit's
|
|
9
|
+
`temporal-config-driven` skill, which encodes a specific config-driven worker-map / DAG-as-data
|
|
10
|
+
architecture and assumes these fundamentals. See each skill's `description` for the auto-trigger
|
|
11
|
+
boundary.
|
|
12
|
+
|
|
13
|
+
## Source provenance
|
|
14
|
+
|
|
15
|
+
Re-derived **concisely, in claude-kit's own idiom** from the official, MIT-licensed
|
|
16
|
+
[`temporalio/skill-temporal-developer`](https://github.com/temporalio/skill-temporal-developer)
|
|
17
|
+
(© Temporal Technologies Inc., MIT License). **Nothing is vendored** — the upstream reference files
|
|
18
|
+
were read for grounding and the concepts paraphrased into compact notes, with cross-checks against
|
|
19
|
+
the public Temporal docs (https://docs.temporal.io).
|
|
20
|
+
|
|
21
|
+
The upstream skill is the **authority** and carries the full per-language depth (Python, TypeScript,
|
|
22
|
+
Go, Java, .NET, Ruby, Rust) plus integrations and ops material. These notes deliberately stay lean
|
|
23
|
+
and point back to it; when the two disagree, trust upstream.
|
|
24
|
+
|
|
25
|
+
## How to apply
|
|
26
|
+
|
|
27
|
+
1. **Read `SKILL.md`** for the durable-execution model and the workflow/activity/worker rules — the
|
|
28
|
+
ideas every Temporal codebase depends on.
|
|
29
|
+
2. **Hit a non-determinism / command-mismatch error?** Go straight to
|
|
30
|
+
[`references/determinism.md`](references/determinism.md).
|
|
31
|
+
3. **Changing a workflow with in-flight executions?** Use
|
|
32
|
+
[`references/versioning.md`](references/versioning.md) before you touch the Command sequence.
|
|
33
|
+
4. **Writing tests?** Use [`references/testing.md`](references/testing.md) (time-skipping env, replay
|
|
34
|
+
tests, activity mocking).
|
|
35
|
+
5. **Need the full per-language API?** Use [`references/languages.md`](references/languages.md) for
|
|
36
|
+
compact starters, then follow the upstream link for your SDK.
|
|
37
|
+
6. **For this kit's config-driven worker maps / DAG interpreter / cron schedules**, use the sibling
|
|
38
|
+
`temporal-config-driven` skill instead.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: temporal-developer
|
|
3
|
+
description: Temporal fundamentals for durable execution across languages (Python, Go, TypeScript, Java, .NET, Ruby, Rust)—the workflow/activity/worker split, why workflows must be deterministic (history replay), signals/queries/updates, child workflows, saga/compensation, continue-as-new, timers, retry policies, cancellation/heartbeating, safe versioning of running workflows (patching, worker versioning), testing (time-skipping, replay tests, activity mocking), and the temporal CLI dev loop. Use when building or debugging Temporal workflows/activities/workers, fixing non-determinism errors, or deciding how to change running workflows safely. Do NOT use for this kit's config-driven worker-map / DAG-as-data orchestration engine (WORKER_MODE_CONFIG_MAP, _execute_dag, NODE_TYPE_MAP, schedule registration)—use temporal-config-driven for that.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# temporal-developer
|
|
7
|
+
|
|
8
|
+
Temporal **fundamentals**: how durable execution actually works, and the rules you must follow to
|
|
9
|
+
build correct workflows in any Temporal SDK. This is the conceptual layer underneath any
|
|
10
|
+
Temporal codebase — read it before writing workflow code, and reach for it when a workflow throws a
|
|
11
|
+
non-determinism error or you need to change code that running workflows depend on.
|
|
12
|
+
|
|
13
|
+
> **Sibling boundary.** `temporal-config-driven` covers *this kit's* specific config-driven
|
|
14
|
+
> architecture (mode→worker maps, the DAG-as-data interpreter, idempotency-via-`activity_id`,
|
|
15
|
+
> cron schedule registration). It **assumes** the fundamentals below. If you are wiring
|
|
16
|
+
> `WORKER_MODE_CONFIG_MAP`, `_execute_dag`, or `register_schedules`, use that skill. If you are
|
|
17
|
+
> learning *why workflows replay*, fixing determinism, versioning a live workflow, or working in a
|
|
18
|
+
> non-Python SDK, use **this** one. They are complementary, not duplicates.
|
|
19
|
+
|
|
20
|
+
## When to use
|
|
21
|
+
|
|
22
|
+
- Building your first workflow / activity / worker, or onboarding a new SDK language
|
|
23
|
+
- A workflow raised a **non-determinism / command-mismatch error** (see `references/determinism.md`)
|
|
24
|
+
- You need to change a workflow that has **in-flight executions** without breaking them (`references/versioning.md`)
|
|
25
|
+
- Writing tests for workflows — time-skipping, replay tests, activity mocking (`references/testing.md`)
|
|
26
|
+
- Choosing between **Signal, Query, and Update**, or adding child workflows / saga / continue-as-new
|
|
27
|
+
- Setting retry policies, timeouts, cancellation + heartbeating correctly
|
|
28
|
+
- Driving workflows from the `temporal` CLI during the dev loop (`references/cli.md`)
|
|
29
|
+
|
|
30
|
+
## The durable-execution model (the one idea everything rests on)
|
|
31
|
+
|
|
32
|
+
A Temporal **Workflow** is ordinary code whose execution is made *durable*: it survives process
|
|
33
|
+
crashes, deploys, and machine loss, and can sleep for months. It achieves this not by checkpointing
|
|
34
|
+
memory but by **replaying code against an Event History**.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Workflow code runs ──> emits Commands ──> Server records them as Events (the History)
|
|
38
|
+
Worker dies / cache evicts / long timer fires
|
|
39
|
+
Worker re-runs the SAME code from the top ──> for each Command, the SDK matches it to the
|
|
40
|
+
recorded Event and feeds back the stored result ──> state is reconstructed, execution continues
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Three consequences fall directly out of replay — internalize these:
|
|
44
|
+
|
|
45
|
+
1. **Workflow code must be deterministic.** Same inputs + same history ⇒ identical sequence of
|
|
46
|
+
Commands, every replay. Wall-clock time, `random`, UUIDs, env vars, file/network I/O, and
|
|
47
|
+
unordered map iteration all break this. → `references/determinism.md`.
|
|
48
|
+
2. **All non-determinism and all side effects belong in Activities.** An **Activity** is a plain
|
|
49
|
+
function that runs *once*, outside replay, with at-least-once execution, automatic retries, and
|
|
50
|
+
timeouts. Workflows *orchestrate*; Activities *do the I/O*. Because activities can run more than
|
|
51
|
+
once, they must be **idempotent** (use an idempotency key).
|
|
52
|
+
3. **Changing workflow code can break replay.** New code that emits a different Command sequence than
|
|
53
|
+
the recorded history fails open executions. Use **patching** or **worker versioning** to change
|
|
54
|
+
live workflows safely. → `references/versioning.md`.
|
|
55
|
+
|
|
56
|
+
### Workflow vs Activity vs Worker
|
|
57
|
+
|
|
58
|
+
| Piece | What it is | Rules |
|
|
59
|
+
|-------|-----------|-------|
|
|
60
|
+
| **Workflow** | Orchestration logic; deterministic; replayed | No I/O, no clock/random/UUID except SDK-safe variants; only orchestrate |
|
|
61
|
+
| **Activity** | A unit of real work (I/O, compute); runs once per attempt | Must be idempotent; gets retries + timeouts; heartbeat if long-running |
|
|
62
|
+
| **Worker** | Process that polls a **task queue** and runs your workflow + activity code | All workers on a queue must run *identical* code (else replay mismatch) |
|
|
63
|
+
|
|
64
|
+
### Talking to a running workflow — Query vs Signal vs Update
|
|
65
|
+
|
|
66
|
+
| Operation | Modifies state? | Returns a result? | May block? | Use for |
|
|
67
|
+
|-----------|-----------------|-------------------|-----------|---------|
|
|
68
|
+
| **Query** | No | Yes | No | Read current state (read-only — never mutate) |
|
|
69
|
+
| **Signal** | Yes | No | Yes | Fire-and-forget input/mutation |
|
|
70
|
+
| **Update** | Yes | Yes | Yes | A mutation that must return a result |
|
|
71
|
+
|
|
72
|
+
> Mnemonic: **Query to peek, Signal to push, Update to pop.** Queries and update *validators* are
|
|
73
|
+
> strictly read-only — mutating in them is non-deterministic on replay.
|
|
74
|
+
|
|
75
|
+
## References
|
|
76
|
+
|
|
77
|
+
- [determinism.md](references/determinism.md) — replay mechanics, what workflow code may/may not do, SDK protection levels, recovery
|
|
78
|
+
- [versioning.md](references/versioning.md) — patching API, workflow-type versioning, worker (Build ID) versioning; when *not* to patch
|
|
79
|
+
- [testing.md](references/testing.md) — local/time-skipping environment, activity mocking, signal/query/update tests, replay tests
|
|
80
|
+
- [gotchas.md](references/gotchas.md) — the highest-leverage cross-language anti-patterns and their fixes
|
|
81
|
+
- [cli.md](references/cli.md) — `temporal server start-dev` + `workflow start/execute/signal/query/update` dev loop
|
|
82
|
+
- [languages.md](references/languages.md) — compact Python/Go/TypeScript starters + pointer to upstream per-language depth (Java/.NET/Ruby/Rust + AI integrations)
|
|
83
|
+
|
|
84
|
+
## Upstream (authoritative, full 7-language depth)
|
|
85
|
+
|
|
86
|
+
These references are **re-derived concisely** in this kit's idiom from the official, MIT-licensed
|
|
87
|
+
**`temporalio/skill-temporal-developer`**. For exhaustive per-language guides (Python · TypeScript ·
|
|
88
|
+
Go · Java · .NET · Ruby · Rust), integrations (OpenAI Agents SDK, Google ADK, …), and ops-grade
|
|
89
|
+
material, go to the source — it is the authority and is kept current by Temporal:
|
|
90
|
+
|
|
91
|
+
- Repo: https://github.com/temporalio/skill-temporal-developer
|
|
92
|
+
- Docs: https://docs.temporal.io
|
|
93
|
+
|
|
94
|
+
When upstream and these notes disagree, trust upstream and update this skill.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# `temporal` CLI — the developer dev loop
|
|
2
|
+
|
|
3
|
+
The same commands work against the dev server, a self-hosted cluster, or Temporal Cloud — only the
|
|
4
|
+
connection descriptor changes. **Always pass `--output json`** so output is parseable.
|
|
5
|
+
|
|
6
|
+
## Dev server
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
temporal server start-dev # in-memory, single process — DEV ONLY
|
|
10
|
+
temporal server start-dev --db-filename temporal.db # persist state across restarts
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Loses all state on restart unless `--db-filename` is set; never use it for production. Default
|
|
14
|
+
frontend address is `localhost:7233`; the Web UI is served too (default `localhost:8233`).
|
|
15
|
+
|
|
16
|
+
## Start vs execute
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Start asynchronously — returns Workflow ID + Run ID immediately
|
|
20
|
+
temporal workflow start --output json \
|
|
21
|
+
--type YourWorkflow --task-queue YourTaskQueue \
|
|
22
|
+
--workflow-id YourId --input '{"k": "v"}'
|
|
23
|
+
|
|
24
|
+
# Start AND block until completion — streams progress; non-zero exit = failed/cancelled/timed out
|
|
25
|
+
temporal workflow execute --output json \
|
|
26
|
+
--type YourWorkflow --task-queue YourTaskQueue --input '{"k": "v"}'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`--type` and `--task-queue` are required; `--workflow-id` is optional (server generates a UUID).
|
|
30
|
+
`execute` is ideal for one-shot smoke tests in the dev loop. Useful start flags: `--id-reuse-policy`
|
|
31
|
+
(`AllowDuplicate` | `AllowDuplicateFailedOnly` | `RejectDuplicate` | `TerminateIfRunning`),
|
|
32
|
+
`--id-conflict-policy` (`Fail` | `UseExisting` | `TerminateExisting`), `--execution-timeout` /
|
|
33
|
+
`--run-timeout`, `--search-attribute KEY=VALUE`, `--cron` (legacy — prefer `temporal schedule create`).
|
|
34
|
+
|
|
35
|
+
## Interacting with a running workflow
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Signal (fire-and-forget mutation)
|
|
39
|
+
temporal workflow signal --output json -w YourId --name YourSignal --input '{"k":"v"}'
|
|
40
|
+
|
|
41
|
+
# Query (read-only; works on running AND completed workflows)
|
|
42
|
+
temporal workflow query --output json -w YourId --name YourQuery
|
|
43
|
+
|
|
44
|
+
# Update is a COMMAND GROUP, not one command:
|
|
45
|
+
temporal workflow update execute -w YourId --name YourUpdate --input '{"k":"v"}' # start + wait for result
|
|
46
|
+
temporal workflow update start -w YourId --name YourUpdate --wait-for-stage accepted # start + wait for accept
|
|
47
|
+
temporal workflow update result -w YourId --update-id YourUpdateId # fetch a prior update's result
|
|
48
|
+
temporal workflow update describe -w YourId --update-id YourUpdateId # status
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Gotchas: `--wait-for-stage` on `update start` only accepts `accepted`; `update` alone does nothing.
|
|
52
|
+
|
|
53
|
+
## Inspecting & dev-only lifecycle
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
temporal workflow show --output json -w YourId # full Event History (save for replay tests)
|
|
57
|
+
temporal workflow list --output json --query '<visibility query>'
|
|
58
|
+
temporal workflow terminate -w YourId # DEV ONLY — kill a stale execution
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`workflow show --output json` is how you capture a history to feed a **replay test** (`testing.md`).
|
|
62
|
+
For bulk operations (`--query` batch signal/terminate), schedules, and ops tooling, see the upstream
|
|
63
|
+
`skill-temporal-developer` references and `skill-temporal-ops`.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Determinism (why workflows replay, and the rules that follow)
|
|
2
|
+
|
|
3
|
+
Workflows are durable because Workers **re-execute the workflow code from the top** to rebuild state
|
|
4
|
+
— after a crash, a cache eviction, or when a long timer fires. Instead of re-running side effects,
|
|
5
|
+
the SDK matches each operation your code emits (a **Command**) against the recorded **Event History**
|
|
6
|
+
and feeds back the stored result.
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
First run: code → Commands → Server stores Events
|
|
10
|
+
Replay: code runs again → Commands compared to stored Events
|
|
11
|
+
match → reuse stored result, continue
|
|
12
|
+
differ → NondeterminismError (workflow blocks until code is fixed)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Every orchestration operation maps Command → Event, e.g.:
|
|
16
|
+
|
|
17
|
+
| Workflow code | Command | Event |
|
|
18
|
+
|-------------------|-------------------------------|--------------------------------|
|
|
19
|
+
| Execute activity | `ScheduleActivityTask` | `ActivityTaskScheduled` |
|
|
20
|
+
| Sleep / timer | `StartTimer` | `TimerStarted` |
|
|
21
|
+
| Child workflow | `StartChildWorkflowExecution` | `ChildWorkflowExecutionStarted`|
|
|
22
|
+
| Complete workflow | `CompleteWorkflowExecution` | `WorkflowExecutionCompleted` |
|
|
23
|
+
|
|
24
|
+
If replayed code emits a *different* Command than history recorded (or in a different order), replay
|
|
25
|
+
fails. Classic trap: branching on wall-clock time — `if now().hour < 12` takes one branch at first
|
|
26
|
+
run and the other on replay, producing a different `ScheduleActivityTask`.
|
|
27
|
+
|
|
28
|
+
## Sources of non-determinism (keep all of these OUT of workflow code)
|
|
29
|
+
|
|
30
|
+
- **Time**: `now()`, `time.time()`, `Date.now()`
|
|
31
|
+
- **Randomness / IDs**: `random()`, `Math.random()`, `uuid4()`
|
|
32
|
+
- **External state**: files, env vars, DBs, HTTP/network calls
|
|
33
|
+
- **Unordered iteration**: map/dict/set iteration order (language-dependent)
|
|
34
|
+
- **Concurrency/threads**: races that change ordering or outcome
|
|
35
|
+
|
|
36
|
+
## The central rule
|
|
37
|
+
|
|
38
|
+
**Put non-determinism and side effects in Activities.** An Activity runs *once per attempt* outside
|
|
39
|
+
replay, with durable recorded results, automatic retries, and timeouts. The workflow only
|
|
40
|
+
orchestrates. For a few common cases the SDK gives you replay-safe variants to use *inside* the
|
|
41
|
+
workflow instead of an activity — durable time, sleep, UUID, random, and a replay-aware logger
|
|
42
|
+
(e.g. `workflow.now()`, `workflow.sleep()`, `workflow.uuid4()`, `workflow.logger`; names vary by
|
|
43
|
+
SDK). Everything else → an activity.
|
|
44
|
+
|
|
45
|
+
## How much the SDK protects you (varies by language)
|
|
46
|
+
|
|
47
|
+
- **Python** — sandbox intercepts and aborts many non-deterministic calls *at runtime*, early.
|
|
48
|
+
- **TypeScript** — isolated V8 sandbox; auto-replaces common sources with deterministic variants.
|
|
49
|
+
- **Java / Go / .NET** — **no sandbox**; determinism is by convention (`Workflow.*` / `workflow.*`
|
|
50
|
+
safe APIs). Violations usually surface only at *replay*. Optional static analyzers exist
|
|
51
|
+
(`temporal-workflowcheck` for Java, `workflowcheck` for Go).
|
|
52
|
+
- **Ruby** — runtime illegal-call tracing on the workflow fiber + a durable fiber scheduler.
|
|
53
|
+
- **Rust** — runtime detection for external async wake sources; use SDK primitives (`ctx.timer()`,
|
|
54
|
+
the SDK `select!`), avoid synchronous non-determinism by convention.
|
|
55
|
+
|
|
56
|
+
Regardless of SDK, **it is your responsibility** to keep workflow code deterministic. Don't rely on
|
|
57
|
+
the sandbox catching everything — write replay tests (`testing.md`).
|
|
58
|
+
|
|
59
|
+
## Recovery
|
|
60
|
+
|
|
61
|
+
- **Accidental non-determinism introduced by a code change** → revert workflow code to match history,
|
|
62
|
+
restart the worker; the workflow auto-recovers.
|
|
63
|
+
- **Intentional logic change on running workflows** → use the **Patching API** or terminate-and-restart
|
|
64
|
+
(`versioning.md`). Never just "edit and redeploy" a workflow with open executions.
|
|
65
|
+
|
|
66
|
+
## Best practices
|
|
67
|
+
|
|
68
|
+
1. Use SDK-provided safe variants for time / random / UUID / logging.
|
|
69
|
+
2. Move *all* I/O to activities; the workflow only orchestrates.
|
|
70
|
+
3. Write **replay tests** before deploying workflow changes.
|
|
71
|
+
4. Use **patching** for intentional changes to in-flight workflows.
|
|
72
|
+
5. Keep workflows small and focused — complexity is where non-determinism hides.
|