claude-code-kit 0.25.0__tar.gz → 0.26.1__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.1}/.claude-plugin/marketplace.json +1 -1
  2. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/.claude-plugin/plugin.json +1 -1
  3. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/CHANGELOG.md +60 -0
  4. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/PKG-INFO +1 -1
  5. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/security-reviewer.md +1 -1
  6. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/hooks.json +11 -2
  7. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/guard-secrets.sh +1 -1
  8. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/pyproject.toml +1 -1
  9. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/continuity.md +4 -0
  10. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/scripts/check_docs_consistency.py +34 -19
  11. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/scripts/init.sh +4 -2
  12. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/SKILL.md +1 -1
  13. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shannon-ai-pentest/SKILL.md +6 -7
  14. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/smoke-test/SKILL.md +1 -1
  15. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/scripts/zap_vapt.py +11 -11
  16. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/__init__.py +1 -1
  17. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/cli.py +20 -2
  18. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/hooks.py +9 -6
  19. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/pipeline.py +82 -3
  20. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/scaffold.py +3 -0
  21. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/prompt-to-safe-task/SKILL.md +1 -1
  22. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/repo-onboarding/SKILL.md +1 -1
  23. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/settings.json +2 -2
  24. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/.gitignore +0 -0
  25. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/CLAUDE.md +0 -0
  26. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/CONTRIBUTING.md +0 -0
  27. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/LICENSE +0 -0
  28. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/README.md +0 -0
  29. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/acceptance-reviewer.md +0 -0
  30. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/auditor.md +0 -0
  31. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/dependency-scanner.md +0 -0
  32. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/developer.md +0 -0
  33. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/devils-advocate.md +0 -0
  34. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/devops-engineer.md +0 -0
  35. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/e2e-tester.md +0 -0
  36. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/em-reviewer.md +0 -0
  37. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/incident-responder.md +0 -0
  38. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/merge-reviewer.md +0 -0
  39. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/observability-engineer.md +0 -0
  40. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/orchestrator.md +0 -0
  41. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/owasp-reviewer.md +0 -0
  42. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/policy-validator.md +0 -0
  43. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/pr-raiser.md +0 -0
  44. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/risk-classifier.md +0 -0
  45. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/sdlc-code-reviewer.md +0 -0
  46. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/secret-scanner.md +0 -0
  47. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/senior-backend-dev.md +0 -0
  48. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/senior-frontend-dev.md +0 -0
  49. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/senior-tester.md +0 -0
  50. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/spec-doc-writer.md +0 -0
  51. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/story-planner.md +0 -0
  52. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/technical-architect.md +0 -0
  53. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/tester.md +0 -0
  54. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/ui-designer.md +0 -0
  55. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/unit-tester.md +0 -0
  56. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/capture.yaml +0 -0
  57. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/mcp.yaml +0 -0
  58. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/org.yaml +0 -0
  59. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/profiles.yaml +0 -0
  60. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/stacks.yaml +0 -0
  61. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/abort.md +0 -0
  62. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/init.md +0 -0
  63. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/sdlc.md +0 -0
  64. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/status.md +0 -0
  65. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/agentic-patterns.md +0 -0
  66. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/agents.md +0 -0
  67. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/architecture.md +0 -0
  68. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/coverage-audit.md +0 -0
  69. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/eval-harness.md +0 -0
  70. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/org-capabilities.md +0 -0
  71. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/stack-skills/GAP-ANALYSIS.md +0 -0
  72. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/stack-skills/README.md +0 -0
  73. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/stack-skills/REPO-INVENTORY.md +0 -0
  74. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/audit-log.sh +0 -0
  75. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/capture-learnings.sh +0 -0
  76. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/guard-destructive-git.sh +0 -0
  77. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/guard-kubectl-delete.sh +0 -0
  78. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/lint-fix.sh +0 -0
  79. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/load-autonomy.sh +0 -0
  80. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/load-continuity.sh +0 -0
  81. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/load-learnings.sh +0 -0
  82. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/type-check.sh +0 -0
  83. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/validate-frontmatter.sh +0 -0
  84. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/validate-settings.sh +0 -0
  85. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-large-edits.sh +0 -0
  86. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-llm-io.sh +0 -0
  87. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-missing-tests.sh +0 -0
  88. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-sensitive-files.sh +0 -0
  89. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-shared-modules.sh +0 -0
  90. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/agent-guardrails.md +0 -0
  91. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/agent-memory.md +0 -0
  92. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/agent-resilience.md +0 -0
  93. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/autonomy-levels.md +0 -0
  94. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/code-organization.md +0 -0
  95. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/design-patterns.md +0 -0
  96. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/devops-observability.md +0 -0
  97. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/documentation.md +0 -0
  98. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/evals.md +0 -0
  99. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/frontend-best-practices.md +0 -0
  100. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/goal-setting-and-monitoring.md +0 -0
  101. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/human-in-the-loop.md +0 -0
  102. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/linting-and-formatting.md +0 -0
  103. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/mandatory-workflow.md +0 -0
  104. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/model-tiers.md +0 -0
  105. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/quality-gates.md +0 -0
  106. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/rarv-cycle.md +0 -0
  107. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/reasoning-techniques.md +0 -0
  108. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/responsive-and-accessibility.md +0 -0
  109. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/risk-classification.md +0 -0
  110. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/testing.md +0 -0
  111. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/tool-design.md +0 -0
  112. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/scripts/gen_hooks.py +0 -0
  113. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/accessibility-checklist.md +0 -0
  114. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/orchestration-patterns.md +0 -0
  115. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/performance-checklist.md +0 -0
  116. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/security-checklist.md +0 -0
  117. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/testing-patterns.md +0 -0
  118. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/accessibility-review/SKILL.md +0 -0
  119. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/README.md +0 -0
  120. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/SKILL.md +0 -0
  121. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/alembic-setup-and-env.md +0 -0
  122. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/async-and-multitenant-migrations.md +0 -0
  123. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/repo-evidence.md +0 -0
  124. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/troubleshooting-and-debugging.md +0 -0
  125. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/writing-migrations.md +0 -0
  126. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/README.md +0 -0
  127. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/SKILL.md +0 -0
  128. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/references/generate-helpers-and-retry.md +0 -0
  129. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/references/repo-evidence.md +0 -0
  130. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/references/vertex-client-and-auth.md +0 -0
  131. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-and-interface-design/SKILL.md +0 -0
  132. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-integration/SKILL.md +0 -0
  133. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/README.md +0 -0
  134. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/SKILL.md +0 -0
  135. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/references/query-params-conventions.md +0 -0
  136. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/references/repo-evidence.md +0 -0
  137. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/references/response-metadata.md +0 -0
  138. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/archive-sprint/SKILL.md +0 -0
  139. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/README.md +0 -0
  140. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/SKILL.md +0 -0
  141. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/references/async-boundaries.md +0 -0
  142. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/references/lifecycle-and-gather.md +0 -0
  143. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/references/repo-evidence.md +0 -0
  144. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/README.md +0 -0
  145. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/SKILL.md +0 -0
  146. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/auth-dependencies.md +0 -0
  147. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/rbac-and-permissions.md +0 -0
  148. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/repo-evidence.md +0 -0
  149. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/security-hardening.md +0 -0
  150. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/tokens-and-hashing.md +0 -0
  151. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/README.md +0 -0
  152. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/SKILL.md +0 -0
  153. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/deployment-patterns.md +0 -0
  154. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/entrypoint-and-config.md +0 -0
  155. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/repo-evidence.md +0 -0
  156. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/structure-patterns.md +0 -0
  157. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/troubleshooting.md +0 -0
  158. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backlog/SKILL.md +0 -0
  159. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backlog/item-template.md +0 -0
  160. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/browser-testing-with-devtools/SKILL.md +0 -0
  161. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/bug-hunt/SKILL.md +0 -0
  162. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/ci-cd-and-automation/SKILL.md +0 -0
  163. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/code-review-and-quality/SKILL.md +0 -0
  164. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/code-simplification/SKILL.md +0 -0
  165. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/component-design/SKILL.md +0 -0
  166. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/README.md +0 -0
  167. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/SKILL.md +0 -0
  168. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/references/config-layering-anatomy.md +0 -0
  169. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/references/mode-dispatch-and-precedence.md +0 -0
  170. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/references/repo-evidence.md +0 -0
  171. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/consolidate-learnings/SKILL.md +0 -0
  172. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/README.md +0 -0
  173. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/SKILL.md +0 -0
  174. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/deployment-and-secrets.md +0 -0
  175. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/dockerfile-and-compose.md +0 -0
  176. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/entrypoint-and-modes.md +0 -0
  177. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/kerberos-kinit-bootstrap.md +0 -0
  178. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/makefile-dev-workflow.md +0 -0
  179. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/repo-evidence.md +0 -0
  180. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/context-engineering/SKILL.md +0 -0
  181. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/README.md +0 -0
  182. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/SKILL.md +0 -0
  183. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/choosing-and-operations.md +0 -0
  184. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/kubernetes-cronjob.md +0 -0
  185. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/repo-evidence.md +0 -0
  186. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/temporal-schedules.md +0 -0
  187. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/README.md +0 -0
  188. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/SKILL.md +0 -0
  189. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/bigquery-advanced-patterns.md +0 -0
  190. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/bigquery-gcs-io.md +0 -0
  191. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/medallion-architecture.md +0 -0
  192. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/repo-evidence.md +0 -0
  193. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/temp-table-merge-pattern.md +0 -0
  194. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/debugging-and-error-recovery/SKILL.md +0 -0
  195. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/decision/SKILL.md +0 -0
  196. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/decision/adr-template.md +0 -0
  197. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/deprecation-and-migration/SKILL.md +0 -0
  198. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/README.md +0 -0
  199. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/anti-patterns.md +0 -0
  200. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/naming-and-layout.md +0 -0
  201. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/patterns-catalog.md +0 -0
  202. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/repo-evidence.md +0 -0
  203. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/testing-patterns.md +0 -0
  204. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/troubleshooting.md +0 -0
  205. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/README.md +0 -0
  206. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/SKILL.md +0 -0
  207. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/references/compose-services-and-healthchecks.md +0 -0
  208. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/references/dev-vs-prod-variants.md +0 -0
  209. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/references/repo-evidence.md +0 -0
  210. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/README.md +0 -0
  211. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/SKILL.md +0 -0
  212. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/dockerignore-and-build-secrets.md +0 -0
  213. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/repo-evidence.md +0 -0
  214. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/shared-base-images.md +0 -0
  215. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/shared-compose-fragments.md +0 -0
  216. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/README.md +0 -0
  217. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/SKILL.md +0 -0
  218. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/references/backend-dockerfile-anatomy.md +0 -0
  219. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/references/repo-evidence.md +0 -0
  220. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/references/system-deps-and-caching.md +0 -0
  221. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/README.md +0 -0
  222. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/SKILL.md +0 -0
  223. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/references/build-args-and-nginx.md +0 -0
  224. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/references/frontend-dockerfile-anatomy.md +0 -0
  225. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/references/repo-evidence.md +0 -0
  226. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/documentation-and-adrs/SKILL.md +0 -0
  227. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/doubt-driven-development/SKILL.md +0 -0
  228. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/README.md +0 -0
  229. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/SKILL.md +0 -0
  230. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/references/repo-evidence.md +0 -0
  231. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/references/trust-contract.md +0 -0
  232. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/execute/SKILL.md +0 -0
  233. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/README.md +0 -0
  234. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/SKILL.md +0 -0
  235. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/api-versioning.md +0 -0
  236. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/app-factory-and-lifespan.md +0 -0
  237. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/custom-route-and-middleware.md +0 -0
  238. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/dependency-injection.md +0 -0
  239. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/model-and-serialization-patterns.md +0 -0
  240. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/repo-evidence.md +0 -0
  241. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/README.md +0 -0
  242. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/SKILL.md +0 -0
  243. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/references/excel-generation.md +0 -0
  244. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/references/repo-evidence.md +0 -0
  245. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/references/streaming-and-downloads.md +0 -0
  246. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/README.md +0 -0
  247. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/SKILL.md +0 -0
  248. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/api-layer-and-types.md +0 -0
  249. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/divergences.md +0 -0
  250. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/repo-evidence.md +0 -0
  251. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/structure-and-state.md +0 -0
  252. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/testing-patterns.md +0 -0
  253. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-ui-engineering/SKILL.md +0 -0
  254. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/README.md +0 -0
  255. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/SKILL.md +0 -0
  256. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/references/cloud-run-deploy.md +0 -0
  257. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/references/repo-evidence.md +0 -0
  258. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/references/workflow-structure.md +0 -0
  259. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/README.md +0 -0
  260. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/SKILL.md +0 -0
  261. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/references/client-and-uploads.md +0 -0
  262. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/references/repo-evidence.md +0 -0
  263. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/references/signed-urls-and-reads.md +0 -0
  264. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/git-workflow-and-versioning/SKILL.md +0 -0
  265. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/README.md +0 -0
  266. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/SKILL.md +0 -0
  267. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/dashboard-json-and-templating.md +0 -0
  268. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/provisioning-and-organization.md +0 -0
  269. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/red-metrics-queries.md +0 -0
  270. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/repo-evidence.md +0 -0
  271. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/unified-alerting.md +0 -0
  272. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/README.md +0 -0
  273. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/SKILL.md +0 -0
  274. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/apollo-client-frontend.md +0 -0
  275. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/apollo-client-setup.md +0 -0
  276. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/repo-evidence.md +0 -0
  277. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/strawberry-backend.md +0 -0
  278. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/when-to-use-graphql.md +0 -0
  279. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/SKILL.md +0 -0
  280. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/examples.md +0 -0
  281. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/frameworks.md +0 -0
  282. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/refinement-criteria.md +0 -0
  283. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/scripts/idea-refine.sh +0 -0
  284. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/incident-postmortem/SKILL.md +0 -0
  285. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/incremental-implementation/SKILL.md +0 -0
  286. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/interview-me/SKILL.md +0 -0
  287. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/README.md +0 -0
  288. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/SKILL.md +0 -0
  289. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/config-and-sasl-kerberos.md +0 -0
  290. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/consumer-producer-patterns.md +0 -0
  291. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/repo-evidence.md +0 -0
  292. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/troubleshooting-and-patterns.md +0 -0
  293. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/README.md +0 -0
  294. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/SKILL.md +0 -0
  295. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/command-reference.md +0 -0
  296. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/context-namespace-rbac.md +0 -0
  297. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/debugging-playbooks.md +0 -0
  298. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/output-formats-and-selectors.md +0 -0
  299. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/repo-evidence.md +0 -0
  300. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/README.md +0 -0
  301. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/SKILL.md +0 -0
  302. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/references/networkpolicy-and-rbac.md +0 -0
  303. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/references/repo-evidence.md +0 -0
  304. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/references/securitycontext-and-podsecurity.md +0 -0
  305. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/README.md +0 -0
  306. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/SKILL.md +0 -0
  307. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/references/langfuse-client-and-tracing.md +0 -0
  308. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/references/python-and-typescript.md +0 -0
  309. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/references/repo-evidence.md +0 -0
  310. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/load-testing/SKILL.md +0 -0
  311. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/manual-test/SKILL.md +0 -0
  312. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/README.md +0 -0
  313. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/SKILL.md +0 -0
  314. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/migration-best-practices.md +0 -0
  315. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/pydantic-v1-to-v2.md +0 -0
  316. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/repo-evidence.md +0 -0
  317. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/shared-internal-library.md +0 -0
  318. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/sqlalchemy-14-to-20.md +0 -0
  319. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/README.md +0 -0
  320. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/SKILL.md +0 -0
  321. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/caching-patterns.md +0 -0
  322. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/isolation-strategies.md +0 -0
  323. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/repo-evidence.md +0 -0
  324. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/tenant-resolution.md +0 -0
  325. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/README.md +0 -0
  326. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/SKILL.md +0 -0
  327. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/references/app-factory-and-mode-dispatch.md +0 -0
  328. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/references/config-and-module-alias.md +0 -0
  329. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/references/middleware-patterns.md +0 -0
  330. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/references/repo-evidence.md +0 -0
  331. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/README.md +0 -0
  332. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/SKILL.md +0 -0
  333. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/references/migrations-and-validation.md +0 -0
  334. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/references/objection-model-and-knex.md +0 -0
  335. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/references/repo-evidence.md +0 -0
  336. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/README.md +0 -0
  337. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/SKILL.md +0 -0
  338. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/references/provider-abstraction.md +0 -0
  339. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/references/repo-evidence.md +0 -0
  340. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/references/templates-and-fallback.md +0 -0
  341. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/README.md +0 -0
  342. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/SKILL.md +0 -0
  343. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/health-and-readiness.md +0 -0
  344. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/logging-and-structlog.md +0 -0
  345. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/outbound-metrics-and-multi-mode.md +0 -0
  346. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/pii-redaction.md +0 -0
  347. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/repo-evidence.md +0 -0
  348. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/tracing-and-metrics.md +0 -0
  349. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/over-engineering-review/SKILL.md +0 -0
  350. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/performance-optimization/SKILL.md +0 -0
  351. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/planning-and-task-breakdown/SKILL.md +0 -0
  352. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/playwright-verification/SKILL.md +0 -0
  353. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/README.md +0 -0
  354. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/SKILL.md +0 -0
  355. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/repo-evidence.md +0 -0
  356. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/settings-and-validation.md +0 -0
  357. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/troubleshooting-and-common-errors.md +0 -0
  358. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/v1-vs-v2.md +0 -0
  359. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/README.md +0 -0
  360. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/SKILL.md +0 -0
  361. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/advanced-query-patterns.md +0 -0
  362. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/basedao-and-sessions.md +0 -0
  363. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/mongodb-advanced.md +0 -0
  364. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/other-db-mongodb.md +0 -0
  365. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/repo-evidence.md +0 -0
  366. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/sqlalchemy-1x-vs-2x.md +0 -0
  367. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/README.md +0 -0
  368. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/SKILL.md +0 -0
  369. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/references/radix-primitives-and-variants.md +0 -0
  370. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/references/repo-evidence.md +0 -0
  371. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/references/tailwind-theme-and-cn.md +0 -0
  372. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/README.md +0 -0
  373. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/SKILL.md +0 -0
  374. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/references/form-setup-and-zod.md +0 -0
  375. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/references/multi-step-and-modes.md +0 -0
  376. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/references/repo-evidence.md +0 -0
  377. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/README.md +0 -0
  378. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/SKILL.md +0 -0
  379. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/references/cache-manager-and-fallback.md +0 -0
  380. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/references/namespacing-and-invalidation.md +0 -0
  381. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/references/repo-evidence.md +0 -0
  382. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/refresh-docs/SKILL.md +0 -0
  383. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/remember/SKILL.md +0 -0
  384. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/scope/SKILL.md +0 -0
  385. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/scope/scope-template.md +0 -0
  386. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/sdlc/SKILL.md +0 -0
  387. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/security-and-hardening/SKILL.md +0 -0
  388. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/security-verification/SKILL.md +0 -0
  389. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shannon-ai-pentest/README.md +0 -0
  390. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shannon-ai-pentest/references/operating-guide.md +0 -0
  391. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shipping-and-launch/SKILL.md +0 -0
  392. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/simplification-debt/SKILL.md +0 -0
  393. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/source-driven-development/SKILL.md +0 -0
  394. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/spec-driven-development/SKILL.md +0 -0
  395. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/sprint/SKILL.md +0 -0
  396. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/sprint/sprint-template.md +0 -0
  397. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/README.md +0 -0
  398. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/SKILL.md +0 -0
  399. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/references/mutations-and-cache.md +0 -0
  400. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/references/query-keys-and-hooks.md +0 -0
  401. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/references/repo-evidence.md +0 -0
  402. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/task-tracker-sync/SKILL.md +0 -0
  403. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/README.md +0 -0
  404. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/SKILL.md +0 -0
  405. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/config-and-retry-idempotency.md +0 -0
  406. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/dag-dsl-interpreter.md +0 -0
  407. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/repo-evidence.md +0 -0
  408. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/schedule-registration.md +0 -0
  409. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/schedules-and-cron.md +0 -0
  410. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/worker-workflow-activity-patterns.md +0 -0
  411. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/test-driven-development/SKILL.md +0 -0
  412. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/test-plan-review/SKILL.md +0 -0
  413. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/README.md +0 -0
  414. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/SKILL.md +0 -0
  415. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/async-and-mocking.md +0 -0
  416. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/coverage-gap-and-recommendations.md +0 -0
  417. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/github-actions-test-orchestration.md +0 -0
  418. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/pytest-and-fixtures.md +0 -0
  419. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/pytest-asyncio-modes.md +0 -0
  420. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/repo-evidence.md +0 -0
  421. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/security-regression-tests.md +0 -0
  422. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/vitest-frontend-testing.md +0 -0
  423. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/threat-model/SKILL.md +0 -0
  424. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/triage/SKILL.md +0 -0
  425. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/ui-ux-design/SKILL.md +0 -0
  426. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/unit-test/SKILL.md +0 -0
  427. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/using-agent-skills/SKILL.md +0 -0
  428. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/README.md +0 -0
  429. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/SKILL.md +0 -0
  430. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/references/msw-and-contract-tests.md +0 -0
  431. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/references/repo-evidence.md +0 -0
  432. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/references/vitest-rtl-setup.md +0 -0
  433. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/README.md +0 -0
  434. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/SKILL.md +0 -0
  435. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/references/operating-guide.md +0 -0
  436. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/scripts/endpoints.example.txt +0 -0
  437. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/scripts/requirements.txt +0 -0
  438. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/README.md +0 -0
  439. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/SKILL.md +0 -0
  440. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/references/async-polling-and-persistence.md +0 -0
  441. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/references/repo-evidence.md +0 -0
  442. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/references/store-structure-and-selectors.md +0 -0
  443. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/__main__.py +0 -0
  444. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/catalog.py +0 -0
  445. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/models.py +0 -0
  446. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/prompts.py +0 -0
  447. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/render.py +0 -0
  448. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/upgrader.py +0 -0
  449. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/validator.py +0 -0
  450. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/CLAUDE.md +0 -0
  451. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/CLAUDE.stack.md.tmpl +0 -0
  452. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/CONTINUITY.template.md +0 -0
  453. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/README.claude-sdlc.md.tmpl +0 -0
  454. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/MEMORY.md +0 -0
  455. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/api/.gitkeep +0 -0
  456. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/architecture/.gitkeep +0 -0
  457. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/debugging/.gitkeep +0 -0
  458. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/gotchas/.gitkeep +0 -0
  459. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/patterns/.gitkeep +0 -0
  460. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/performance/.gitkeep +0 -0
  461. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/adr.md +0 -0
  462. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/api-change-report.md +0 -0
  463. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/feature-spec.md +0 -0
  464. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/release-plan.md +0 -0
  465. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/runbook.md +0 -0
  466. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/security-review.md +0 -0
  467. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/test-plan.md +0 -0
  468. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/README.md +0 -0
  469. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/data-workflow-agent.md +0 -0
  470. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/founder-prototype-agent.md +0 -0
  471. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/internal-tools-builder.md +0 -0
  472. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/pm-copilot.md +0 -0
  473. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/staff-pm-reviewer.md +0 -0
  474. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/support-ticket-engineer.md +0 -0
  475. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/devops-and-release/README.md +0 -0
  476. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/devops-and-release/pack.yaml +0 -0
  477. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/engineering-core/README.md +0 -0
  478. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/engineering-core/pack.yaml +0 -0
  479. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/non-engineer-builder/README.md +0 -0
  480. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/non-engineer-builder/pack.yaml +0 -0
  481. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/onboarding-and-docs/README.md +0 -0
  482. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/onboarding-and-docs/pack.yaml +0 -0
  483. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/product-to-code/README.md +0 -0
  484. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/product-to-code/pack.yaml +0 -0
  485. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/quality-and-review/README.md +0 -0
  486. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/quality-and-review/pack.yaml +0 -0
  487. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/security-and-compliance/README.md +0 -0
  488. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/security-and-compliance/pack.yaml +0 -0
  489. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/ai-working-agreement.md +0 -0
  490. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/ambiguity-resolution.md +0 -0
  491. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/branch-and-pr-policy.md +0 -0
  492. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/compliance-policy.md +0 -0
  493. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/non-engineer-safe-coding.md +0 -0
  494. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/pii-policy.md +0 -0
  495. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/production-data-policy.md +0 -0
  496. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/prompt-to-task-conversion.md +0 -0
  497. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/prototype-boundaries.md +0 -0
  498. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/secrets-policy.md +0 -0
  499. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/customer-issue-to-fix/SKILL.md +0 -0
  500. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/feature-from-idea/SKILL.md +0 -0
  501. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/prototype-to-production/SKILL.md +0 -0
  502. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-scope/SKILL.md +0 -0
  503. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-sprint/SKILL.md +0 -0
  504. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-sprint-plan/SKILL.md +0 -0
  505. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-ux-flow/SKILL.md +0 -0
  506. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/backend/go/net-http/rules/go-patterns.md +0 -0
  507. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/backend/python/fastapi/rules/fastapi-patterns.md +0 -0
  508. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/mongodb/agents/migration-specialist.md +0 -0
  509. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/mongodb/agents/mongodb-specialist.md +0 -0
  510. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/mongodb/rules/mongodb-patterns.md +0 -0
  511. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/agents/db-performance-reviewer.md +0 -0
  512. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/agents/migration-specialist.md +0 -0
  513. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/agents/postgres-specialist.md +0 -0
  514. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/rules/database-performance.md +0 -0
  515. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/rules/postgres-patterns.md +0 -0
  516. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/design-system-compliance.md +0 -0
  517. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/mobile-design-guidelines.md +0 -0
  518. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/react-patterns.md +0 -0
  519. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/ui-design-system.md +0 -0
  520. {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/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.1",
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.1",
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,66 @@ 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.1] — 2026-06-24
8
+
9
+ **A second strict practical review (installed and exercised end-to-end) surfaced seven papercuts on
10
+ top of 0.26.0 — all bug fixes and polish, no behavior change for existing configs.**
11
+
12
+ ### Changed
13
+ - **The destructive-delete guard is no longer order-dependent.** The previous regex only matched
14
+ `r…f` order, so `rm -fr`, `rm -r -f`, `rm -Rf`, and `rm --recursive --force` slipped through. It now
15
+ blocks any invocation that combines a recursive flag **and** a force flag in any order or spelling
16
+ (incl. `-R` and long flags); the plugin `hooks.json` and starter `settings.json` were regenerated
17
+ from the registry. New functional tests fire JSON payloads through the guard to lock the behavior in.
18
+ - **CI lints shipped skill Python** (`ruff check … skills`), so future skill scripts are covered;
19
+ `zap_vapt.py` import ordering was fixed to match.
20
+
21
+ ### Fixed
22
+ - **Upgrade artifacts are now gitignored.** `claude-kit upgrade` writes `.claude-kit.bak-*/` backup
23
+ dirs and `*.claude-kit` sidecars; a scaffolded `.gitignore` now lists both so `git add -A` never
24
+ commits a backup.
25
+ - **Frontmatter hygiene, swept across every component.** Two skill descriptions over the 1024-char cap
26
+ (`design-patterns-and-conventions`, `shannon-ai-pentest`) were trimmed; `security-reviewer` and two
27
+ `templates/org` skills (`prompt-to-safe-task`, `repo-onboarding`) had unquoted `: ` scalars that
28
+ fail strict YAML and are now quoted; `smoke-test`'s `argument-hint` is a valid YAML string. A new
29
+ `tests/test_frontmatter.py` parses every shipped agent/command/skill under strict YAML and enforces
30
+ the description cap, so these regress loudly.
31
+
32
+ ## [0.26.0] — 2026-06-24
33
+
34
+ **Post-hardening follow-up: two correctness/security fixes plus polish, all from a verified review
35
+ punch list.**
36
+
37
+ ### Added
38
+ - **Plugin now guards secret-file reads out of the box.** `protect-secrets` (PreToolUse/Read — blocks
39
+ reading `.env`/`.pem`/`.key`/`id_rsa`/credentials/…) was installed by the pip CLI (it's in the
40
+ `standard`/`all` profiles) but missing from the always-on plugin hook set, so plugin-only users had
41
+ no Read guard until they ran an init. It's now in `PLUGIN_HOOK_IDS`; `hooks/hooks.json` gains a
42
+ `PreToolUse`/`Read` group.
43
+ - **`.github/dependabot.yml`** for the `github-actions` ecosystem (weekly, grouped) so CI/publish
44
+ actions are kept current and SHA-pinned by Dependabot's PRs, with auditable tag comments.
45
+ `pypa/gh-action-pypi-publish` stays on `release/v1` (required for Trusted Publishing + attestations).
46
+
47
+ ### Changed
48
+ - **`pipeline close-gate` enforces the blocking-findings rule.** It now refuses to record a gate as
49
+ passed while any **critical/high/medium** findings are open (`rules/quality-gates.md`); low/cosmetic
50
+ still pass. A deliberate override requires `--force` **with** `--override-reason "<why>"`, recorded
51
+ under `gate_overrides[gate]` for human review.
52
+ - **`pipeline validate` re-checks gate evidence.** When a gate is recorded passed and has a
53
+ `gate_evidence` path, validate now fails if that file no longer exists on disk, and surfaces any
54
+ force-closed gate. Lenient on the upgrade path (no evidence map → silent; partial map → warn).
55
+ - **Inline hook guards quiet their `jq` calls** (`2>/dev/null || true`) so malformed/missing hook JSON
56
+ can't spam stderr — matching the script-backed guards; `guard-secrets.sh` aligned for consistency.
57
+
58
+ ### Fixed
59
+ - **Docs consistency checker catches duplicate gate tables.** `check_docs_consistency.py` previously
60
+ keyed profile gate rows in a dict, so a second (possibly stale) table could silently overwrite an
61
+ earlier one; it now collects every occurrence, flags duplicates, and requires each to match
62
+ `profiles.yaml`.
63
+ - **Stale comments in `scripts/init.sh`** corrected: it's described as the degraded, no-resolution
64
+ fallback (the pip CLI is the catalog-driven/upgrade-safe installer), and existing files are noted as
65
+ written to `*.claude-kit` sidecars (not `*.example`).
66
+
7
67
  ## [0.25.0] — 2026-06-24
