claude-code-kit 0.24.0__tar.gz → 0.25.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/.claude-plugin/marketplace.json +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/.claude-plugin/plugin.json +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/CHANGELOG.md +25 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/PKG-INFO +26 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/README.md +25 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/coverage-audit.md +2 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/pyproject.toml +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/alembic-migrations/references/alembic-setup-and-env.md +3 -3
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/alembic-migrations/references/repo-evidence.md +2 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/alembic-migrations/references/writing-migrations.md +6 -6
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-pagination-filtering-sorting/README.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-pagination-filtering-sorting/SKILL.md +10 -10
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-pagination-filtering-sorting/references/query-params-conventions.md +9 -9
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-pagination-filtering-sorting/references/repo-evidence.md +47 -47
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/references/deployment-and-secrets.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/README.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/SKILL.md +20 -20
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/references/bigquery-gcs-io.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/references/medallion-architecture.md +21 -21
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/references/repo-evidence.md +11 -11
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/references/naming-and-layout.md +2 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/references/patterns-catalog.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/references/api-versioning.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-repo-architecture/SKILL.md +3 -3
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-repo-architecture/references/api-layer-and-types.md +12 -12
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-repo-architecture/references/divergences.md +5 -5
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-repo-architecture/references/repo-evidence.md +19 -18
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-repo-architecture/references/structure-and-state.md +48 -48
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-repo-architecture/references/testing-patterns.md +4 -4
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcp-cloud-run-github-actions/references/repo-evidence.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/graphql-patterns/README.md +3 -3
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/graphql-patterns/SKILL.md +19 -19
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/graphql-patterns/references/repo-evidence.md +32 -31
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/graphql-patterns/references/strawberry-backend.md +49 -47
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/graphql-patterns/references/when-to-use-graphql.md +10 -10
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kafka-config-driven/references/consumer-producer-patterns.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kafka-config-driven/references/repo-evidence.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/manual-test/SKILL.md +2 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/multi-tenancy-patterns/SKILL.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/multi-tenancy-patterns/references/isolation-strategies.md +6 -6
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/multi-tenancy-patterns/references/repo-evidence.md +10 -10
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/SKILL.md +7 -7
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/references/outbound-metrics-and-multi-mode.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/references/repo-evidence.md +5 -5
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/references/tracing-and-metrics.md +2 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/references/mongodb-advanced.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/references/other-db-mongodb.md +10 -10
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/references/repo-evidence.md +5 -5
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/tanstack-react-query-patterns/SKILL.md +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/tanstack-react-query-patterns/references/repo-evidence.md +55 -55
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/SKILL.md +6 -6
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/async-and-mocking.md +6 -6
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/coverage-gap-and-recommendations.md +27 -27
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/pytest-asyncio-modes.md +4 -4
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/repo-evidence.md +10 -10
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/vitest-frontend-testing.md +2 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zustand-state-patterns/README.md +2 -2
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zustand-state-patterns/SKILL.md +46 -46
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zustand-state-patterns/references/async-polling-and-persistence.md +49 -49
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zustand-state-patterns/references/repo-evidence.md +79 -77
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zustand-state-patterns/references/store-structure-and-selectors.md +26 -26
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/__init__.py +1 -1
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/.gitignore +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/CLAUDE.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/CONTRIBUTING.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/LICENSE +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/acceptance-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/auditor.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/dependency-scanner.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/developer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/devils-advocate.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/devops-engineer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/e2e-tester.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/em-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/incident-responder.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/merge-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/observability-engineer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/orchestrator.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/owasp-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/policy-validator.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/pr-raiser.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/risk-classifier.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/sdlc-code-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/secret-scanner.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/security-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/senior-backend-dev.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/senior-frontend-dev.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/senior-tester.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/spec-doc-writer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/story-planner.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/technical-architect.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/tester.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/ui-designer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/agents/unit-tester.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/catalog/capture.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/catalog/mcp.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/catalog/org.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/catalog/profiles.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/catalog/stacks.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/commands/abort.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/commands/init.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/commands/sdlc.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/commands/status.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/agentic-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/agents.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/architecture.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/eval-harness.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/org-capabilities.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/stack-skills/GAP-ANALYSIS.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/stack-skills/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/docs/stack-skills/REPO-INVENTORY.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/hooks.json +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/audit-log.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/capture-learnings.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/guard-destructive-git.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/guard-kubectl-delete.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/guard-secrets.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/lint-fix.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/load-autonomy.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/load-continuity.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/load-learnings.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/type-check.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/validate-frontmatter.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/validate-settings.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/warn-large-edits.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/warn-llm-io.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/warn-missing-tests.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/warn-sensitive-files.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/hooks/scripts/warn-shared-modules.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/agent-guardrails.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/agent-memory.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/agent-resilience.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/autonomy-levels.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/code-organization.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/continuity.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/design-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/devops-observability.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/documentation.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/evals.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/frontend-best-practices.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/goal-setting-and-monitoring.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/human-in-the-loop.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/linting-and-formatting.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/mandatory-workflow.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/model-tiers.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/quality-gates.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/rarv-cycle.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/reasoning-techniques.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/responsive-and-accessibility.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/risk-classification.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/testing.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/rules/tool-design.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/scripts/check_docs_consistency.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/scripts/gen_hooks.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/scripts/init.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/_references/accessibility-checklist.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/_references/orchestration-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/_references/performance-checklist.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/_references/security-checklist.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/_references/testing-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/accessibility-review/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/alembic-migrations/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/alembic-migrations/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/alembic-migrations/references/async-and-multitenant-migrations.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/alembic-migrations/references/troubleshooting-and-debugging.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/anthropic-vertex-integration/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/anthropic-vertex-integration/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/anthropic-vertex-integration/references/generate-helpers-and-retry.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/anthropic-vertex-integration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/anthropic-vertex-integration/references/vertex-client-and-auth.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-and-interface-design/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-integration/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-pagination-filtering-sorting/references/response-metadata.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/archive-sprint/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/async-python-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/async-python-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/async-python-patterns/references/async-boundaries.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/async-python-patterns/references/lifecycle-and-gather.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/async-python-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/auth-and-rbac/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/auth-and-rbac/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/auth-and-rbac/references/auth-dependencies.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/auth-and-rbac/references/rbac-and-permissions.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/auth-and-rbac/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/auth-and-rbac/references/security-hardening.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/auth-and-rbac/references/tokens-and-hashing.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backend-repo-architecture/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backend-repo-architecture/references/deployment-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backend-repo-architecture/references/entrypoint-and-config.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backend-repo-architecture/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backend-repo-architecture/references/structure-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backend-repo-architecture/references/troubleshooting.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backlog/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/backlog/item-template.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/browser-testing-with-devtools/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/bug-hunt/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/ci-cd-and-automation/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/code-review-and-quality/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/code-simplification/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/component-design/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/configargparse-yaml-env-layering/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/configargparse-yaml-env-layering/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/configargparse-yaml-env-layering/references/config-layering-anatomy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/configargparse-yaml-env-layering/references/mode-dispatch-and-precedence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/configargparse-yaml-env-layering/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/consolidate-learnings/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/references/dockerfile-and-compose.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/references/entrypoint-and-modes.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/references/kerberos-kinit-bootstrap.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/references/makefile-dev-workflow.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/containerization-and-deployment/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/context-engineering/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/cron-and-scheduled-jobs/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/cron-and-scheduled-jobs/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/cron-and-scheduled-jobs/references/choosing-and-operations.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/cron-and-scheduled-jobs/references/kubernetes-cronjob.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/cron-and-scheduled-jobs/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/cron-and-scheduled-jobs/references/temporal-schedules.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/references/bigquery-advanced-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/references/temp-table-merge-pattern.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/debugging-and-error-recovery/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/decision/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/decision/adr-template.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/deprecation-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/references/anti-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/references/testing-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/design-patterns-and-conventions/references/troubleshooting.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-compose/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-compose/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-compose/references/compose-services-and-healthchecks.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-compose/references/dev-vs-prod-variants.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-compose/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-shared/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-shared/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-shared/references/dockerignore-and-build-secrets.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-shared/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-shared/references/shared-base-images.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/docker-shared/references/shared-compose-fragments.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-backend/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-backend/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-backend/references/backend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-backend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-backend/references/system-deps-and-caching.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-frontend/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-frontend/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-frontend/references/build-args-and-nginx.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-frontend/references/frontend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/dockerfile-frontend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/documentation-and-adrs/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/doubt-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/edge-to-service-trust-boundary/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/edge-to-service-trust-boundary/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/edge-to-service-trust-boundary/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/edge-to-service-trust-boundary/references/trust-contract.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/execute/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/references/app-factory-and-lifespan.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/references/custom-route-and-middleware.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/references/dependency-injection.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/references/model-and-serialization-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/fastapi-service-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/file-export-and-reporting/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/file-export-and-reporting/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/file-export-and-reporting/references/excel-generation.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/file-export-and-reporting/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/file-export-and-reporting/references/streaming-and-downloads.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/frontend-ui-engineering/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcp-cloud-run-github-actions/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcp-cloud-run-github-actions/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcp-cloud-run-github-actions/references/cloud-run-deploy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcp-cloud-run-github-actions/references/workflow-structure.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcs-file-storage-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcs-file-storage-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcs-file-storage-patterns/references/client-and-uploads.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcs-file-storage-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/gcs-file-storage-patterns/references/signed-urls-and-reads.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/git-workflow-and-versioning/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/grafana-dashboards-and-alerts/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/grafana-dashboards-and-alerts/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/grafana-dashboards-and-alerts/references/dashboard-json-and-templating.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/grafana-dashboards-and-alerts/references/provisioning-and-organization.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/grafana-dashboards-and-alerts/references/red-metrics-queries.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/grafana-dashboards-and-alerts/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/grafana-dashboards-and-alerts/references/unified-alerting.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/graphql-patterns/references/apollo-client-frontend.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/graphql-patterns/references/apollo-client-setup.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/idea-refine/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/idea-refine/examples.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/idea-refine/frameworks.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/idea-refine/refinement-criteria.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/idea-refine/scripts/idea-refine.sh +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/incident-postmortem/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/incremental-implementation/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/interview-me/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kafka-config-driven/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kafka-config-driven/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kafka-config-driven/references/config-and-sasl-kerberos.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kafka-config-driven/references/troubleshooting-and-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubectl-operations/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubectl-operations/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubectl-operations/references/command-reference.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubectl-operations/references/context-namespace-rbac.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubectl-operations/references/debugging-playbooks.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubectl-operations/references/output-formats-and-selectors.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubectl-operations/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubernetes-workload-hardening/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubernetes-workload-hardening/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubernetes-workload-hardening/references/networkpolicy-and-rbac.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubernetes-workload-hardening/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/kubernetes-workload-hardening/references/securitycontext-and-podsecurity.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/langfuse-llm-tracing/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/langfuse-llm-tracing/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/langfuse-llm-tracing/references/langfuse-client-and-tracing.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/langfuse-llm-tracing/references/python-and-typescript.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/langfuse-llm-tracing/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/load-testing/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/modernization-and-migration/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/modernization-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/modernization-and-migration/references/migration-best-practices.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/modernization-and-migration/references/pydantic-v1-to-v2.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/modernization-and-migration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/modernization-and-migration/references/shared-internal-library.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/modernization-and-migration/references/sqlalchemy-14-to-20.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/multi-tenancy-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/multi-tenancy-patterns/references/caching-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/multi-tenancy-patterns/references/tenant-resolution.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-express-service/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-express-service/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-express-service/references/app-factory-and-mode-dispatch.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-express-service/references/config-and-module-alias.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-express-service/references/middleware-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-express-service/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-objection-knex/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-objection-knex/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-objection-knex/references/migrations-and-validation.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-objection-knex/references/objection-model-and-knex.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/node-objection-knex/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/notifications-and-messaging/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/notifications-and-messaging/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/notifications-and-messaging/references/provider-abstraction.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/notifications-and-messaging/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/notifications-and-messaging/references/templates-and-fallback.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/references/health-and-readiness.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/references/logging-and-structlog.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/observability-and-logging/references/pii-redaction.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/over-engineering-review/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/performance-optimization/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/planning-and-task-breakdown/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/playwright-verification/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/pydantic-schema-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/pydantic-schema-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/pydantic-schema-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/pydantic-schema-patterns/references/settings-and-validation.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/pydantic-schema-patterns/references/troubleshooting-and-common-errors.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/pydantic-schema-patterns/references/v1-vs-v2.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/references/advanced-query-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/references/basedao-and-sessions.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/python-dao-and-database/references/sqlalchemy-1x-vs-2x.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/radix-tailwind-component-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/radix-tailwind-component-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/radix-tailwind-component-patterns/references/radix-primitives-and-variants.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/radix-tailwind-component-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/radix-tailwind-component-patterns/references/tailwind-theme-and-cn.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/react-hook-form-zod-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/react-hook-form-zod-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/react-hook-form-zod-patterns/references/form-setup-and-zod.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/react-hook-form-zod-patterns/references/multi-step-and-modes.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/react-hook-form-zod-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/redis-caching-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/redis-caching-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/redis-caching-patterns/references/cache-manager-and-fallback.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/redis-caching-patterns/references/namespacing-and-invalidation.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/redis-caching-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/refresh-docs/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/remember/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/scope/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/scope/scope-template.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/sdlc/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/security-and-hardening/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/security-verification/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/shannon-ai-pentest/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/shannon-ai-pentest/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/shannon-ai-pentest/references/operating-guide.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/shipping-and-launch/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/simplification-debt/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/smoke-test/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/source-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/spec-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/sprint/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/sprint/sprint-template.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/tanstack-react-query-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/tanstack-react-query-patterns/references/mutations-and-cache.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/tanstack-react-query-patterns/references/query-keys-and-hooks.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/task-tracker-sync/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/references/config-and-retry-idempotency.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/references/dag-dsl-interpreter.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/references/schedule-registration.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/references/schedules-and-cron.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/temporal-config-driven/references/worker-workflow-activity-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/test-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/test-plan-review/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/github-actions-test-orchestration.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/pytest-and-fixtures.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/testing-conventions/references/security-regression-tests.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/threat-model/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/triage/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/ui-ux-design/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/unit-test/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/using-agent-skills/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/vitest-rtl-msw-patterns/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/vitest-rtl-msw-patterns/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/vitest-rtl-msw-patterns/references/msw-and-contract-tests.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/vitest-rtl-msw-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/vitest-rtl-msw-patterns/references/vitest-rtl-setup.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zap-vapt-scanning/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zap-vapt-scanning/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zap-vapt-scanning/references/operating-guide.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zap-vapt-scanning/scripts/endpoints.example.txt +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zap-vapt-scanning/scripts/requirements.txt +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/zap-vapt-scanning/scripts/zap_vapt.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/__main__.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/catalog.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/cli.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/hooks.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/models.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/pipeline.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/prompts.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/render.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/scaffold.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/upgrader.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/src/claude_kit/validator.py +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/CLAUDE.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/CLAUDE.stack.md.tmpl +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/CONTINUITY.template.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/README.claude-sdlc.md.tmpl +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/agent-memory/MEMORY.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/agent-memory/api/.gitkeep +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/agent-memory/architecture/.gitkeep +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/agent-memory/debugging/.gitkeep +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/agent-memory/gotchas/.gitkeep +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/agent-memory/patterns/.gitkeep +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/agent-memory/performance/.gitkeep +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/artifacts/adr.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/artifacts/api-change-report.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/artifacts/feature-spec.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/artifacts/release-plan.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/artifacts/runbook.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/artifacts/security-review.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/artifacts/test-plan.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/agents/data-workflow-agent.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/agents/founder-prototype-agent.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/agents/internal-tools-builder.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/agents/pm-copilot.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/agents/staff-pm-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/agents/support-ticket-engineer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/devops-and-release/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/devops-and-release/pack.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/engineering-core/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/engineering-core/pack.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/non-engineer-builder/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/non-engineer-builder/pack.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/onboarding-and-docs/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/onboarding-and-docs/pack.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/product-to-code/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/product-to-code/pack.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/quality-and-review/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/quality-and-review/pack.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/security-and-compliance/README.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/packs/security-and-compliance/pack.yaml +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/ai-working-agreement.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/ambiguity-resolution.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/branch-and-pr-policy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/compliance-policy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/non-engineer-safe-coding.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/pii-policy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/production-data-policy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/prompt-to-task-conversion.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/prototype-boundaries.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/rules/secrets-policy.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/customer-issue-to-fix/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/feature-from-idea/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/prompt-to-safe-task/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/prototype-to-production/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/repo-onboarding/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/review-scope/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/review-sprint/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/review-sprint-plan/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/org/skills/review-ux-flow/SKILL.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/settings.json +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/backend/go/net-http/rules/go-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/backend/python/fastapi/rules/fastapi-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/mongodb/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/mongodb/agents/mongodb-specialist.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/mongodb/rules/mongodb-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/postgres/agents/db-performance-reviewer.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/postgres/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/postgres/agents/postgres-specialist.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/postgres/rules/database-performance.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/db/postgres/rules/postgres-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/frontend/react/rules/design-system-compliance.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/frontend/react/rules/mobile-design-guidelines.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/frontend/react/rules/react-patterns.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/frontend/react/rules/ui-design-system.md +0 -0
- {claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/templates/stacks/frontend/react/rules/ux-patterns.md +0 -0
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"name": "claude-kit",
|
|
11
11
|
"source": "./",
|
|
12
12
|
"description": "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC config (no app code, no Docker): install CLAUDE.md + .claude/ (rules, the profile's agents/skills, hooks, artifact templates) + optional .mcp.json, then run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop.",
|
|
13
|
-
"version": "0.
|
|
13
|
+
"version": "0.25.0",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"keywords": ["sdlc", "agents", "orchestration", "quality-gates", "workflow", "scaffold", "cookiecutter"]
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC config (no app code, no Docker). `claude-kit init` asks ordered questions and installs CLAUDE.md + .claude/ (rules, the profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates with working memory and a self-improving learnings loop.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Arjunsingh Yadav",
|
|
@@ -4,6 +4,29 @@ 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.25.0] — 2026-06-24
|
|
8
|
+
|
|
9
|
+
**PR4 of the phased hardening review: supply-chain provenance, an explicit trust model, and a full
|
|
10
|
+
genericization pass so the public repo carries only neutral examples.**
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **PEP 740 build attestations re-enabled** in `publish.yml`. They were temporarily disabled while
|
|
14
|
+
Sigstore's Rekor transparency log was returning HTTP 502s at upload time; Sigstore has since been
|
|
15
|
+
healthy (verified via status.sigstore.dev — all services online, no incidents), so releases are
|
|
16
|
+
signed again for supply-chain provenance.
|
|
17
|
+
- **A "Security & trust model" section** in `README.md` (with a nav link) stating plainly that the
|
|
18
|
+
guard hooks are convenience, not a hardened boundary; that most quality gates are agent protocols
|
|
19
|
+
rather than mechanical enforcement; and that MCP servers are third-party code — surfacing
|
|
20
|
+
`SECURITY.md`'s posture where users decide to rely on the kit.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- **Genericization pass** — removed residual internal / company-specific identifiers so the published
|
|
24
|
+
repo carries only neutral examples. Genericized the 0.15.0 adoption narrative in `CHANGELOG.md` and
|
|
25
|
+
`docs/coverage-audit.md`; renamed test functions and replaced an internal-token blocklist with a
|
|
26
|
+
positive neutralization check in `tests/test_scaffold.py`; and neutralized the skills-collection
|
|
27
|
+
reference docs (example feature / module / variable names, domain-specific jargon, and a
|
|
28
|
+
region-specific registry host) into generic equivalents. Examples-only — no behavior change.
|
|
29
|
+
|
|
7
30
|
## [0.24.0] — 2026-06-24
|
|
8
31
|
|
|
9
32
|
**PR3 of the phased hardening review: deeper validation, a deterministic pipeline CLI, an MCP
|
|
@@ -532,7 +555,7 @@ values (→ `#______` placeholders, matching the existing `design-system-complia
|
|
|
532
555
|
|
|
533
556
|
## [0.15.0] — 2026-06-16
|
|
534
557
|
|
|
535
|
-
**Adopt
|
|
558
|
+
**Adopt a set of internal engineering personas & skills** (a private Claude Code plugin marketplace —
|
|
536
559
|
11 agents + 29 skills across 7 plugins: engineer, designer, pm, context-gen, staff-em, staff-sdet,
|
|
537
560
|
staff-pm). Those plugins are excellent but heavily **stack-bound** (FastAPI/SQLAlchemy/Pydantic/React/
|
|
538
561
|
Tailwind/Radix/Zod/Temporal/Kafka/Langfuse, against an internal `.ai/` doc convention). Mirroring all
|
|
@@ -546,7 +569,7 @@ nothing), **18 extend** (a real delta folded into the nearest existing component
|
|
|
546
569
|
layer), **1 adopt-core** (genuinely new + stack-agnostic). Net: **2 new core skills, ~10 surgical core
|
|
547
570
|
extends, 1 new React overlay rule + FastAPI/React overlay enrichments, 5 new org components** — zero
|
|
548
571
|
stack leakage into core, zero diluting duplicates. IP boundary: technique-and-structure only, no source
|
|
549
|
-
text copied; every
|
|
572
|
+
text copied; every source-internal reference (internal doc conventions, internal field/service names, numeric
|
|
550
573
|
heuristics) stripped or genericized.
|
|
551
574
|
|
|
552
575
|
Three deliberate decisions: **(1)** Temporal/Kafka/Langfuse are **not** added as selectable stacks —
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-kit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.25.0
|
|
4
4
|
Summary: Cookiecutter-style scaffolder for an autonomous Claude Code SDLC configuration (no app code, no Docker). Asks ordered questions and installs CLAUDE.md + .claude/ (rules, the chosen profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ajyadav013/claude-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/ajyadav013/claude-kit
|
|
@@ -44,7 +44,7 @@ with a quality gate between every phase. **No application code. No Docker. Confi
|
|
|
44
44
|
[](https://github.com/ajyadav013/claude-kit/actions/workflows/ci.yml)
|
|
45
45
|
[](CHANGELOG.md)
|
|
46
46
|
|
|
47
|
-
✨ [Features](#features) · 🚀 [Quick start](#quick-start) · 🧭 [How it works](#how-it-works) · 🔁 [The pipeline](#the-pipeline) · 🧪 [Example](examples/) · 🌱 [What we adopted](#influences--what-we-adopted) · 🤖 [Agents](#the-agents) · 🧩 [Catalog](#catalog--extensibility) · 🛠️ [CLI](#cli-reference) · 📖 [Agent guide](docs/agents.md)
|
|
47
|
+
✨ [Features](#features) · 🚀 [Quick start](#quick-start) · 🧭 [How it works](#how-it-works) · 🔁 [The pipeline](#the-pipeline) · 🧪 [Example](examples/) · 🌱 [What we adopted](#influences--what-we-adopted) · 🤖 [Agents](#the-agents) · 🧩 [Catalog](#catalog--extensibility) · 🛠️ [CLI](#cli-reference) · 🔒 [Security](#security--trust-model) · 📖 [Agent guide](docs/agents.md)
|
|
48
48
|
|
|
49
49
|
</div>
|
|
50
50
|
|
|
@@ -668,6 +668,30 @@ hints.
|
|
|
668
668
|
|
|
669
669
|
---
|
|
670
670
|
|
|
671
|
+
## Security & trust model
|
|
672
|
+
|
|
673
|
+
claude-kit installs **configuration only** — no application code, no Docker, nothing that runs as a
|
|
674
|
+
service. It never executes your code; it lays down rules, agents, skills, gates, and hook scripts that
|
|
675
|
+
**Claude Code** then follows. Three honest caveats are worth understanding before you rely on it:
|
|
676
|
+
|
|
677
|
+
- **The guard hooks are convenience, not a hardened boundary.** Scripts like `guard-secrets`,
|
|
678
|
+
`guard-destructive-git`, and the `warn-*` advisories raise the cost of a mistake — they do **not**
|
|
679
|
+
sandbox the agent or guarantee prevention. They need a POSIX shell + `jq` and **silently no-op**
|
|
680
|
+
without them (e.g. on Windows outside WSL/Git Bash). Treat them as seatbelts, not walls.
|
|
681
|
+
- **Most quality gates are agent protocols, not mechanical enforcement.** The pipeline's gates
|
|
682
|
+
(`spec-complete`, `code-review`, `security-clear`, …) are disciplines Claude is instructed to follow
|
|
683
|
+
and self-verify; only the hook scripts are deterministic, host-enforced checks. A capable model can
|
|
684
|
+
still be wrong or skip a step — keep a human in the loop for anything that matters.
|
|
685
|
+
- **MCP servers are third-party code.** Each fragment runs an external package (pinned to an exact
|
|
686
|
+
version) or a hosted endpoint that claude-kit references but does **not** vendor or audit. Review a
|
|
687
|
+
server's source and license before enabling it.
|
|
688
|
+
|
|
689
|
+
Releases are published to PyPI via OIDC **Trusted Publishing** (no long-lived API token) with **PEP 740
|
|
690
|
+
build attestations** for supply-chain provenance. Report vulnerabilities privately — see
|
|
691
|
+
[`SECURITY.md`](SECURITY.md) for the full scope and reporting process.
|
|
692
|
+
|
|
693
|
+
---
|
|
694
|
+
|
|
671
695
|
## Project structure
|
|
672
696
|
|
|
673
697
|
<details>
|
|
@@ -14,7 +14,7 @@ with a quality gate between every phase. **No application code. No Docker. Confi
|
|
|
14
14
|
[](https://github.com/ajyadav013/claude-kit/actions/workflows/ci.yml)
|
|
15
15
|
[](CHANGELOG.md)
|
|
16
16
|
|
|
17
|
-
✨ [Features](#features) · 🚀 [Quick start](#quick-start) · 🧭 [How it works](#how-it-works) · 🔁 [The pipeline](#the-pipeline) · 🧪 [Example](examples/) · 🌱 [What we adopted](#influences--what-we-adopted) · 🤖 [Agents](#the-agents) · 🧩 [Catalog](#catalog--extensibility) · 🛠️ [CLI](#cli-reference) · 📖 [Agent guide](docs/agents.md)
|
|
17
|
+
✨ [Features](#features) · 🚀 [Quick start](#quick-start) · 🧭 [How it works](#how-it-works) · 🔁 [The pipeline](#the-pipeline) · 🧪 [Example](examples/) · 🌱 [What we adopted](#influences--what-we-adopted) · 🤖 [Agents](#the-agents) · 🧩 [Catalog](#catalog--extensibility) · 🛠️ [CLI](#cli-reference) · 🔒 [Security](#security--trust-model) · 📖 [Agent guide](docs/agents.md)
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
@@ -638,6 +638,30 @@ hints.
|
|
|
638
638
|
|
|
639
639
|
---
|
|
640
640
|
|
|
641
|
+
## Security & trust model
|
|
642
|
+
|
|
643
|
+
claude-kit installs **configuration only** — no application code, no Docker, nothing that runs as a
|
|
644
|
+
service. It never executes your code; it lays down rules, agents, skills, gates, and hook scripts that
|
|
645
|
+
**Claude Code** then follows. Three honest caveats are worth understanding before you rely on it:
|
|
646
|
+
|
|
647
|
+
- **The guard hooks are convenience, not a hardened boundary.** Scripts like `guard-secrets`,
|
|
648
|
+
`guard-destructive-git`, and the `warn-*` advisories raise the cost of a mistake — they do **not**
|
|
649
|
+
sandbox the agent or guarantee prevention. They need a POSIX shell + `jq` and **silently no-op**
|
|
650
|
+
without them (e.g. on Windows outside WSL/Git Bash). Treat them as seatbelts, not walls.
|
|
651
|
+
- **Most quality gates are agent protocols, not mechanical enforcement.** The pipeline's gates
|
|
652
|
+
(`spec-complete`, `code-review`, `security-clear`, …) are disciplines Claude is instructed to follow
|
|
653
|
+
and self-verify; only the hook scripts are deterministic, host-enforced checks. A capable model can
|
|
654
|
+
still be wrong or skip a step — keep a human in the loop for anything that matters.
|
|
655
|
+
- **MCP servers are third-party code.** Each fragment runs an external package (pinned to an exact
|
|
656
|
+
version) or a hosted endpoint that claude-kit references but does **not** vendor or audit. Review a
|
|
657
|
+
server's source and license before enabling it.
|
|
658
|
+
|
|
659
|
+
Releases are published to PyPI via OIDC **Trusted Publishing** (no long-lived API token) with **PEP 740
|
|
660
|
+
build attestations** for supply-chain provenance. Report vulnerabilities privately — see
|
|
661
|
+
[`SECURITY.md`](SECURITY.md) for the full scope and reporting process.
|
|
662
|
+
|
|
663
|
+
---
|
|
664
|
+
|
|
641
665
|
## Project structure
|
|
642
666
|
|
|
643
667
|
<details>
|
|
@@ -51,9 +51,9 @@ The pattern matches the rest of the kit: a *discipline* is a RULE (always-on gui
|
|
|
51
51
|
spec/EM gate exists at all. P0-2 is the exception that strengthens *every* gate by making a fabricated
|
|
52
52
|
verdict auto-Critical, without adding a token.
|
|
53
53
|
|
|
54
|
-
##
|
|
54
|
+
## Internal-toolkit adoption disciplines (as of 0.15.0)
|
|
55
55
|
|
|
56
|
-
The
|
|
56
|
+
The internal persona/skill adoption (CHANGELOG 0.15.0) added capabilities reuse-first. Consistent with the
|
|
57
57
|
posture above, it added **no new gate tokens** — the new capabilities are SKILLs, OVERLAY rules, or
|
|
58
58
|
checklists that ride *inside existing* review gates. Enforcement class of each:
|
|
59
59
|
|
|
@@ -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.25.0"
|
|
8
8
|
description = "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC configuration (no app code, no Docker). Asks ordered questions and installs CLAUDE.md + .claude/ (rules, the chosen profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -151,7 +151,7 @@ from app.database import Base
|
|
|
151
151
|
from config.settings import settings
|
|
152
152
|
|
|
153
153
|
# Import all models (wildcard imports)
|
|
154
|
-
from app.
|
|
154
|
+
from app.items.models import *
|
|
155
155
|
from app.units.models import *
|
|
156
156
|
# ... (40+ wildcard imports)
|
|
157
157
|
|
|
@@ -183,8 +183,8 @@ from app.users.models import User
|
|
|
183
183
|
from app.organizations.models import Organization
|
|
184
184
|
|
|
185
185
|
# Wildcard imports (acceptable in env.py, used in multiple production services)
|
|
186
|
-
from
|
|
187
|
-
from
|
|
186
|
+
from app.users.models import *
|
|
187
|
+
from app.tenants.models import *
|
|
188
188
|
```
|
|
189
189
|
|
|
190
190
|
**Critical**: If a model is not imported in `env.py`, Alembic won't detect it for autogenerate.
|
|
@@ -146,9 +146,9 @@ from app.database import Base
|
|
|
146
146
|
from config.settings import settings
|
|
147
147
|
|
|
148
148
|
# Wildcard model imports
|
|
149
|
-
from app.
|
|
149
|
+
from app.items.models import *
|
|
150
150
|
from app.units.models import *
|
|
151
|
-
from app.
|
|
151
|
+
from app.catalog.models import *
|
|
152
152
|
# ... 40+ wildcard imports
|
|
153
153
|
|
|
154
154
|
# target_metadata
|
|
@@ -34,10 +34,10 @@ alembic/versions/
|
|
|
34
34
|
```
|
|
35
35
|
alembic/versions/
|
|
36
36
|
├── 202407301751-ad610b2bab70_add_event_log_table.py
|
|
37
|
-
├── 202408011255-
|
|
37
|
+
├── 202408011255-e848fe551d9b_add_category_mapping_tables.py
|
|
38
38
|
├── 202408012159-c3f783a32f7c_add_username_to_event_log_table.py
|
|
39
|
-
├── 202408052213-
|
|
40
|
-
├── 202409031128-
|
|
39
|
+
├── 202408052213-943a94fc4f73_add_is_active_to_mapping_tables.py
|
|
40
|
+
├── 202409031128-0fc8dde689fe_add_source_cluster.py
|
|
41
41
|
└── ...
|
|
42
42
|
```
|
|
43
43
|
|
|
@@ -53,10 +53,10 @@ alembic/versions/
|
|
|
53
53
|
|
|
54
54
|
```
|
|
55
55
|
migrations/versions/
|
|
56
|
-
├──
|
|
56
|
+
├── 554395de0772_added_data_models.py
|
|
57
57
|
├── 9d07416cb3d0_modified_generated_file_model.py
|
|
58
|
-
├──
|
|
59
|
-
└──
|
|
58
|
+
├── cb876bd3ff47_added_watermark_model.py
|
|
59
|
+
└── d5885c4539c2_updated_watermark_table.py
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
**Format**: `{auto_hash}_{description}.py` (default Alembic behavior)
|
{claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-pagination-filtering-sorting/README.md
RENAMED
|
@@ -18,7 +18,7 @@ This skill covers production-tested conventions for designing paginated, filtere
|
|
|
18
18
|
|
|
19
19
|
## Origin
|
|
20
20
|
|
|
21
|
-
This skill derives from real production backend services handling inventory, forecasting,
|
|
21
|
+
This skill derives from real production backend services handling inventory, forecasting, and order data. It distills conventions observed across multiple services with large datasets (10k-1M+ records per tenant) requiring efficient pagination, multi-dimensional filtering, and flexible sorting.
|
|
22
22
|
|
|
23
23
|
## Relation to other skills
|
|
24
24
|
|
{claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/api-pagination-filtering-sorting/SKILL.md
RENAMED
|
@@ -26,7 +26,7 @@ Standardize HTTP query parameter conventions and response metadata for paginated
|
|
|
26
26
|
|
|
27
27
|
4. **Multi-value filters via FastAPI `Query`**: For filters that accept multiple values (e.g., `status`, `store_ids`, `segment_codes`), use `Optional[List[str]] = Query(None, description="...")`. The client sends `?status=pending&status=approved` or `?status[]=pending&status[]=approved` (FastAPI accepts both). In the query builder, translate to SQL `IN` clause or `ANY(ARRAY[...])`.
|
|
28
28
|
|
|
29
|
-
5. **Comma-separated multi-value filters**: Some endpoints accept comma-separated values in a single param (e.g., `?
|
|
29
|
+
5. **Comma-separated multi-value filters**: Some endpoints accept comma-separated values in a single param (e.g., `?items=ITEM-001,ITEM-002,ITEM-003`). Use `Optional[str] = Query(None)` and split by comma in the service or repository layer before building SQL. This pattern is common for legacy APIs or when the client cannot send array query params.
|
|
30
30
|
|
|
31
31
|
6. **Hierarchical filters**: Product or location hierarchies (e.g., segment → family → class → brick; zone → format → state → region → city → store) use separate query params for each level. Each is optional; when provided, it narrows results to that level. Example: `?segment=BEVERAGES&family=SOFT_DRINKS&class=COLA`. Query builder applies `WHERE` clauses for each non-null filter. Some services support both singular and plural param names (`?store=...` and `?stores=...`); prefer plural for multi-value, singular for single value.
|
|
32
32
|
|
|
@@ -36,9 +36,9 @@ Standardize HTTP query parameter conventions and response metadata for paginated
|
|
|
36
36
|
|
|
37
37
|
9. **Repository layer pagination**: The repository fetches two results in parallel—`(records_data, total_count)`—via `asyncio.gather` or sequential calls. It executes the count query to get `total_count`, then executes the data query with `LIMIT/OFFSET`. Service layer constructs the response object with data + pagination metadata. For download endpoints (no pagination), omit `LIMIT/OFFSET` from the query.
|
|
38
38
|
|
|
39
|
-
10. **Search across multiple fields**: A single `search` query param applies a case-insensitive substring match across multiple columns. In SQL, use `WHERE (LOWER(field1) LIKE LOWER(:search) OR LOWER(field2) LIKE LOWER(:search) OR ...)` with param `%{search}%`. Some implementations use `ILIKE` (PostgreSQL) or full-text search. Common searchable fields:
|
|
39
|
+
10. **Search across multiple fields**: A single `search` query param applies a case-insensitive substring match across multiple columns. In SQL, use `WHERE (LOWER(field1) LIKE LOWER(:search) OR LOWER(field2) LIKE LOWER(:search) OR ...)` with param `%{search}%`. Some implementations use `ILIKE` (PostgreSQL) or full-text search. Common searchable fields: item codes, descriptions, store IDs, order IDs.
|
|
40
40
|
|
|
41
|
-
11. **Pydantic models for query params**: Define a `QueryParams` Pydantic model (e.g., `
|
|
41
|
+
11. **Pydantic models for query params**: Define a `QueryParams` Pydantic model (e.g., `InventoryQueryParams`, `ForecastQuery`) to encapsulate all filters, pagination, sorting, and search params. This separates route handler param extraction from business logic. The model can provide helper methods like `@property def limit(self)` to derive limit from `page_size` or compute `offset` from `page` and `page_size`.
|
|
42
42
|
|
|
43
43
|
12. **FastAPI route handler**: Extract query params via `Query()` for primitive types or depend on Pydantic model. Calculate `offset = (page - 1) * page_size` if needed. Call service layer with `query_params` object or individual params. Return response via `ResponseData.ok(data=..., pagination=...)` or a typed response model wrapping data + metadata.
|
|
44
44
|
|
|
@@ -175,8 +175,8 @@ class ItemQueryBuilder:
|
|
|
175
175
|
search_param = self._add_param(f"%{search}%")
|
|
176
176
|
return f"""
|
|
177
177
|
AND (
|
|
178
|
-
LOWER(
|
|
179
|
-
OR LOWER(
|
|
178
|
+
LOWER(item_id) LIKE LOWER({search_param})
|
|
179
|
+
OR LOWER(item_description) LIKE LOWER({search_param})
|
|
180
180
|
OR LOWER(store_id) LIKE LOWER({search_param})
|
|
181
181
|
)
|
|
182
182
|
"""
|
|
@@ -186,7 +186,7 @@ class ItemQueryBuilder:
|
|
|
186
186
|
sort_mapping = {
|
|
187
187
|
"created_at": "created_at",
|
|
188
188
|
"updated_at": "updated_at",
|
|
189
|
-
"
|
|
189
|
+
"item": "item_id",
|
|
190
190
|
"store": "store_id",
|
|
191
191
|
}
|
|
192
192
|
column = sort_mapping.get(sort_by, "created_at")
|
|
@@ -284,7 +284,7 @@ async def list_items(
|
|
|
284
284
|
sort_by: str = Query("created_at", description="Field to sort by"),
|
|
285
285
|
sort_order: str = Query("desc", regex="^(asc|desc)$", description="Sort direction"),
|
|
286
286
|
# Search
|
|
287
|
-
search: Optional[str] = Query(None, description="Search across
|
|
287
|
+
search: Optional[str] = Query(None, description="Search across item, description, store"),
|
|
288
288
|
# Filters
|
|
289
289
|
status: Optional[List[str]] = Query(None, description="Filter by status (multi-value)"),
|
|
290
290
|
store_ids: Optional[List[str]] = Query(None, description="Filter by store IDs"),
|
|
@@ -301,7 +301,7 @@ async def list_items(
|
|
|
301
301
|
- page_size: Records per page (1-100, default: 20)
|
|
302
302
|
|
|
303
303
|
**Sorting:**
|
|
304
|
-
- sort_by: Field to sort by (created_at, updated_at,
|
|
304
|
+
- sort_by: Field to sort by (created_at, updated_at, item, store)
|
|
305
305
|
- sort_order: asc or desc (default: desc)
|
|
306
306
|
|
|
307
307
|
**Filters:**
|
|
@@ -311,7 +311,7 @@ async def list_items(
|
|
|
311
311
|
- family: Product family (hierarchical, requires segment)
|
|
312
312
|
|
|
313
313
|
**Search:**
|
|
314
|
-
- search: Substring match across
|
|
314
|
+
- search: Substring match across item_id, item_description, store_id
|
|
315
315
|
"""
|
|
316
316
|
query_params = QueryParams(
|
|
317
317
|
page=page,
|
|
@@ -336,7 +336,7 @@ async def list_items(
|
|
|
336
336
|
5. **Single-responsibility violation**: Query construction in route handlers; move SQL building to a dedicated QueryBuilder or repository method.
|
|
337
337
|
6. **Zero-indexed `page` in user-facing APIs**: Users expect page 1 to be the first page; use 1-indexed `page` in API and convert to 0-indexed offset internally.
|
|
338
338
|
7. **Hardcoding sort column names**: User sends `sort_by=doh` but SQL uses `days_on_hand`; maintain a sort mapping dict to translate user-facing names to column names.
|
|
339
|
-
8. **Ignoring case-sensitivity in search**: `WHERE
|
|
339
|
+
8. **Ignoring case-sensitivity in search**: `WHERE item_id LIKE :search` is case-sensitive on some DBs; use `LOWER(...)` or `ILIKE` for case-insensitive search.
|
|
340
340
|
9. **Fetching full result set then paginating in Python**: Always push `LIMIT/OFFSET` to SQL; paginating in-memory defeats the purpose and exhausts memory on large datasets.
|
|
341
341
|
10. **Not validating `sort_order`**: Accepting arbitrary `sort_order` can inject ASC/DESC into SQL unsafely; use `regex="^(asc|desc)$"` or enum validation.
|
|
342
342
|
11. **Returning inconsistent metadata field names**: `total` vs `total_records`, `limit` vs `page_size`, `next` vs `has_next`; standardize on one naming convention per service.
|
|
@@ -86,16 +86,16 @@ WHERE store_id = ANY($2)
|
|
|
86
86
|
Legacy or client-constrained APIs:
|
|
87
87
|
|
|
88
88
|
```python
|
|
89
|
-
|
|
89
|
+
items: Optional[str] = Query(None, description="Comma-separated item codes")
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
Split in service/repository:
|
|
93
93
|
```python
|
|
94
|
-
|
|
95
|
-
# Then use in SQL: WHERE
|
|
94
|
+
item_list = items.split(',') if items else []
|
|
95
|
+
# Then use in SQL: WHERE item_id = ANY($1)
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
Example: `?
|
|
98
|
+
Example: `?items=ITEM-001,ITEM-002,ITEM-003`
|
|
99
99
|
|
|
100
100
|
## Hierarchical filters
|
|
101
101
|
|
|
@@ -172,14 +172,14 @@ query = f"ORDER BY {column} {sort_order.upper()}"
|
|
|
172
172
|
Single search param for multi-field substring matching:
|
|
173
173
|
|
|
174
174
|
```python
|
|
175
|
-
search: Optional[str] = Query(None, description="Search text across
|
|
175
|
+
search: Optional[str] = Query(None, description="Search text across item, description, store")
|
|
176
176
|
```
|
|
177
177
|
|
|
178
178
|
Translate to case-insensitive SQL:
|
|
179
179
|
```sql
|
|
180
180
|
WHERE (
|
|
181
|
-
LOWER(
|
|
182
|
-
OR LOWER(
|
|
181
|
+
LOWER(item_id) LIKE LOWER($1)
|
|
182
|
+
OR LOWER(item_description) LIKE LOWER($1)
|
|
183
183
|
OR LOWER(store_id) LIKE LOWER($1)
|
|
184
184
|
)
|
|
185
185
|
```
|
|
@@ -189,8 +189,8 @@ Param value: `f"%{search}%"`
|
|
|
189
189
|
Some implementations use PostgreSQL `ILIKE`:
|
|
190
190
|
```sql
|
|
191
191
|
WHERE (
|
|
192
|
-
|
|
193
|
-
OR
|
|
192
|
+
item_id ILIKE $1
|
|
193
|
+
OR item_description ILIKE $1
|
|
194
194
|
)
|
|
195
195
|
```
|
|
196
196
|
|
|
@@ -30,9 +30,9 @@ class ForecastQuery(BaseModel):
|
|
|
30
30
|
### Limit/offset style
|
|
31
31
|
|
|
32
32
|
```python
|
|
33
|
-
# app/
|
|
34
|
-
class
|
|
35
|
-
"""Query parameters for
|
|
33
|
+
# app/inventory/models.py
|
|
34
|
+
class InventoryQueryParams(BaseModel):
|
|
35
|
+
"""Query parameters for inventory data list."""
|
|
36
36
|
|
|
37
37
|
# Pagination
|
|
38
38
|
limit: int = Field(default=100, ge=1, le=1000, description="Maximum records to return")
|
|
@@ -92,10 +92,10 @@ class ForecastResponse(BaseModel):
|
|
|
92
92
|
### Limit/offset response
|
|
93
93
|
|
|
94
94
|
```python
|
|
95
|
-
# app/
|
|
96
|
-
class
|
|
97
|
-
"""Response data for
|
|
98
|
-
data: List[
|
|
95
|
+
# app/inventory/models.py
|
|
96
|
+
class InventoryListData(BaseModel):
|
|
97
|
+
"""Response data for inventory list."""
|
|
98
|
+
data: List[InventoryRecord] = Field(default_factory=list, description="List of records")
|
|
99
99
|
total_records: int = Field(0, description="Total number of records")
|
|
100
100
|
page: int = Field(1, description="Current page number")
|
|
101
101
|
page_size: int = Field(100, description="Records per page")
|
|
@@ -108,8 +108,8 @@ class ReplenishmentListData(BaseModel):
|
|
|
108
108
|
|
|
109
109
|
```python
|
|
110
110
|
# app/home/router.py
|
|
111
|
-
@router.get("/
|
|
112
|
-
async def
|
|
111
|
+
@router.get("/detailed_item_view")
|
|
112
|
+
async def get_detailed_item_view(
|
|
113
113
|
# Pagination
|
|
114
114
|
page: int = Query(1, ge=1, description="Page number (1-indexed)"),
|
|
115
115
|
page_size: int = Query(20, ge=1, le=100, description="Items per page (max 100)"),
|
|
@@ -117,7 +117,7 @@ async def get_detailed_sku_view(
|
|
|
117
117
|
# Sorting
|
|
118
118
|
sort_by: str = Query(
|
|
119
119
|
"doh",
|
|
120
|
-
description="Column to sort by: site, category, subcategory,
|
|
120
|
+
description="Column to sort by: site, category, subcategory, item, doh, stock, sales, cost"
|
|
121
121
|
),
|
|
122
122
|
sort_order: str = Query(
|
|
123
123
|
"DESC",
|
|
@@ -130,22 +130,22 @@ async def get_detailed_sku_view(
|
|
|
130
130
|
subcategory: Optional[str] = Query(None, description="Subcategory/Class ID"),
|
|
131
131
|
|
|
132
132
|
# Search
|
|
133
|
-
search: Optional[str] = Query(None, description="Search text across site, category,
|
|
133
|
+
search: Optional[str] = Query(None, description="Search text across site, category, item"),
|
|
134
134
|
|
|
135
135
|
# Multi-value filters (comma-separated)
|
|
136
|
-
|
|
136
|
+
items: Optional[str] = Query(None, description="Comma-separated item codes"),
|
|
137
137
|
stores: Optional[str] = Query(None, description="Comma-separated store IDs"),
|
|
138
138
|
|
|
139
139
|
service = Depends(get_service),
|
|
140
140
|
):
|
|
141
141
|
"""
|
|
142
|
-
Get detailed
|
|
142
|
+
Get detailed item view with pagination and sorting.
|
|
143
143
|
|
|
144
144
|
**Usage Examples:**
|
|
145
145
|
```
|
|
146
|
-
GET /
|
|
147
|
-
GET /
|
|
148
|
-
GET /
|
|
146
|
+
GET /detailed_item_view?sort_by=stock&sort_order=DESC
|
|
147
|
+
GET /detailed_item_view?items=ITEM-001,ITEM-002,ITEM-003
|
|
148
|
+
GET /detailed_item_view?category=BEVERAGES&stores=6217,6220&sort_by=cost&sort_order=ASC
|
|
149
149
|
```
|
|
150
150
|
"""
|
|
151
151
|
# Service call omitted
|
|
@@ -155,15 +155,15 @@ async def get_detailed_sku_view(
|
|
|
155
155
|
### Limit/offset with multi-value filters
|
|
156
156
|
|
|
157
157
|
```python
|
|
158
|
-
# app/
|
|
158
|
+
# app/inventory/distribution/router.py
|
|
159
159
|
DEFAULT_PAGE = 1
|
|
160
160
|
DEFAULT_PAGE_SIZE = 20
|
|
161
161
|
MAX_PAGE_SIZE = 1000
|
|
162
162
|
|
|
163
|
-
@router.get("/
|
|
164
|
-
async def
|
|
163
|
+
@router.get("/distribution")
|
|
164
|
+
async def get_distribution_data(
|
|
165
165
|
# Search
|
|
166
|
-
search: Optional[str] = Query(None, description="Search text across order_id, location_id,
|
|
166
|
+
search: Optional[str] = Query(None, description="Search text across order_id, location_id, item_id"),
|
|
167
167
|
|
|
168
168
|
# Sorting
|
|
169
169
|
sort_by: str = Query("created_at", description="Field to sort by"),
|
|
@@ -185,7 +185,7 @@ async def get_redistribution_data(
|
|
|
185
185
|
service = Depends(get_service),
|
|
186
186
|
):
|
|
187
187
|
"""
|
|
188
|
-
Get
|
|
188
|
+
Get distribution data with filtering, search, sorting, and pagination.
|
|
189
189
|
|
|
190
190
|
**Pagination:**
|
|
191
191
|
- page: Page number (1-indexed, default: 1)
|
|
@@ -263,13 +263,13 @@ class ForecastQueryBuilder:
|
|
|
263
263
|
|
|
264
264
|
```python
|
|
265
265
|
# app/home/query_builder.py
|
|
266
|
-
class
|
|
266
|
+
class ItemQueryBuilder:
|
|
267
267
|
def _get_sort_column(self, sort_by: str) -> str:
|
|
268
268
|
"""Map sort_by parameter to actual column name."""
|
|
269
269
|
sort_mapping = {
|
|
270
270
|
"site": "store_name",
|
|
271
271
|
"category": "category_description",
|
|
272
|
-
"
|
|
272
|
+
"item": "item_id",
|
|
273
273
|
"doh": "days_on_hand",
|
|
274
274
|
"stock": "total_stock",
|
|
275
275
|
"sales": "sales_90d",
|
|
@@ -282,7 +282,7 @@ class SKUQueryBuilder:
|
|
|
282
282
|
### Multi-value filter building
|
|
283
283
|
|
|
284
284
|
```python
|
|
285
|
-
# app/
|
|
285
|
+
# app/inventory/distribution/query_builder.py
|
|
286
286
|
def _build_filters(self, query_params) -> str:
|
|
287
287
|
"""Build filter clauses."""
|
|
288
288
|
clauses = []
|
|
@@ -310,8 +310,8 @@ def _build_search_filter(self, search: Optional[str]) -> str:
|
|
|
310
310
|
search_param = self._add_param(f"%{search}%")
|
|
311
311
|
return f"""
|
|
312
312
|
AND (
|
|
313
|
-
LOWER(
|
|
314
|
-
OR LOWER(
|
|
313
|
+
LOWER(item_id) LIKE LOWER({search_param})
|
|
314
|
+
OR LOWER(item_description) LIKE LOWER({search_param})
|
|
315
315
|
OR LOWER(order_id) LIKE LOWER({search_param})
|
|
316
316
|
OR LOWER(store_id) LIKE LOWER({search_param})
|
|
317
317
|
)
|
|
@@ -332,7 +332,7 @@ def build_count_query(self, filters: Dict[str, str]) -> Tuple[str, List[Any]]:
|
|
|
332
332
|
search_where = self._build_search_filter(filters)
|
|
333
333
|
|
|
334
334
|
query = f"""
|
|
335
|
-
SELECT COUNT(DISTINCT CONCAT(site_id, '-',
|
|
335
|
+
SELECT COUNT(DISTINCT CONCAT(site_id, '-', item_id)) as total
|
|
336
336
|
FROM {self.schema}.{self.table}
|
|
337
337
|
WHERE 1=1
|
|
338
338
|
{site_where}
|
|
@@ -347,8 +347,8 @@ def build_count_query(self, filters: Dict[str, str]) -> Tuple[str, List[Any]]:
|
|
|
347
347
|
### Fetch list with count
|
|
348
348
|
|
|
349
349
|
```python
|
|
350
|
-
# app/
|
|
351
|
-
class
|
|
350
|
+
# app/inventory/distribution/repository.py
|
|
351
|
+
class DistributionRepository:
|
|
352
352
|
async def fetch_list(
|
|
353
353
|
self,
|
|
354
354
|
query_params: QueryParams
|
|
@@ -415,23 +415,23 @@ class ForecastService:
|
|
|
415
415
|
### Limit/offset style
|
|
416
416
|
|
|
417
417
|
```python
|
|
418
|
-
# app/
|
|
419
|
-
class
|
|
420
|
-
async def
|
|
418
|
+
# app/inventory/distribution/service.py
|
|
419
|
+
class DistributionService:
|
|
420
|
+
async def get_distribution_list(
|
|
421
421
|
self,
|
|
422
422
|
query_params: QueryParams
|
|
423
|
-
) ->
|
|
424
|
-
"""Get
|
|
423
|
+
) -> DistributionListData:
|
|
424
|
+
"""Get distribution data list with pagination."""
|
|
425
425
|
records_data, total_count = await self.repository.fetch_list(query_params)
|
|
426
426
|
|
|
427
427
|
# Convert to Pydantic models
|
|
428
|
-
records = [
|
|
428
|
+
records = [InventoryRecord(**r) for r in records_data]
|
|
429
429
|
|
|
430
430
|
# Calculate pagination metadata
|
|
431
431
|
page = (query_params.offset // query_params.limit) + 1
|
|
432
432
|
has_next = (query_params.offset + query_params.limit) < total_count
|
|
433
433
|
|
|
434
|
-
return
|
|
434
|
+
return DistributionListData(
|
|
435
435
|
data=records,
|
|
436
436
|
total_records=total_count,
|
|
437
437
|
page=page,
|
|
@@ -445,9 +445,9 @@ class RedistributionService:
|
|
|
445
445
|
### Sort configuration
|
|
446
446
|
|
|
447
447
|
```python
|
|
448
|
-
# app/
|
|
449
|
-
class
|
|
450
|
-
"""Configuration for
|
|
448
|
+
# app/inventory/distribution/config.py
|
|
449
|
+
class DistributionConfig:
|
|
450
|
+
"""Configuration for distribution module."""
|
|
451
451
|
|
|
452
452
|
default_sort_by: str = "created_at"
|
|
453
453
|
|
|
@@ -456,7 +456,7 @@ class RedistributionConfig:
|
|
|
456
456
|
"updated_at": "updated_at",
|
|
457
457
|
"order_id": "order_id",
|
|
458
458
|
"store_id": "store_id",
|
|
459
|
-
"
|
|
459
|
+
"item_id": "item_id",
|
|
460
460
|
"quantity": "quantity",
|
|
461
461
|
"status": "status",
|
|
462
462
|
}
|
|
@@ -483,10 +483,10 @@ DEFAULT_SORT_ORDER = "desc"
|
|
|
483
483
|
These patterns appear across multiple services:
|
|
484
484
|
|
|
485
485
|
- `app/models.py` — Pydantic query and response models
|
|
486
|
-
- `app
|
|
487
|
-
- `app
|
|
488
|
-
- `app
|
|
489
|
-
- `app
|
|
490
|
-
- `app
|
|
491
|
-
- `app
|
|
492
|
-
- `app
|
|
486
|
+
- `app/inventory/models.py` — Domain-specific models
|
|
487
|
+
- `app/inventory/router.py` — FastAPI route handlers with Query() params
|
|
488
|
+
- `app/inventory/service.py` — Service layer with pagination metadata construction
|
|
489
|
+
- `app/inventory/repository.py` — Repository layer with fetch_list returning (records, count)
|
|
490
|
+
- `app/inventory/query_builder.py` — QueryBuilder class with build_data_query and build_count_query
|
|
491
|
+
- `app/inventory/config.py` — Configuration for sort mappings and defaults
|
|
492
|
+
- `app/inventory/constants.py` — Constants for pagination defaults and limits
|
{claude_code_kit-0.24.0 → claude_code_kit-0.25.0}/skills/data-engineering-bigquery-gcs/README.md
RENAMED
|
@@ -24,7 +24,7 @@ Derived from real-world production Python/FastAPI services implementing data pip
|
|
|
24
24
|
|
|
25
25
|
## How to apply
|
|
26
26
|
|
|
27
|
-
1. **For medallion architecture**: Create three BigQuery datasets (`
|
|
27
|
+
1. **For medallion architecture**: Create three BigQuery datasets (`bronze`, `silver`, `gold`). Bronze ingests raw CDC with deduplication; Silver cleans and joins; Gold aggregates.
|
|
28
28
|
2. **For BigQuery schemas**: Always partition by date column (`metric_date`, `event_date`). Cluster by high-cardinality dimensions used in filters (`org_id`, `site`). Use the `TimePartitioning` Python API for programmatic table creation, or `PARTITION BY` in SQLX/Dataform.
|
|
29
29
|
3. **For incremental sync jobs**: Use temp table + MERGE pattern — load (from GCS via `load_table_from_uri`, or in-memory via `load_table_from_dataframe`) → temp table with `WRITE_TRUNCATE`, MERGE temp → main with timestamp check, track MAX(timestamp), cleanup temp.
|
|
30
30
|
4. **For user-supplied query values**: Always use parameterized queries (`QueryJobConfig` + `ScalarQueryParameter`/`ArrayQueryParameter`); never f-string interpolate input into SQL.
|