claude-code-kit 0.25.0__tar.gz → 0.26.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 (520) hide show
  1. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/.claude-plugin/marketplace.json +1 -1
  2. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/.claude-plugin/plugin.json +1 -1
  3. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/CHANGELOG.md +35 -0
  4. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/PKG-INFO +1 -1
  5. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/hooks.json +11 -2
  6. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/guard-secrets.sh +1 -1
  7. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/pyproject.toml +1 -1
  8. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/continuity.md +4 -0
  9. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/scripts/check_docs_consistency.py +34 -19
  10. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/scripts/init.sh +4 -2
  11. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/__init__.py +1 -1
  12. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/cli.py +20 -2
  13. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/hooks.py +4 -3
  14. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/pipeline.py +82 -3
  15. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/settings.json +2 -2
  16. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/.gitignore +0 -0
  17. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/CLAUDE.md +0 -0
  18. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/CONTRIBUTING.md +0 -0
  19. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/LICENSE +0 -0
  20. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/README.md +0 -0
  21. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/acceptance-reviewer.md +0 -0
  22. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/auditor.md +0 -0
  23. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/dependency-scanner.md +0 -0
  24. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/developer.md +0 -0
  25. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/devils-advocate.md +0 -0
  26. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/devops-engineer.md +0 -0
  27. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/e2e-tester.md +0 -0
  28. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/em-reviewer.md +0 -0
  29. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/incident-responder.md +0 -0
  30. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/merge-reviewer.md +0 -0
  31. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/observability-engineer.md +0 -0
  32. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/orchestrator.md +0 -0
  33. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/owasp-reviewer.md +0 -0
  34. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/policy-validator.md +0 -0
  35. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/pr-raiser.md +0 -0
  36. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/risk-classifier.md +0 -0
  37. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/sdlc-code-reviewer.md +0 -0
  38. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/secret-scanner.md +0 -0
  39. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/security-reviewer.md +0 -0
  40. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/senior-backend-dev.md +0 -0
  41. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/senior-frontend-dev.md +0 -0
  42. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/senior-tester.md +0 -0
  43. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/spec-doc-writer.md +0 -0
  44. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/story-planner.md +0 -0
  45. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/technical-architect.md +0 -0
  46. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/tester.md +0 -0
  47. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/ui-designer.md +0 -0
  48. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/agents/unit-tester.md +0 -0
  49. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/catalog/capture.yaml +0 -0
  50. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/catalog/mcp.yaml +0 -0
  51. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/catalog/org.yaml +0 -0
  52. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/catalog/profiles.yaml +0 -0
  53. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/catalog/stacks.yaml +0 -0
  54. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/commands/abort.md +0 -0
  55. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/commands/init.md +0 -0
  56. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/commands/sdlc.md +0 -0
  57. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/commands/status.md +0 -0
  58. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/agentic-patterns.md +0 -0
  59. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/agents.md +0 -0
  60. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/architecture.md +0 -0
  61. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/coverage-audit.md +0 -0
  62. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/eval-harness.md +0 -0
  63. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/org-capabilities.md +0 -0
  64. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/stack-skills/GAP-ANALYSIS.md +0 -0
  65. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/stack-skills/README.md +0 -0
  66. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/docs/stack-skills/REPO-INVENTORY.md +0 -0
  67. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/audit-log.sh +0 -0
  68. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/capture-learnings.sh +0 -0
  69. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/guard-destructive-git.sh +0 -0
  70. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/guard-kubectl-delete.sh +0 -0
  71. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/lint-fix.sh +0 -0
  72. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/load-autonomy.sh +0 -0
  73. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/load-continuity.sh +0 -0
  74. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/load-learnings.sh +0 -0
  75. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/type-check.sh +0 -0
  76. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/validate-frontmatter.sh +0 -0
  77. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/validate-settings.sh +0 -0
  78. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/warn-large-edits.sh +0 -0
  79. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/warn-llm-io.sh +0 -0
  80. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/warn-missing-tests.sh +0 -0
  81. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/warn-sensitive-files.sh +0 -0
  82. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/hooks/scripts/warn-shared-modules.sh +0 -0
  83. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/agent-guardrails.md +0 -0
  84. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/agent-memory.md +0 -0
  85. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/agent-resilience.md +0 -0
  86. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/autonomy-levels.md +0 -0
  87. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/code-organization.md +0 -0
  88. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/design-patterns.md +0 -0
  89. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/devops-observability.md +0 -0
  90. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/documentation.md +0 -0
  91. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/evals.md +0 -0
  92. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/frontend-best-practices.md +0 -0
  93. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/goal-setting-and-monitoring.md +0 -0
  94. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/human-in-the-loop.md +0 -0
  95. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/linting-and-formatting.md +0 -0
  96. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/mandatory-workflow.md +0 -0
  97. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/model-tiers.md +0 -0
  98. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/quality-gates.md +0 -0
  99. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/rarv-cycle.md +0 -0
  100. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/reasoning-techniques.md +0 -0
  101. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/responsive-and-accessibility.md +0 -0
  102. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/risk-classification.md +0 -0
  103. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/testing.md +0 -0
  104. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/rules/tool-design.md +0 -0
  105. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/scripts/gen_hooks.py +0 -0
  106. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/_references/accessibility-checklist.md +0 -0
  107. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/_references/orchestration-patterns.md +0 -0
  108. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/_references/performance-checklist.md +0 -0
  109. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/_references/security-checklist.md +0 -0
  110. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/_references/testing-patterns.md +0 -0
  111. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/accessibility-review/SKILL.md +0 -0
  112. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/alembic-migrations/README.md +0 -0
  113. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/alembic-migrations/SKILL.md +0 -0
  114. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/alembic-migrations/references/alembic-setup-and-env.md +0 -0
  115. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/alembic-migrations/references/async-and-multitenant-migrations.md +0 -0
  116. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/alembic-migrations/references/repo-evidence.md +0 -0
  117. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/alembic-migrations/references/troubleshooting-and-debugging.md +0 -0
  118. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/alembic-migrations/references/writing-migrations.md +0 -0
  119. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/anthropic-vertex-integration/README.md +0 -0
  120. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/anthropic-vertex-integration/SKILL.md +0 -0
  121. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/anthropic-vertex-integration/references/generate-helpers-and-retry.md +0 -0
  122. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/anthropic-vertex-integration/references/repo-evidence.md +0 -0
  123. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/anthropic-vertex-integration/references/vertex-client-and-auth.md +0 -0
  124. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/api-and-interface-design/SKILL.md +0 -0
  125. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/api-integration/SKILL.md +0 -0
  126. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/api-pagination-filtering-sorting/README.md +0 -0
  127. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/api-pagination-filtering-sorting/SKILL.md +0 -0
  128. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/api-pagination-filtering-sorting/references/query-params-conventions.md +0 -0
  129. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/api-pagination-filtering-sorting/references/repo-evidence.md +0 -0
  130. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/api-pagination-filtering-sorting/references/response-metadata.md +0 -0
  131. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/archive-sprint/SKILL.md +0 -0
  132. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/async-python-patterns/README.md +0 -0
  133. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/async-python-patterns/SKILL.md +0 -0
  134. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/async-python-patterns/references/async-boundaries.md +0 -0
  135. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/async-python-patterns/references/lifecycle-and-gather.md +0 -0
  136. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/async-python-patterns/references/repo-evidence.md +0 -0
  137. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/auth-and-rbac/README.md +0 -0
  138. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/auth-and-rbac/SKILL.md +0 -0
  139. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/auth-and-rbac/references/auth-dependencies.md +0 -0
  140. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/auth-and-rbac/references/rbac-and-permissions.md +0 -0
  141. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/auth-and-rbac/references/repo-evidence.md +0 -0
  142. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/auth-and-rbac/references/security-hardening.md +0 -0
  143. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/auth-and-rbac/references/tokens-and-hashing.md +0 -0
  144. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backend-repo-architecture/README.md +0 -0
  145. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backend-repo-architecture/SKILL.md +0 -0
  146. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backend-repo-architecture/references/deployment-patterns.md +0 -0
  147. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backend-repo-architecture/references/entrypoint-and-config.md +0 -0
  148. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backend-repo-architecture/references/repo-evidence.md +0 -0
  149. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backend-repo-architecture/references/structure-patterns.md +0 -0
  150. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backend-repo-architecture/references/troubleshooting.md +0 -0
  151. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backlog/SKILL.md +0 -0
  152. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/backlog/item-template.md +0 -0
  153. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/browser-testing-with-devtools/SKILL.md +0 -0
  154. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/bug-hunt/SKILL.md +0 -0
  155. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/ci-cd-and-automation/SKILL.md +0 -0
  156. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/code-review-and-quality/SKILL.md +0 -0
  157. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/code-simplification/SKILL.md +0 -0
  158. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/component-design/SKILL.md +0 -0
  159. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/configargparse-yaml-env-layering/README.md +0 -0
  160. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/configargparse-yaml-env-layering/SKILL.md +0 -0
  161. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/configargparse-yaml-env-layering/references/config-layering-anatomy.md +0 -0
  162. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/configargparse-yaml-env-layering/references/mode-dispatch-and-precedence.md +0 -0
  163. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/configargparse-yaml-env-layering/references/repo-evidence.md +0 -0
  164. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/consolidate-learnings/SKILL.md +0 -0
  165. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/README.md +0 -0
  166. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/SKILL.md +0 -0
  167. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/references/deployment-and-secrets.md +0 -0
  168. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/references/dockerfile-and-compose.md +0 -0
  169. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/references/entrypoint-and-modes.md +0 -0
  170. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/references/kerberos-kinit-bootstrap.md +0 -0
  171. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/references/makefile-dev-workflow.md +0 -0
  172. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/containerization-and-deployment/references/repo-evidence.md +0 -0
  173. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/context-engineering/SKILL.md +0 -0
  174. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/cron-and-scheduled-jobs/README.md +0 -0
  175. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/cron-and-scheduled-jobs/SKILL.md +0 -0
  176. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/cron-and-scheduled-jobs/references/choosing-and-operations.md +0 -0
  177. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/cron-and-scheduled-jobs/references/kubernetes-cronjob.md +0 -0
  178. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/cron-and-scheduled-jobs/references/repo-evidence.md +0 -0
  179. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/cron-and-scheduled-jobs/references/temporal-schedules.md +0 -0
  180. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/data-engineering-bigquery-gcs/README.md +0 -0
  181. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/data-engineering-bigquery-gcs/SKILL.md +0 -0
  182. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/data-engineering-bigquery-gcs/references/bigquery-advanced-patterns.md +0 -0
  183. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/data-engineering-bigquery-gcs/references/bigquery-gcs-io.md +0 -0
  184. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/data-engineering-bigquery-gcs/references/medallion-architecture.md +0 -0
  185. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/data-engineering-bigquery-gcs/references/repo-evidence.md +0 -0
  186. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/data-engineering-bigquery-gcs/references/temp-table-merge-pattern.md +0 -0
  187. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/debugging-and-error-recovery/SKILL.md +0 -0
  188. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/decision/SKILL.md +0 -0
  189. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/decision/adr-template.md +0 -0
  190. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/deprecation-and-migration/SKILL.md +0 -0
  191. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/README.md +0 -0
  192. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/SKILL.md +0 -0
  193. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/references/anti-patterns.md +0 -0
  194. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/references/naming-and-layout.md +0 -0
  195. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/references/patterns-catalog.md +0 -0
  196. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/references/repo-evidence.md +0 -0
  197. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/references/testing-patterns.md +0 -0
  198. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/design-patterns-and-conventions/references/troubleshooting.md +0 -0
  199. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-compose/README.md +0 -0
  200. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-compose/SKILL.md +0 -0
  201. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-compose/references/compose-services-and-healthchecks.md +0 -0
  202. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-compose/references/dev-vs-prod-variants.md +0 -0
  203. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-compose/references/repo-evidence.md +0 -0
  204. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-shared/README.md +0 -0
  205. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-shared/SKILL.md +0 -0
  206. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-shared/references/dockerignore-and-build-secrets.md +0 -0
  207. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-shared/references/repo-evidence.md +0 -0
  208. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-shared/references/shared-base-images.md +0 -0
  209. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/docker-shared/references/shared-compose-fragments.md +0 -0
  210. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-backend/README.md +0 -0
  211. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-backend/SKILL.md +0 -0
  212. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-backend/references/backend-dockerfile-anatomy.md +0 -0
  213. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-backend/references/repo-evidence.md +0 -0
  214. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-backend/references/system-deps-and-caching.md +0 -0
  215. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-frontend/README.md +0 -0
  216. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-frontend/SKILL.md +0 -0
  217. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-frontend/references/build-args-and-nginx.md +0 -0
  218. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-frontend/references/frontend-dockerfile-anatomy.md +0 -0
  219. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/dockerfile-frontend/references/repo-evidence.md +0 -0
  220. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/documentation-and-adrs/SKILL.md +0 -0
  221. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/doubt-driven-development/SKILL.md +0 -0
  222. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/edge-to-service-trust-boundary/README.md +0 -0
  223. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/edge-to-service-trust-boundary/SKILL.md +0 -0
  224. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/edge-to-service-trust-boundary/references/repo-evidence.md +0 -0
  225. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/edge-to-service-trust-boundary/references/trust-contract.md +0 -0
  226. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/execute/SKILL.md +0 -0
  227. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/README.md +0 -0
  228. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/SKILL.md +0 -0
  229. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/references/api-versioning.md +0 -0
  230. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/references/app-factory-and-lifespan.md +0 -0
  231. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/references/custom-route-and-middleware.md +0 -0
  232. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/references/dependency-injection.md +0 -0
  233. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/references/model-and-serialization-patterns.md +0 -0
  234. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/fastapi-service-patterns/references/repo-evidence.md +0 -0
  235. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/file-export-and-reporting/README.md +0 -0
  236. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/file-export-and-reporting/SKILL.md +0 -0
  237. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/file-export-and-reporting/references/excel-generation.md +0 -0
  238. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/file-export-and-reporting/references/repo-evidence.md +0 -0
  239. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/file-export-and-reporting/references/streaming-and-downloads.md +0 -0
  240. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-repo-architecture/README.md +0 -0
  241. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-repo-architecture/SKILL.md +0 -0
  242. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-repo-architecture/references/api-layer-and-types.md +0 -0
  243. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-repo-architecture/references/divergences.md +0 -0
  244. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-repo-architecture/references/repo-evidence.md +0 -0
  245. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-repo-architecture/references/structure-and-state.md +0 -0
  246. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-repo-architecture/references/testing-patterns.md +0 -0
  247. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/frontend-ui-engineering/SKILL.md +0 -0
  248. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcp-cloud-run-github-actions/README.md +0 -0
  249. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcp-cloud-run-github-actions/SKILL.md +0 -0
  250. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcp-cloud-run-github-actions/references/cloud-run-deploy.md +0 -0
  251. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcp-cloud-run-github-actions/references/repo-evidence.md +0 -0
  252. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcp-cloud-run-github-actions/references/workflow-structure.md +0 -0
  253. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcs-file-storage-patterns/README.md +0 -0
  254. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcs-file-storage-patterns/SKILL.md +0 -0
  255. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcs-file-storage-patterns/references/client-and-uploads.md +0 -0
  256. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcs-file-storage-patterns/references/repo-evidence.md +0 -0
  257. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/gcs-file-storage-patterns/references/signed-urls-and-reads.md +0 -0
  258. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/git-workflow-and-versioning/SKILL.md +0 -0
  259. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/grafana-dashboards-and-alerts/README.md +0 -0
  260. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/grafana-dashboards-and-alerts/SKILL.md +0 -0
  261. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/grafana-dashboards-and-alerts/references/dashboard-json-and-templating.md +0 -0
  262. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/grafana-dashboards-and-alerts/references/provisioning-and-organization.md +0 -0
  263. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/grafana-dashboards-and-alerts/references/red-metrics-queries.md +0 -0
  264. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/grafana-dashboards-and-alerts/references/repo-evidence.md +0 -0
  265. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/grafana-dashboards-and-alerts/references/unified-alerting.md +0 -0
  266. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/graphql-patterns/README.md +0 -0
  267. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/graphql-patterns/SKILL.md +0 -0
  268. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/graphql-patterns/references/apollo-client-frontend.md +0 -0
  269. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/graphql-patterns/references/apollo-client-setup.md +0 -0
  270. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/graphql-patterns/references/repo-evidence.md +0 -0
  271. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/graphql-patterns/references/strawberry-backend.md +0 -0
  272. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/graphql-patterns/references/when-to-use-graphql.md +0 -0
  273. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/idea-refine/SKILL.md +0 -0
  274. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/idea-refine/examples.md +0 -0
  275. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/idea-refine/frameworks.md +0 -0
  276. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/idea-refine/refinement-criteria.md +0 -0
  277. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/idea-refine/scripts/idea-refine.sh +0 -0
  278. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/incident-postmortem/SKILL.md +0 -0
  279. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/incremental-implementation/SKILL.md +0 -0
  280. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/interview-me/SKILL.md +0 -0
  281. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kafka-config-driven/README.md +0 -0
  282. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kafka-config-driven/SKILL.md +0 -0
  283. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kafka-config-driven/references/config-and-sasl-kerberos.md +0 -0
  284. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kafka-config-driven/references/consumer-producer-patterns.md +0 -0
  285. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kafka-config-driven/references/repo-evidence.md +0 -0
  286. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kafka-config-driven/references/troubleshooting-and-patterns.md +0 -0
  287. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubectl-operations/README.md +0 -0
  288. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubectl-operations/SKILL.md +0 -0
  289. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubectl-operations/references/command-reference.md +0 -0
  290. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubectl-operations/references/context-namespace-rbac.md +0 -0
  291. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubectl-operations/references/debugging-playbooks.md +0 -0
  292. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubectl-operations/references/output-formats-and-selectors.md +0 -0
  293. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubectl-operations/references/repo-evidence.md +0 -0
  294. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubernetes-workload-hardening/README.md +0 -0
  295. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubernetes-workload-hardening/SKILL.md +0 -0
  296. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubernetes-workload-hardening/references/networkpolicy-and-rbac.md +0 -0
  297. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubernetes-workload-hardening/references/repo-evidence.md +0 -0
  298. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/kubernetes-workload-hardening/references/securitycontext-and-podsecurity.md +0 -0
  299. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/langfuse-llm-tracing/README.md +0 -0
  300. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/langfuse-llm-tracing/SKILL.md +0 -0
  301. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/langfuse-llm-tracing/references/langfuse-client-and-tracing.md +0 -0
  302. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/langfuse-llm-tracing/references/python-and-typescript.md +0 -0
  303. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/langfuse-llm-tracing/references/repo-evidence.md +0 -0
  304. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/load-testing/SKILL.md +0 -0
  305. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/manual-test/SKILL.md +0 -0
  306. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/modernization-and-migration/README.md +0 -0
  307. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/modernization-and-migration/SKILL.md +0 -0
  308. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/modernization-and-migration/references/migration-best-practices.md +0 -0
  309. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/modernization-and-migration/references/pydantic-v1-to-v2.md +0 -0
  310. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/modernization-and-migration/references/repo-evidence.md +0 -0
  311. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/modernization-and-migration/references/shared-internal-library.md +0 -0
  312. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/modernization-and-migration/references/sqlalchemy-14-to-20.md +0 -0
  313. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/multi-tenancy-patterns/README.md +0 -0
  314. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/multi-tenancy-patterns/SKILL.md +0 -0
  315. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/multi-tenancy-patterns/references/caching-patterns.md +0 -0
  316. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/multi-tenancy-patterns/references/isolation-strategies.md +0 -0
  317. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/multi-tenancy-patterns/references/repo-evidence.md +0 -0
  318. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/multi-tenancy-patterns/references/tenant-resolution.md +0 -0
  319. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-express-service/README.md +0 -0
  320. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-express-service/SKILL.md +0 -0
  321. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-express-service/references/app-factory-and-mode-dispatch.md +0 -0
  322. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-express-service/references/config-and-module-alias.md +0 -0
  323. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-express-service/references/middleware-patterns.md +0 -0
  324. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-express-service/references/repo-evidence.md +0 -0
  325. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-objection-knex/README.md +0 -0
  326. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-objection-knex/SKILL.md +0 -0
  327. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-objection-knex/references/migrations-and-validation.md +0 -0
  328. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-objection-knex/references/objection-model-and-knex.md +0 -0
  329. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/node-objection-knex/references/repo-evidence.md +0 -0
  330. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/notifications-and-messaging/README.md +0 -0
  331. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/notifications-and-messaging/SKILL.md +0 -0
  332. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/notifications-and-messaging/references/provider-abstraction.md +0 -0
  333. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/notifications-and-messaging/references/repo-evidence.md +0 -0
  334. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/notifications-and-messaging/references/templates-and-fallback.md +0 -0
  335. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/README.md +0 -0
  336. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/SKILL.md +0 -0
  337. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/references/health-and-readiness.md +0 -0
  338. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/references/logging-and-structlog.md +0 -0
  339. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/references/outbound-metrics-and-multi-mode.md +0 -0
  340. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/references/pii-redaction.md +0 -0
  341. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/references/repo-evidence.md +0 -0
  342. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/observability-and-logging/references/tracing-and-metrics.md +0 -0
  343. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/over-engineering-review/SKILL.md +0 -0
  344. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/performance-optimization/SKILL.md +0 -0
  345. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/planning-and-task-breakdown/SKILL.md +0 -0
  346. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/playwright-verification/SKILL.md +0 -0
  347. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/pydantic-schema-patterns/README.md +0 -0
  348. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/pydantic-schema-patterns/SKILL.md +0 -0
  349. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/pydantic-schema-patterns/references/repo-evidence.md +0 -0
  350. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/pydantic-schema-patterns/references/settings-and-validation.md +0 -0
  351. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/pydantic-schema-patterns/references/troubleshooting-and-common-errors.md +0 -0
  352. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/pydantic-schema-patterns/references/v1-vs-v2.md +0 -0
  353. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/README.md +0 -0
  354. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/SKILL.md +0 -0
  355. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/references/advanced-query-patterns.md +0 -0
  356. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/references/basedao-and-sessions.md +0 -0
  357. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/references/mongodb-advanced.md +0 -0
  358. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/references/other-db-mongodb.md +0 -0
  359. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/references/repo-evidence.md +0 -0
  360. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/python-dao-and-database/references/sqlalchemy-1x-vs-2x.md +0 -0
  361. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/radix-tailwind-component-patterns/README.md +0 -0
  362. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/radix-tailwind-component-patterns/SKILL.md +0 -0
  363. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/radix-tailwind-component-patterns/references/radix-primitives-and-variants.md +0 -0
  364. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/radix-tailwind-component-patterns/references/repo-evidence.md +0 -0
  365. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/radix-tailwind-component-patterns/references/tailwind-theme-and-cn.md +0 -0
  366. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/react-hook-form-zod-patterns/README.md +0 -0
  367. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/react-hook-form-zod-patterns/SKILL.md +0 -0
  368. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/react-hook-form-zod-patterns/references/form-setup-and-zod.md +0 -0
  369. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/react-hook-form-zod-patterns/references/multi-step-and-modes.md +0 -0
  370. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/react-hook-form-zod-patterns/references/repo-evidence.md +0 -0
  371. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/redis-caching-patterns/README.md +0 -0
  372. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/redis-caching-patterns/SKILL.md +0 -0
  373. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/redis-caching-patterns/references/cache-manager-and-fallback.md +0 -0
  374. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/redis-caching-patterns/references/namespacing-and-invalidation.md +0 -0
  375. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/redis-caching-patterns/references/repo-evidence.md +0 -0
  376. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/refresh-docs/SKILL.md +0 -0
  377. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/remember/SKILL.md +0 -0
  378. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/scope/SKILL.md +0 -0
  379. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/scope/scope-template.md +0 -0
  380. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/sdlc/SKILL.md +0 -0
  381. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/security-and-hardening/SKILL.md +0 -0
  382. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/security-verification/SKILL.md +0 -0
  383. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/shannon-ai-pentest/README.md +0 -0
  384. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/shannon-ai-pentest/SKILL.md +0 -0
  385. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/shannon-ai-pentest/references/operating-guide.md +0 -0
  386. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/shipping-and-launch/SKILL.md +0 -0
  387. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/simplification-debt/SKILL.md +0 -0
  388. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/smoke-test/SKILL.md +0 -0
  389. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/source-driven-development/SKILL.md +0 -0
  390. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/spec-driven-development/SKILL.md +0 -0
  391. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/sprint/SKILL.md +0 -0
  392. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/sprint/sprint-template.md +0 -0
  393. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/tanstack-react-query-patterns/README.md +0 -0
  394. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/tanstack-react-query-patterns/SKILL.md +0 -0
  395. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/tanstack-react-query-patterns/references/mutations-and-cache.md +0 -0
  396. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/tanstack-react-query-patterns/references/query-keys-and-hooks.md +0 -0
  397. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/tanstack-react-query-patterns/references/repo-evidence.md +0 -0
  398. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/task-tracker-sync/SKILL.md +0 -0
  399. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/README.md +0 -0
  400. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/SKILL.md +0 -0
  401. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/references/config-and-retry-idempotency.md +0 -0
  402. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/references/dag-dsl-interpreter.md +0 -0
  403. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/references/repo-evidence.md +0 -0
  404. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/references/schedule-registration.md +0 -0
  405. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/references/schedules-and-cron.md +0 -0
  406. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/temporal-config-driven/references/worker-workflow-activity-patterns.md +0 -0
  407. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/test-driven-development/SKILL.md +0 -0
  408. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/test-plan-review/SKILL.md +0 -0
  409. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/README.md +0 -0
  410. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/SKILL.md +0 -0
  411. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/async-and-mocking.md +0 -0
  412. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/coverage-gap-and-recommendations.md +0 -0
  413. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/github-actions-test-orchestration.md +0 -0
  414. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/pytest-and-fixtures.md +0 -0
  415. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/pytest-asyncio-modes.md +0 -0
  416. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/repo-evidence.md +0 -0
  417. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/security-regression-tests.md +0 -0
  418. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/testing-conventions/references/vitest-frontend-testing.md +0 -0
  419. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/threat-model/SKILL.md +0 -0
  420. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/triage/SKILL.md +0 -0
  421. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/ui-ux-design/SKILL.md +0 -0
  422. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/unit-test/SKILL.md +0 -0
  423. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/using-agent-skills/SKILL.md +0 -0
  424. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/vitest-rtl-msw-patterns/README.md +0 -0
  425. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/vitest-rtl-msw-patterns/SKILL.md +0 -0
  426. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/vitest-rtl-msw-patterns/references/msw-and-contract-tests.md +0 -0
  427. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/vitest-rtl-msw-patterns/references/repo-evidence.md +0 -0
  428. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/vitest-rtl-msw-patterns/references/vitest-rtl-setup.md +0 -0
  429. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zap-vapt-scanning/README.md +0 -0
  430. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zap-vapt-scanning/SKILL.md +0 -0
  431. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zap-vapt-scanning/references/operating-guide.md +0 -0
  432. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zap-vapt-scanning/scripts/endpoints.example.txt +0 -0
  433. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zap-vapt-scanning/scripts/requirements.txt +0 -0
  434. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zap-vapt-scanning/scripts/zap_vapt.py +0 -0
  435. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zustand-state-patterns/README.md +0 -0
  436. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zustand-state-patterns/SKILL.md +0 -0
  437. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zustand-state-patterns/references/async-polling-and-persistence.md +0 -0
  438. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zustand-state-patterns/references/repo-evidence.md +0 -0
  439. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/skills/zustand-state-patterns/references/store-structure-and-selectors.md +0 -0
  440. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/__main__.py +0 -0
  441. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/catalog.py +0 -0
  442. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/models.py +0 -0
  443. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/prompts.py +0 -0
  444. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/render.py +0 -0
  445. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/scaffold.py +0 -0
  446. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/upgrader.py +0 -0
  447. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/src/claude_kit/validator.py +0 -0
  448. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/CLAUDE.md +0 -0
  449. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/CLAUDE.stack.md.tmpl +0 -0
  450. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/CONTINUITY.template.md +0 -0
  451. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/README.claude-sdlc.md.tmpl +0 -0
  452. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/agent-memory/MEMORY.md +0 -0
  453. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/agent-memory/api/.gitkeep +0 -0
  454. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/agent-memory/architecture/.gitkeep +0 -0
  455. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/agent-memory/debugging/.gitkeep +0 -0
  456. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/agent-memory/gotchas/.gitkeep +0 -0
  457. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/agent-memory/patterns/.gitkeep +0 -0
  458. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/agent-memory/performance/.gitkeep +0 -0
  459. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/artifacts/adr.md +0 -0
  460. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/artifacts/api-change-report.md +0 -0
  461. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/artifacts/feature-spec.md +0 -0
  462. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/artifacts/release-plan.md +0 -0
  463. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/artifacts/runbook.md +0 -0
  464. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/artifacts/security-review.md +0 -0
  465. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/artifacts/test-plan.md +0 -0
  466. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/README.md +0 -0
  467. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/agents/data-workflow-agent.md +0 -0
  468. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/agents/founder-prototype-agent.md +0 -0
  469. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/agents/internal-tools-builder.md +0 -0
  470. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/agents/pm-copilot.md +0 -0
  471. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/agents/staff-pm-reviewer.md +0 -0
  472. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/agents/support-ticket-engineer.md +0 -0
  473. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/devops-and-release/README.md +0 -0
  474. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/devops-and-release/pack.yaml +0 -0
  475. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/engineering-core/README.md +0 -0
  476. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/engineering-core/pack.yaml +0 -0
  477. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/non-engineer-builder/README.md +0 -0
  478. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/non-engineer-builder/pack.yaml +0 -0
  479. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/onboarding-and-docs/README.md +0 -0
  480. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/onboarding-and-docs/pack.yaml +0 -0
  481. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/product-to-code/README.md +0 -0
  482. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/product-to-code/pack.yaml +0 -0
  483. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/quality-and-review/README.md +0 -0
  484. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/quality-and-review/pack.yaml +0 -0
  485. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/security-and-compliance/README.md +0 -0
  486. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/packs/security-and-compliance/pack.yaml +0 -0
  487. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/ai-working-agreement.md +0 -0
  488. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/ambiguity-resolution.md +0 -0
  489. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/branch-and-pr-policy.md +0 -0
  490. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/compliance-policy.md +0 -0
  491. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/non-engineer-safe-coding.md +0 -0
  492. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/pii-policy.md +0 -0
  493. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/production-data-policy.md +0 -0
  494. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/prompt-to-task-conversion.md +0 -0
  495. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/prototype-boundaries.md +0 -0
  496. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/rules/secrets-policy.md +0 -0
  497. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/customer-issue-to-fix/SKILL.md +0 -0
  498. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/feature-from-idea/SKILL.md +0 -0
  499. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/prompt-to-safe-task/SKILL.md +0 -0
  500. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/prototype-to-production/SKILL.md +0 -0
  501. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/repo-onboarding/SKILL.md +0 -0
  502. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/review-scope/SKILL.md +0 -0
  503. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/review-sprint/SKILL.md +0 -0
  504. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/review-sprint-plan/SKILL.md +0 -0
  505. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/org/skills/review-ux-flow/SKILL.md +0 -0
  506. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/backend/go/net-http/rules/go-patterns.md +0 -0
  507. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/backend/python/fastapi/rules/fastapi-patterns.md +0 -0
  508. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/mongodb/agents/migration-specialist.md +0 -0
  509. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/mongodb/agents/mongodb-specialist.md +0 -0
  510. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/mongodb/rules/mongodb-patterns.md +0 -0
  511. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/postgres/agents/db-performance-reviewer.md +0 -0
  512. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/postgres/agents/migration-specialist.md +0 -0
  513. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/postgres/agents/postgres-specialist.md +0 -0
  514. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/postgres/rules/database-performance.md +0 -0
  515. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/db/postgres/rules/postgres-patterns.md +0 -0
  516. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/frontend/react/rules/design-system-compliance.md +0 -0
  517. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/frontend/react/rules/mobile-design-guidelines.md +0 -0
  518. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/frontend/react/rules/react-patterns.md +0 -0
  519. {claude_code_kit-0.25.0 → claude_code_kit-0.26.0}/templates/stacks/frontend/react/rules/ui-design-system.md +0 -0
  520. {claude_code_kit-0.25.0 → claude_code_kit-0.26.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.25.0",
13
+ "version": "0.26.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.25.0",
3
+ "version": "0.26.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,41 @@ 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.26.0] — 2026-06-24
8
+
9
+ **Post-hardening follow-up: two correctness/security fixes plus polish, all from a verified review
10
+ punch list.**
11
+
12
+ ### Added
13
+ - **Plugin now guards secret-file reads out of the box.** `protect-secrets` (PreToolUse/Read — blocks
14
+ reading `.env`/`.pem`/`.key`/`id_rsa`/credentials/…) was installed by the pip CLI (it's in the
15
+ `standard`/`all` profiles) but missing from the always-on plugin hook set, so plugin-only users had
16
+ no Read guard until they ran an init. It's now in `PLUGIN_HOOK_IDS`; `hooks/hooks.json` gains a
17
+ `PreToolUse`/`Read` group.
18
+ - **`.github/dependabot.yml`** for the `github-actions` ecosystem (weekly, grouped) so CI/publish
19
+ actions are kept current and SHA-pinned by Dependabot's PRs, with auditable tag comments.
20
+ `pypa/gh-action-pypi-publish` stays on `release/v1` (required for Trusted Publishing + attestations).
21
+
22
+ ### Changed
23
+ - **`pipeline close-gate` enforces the blocking-findings rule.** It now refuses to record a gate as
24
+ passed while any **critical/high/medium** findings are open (`rules/quality-gates.md`); low/cosmetic
25
+ still pass. A deliberate override requires `--force` **with** `--override-reason "<why>"`, recorded
26
+ under `gate_overrides[gate]` for human review.
27
+ - **`pipeline validate` re-checks gate evidence.** When a gate is recorded passed and has a
28
+ `gate_evidence` path, validate now fails if that file no longer exists on disk, and surfaces any
29
+ force-closed gate. Lenient on the upgrade path (no evidence map → silent; partial map → warn).
30
+ - **Inline hook guards quiet their `jq` calls** (`2>/dev/null || true`) so malformed/missing hook JSON
31
+ can't spam stderr — matching the script-backed guards; `guard-secrets.sh` aligned for consistency.
32
+
33
+ ### Fixed
34
+ - **Docs consistency checker catches duplicate gate tables.** `check_docs_consistency.py` previously
35
+ keyed profile gate rows in a dict, so a second (possibly stale) table could silently overwrite an
36
+ earlier one; it now collects every occurrence, flags duplicates, and requires each to match
37
+ `profiles.yaml`.
38
+ - **Stale comments in `scripts/init.sh`** corrected: it's described as the degraded, no-resolution
39
+ fallback (the pip CLI is the catalog-driven/upgrade-safe installer), and existing files are noted as
40
+ written to `*.claude-kit` sidecars (not `*.example`).
41
+
7
42
  ## [0.25.0] — 2026-06-24
8
43
 
9
44
  **PR4 of the phased hardening review: supply-chain provenance, an explicit trust model, and a full
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-kit
3
- Version: 0.25.0
3
+ Version: 0.26.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
@@ -29,11 +29,11 @@
29
29
  "hooks": [
30
30
  {
31
31
  "type": "command",
32
- "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"
32
+ "command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); 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"
33
33
  },
34
34
  {
35
35
  "type": "command",
36
- "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"
36
+ "command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); 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"
37
37
  },
38
38
  {
39
39
  "type": "command",
@@ -49,6 +49,15 @@
49
49
  }
50
50
  ]
51
51
  },