8
68
 
9
69
  **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.1
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
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: security-reviewer
3
- description: Security stage coordinator. Runs at Phase 5.4 (after test-coverage VERIFIED, before DevOps). Dispatches four sub-scanners in parallel — secret-scanner, dependency-scanner, owasp-reviewer, policy-validator — aggregates findings by severity, and owns the Security Clear gate. Read-only: routes fixes through the Orchestrator's defect loop.
3
+ description: "Security stage coordinator. Runs at Phase 5.4 (after test-coverage VERIFIED, before DevOps). Dispatches four sub-scanners in parallel — secret-scanner, dependency-scanner, owasp-reviewer, policy-validator — aggregates findings by severity, and owns the Security Clear gate. Read-only: routes fixes through the Orchestrator's defect loop."
4
4
  tools: Agent, Read, Glob, Grep, Bash, SendMessage
5
5
  permissionMode: plan
6
6
  model: sonnet
@@ -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 printf '%s' \"$CMD\" | grep -qE '(^|[^[:alnum:]_])rm([[:space:]]|$)' && printf '%s' \"$CMD\" | grep -qE '(^|[[:space:]])-[a-zA-Z]*[rR]|--recursive' && printf '%s' \"$CMD\" | grep -qE '(^|[[:space:]])-[a-zA-Z]*f|--force'; then echo 'BLOCKED: rm -rf (recursive+force, any flag order/spelling) 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.1"
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
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design-patterns-and-conventions
3
- description: Encodes the cross-cutting design patterns, naming conventions, folder layout, testing strategies, troubleshooting diagnostics, and catalogued anti-patterns observed across production Python/FastAPI backend services. Use when architecting new FastAPI services, refactoring code, reviewing structure, investigating technical debt, debugging session leaks or event loop blocks, setting up dependency injection, configuring multi-mode entrypoints (server/consumer/worker), implementing response envelopes, integrating Kafka or Temporal, organizing domain modules, or avoiding known anti-patterns (hardcoded secrets, CORS wildcards, sync clients in async code, unscoped sessions, deprecated lifecycle hooks). Particularly relevant for questions about layered architecture (router/service/dao), singleton patterns (ConnectionManager), CustomRequestRoute, loaded_config, naming standards (snake_case vs PascalCase), folder layout (per-domain modules), testing patterns (mocking, fixtures, TestClient), or troubleshooting common issues (session leaks, blocked event loop, duplicate routes, CORS errors, Kafka/Temporal problems).
3
+ description: Encodes the cross-cutting design patterns, naming conventions, folder layout, testing strategies, troubleshooting diagnostics, and catalogued anti-patterns observed across production Python/FastAPI backend services. Use when architecting new FastAPI services, refactoring code, reviewing structure, investigating technical debt, debugging session leaks or event loop blocks, setting up dependency injection, configuring multi-mode entrypoints (server/consumer/worker), implementing response envelopes, integrating Kafka or Temporal, organizing domain modules, or avoiding known anti-patterns (hardcoded secrets, CORS wildcards, sync clients in async code, unscoped sessions, deprecated lifecycle hooks). Also covers layered architecture (router/service/dao), the ConnectionManager singleton, CustomRequestRoute, naming standards (snake_case vs PascalCase), per-domain folder layout, and testing patterns (mocking, fixtures, TestClient).
4
4
  ---
