claude-code-kit 0.21.0__tar.gz → 0.22.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.
Files changed (518) hide show
  1. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/.claude-plugin/marketplace.json +1 -1
  2. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/.claude-plugin/plugin.json +1 -1
  3. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/CHANGELOG.md +45 -0
  4. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/PKG-INFO +7 -3
  5. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/README.md +6 -2
  6. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/catalog/mcp.yaml +19 -6
  7. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/hooks.json +2 -2
  8. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/pyproject.toml +1 -1
  9. claude_code_kit-0.22.0/scripts/check_docs_consistency.py +257 -0
  10. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/sdlc/SKILL.md +1 -1
  11. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/__init__.py +1 -1
  12. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/catalog.py +12 -0
  13. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/cli.py +19 -4
  14. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/hooks.py +3 -0
  15. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/models.py +27 -2
  16. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/prompts.py +59 -3
  17. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/scaffold.py +4 -1
  18. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/upgrader.py +94 -28
  19. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/.gitignore +0 -0
  20. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/CLAUDE.md +0 -0
  21. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/CONTRIBUTING.md +0 -0
  22. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/LICENSE +0 -0
  23. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/acceptance-reviewer.md +0 -0
  24. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/auditor.md +0 -0
  25. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/dependency-scanner.md +0 -0
  26. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/developer.md +0 -0
  27. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/devils-advocate.md +0 -0
  28. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/devops-engineer.md +0 -0
  29. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/e2e-tester.md +0 -0
  30. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/em-reviewer.md +0 -0
  31. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/incident-responder.md +0 -0
  32. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/merge-reviewer.md +0 -0
  33. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/observability-engineer.md +0 -0
  34. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/orchestrator.md +0 -0
  35. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/owasp-reviewer.md +0 -0
  36. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/policy-validator.md +0 -0
  37. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/pr-raiser.md +0 -0
  38. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/risk-classifier.md +0 -0
  39. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/sdlc-code-reviewer.md +0 -0
  40. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/secret-scanner.md +0 -0
  41. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/security-reviewer.md +0 -0
  42. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/senior-backend-dev.md +0 -0
  43. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/senior-frontend-dev.md +0 -0
  44. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/senior-tester.md +0 -0
  45. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/spec-doc-writer.md +0 -0
  46. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/story-planner.md +0 -0
  47. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/technical-architect.md +0 -0
  48. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/tester.md +0 -0
  49. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/ui-designer.md +0 -0
  50. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/agents/unit-tester.md +0 -0
  51. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/catalog/capture.yaml +0 -0
  52. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/catalog/org.yaml +0 -0
  53. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/catalog/profiles.yaml +0 -0
  54. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/catalog/stacks.yaml +0 -0
  55. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/commands/abort.md +0 -0
  56. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/commands/init.md +0 -0
  57. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/commands/sdlc.md +0 -0
  58. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/commands/status.md +0 -0
  59. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/agentic-patterns.md +0 -0
  60. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/agents.md +0 -0
  61. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/architecture.md +0 -0
  62. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/coverage-audit.md +0 -0
  63. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/eval-harness.md +0 -0
  64. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/org-capabilities.md +0 -0
  65. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/stack-skills/GAP-ANALYSIS.md +0 -0
  66. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/stack-skills/README.md +0 -0
  67. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/docs/stack-skills/REPO-INVENTORY.md +0 -0
  68. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/audit-log.sh +0 -0
  69. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/capture-learnings.sh +0 -0
  70. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/guard-destructive-git.sh +0 -0
  71. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/guard-kubectl-delete.sh +0 -0
  72. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/guard-secrets.sh +0 -0
  73. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/lint-fix.sh +0 -0
  74. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/load-autonomy.sh +0 -0
  75. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/load-continuity.sh +0 -0
  76. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/load-learnings.sh +0 -0
  77. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/type-check.sh +0 -0
  78. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/validate-frontmatter.sh +0 -0
  79. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/validate-settings.sh +0 -0
  80. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/warn-large-edits.sh +0 -0
  81. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/warn-llm-io.sh +0 -0
  82. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/warn-missing-tests.sh +0 -0
  83. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/warn-sensitive-files.sh +0 -0
  84. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/hooks/scripts/warn-shared-modules.sh +0 -0
  85. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/agent-guardrails.md +0 -0
  86. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/agent-memory.md +0 -0
  87. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/agent-resilience.md +0 -0
  88. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/autonomy-levels.md +0 -0
  89. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/code-organization.md +0 -0
  90. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/continuity.md +0 -0
  91. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/design-patterns.md +0 -0
  92. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/devops-observability.md +0 -0
  93. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/documentation.md +0 -0
  94. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/evals.md +0 -0
  95. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/frontend-best-practices.md +0 -0
  96. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/goal-setting-and-monitoring.md +0 -0
  97. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/human-in-the-loop.md +0 -0
  98. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/linting-and-formatting.md +0 -0
  99. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/mandatory-workflow.md +0 -0
  100. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/model-tiers.md +0 -0
  101. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/quality-gates.md +0 -0
  102. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/rarv-cycle.md +0 -0
  103. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/reasoning-techniques.md +0 -0
  104. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/responsive-and-accessibility.md +0 -0
  105. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/risk-classification.md +0 -0
  106. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/testing.md +0 -0
  107. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/rules/tool-design.md +0 -0
  108. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/scripts/init.sh +0 -0
  109. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/_references/accessibility-checklist.md +0 -0
  110. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/_references/orchestration-patterns.md +0 -0
  111. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/_references/performance-checklist.md +0 -0
  112. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/_references/security-checklist.md +0 -0
  113. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/_references/testing-patterns.md +0 -0
  114. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/accessibility-review/SKILL.md +0 -0
  115. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/alembic-migrations/README.md +0 -0
  116. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/alembic-migrations/SKILL.md +0 -0
  117. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/alembic-migrations/references/alembic-setup-and-env.md +0 -0
  118. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/alembic-migrations/references/async-and-multitenant-migrations.md +0 -0
  119. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/alembic-migrations/references/repo-evidence.md +0 -0
  120. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/alembic-migrations/references/troubleshooting-and-debugging.md +0 -0
  121. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/alembic-migrations/references/writing-migrations.md +0 -0
  122. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/anthropic-vertex-integration/README.md +0 -0
  123. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/anthropic-vertex-integration/SKILL.md +0 -0
  124. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/anthropic-vertex-integration/references/generate-helpers-and-retry.md +0 -0
  125. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/anthropic-vertex-integration/references/repo-evidence.md +0 -0
  126. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/anthropic-vertex-integration/references/vertex-client-and-auth.md +0 -0
  127. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/api-and-interface-design/SKILL.md +0 -0
  128. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/api-integration/SKILL.md +0 -0
  129. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/api-pagination-filtering-sorting/README.md +0 -0
  130. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/api-pagination-filtering-sorting/SKILL.md +0 -0
  131. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/api-pagination-filtering-sorting/references/query-params-conventions.md +0 -0
  132. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/api-pagination-filtering-sorting/references/repo-evidence.md +0 -0
  133. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/api-pagination-filtering-sorting/references/response-metadata.md +0 -0
  134. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/archive-sprint/SKILL.md +0 -0
  135. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/async-python-patterns/README.md +0 -0
  136. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/async-python-patterns/SKILL.md +0 -0
  137. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/async-python-patterns/references/async-boundaries.md +0 -0
  138. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/async-python-patterns/references/lifecycle-and-gather.md +0 -0
  139. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/async-python-patterns/references/repo-evidence.md +0 -0
  140. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/auth-and-rbac/README.md +0 -0
  141. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/auth-and-rbac/SKILL.md +0 -0
  142. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/auth-and-rbac/references/auth-dependencies.md +0 -0
  143. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/auth-and-rbac/references/rbac-and-permissions.md +0 -0
  144. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/auth-and-rbac/references/repo-evidence.md +0 -0
  145. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/auth-and-rbac/references/security-hardening.md +0 -0
  146. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/auth-and-rbac/references/tokens-and-hashing.md +0 -0
  147. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backend-repo-architecture/README.md +0 -0
  148. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backend-repo-architecture/SKILL.md +0 -0
  149. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backend-repo-architecture/references/deployment-patterns.md +0 -0
  150. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backend-repo-architecture/references/entrypoint-and-config.md +0 -0
  151. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backend-repo-architecture/references/repo-evidence.md +0 -0
  152. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backend-repo-architecture/references/structure-patterns.md +0 -0
  153. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backend-repo-architecture/references/troubleshooting.md +0 -0
  154. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backlog/SKILL.md +0 -0
  155. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/backlog/item-template.md +0 -0
  156. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/browser-testing-with-devtools/SKILL.md +0 -0
  157. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/bug-hunt/SKILL.md +0 -0
  158. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/ci-cd-and-automation/SKILL.md +0 -0
  159. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/code-review-and-quality/SKILL.md +0 -0
  160. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/code-simplification/SKILL.md +0 -0
  161. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/component-design/SKILL.md +0 -0
  162. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/configargparse-yaml-env-layering/README.md +0 -0
  163. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/configargparse-yaml-env-layering/SKILL.md +0 -0
  164. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/configargparse-yaml-env-layering/references/config-layering-anatomy.md +0 -0
  165. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/configargparse-yaml-env-layering/references/mode-dispatch-and-precedence.md +0 -0
  166. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/configargparse-yaml-env-layering/references/repo-evidence.md +0 -0
  167. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/consolidate-learnings/SKILL.md +0 -0
  168. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/README.md +0 -0
  169. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/SKILL.md +0 -0
  170. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/references/deployment-and-secrets.md +0 -0
  171. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/references/dockerfile-and-compose.md +0 -0
  172. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/references/entrypoint-and-modes.md +0 -0
  173. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/references/kerberos-kinit-bootstrap.md +0 -0
  174. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/references/makefile-dev-workflow.md +0 -0
  175. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/containerization-and-deployment/references/repo-evidence.md +0 -0
  176. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/context-engineering/SKILL.md +0 -0
  177. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/cron-and-scheduled-jobs/README.md +0 -0
  178. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/cron-and-scheduled-jobs/SKILL.md +0 -0
  179. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/cron-and-scheduled-jobs/references/choosing-and-operations.md +0 -0
  180. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/cron-and-scheduled-jobs/references/kubernetes-cronjob.md +0 -0
  181. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/cron-and-scheduled-jobs/references/repo-evidence.md +0 -0
  182. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/cron-and-scheduled-jobs/references/temporal-schedules.md +0 -0
  183. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/data-engineering-bigquery-gcs/README.md +0 -0
  184. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/data-engineering-bigquery-gcs/SKILL.md +0 -0
  185. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/data-engineering-bigquery-gcs/references/bigquery-advanced-patterns.md +0 -0
  186. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/data-engineering-bigquery-gcs/references/bigquery-gcs-io.md +0 -0
  187. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/data-engineering-bigquery-gcs/references/medallion-architecture.md +0 -0
  188. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/data-engineering-bigquery-gcs/references/repo-evidence.md +0 -0
  189. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/data-engineering-bigquery-gcs/references/temp-table-merge-pattern.md +0 -0
  190. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/debugging-and-error-recovery/SKILL.md +0 -0
  191. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/decision/SKILL.md +0 -0
  192. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/decision/adr-template.md +0 -0
  193. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/deprecation-and-migration/SKILL.md +0 -0
  194. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/README.md +0 -0
  195. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/SKILL.md +0 -0
  196. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/references/anti-patterns.md +0 -0
  197. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/references/naming-and-layout.md +0 -0
  198. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/references/patterns-catalog.md +0 -0
  199. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/references/repo-evidence.md +0 -0
  200. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/references/testing-patterns.md +0 -0
  201. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/design-patterns-and-conventions/references/troubleshooting.md +0 -0
  202. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-compose/README.md +0 -0
  203. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-compose/SKILL.md +0 -0
  204. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-compose/references/compose-services-and-healthchecks.md +0 -0
  205. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-compose/references/dev-vs-prod-variants.md +0 -0
  206. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-compose/references/repo-evidence.md +0 -0
  207. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-shared/README.md +0 -0
  208. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-shared/SKILL.md +0 -0
  209. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-shared/references/dockerignore-and-build-secrets.md +0 -0
  210. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-shared/references/repo-evidence.md +0 -0
  211. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-shared/references/shared-base-images.md +0 -0
  212. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/docker-shared/references/shared-compose-fragments.md +0 -0
  213. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-backend/README.md +0 -0
  214. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-backend/SKILL.md +0 -0
  215. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-backend/references/backend-dockerfile-anatomy.md +0 -0
  216. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-backend/references/repo-evidence.md +0 -0
  217. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-backend/references/system-deps-and-caching.md +0 -0
  218. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-frontend/README.md +0 -0
  219. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-frontend/SKILL.md +0 -0
  220. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-frontend/references/build-args-and-nginx.md +0 -0
  221. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-frontend/references/frontend-dockerfile-anatomy.md +0 -0
  222. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/dockerfile-frontend/references/repo-evidence.md +0 -0
  223. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/documentation-and-adrs/SKILL.md +0 -0
  224. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/doubt-driven-development/SKILL.md +0 -0
  225. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/edge-to-service-trust-boundary/README.md +0 -0
  226. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/edge-to-service-trust-boundary/SKILL.md +0 -0
  227. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/edge-to-service-trust-boundary/references/repo-evidence.md +0 -0
  228. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/edge-to-service-trust-boundary/references/trust-contract.md +0 -0
  229. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/execute/SKILL.md +0 -0
  230. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/README.md +0 -0
  231. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/SKILL.md +0 -0
  232. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/references/api-versioning.md +0 -0
  233. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/references/app-factory-and-lifespan.md +0 -0
  234. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/references/custom-route-and-middleware.md +0 -0
  235. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/references/dependency-injection.md +0 -0
  236. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/references/model-and-serialization-patterns.md +0 -0
  237. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/fastapi-service-patterns/references/repo-evidence.md +0 -0
  238. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/file-export-and-reporting/README.md +0 -0
  239. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/file-export-and-reporting/SKILL.md +0 -0
  240. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/file-export-and-reporting/references/excel-generation.md +0 -0
  241. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/file-export-and-reporting/references/repo-evidence.md +0 -0
  242. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/file-export-and-reporting/references/streaming-and-downloads.md +0 -0
  243. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-repo-architecture/README.md +0 -0
  244. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-repo-architecture/SKILL.md +0 -0
  245. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-repo-architecture/references/api-layer-and-types.md +0 -0
  246. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-repo-architecture/references/divergences.md +0 -0
  247. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-repo-architecture/references/repo-evidence.md +0 -0
  248. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-repo-architecture/references/structure-and-state.md +0 -0
  249. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-repo-architecture/references/testing-patterns.md +0 -0
  250. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/frontend-ui-engineering/SKILL.md +0 -0
  251. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcp-cloud-run-github-actions/README.md +0 -0
  252. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcp-cloud-run-github-actions/SKILL.md +0 -0
  253. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcp-cloud-run-github-actions/references/cloud-run-deploy.md +0 -0
  254. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcp-cloud-run-github-actions/references/repo-evidence.md +0 -0
  255. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcp-cloud-run-github-actions/references/workflow-structure.md +0 -0
  256. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcs-file-storage-patterns/README.md +0 -0
  257. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcs-file-storage-patterns/SKILL.md +0 -0
  258. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcs-file-storage-patterns/references/client-and-uploads.md +0 -0
  259. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcs-file-storage-patterns/references/repo-evidence.md +0 -0
  260. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/gcs-file-storage-patterns/references/signed-urls-and-reads.md +0 -0
  261. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/git-workflow-and-versioning/SKILL.md +0 -0
  262. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/grafana-dashboards-and-alerts/README.md +0 -0
  263. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/grafana-dashboards-and-alerts/SKILL.md +0 -0
  264. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/grafana-dashboards-and-alerts/references/dashboard-json-and-templating.md +0 -0
  265. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/grafana-dashboards-and-alerts/references/provisioning-and-organization.md +0 -0
  266. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/grafana-dashboards-and-alerts/references/red-metrics-queries.md +0 -0
  267. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/grafana-dashboards-and-alerts/references/repo-evidence.md +0 -0
  268. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/grafana-dashboards-and-alerts/references/unified-alerting.md +0 -0
  269. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/graphql-patterns/README.md +0 -0
  270. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/graphql-patterns/SKILL.md +0 -0
  271. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/graphql-patterns/references/apollo-client-frontend.md +0 -0
  272. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/graphql-patterns/references/apollo-client-setup.md +0 -0
  273. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/graphql-patterns/references/repo-evidence.md +0 -0
  274. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/graphql-patterns/references/strawberry-backend.md +0 -0
  275. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/graphql-patterns/references/when-to-use-graphql.md +0 -0
  276. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/idea-refine/SKILL.md +0 -0
  277. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/idea-refine/examples.md +0 -0
  278. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/idea-refine/frameworks.md +0 -0
  279. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/idea-refine/refinement-criteria.md +0 -0
  280. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/idea-refine/scripts/idea-refine.sh +0 -0
  281. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/incident-postmortem/SKILL.md +0 -0
  282. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/incremental-implementation/SKILL.md +0 -0
  283. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/interview-me/SKILL.md +0 -0
  284. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kafka-config-driven/README.md +0 -0
  285. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kafka-config-driven/SKILL.md +0 -0
  286. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kafka-config-driven/references/config-and-sasl-kerberos.md +0 -0
  287. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kafka-config-driven/references/consumer-producer-patterns.md +0 -0
  288. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kafka-config-driven/references/repo-evidence.md +0 -0
  289. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kafka-config-driven/references/troubleshooting-and-patterns.md +0 -0
  290. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubectl-operations/README.md +0 -0
  291. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubectl-operations/SKILL.md +0 -0
  292. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubectl-operations/references/command-reference.md +0 -0
  293. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubectl-operations/references/context-namespace-rbac.md +0 -0
  294. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubectl-operations/references/debugging-playbooks.md +0 -0
  295. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubectl-operations/references/output-formats-and-selectors.md +0 -0
  296. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubectl-operations/references/repo-evidence.md +0 -0
  297. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubernetes-workload-hardening/README.md +0 -0
  298. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubernetes-workload-hardening/SKILL.md +0 -0
  299. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubernetes-workload-hardening/references/networkpolicy-and-rbac.md +0 -0
  300. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubernetes-workload-hardening/references/repo-evidence.md +0 -0
  301. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/kubernetes-workload-hardening/references/securitycontext-and-podsecurity.md +0 -0
  302. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/langfuse-llm-tracing/README.md +0 -0
  303. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/langfuse-llm-tracing/SKILL.md +0 -0
  304. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/langfuse-llm-tracing/references/langfuse-client-and-tracing.md +0 -0
  305. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/langfuse-llm-tracing/references/python-and-typescript.md +0 -0
  306. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/langfuse-llm-tracing/references/repo-evidence.md +0 -0
  307. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/load-testing/SKILL.md +0 -0
  308. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/manual-test/SKILL.md +0 -0
  309. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/modernization-and-migration/README.md +0 -0
  310. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/modernization-and-migration/SKILL.md +0 -0
  311. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/modernization-and-migration/references/migration-best-practices.md +0 -0
  312. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/modernization-and-migration/references/pydantic-v1-to-v2.md +0 -0
  313. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/modernization-and-migration/references/repo-evidence.md +0 -0
  314. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/modernization-and-migration/references/shared-internal-library.md +0 -0
  315. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/modernization-and-migration/references/sqlalchemy-14-to-20.md +0 -0
  316. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/multi-tenancy-patterns/README.md +0 -0
  317. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/multi-tenancy-patterns/SKILL.md +0 -0
  318. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/multi-tenancy-patterns/references/caching-patterns.md +0 -0
  319. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/multi-tenancy-patterns/references/isolation-strategies.md +0 -0
  320. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/multi-tenancy-patterns/references/repo-evidence.md +0 -0
  321. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/multi-tenancy-patterns/references/tenant-resolution.md +0 -0
  322. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-express-service/README.md +0 -0
  323. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-express-service/SKILL.md +0 -0
  324. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-express-service/references/app-factory-and-mode-dispatch.md +0 -0
  325. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-express-service/references/config-and-module-alias.md +0 -0
  326. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-express-service/references/middleware-patterns.md +0 -0
  327. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-express-service/references/repo-evidence.md +0 -0
  328. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-objection-knex/README.md +0 -0
  329. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-objection-knex/SKILL.md +0 -0
  330. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-objection-knex/references/migrations-and-validation.md +0 -0
  331. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-objection-knex/references/objection-model-and-knex.md +0 -0
  332. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/node-objection-knex/references/repo-evidence.md +0 -0
  333. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/notifications-and-messaging/README.md +0 -0
  334. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/notifications-and-messaging/SKILL.md +0 -0
  335. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/notifications-and-messaging/references/provider-abstraction.md +0 -0
  336. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/notifications-and-messaging/references/repo-evidence.md +0 -0
  337. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/notifications-and-messaging/references/templates-and-fallback.md +0 -0
  338. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/README.md +0 -0
  339. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/SKILL.md +0 -0
  340. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/references/health-and-readiness.md +0 -0
  341. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/references/logging-and-structlog.md +0 -0
  342. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/references/outbound-metrics-and-multi-mode.md +0 -0
  343. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/references/pii-redaction.md +0 -0
  344. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/references/repo-evidence.md +0 -0
  345. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/observability-and-logging/references/tracing-and-metrics.md +0 -0
  346. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/over-engineering-review/SKILL.md +0 -0
  347. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/performance-optimization/SKILL.md +0 -0
  348. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/planning-and-task-breakdown/SKILL.md +0 -0
  349. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/playwright-verification/SKILL.md +0 -0
  350. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/pydantic-schema-patterns/README.md +0 -0
  351. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/pydantic-schema-patterns/SKILL.md +0 -0
  352. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/pydantic-schema-patterns/references/repo-evidence.md +0 -0
  353. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/pydantic-schema-patterns/references/settings-and-validation.md +0 -0
  354. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/pydantic-schema-patterns/references/troubleshooting-and-common-errors.md +0 -0
  355. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/pydantic-schema-patterns/references/v1-vs-v2.md +0 -0
  356. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/README.md +0 -0
  357. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/SKILL.md +0 -0
  358. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/references/advanced-query-patterns.md +0 -0
  359. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/references/basedao-and-sessions.md +0 -0
  360. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/references/mongodb-advanced.md +0 -0
  361. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/references/other-db-mongodb.md +0 -0
  362. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/references/repo-evidence.md +0 -0
  363. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/python-dao-and-database/references/sqlalchemy-1x-vs-2x.md +0 -0
  364. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/radix-tailwind-component-patterns/README.md +0 -0
  365. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/radix-tailwind-component-patterns/SKILL.md +0 -0
  366. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/radix-tailwind-component-patterns/references/radix-primitives-and-variants.md +0 -0
  367. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/radix-tailwind-component-patterns/references/repo-evidence.md +0 -0
  368. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/radix-tailwind-component-patterns/references/tailwind-theme-and-cn.md +0 -0
  369. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/react-hook-form-zod-patterns/README.md +0 -0
  370. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/react-hook-form-zod-patterns/SKILL.md +0 -0
  371. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/react-hook-form-zod-patterns/references/form-setup-and-zod.md +0 -0
  372. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/react-hook-form-zod-patterns/references/multi-step-and-modes.md +0 -0
  373. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/react-hook-form-zod-patterns/references/repo-evidence.md +0 -0
  374. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/redis-caching-patterns/README.md +0 -0
  375. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/redis-caching-patterns/SKILL.md +0 -0
  376. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/redis-caching-patterns/references/cache-manager-and-fallback.md +0 -0
  377. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/redis-caching-patterns/references/namespacing-and-invalidation.md +0 -0
  378. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/redis-caching-patterns/references/repo-evidence.md +0 -0
  379. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/refresh-docs/SKILL.md +0 -0
  380. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/remember/SKILL.md +0 -0
  381. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/scope/SKILL.md +0 -0
  382. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/scope/scope-template.md +0 -0
  383. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/security-and-hardening/SKILL.md +0 -0
  384. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/security-verification/SKILL.md +0 -0
  385. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/shannon-ai-pentest/README.md +0 -0
  386. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/shannon-ai-pentest/SKILL.md +0 -0
  387. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/shannon-ai-pentest/references/operating-guide.md +0 -0
  388. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/shipping-and-launch/SKILL.md +0 -0
  389. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/simplification-debt/SKILL.md +0 -0
  390. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/smoke-test/SKILL.md +0 -0
  391. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/source-driven-development/SKILL.md +0 -0
  392. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/spec-driven-development/SKILL.md +0 -0
  393. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/sprint/SKILL.md +0 -0
  394. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/sprint/sprint-template.md +0 -0
  395. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/tanstack-react-query-patterns/README.md +0 -0
  396. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/tanstack-react-query-patterns/SKILL.md +0 -0
  397. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/tanstack-react-query-patterns/references/mutations-and-cache.md +0 -0
  398. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/tanstack-react-query-patterns/references/query-keys-and-hooks.md +0 -0
  399. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/tanstack-react-query-patterns/references/repo-evidence.md +0 -0
  400. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/task-tracker-sync/SKILL.md +0 -0
  401. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/README.md +0 -0
  402. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/SKILL.md +0 -0
  403. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/references/config-and-retry-idempotency.md +0 -0
  404. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/references/dag-dsl-interpreter.md +0 -0
  405. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/references/repo-evidence.md +0 -0
  406. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/references/schedule-registration.md +0 -0
  407. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/references/schedules-and-cron.md +0 -0
  408. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/temporal-config-driven/references/worker-workflow-activity-patterns.md +0 -0
  409. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/test-driven-development/SKILL.md +0 -0
  410. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/test-plan-review/SKILL.md +0 -0
  411. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/README.md +0 -0
  412. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/SKILL.md +0 -0
  413. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/async-and-mocking.md +0 -0
  414. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/coverage-gap-and-recommendations.md +0 -0
  415. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/github-actions-test-orchestration.md +0 -0
  416. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/pytest-and-fixtures.md +0 -0
  417. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/pytest-asyncio-modes.md +0 -0
  418. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/repo-evidence.md +0 -0
  419. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/security-regression-tests.md +0 -0
  420. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/testing-conventions/references/vitest-frontend-testing.md +0 -0
  421. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/threat-model/SKILL.md +0 -0
  422. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/triage/SKILL.md +0 -0
  423. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/ui-ux-design/SKILL.md +0 -0
  424. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/unit-test/SKILL.md +0 -0
  425. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/using-agent-skills/SKILL.md +0 -0
  426. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/vitest-rtl-msw-patterns/README.md +0 -0
  427. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/vitest-rtl-msw-patterns/SKILL.md +0 -0
  428. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/vitest-rtl-msw-patterns/references/msw-and-contract-tests.md +0 -0
  429. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/vitest-rtl-msw-patterns/references/repo-evidence.md +0 -0
  430. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/vitest-rtl-msw-patterns/references/vitest-rtl-setup.md +0 -0
  431. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zap-vapt-scanning/README.md +0 -0
  432. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zap-vapt-scanning/SKILL.md +0 -0
  433. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zap-vapt-scanning/references/operating-guide.md +0 -0
  434. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zap-vapt-scanning/scripts/endpoints.example.txt +0 -0
  435. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zap-vapt-scanning/scripts/requirements.txt +0 -0
  436. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zap-vapt-scanning/scripts/zap_vapt.py +0 -0
  437. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zustand-state-patterns/README.md +0 -0
  438. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zustand-state-patterns/SKILL.md +0 -0
  439. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zustand-state-patterns/references/async-polling-and-persistence.md +0 -0
  440. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zustand-state-patterns/references/repo-evidence.md +0 -0
  441. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/skills/zustand-state-patterns/references/store-structure-and-selectors.md +0 -0
  442. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/__main__.py +0 -0
  443. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/render.py +0 -0
  444. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/src/claude_kit/validator.py +0 -0
  445. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/CLAUDE.md +0 -0
  446. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/CLAUDE.stack.md.tmpl +0 -0
  447. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/CONTINUITY.template.md +0 -0
  448. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/README.claude-sdlc.md.tmpl +0 -0
  449. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/agent-memory/MEMORY.md +0 -0
  450. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/agent-memory/api/.gitkeep +0 -0
  451. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/agent-memory/architecture/.gitkeep +0 -0
  452. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/agent-memory/debugging/.gitkeep +0 -0
  453. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/agent-memory/gotchas/.gitkeep +0 -0
  454. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/agent-memory/patterns/.gitkeep +0 -0
  455. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/agent-memory/performance/.gitkeep +0 -0
  456. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/artifacts/adr.md +0 -0
  457. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/artifacts/api-change-report.md +0 -0
  458. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/artifacts/feature-spec.md +0 -0
  459. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/artifacts/release-plan.md +0 -0
  460. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/artifacts/runbook.md +0 -0
  461. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/artifacts/security-review.md +0 -0
  462. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/artifacts/test-plan.md +0 -0
  463. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/README.md +0 -0
  464. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/agents/data-workflow-agent.md +0 -0
  465. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/agents/founder-prototype-agent.md +0 -0
  466. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/agents/internal-tools-builder.md +0 -0
  467. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/agents/pm-copilot.md +0 -0
  468. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/agents/staff-pm-reviewer.md +0 -0
  469. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/agents/support-ticket-engineer.md +0 -0
  470. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/devops-and-release/README.md +0 -0
  471. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/devops-and-release/pack.yaml +0 -0
  472. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/engineering-core/README.md +0 -0
  473. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/engineering-core/pack.yaml +0 -0
  474. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/non-engineer-builder/README.md +0 -0
  475. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/non-engineer-builder/pack.yaml +0 -0
  476. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/onboarding-and-docs/README.md +0 -0
  477. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/onboarding-and-docs/pack.yaml +0 -0
  478. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/product-to-code/README.md +0 -0
  479. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/product-to-code/pack.yaml +0 -0
  480. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/quality-and-review/README.md +0 -0
  481. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/quality-and-review/pack.yaml +0 -0
  482. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/security-and-compliance/README.md +0 -0
  483. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/packs/security-and-compliance/pack.yaml +0 -0
  484. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/ai-working-agreement.md +0 -0
  485. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/ambiguity-resolution.md +0 -0
  486. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/branch-and-pr-policy.md +0 -0
  487. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/compliance-policy.md +0 -0
  488. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/non-engineer-safe-coding.md +0 -0
  489. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/pii-policy.md +0 -0
  490. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/production-data-policy.md +0 -0
  491. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/prompt-to-task-conversion.md +0 -0
  492. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/prototype-boundaries.md +0 -0
  493. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/rules/secrets-policy.md +0 -0
  494. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/customer-issue-to-fix/SKILL.md +0 -0
  495. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/feature-from-idea/SKILL.md +0 -0
  496. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/prompt-to-safe-task/SKILL.md +0 -0
  497. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/prototype-to-production/SKILL.md +0 -0
  498. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/repo-onboarding/SKILL.md +0 -0
  499. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/review-scope/SKILL.md +0 -0
  500. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/review-sprint/SKILL.md +0 -0
  501. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/review-sprint-plan/SKILL.md +0 -0
  502. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/org/skills/review-ux-flow/SKILL.md +0 -0
  503. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/settings.json +0 -0
  504. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/backend/go/net-http/rules/go-patterns.md +0 -0
  505. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/backend/python/fastapi/rules/fastapi-patterns.md +0 -0
  506. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/mongodb/agents/migration-specialist.md +0 -0
  507. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/mongodb/agents/mongodb-specialist.md +0 -0
  508. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/mongodb/rules/mongodb-patterns.md +0 -0
  509. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/postgres/agents/db-performance-reviewer.md +0 -0
  510. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/postgres/agents/migration-specialist.md +0 -0
  511. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/postgres/agents/postgres-specialist.md +0 -0
  512. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/postgres/rules/database-performance.md +0 -0
  513. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/db/postgres/rules/postgres-patterns.md +0 -0
  514. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/frontend/react/rules/design-system-compliance.md +0 -0
  515. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/frontend/react/rules/mobile-design-guidelines.md +0 -0
  516. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/frontend/react/rules/react-patterns.md +0 -0
  517. {claude_code_kit-0.21.0 → claude_code_kit-0.22.0}/templates/stacks/frontend/react/rules/ui-design-system.md +0 -0
  518. {claude_code_kit-0.21.0 → claude_code_kit-0.22.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.21.0",
13
+ "version": "0.22.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.21.0",
3
+ "version": "0.22.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,51 @@ 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.22.0] — 2026-06-23
8
+
9
+ **Critical-correctness hardening (PR1 of a phased review): a non-destructive `init` merge that no longer
10
+ deletes your files, a CI guard against doc/version/count drift, stricter config validation, pinned
11
+ third-party MCP versions, and several P2 fixes.**
12
+
13
+ ### Fixed
14
+
15
+ - **Data-loss bug in `init` merge mode.** Re-running `claude-kit init` over an existing `.claude/`
16
+ (the default `merge` mode) used to `shutil.rmtree` whole kit-managed directories (`rules/`,
17
+ `skills/<name>/`, `skills/_references/`), silently deleting any file you had added under them.
18
+ `init` now reconciles non-destructively via the new `upgrader.merge_install`, which reuses the
19
+ owner-aware upgrade logic: kit/overlay files are refreshed (user-modified ones backed up to
20
+ `.claude-kit.bak-N/` first), user-editable files are sidecar'd, kit/overlay orphans are pruned, and
21
+ **files the kit doesn't track are never touched**. An untracked hand-rolled `.claude/` is migrated
22
+ safely too (collisions are backed up). `--force` / `overwrite` remains the only destructive path.
23
+ - **`README.claude-sdlc.md` is now user-editable.** `init` no longer hard-overwrites it; it honours
24
+ `--force` and otherwise writes a `.claude-kit` sidecar, and `upgrade` protects it like `CLAUDE.md`.
25
+ - **Documentation/version drift.** `SECURITY.md` supported-version, the `/sdlc` skill's `standard`
26
+ gate row (added `contract-clear`), and the README hook count (16 → 17) corrected.
27
+
28
+ ### Added
29
+
30
+ - **`scripts/check_docs_consistency.py`** — a fail-loud guard (run in tests + CI) that re-derives the
31
+ facts and asserts the docs agree: version parity across `pyproject.toml`, `__init__.py`, both plugin
32
+ manifests, the latest `CHANGELOG` heading and `SECURITY.md`; component counts (agents / rules / core
33
+ & collection skills / hook scripts / MCP servers) against every number the docs quote; and the
34
+ profile→gate tables in `README.md` + `skills/sdlc/SKILL.md` against `catalog/profiles.yaml`.
35
+ - **Stricter `--config` / selection validation.** A bare `mcp: github` (or `teams: …`) string is
36
+ normalised to a one-element list instead of being iterated character-by-character; malformed shapes,
37
+ unknown config keys, an unknown `frontend_language` for the chosen framework, and an unknown `scope`
38
+ now fail loudly with a clear message (`Selection.from_dict(strict=True)` + `catalog.resolve` checks).
39
+
40
+ ### Changed
41
+
42
+ - **Pinned MCP server package versions.** `catalog/mcp.yaml` replaces moving `@latest` / implicit-latest
43
+ `npx` tags with exact version pins (snapshot 2026-06-23) for reproducible, supply-chain-aware installs;
44
+ the deprecated official GitHub/Postgres reference servers are flagged. README notes that MCP servers
45
+ are third-party code.
46
+ - **Planned CLI commands exit non-zero.** `package-org-pack`, `install-org-pack`, and
47
+ `research import-sources` now exit `2` (still announcing "planned") instead of a silent success-`0`.
48
+ - **Inline guard hooks degrade without `jq`.** The `rm -rf` / push-to-main / secrets inline guards (in
49
+ both the plugin `hooks.json` and the CLI registry) now no-op when `jq` is absent, matching the
50
+ script-backed guards and the SECURITY.md promise.
51
+
7
52
  ## [0.21.0] — 2026-06-22
8
53
 
9
54
  **Add two stack-collection skills — `cron-and-scheduled-jobs` (scheduled/recurring jobs across Kubernetes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-kit
3
- Version: 0.21.0
3
+ Version: 0.22.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
@@ -82,7 +82,7 @@ Quick start) for the full breakdown of any row.
82
82
  | 🧱 **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 |
83
83
  | 🎚️ **Profiles, scopes & org** | **3** rigor profiles · **3** scopes · **5** autonomy levels · **7** org packs + **10** policy rules |
84
84
  | 🧠 **Memory & learning** | Working memory across context compaction + a cost-aware learnings loop (`capture_mode`) so the same mistake isn't repeated |
85
- | 🛠️ **Hooks & guards** | **16** event hooks — blocking safety guards vs. advisory warnings — that no-op gracefully without `jq` |
85
+ | 🛠️ **Hooks & guards** | **17** event hooks — blocking safety guards vs. advisory warnings — that no-op gracefully without `jq` |
86
86
  | 📦 **Distribution & lifecycle** | Plugin **and** pip from one source, **9** ready MCP fragments, and edit-preserving `upgrade` |
87
87
  | ♻️ **Reuse-first by design** | Adopt-only-the-new reviews, opt-in LLM/AI security (OWASP LLM Top 10), a worked example + self-test matrix |
88
88
 
@@ -306,7 +306,7 @@ need.
306
306
 
307
307
  <br>
308
308
 
309
- - **16 event hook scripts** in [`hooks/`](hooks/) enforce the pipeline outside the model —
309
+ - **17 event hook scripts** in [`hooks/`](hooks/) enforce the pipeline outside the model —
310
310
  `guard-secrets`, `guard-destructive-git`, `lint-fix`, `type-check`, and `validate-settings` run
311
311
  deterministically.
312
312
  - **Advisory, never-blocking warnings** — `warn-llm-io`, `warn-large-edits`, `warn-missing-tests`, and
@@ -325,6 +325,10 @@ need.
325
325
  (`claude-kit` / `ckit` / `claude-sdlc`) generate identical config.
326
326
  - **Catalog-driven extensibility** — adding a stack, framework, database, profile, MCP server, or org
327
327
  pack is a [`catalog/`](catalog/) YAML edit, never a code change; 9 MCP server fragments ship ready.
328
+ - **MCP servers are third-party** — each fragment runs an external package or hosted endpoint that
329
+ claude-kit references but does not vendor or audit; the `npx` commands are **pinned to an exact
330
+ version** (not `@latest`) for reproducible, supply-chain-aware installs. Review a server's source and
331
+ license before enabling it, and bump pins deliberately. See [`SECURITY.md`](SECURITY.md).
328
332
  - **Safe, edit-preserving upgrades** — `upgrade` refreshes kit/overlay files via per-file `owner` +
329
333
  checksum, never clobbers your edits, backs up changes, and restores deleted files (`diff` previews
330
334
  first).
@@ -55,7 +55,7 @@ Quick start) for the full breakdown of any row.
55
55
  | 🧱 **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 |