52
+ {
53
+ "matcher": "Read",
54
+ "hooks": [
55
+ {
56
+ "type": "command",
57
+ "command": "command -v jq >/dev/null 2>&1 || exit 0; FP=$(jq -r '.tool_input.file_path // empty' 2>/dev/null || true); if echo \"$FP\" | grep -qE '(^|/)\\.env$|\\.pem$|\\.key$|(^|/)id_rsa|(^|/)id_ed25519|(^|/)credentials(\\.json)?$|\\.p12$'; then echo 'BLOCKED: refusing to read a secrets file. Use .env.example or a secret manager.' >&2; exit 2; fi"
58
+ }
59
+ ]
60
+ },
52
61
  {
53
62
  "matcher": "Edit|Write",
54
63
  "hooks": [
@@ -3,7 +3,7 @@
3
3
  # Pairs with the secret-scanner agent and the protect-secrets read-guard — this is the automatic,
4
4
  # every-commit guardrail. Degrades to a no-op when not a git commit or git/jq is unavailable.
5
5
  command -v jq >/dev/null 2>&1 || exit 0
6
- CMD=$(jq -r '.tool_input.command // empty' 2>/dev/null)
6
+ CMD=$(jq -r '.tool_input.command // empty' 2>/dev/null || true)
7
7
  echo "$CMD" | grep -qE 'git[[:space:]]+commit' || exit 0
8
8
  cd "${CLAUDE_PROJECT_DIR:-.}" 2>/dev/null || exit 0
9
9
  command -v git >/dev/null 2>&1 || exit 0
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "claude-code-kit"
7
- version = "0.25.0"
7
+ version = "0.26.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"
@@ -39,10 +39,14 @@ Schema (keep it small and truthful — omit a field rather than guess it):
39
39
  "lanes": { "<lane>": "not-started | in-progress | passed | failed" },
40
40
  "last_gate_passed": "<gate token, e.g. code-review>",
41
41
  "open_findings": { "critical": 0, "high": 0, "medium": 0 },
42
+ "gate_evidence": { "<gate token>": "<path to the evidence artifact>" },
43
+ "gate_overrides": { "<gate token>": "<why a blocking gate was force-closed>" },
42
44
  "next": "<the immediate next action>"
43
45
  }
44
46
  ```
45
47
 
48
+ A gate is PASS only when zero **critical/high/medium** findings remain open (low/cosmetic may pass with notes). `gate_evidence` records the artifact backing each passed gate; `gate_overrides` is written **only** when a gate is deliberately force-closed despite open blocking findings, so a reviewer (or `claude-kit pipeline validate`) can surface and re-examine it.
49
+
46
50
  **Resume by reloading, not by re-running.** On resume, read the snapshot as *context* to decide where to continue — then continue from there. Do **not** re-run setup that already ran, re-apply edits already committed, or re-open a gate already PASSed. Re-enter at the first gate *after* `last_gate_passed`, re-running only un-passed or defect-affected lanes. The snapshot records what was *true when written*, so the verify-before-trust check still applies (`.claude/rules/agent-memory.md`): if a "passed" gate's artifact is gone, treat it as not passed. If the snapshot is absent or unparseable, fall back to the freeform CONTINUITY state (back-compatible) and proceed.
47
51
 
48
52
  ## Concurrency
@@ -183,13 +183,17 @@ def _effective_gates() -> dict[str, set[str]]:
183
183
  return {name: resolve(name) for name in profiles}
184
184
 
185
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] = {}
186
+ def _doc_gate_sets(relfile: str) -> dict[str, list[set[str]]]:
187
+ """Parse *every* lean/standard/enterprise gate row from a doc (one entry per table occurrence).
188
+
189
+ Returns a list of gate sets per profile rather than a single value, so a second (possibly stale)
190
+ gate table can't silently overwrite an earlier one — each occurrence is checked independently.
191
+ """
192
+ raw: dict[str, list[str]] = {}
189
193
  for line in _read(relfile).splitlines():
190
194
  m = re.match(r"\|\s*\*\*(lean|standard|enterprise)\*\*\s*\|(.+?)\|\s*$", line)
191
195
  if m:
192
- raw[m.group(1)] = m.group(2)
196
+ raw.setdefault(m.group(1), []).append(m.group(2))
193
197
 
194
198
  def tokens(cell: str) -> set[str]:
195
199
  return {
@@ -198,16 +202,18 @@ def _doc_gate_sets(relfile: str) -> dict[str, set[str]]:
198
202
  if t.strip().strip("*").strip("\\").strip()
199
203
  }
200
204
 
201
- def expand(profile: str) -> set[str]:
202
- cell = raw[profile]
205
+ def expand(cell: str) -> set[str]:
203
206
  if (
204
207
  "+" in cell
205
208
  ): # e.g. "standard + pipeline-green · observability-ready · acceptance"
206
209
  base, extra = cell.split("+", 1)
207
- return expand(base.strip().strip("*").lower()) | tokens(extra)
210
+ base_name = base.strip().strip("*").lower()
211
+ base_cells = raw.get(base_name)
212
+ base_gates = expand(base_cells[0]) if base_cells else set()
213
+ return base_gates | tokens(extra)
208
214
  return tokens(cell)
209
215
 
210
- return {p: expand(p) for p in raw}
216
+ return {p: [expand(c) for c in cells] for p, cells in raw.items()}
211
217
 
212
218
 
213
219
  def check_profile_gates() -> list[str]:
@@ -216,21 +222,30 @@ def check_profile_gates() -> list[str]:
216
222
  for relfile in ("README.md", "skills/sdlc/SKILL.md"):
217
223
  doc = _doc_gate_sets(relfile)
218
224
  for profile in ("lean", "standard", "enterprise"):
219
- if profile not in doc:
225
+ occurrences = doc.get(profile) or []
226
+ if not occurrences:
220
227
  errors.append(f"{relfile}: no gate row found for profile {profile!r}")
221
228
  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)}")
229
+ if len(occurrences) > 1:
230
230
  errors.append(
231
- f"{relfile}: {profile} gate row disagrees with profiles.yaml "
232
- + "; ".join(detail)
231
+ f"{relfile}: {len(occurrences)} gate rows for profile {profile!r} "
232
+ "(duplicate gate table) — keep exactly one so a stale table can't hide "
233
+ "behind a correct one"
233
234
  )
235
+ for idx, gates in enumerate(occurrences):
236
+ if gates != effective[profile]:
237
+ missing = effective[profile] - gates
238
+ extra = gates - effective[profile]
239
+ detail = []
240
+ if missing:
241
+ detail.append(f"missing {sorted(missing)}")
242
+ if extra:
243
+ detail.append(f"unexpected {sorted(extra)}")
244
+ where = "" if len(occurrences) == 1 else f" (occurrence {idx + 1})"
245
+ errors.append(
246
+ f"{relfile}: {profile} gate row{where} disagrees with "
247
+ "profiles.yaml — " + "; ".join(detail)
248
+ )
234
249
  return errors
235
250
 
236
251
 
@@ -5,13 +5,15 @@
5
5
  # project's .claude/ directory and drops a generic CLAUDE.md at the project root.
6
6
  #
7
7
  # Used by the /claude-kit:init slash command (plugin) and runnable directly from a checkout.
8
- # The pip CLI (`claude-kit init`) performs the same scaffolding in Python.
8
+ # This is a degraded, no-resolution fallback: it copies the full payload as-is. The pip CLI
9
+ # (`claude-kit init`) is the recommended installer — it is catalog-driven (stack/profile/MCP
10
+ # resolution) and upgrade-safe (diff/upgrade), which this script does not do.
9
11
  #
10
12
  # Usage: init.sh [TARGET_DIR] [--defaults] [--force] [--minimal] [--no-hooks]
11
13
  # TARGET_DIR project to scaffold into (default: $CLAUDE_PROJECT_DIR or current dir)
12
14
  # --defaults accepted for parity with the pip CLI (`claude-kit init --defaults`); a no-op here
13
15
  # because this shell fallback is already non-interactive
14
- # --force overwrite existing CLAUDE.md / settings.json (otherwise written as *.example)
16
+ # --force overwrite existing CLAUDE.md / settings.json (otherwise written as *.claude-kit sidecars)
15
17
  # --minimal only CLAUDE.md + rules/ (skip agents, skills, hooks, memory)
16
18
  # --no-hooks skip installing hook scripts and settings.json
17
19
  set -euo pipefail
@@ -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.25.0"
10
+ __version__ = "0.26.0"
@@ -381,9 +381,27 @@ def pipeline_close_gate(
381
381
  ..., "--evidence", help="path to the evidence artifact for this gate"
382
382
  ),
383
383
  path: str = typer.Argument(".", help="target project dir (default: .)"),
384
+ force: bool = typer.Option(
385
+ False,
386
+ "--force",
387
+ help="close the gate despite open critical/high/medium findings (requires --override-reason)",
388
+ ),
389
+ override_reason: Optional[str] = typer.Option(
390
+ None,
391
+ "--override-reason",
392
+ help="justification recorded when --force bypasses open blocking findings",
393
+ ),
384
394
  ) -> None:
385
- """Record a quality gate as passed, with an evidence file, in the pipeline snapshot."""
386
- _print_report(*pipeline.close_gate(path, gate, evidence))
395
+ """Record a quality gate as passed, with an evidence file, in the pipeline snapshot.
396
+
397
+ Refuses to pass a gate while critical/high/medium findings are open unless --force is given with
398
+ an --override-reason (recorded for human review).
399
+ """
400
+ _print_report(
401
+ *pipeline.close_gate(
402
+ path, gate, evidence, force=force, override_reason=override_reason
403
+ )
404
+ )
387
405
 
388
406
 
389
407
  @pipeline_app.command("abort")
@@ -19,7 +19,7 @@ from typing import Any
19
19
 
20
20
  _RM_RF_GUARD = (
21
21
  "command -v jq >/dev/null 2>&1 || exit 0; "
22
- "CMD=$(jq -r '.tool_input.command'); "
22
+ "CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); "
23
23
  "if echo \"$CMD\" | grep -qE 'rm[[:space:]]+-[^[:space:]]*r[^[:space:]]*f'; then "
24
24
  "echo 'BLOCKED: rm -rf is disabled by claude-kit. Move to trash or delete specific paths "
25
25
  "explicitly.' >&2; exit 2; fi"
@@ -30,7 +30,7 @@ _RM_RF_GUARD = (
30
30
  # (maintenance, mainframe-fix, remaster-ui, domain-model) are NOT blocked.
31
31
  _PUSH_GUARD = (
32
32
  "command -v jq >/dev/null 2>&1 || exit 0; "
33
- "CMD=$(jq -r '.tool_input.command'); "
33
+ "CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); "
34
34
  "if echo \"$CMD\" | grep -qE 'git[[:space:]]+push.*[[:space:]:](main|master)([[:space:]]|$)'; "
35
35
  "then echo 'BLOCKED: refusing to push to main/master — use a feature branch and a PR.' >&2; "
36
36
  "exit 2; fi"
@@ -38,7 +38,7 @@ _PUSH_GUARD = (
38
38
 
39
39
  _SECRETS_GUARD = (
40
40
  "command -v jq >/dev/null 2>&1 || exit 0; "
41
- "FP=$(jq -r '.tool_input.file_path // empty'); "
41
+ "FP=$(jq -r '.tool_input.file_path // empty' 2>/dev/null || true); "
42
42
  'if echo "$FP" | grep -qE \'(^|/)\\.env$|\\.pem$|\\.key$|(^|/)id_rsa|(^|/)id_ed25519|'
43
43
  "(^|/)credentials(\\.json)?$|\\.p12$'; then "
44
44
  "echo 'BLOCKED: refusing to read a secrets file. Use .env.example or a secret manager.' >&2; "
@@ -244,6 +244,7 @@ PLUGIN_HOOK_IDS: frozenset[str] = frozenset(
244
244
  "guard-rm-rf",
245
245
  "guard-push-main",
246
246
  "guard-destructive-git",
247
+ "protect-secrets",
247
248
  "guard-commit-secrets",
248
249
  "warn-shared-modules",
249
250
  "warn-llm-io",
@@ -27,6 +27,9 @@ SCOPES = frozenset({"individual", "team", "organization"})
27
27
  MODES = frozenset({"A", "B", "C", "D"})
28
28
  LANE_STATES = frozenset({"not-started", "in-progress", "passed", "failed"})
29
29
  FINDING_KEYS = frozenset({"critical", "high", "medium", "low"})
30
+ #: Severities that block a gate (rules/quality-gates.md: a gate is PASS only with zero of these;
31
+ #: low/cosmetic may pass with notes). Ordered for stable messages.
32
+ BLOCKING_FINDINGS = ("critical", "high", "medium")
30
33
 
31
34
 
32
35
  def _snapshot_path(target: str | Path) -> Path:
@@ -73,6 +76,23 @@ def _selection(target: str | Path) -> dict[str, Any]:
73
76
  return sel if isinstance(sel, dict) else {}
74
77
 
75
78
 
79
+ def _blocking_findings(snap: dict[str, Any]) -> dict[str, int]:
80
+ """Return the ``{severity: count}`` of open findings that block a gate (count > 0).
81
+
82
+ Only :data:`BLOCKING_FINDINGS` severities count; malformed/absent counts are ignored (lenient
83
+ for older or partial snapshots).
84
+ """
85
+ raw = snap.get("open_findings")
86
+ if not isinstance(raw, dict):
87
+ return {}
88
+ out: dict[str, int] = {}
89
+ for sev in BLOCKING_FINDINGS:
90
+ count = raw.get(sev, 0)
91
+ if isinstance(count, int) and not isinstance(count, bool) and count > 0:
92
+ out[sev] = count
93
+ return out
94
+
95
+
76
96
  def validate(target: str | Path) -> tuple[bool, list[str]]:
77
97
  """Validate the pipeline snapshot's shape and coherence (no writes).
78
98
 
@@ -136,6 +156,31 @@ def validate(target: str | Path) -> tuple[bool, list[str]]:
136
156
  if gate is not None and gates and gate not in gates:
137
157
  fail(f"last_gate_passed {gate!r} is not a gate of this profile ({gates})")
138
158
 
159
+ overrides = snap.get("gate_overrides")
160
+ if overrides is not None and not isinstance(overrides, dict):
161
+ fail("gate_overrides must be an object of {gate: reason}")
162
+
163
+ # A recorded gate's evidence artifact must still exist on disk. Lenient on the upgrade path:
164
+ # a snapshot with no gate_evidence map at all simply doesn't track evidence (the norm for
165
+ # orchestrator-written snapshots) — stay silent; only flag a *partial* map that omits this gate.
166
+ if gate is not None:
167
+ evidence_map = snap.get("gate_evidence")
168
+ if isinstance(evidence_map, dict) and gate in evidence_map:
169
+ ev = evidence_map[gate]
170
+ if not (isinstance(ev, str) and Path(ev).expanduser().is_file()):
171
+ fail(
172
+ f"last_gate_passed {gate!r} is recorded passed but its evidence file is "
173
+ f"missing: {ev!r}"
174
+ )
175
+ elif isinstance(evidence_map, dict):
176
+ msgs.append(
177
+ f"WARN last_gate_passed {gate!r} has no recorded gate_evidence path"
178
+ )
179
+ if isinstance(overrides, dict) and gate in overrides:
180
+ msgs.append(
181
+ f"WARN gate {gate!r} was force-closed (override: {overrides[gate]!r}) — review"
182
+ )
183
+
139
184
  for field in ("task", "stage", "next"):
140
185
  if field not in snap or snap[field] is None:
141
186
  msgs.append(f"WARN snapshot has no {field!r} (resume context is weaker)")
@@ -176,13 +221,23 @@ def status(target: str | Path) -> tuple[bool, list[str]]:
176
221
 
177
222
 
178
223
  def close_gate(
179
- target: str | Path, gate: str, evidence: str | Path
224
+ target: str | Path,
225
+ gate: str,
226
+ evidence: str | Path,
227
+ *,
228
+ force: bool = False,
229
+ override_reason: str | None = None,
180
230
  ) -> tuple[bool, list[str]]:
181
231
  """Record ``gate`` as passed (with an evidence artifact) in the snapshot.
182
232
 
183
233
  Validates that the evidence file exists and that ``gate`` is a real gate for the installed
184
- profile, then sets ``last_gate_passed`` and stores the evidence path. Seeds a minimal snapshot
185
- (profile/scope from the install snapshot) if no run snapshot exists yet.
234
+ profile, **refuses to pass a gate while critical/high/medium findings are open** (per
235
+ ``rules/quality-gates.md``), then sets ``last_gate_passed`` and stores the evidence path. Seeds a
236
+ minimal snapshot (profile/scope from the install snapshot) if no run snapshot exists yet.
237
+
238
+ A forced close (``force=True`` with a non-empty ``override_reason``) bypasses the blocking-findings
239
+ rule but records the reason under ``gate_overrides[gate]`` so ``validate``/``status`` can surface it
240
+ for human review.
186
241
  """
187
242
  msgs: list[str] = []
188
243
  evidence_path = Path(evidence).expanduser().resolve()
@@ -212,6 +267,30 @@ def close_gate(
212
267
  "stage": gate,
213
268
  }
214
269
 
270
+ blocking = _blocking_findings(snap)
271
+ if blocking:
272
+ rendered = ", ".join(f"{sev}={count}" for sev, count in blocking.items())
273
+ if not force:
274
+ return False, [
275
+ f"FAIL cannot close {gate!r}: {rendered} open finding(s) must be resolved first "
276
+ "(critical/high/medium block a gate per quality-gates.md). "
277
+ "Re-run with --force --override-reason '<why>' to record a deliberate override."
278
+ ]
279
+ if not (override_reason and override_reason.strip()):
280
+ return False, [
281
+ "FAIL --force requires --override-reason '<why>' explaining why the open "
282
+ f"finding(s) ({rendered}) are being bypassed"
283
+ ]
284
+ overrides = snap.get("gate_overrides")
285
+ if not isinstance(overrides, dict):
286
+ overrides = {}
287
+ overrides[gate] = override_reason.strip()
288
+ snap["gate_overrides"] = overrides
289
+ msgs.append(
290
+ f"WARN gate {gate!r} force-closed with open findings ({rendered}): "
291
+ f"{override_reason.strip()}"
292
+ )
293
+
215
294
  snap["last_gate_passed"] = gate
216
295
  evidence_map = snap.get("gate_evidence")
217
296
  if not isinstance(evidence_map, dict):
@@ -26,11 +26,11 @@
26
26
  "hooks": [
27
27
  {
28
28
  "type": "command",
29
- "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"
29
+ "command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); 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"
30
30
  },
31
31
  {
32
32
  "type": "command",
33
- "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"
33
+ "command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); 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"
34
34
  }
35
35
  ]
36
36
  },