5
5
 
6
6
  Enforce consistent design patterns, naming conventions, and architectural decisions across FastAPI backends, derived from real-world production services.
@@ -5,13 +5,12 @@ description: >
5
5
  app's source code, plans attacks, then runs real proof-of-concept exploits against the live app and
6
6
  reports only confirmed, reproducible findings. Covers installing/running the externally-distributed
7
7
  `npx @keygraph/shannon` CLI (setup, start, status, logs, stop, workspaces), configuring AI providers
8
- (Anthropic / AWS Bedrock / Google Vertex AI / proxy) and model tiers, writing the YAML engagement
9
- config (vuln classes, authentication + login flows + TOTP, scope avoid/focus rules, report
10
- filtering, rate limits), reading the Markdown report, and the safety/authorization rules. Shannon is
11
- a separate AGPL-3.0 tool you install yourself — this skill does NOT bundle it. Use when asked to run
12
- Shannon, set up an autonomous/white-box AI pentest, exploit-test an app from its source, configure
13
- `@keygraph/shannon`, write a Shannon engagement config, or produce a proof-by-exploitation security
14
- report. Only for systems you own or are authorized to test, never production.
8
+ and model tiers, writing the YAML engagement config (vuln classes, auth + login flows + TOTP, scope
9
+ avoid/focus rules, report filtering, rate limits), reading the Markdown report, and the
10
+ safety/authorization rules. Shannon is a separate AGPL-3.0 tool you install yourself this skill
11
+ does NOT bundle it. Use when asked to run Shannon, set up an autonomous/white-box AI pentest,
12
+ exploit-test an app from its source, write a Shannon engagement config, or produce a
13
+ proof-by-exploitation security report. Only for systems you own or are authorized to test.
15
14
  ---