56
56
  | 🎚️ **Profiles, scopes & org** | **3** rigor profiles · **3** scopes · **5** autonomy levels · **7** org packs + **10** policy rules |
57
57
  | 🧠 **Memory & learning** | Working memory across context compaction + a cost-aware learnings loop (`capture_mode`) so the same mistake isn't repeated |
58
- | 🛠️ **Hooks & guards** | **16** event hooks — blocking safety guards vs. advisory warnings — that no-op gracefully without `jq` |
58
+ | 🛠️ **Hooks & guards** | **17** event hooks — blocking safety guards vs. advisory warnings — that no-op gracefully without `jq` |
59
59
  | 📦 **Distribution & lifecycle** | Plugin **and** pip from one source, **9** ready MCP fragments, and edit-preserving `upgrade` |
60
60
  | ♻️ **Reuse-first by design** | Adopt-only-the-new reviews, opt-in LLM/AI security (OWASP LLM Top 10), a worked example + self-test matrix |
61
61
 
@@ -279,7 +279,7 @@ need.
279
279
 
280
280
  <br>
281
281
 
282
- - **16 event hook scripts** in [`hooks/`](hooks/) enforce the pipeline outside the model —
282
+ - **17 event hook scripts** in [`hooks/`](hooks/) enforce the pipeline outside the model —
283
283
  `guard-secrets`, `guard-destructive-git`, `lint-fix`, `type-check`, and `validate-settings` run
