specify-cli 0.12.13__tar.gz → 0.12.15__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.
- {specify_cli-0.12.13 → specify_cli-0.12.15}/CHANGELOG.md +31 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/PKG-INFO +1 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/extensions.md +4 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/presets.md +2 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/workflows.md +26 -3
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/catalog.community.json +142 -5
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/catalog.community.json +58 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/pyproject.toml +1 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_github_http.py +30 -5
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_init_options.py +1 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/yamlio.py +50 -2
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/installer.py +32 -10
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/commands/init.py +34 -5
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/extensions/__init__.py +65 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_helpers.py +9 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/base.py +31 -3
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/kiro_cli/__init__.py +7 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/presets/__init__.py +68 -23
- specify_cli-0.12.15/src/specify_cli/workflows/_commands.py +3153 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/catalog.py +215 -30
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/engine.py +118 -5
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/command/__init__.py +38 -2
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/fan_in/__init__.py +18 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/contract/test_bundle_cli.py +39 -11
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_install_flow.py +208 -2
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_cli.py +59 -1
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_yaml.py +30 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_subcommand.py +21 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_registry.py +14 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extensions.py +132 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_github_http.py +38 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_presets.py +185 -44
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_workflows.py +5160 -65
- specify_cli-0.12.13/src/specify_cli/workflows/_commands.py +0 -1729
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.editorconfig +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.gitattributes +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/CODEOWNERS +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/dependabot.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-fix.lock.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-fix.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-test.lock.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-test.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/codeql.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/docs.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/lint.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/publish-pypi.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/release.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/stale.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/test.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.gitignore +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.pre-commit-config.yaml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/.zenodo.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/AGENTS.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/CITATION.cff +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/CONTRIBUTING.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/DEVELOPMENT.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/LICENSE +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/SECURITY.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/SUPPORT.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/.gitignore +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/bundles.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/friends.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/overview.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/docfx.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/guides/monorepo.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/index.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/one-time.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/pipx.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/uv.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/installation.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/local-development.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/quickstart.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/authentication.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/bundles.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/core.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/extensions.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/integrations.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/overview.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/presets.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/template/public/main.css +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/toc.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/upgrade.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/developer/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/agent-context-defaults.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/catalog.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/extension.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/.gitignore +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/LICENSE +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/extension.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/catalog.community.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/catalog.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/media/logo_large.webp +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/media/logo_small.webp +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/media/specify_cli.gif +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-April.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-February.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-June.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-March.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-May.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/catalog.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/preset.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/common.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/create-new-feature.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/common.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/python/check_prerequisites.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/python/common.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/spec-driven.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/spec-kit.code-workspace +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_project.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_version.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/agents.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/catalog.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/manifest.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/records.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/adapters.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/primitives.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/extensions/_commands.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/claude/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/omp/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/presets/_commands.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/expressions.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/checklist-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/analyze.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/checklist.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/clarify.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/constitution.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/converge.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/implement.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/plan.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/specify.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/tasks.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/taskstoissues.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/constitution-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/plan-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/spec-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/tasks-template.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/vscode-settings.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/auth_helpers.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/bundler_helpers.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/conftest.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/contract/test_catalog_schema.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/contract/test_manifest_schema.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/git/test_git_extension.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/plan.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/spec.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/http_helpers.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_authentication.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_check_prerequisites_python_parity.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_check_tool.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_cli_version.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_command_template_py_scripts.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_commands_package.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_console_imports.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extension_skills.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_github_workflows.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_init_dir.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_merge.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_post_process.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_upgrade.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_utils.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_version_imports.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_adapters.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_catalog_config.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_primitives.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_records.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/README.md +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/catalog.community.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/catalog.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/step-catalog.json +0 -0
|
@@ -2,6 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.12.15] - 2026-07-14
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Update Autonomous Run Governance preset to v0.1.4 (#3511)
|
|
10
|
+
- fix(workflows): raise catalog error, not raw ValueError, on a malformed catalog URL (#3484)
|
|
11
|
+
- fix(workflows): evaluate 'in'/'not in' safely on a non-iterable right operand (#3447) (#3468)
|
|
12
|
+
- fix: add trailing newline to init-options.json output (#3509)
|
|
13
|
+
- feat(workflows): align workflow CLI with extension command surface (#3419)
|
|
14
|
+
- fix(extensions): stop env-var config leaking across prefix-colliding extension IDs (#3497)
|
|
15
|
+
- fix(integrations): escape control characters in goose recipe YAML renderer (#3384)
|
|
16
|
+
- [extension] Update DocGuard — CDD Enforcement extension to v0.32.0 (#3489)
|
|
17
|
+
- [extension] Add Multi-Repo Branch Sync extension to community catalog (#3411)
|
|
18
|
+
- chore: release 0.12.14, begin 0.12.15.dev0 development (#3506)
|
|
19
|
+
|
|
20
|
+
## [0.12.14] - 2026-07-13
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- [extension] Add Spec Kit Memory extension to community catalog (#3455)
|
|
25
|
+
- Add Test-First Governance preset to community catalog (#3504)
|
|
26
|
+
- Add Autonomous Run Governance preset to community catalog (#3501)
|
|
27
|
+
- fix(workflows): validate command step input/options are mappings (#3262)
|
|
28
|
+
- fix(presets): resolve() honors manifest-declared file: for installed presets (#3351)
|
|
29
|
+
- fix(init): don't block on confirmation for 'init --here' without a TTY (#3236)
|
|
30
|
+
- [extension] Add Quality Gates (Enforcement Layer) extension to community catalog (#3431)
|
|
31
|
+
- fix(integrations): exit cleanly on unbalanced quote in --integration-options (#3457) (#3466)
|
|
32
|
+
- fix(integrations): declare kiro-cli multi-install safe (#3471) (#3485)
|
|
33
|
+
- fix(workflows): fail fan-in step on non-list wait_for instead of crashing (#3482)
|
|
34
|
+
- chore: release 0.12.13, begin 0.12.14.dev0 development (#3498)
|
|
35
|
+
|
|
5
36
|
## [0.12.13] - 2026-07-13
|
|
6
37
|
|
|
7
38
|
### Changed
|
|
@@ -51,7 +51,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
51
51
|
| Confluence Extension | Create a doc in Confluence summarizing the specifications and planning files | `integration` | Read+Write | [spec-kit-confluence](https://github.com/aaronrsun/spec-kit-confluence) |
|
|
52
52
|
| Cost Tracker | Track real LLM dollar cost across SDD workflows — per-feature budgets, per-integration comparison, and finance-ready exports | `visibility` | Read+Write | [spec-kit-cost](https://github.com/Quratulain-bilal/spec-kit-cost) |
|
|
53
53
|
| Data Model Diagram | Generates Mermaid ER diagrams from Spec Kit data models after planning | `docs` | Read+Write | [spec-kit-data-model-diagram](https://github.com/benizzio/spec-kit-data-model-diagram) |
|
|
54
|
-
| DocGuard — CDD Enforcement |
|
|
54
|
+
| DocGuard — CDD Enforcement | Doc-integrity engine with MCP server, SARIF output, and zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, spec-kit hooks. Pure Node.js. | `docs` | Read+Write | [spec-kit-docguard](https://github.com/raccioly/docguard) |
|
|
55
55
|
| EARS Requirements Syntax | Author, lint, and convert requirements using EARS - the five industry-standard sentence patterns for unambiguous, testable requirements | `docs` | Read+Write | [spec-kit-ears](https://github.com/dhruv-15-03/spec-kit-ears) |
|
|
56
56
|
| Extensify | Create and validate extensions and extension catalogs | `process` | Read+Write | [extensify](https://github.com/mnriem/spec-kit-extensions/tree/main/extensify) |
|
|
57
57
|
| Fix Findings | Automated analyze-fix-reanalyze loop that resolves spec findings until clean | `code` | Read+Write | [spec-kit-fix-findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) |
|
|
@@ -84,6 +84,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
84
84
|
| MemoryLint | Evidence-driven instruction drift checker: audits agent memory files for boundary, reality, conflict, and redundancy drift. | `process` | Read+Write | [memorylint](https://github.com/RbBtSn0w/spec-kit-extensions/tree/main/memorylint) |
|
|
85
85
|
| Microsoft 365 Integration | Fetch Teams messages, meeting transcripts, and SharePoint/OneDrive files as local Markdown for spec generation | `integration` | Read+Write | [spec-kit-m365](https://github.com/BenBtg/spec-kit-m365) |
|
|
86
86
|
| Multi-Model Review | Cross-model Spec Kit handoffs for spec authoring, implementation routing, and review. | `process` | Read+Write | [multi-model-review](https://github.com/formin/multi-model-review) |
|
|
87
|
+
| Multi-Repo Branch Sync | Creates the feature branch in affected sub-repositories and git submodules via plan/tasks hooks | `process` | Read+Write | [multi-repo-sync](https://github.com/fyloss/spec-kit-multi-repo-sync) |
|
|
87
88
|
| Multi-Sites Spec Kit | Multi-site aware specify command with per-site spec folders, auto-increment, and Drupal support | `process` | Read+Write | [spec-kit-multi-sites](https://github.com/teeyo/spec-kit-multi-sites) |
|
|
88
89
|
| .NET Framework to Modern .NET Migration | Orchestrate end-to-end .NET Framework to modern .NET migration across 7 phases, with SDD lifecycle integration | `process` | Read+Write | [spec-kit-fx-to-net](https://github.com/RogerBestMsft/spec-kit-FxToNet) |
|
|
89
90
|
| Onboard | Contextual onboarding and progressive growth for developers new to spec-kit projects. Explains specs, maps dependencies, validates understanding, and guides the next step | `process` | Read+Write | [spec-kit-onboard](https://github.com/dmux/spec-kit-onboard) |
|
|
@@ -98,6 +99,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
98
99
|
| Project Health Check | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git | `visibility` | Read-only | [spec-kit-doctor](https://github.com/KhawarHabibKhan/spec-kit-doctor) |
|
|
99
100
|
| Project Status | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary | `visibility` | Read-only | [spec-kit-status](https://github.com/KhawarHabibKhan/spec-kit-status) |
|
|
100
101
|
| QA Testing Extension | Systematic QA testing with browser-driven or CLI-based validation of acceptance criteria from spec | `code` | Read-only | [spec-kit-qa](https://github.com/arunt14/spec-kit-qa) |
|
|
102
|
+
| Quality Gates (Enforcement Layer) | Deterministic quality enforcement for Spec Kit projects at three boundaries — agent hooks, git pre-commit, CI — with one policy file and provable enforcement (attestations, canaries, verified parity). | `process` | Read+Write | [spec-gates](https://github.com/schwichtgit/spec-gates) |
|
|
101
103
|
| RAG Azure Builder | Spec Kit extension for onboarding and operating an Azure RAG stack with guided workflows. | `process` | Read+Write | [spec-kit-extension-rag-azure-builder](https://github.com/Sertxito/spec-kit-extension-rag-azure-builder) |
|
|
102
104
|
| Ralph Loop | Autonomous implementation loop using AI agent CLI | `code` | Read+Write | [spec-kit-ralph](https://github.com/Rubiss-Projects/spec-kit-ralph) |
|
|
103
105
|
| Reconcile Extension | Reconcile implementation drift by surgically updating feature artifacts. | `docs` | Read+Write | [spec-kit-reconcile](https://github.com/stn1slv/spec-kit-reconcile) |
|
|
@@ -119,6 +121,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
119
121
|
| Spec Diagram | Auto-generate Mermaid diagrams of SDD workflow state, feature progress, and task dependencies | `visibility` | Read-only | [spec-kit-diagram-](https://github.com/Quratulain-bilal/spec-kit-diagram-) |
|
|
120
122
|
| Spec Kit Discovery Extension | Run technical discovery commands for feasibility, technology selection, scenario-specific technical decisions, legacy codebase assessment, implementation understanding, and proof-of-concept validation | `process` | Read+Write | [spec-kit-discovery](https://github.com/bigsmartben/spec-kit-discovery) |
|
|
121
123
|
| Spec Kit Figma | Agent-agnostic SpecKit extension that grounds spec, plan & task generation in Figma design context — REST + optional MCP, single/mono/multi-repo, macOS/Linux/Windows. | `integration` | Read+Write | [spec-kit-figma](https://github.com/Fyloss/spec-kit-figma) |
|
|
124
|
+
| Spec Kit Memory | Recalls prior specs and decisions from configurable memory tools (e.g. memsearch) before SDLC stages, so planning and specification start from what the project already knows | `docs` | Read+Write | [spec-kit-memory](https://github.com/zaytsevand/spec-kit-memory) |
|
|
122
125
|
| Spec Kit Preview | Generate evidence-backed low, mid, or high fidelity previews from Spec Kit artifacts as Markdown or self-contained HTML | `docs` | Read+Write | [spec-kit-preview](https://github.com/bigsmartben/spec-kit-preview) |
|
|
123
126
|
| Spec Kit Schedule | Optimal multi-agent task scheduling via CP-SAT — DAG precedence, hallucination-aware caps, file-conflict avoidance, stochastic durations, replanning, and interactive HTML output | `process` | Read+Write | [spec-kit-schedule](https://github.com/jfranc38/spec-kit-schedule) |
|
|
124
127
|
| Spec Kit TLDR | Render a feature's spec.md / plan.md into a review-oriented TLDR (self-contained HTML dashboard + PR-native Markdown) that surfaces risks for faster PR review. | `visibility` | Read+Write | [speckit-tldr](https://github.com/qurore/speckit-tldr) |
|
|
@@ -11,6 +11,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
|
|
|
11
11
|
| Agent Parity Governance | Adds shared-guidance parity, audit-ready Spec-Kit run evidence, and agent-neutral model-routing guidance across a project's declared AI-agent instruction surfaces so agent guidance does not drift. | 6 templates, 3 commands | — | [spec-kit-preset-agent-parity-governance](https://github.com/hindermath/spec-kit-preset-agent-parity-governance) |
|
|
12
12
|
| AIDE In-Place Migration | Adapts the AIDE extension workflow for in-place technology migrations (X → Y pattern) — adds migration objectives, verification gates, knowledge documents, and behavioral equivalence criteria | 2 templates, 8 commands | AIDE extension | [spec-kit-presets](https://github.com/mnriem/spec-kit-presets) |
|
|
13
13
|
| Architecture Governance | Adds secure software architecture, STRIDE+CAPEC threat modeling, arc42 security cross-cutting concepts, S-ADRs, Zero Trust applicability, OWASP SAMM governance, BSI C3A cloud autonomy, BSI C5 cloud compliance assurance, and audit-ready Spec Kit run evidence | 13 templates, 3 commands | — | [spec-kit-preset-architecture-governance](https://github.com/hindermath/spec-kit-preset-architecture-governance) |
|
|
14
|
+
| Autonomous Run Governance | Adds permission-bounded, evidence-first governance for autonomous Spec Kit delivery, convergence, resume, closeout, and retrospective learning. | 12 templates, 2 commands, 2 scripts | — | [spec-kit-preset-autonomous-run-governance](https://github.com/hindermath/spec-kit-preset-autonomous-run-governance) |
|
|
14
15
|
| Canon Core | Adapts original Spec Kit workflow to work together with Canon extension | 2 templates, 8 commands | — | [spec-kit-canon](https://github.com/maximiliamus/spec-kit-canon) |
|
|
15
16
|
| Claude AskUserQuestion | Upgrades `/speckit.clarify` and `/speckit.checklist` on Claude Code from Markdown-table prompts to the native AskUserQuestion picker, with a recommended option and reasoning on every question | 2 commands | — | [spec-kit-preset-claude-ask-questions](https://github.com/0xrafasec/spec-kit-preset-claude-ask-questions) |
|
|
16
17
|
| Command Density | Compacts the nine core Spec Kit command prompts while preserving scripts, handoffs, placeholders, hook output blocks, and rule structure | 9 commands | — | [spec-kit-preset-command-density](https://github.com/Xopoko/spec-kit-preset-command-density) |
|
|
@@ -28,6 +29,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
|
|
|
28
29
|
| SicarioSpec Core | Baseline secure-by-default Spec Kit governance profile. | 5 templates | — | [sicario-spec](https://github.com/dfirs1car1o/sicario-spec) |
|
|
29
30
|
| Spec2Cloud | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy | 5 templates, 8 commands | — | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) |
|
|
30
31
|
| Table of Contents Navigation | Adds a navigable Table of Contents to generated spec.md, plan.md, and tasks.md documents | 3 templates, 3 commands | — | [spec-kit-preset-toc-navigation](https://github.com/Quratulain-bilal/spec-kit-preset-toc-navigation) |
|
|
32
|
+
| Test-First Governance | Governs TDD with coverage-complete BDD/ATDD Gherkin scenarios, explicit suite ownership, professional test reports, traceability, and risk-based quality gates. | 10 templates, 8 commands | — | [spec-kit-preset-test-first-governance](https://github.com/ka-zo/spec-kit-preset-test-first-governance) |
|
|
31
33
|
| VS Code Ask Questions | Enhances the clarify command to use `vscode/askQuestions` for batched interactive questioning. | 1 command | — | [spec-kit-presets](https://github.com/fdcastel/spec-kit-presets) |
|
|
32
34
|
| Workflow Preset | Behavior-first specification, design artifacts, and agent-native handoff orchestration — adds requirement-phase behavior drafts, formal BDD/UIF/behavior contracts, optional design artifacts, and scoped implementation handoffs with Core Agent, Vertical Planner Agent, and Worker Agent modes | 22 templates, 8 commands | — | [spec-kit-workflow-preset](https://github.com/bigsmartben/spec-kit-workflow-preset) |
|
|
33
35
|
|
|
@@ -86,8 +86,30 @@ Lists workflows installed in the current project.
|
|
|
86
86
|
specify workflow add <source>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
+
| Option | Description |
|
|
90
|
+
| --------------- | ------------------------------------------------------ |
|
|
91
|
+
| `--dev` | Install from a local workflow YAML file or directory |
|
|
92
|
+
| `--from <url>` | Install from a custom URL (`<source>` names the expected workflow ID) |
|
|
93
|
+
|
|
89
94
|
Installs a workflow from the catalog, a URL (HTTPS required), or a local file path.
|
|
90
95
|
|
|
96
|
+
## Update Workflows
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
specify workflow update [workflow_id]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Updates one installed catalog workflow — or all of them when no ID is given — to the latest catalog version. Prompts for confirmation and keeps the installed copy if a download or validation fails.
|
|
103
|
+
|
|
104
|
+
## Enable or Disable a Workflow
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
specify workflow enable <workflow_id>
|
|
108
|
+
specify workflow disable <workflow_id>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Disabled workflows stay installed and listed (marked `[disabled]`) but refuse to run until re-enabled.
|
|
112
|
+
|
|
91
113
|
## Remove a Workflow
|
|
92
114
|
|
|
93
115
|
```bash
|
|
@@ -102,9 +124,10 @@ Removes an installed workflow from the project.
|
|
|
102
124
|
specify workflow search [query]
|
|
103
125
|
```
|
|
104
126
|
|
|
105
|
-
| Option
|
|
106
|
-
|
|
|
107
|
-
| `--tag`
|
|
127
|
+
| Option | Description |
|
|
128
|
+
| ---------- | ----------------- |
|
|
129
|
+
| `--tag` | Filter by tag |
|
|
130
|
+
| `--author` | Filter by author |
|
|
108
131
|
|
|
109
132
|
Searches all active catalogs for workflows matching the query.
|
|
110
133
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-07-
|
|
3
|
+
"updated_at": "2026-07-13T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"aide": {
|
|
@@ -1106,10 +1106,10 @@
|
|
|
1106
1106
|
"docguard": {
|
|
1107
1107
|
"name": "DocGuard — CDD Enforcement",
|
|
1108
1108
|
"id": "docguard",
|
|
1109
|
-
"description": "
|
|
1109
|
+
"description": "Doc-integrity engine with MCP server, SARIF output, and zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, spec-kit hooks. Pure Node.js.",
|
|
1110
1110
|
"author": "raccioly",
|
|
1111
|
-
"version": "0.
|
|
1112
|
-
"download_url": "https://github.com/raccioly/docguard/releases/download/v0.
|
|
1111
|
+
"version": "0.32.0",
|
|
1112
|
+
"download_url": "https://github.com/raccioly/docguard/releases/download/v0.32.0/spec-kit-docguard-v0.32.0.zip",
|
|
1113
1113
|
"repository": "https://github.com/raccioly/docguard",
|
|
1114
1114
|
"homepage": "https://www.npmjs.com/package/docguard-cli",
|
|
1115
1115
|
"documentation": "https://github.com/raccioly/docguard/blob/main/extensions/spec-kit-docguard/README.md",
|
|
@@ -1124,6 +1124,14 @@
|
|
|
1124
1124
|
"name": "node",
|
|
1125
1125
|
"version": ">=18.0.0",
|
|
1126
1126
|
"required": true
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
"name": "npx",
|
|
1130
|
+
"required": true
|
|
1131
|
+
},
|
|
1132
|
+
{
|
|
1133
|
+
"name": "specify",
|
|
1134
|
+
"required": false
|
|
1127
1135
|
}
|
|
1128
1136
|
]
|
|
1129
1137
|
},
|
|
@@ -1145,7 +1153,7 @@
|
|
|
1145
1153
|
"downloads": 0,
|
|
1146
1154
|
"stars": 0,
|
|
1147
1155
|
"created_at": "2026-03-13T00:00:00Z",
|
|
1148
|
-
"updated_at": "2026-07-
|
|
1156
|
+
"updated_at": "2026-07-13T00:00:00Z"
|
|
1149
1157
|
},
|
|
1150
1158
|
"doctor": {
|
|
1151
1159
|
"name": "Project Health Check",
|
|
@@ -1427,6 +1435,57 @@
|
|
|
1427
1435
|
"created_at": "2026-05-06T00:00:00Z",
|
|
1428
1436
|
"updated_at": "2026-05-06T00:00:00Z"
|
|
1429
1437
|
},
|
|
1438
|
+
"gates": {
|
|
1439
|
+
"name": "Quality Gates (Enforcement Layer)",
|
|
1440
|
+
"id": "gates",
|
|
1441
|
+
"description": "Deterministic quality enforcement for Spec Kit projects at three boundaries — agent hooks, git pre-commit, CI — with one policy file and provable enforcement (attestations, canaries, verified parity).",
|
|
1442
|
+
"author": "schwichtgit",
|
|
1443
|
+
"version": "0.1.0",
|
|
1444
|
+
"download_url": "https://github.com/schwichtgit/spec-gates/releases/download/v0.1.0/gates-0.1.0.zip",
|
|
1445
|
+
"repository": "https://github.com/schwichtgit/spec-gates",
|
|
1446
|
+
"homepage": "https://github.com/schwichtgit/spec-gates",
|
|
1447
|
+
"documentation": "https://github.com/schwichtgit/spec-gates/blob/main/docs/how-it-works.md",
|
|
1448
|
+
"license": "MIT",
|
|
1449
|
+
"category": "process",
|
|
1450
|
+
"effect": "read-write",
|
|
1451
|
+
"requires": {
|
|
1452
|
+
"speckit_version": ">=0.12.0",
|
|
1453
|
+
"tools": [
|
|
1454
|
+
{
|
|
1455
|
+
"name": "jq",
|
|
1456
|
+
"required": true
|
|
1457
|
+
},
|
|
1458
|
+
{
|
|
1459
|
+
"name": "git",
|
|
1460
|
+
"required": true
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"name": "node",
|
|
1464
|
+
"required": false
|
|
1465
|
+
},
|
|
1466
|
+
{
|
|
1467
|
+
"name": "shellcheck",
|
|
1468
|
+
"required": false
|
|
1469
|
+
}
|
|
1470
|
+
]
|
|
1471
|
+
},
|
|
1472
|
+
"provides": {
|
|
1473
|
+
"commands": 5,
|
|
1474
|
+
"hooks": 1
|
|
1475
|
+
},
|
|
1476
|
+
"tags": [
|
|
1477
|
+
"quality",
|
|
1478
|
+
"enforcement",
|
|
1479
|
+
"hooks",
|
|
1480
|
+
"ci",
|
|
1481
|
+
"governance"
|
|
1482
|
+
],
|
|
1483
|
+
"verified": false,
|
|
1484
|
+
"downloads": 0,
|
|
1485
|
+
"stars": 0,
|
|
1486
|
+
"created_at": "2026-07-09T00:00:00Z",
|
|
1487
|
+
"updated_at": "2026-07-13T00:00:00Z"
|
|
1488
|
+
},
|
|
1430
1489
|
"github-issues": {
|
|
1431
1490
|
"name": "GitHub Issues Integration 1",
|
|
1432
1491
|
"id": "github-issues",
|
|
@@ -2217,6 +2276,42 @@
|
|
|
2217
2276
|
"created_at": "2026-05-08T00:00:00Z",
|
|
2218
2277
|
"updated_at": "2026-05-08T00:00:00Z"
|
|
2219
2278
|
},
|
|
2279
|
+
"memory": {
|
|
2280
|
+
"name": "Spec Kit Memory",
|
|
2281
|
+
"id": "memory",
|
|
2282
|
+
"description": "Recalls prior specs and decisions from configurable memory tools (e.g. memsearch) before SDLC stages, so planning and specification start from what the project already knows.",
|
|
2283
|
+
"author": "Andrey Zaytsev",
|
|
2284
|
+
"version": "0.3.0",
|
|
2285
|
+
"download_url": "https://github.com/zaytsevand/spec-kit-memory/archive/refs/tags/v0.3.0.zip",
|
|
2286
|
+
"repository": "https://github.com/zaytsevand/spec-kit-memory",
|
|
2287
|
+
"homepage": "https://github.com/zaytsevand/spec-kit-memory",
|
|
2288
|
+
"documentation": "https://github.com/zaytsevand/spec-kit-memory/blob/main/README.md",
|
|
2289
|
+
"changelog": "",
|
|
2290
|
+
"license": "MIT",
|
|
2291
|
+
"category": "docs",
|
|
2292
|
+
"effect": "read-write",
|
|
2293
|
+
"requires": {
|
|
2294
|
+
"speckit_version": ">=0.2.0",
|
|
2295
|
+
"tools": [
|
|
2296
|
+
{ "name": "memsearch", "required": false }
|
|
2297
|
+
]
|
|
2298
|
+
},
|
|
2299
|
+
"provides": {
|
|
2300
|
+
"commands": 2,
|
|
2301
|
+
"hooks": 3
|
|
2302
|
+
},
|
|
2303
|
+
"tags": [
|
|
2304
|
+
"memory",
|
|
2305
|
+
"recall",
|
|
2306
|
+
"research",
|
|
2307
|
+
"memsearch"
|
|
2308
|
+
],
|
|
2309
|
+
"verified": false,
|
|
2310
|
+
"downloads": 0,
|
|
2311
|
+
"stars": 0,
|
|
2312
|
+
"created_at": "2026-07-10T00:00:00Z",
|
|
2313
|
+
"updated_at": "2026-07-10T00:00:00Z"
|
|
2314
|
+
},
|
|
2220
2315
|
"memory-loader": {
|
|
2221
2316
|
"name": "Memory Loader",
|
|
2222
2317
|
"id": "memory-loader",
|
|
@@ -2371,6 +2466,48 @@
|
|
|
2371
2466
|
"created_at": "2026-05-04T02:51:52Z",
|
|
2372
2467
|
"updated_at": "2026-06-18T00:00:00Z"
|
|
2373
2468
|
},
|
|
2469
|
+
"multi-repo-sync": {
|
|
2470
|
+
"name": "Multi-Repo Branch Sync",
|
|
2471
|
+
"id": "multi-repo-sync",
|
|
2472
|
+
"description": "Creates the feature branch in affected sub-repositories and git submodules via plan/tasks hooks",
|
|
2473
|
+
"author": "Fyloss",
|
|
2474
|
+
"version": "1.0.0",
|
|
2475
|
+
"download_url": "https://github.com/fyloss/spec-kit-multi-repo-sync/releases/download/v1.0.0/spec-kit-multi-repo-sync.zip",
|
|
2476
|
+
"sha256": "12a5c7392145b4424b20715aaa3d8b6a8218c143dea596873e344146c1a76ba0",
|
|
2477
|
+
"repository": "https://github.com/fyloss/spec-kit-multi-repo-sync",
|
|
2478
|
+
"homepage": "https://github.com/fyloss/spec-kit-multi-repo-sync",
|
|
2479
|
+
"documentation": "https://github.com/fyloss/spec-kit-multi-repo-sync/blob/main/README.md",
|
|
2480
|
+
"changelog": "https://github.com/fyloss/spec-kit-multi-repo-sync/blob/main/CHANGELOG.md",
|
|
2481
|
+
"license": "MIT",
|
|
2482
|
+
"category": "process",
|
|
2483
|
+
"effect": "read-write",
|
|
2484
|
+
"requires": {
|
|
2485
|
+
"speckit_version": ">=0.2.0",
|
|
2486
|
+
"tools": [
|
|
2487
|
+
{
|
|
2488
|
+
"name": "git",
|
|
2489
|
+
"version": ">=2.31",
|
|
2490
|
+
"required": true
|
|
2491
|
+
}
|
|
2492
|
+
]
|
|
2493
|
+
},
|
|
2494
|
+
"provides": {
|
|
2495
|
+
"commands": 3,
|
|
2496
|
+
"hooks": 2
|
|
2497
|
+
},
|
|
2498
|
+
"tags": [
|
|
2499
|
+
"git",
|
|
2500
|
+
"branching",
|
|
2501
|
+
"multi-repo",
|
|
2502
|
+
"submodules",
|
|
2503
|
+
"workflow"
|
|
2504
|
+
],
|
|
2505
|
+
"verified": false,
|
|
2506
|
+
"downloads": 0,
|
|
2507
|
+
"stars": 0,
|
|
2508
|
+
"created_at": "2026-07-13T00:00:00Z",
|
|
2509
|
+
"updated_at": "2026-07-13T00:00:00Z"
|
|
2510
|
+
},
|
|
2374
2511
|
"multi-sites": {
|
|
2375
2512
|
"name": "Multi-Sites Spec Kit",
|
|
2376
2513
|
"id": "multi-sites",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-
|
|
3
|
+
"updated_at": "2026-07-14T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/presets/catalog.community.json",
|
|
5
5
|
"presets": {
|
|
6
6
|
"a11y-governance": {
|
|
@@ -131,6 +131,35 @@
|
|
|
131
131
|
"created_at": "2026-04-27T00:00:00Z",
|
|
132
132
|
"updated_at": "2026-06-14T00:00:00Z"
|
|
133
133
|
},
|
|
134
|
+
"autonomous-run-governance": {
|
|
135
|
+
"name": "Autonomous Run Governance",
|
|
136
|
+
"id": "autonomous-run-governance",
|
|
137
|
+
"version": "0.1.4",
|
|
138
|
+
"description": "Adds permission-bounded, evidence-first governance for autonomous Spec Kit delivery, convergence, resume, closeout, and retrospective learning.",
|
|
139
|
+
"author": "Thorsten Hindermann",
|
|
140
|
+
"repository": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance",
|
|
141
|
+
"download_url": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance/archive/refs/tags/v0.1.4.zip",
|
|
142
|
+
"homepage": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance",
|
|
143
|
+
"documentation": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance/blob/v0.1.4/README.md",
|
|
144
|
+
"license": "MIT",
|
|
145
|
+
"requires": {
|
|
146
|
+
"speckit_version": ">=0.8.3"
|
|
147
|
+
},
|
|
148
|
+
"provides": {
|
|
149
|
+
"templates": 12,
|
|
150
|
+
"commands": 2,
|
|
151
|
+
"scripts": 2
|
|
152
|
+
},
|
|
153
|
+
"tags": [
|
|
154
|
+
"autonomous",
|
|
155
|
+
"governance",
|
|
156
|
+
"evidence",
|
|
157
|
+
"permissions",
|
|
158
|
+
"retrospective"
|
|
159
|
+
],
|
|
160
|
+
"created_at": "2026-07-13T00:00:00Z",
|
|
161
|
+
"updated_at": "2026-07-14T00:00:00Z"
|
|
162
|
+
},
|
|
134
163
|
"canon-core": {
|
|
135
164
|
"name": "Canon Core",
|
|
136
165
|
"id": "canon-core",
|
|
@@ -618,6 +647,34 @@
|
|
|
618
647
|
"created_at": "2026-04-30T00:00:00Z",
|
|
619
648
|
"updated_at": "2026-04-30T00:00:00Z"
|
|
620
649
|
},
|
|
650
|
+
"test-first-governance": {
|
|
651
|
+
"name": "Test-First Governance",
|
|
652
|
+
"id": "test-first-governance",
|
|
653
|
+
"version": "1.3.0",
|
|
654
|
+
"description": "Governs TDD with coverage-complete BDD/ATDD Gherkin scenarios, explicit suite ownership, professional test reports, traceability, and risk-based quality gates.",
|
|
655
|
+
"author": "Zoltán Katona, PhD",
|
|
656
|
+
"repository": "https://github.com/ka-zo/spec-kit-preset-test-first-governance",
|
|
657
|
+
"download_url": "https://github.com/ka-zo/spec-kit-preset-test-first-governance/archive/refs/tags/1.3.0.zip",
|
|
658
|
+
"homepage": "https://github.com/ka-zo/spec-kit-preset-test-first-governance",
|
|
659
|
+
"documentation": "https://github.com/ka-zo/spec-kit-preset-test-first-governance/blob/main/README.md",
|
|
660
|
+
"license": "MIT",
|
|
661
|
+
"requires": {
|
|
662
|
+
"speckit_version": ">=0.12.11"
|
|
663
|
+
},
|
|
664
|
+
"provides": {
|
|
665
|
+
"templates": 10,
|
|
666
|
+
"commands": 8
|
|
667
|
+
},
|
|
668
|
+
"tags": [
|
|
669
|
+
"tdd",
|
|
670
|
+
"bdd",
|
|
671
|
+
"atdd",
|
|
672
|
+
"quality-gates",
|
|
673
|
+
"traceability"
|
|
674
|
+
],
|
|
675
|
+
"created_at": "2026-07-13T00:00:00Z",
|
|
676
|
+
"updated_at": "2026-07-13T00:00:00Z"
|
|
677
|
+
},
|
|
621
678
|
"toc-navigation": {
|
|
622
679
|
"name": "Table of Contents Navigation",
|
|
623
680
|
"id": "toc-navigation",
|
|
@@ -24,6 +24,7 @@ GITHUB_HOSTS = frozenset({
|
|
|
24
24
|
"api.github.com",
|
|
25
25
|
"codeload.github.com",
|
|
26
26
|
})
|
|
27
|
+
_MAX_RELEASE_METADATA_BYTES = 5 * 1024 * 1024
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
def build_github_request(url: str) -> urllib.request.Request:
|
|
@@ -68,6 +69,8 @@ def resolve_github_release_asset_api_url(
|
|
|
68
69
|
open_url_fn: Callable,
|
|
69
70
|
timeout: int = 60,
|
|
70
71
|
github_hosts: tuple[str, ...] = (),
|
|
72
|
+
redirect_validator: Callable[[str, str], None] | None = None,
|
|
73
|
+
max_metadata_bytes: int = _MAX_RELEASE_METADATA_BYTES,
|
|
71
74
|
) -> Optional[str]:
|
|
72
75
|
"""Resolve a GitHub release browser-download URL to its REST API asset URL.
|
|
73
76
|
|
|
@@ -91,6 +94,8 @@ def resolve_github_release_asset_api_url(
|
|
|
91
94
|
authenticated release-metadata lookup.
|
|
92
95
|
timeout: Per-request timeout in seconds.
|
|
93
96
|
github_hosts: Host patterns to treat as GitHub Enterprise Server.
|
|
97
|
+
redirect_validator: Optional policy applied to metadata redirects.
|
|
98
|
+
max_metadata_bytes: Maximum release-metadata response size.
|
|
94
99
|
"""
|
|
95
100
|
import json
|
|
96
101
|
import urllib.error
|
|
@@ -149,13 +154,33 @@ def resolve_github_release_asset_api_url(
|
|
|
149
154
|
release_url = f"{api_base}/repos/{owner}/{repo}/releases/tags/{encoded_tag}"
|
|
150
155
|
|
|
151
156
|
try:
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
157
|
+
open_kwargs = {"timeout": timeout}
|
|
158
|
+
if redirect_validator is not None:
|
|
159
|
+
open_kwargs["redirect_validator"] = redirect_validator
|
|
160
|
+
with open_url_fn(release_url, **open_kwargs) as response:
|
|
161
|
+
raw_release_data = response.read(max_metadata_bytes + 1)
|
|
162
|
+
if len(raw_release_data) > max_metadata_bytes:
|
|
163
|
+
raise ValueError("GitHub release metadata exceeds size limit")
|
|
164
|
+
release_data = json.loads(raw_release_data)
|
|
165
|
+
except (
|
|
166
|
+
urllib.error.URLError,
|
|
167
|
+
json.JSONDecodeError,
|
|
168
|
+
TypeError,
|
|
169
|
+
ValueError,
|
|
170
|
+
):
|
|
155
171
|
return None
|
|
156
172
|
|
|
157
|
-
|
|
158
|
-
|
|
173
|
+
if not isinstance(release_data, dict):
|
|
174
|
+
return None
|
|
175
|
+
assets = release_data.get("assets", [])
|
|
176
|
+
if not isinstance(assets, list):
|
|
177
|
+
return None
|
|
178
|
+
for asset in assets:
|
|
179
|
+
if (
|
|
180
|
+
isinstance(asset, dict)
|
|
181
|
+
and asset.get("name") == asset_name
|
|
182
|
+
and asset.get("url")
|
|
183
|
+
):
|
|
159
184
|
return str(asset["url"])
|
|
160
185
|
|
|
161
186
|
return None
|
|
@@ -14,7 +14,7 @@ def save_init_options(project_path: Path, options: dict[str, Any]) -> None:
|
|
|
14
14
|
dest = project_path / INIT_OPTIONS_FILE
|
|
15
15
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
16
16
|
dest.write_text(
|
|
17
|
-
json.dumps(options, indent=2, sort_keys=True, ensure_ascii=False),
|
|
17
|
+
json.dumps(options, indent=2, sort_keys=True, ensure_ascii=False) + "\n",
|
|
18
18
|
encoding="utf-8",
|
|
19
19
|
)
|
|
20
20
|
|
|
@@ -10,6 +10,8 @@ from __future__ import annotations
|
|
|
10
10
|
import json
|
|
11
11
|
import os
|
|
12
12
|
import re
|
|
13
|
+
import stat
|
|
14
|
+
import tempfile
|
|
13
15
|
from pathlib import Path, PurePosixPath
|
|
14
16
|
from typing import Any
|
|
15
17
|
|
|
@@ -87,17 +89,63 @@ def loads_json(text: str, *, origin: str = "<string>") -> Any:
|
|
|
87
89
|
|
|
88
90
|
|
|
89
91
|
def dump_json(path: Path, data: Any, *, within: Path | None = None) -> Path:
|
|
90
|
-
"""
|
|
92
|
+
"""Atomically write pretty JSON to *path* (optionally confined to *within*)."""
|
|
91
93
|
path = Path(path)
|
|
92
94
|
if within is not None:
|
|
93
95
|
path = ensure_within(within, path)
|
|
96
|
+
fd = -1
|
|
97
|
+
temp_path: Path | None = None
|
|
94
98
|
try:
|
|
95
99
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
96
|
-
|
|
100
|
+
fd, temp_name = tempfile.mkstemp(
|
|
101
|
+
dir=path.parent,
|
|
102
|
+
prefix=f".{path.name}.",
|
|
103
|
+
suffix=".tmp",
|
|
104
|
+
)
|
|
105
|
+
temp_path = Path(temp_name)
|
|
106
|
+
with os.fdopen(os.dup(fd), "w", encoding="utf-8") as handle:
|
|
97
107
|
json.dump(data, handle, indent=2, sort_keys=False)
|
|
98
108
|
handle.write("\n")
|
|
109
|
+
|
|
110
|
+
try:
|
|
111
|
+
if path.exists():
|
|
112
|
+
existing = path.stat(follow_symlinks=False)
|
|
113
|
+
if stat.S_ISREG(existing.st_mode) and hasattr(os, "fchmod"):
|
|
114
|
+
os.fchmod(fd, stat.S_IMODE(existing.st_mode))
|
|
115
|
+
if stat.S_ISREG(existing.st_mode) and hasattr(os, "fchown"):
|
|
116
|
+
try:
|
|
117
|
+
os.fchown(fd, existing.st_uid, existing.st_gid)
|
|
118
|
+
except PermissionError:
|
|
119
|
+
pass
|
|
120
|
+
except OSError:
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
staged = os.stat(temp_path, follow_symlinks=False)
|
|
124
|
+
opened = os.fstat(fd)
|
|
125
|
+
if (
|
|
126
|
+
not stat.S_ISREG(staged.st_mode)
|
|
127
|
+
or staged.st_dev != opened.st_dev
|
|
128
|
+
or staged.st_ino != opened.st_ino
|
|
129
|
+
):
|
|
130
|
+
raise OSError("staged JSON file changed before commit")
|
|
131
|
+
|
|
132
|
+
os.close(fd)
|
|
133
|
+
fd = -1
|
|
134
|
+
os.replace(temp_path, path)
|
|
135
|
+
temp_path = None
|
|
99
136
|
except OSError as exc:
|
|
100
137
|
raise BundlerError(f"Could not write {path}: {exc}") from exc
|
|
138
|
+
finally:
|
|
139
|
+
if fd >= 0:
|
|
140
|
+
try:
|
|
141
|
+
os.close(fd)
|
|
142
|
+
except OSError:
|
|
143
|
+
pass
|
|
144
|
+
if temp_path is not None:
|
|
145
|
+
try:
|
|
146
|
+
temp_path.unlink(missing_ok=True)
|
|
147
|
+
except OSError:
|
|
148
|
+
pass
|
|
101
149
|
return path
|
|
102
150
|
|
|
103
151
|
|
|
@@ -187,19 +187,41 @@ def remove_bundle(
|
|
|
187
187
|
|
|
188
188
|
still_needed = components_still_needed(records, exclude_bundle_id=bundle_id)
|
|
189
189
|
result = InstallResult(bundle_id=bundle_id)
|
|
190
|
+
remove_attempted = False
|
|
190
191
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
installer.
|
|
198
|
-
|
|
192
|
+
try:
|
|
193
|
+
for component in target.contributed_components:
|
|
194
|
+
key = (component.kind, component.id)
|
|
195
|
+
if key in still_needed:
|
|
196
|
+
result.skipped.append(component)
|
|
197
|
+
continue
|
|
198
|
+
if installer.is_installed(project_root, component):
|
|
199
|
+
remove_attempted = True
|
|
200
|
+
installer.remove(project_root, component)
|
|
201
|
+
result.uninstalled.append(component)
|
|
202
|
+
save_records(project_root, remove_record(records, bundle_id))
|
|
203
|
+
except Exception as exc: # noqa: BLE001
|
|
204
|
+
if result.uninstalled:
|
|
205
|
+
detail = (
|
|
206
|
+
f"{len(result.uninstalled)} component(s) were already removed "
|
|
207
|
+
"before this failure; the bundle record was left unchanged, "
|
|
208
|
+
"so the project may be partially uninstalled."
|
|
209
|
+
)
|
|
210
|
+
elif remove_attempted:
|
|
211
|
+
detail = (
|
|
212
|
+
"No components were removed, but the failing component may "
|
|
213
|
+
"have made partial changes before raising, so the project "
|
|
214
|
+
"may be partially uninstalled."
|
|
215
|
+
)
|
|
199
216
|
else:
|
|
200
|
-
|
|
217
|
+
detail = (
|
|
218
|
+
"No components were removed and no removal was attempted; "
|
|
219
|
+
"the bundle record was left unchanged."
|
|
220
|
+
)
|
|
221
|
+
raise BundlerError(
|
|
222
|
+
f"Failed to remove bundle '{bundle_id}': {exc}. {detail}"
|
|
223
|
+
) from exc
|
|
201
224
|
|
|
202
|
-
save_records(project_root, remove_record(records, bundle_id))
|
|
203
225
|
return result
|
|
204
226
|
|
|
205
227
|
|