16
15
 
17
16
  # Shannon — Autonomous White-Box AI Pentesting
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: smoke-test
3
3
  description: Quick health check — verifies all services are running and basic user flow works. Use before starting development or after deployment.
4
- argument-hint: [optional: "backend-only" or "frontend-only"]
4
+ argument-hint: 'backend-only | frontend-only (optional)'
5
5
  disable-model-invocation: true
6
6
  ---
7
7
 
@@ -20,7 +20,6 @@ import atexit
20
20
  import base64
21
21
  import json
22
22
  import os
23
- from collections import Counter
24
23
  import platform
25
24
  import re
26
25
  import shlex
@@ -28,12 +27,13 @@ import shutil
28
27
  import subprocess
29
28
  import sys
30
29
  import time
30
+ import xml.etree.ElementTree as ET
31
+ from collections import Counter
31
32
  from dataclasses import dataclass, field
32
33
  from datetime import datetime
33
34
  from glob import glob
34
- from urllib.parse import urlsplit, quote_plus
35
+ from urllib.parse import quote_plus, urlsplit
35
36
  from xml.sax.saxutils import escape as _xml_escape
36
- import xml.etree.ElementTree as ET
37
37
 
38
38
  # ----------------------------------------------------------------------------
39
39
  # Constants & small console helpers