284
284
  deterministically.
285
285
  - **Advisory, never-blocking warnings** — `warn-llm-io`, `warn-large-edits`, `warn-missing-tests`, and
@@ -298,6 +298,10 @@ need.
298
298
  (`claude-kit` / `ckit` / `claude-sdlc`) generate identical config.
299
299
  - **Catalog-driven extensibility** — adding a stack, framework, database, profile, MCP server, or org
300
300
  pack is a [`catalog/`](catalog/) YAML edit, never a code change; 9 MCP server fragments ship ready.
301
+ - **MCP servers are third-party** — each fragment runs an external package or hosted endpoint that
302
+ claude-kit references but does not vendor or audit; the `npx` commands are **pinned to an exact
303
+ version** (not `@latest`) for reproducible, supply-chain-aware installs. Review a server's source and
304
+ license before enabling it, and bump pins deliberately. See [`SECURITY.md`](SECURITY.md).
301
305
  - **Safe, edit-preserving upgrades** — `upgrade` refreshes kit/overlay files via per-file `owner` +
302
306
  checksum, never clobbers your edits, backs up changes, and restores deleted files (`diff` previews
303
307
  first).
@@ -1,16 +1,26 @@
1
1
  # claude-kit optional MCP integrations. Selected servers are written into a project-root `.mcp.json`
