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.
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/.claude-plugin/marketplace.json +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/.claude-plugin/plugin.json +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/CHANGELOG.md +60 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/PKG-INFO +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/security-reviewer.md +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/hooks.json +11 -2
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/guard-secrets.sh +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/pyproject.toml +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/continuity.md +4 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/scripts/check_docs_consistency.py +34 -19
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/scripts/init.sh +4 -2
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/SKILL.md +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shannon-ai-pentest/SKILL.md +6 -7
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/smoke-test/SKILL.md +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/scripts/zap_vapt.py +11 -11
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/__init__.py +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/cli.py +20 -2
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/hooks.py +9 -6
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/pipeline.py +82 -3
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/scaffold.py +3 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/prompt-to-safe-task/SKILL.md +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/repo-onboarding/SKILL.md +1 -1
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/settings.json +2 -2
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/.gitignore +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/CLAUDE.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/CONTRIBUTING.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/LICENSE +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/acceptance-reviewer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/auditor.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/dependency-scanner.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/developer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/devils-advocate.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/devops-engineer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/e2e-tester.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/em-reviewer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/incident-responder.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/merge-reviewer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/observability-engineer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/orchestrator.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/owasp-reviewer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/policy-validator.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/pr-raiser.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/risk-classifier.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/sdlc-code-reviewer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/secret-scanner.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/senior-backend-dev.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/senior-frontend-dev.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/senior-tester.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/spec-doc-writer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/story-planner.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/technical-architect.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/tester.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/ui-designer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/agents/unit-tester.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/capture.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/mcp.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/org.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/profiles.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/catalog/stacks.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/abort.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/init.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/sdlc.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/commands/status.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/agentic-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/agents.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/architecture.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/coverage-audit.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/eval-harness.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/org-capabilities.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/stack-skills/GAP-ANALYSIS.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/stack-skills/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/docs/stack-skills/REPO-INVENTORY.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/audit-log.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/capture-learnings.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/guard-destructive-git.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/guard-kubectl-delete.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/lint-fix.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/load-autonomy.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/load-continuity.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/load-learnings.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/type-check.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/validate-frontmatter.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/validate-settings.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-large-edits.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-llm-io.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-missing-tests.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-sensitive-files.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/hooks/scripts/warn-shared-modules.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/agent-guardrails.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/agent-memory.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/agent-resilience.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/autonomy-levels.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/code-organization.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/design-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/devops-observability.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/documentation.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/evals.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/frontend-best-practices.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/goal-setting-and-monitoring.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/human-in-the-loop.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/linting-and-formatting.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/mandatory-workflow.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/model-tiers.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/quality-gates.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/rarv-cycle.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/reasoning-techniques.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/responsive-and-accessibility.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/risk-classification.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/testing.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/rules/tool-design.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/scripts/gen_hooks.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/accessibility-checklist.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/orchestration-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/performance-checklist.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/security-checklist.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/_references/testing-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/accessibility-review/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/alembic-setup-and-env.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/async-and-multitenant-migrations.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/troubleshooting-and-debugging.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/alembic-migrations/references/writing-migrations.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/references/generate-helpers-and-retry.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/anthropic-vertex-integration/references/vertex-client-and-auth.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-and-interface-design/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-integration/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/references/query-params-conventions.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/api-pagination-filtering-sorting/references/response-metadata.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/archive-sprint/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/references/async-boundaries.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/references/lifecycle-and-gather.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/async-python-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/auth-dependencies.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/rbac-and-permissions.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/security-hardening.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/auth-and-rbac/references/tokens-and-hashing.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/deployment-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/entrypoint-and-config.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/structure-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backend-repo-architecture/references/troubleshooting.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backlog/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/backlog/item-template.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/browser-testing-with-devtools/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/bug-hunt/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/ci-cd-and-automation/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/code-review-and-quality/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/code-simplification/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/component-design/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/references/config-layering-anatomy.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/configargparse-yaml-env-layering/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/consolidate-learnings/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/deployment-and-secrets.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/dockerfile-and-compose.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/entrypoint-and-modes.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/kerberos-kinit-bootstrap.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/makefile-dev-workflow.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/containerization-and-deployment/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/context-engineering/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/choosing-and-operations.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/kubernetes-cronjob.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/cron-and-scheduled-jobs/references/temporal-schedules.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/bigquery-advanced-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/bigquery-gcs-io.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/medallion-architecture.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/data-engineering-bigquery-gcs/references/repo-evidence.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/debugging-and-error-recovery/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/decision/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/decision/adr-template.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/deprecation-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/anti-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/naming-and-layout.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/patterns-catalog.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/testing-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/references/troubleshooting.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/references/compose-services-and-healthchecks.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/references/dev-vs-prod-variants.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-compose/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/dockerignore-and-build-secrets.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/shared-base-images.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/docker-shared/references/shared-compose-fragments.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/references/backend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-backend/references/system-deps-and-caching.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/references/build-args-and-nginx.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/references/frontend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/dockerfile-frontend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/documentation-and-adrs/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/doubt-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/edge-to-service-trust-boundary/references/trust-contract.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/execute/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/api-versioning.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/app-factory-and-lifespan.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/custom-route-and-middleware.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/dependency-injection.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/model-and-serialization-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/fastapi-service-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/references/excel-generation.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/file-export-and-reporting/references/streaming-and-downloads.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/api-layer-and-types.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/divergences.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/structure-and-state.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-repo-architecture/references/testing-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/frontend-ui-engineering/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/SKILL.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcp-cloud-run-github-actions/references/workflow-structure.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/references/client-and-uploads.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/gcs-file-storage-patterns/references/repo-evidence.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/git-workflow-and-versioning/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/SKILL.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/provisioning-and-organization.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/red-metrics-queries.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/grafana-dashboards-and-alerts/references/unified-alerting.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/apollo-client-frontend.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/apollo-client-setup.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/strawberry-backend.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/graphql-patterns/references/when-to-use-graphql.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/examples.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/frameworks.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/refinement-criteria.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/idea-refine/scripts/idea-refine.sh +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/incident-postmortem/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/incremental-implementation/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/interview-me/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/config-and-sasl-kerberos.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/consumer-producer-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kafka-config-driven/references/troubleshooting-and-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/command-reference.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/context-namespace-rbac.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/debugging-playbooks.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/output-formats-and-selectors.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubectl-operations/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/references/networkpolicy-and-rbac.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/kubernetes-workload-hardening/references/securitycontext-and-podsecurity.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/references/langfuse-client-and-tracing.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/references/python-and-typescript.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/langfuse-llm-tracing/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/load-testing/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/manual-test/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/migration-best-practices.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/pydantic-v1-to-v2.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/shared-internal-library.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/modernization-and-migration/references/sqlalchemy-14-to-20.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/caching-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/isolation-strategies.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/multi-tenancy-patterns/references/tenant-resolution.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/SKILL.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/references/config-and-module-alias.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/references/middleware-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-express-service/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/references/migrations-and-validation.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/references/objection-model-and-knex.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/node-objection-knex/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/references/provider-abstraction.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/notifications-and-messaging/references/templates-and-fallback.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/health-and-readiness.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/logging-and-structlog.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/pii-redaction.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/observability-and-logging/references/tracing-and-metrics.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/over-engineering-review/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/performance-optimization/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/planning-and-task-breakdown/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/playwright-verification/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/settings-and-validation.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/troubleshooting-and-common-errors.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/pydantic-schema-patterns/references/v1-vs-v2.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/advanced-query-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/basedao-and-sessions.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/mongodb-advanced.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/other-db-mongodb.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/python-dao-and-database/references/repo-evidence.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/SKILL.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/radix-tailwind-component-patterns/references/repo-evidence.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/SKILL.md +0 -0
- {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
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/react-hook-form-zod-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/references/cache-manager-and-fallback.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/references/namespacing-and-invalidation.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/redis-caching-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/refresh-docs/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/remember/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/scope/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/scope/scope-template.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/sdlc/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/security-and-hardening/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/security-verification/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shannon-ai-pentest/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shannon-ai-pentest/references/operating-guide.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/shipping-and-launch/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/simplification-debt/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/source-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/spec-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/sprint/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/sprint/sprint-template.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/references/mutations-and-cache.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/tanstack-react-query-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/task-tracker-sync/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/config-and-retry-idempotency.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/dag-dsl-interpreter.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/schedule-registration.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/schedules-and-cron.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/temporal-config-driven/references/worker-workflow-activity-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/test-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/test-plan-review/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/async-and-mocking.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/coverage-gap-and-recommendations.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/github-actions-test-orchestration.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/pytest-and-fixtures.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/pytest-asyncio-modes.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/security-regression-tests.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/testing-conventions/references/vitest-frontend-testing.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/threat-model/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/triage/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/ui-ux-design/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/unit-test/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/using-agent-skills/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/SKILL.md +0 -0
- {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
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/vitest-rtl-msw-patterns/references/vitest-rtl-setup.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/references/operating-guide.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/scripts/endpoints.example.txt +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/scripts/requirements.txt +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/references/async-polling-and-persistence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zustand-state-patterns/references/store-structure-and-selectors.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/__main__.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/catalog.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/models.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/prompts.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/render.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/upgrader.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/src/claude_kit/validator.py +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/CLAUDE.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/CLAUDE.stack.md.tmpl +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/CONTINUITY.template.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/README.claude-sdlc.md.tmpl +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/MEMORY.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/api/.gitkeep +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/architecture/.gitkeep +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/debugging/.gitkeep +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/gotchas/.gitkeep +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/patterns/.gitkeep +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/agent-memory/performance/.gitkeep +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/adr.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/api-change-report.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/feature-spec.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/release-plan.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/runbook.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/security-review.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/artifacts/test-plan.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/data-workflow-agent.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/founder-prototype-agent.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/internal-tools-builder.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/pm-copilot.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/staff-pm-reviewer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/agents/support-ticket-engineer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/devops-and-release/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/devops-and-release/pack.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/engineering-core/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/engineering-core/pack.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/non-engineer-builder/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/non-engineer-builder/pack.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/onboarding-and-docs/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/onboarding-and-docs/pack.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/product-to-code/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/product-to-code/pack.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/quality-and-review/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/quality-and-review/pack.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/security-and-compliance/README.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/packs/security-and-compliance/pack.yaml +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/ai-working-agreement.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/ambiguity-resolution.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/branch-and-pr-policy.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/compliance-policy.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/non-engineer-safe-coding.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/pii-policy.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/production-data-policy.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/prompt-to-task-conversion.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/prototype-boundaries.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/rules/secrets-policy.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/customer-issue-to-fix/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/feature-from-idea/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/prototype-to-production/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-scope/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-sprint/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-sprint-plan/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/review-ux-flow/SKILL.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/backend/go/net-http/rules/go-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/backend/python/fastapi/rules/fastapi-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/mongodb/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/mongodb/agents/mongodb-specialist.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/mongodb/rules/mongodb-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/agents/db-performance-reviewer.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/agents/postgres-specialist.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/rules/database-performance.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/db/postgres/rules/postgres-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/design-system-compliance.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/mobile-design-guidelines.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/react-patterns.md +0 -0
- {claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/stacks/frontend/react/rules/ui-design-system.md +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
188
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
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}: {
|
|
232
|
-
|
|
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
|
-
#
|
|
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 *.
|
|
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
|
{claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/design-patterns-and-conventions/SKILL.md
RENAMED
|
@@ -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).
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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:
|
|
4
|
+
argument-hint: 'backend-only | frontend-only (optional)'
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
---
|
|
7
7
|
|
{claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/skills/zap-vapt-scanning/scripts/zap_vapt.py
RENAMED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
@@ -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
|
-
|
|
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
|
|
24
|
-
"
|
|
25
|
-
"
|
|
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,
|
|
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,
|
|
185
|
-
|
|
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):
|
{claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/prompt-to-safe-task/SKILL.md
RENAMED
|
@@ -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
|
{claude_code_kit-0.25.0 → claude_code_kit-0.26.1}/templates/org/skills/repo-onboarding/SKILL.md
RENAMED
|
@@ -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
|