@@ -1082,22 +1082,22 @@ def build_pdf(
1082
1082
  agg: Aggregates,
1083
1083
  unmatched: list | None = None,
1084
1084
  ):
1085
- from reportlab.lib.pagesizes import A4
1086
1085
  from reportlab.lib.colors import HexColor, white
1087
1086
  from reportlab.lib.enums import TA_CENTER
1087
+ from reportlab.lib.pagesizes import A4
1088
1088
  from reportlab.lib.styles import ParagraphStyle
1089
1089
  from reportlab.lib.utils import ImageReader
1090
1090
  from reportlab.platypus import (
1091
- SimpleDocTemplate,
1091
+ CondPageBreak,
1092
+ Flowable,
1093
+ Image,
1094
+ ListFlowable,
1095
+ PageBreak,
1092
1096
  Paragraph,
1097
+ SimpleDocTemplate,
1093
1098
  Spacer,
1094
1099
  Table,
1095
1100
  TableStyle,
1096
- Image,
1097
- PageBreak,
1098
- ListFlowable,
1099
- Flowable,
1100
- CondPageBreak,
1101
1101
  )
1102
1102
 
1103
1103
  G, B, GR = HexColor(GREEN), HexColor(BLUE), HexColor(GRID)
@@ -2091,8 +2091,8 @@ def main() -> int:
2091
2091
  return run_selftest()
