specify-cli 0.12.15__tar.gz → 0.12.17__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.15 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/feature_request.yml +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.gitignore +2 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/CHANGELOG.md +30 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/PKG-INFO +7 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/README.md +6 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/community/extensions.md +4 -1
- specify_cli-0.12.17/docs/install/pypi.md +83 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/installation.md +27 -4
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/integrations.md +8 -2
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/workflows.md +10 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/toc.yml +2 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/agent-context-defaults.json +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/catalog.community.json +149 -11
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +10 -0
- specify_cli-0.12.17/extensions/git/scripts/python/auto_commit.py +187 -0
- specify_cli-0.12.17/extensions/git/scripts/python/create_new_feature_branch.py +634 -0
- specify_cli-0.12.17/extensions/git/scripts/python/git_common.py +81 -0
- specify_cli-0.12.17/extensions/git/scripts/python/initialize_repo.py +89 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/integrations/catalog.json +10 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/pyproject.toml +1 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_invocation_style.py +1 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/commands/init.py +34 -15
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/extensions/__init__.py +26 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/__init__.py +2 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/_helpers.py +15 -2
- specify_cli-0.12.17/src/specify_cli/integrations/grok/__init__.py +60 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/presets/__init__.py +212 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/presets/_commands.py +9 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/base.py +3 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/engine.py +17 -4
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/expressions.py +46 -5
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/do_while/__init__.py +24 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/if_then/__init__.py +23 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/shell/__init__.py +9 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/switch/__init__.py +33 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/while_loop/__init__.py +26 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/git/test_git_extension.py +28 -0
- specify_cli-0.12.17/tests/extensions/git/test_git_extension_python_parity.py +647 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_cli.py +72 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_base_markdown.py +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_base_skills.py +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_base_toml.py +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_base_yaml.py +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_cline.py +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_copilot.py +3 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_generic.py +2 -0
- specify_cli-0.12.17/tests/integrations/test_integration_grok.py +187 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_subcommand.py +37 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_zed.py +2 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_agent_config_consistency.py +1 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_extension_skills.py +107 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_presets.py +685 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_workflows.py +544 -1
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/README.md +7 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.editorconfig +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.gitattributes +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/CODEOWNERS +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/dependabot.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/bug-fix.lock.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/bug-fix.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/bug-test.lock.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/bug-test.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/codeql.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/docs.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/lint.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/publish-pypi.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/release.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/stale.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.github/workflows/test.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.pre-commit-config.yaml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/.zenodo.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/AGENTS.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/CITATION.cff +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/CONTRIBUTING.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/DEVELOPMENT.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/LICENSE +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/SECURITY.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/SUPPORT.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/.gitignore +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/community/bundles.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/community/friends.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/community/overview.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/community/presets.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/docfx.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/guides/monorepo.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/index.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/install/one-time.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/install/pipx.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/install/uv.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/local-development.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/quickstart.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/authentication.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/bundles.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/core.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/extensions.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/overview.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/reference/presets.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/template/public/main.css +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/docs/upgrade.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/developer/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/bug/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/catalog.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/extension.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/.gitignore +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/LICENSE +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/extensions/template/extension.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/integrations/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/integrations/catalog.community.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/media/logo_large.webp +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/media/logo_small.webp +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/media/specify_cli.gif +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/newsletters/2026-April.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/newsletters/2026-February.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/newsletters/2026-June.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/newsletters/2026-March.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/newsletters/2026-May.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/catalog.community.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/catalog.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/lean/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/lean/preset.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/scaffold/README.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/bash/common.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/bash/create-new-feature.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/powershell/common.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/python/check_prerequisites.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/scripts/python/common.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/spec-driven.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/spec-kit.code-workspace +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_github_http.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_project.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/_version.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/agents.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/yamlio.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/models/catalog.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/models/manifest.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/models/records.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/adapters.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/installer.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/primitives.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/extensions/_commands.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/claude/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/omp/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/_commands.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/catalog.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/checklist-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/analyze.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/checklist.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/clarify.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/constitution.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/converge.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/implement.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/plan.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/specify.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/tasks.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/commands/taskstoissues.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/constitution-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/plan-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/spec-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/tasks-template.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/templates/vscode-settings.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/auth_helpers.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/bundler_helpers.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/conftest.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/contract/test_bundle_cli.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/contract/test_catalog_schema.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/contract/test_manifest_schema.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/hooks/plan.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/hooks/spec.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/http_helpers.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integration/test_bundler_install_flow.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_registry.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_authentication.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_check_prerequisites_python_parity.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_check_tool.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_cli_version.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_command_template_py_scripts.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_commands_package.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_console_imports.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_extensions.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_github_http.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_github_workflows.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_init_dir.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_merge.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_post_process.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_upgrade.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_utils.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_version_imports.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_adapters.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_catalog_config.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_primitives.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_records.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/catalog.community.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/catalog.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.12.15 → specify_cli-0.12.17}/workflows/step-catalog.json +0 -0
|
@@ -8,7 +8,7 @@ body:
|
|
|
8
8
|
value: |
|
|
9
9
|
Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
|
|
10
10
|
|
|
11
|
-
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
|
|
11
|
+
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Grok Build, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
|
|
12
12
|
|
|
13
13
|
- type: input
|
|
14
14
|
id: agent-name
|
|
@@ -53,9 +53,10 @@ docs/dev
|
|
|
53
53
|
|
|
54
54
|
# The following directories/file are intentionally ignored so that they are not accidentally
|
|
55
55
|
# committed to the repository. They contain the scaffolding `specify init --integration copilot`
|
|
56
|
-
# does and they are meant for dogfooding Spec Kit during its own feature development.
|
|
56
|
+
# (or other agents) does and they are meant for dogfooding Spec Kit during its own feature development.
|
|
57
57
|
.github/agents/
|
|
58
58
|
.github/prompts/
|
|
59
59
|
.github/copilot-instructions.md
|
|
60
|
+
.grok/
|
|
60
61
|
.specify/
|
|
61
62
|
specs/
|
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.12.17] - 2026-07-16
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- fix(extensions): resolve __SPECKIT_COMMAND tokens in auto-registered skills (#3544)
|
|
10
|
+
- fix(workflows): fail if/switch steps on non-list branch instead of crashing (#3515)
|
|
11
|
+
- feat(integrations): add Grok Build skills-based integration (#3535)
|
|
12
|
+
- fix(extensions/git): reject negative -Number in create-new-feature-branch.ps1 (#3538)
|
|
13
|
+
- test: cover preset constitution seeding through init CLI (#3297)
|
|
14
|
+
- fix(integration): preserve ai_skills on `use` for skills-mode Copilot (#3550) (#3551)
|
|
15
|
+
- [extension] Add Figma Starter extension to community catalog (#3547)
|
|
16
|
+
- [extension] Add Spec-Kit BDD extension to community catalog (#3548)
|
|
17
|
+
- [extension] Update Quality Gates (Enforcement Layer) extension to v0.3.2 (#3542)
|
|
18
|
+
- chore: release 0.12.16, begin 0.12.17.dev0 development (#3549)
|
|
19
|
+
|
|
20
|
+
## [0.12.16] - 2026-07-15
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- fix(workflows): raise a clear error, not a cryptic crash, on non-string filter args (#3522)
|
|
25
|
+
- feat(workflows): expose workflow source directory to steps (#3469)
|
|
26
|
+
- fix(workflows): fan-out max_concurrency .inf falls back to sequential, not crash (#3521)
|
|
27
|
+
- Update Coding Standards Drift Control extension to v0.4.0 (#3540)
|
|
28
|
+
- fix(presets): seed constitution from preset constitution-template (#3272) (#3276)
|
|
29
|
+
- docs: add PyPI as second supported install route (#3425) (#3516)
|
|
30
|
+
- fix(workflows): fail while/do-while steps on non-list steps instead of crashing (#3519)
|
|
31
|
+
- Add PatchWarden Evidence Pack extension to community catalog (#3514)
|
|
32
|
+
- feat(extensions): port git extension scripts to Python (#3400)
|
|
33
|
+
- chore: release 0.12.15, begin 0.12.16.dev0 development (#3513)
|
|
34
|
+
|
|
5
35
|
## [0.12.15] - 2026-07-14
|
|
6
36
|
|
|
7
37
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specify-cli
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.17
|
|
4
4
|
Summary: Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD).
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -71,6 +71,12 @@ Requires **[uv](https://docs.astral.sh/uv/)** ([install uv](./docs/install/uv.md
|
|
|
71
71
|
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
+
Prefer installing from PyPI? The `specify-cli` package is also published there:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
uv tool install specify-cli
|
|
78
|
+
```
|
|
79
|
+
|
|
74
80
|
See the [Installation Guide](./docs/installation.md) for alternative methods, verification, upgrade, and troubleshooting.
|
|
75
81
|
|
|
76
82
|
### 2. Initialize a project
|
|
@@ -51,6 +51,12 @@ Requires **[uv](https://docs.astral.sh/uv/)** ([install uv](./docs/install/uv.md
|
|
|
51
51
|
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
+
Prefer installing from PyPI? The `specify-cli` package is also published there:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
uv tool install specify-cli
|
|
58
|
+
```
|
|
59
|
+
|
|
54
60
|
See the [Installation Guide](./docs/installation.md) for alternative methods, verification, upgrade, and troubleshooting.
|
|
55
61
|
|
|
56
62
|
### 2. Initialize a project
|
|
@@ -54,6 +54,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
54
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
|
+
| Figma Starter | Turns a Figma section's screens into per-screen spec.md files, an app-level user-stories.md, and a build-order.md, then hands off to /speckit.specify | `integration` | Read+Write | [spec-kit-figma-starter](https://github.com/wavemaker/spec-kit-figma-starter) |
|
|
57
58
|
| 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) |
|
|
58
59
|
| FixIt Extension | Spec-aware bug fixing — maps bugs to spec artifacts, proposes a plan, applies minimal changes | `code` | Read+Write | [spec-kit-fixit](https://github.com/speckit-community/spec-kit-fixit) |
|
|
59
60
|
| Fleet Orchestrator | Orchestrate a full feature lifecycle with human-in-the-loop gates across all SpecKit phases | `process` | Read+Write | [spec-kit-fleet](https://github.com/sharathsatish/spec-kit-fleet) |
|
|
@@ -91,6 +92,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
91
92
|
| Optimize | Audit and optimize AI governance for context efficiency — token budgets, rule health, interpretability, compression, coherence, and echo detection | `process` | Read+Write | [spec-kit-optimize](https://github.com/sakitA/spec-kit-optimize) |
|
|
92
93
|
| Orchestration Task Context Management | Adds subagent work-unit orchestration to generated Spec Kit task files | `process` | Read+Write | [spec-kit-orchestration-task-context-management](https://github.com/benizzio/spec-kit-orchestration-task-context-management) |
|
|
93
94
|
| OWASP LLM Threat Model | OWASP Top 10 for LLM Applications 2025 threat analysis on agent artifacts | `code` | Read-only | [spec-kit-threatmodel](https://github.com/NaviaSamal/spec-kit-threatmodel) |
|
|
95
|
+
| PatchWarden Evidence Pack | Map Spec Kit tasks into a guarded PatchWarden Goal and export bounded, traceable evidence for an accepted lineage. | `process` | Read+Write | [spec-kit-patchwarden](https://github.com/jiezeng2004-design/spec-kit-patchwarden) |
|
|
94
96
|
| Plan Review Gate | Require spec.md and plan.md to be merged via MR/PR before allowing task generation | `process` | Read-only | [spec-kit-plan-review-gate](https://github.com/luno/spec-kit-plan-review-gate) |
|
|
95
97
|
| PR Bridge | Auto-generate pull request descriptions, checklists, and summaries from spec artifacts | `process` | Read-only | [spec-kit-pr-bridge-](https://github.com/Quratulain-bilal/spec-kit-pr-bridge-) |
|
|
96
98
|
| Presetify | Create and validate presets and preset catalogs | `process` | Read+Write | [presetify](https://github.com/mnriem/spec-kit-extensions/tree/main/presetify) |
|
|
@@ -99,7 +101,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
99
101
|
| 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) |
|
|
100
102
|
| 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) |
|
|
101
103
|
| 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
|
|
104
|
+
| Quality Gates (Enforcement Layer) | Deterministic quality enforcement for Spec Kit across agent hooks, git checks, and CI pipelines with one policy file and one verify entrypoint for identical results at every boundary. | `process` | Read+Write | [spec-gates](https://github.com/schwichtgit/spec-gates) |
|
|
103
105
|
| 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) |
|
|
104
106
|
| Ralph Loop | Autonomous implementation loop using AI agent CLI | `code` | Read+Write | [spec-kit-ralph](https://github.com/Rubiss-Projects/spec-kit-ralph) |
|
|
105
107
|
| Reconcile Extension | Reconcile implementation drift by surgically updating feature artifacts. | `docs` | Read+Write | [spec-kit-reconcile](https://github.com/stn1slv/spec-kit-reconcile) |
|
|
@@ -133,6 +135,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
133
135
|
| Spec Sync | Detect and resolve drift between specs and implementation. AI-assisted resolution with human approval | `docs` | Read+Write | [spec-kit-sync](https://github.com/bgervin/spec-kit-sync) |
|
|
134
136
|
| Spec Trace | Build a requirement → test traceability matrix from spec.md and the test suite — surface untested requirements and orphan tests | `code` | Read+Write | [spec-kit-trace](https://github.com/Quratulain-bilal/spec-kit-trace) |
|
|
135
137
|
| Spec Validate | Comprehension validation, review gating, and approval state for spec-kit artifacts — staged quizzes, peer review SLA, and a hard gate before /speckit.implement | `process` | Read+Write | [spec-kit-spec-validate](https://github.com/aeltayeb/spec-kit-spec-validate) |
|
|
138
|
+
| Spec-Kit BDD | ATDD/BDD extension: convert specs to Gherkin scenarios, scaffold step definitions, and verify acceptance test coverage | `process` | Read+Write | [spec-kit-bdd](https://github.com/RSginer/spec-kit-bdd) |
|
|
136
139
|
| Spec2Cloud | Spec-driven workflow tuned for shipping to Azure | `process` | Read+Write | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) |
|
|
137
140
|
| SpecKit Companion | Live spec-driven progress — lifecycle capture, status, resume, and a turbo pipeline profile | `visibility` | Read+Write | [speckit-companion](https://github.com/alfredoperez/speckit-companion) |
|
|
138
141
|
| SpecTest | Auto-generate test scaffolds from spec criteria, map coverage, and find untested requirements | `code` | Read+Write | [spec-kit-spectest](https://github.com/Quratulain-bilal/spec-kit-spectest) |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Installing from PyPI
|
|
2
|
+
|
|
3
|
+
Spec Kit is published to PyPI as [`specify-cli`](https://pypi.org/project/specify-cli/), maintained by the Spec Kit maintainers. Installing from PyPI is the second supported install route alongside installing from the [GitHub source](../installation.md#install-from-source--persistent-installation-recommended). Use whichever fits your workflow — both provide the same `specify` CLI.
|
|
4
|
+
|
|
5
|
+
> [!NOTE]
|
|
6
|
+
> The PyPI release version tracks the GitHub release tags (for example, PyPI `0.12.11` corresponds to the `v0.12.11` tag). `specify version` is only a local version/runtime sanity check — it reports the installed version but not where the `specify` executable came from, so it cannot distinguish a PyPI install from a Git install. To confirm the install source, inspect the source metadata your package manager records: `pipx list --json` reports the exact install specification for each tool, and for uv/pip installs you can check the package's [PEP 610](https://peps.python.org/pep-0610/) `direct_url.json` inside its `*.dist-info` directory (a Git or URL install records the repository/archive URL there, while a plain PyPI index install does not create that file). Note that `pip show specify-cli` only prints package metadata and will not see uv/pipx-managed environments from the host interpreter.
|
|
7
|
+
|
|
8
|
+
## Install Specify CLI
|
|
9
|
+
|
|
10
|
+
Use whichever Python tool you already have:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Using uv (recommended)
|
|
14
|
+
uv tool install specify-cli
|
|
15
|
+
|
|
16
|
+
# Or using pipx
|
|
17
|
+
pipx install specify-cli
|
|
18
|
+
|
|
19
|
+
# Or using pip
|
|
20
|
+
pip install specify-cli
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Install a specific release
|
|
24
|
+
|
|
25
|
+
Pin an exact version for reproducible installs (check [PyPI](https://pypi.org/project/specify-cli/#history) or [Releases](https://github.com/github/spec-kit/releases) for available versions):
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Using uv
|
|
29
|
+
uv tool install specify-cli==0.12.11
|
|
30
|
+
|
|
31
|
+
# Or using pipx
|
|
32
|
+
pipx install specify-cli==0.12.11
|
|
33
|
+
|
|
34
|
+
# Or using pip
|
|
35
|
+
pip install specify-cli==0.12.11
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Verify
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
specify version
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Initialize a project
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
specify init <PROJECT_NAME> --integration copilot
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Upgrade
|
|
51
|
+
|
|
52
|
+
Upgrade by reinstalling the package through the same tool you used for the original install. If you originally pinned a version, note that `uv tool upgrade` preserves that pin; to move to the newest PyPI release, use an unpinned install command so you do not keep the existing version pin:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Using uv
|
|
56
|
+
uv tool install --force specify-cli
|
|
57
|
+
|
|
58
|
+
# Or using pipx
|
|
59
|
+
pipx install --force specify-cli
|
|
60
|
+
|
|
61
|
+
# Or using pip
|
|
62
|
+
pip install --upgrade specify-cli
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
> [!NOTE]
|
|
66
|
+
> `specify self upgrade` currently rebuilds `uv tool` and `pipx` installs from the GitHub source release URL rather than preserving a PyPI-based installation. If you want to stay on the PyPI route, use the package-manager commands above. A plain `pip install specify-cli` is treated as an unmanaged install — upgrade it with `pip install --upgrade specify-cli`. See the [Upgrade Guide](../upgrade.md) for details.
|
|
67
|
+
|
|
68
|
+
## Uninstall
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Using uv
|
|
72
|
+
uv tool uninstall specify-cli
|
|
73
|
+
|
|
74
|
+
# Or using pipx
|
|
75
|
+
pipx uninstall specify-cli
|
|
76
|
+
|
|
77
|
+
# Or using pip
|
|
78
|
+
pip uninstall specify-cli
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Next steps
|
|
82
|
+
|
|
83
|
+
Head to the [Quick Start](../quickstart.md) to initialize your first project.
|
|
@@ -11,9 +11,14 @@
|
|
|
11
11
|
## Installation
|
|
12
12
|
|
|
13
13
|
> [!IMPORTANT]
|
|
14
|
-
>
|
|
14
|
+
> Spec Kit is distributed through two official channels, both published and maintained by the Spec Kit maintainers: the [github/spec-kit](https://github.com/github/spec-kit) GitHub repository (source installs) and the [`specify-cli`](https://pypi.org/project/specify-cli/) package on [PyPI](https://pypi.org/project/specify-cli/). Either route is supported for normal installs — use the commands shown below. After installing, run `specify version` as a local version/runtime sanity check. It confirms that the `specify` command is available and reports its version, but it does not prove whether the executable came from PyPI or GitHub. For offline or air-gapped environments, locally built wheels created from this repository are also valid.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Spec Kit supports two install routes:
|
|
17
|
+
|
|
18
|
+
1. **Install from source (GitHub)** — the recommended route, pinned to a release tag.
|
|
19
|
+
2. **Install from PyPI** — install the published `specify-cli` package with your usual Python tooling.
|
|
20
|
+
|
|
21
|
+
### Install from Source — Persistent Installation (Recommended)
|
|
17
22
|
|
|
18
23
|
Install once and use everywhere. Replace `vX.Y.Z` with a release tag from [Releases](https://github.com/github/spec-kit/releases) — keep the leading `v` (for example, `v0.12.11`, not `0.12.11`):
|
|
19
24
|
|
|
@@ -30,12 +35,30 @@ Then initialize a project:
|
|
|
30
35
|
specify init <PROJECT_NAME> --integration copilot
|
|
31
36
|
```
|
|
32
37
|
|
|
38
|
+
### Install from PyPI
|
|
39
|
+
|
|
40
|
+
Spec Kit is also published to PyPI as [`specify-cli`](https://pypi.org/project/specify-cli/), so you can install it with your preferred Python package manager without referencing the Git URL:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Using uv (recommended)
|
|
44
|
+
uv tool install specify-cli
|
|
45
|
+
|
|
46
|
+
# Or using pipx
|
|
47
|
+
pipx install specify-cli
|
|
48
|
+
|
|
49
|
+
# Or using pip
|
|
50
|
+
pip install specify-cli
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
To install a specific release, pin the version — for example `uv tool install specify-cli==0.12.11`. See the [PyPI installation guide](install/pypi.md) for details, including how to upgrade.
|
|
54
|
+
|
|
33
55
|
### One-time Usage
|
|
34
56
|
|
|
35
57
|
Run directly without installing — see the [One-time usage (uvx)](install/one-time.md) guide.
|
|
36
58
|
|
|
37
59
|
### Alternative Package Managers
|
|
38
60
|
|
|
61
|
+
- **PyPI** — see the [PyPI installation guide](install/pypi.md)
|
|
39
62
|
- **pipx** — see the [pipx installation guide](install/pipx.md)
|
|
40
63
|
- **Enterprise / Air-Gapped** — see the [air-gapped installation guide](install/air-gapped.md)
|
|
41
64
|
|
|
@@ -81,13 +104,13 @@ specify init <project_name> --integration claude --ignore-agent-tools
|
|
|
81
104
|
|
|
82
105
|
## Verification
|
|
83
106
|
|
|
84
|
-
After installation, run the following command
|
|
107
|
+
After installation, run the following command as a local version/runtime check:
|
|
85
108
|
|
|
86
109
|
```bash
|
|
87
110
|
specify version
|
|
88
111
|
```
|
|
89
112
|
|
|
90
|
-
This
|
|
113
|
+
This confirms that the `specify` command is available and reporting the expected version. It does not prove whether that executable came from PyPI or GitHub.
|
|
91
114
|
|
|
92
115
|
**Stay current:** Run `specify self check` periodically to learn whether a newer release is available — it is read-only and never modifies your installation. When you are ready to upgrade, follow the [Upgrade Guide](./upgrade.md).
|
|
93
116
|
|
|
@@ -20,6 +20,7 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
|
|
|
20
20
|
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | `gemini` | |
|
|
21
21
|
| [GitHub Copilot](https://code.visualstudio.com/) | `copilot` | Defaults to legacy markdown mode: `.agent.md` command files under `.github/agents/`, companion `.prompt.md` files under `.github/prompts/`, and a `.vscode/settings.json` merge. Pass `--integration-options="--skills"` to scaffold skills as `speckit-<command>/SKILL.md` under `.github/skills/` instead. Legacy markdown mode is deprecated and will stop being the default in a future release. |
|
|
22
22
|
| [Goose](https://goose-docs.ai/) | `goose` | Uses YAML recipe format in `.goose/recipes/` |
|
|
23
|
+
| [Grok Build](https://docs.x.ai/build/overview) | `grok` | Skills-based integration; installs skills into `.grok/skills` and invokes them as `/speckit-<command>` |
|
|
23
24
|
| [Hermes](https://github.com/NousResearch/hermes-agent) | `hermes` | Skills-based integration; installs skills globally into `~/.hermes/skills/` |
|
|
24
25
|
| [IBM Bob](https://www.ibm.com/products/bob) | `bob` | IDE-based agent |
|
|
25
26
|
| [Junie](https://junie.jetbrains.com/) | `junie` | |
|
|
@@ -249,7 +250,11 @@ Spec Kit tracks one default integration in `.specify/integration.json` with `def
|
|
|
249
250
|
|
|
250
251
|
### Which integrations are multi-install safe?
|
|
251
252
|
|
|
252
|
-
An integration is multi-install safe when it uses
|
|
253
|
+
An integration is multi-install safe when it uses a static, unique agent root and command directory, stable command invocation settings, and a separate install manifest whose managed files do not overlap another safe integration. Registry tests enforce those path and manifest invariants. Shared Spec Kit templates remain aligned to the single default integration.
|
|
254
|
+
|
|
255
|
+
The Isolation column below lists paths Spec Kit manages for that integration (skills/commands roots and any integration-owned rule files). It is not a full inventory of every file an agent may read.
|
|
256
|
+
|
|
257
|
+
**Agent-context defaults are separate.** The optional agent-context extension maps each integration to a default context file in `extensions/agent-context/agent-context-defaults.json`. Those defaults are independent of multi-install safety: several agents may share a root file such as `AGENTS.md` when the extension is enabled. Multi-install safety does not require a unique context file per safe integration.
|
|
253
258
|
|
|
254
259
|
The currently declared multi-install safe integrations are:
|
|
255
260
|
|
|
@@ -263,6 +268,7 @@ The currently declared multi-install safe integrations are:
|
|
|
263
268
|
| `cursor-agent` | `.cursor/skills`, `.cursor/rules/specify-rules.mdc` |
|
|
264
269
|
| `firebender` | `.firebender/commands`, `.firebender/rules/specify-rules.mdc` |
|
|
265
270
|
| `gemini` | `.gemini/commands`, `GEMINI.md` |
|
|
271
|
+
| `grok` | `.grok/skills` |
|
|
266
272
|
| `junie` | `.junie/commands`, `.junie/AGENTS.md` |
|
|
267
273
|
| `kilocode` | `.kilocode/workflows`, `.kilocode/rules/specify-rules.md` |
|
|
268
274
|
| `qodercli` | `.qoder/commands`, `QODER.md` |
|
|
@@ -272,7 +278,7 @@ The currently declared multi-install safe integrations are:
|
|
|
272
278
|
| `trae` | `.trae/skills`, `.trae/rules/project_rules.md` |
|
|
273
279
|
| `zcode` | `.zcode/skills`, `ZCODE.md` |
|
|
274
280
|
|
|
275
|
-
Integrations that share a
|
|
281
|
+
Integrations that share a command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`.
|
|
276
282
|
|
|
277
283
|
### What happens to my changes when I uninstall or switch?
|
|
278
284
|
|
|
@@ -305,6 +305,8 @@ Steps can reference inputs and previous step outputs using `{{ expression }}` sy
|
|
|
305
305
|
| `inputs.spec` | Workflow input values |
|
|
306
306
|
| `steps.specify.output.file` | Output from a previous step |
|
|
307
307
|
| `item` | Current item in a fan-out iteration |
|
|
308
|
+
| `context.run_id` | Current workflow run ID |
|
|
309
|
+
| `context.workflow_dir` | Resolved absolute path to the workflow source directory. Empty string for string-loaded workflows. |
|
|
308
310
|
|
|
309
311
|
Available filters: `default`, `join`, `contains`, `map`, `from_json`.
|
|
310
312
|
|
|
@@ -316,6 +318,14 @@ args: "{{ inputs.spec }}"
|
|
|
316
318
|
message: "{{ status | default('pending') }}"
|
|
317
319
|
```
|
|
318
320
|
|
|
321
|
+
## Shell Step Environment Variables
|
|
322
|
+
|
|
323
|
+
Shell steps automatically receive the following environment variables:
|
|
324
|
+
|
|
325
|
+
| Variable | Description |
|
|
326
|
+
| -------- | ----------- |
|
|
327
|
+
| `SPECKIT_WORKFLOW_DIR` | Resolved absolute path to the workflow source directory (same value as `{{ context.workflow_dir }}`). Not set when the workflow has no source path. |
|
|
328
|
+
|
|
319
329
|
## Input Types
|
|
320
330
|
|
|
321
331
|
| Type | Coercion |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-07-
|
|
3
|
+
"updated_at": "2026-07-15T14:10:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"aide": {
|
|
@@ -395,6 +395,66 @@
|
|
|
395
395
|
"created_at": "2026-03-03T00:00:00Z",
|
|
396
396
|
"updated_at": "2026-03-03T00:00:00Z"
|
|
397
397
|
},
|
|
398
|
+
"bdd": {
|
|
399
|
+
"name": "Spec-Kit BDD",
|
|
400
|
+
"id": "bdd",
|
|
401
|
+
"description": "ATDD/BDD extension: convert specs to Gherkin scenarios, scaffold step definitions, and verify acceptance test coverage.",
|
|
402
|
+
"author": "RSginer",
|
|
403
|
+
"version": "1.0.2",
|
|
404
|
+
"download_url": "https://github.com/RSginer/spec-kit-bdd/archive/refs/tags/v1.0.2.zip",
|
|
405
|
+
"repository": "https://github.com/RSginer/spec-kit-bdd",
|
|
406
|
+
"homepage": "https://github.com/RSginer/spec-kit-bdd",
|
|
407
|
+
"documentation": "https://github.com/RSginer/spec-kit-bdd/blob/main/docs/usage.md",
|
|
408
|
+
"changelog": "https://github.com/RSginer/spec-kit-bdd/releases",
|
|
409
|
+
"license": "MIT",
|
|
410
|
+
"category": "process",
|
|
411
|
+
"effect": "read-write",
|
|
412
|
+
"requires": {
|
|
413
|
+
"speckit_version": ">=0.2.0",
|
|
414
|
+
"tools": [
|
|
415
|
+
{
|
|
416
|
+
"name": "pytest-bdd",
|
|
417
|
+
"required": false
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"name": "behave",
|
|
421
|
+
"required": false
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"name": "@cucumber/cucumber",
|
|
425
|
+
"required": false
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"name": "cucumber",
|
|
429
|
+
"required": false
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
"name": "io.cucumber",
|
|
433
|
+
"required": false
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"name": "SpecFlow",
|
|
437
|
+
"required": false
|
|
438
|
+
}
|
|
439
|
+
]
|
|
440
|
+
},
|
|
441
|
+
"provides": {
|
|
442
|
+
"commands": 3,
|
|
443
|
+
"hooks": 2
|
|
444
|
+
},
|
|
445
|
+
"tags": [
|
|
446
|
+
"bdd",
|
|
447
|
+
"gherkin",
|
|
448
|
+
"atdd",
|
|
449
|
+
"acceptance-testing",
|
|
450
|
+
"tdd"
|
|
451
|
+
],
|
|
452
|
+
"verified": false,
|
|
453
|
+
"downloads": 0,
|
|
454
|
+
"stars": 0,
|
|
455
|
+
"created_at": "2026-07-15T00:00:00Z",
|
|
456
|
+
"updated_at": "2026-07-15T00:00:00Z"
|
|
457
|
+
},
|
|
398
458
|
"blueprint": {
|
|
399
459
|
"name": "Blueprint",
|
|
400
460
|
"id": "blueprint",
|
|
@@ -809,8 +869,8 @@
|
|
|
809
869
|
"id": "coding-standards-drift-control",
|
|
810
870
|
"description": "Generate coding-standards drift reports and remediation tasks for active Spec Kit features",
|
|
811
871
|
"author": "Igor Benicio de Mesquita",
|
|
812
|
-
"version": "0.
|
|
813
|
-
"download_url": "https://github.com/benizzio/spec-kit-coding-standards-drift-control/archive/refs/tags/v0.
|
|
872
|
+
"version": "0.4.0",
|
|
873
|
+
"download_url": "https://github.com/benizzio/spec-kit-coding-standards-drift-control/archive/refs/tags/v0.4.0.zip",
|
|
814
874
|
"repository": "https://github.com/benizzio/spec-kit-coding-standards-drift-control",
|
|
815
875
|
"homepage": "https://github.com/benizzio/spec-kit-coding-standards-drift-control",
|
|
816
876
|
"documentation": "https://github.com/benizzio/spec-kit-coding-standards-drift-control#readme",
|
|
@@ -835,7 +895,7 @@
|
|
|
835
895
|
"downloads": 0,
|
|
836
896
|
"stars": 0,
|
|
837
897
|
"created_at": "2026-06-11T00:00:00Z",
|
|
838
|
-
"updated_at": "2026-
|
|
898
|
+
"updated_at": "2026-07-15T00:00:00Z"
|
|
839
899
|
},
|
|
840
900
|
"companion": {
|
|
841
901
|
"name": "SpecKit Companion",
|
|
@@ -1295,6 +1355,43 @@
|
|
|
1295
1355
|
"created_at": "2026-07-08T00:00:00Z",
|
|
1296
1356
|
"updated_at": "2026-07-08T00:00:00Z"
|
|
1297
1357
|
},
|
|
1358
|
+
"figma-starter": {
|
|
1359
|
+
"name": "Figma Starter",
|
|
1360
|
+
"id": "figma-starter",
|
|
1361
|
+
"description": "Turns a Figma section's screens into per-screen spec.md files, an app-level user-stories.md, and a build-order.md, then hands off to /speckit.specify.",
|
|
1362
|
+
"author": "WaveMaker",
|
|
1363
|
+
"version": "1.0.0",
|
|
1364
|
+
"download_url": "https://github.com/wavemaker/spec-kit-figma-starter/archive/refs/tags/v1.0.0.zip",
|
|
1365
|
+
"repository": "https://github.com/wavemaker/spec-kit-figma-starter",
|
|
1366
|
+
"homepage": "https://github.com/wavemaker/spec-kit-figma-starter",
|
|
1367
|
+
"documentation": "https://github.com/wavemaker/spec-kit-figma-starter/blob/main/README.md",
|
|
1368
|
+
"changelog": "https://github.com/wavemaker/spec-kit-figma-starter/blob/main/CHANGELOG.md",
|
|
1369
|
+
"license": "MIT",
|
|
1370
|
+
"category": "integration",
|
|
1371
|
+
"effect": "read-write",
|
|
1372
|
+
"requires": {
|
|
1373
|
+
"speckit_version": ">=0.1.0",
|
|
1374
|
+
"tools": [
|
|
1375
|
+
{ "name": "python3", "version": ">=3.8", "required": true }
|
|
1376
|
+
]
|
|
1377
|
+
},
|
|
1378
|
+
"provides": {
|
|
1379
|
+
"commands": 1,
|
|
1380
|
+
"hooks": 1
|
|
1381
|
+
},
|
|
1382
|
+
"tags": [
|
|
1383
|
+
"figma",
|
|
1384
|
+
"design",
|
|
1385
|
+
"design-to-spec",
|
|
1386
|
+
"ui",
|
|
1387
|
+
"frontend"
|
|
1388
|
+
],
|
|
1389
|
+
"verified": false,
|
|
1390
|
+
"downloads": 0,
|
|
1391
|
+
"stars": 0,
|
|
1392
|
+
"created_at": "2026-07-15T00:00:00Z",
|
|
1393
|
+
"updated_at": "2026-07-15T00:00:00Z"
|
|
1394
|
+
},
|
|
1298
1395
|
"fix-findings": {
|
|
1299
1396
|
"name": "Fix Findings",
|
|
1300
1397
|
"id": "fix-findings",
|
|
@@ -1438,13 +1535,14 @@
|
|
|
1438
1535
|
"gates": {
|
|
1439
1536
|
"name": "Quality Gates (Enforcement Layer)",
|
|
1440
1537
|
"id": "gates",
|
|
1441
|
-
"description": "Deterministic quality enforcement for Spec Kit
|
|
1538
|
+
"description": "Deterministic quality enforcement for Spec Kit across agent hooks, git checks, and CI pipelines with one policy file and one verify entrypoint for identical results at every boundary.",
|
|
1442
1539
|
"author": "schwichtgit",
|
|
1443
|
-
"version": "0.
|
|
1444
|
-
"download_url": "https://github.com/schwichtgit/spec-gates/releases/download/v0.
|
|
1540
|
+
"version": "0.3.2",
|
|
1541
|
+
"download_url": "https://github.com/schwichtgit/spec-gates/releases/download/v0.3.2/gates-0.3.2.zip",
|
|
1445
1542
|
"repository": "https://github.com/schwichtgit/spec-gates",
|
|
1446
1543
|
"homepage": "https://github.com/schwichtgit/spec-gates",
|
|
1447
1544
|
"documentation": "https://github.com/schwichtgit/spec-gates/blob/main/docs/how-it-works.md",
|
|
1545
|
+
"changelog": "https://github.com/schwichtgit/spec-gates/releases",
|
|
1448
1546
|
"license": "MIT",
|
|
1449
1547
|
"category": "process",
|
|
1450
1548
|
"effect": "read-write",
|
|
@@ -1457,7 +1555,7 @@
|
|
|
1457
1555
|
},
|
|
1458
1556
|
{
|
|
1459
1557
|
"name": "git",
|
|
1460
|
-
"required":
|
|
1558
|
+
"required": false
|
|
1461
1559
|
},
|
|
1462
1560
|
{
|
|
1463
1561
|
"name": "node",
|
|
@@ -1470,8 +1568,8 @@
|
|
|
1470
1568
|
]
|
|
1471
1569
|
},
|
|
1472
1570
|
"provides": {
|
|
1473
|
-
"commands":
|
|
1474
|
-
"hooks":
|
|
1571
|
+
"commands": 8,
|
|
1572
|
+
"hooks": 2
|
|
1475
1573
|
},
|
|
1476
1574
|
"tags": [
|
|
1477
1575
|
"quality",
|
|
@@ -1484,7 +1582,7 @@
|
|
|
1484
1582
|
"downloads": 0,
|
|
1485
1583
|
"stars": 0,
|
|
1486
1584
|
"created_at": "2026-07-09T00:00:00Z",
|
|
1487
|
-
"updated_at": "2026-07-
|
|
1585
|
+
"updated_at": "2026-07-15T00:00:00Z"
|
|
1488
1586
|
},
|
|
1489
1587
|
"github-issues": {
|
|
1490
1588
|
"name": "GitHub Issues Integration 1",
|
|
@@ -2677,6 +2775,46 @@
|
|
|
2677
2775
|
"created_at": "2026-04-24T14:00:00Z",
|
|
2678
2776
|
"updated_at": "2026-04-24T14:00:00Z"
|
|
2679
2777
|
},
|
|
2778
|
+
"patchwarden-evidence": {
|
|
2779
|
+
"name": "PatchWarden Evidence Pack",
|
|
2780
|
+
"id": "patchwarden-evidence",
|
|
2781
|
+
"description": "Map Spec Kit tasks into a guarded PatchWarden Goal and export bounded, traceable evidence for an accepted lineage.",
|
|
2782
|
+
"author": "Zengjie",
|
|
2783
|
+
"version": "1.0.1",
|
|
2784
|
+
"download_url": "https://github.com/jiezeng2004-design/spec-kit-patchwarden/archive/refs/tags/v1.0.1.zip",
|
|
2785
|
+
"repository": "https://github.com/jiezeng2004-design/spec-kit-patchwarden",
|
|
2786
|
+
"homepage": "https://github.com/jiezeng2004-design/spec-kit-patchwarden",
|
|
2787
|
+
"documentation": "https://github.com/jiezeng2004-design/spec-kit-patchwarden/blob/main/README.md",
|
|
2788
|
+
"changelog": "https://github.com/jiezeng2004-design/spec-kit-patchwarden/blob/main/CHANGELOG.md",
|
|
2789
|
+
"license": "MIT",
|
|
2790
|
+
"category": "process",
|
|
2791
|
+
"effect": "read-write",
|
|
2792
|
+
"requires": {
|
|
2793
|
+
"speckit_version": ">=0.1.0",
|
|
2794
|
+
"tools": [
|
|
2795
|
+
{
|
|
2796
|
+
"name": "patchwarden",
|
|
2797
|
+
"version": ">=1.5.1",
|
|
2798
|
+
"required": true
|
|
2799
|
+
}
|
|
2800
|
+
]
|
|
2801
|
+
},
|
|
2802
|
+
"provides": {
|
|
2803
|
+
"commands": 2,
|
|
2804
|
+
"hooks": 2
|
|
2805
|
+
},
|
|
2806
|
+
"tags": [
|
|
2807
|
+
"verification",
|
|
2808
|
+
"evidence",
|
|
2809
|
+
"traceability",
|
|
2810
|
+
"security"
|
|
2811
|
+
],
|
|
2812
|
+
"verified": false,
|
|
2813
|
+
"downloads": 0,
|
|
2814
|
+
"stars": 0,
|
|
2815
|
+
"created_at": "2026-07-14T00:00:00Z",
|
|
2816
|
+
"updated_at": "2026-07-14T00:00:00Z"
|
|
2817
|
+
},
|
|
2680
2818
|
"plan-review-gate": {
|
|
2681
2819
|
"name": "Plan Review Gate",
|
|
2682
2820
|
"id": "plan-review-gate",
|
|
@@ -41,6 +41,16 @@ if ($Help) {
|
|
|
41
41
|
exit 0
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
# -Number is [long], so PowerShell binds "-5" as -5 rather than rejecting it
|
|
45
|
+
# the way the bash/Python twins do (`^[0-9]+$`). A negative value would format
|
|
46
|
+
# via '{0:000}' to e.g. "-005" and produce a branch name starting with "-",
|
|
47
|
+
# which git refuses (refs cannot begin with a dash). Reject it here, before the
|
|
48
|
+
# description check, matching the bash twin's parse-time validation order.
|
|
49
|
+
if ($Number -lt 0) {
|
|
50
|
+
Write-Error 'Error: --number must be a non-negative integer'
|
|
51
|
+
exit 1
|
|
52
|
+
}
|
|
53
|
+
|
|
44
54
|
if (-not $FeatureDescription -or $FeatureDescription.Count -eq 0) {
|
|
45
55
|
Write-Error "Usage: ./create-new-feature-branch.ps1 [-Json] [-DryRun] [-AllowExistingBranch] [-ShortName <name>] [-Number N] [-Timestamp] <feature description>"
|
|
46
56
|
exit 1
|