2
2
  # ONLY when chosen at init (default: none). Configs use ${ENV} placeholders — no credentials are ever
3
3
  # generated. Fill the referenced env vars (e.g. in your shell or .env) before using a server.
4
+ #
5
+ # SUPPLY CHAIN: every server below is THIRD-PARTY code (an npx package or a hosted HTTP endpoint) with
6
+ # its own maintainers, trust, and licensing model — claude-kit only references it, never vendors or
7
+ # audits it. The `npx -y <pkg>@<version>` commands are pinned to an exact version (snapshot 2026-06-23)
8
+ # rather than a moving `@latest`, so an install is reproducible and a fresh upstream release can't
9
+ # silently change what runs. Bump these deliberately (and review the changelog) — do not switch back
10
+ # to `@latest`. See SECURITY.md and the README "MCP integrations" note.
4
11
 
5
12
  version: 1
6
13
 
7
14
  servers:
8
15
  github:
9
16
  label: "GitHub (issues, PRs, repos)"
17
+ # NOTE: the official @modelcontextprotocol/server-github npm package is archived/deprecated upstream
18
+ # (GitHub now ships a Go `github-mcp-server`). Pinned to its last published version for a stable
19
+ # install; switch to the maintained server in a future kit release if you need newer features.
10
20
  config:
11
21
  type: stdio
12
22
  command: npx
13
- args: ["-y", "@modelcontextprotocol/server-github"]
23
+ args: ["-y", "@modelcontextprotocol/server-github@2025.4.8"]
14
24
  env:
15
25
  GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_PERSONAL_ACCESS_TOKEN}"
16
26
  linear:
@@ -23,22 +33,25 @@ servers:
23
33
  config:
24
34
  type: stdio
25
35
  command: npx
26
- args: ["-y", "mcp-atlassian"]
36
+ args: ["-y", "mcp-atlassian@2.1.0"]
27
37
  env:
28
38
  JIRA_URL: "${JIRA_URL}"
29
39
  JIRA_API_TOKEN: "${JIRA_API_TOKEN}"
30
40
  postgres:
31
41
  label: "PostgreSQL (query the database)"
42
+ # NOTE: @modelcontextprotocol/server-postgres is archived/deprecated upstream; pinned to its last
43
+ # published version for a stable install. Consider a maintained Postgres MCP server going forward.
32
44
  config:
33
45
  type: stdio
34
46
  command: npx
35
- args: ["-y", "@modelcontextprotocol/server-postgres", "${DATABASE_URL}"]
47
+ args:
48
+ ["-y", "@modelcontextprotocol/server-postgres@0.6.2", "${DATABASE_URL}"]
36
49
  mongodb:
37
50
  label: "MongoDB (query the database)"
38
51
  config:
39
52
  type: stdio
40
53
  command: npx
41
- args: ["-y", "mongodb-mcp-server"]
54
+ args: ["-y", "mongodb-mcp-server@1.13.0"]
42
55
  env:
43
56
  MDB_MCP_CONNECTION_STRING: "${MONGODB_URI}"
44
57
  playwright:
@@ -46,7 +59,7 @@ servers:
46
59
  config:
47
60
  type: stdio
48
61
  command: npx
49
- args: ["-y", "@playwright/mcp@latest"]
62
+ args: ["-y", "@playwright/mcp@0.0.76"]
50
63
  docs:
51
64
  label: "Docs / Context7 (live library docs)"
52
65
  config:
@@ -61,7 +74,7 @@ servers:
61
74
  # source is FSL-1.1-Apache-2.0 (source-available; converts to Apache-2.0 two years after each
62
75
  # release) — flagged in the label like the repowise AGPL note; this entry references only the
63
76
  # OAuth-hosted service, not the source. Self-hosted/token alternative (instead of the http url):
64
- # command: npx, args: ["-y", "@sentry/mcp-server@latest"], env: SENTRY_ACCESS_TOKEN: "${SENTRY_ACCESS_TOKEN}".
77
+ # command: npx, args: ["-y", "@sentry/mcp-server@0.36.0"], env: SENTRY_ACCESS_TOKEN: "${SENTRY_ACCESS_TOKEN}".
65
78
  sentry:
66
79
  label: "Sentry (error monitoring / issue triage; source-available FSL-1.1)"
67
80
  config:
@@ -15,8 +15,8 @@
15
15
  {
16
16
  "matcher": "Bash",
17
17
  "hooks": [
18
- { "type": "command", "command": "CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qE 'rm[[:space:]]+-[^[:space:]]*r[^[:space:]]*f'; then echo 'BLOCKED: rm -rf is disabled by claude-kit. Move to trash or delete specific paths explicitly.' >&2; exit 2; fi" },
19
- { "type": "command", "command": "CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qE 'git[[:space:]]+push.*[[:space:]:](main|master)([[:space:]]|$)'; then echo 'BLOCKED: refusing to push to main/master — use a feature branch and a PR.' >&2; exit 2; fi" },
18
+ { "type": "command", "command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qE 'rm[[:space:]]+-[^[:space:]]*r[^[:space:]]*f'; then echo 'BLOCKED: rm -rf is disabled by claude-kit. Move to trash or delete specific paths explicitly.' >&2; exit 2; fi" },
19
+ { "type": "command", "command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qE 'git[[:space:]]+push.*[[:space:]:](main|master)([[:space:]]|$)'; then echo 'BLOCKED: refusing to push to main/master — use a feature branch and a PR.' >&2; exit 2; fi" },
20
20
  { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/guard-destructive-git.sh\"" },
21
21
  { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/guard-secrets.sh\"" },
22
22
  { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/guard-kubectl-delete.sh\"" }
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "claude-code-kit"
7
- version = "0.21.0"
7
+ version = "0.22.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"
@@ -0,0 +1,257 @@
1
+ #!/usr/bin/env python3
2
+ """Fail-loud guard against documentation / version / count drift in this repo.
3
+
4
+ claude-kit ships from one source of truth but advertises itself in many places — the README,
5
+ SECURITY.md, the CHANGELOG, the plugin manifests, and the `/sdlc` skill. Those numbers and version
6
+ strings drift the moment a component is added without a doc sweep (e.g. PR #25 added a 17th hook
7
+ script but left the README saying "16"). This script re-derives the facts from the filesystem and
8
+ the catalog and asserts the docs agree.
9
+
10
+ It checks three classes of drift:
11
+
12
+ 1. **Version parity** — the single version string must be identical across ``pyproject.toml``,
13
+ ``src/claude_kit/__init__.py``, both plugin manifests, the latest ``CHANGELOG.md`` heading, and
14
+ ``SECURITY.md``.
15
+ 2. **Component counts** — agents / core rules / core skills / collection skills / hook scripts /
16
+ MCP fragments, counted on disk (or in ``catalog/mcp.yaml``), must match every number the docs
17
+ quote for them.
18
+ 3. **Profile → gate tables** — the gate lists in ``README.md`` and ``skills/sdlc/SKILL.md`` must
19
+ match the effective gate sets resolved from ``catalog/profiles.yaml`` (inheritance included).
20
+
21
+ Run directly (``python scripts/check_docs_consistency.py``) — exits 0 when consistent, 1 otherwise
22
+ and prints every mismatch. Also exercised by ``tests/test_docs_consistency.py`` and CI.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import json
28
+ import re
29
+ import sys
30
+ from pathlib import Path
31
+
32
+ import yaml
33
+
34
+ ROOT = Path(__file__).resolve().parent.parent
35
+
36
+
37
+ def _read(rel: str) -> str:
38
+ return (ROOT / rel).read_text(encoding="utf-8")
39
+
40
+
41
+ # --------------------------------------------------------------------------------------------------
42
+ # 1) Version parity
43
+ # --------------------------------------------------------------------------------------------------
44
+
45
+
46
+ def _versions() -> dict[str, str]:
47
+ """Return the version string each source declares, keyed by a human label."""
48
+ out: dict[str, str] = {}
49
+ m = re.search(r'^version\s*=\s*"([^"]+)"', _read("pyproject.toml"), re.MULTILINE)
50
+ out["pyproject.toml"] = m.group(1) if m else "??"
51
+ m = re.search(r'__version__\s*=\s*"([^"]+)"', _read("src/claude_kit/__init__.py"))
52
+ out["src/claude_kit/__init__.py"] = m.group(1) if m else "??"
53
+ out[".claude-plugin/plugin.json"] = json.loads(
54
+ _read(".claude-plugin/plugin.json")
55
+ ).get("version", "??")
56
+ market = json.loads(_read(".claude-plugin/marketplace.json"))
57
+ for i, p in enumerate(market.get("plugins", [])):
58
+ out[f".claude-plugin/marketplace.json[{i}]"] = p.get("version", "??")
59
+ m = re.search(r"^##\s*\[([^\]]+)\]", _read("CHANGELOG.md"), re.MULTILINE)
60
+ out["CHANGELOG.md (latest)"] = m.group(1) if m else "??"
61
+ m = re.search(r"currently\s*\*\*([^*]+)\*\*", _read("SECURITY.md"))
62
+ out["SECURITY.md"] = m.group(1) if m else "??"
63
+ return out
64
+
65
+
66
+ def check_versions() -> list[str]:
67
+ versions = _versions()
68
+ distinct = set(versions.values())
69
+ if len(distinct) == 1:
70
+ return []
71
+ canonical = versions["pyproject.toml"]
72
+ return [
73
+ f"version drift: {label} says {ver!r} (canonical pyproject.toml = {canonical!r})"
74
+ for label, ver in versions.items()
75
+ if ver != canonical
76
+ ]
77
+
78
+
79
+ # --------------------------------------------------------------------------------------------------
80
+ # 2) Component counts
81
+ # --------------------------------------------------------------------------------------------------
82
+
83
+
84
+ def _count_skills() -> tuple[int, int]:
85
+ """Return (core, collection): collection skills carry a README.md, core ones do not."""
86
+ core = collection = 0
87
+ for d in sorted((ROOT / "skills").iterdir()):
88
+ if not d.is_dir() or d.name.startswith("_"):
89
+ continue
90
+ if (d / "README.md").is_file():
91
+ collection += 1
92
+ else:
93
+ core += 1
94
+ return core, collection
95
+
96
+
97
+ def _actuals() -> dict[str, int]:
98
+ core, collection = _count_skills()
99
+ mcp = yaml.safe_load(_read("catalog/mcp.yaml")).get("servers", {})
100
+ return {
101
+ "agents": len(list((ROOT / "agents").glob("*.md"))),
102
+ "rules": len(list((ROOT / "rules").glob("*.md"))),
103
+ "core skills": core,
104
+ "collection skills": collection,
105
+ "hook scripts": len(list((ROOT / "hooks" / "scripts").glob("*.sh"))),
106
+ "mcp servers": len(mcp),
107
+ }
108
+
109
+
110
+ # Each anchor ties a component count to one regex (single capture group = the number) in one file.
111
+ # Every listed regex must match at least once, and every match must equal the on-disk count — so a
112
+ # count change forces a doc update, and a reworded sentence that drops the number trips "anchor not
113
+ # found". Subset counts elsewhere ("8 agent-operation rules") are deliberately NOT anchored.
114
+ _ANCHORS: list[tuple[str, str, str]] = [
115
+ ("agents", "README.md", r"\*\*(\d+)\*\* tiered agents"),
116
+ ("agents", "README.md", r"(\d+) specialized agents"),
117
+ ("agents", "README.md", r"(\d+) specialized roles"),
118
+ ("agents", "README.md", r"(\d+) SDLC agents"),
119
+ ("rules", "README.md", r"\*\*(\d+)\*\* stack-agnostic core rules"),
120
+ ("rules", "README.md", r"(\d+) stack-agnostic core rules"),
121
+ ("rules", "README.md", r"(\d+) stack-agnostic contracts"),
122
+ ("rules", "README.md", r"(\d+) engineering rules"),
123
+ ("core skills", "README.md", r"\*\*(\d+)\*\* context-activated skills"),
124
+ ("core skills", "README.md", r"(\d+) on-demand skills"),
125
+ ("hook scripts", "README.md", r"\*\*(\d+)\*\* event hooks"),
126
+ ("hook scripts", "README.md", r"(\d+) event hook scripts"),
127
+ ("mcp servers", "README.md", r"\*\*(\d+)\*\* ready MCP fragments"),
128
+ ("mcp servers", "README.md", r"(\d+) MCP server fragments"),
129
+ ]
130
+
131
+
132
+ def check_counts() -> list[str]:
133
+ actuals = _actuals()
134
+ errors: list[str] = []
135
+ for component, relfile, pattern in _ANCHORS:
136
+ text = _read(relfile)
137
+ matches = re.findall(pattern, text)
138
+ if not matches:
139
+ errors.append(
140
+ f"{relfile}: anchor for {component!r} not found (pattern {pattern!r}) — "
141
+ "doc reworded? update check_docs_consistency.py"
142
+ )
143
+ continue
144
+ want = actuals[component]
145
+ for got in matches:
146
+ if int(got) != want:
147
+ errors.append(
148
+ f"{relfile}: {component} count says {got}, but there are {want} "
149
+ f"(pattern {pattern!r})"
150
+ )
151
+
152
+ # Collection skills also drive the living index table in docs/stack-skills/README.md.
153
+ idx = _read("docs/stack-skills/README.md")
154
+ rows = [ln for ln in idx.splitlines() if re.match(r"\|\s*\*\*", ln)]
155
+ if len(rows) != actuals["collection skills"]:
156
+ errors.append(
157
+ f"docs/stack-skills/README.md: {len(rows)} skill rows, but "
158
+ f"{actuals['collection skills']} collection skills exist on disk"
159
+ )
160
+ return errors
161
+
162
+
163
+ # --------------------------------------------------------------------------------------------------
164
+ # 3) Profile -> gate tables
165
+ # --------------------------------------------------------------------------------------------------
166
+
167
+
168
+ def _effective_gates() -> dict[str, set[str]]:
169
+ """Resolve each profile's effective gate set from profiles.yaml (unioning ``inherit``)."""
170
+ profiles = yaml.safe_load(_read("catalog/profiles.yaml"))["profiles"]
171
+ cache: dict[str, set[str]] = {}
172
+
173
+ def resolve(name: str) -> set[str]:
174
+ if name in cache:
175
+ return cache[name]
176
+ p = profiles[name]
177
+ gates = set(p.get("gates") or [])
178
+ if p.get("inherit"):
179
+ gates |= resolve(p["inherit"])
180
+ cache[name] = gates
181
+ return gates
182
+
183
+ return {name: resolve(name) for name in profiles}
184
+
185
+
186
+ def _doc_gate_sets(relfile: str) -> dict[str, set[str]]:
187
+ """Parse the lean/standard/enterprise gate rows from a doc's profile→gate table."""
188
+ raw: dict[str, str] = {}
189
+ for line in _read(relfile).splitlines():
190
+ m = re.match(r"\|\s*\*\*(lean|standard|enterprise)\*\*\s*\|(.+?)\|\s*$", line)
191
+ if m:
192
+ raw[m.group(1)] = m.group(2)
193
+
194
+ def tokens(cell: str) -> set[str]:
195
+ return {
196
+ t.strip().strip("*").strip("\\").strip()
197
+ for t in cell.split("·")
198
+ if t.strip().strip("*").strip("\\").strip()
199
+ }
200
+
201
+ def expand(profile: str) -> set[str]:
202
+ cell = raw[profile]
203
+ if (
204
+ "+" in cell
205
+ ): # e.g. "standard + pipeline-green · observability-ready · acceptance"
206
+ base, extra = cell.split("+", 1)
207
+ return expand(base.strip().strip("*").lower()) | tokens(extra)
208
+ return tokens(cell)
209
+
210
+ return {p: expand(p) for p in raw}
211
+
212
+
213
+ def check_profile_gates() -> list[str]:
214
+ effective = _effective_gates()
215
+ errors: list[str] = []
216
+ for relfile in ("README.md", "skills/sdlc/SKILL.md"):
217
+ doc = _doc_gate_sets(relfile)
218
+ for profile in ("lean", "standard", "enterprise"):
219
+ if profile not in doc:
220
+ errors.append(f"{relfile}: no gate row found for profile {profile!r}")
221
+ continue
222
+ if doc[profile] != effective[profile]:
223
+ missing = effective[profile] - doc[profile]
224
+ extra = doc[profile] - effective[profile]
225
+ detail = []
226
+ if missing:
227
+ detail.append(f"missing {sorted(missing)}")
228
+ if extra:
229
+ detail.append(f"unexpected {sorted(extra)}")
230
+ errors.append(
231
+ f"{relfile}: {profile} gate row disagrees with profiles.yaml — "
232
+ + "; ".join(detail)
233
+ )
234
+ return errors
235
+
236
+
237
+ # --------------------------------------------------------------------------------------------------
238
+
239
+
240
+ def run() -> list[str]:
241
+ """Run every check and return the combined list of error messages (empty = consistent)."""
242
+ return check_versions() + check_counts() + check_profile_gates()
243
+
244
+
245
+ def main() -> int:
246
+ errors = run()
247
+ if errors:
248
+ print("docs consistency: FAIL")
249
+ for e in errors:
250
+ print(f" - {e}")
251
+ return 1
252
+ print("docs consistency: OK")
253
+ return 0
254
+
255
+
256
+ if __name__ == "__main__":
257
+ sys.exit(main())
@@ -53,7 +53,7 @@ Run **only** the gates present in the snapshot's `gates:` list. The three profil
53
53
  | Profile | Gates that run |
54
54
  |---|---|
55
55
  | **lean** | code-review · build-green |
56
- | **standard** | spec-complete · em-approved · code-review · build-green · test-coverage · security-clear |
56
+ | **standard** | spec-complete · em-approved · code-review · build-green · test-coverage · security-clear · contract-clear |
57
57
  | **enterprise** | standard + pipeline-green · observability-ready · acceptance |
58
58
 
59
59
  Never run a gate (or spawn its agent) that isn't in the active set — that's what makes lean fast and
@@ -7,4 +7,4 @@ Docker): ``claude-kit init`` asks ordered questions and lays down ``CLAUDE.md``
7
7
  as a plugin. Extensibility is data-driven via the ``catalog/`` (stacks, profiles, MCP).
8
8
  """
9
9
 
10
- __version__ = "0.21.0"
10
+ __version__ = "0.22.0"
@@ -326,11 +326,23 @@ def resolve(payload_root: str | Path, selection: Selection) -> ResolvedPlan:
326
326
  capture_cfg = _load(payload_root, "capture.yaml")
327
327
 
328
328
  frontend = _frontend(stacks, selection.frontend_framework)
329
+ fe_langs = frontend.get("languages", {}).get("options", [])
330
+ if fe_langs and selection.frontend_language not in fe_langs:
331
+ raise ValueError(
332
+ f"unknown frontend language {selection.frontend_language!r} for "
333
+ f"{selection.frontend_framework!r} (choices: {', '.join(fe_langs)})"
334
+ )
329
335
  backend_lang, backend_fw = _backend(
330
336
  stacks, selection.backend_language, selection.backend_framework
331
337
  )
332
338
  database = _database(stacks, selection.database)
333
339
 
340
+ valid_scopes = {s["id"] for s in _load(payload_root, "org.yaml").get("scopes", [])}
341
+ if valid_scopes and selection.scope not in valid_scopes:
342
+ raise ValueError(
343
+ f"unknown scope {selection.scope!r} (choices: {', '.join(sorted(valid_scopes))})"
344
+ )
345
+
334
346
  avail = available(payload_root)
335
347
  prof = _resolve_profile(profiles, selection.profile, avail)
336
348
 
@@ -103,6 +103,7 @@ def init(
103
103
  target.mkdir(parents=True, exist_ok=True)
104
104
 
105
105
  # 2) Existing .claude handling: merge / overwrite / backup / abort.
106
+ mode = "fresh"
106
107
  overwrite = force
107
108
  if (target / ".claude").exists():
108
109
  if force:
@@ -143,10 +144,21 @@ def init(
143
144
  typer.echo(f"error: {exc}", err=True)
144
145
  raise typer.Exit(2) from exc
145
146
 
146
- # 4) Install.
147
- typer.echo(f"\nclaude-kit: installing into {target}")
148
- for line in scaffold.install_sdlc(src, target, plan, force=overwrite):
149
- typer.echo(line)
147
+ # 4) Install. Merge mode reconciles non-destructively (preserving the user's own files);
148
+ # fresh / overwrite / backup all go through the destructive install spine.
149
+ if mode == "merge":
150
+ typer.echo(
151
+ f"\nclaude-kit: merging into {target} (your files are preserved)"
152
+ )
153
+ ok, messages = upgrader.merge_install(src, target, plan, force=force)
154
+ for line in messages:
155
+ typer.echo(line)
156
+ if not ok:
157
+ raise typer.Exit(1)
158
+ else:
159
+ typer.echo(f"\nclaude-kit: installing into {target}")
160
+ for line in scaffold.install_sdlc(src, target, plan, force=overwrite):
161
+ typer.echo(line)
150
162
 
151
163
  typer.echo(
152
164
  "\nDone. Open the project in Claude Code and run `/sdlc <your task>` to start the pipeline."
@@ -281,6 +293,7 @@ def package_org_pack(
281
293
  "a distributable plugin directory for an internal registry.\n"
282
294
  f"(given: pack={pack}, out={out or 'dist/org-packs/'})"
283
295
  )
296
+ raise typer.Exit(2) # not a successful no-op — signal "unimplemented" to scripts/CI
284
297
 
285
298
 
286
299
  @app.command("install-org-pack")
@@ -300,6 +313,7 @@ def install_org_pack(
300
313
  "safe upgrades.\n"
301
314
  f"(given: source={source}, target={'user (~/.claude)' if user else 'repo (.claude)'})"
302
315
  )
316
+ raise typer.Exit(2) # not a successful no-op — signal "unimplemented" to scripts/CI
303
317
 
304
318
 
305
319
  @research_app.command("import-sources")
@@ -316,6 +330,7 @@ def research_import_sources(
316
330
  "(never copying proprietary text), and require human approval before adding anything.\n"
317
331
  f"(given: {sources})"
318
332
  )
333
+ raise typer.Exit(2) # not a successful no-op — signal "unimplemented" to scripts/CI
319
334
 
320
335
 
321
336
  def main() -> None:
@@ -18,6 +18,7 @@ from typing import Any
18
18
  # --- inline guard commands (no script file needed) -------------------------------------------------
19
19
 
20
20
  _RM_RF_GUARD = (
21
+ "command -v jq >/dev/null 2>&1 || exit 0; "
21
22
  "CMD=$(jq -r '.tool_input.command'); "
22
23
  "if echo \"$CMD\" | grep -qE 'rm[[:space:]]+-[^[:space:]]*r[^[:space:]]*f'; then "
23
24
  "echo 'BLOCKED: rm -rf is disabled by claude-kit. Move to trash or delete specific paths "
@@ -28,6 +29,7 @@ _RM_RF_GUARD = (
28
29
  # ':' before and a space/end after, so legit branches that merely contain the substring
29
30
  # (maintenance, mainframe-fix, remaster-ui, domain-model) are NOT blocked.
30
31
  _PUSH_GUARD = (
32
+ "command -v jq >/dev/null 2>&1 || exit 0; "
31
33
  "CMD=$(jq -r '.tool_input.command'); "
32
34
  "if echo \"$CMD\" | grep -qE 'git[[:space:]]+push.*[[:space:]:](main|master)([[:space:]]|$)'; "
33
35
  "then echo 'BLOCKED: refusing to push to main/master — use a feature branch and a PR.' >&2; "
@@ -35,6 +37,7 @@ _PUSH_GUARD = (
35
37
  )
36
38
 
37
39
  _SECRETS_GUARD = (
40
+ "command -v jq >/dev/null 2>&1 || exit 0; "
38
41
  "FP=$(jq -r '.tool_input.file_path // empty'); "
39
42
  'if echo "$FP" | grep -qE \'(^|/)\\.env$|\\.pem$|\\.key$|(^|/)id_rsa|(^|/)id_ed25519|'
40
43
  "(^|/)credentials(\\.json)?$|\\.p12$'; then "