2092
2092
 
2093
2093
  try:
2094
- import requests # noqa: F401
2095
2094
  import reportlab # noqa: F401
2095
+ import requests # noqa: F401
2096
2096
  except ImportError:
2097
2097
  err("Missing dependencies. Run: python3 -m pip install -r requirements.txt")
2098
2098
  return 2
@@ -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.1"
@@ -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,10 +19,12 @@ 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'); "
23
- "if echo \"$CMD\" | grep -qE 'rm[[:space:]]+-[^[:space:]]*r[^[:space:]]*f'; then "
24
- "echo 'BLOCKED: rm -rf is disabled by claude-kit. Move to trash or delete specific paths "
25
- "explicitly.' >&2; exit 2; fi"
22
+ "CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); "
23
+ "if printf '%s' \"$CMD\" | grep -qE '(^|[^[:alnum:]_])rm([[:space:]]|$)' "
24
+ "&& printf '%s' \"$CMD\" | grep -qE '(^|[[:space:]])-[a-zA-Z]*[rR]|--recursive' "
25
+ "&& printf '%s' \"$CMD\" | grep -qE '(^|[[:space:]])-[a-zA-Z]*f|--force'; then "
26
+ "echo 'BLOCKED: rm -rf (recursive+force, any flag order/spelling) is disabled by claude-kit. "
27
+ "Move to trash or delete specific paths explicitly.' >&2; exit 2; fi"
26
28
  )
27
29
 
28
30
  # Block pushes whose *target* ref is main/master. The branch token must be bounded by a space or
@@ -30,7 +32,7 @@ _RM_RF_GUARD = (
30
32
  # (maintenance, mainframe-fix, remaster-ui, domain-model) are NOT blocked.
31
33
  _PUSH_GUARD = (
32
34
  "command -v jq >/dev/null 2>&1 || exit 0; "
33
- "CMD=$(jq -r '.tool_input.command'); "
35
+ "CMD=$(jq -r '.tool_input.command' 2>/dev/null || true); "
34
36
  "if echo \"$CMD\" | grep -qE 'git[[:space:]]+push.*[[:space:]:](main|master)([[:space:]]|$)'; "
35
37
  "then echo 'BLOCKED: refusing to push to main/master — use a feature branch and a PR.' >&2; "
36
38
  "exit 2; fi"
@@ -38,7 +40,7 @@ _PUSH_GUARD = (
38
40
 
39
41
  _SECRETS_GUARD = (
40
42
  "command -v jq >/dev/null 2>&1 || exit 0; "
41
- "FP=$(jq -r '.tool_input.file_path // empty'); "
43
+ "FP=$(jq -r '.tool_input.file_path // empty' 2>/dev/null || true); "
42
44
  'if echo "$FP" | grep -qE \'(^|/)\\.env$|\\.pem$|\\.key$|(^|/)id_rsa|(^|/)id_ed25519|'
43
45
  "(^|/)credentials(\\.json)?$|\\.p12$'; then "
44
46
  "echo 'BLOCKED: refusing to read a secrets file. Use .env.example or a secret manager.' >&2; "
@@ -244,6 +246,7 @@ PLUGIN_HOOK_IDS: frozenset[str] = frozenset(
244
246
  "guard-rm-rf",
245
247
  "guard-push-main",
246
248
  "guard-destructive-git",
249
+ "protect-secrets",
247
250
  "guard-commit-secrets",
248
251
  "warn-shared-modules",
249
252
  "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):
@@ -36,6 +36,9 @@ GITIGNORE_ENTRIES = (
36
36
  "CLAUDE.local.md",
37
37
  ".claude/state/",
38
38
  ".claude/tmp/",
39
+ # upgrade/merge artifacts written by `claude-kit upgrade` — never commit these
40
+ ".claude-kit.bak-*/",
41
+ "*.claude-kit",
39
42
  )
40
43
 
41
44
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: prompt-to-safe-task
3
- description: Use when anyone — especially a non-engineer — types a free-form request in plain language and wants it turned into a scoped, risk-classified, approval-gated task before anything happens. The safe front door for vibe-coding: goal → scope + out-of-scope → risk tier → success criteria → plan → approval, then route to the right skill/agent.
3
+ description: "Use when anyone — especially a non-engineer — types a free-form request in plain language and wants it turned into a scoped, risk-classified, approval-gated task before anything happens. The safe front door for vibe-coding: goal → scope + out-of-scope → risk tier → success criteria → plan → approval, then route to the right skill/agent."
4
4
  ---
5
5
 
6
6
  # Prompt to Safe Task
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: repo-onboarding
3
- description: Use when someone new to the repo — a new engineer, support, or any newcomer — asks "how does this fit together and where do I start?" Maps the architecture, explains key modules and entry points, surfaces conventions, and produces an ordered onboarding path plus a "where things live" guide. Read-only: explores and explains, never changes code.
3
+ description: 'Use when someone new to the repo — a new engineer, support, or any newcomer — asks "how does this fit together and where do I start?" Maps the architecture, explains key modules and entry points, surfaces conventions, and produces an ordered onboarding path plus a "where things live" guide. Read-only: explores and explains, never changes code.'
4
4
  ---
5
5
 
6
6
  # Repo Onboarding