specify-cli 1.0.2__tar.gz → 1.0.4__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-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/bug_report.yml +2 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/feature_request.yml +2 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/codeql.yml +2 -2
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/publish-pypi.yml +5 -3
- {specify_cli-1.0.2 → specify_cli-1.0.4}/AGENTS.md +3 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/CHANGELOG.md +50 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/PKG-INFO +22 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/README.md +21 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/extensions.md +3 -2
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/extensions.md +2 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/integrations.md +2 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-PUBLISHING-GUIDE.md +1 -2
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/catalog.community.json +55 -16
- {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/catalog.json +19 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/PUBLISHING.md +37 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/pyproject.toml +1 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/check-prerequisites.sh +13 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/common.sh +13 -5
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/setup-plan.sh +2 -2
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/check-prerequisites.ps1 +11 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/create-new-feature.ps1 +8 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/setup-plan.ps1 +5 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/check_prerequisites.py +14 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/setup_plan.py +3 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_github_http.py +3 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_invocation_style.py +1 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_utils.py +41 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/config.py +4 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/catalog.py +11 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/records.py +12 -6
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/primitives.py +5 -3
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/init.py +7 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/events.py +1 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/extensions/_commands.py +109 -13
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/__init__.py +4 -0
- specify_cli-1.0.4/src/specify_cli/integrations/docker_agent/__init__.py +126 -0
- specify_cli-1.0.4/src/specify_cli/integrations/dsh/__init__.py +64 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/rovodev/__init__.py +11 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/presets/__init__.py +284 -3
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/presets/_commands.py +112 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/_commands.py +3 -3
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/catalog.py +12 -6
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/expressions.py +70 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/_commands.py +18 -2
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/schema.py +7 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/do_while/__init__.py +16 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/if_then/__init__.py +16 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/while_loop/__init__.py +16 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/analyze.md +3 -3
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/converge.md +3 -3
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_bundle_cli.py +4 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_catalog_schema.py +17 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_events.py +16 -0
- specify_cli-1.0.4/tests/integrations/test_integration_docker_agent.py +133 -0
- specify_cli-1.0.4/tests/integrations/test_integration_dsh.py +314 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_rovodev.py +39 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_registry.py +1 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/parity_helpers.py +11 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_agent_config_consistency.py +2 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_authentication.py +1 -1
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_check_prerequisites_python_parity.py +72 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_check_tool.py +36 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_create_new_feature_python_parity.py +53 -0
- specify_cli-1.0.4/tests/test_extension_content_staleness.py +134 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extensions.py +206 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_github_http.py +18 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_github_workflows.py +86 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_presets.py +626 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_resolve_template_python_parity.py +34 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_plan_python_parity.py +10 -8
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_workflows.py +174 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_primitives.py +114 -15
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_records.py +70 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_condition_expression_block.py +71 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_commands.py +109 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_schema.py +51 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.devcontainer/post-create.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.editorconfig +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.gitattributes +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/CODEOWNERS +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/aw/actions-lock.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/dependabot.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/scripts/check_security_requirements.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/security-audit-requirements.txt +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-bundle.lock.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-bundle.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-fix.lock.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-fix.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-test.lock.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-test.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/docs.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/feature-assess.lock.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/feature-assess.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/lint.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/release.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/security.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/stale.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/test.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.gitignore +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.pre-commit-config.yaml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/.zenodo.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/CITATION.cff +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/CONTRIBUTING.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/DEVELOPMENT.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/LICENSE +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/README.zh-CN.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/SECURITY.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/SUPPORT.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/bundles/catalog.community.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/.gitignore +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/bundles.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/friends.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/overview.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/presets.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/walkthroughs.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/complex-features.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/sdd.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/spec-of-specs.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/docfx.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/guides/existing-projects.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/guides/monorepo.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/history.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/images/spec-kit-logo.webp +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/index.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/air-gapped.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/one-time.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/pipx.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/pypi.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/uv.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/installation.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/local-development.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/quickstart.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/agentic-bugfix.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/agentic-sdd.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/authentication.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/bundles.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/core.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/overview.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/presets.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/workflows.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/template/public/main.css +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/toc.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/upgrade.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/developer/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/agent-context-defaults.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.decide.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.define.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.intake.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.research.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.shape.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/extension.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/extension.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/catalog.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/config-template.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/extension.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/git-config.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/auto_commit.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/git_common.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/initialize_repo.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/selftest/extension.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/.gitignore +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/LICENSE +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/commands/example.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/config-template.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/extension.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/catalog.community.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/media/logo_large.webp +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/media/logo_small.webp +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/media/specify_cli.gif +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-April.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-February.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-July.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-June.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-March.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-May.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/catalog.community.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/catalog.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/constitution-sync/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/constitution-sync/commands/speckit.constitution.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/constitution-sync/preset.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/preset.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/preset.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/preset.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/create-new-feature.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/resolve-template.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/common.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/resolve-template.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/common.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/create_new_feature.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/resolve_template.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/setup_tasks.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/spec-driven.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/spec-kit.code-workspace +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_assets.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_console.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_download_security.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_project.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_version.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/agents.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/yamlio.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/manifest.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/adapters.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/installer.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/event.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/extensions/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/alquimia/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/claude/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/command_code/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/droid/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/grok/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/omp/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/engine.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/composer.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/merge.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/checklist-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/checklist.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/clarify.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/constitution.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/implement.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/plan.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/specify.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/tasks.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/taskstoissues.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/constitution-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/plan-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/spec-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/tasks-template.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/vscode-settings.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/auth_helpers.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/bundler_helpers.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/conftest.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_manifest_schema.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_wheel_bundled_presets.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_wheel_core_pack_scripts.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/assess/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/assess/test_assess_extension.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/git/test_git_extension.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/TESTING.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/plan.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/spec.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/tasks.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/http_helpers.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_install_flow.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/__init__.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/conftest.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_base.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_cli.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_alquimia.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_command_code.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_droid.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_grok.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_branch_numbering.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_cli_version.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_command_template_py_scripts.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_commands_package.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_console_imports.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_download_security.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_event_command.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_add_path_traversal.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_registration.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_skills.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_init_dir.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_init_output_markup.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_merge.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_post_process.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_security_workflow.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_tasks.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_tasks_python_parity.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_shared_infra_gitignore.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_skill_placeholder_py.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_specify_template_numbering.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_upgrade.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_utils.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_version_imports.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundle_download_url.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_adapters.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_catalog_config.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_yamlio.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/conftest.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_composer.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_layer_sources.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_merge.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_security.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_resolver_integration.py +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/PUBLISHING.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/README.md +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/catalog.community.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/catalog.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/step-catalog.community.json +0 -0
- {specify_cli-1.0.2 → specify_cli-1.0.4}/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**: Alquimia AI, Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Command Code, Cursor, Devin for Terminal, Factory Droid, 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
|
|
11
|
+
**Currently supported agents**: Alquimia AI, Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Command Code, Cursor, Devin for Terminal, Docker Agent, Factory Droid, DeepSeek Harness, 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
|
|
@@ -22,11 +22,11 @@ jobs:
|
|
|
22
22
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
23
23
|
|
|
24
24
|
- name: Initialize CodeQL
|
|
25
|
-
uses: github/codeql-action/init@
|
|
25
|
+
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
|
|
26
26
|
with:
|
|
27
27
|
languages: ${{ matrix.language }}
|
|
28
28
|
|
|
29
29
|
- name: Perform CodeQL Analysis
|
|
30
|
-
uses: github/codeql-action/analyze@
|
|
30
|
+
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
|
|
31
31
|
with:
|
|
32
32
|
category: "/language:${{ matrix.language }}"
|
|
@@ -19,8 +19,9 @@ jobs:
|
|
|
19
19
|
actions: write
|
|
20
20
|
steps:
|
|
21
21
|
- name: Verify tag format
|
|
22
|
+
env:
|
|
23
|
+
TAG: ${{ inputs.tag }}
|
|
22
24
|
run: |
|
|
23
|
-
TAG="${{ inputs.tag }}"
|
|
24
25
|
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
25
26
|
echo "Error: '$TAG' is not a valid release tag (expected vX.Y.Z)"
|
|
26
27
|
exit 1
|
|
@@ -40,9 +41,10 @@ jobs:
|
|
|
40
41
|
python-version: "3.13"
|
|
41
42
|
|
|
42
43
|
- name: Verify tag matches package version
|
|
44
|
+
env:
|
|
45
|
+
TAG: ${{ inputs.tag }}
|
|
43
46
|
run: |
|
|
44
|
-
TAG_VERSION="${
|
|
45
|
-
TAG_VERSION="${TAG_VERSION#v}"
|
|
47
|
+
TAG_VERSION="${TAG#v}"
|
|
46
48
|
PROJECT_VERSION="$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')"
|
|
47
49
|
if [[ "$TAG_VERSION" != "$PROJECT_VERSION" ]]; then
|
|
48
50
|
echo "Error: Tag version ($TAG_VERSION) does not match pyproject.toml version ($PROJECT_VERSION)"
|
|
@@ -41,6 +41,8 @@ src/specify_cli/integrations/
|
|
|
41
41
|
│ └── __init__.py
|
|
42
42
|
├── copilot/ # Example: IntegrationBase subclass (custom setup)
|
|
43
43
|
│ └── __init__.py
|
|
44
|
+
├── docker_agent/ # Example: Docker Agent SkillsIntegration subclass
|
|
45
|
+
│ └── __init__.py
|
|
44
46
|
└── ... # One subpackage per supported agent
|
|
45
47
|
```
|
|
46
48
|
|
|
@@ -504,7 +506,7 @@ Disclosure is **continuous**, not a one-time event. A single AI-disclosure parag
|
|
|
504
506
|
### Opening pull requests
|
|
505
507
|
|
|
506
508
|
- Before opening a pull request, check whether the account that will file it already has three open pull requests in this repository.
|
|
507
|
-
- If so, alert the user that additional submissions may receive lower review priority and ask for explicit permission to proceed. Do not assume consent.
|
|
509
|
+
- If so, alert the user that additional submissions may receive lower review priority and ask for explicit permission to proceed. Do not assume consent. If the user is unavailable to provide that permission, including during autonomous or non-interactive operation, do not open the pull request. Preserve the work on a branch and report that confirmation is required.
|
|
508
510
|
|
|
509
511
|
### Commits
|
|
510
512
|
|
|
@@ -2,6 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [1.0.4] - 2026-09-02
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- fix(scripts): stop wrap composition looping on a token in core content (#4396)
|
|
10
|
+
- [extension] Update Charter extension to v0.6.1 (#4409)
|
|
11
|
+
- fix(workflows): keep non-ASCII text readable in written overlay files (#4148)
|
|
12
|
+
- fix(workflows): report overlay operation keys in declaration order (#4146)
|
|
13
|
+
- fix: skip corrupted state.json in list_runs() instead of aborting (#3904)
|
|
14
|
+
- fix(rovodev): guard non-string prompt names when merging prompts.yml (#4145)
|
|
15
|
+
- fix: narrow bare except Exception in preset command reconciliation (#3842)
|
|
16
|
+
- fix(workflows): refuse a filter mixed with a comparison operator instead of silently mis-binding it (#3894)
|
|
17
|
+
- fix: escape Rich markup in workflow error output (#3837)
|
|
18
|
+
- fix: add JSON error handling to auth config loader (#3836)
|
|
19
|
+
- fix: use missing_ok=True in extension ZIP cleanup (#3870)
|
|
20
|
+
- feat(presets): let a preset declare a required extension (#4250)
|
|
21
|
+
- fix(bundler): reject unsupported catalog payload versions (#4090)
|
|
22
|
+
- fix(extensions): install bundled extension updates from the local package (#4351)
|
|
23
|
+
- docs: clarify autonomous PR handling (#4392)
|
|
24
|
+
- fix(workflows): reject malformed step config on add (#4087)
|
|
25
|
+
- fix(powershell): stop create-new-feature crashing on a non-Latin description (#4138)
|
|
26
|
+
- fix(bundler): treat an explicit-null records field as missing, not "None" (#4136)
|
|
27
|
+
- Add DeepSeek Harness (DSH) integration (#4336)
|
|
28
|
+
- chore: release 1.0.3, begin 1.0.4.dev0 development (#4391)
|
|
29
|
+
|
|
30
|
+
## [1.0.3] - 2026-09-01
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- fix(workflows): reject malformed step config on remove (#4095)
|
|
35
|
+
- fix(workflows): reject malformed workflow config on remove (#4096)
|
|
36
|
+
- fix(events): skip unreadable extension manifests (#4089)
|
|
37
|
+
- docs(extensions): fix private catalog FAQ command (#4373)
|
|
38
|
+
- [extension] Add Vurnix Honest Gate extension to community catalog (#4388)
|
|
39
|
+
- fix(presets): fail closed on unreadable provenance (#4092)
|
|
40
|
+
- docs: explain how Spec Kit dogfoods itself (#4381)
|
|
41
|
+
- add --require-spec to check-prerequisites (#4367)
|
|
42
|
+
- fix(ci): harden PyPI release tag handling (#4386)
|
|
43
|
+
- fix(github-http): reject malformed explicit URL ports (#4372)
|
|
44
|
+
- fix: scaffold extension config when installing via bundler (#4285)
|
|
45
|
+
- fix: reject unknown setup-plan arguments (#4371)
|
|
46
|
+
- feat(docker-agent): add Docker Agent integration (#4302)
|
|
47
|
+
- fix(workflows): reject a condition that is spliced into text, not evaluated (#4292)
|
|
48
|
+
- fix(bundler): pass explicit workflow_add options from bundle install (#4284)
|
|
49
|
+
- test(bundle): join across wrap points in the build output-path assertion (#4280)
|
|
50
|
+
- chore(deps): bump the codeql-action group with 2 updates (#4357)
|
|
51
|
+
- [extension] Update Spec Kit Figma extension to v3.1.1 (#4377)
|
|
52
|
+
- fix(presets): reject falsy non-mapping catalog roots (#4088)
|
|
53
|
+
- chore: release 1.0.2, begin 1.0.3.dev0 development (#4379)
|
|
54
|
+
|
|
5
55
|
## [1.0.2] - 2026-08-31
|
|
6
56
|
|
|
7
57
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: specify-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
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
|
|
@@ -64,6 +64,7 @@ Description-Content-Type: text/markdown
|
|
|
64
64
|
- [🧩 Making Spec Kit Your Own: Extensions & Presets](#-making-spec-kit-your-own-extensions--presets)
|
|
65
65
|
- [📦 Bundles: Role-Based Setups](#-bundles-role-based-setups)
|
|
66
66
|
- [📚 Core Philosophy](#-core-philosophy)
|
|
67
|
+
- [🪞 Does Spec Kit Use Spec Kit?](#-does-spec-kit-use-spec-kit)
|
|
67
68
|
- [🌟 Development Phases](#-development-phases)
|
|
68
69
|
- [🎯 Experimental Goals](#-experimental-goals)
|
|
69
70
|
- [🔧 Prerequisites](#-prerequisites)
|
|
@@ -421,6 +422,26 @@ Spec-Driven Development is a structured process that emphasizes:
|
|
|
421
422
|
- **Multi-step refinement** rather than one-shot code generation from prompts
|
|
422
423
|
- **Heavy reliance** on advanced AI model capabilities for specification interpretation
|
|
423
424
|
|
|
425
|
+
## 🪞 Does Spec Kit Use Spec Kit?
|
|
426
|
+
|
|
427
|
+
Yes — we dogfood Spec Kit while developing Spec Kit, especially for substantial
|
|
428
|
+
features and changes to the development workflow. Contributors are asked to test
|
|
429
|
+
relevant changes through the Spec-Driven Development commands. The
|
|
430
|
+
[feature assessment workflow](./.github/workflows/feature-assess.md) is currently
|
|
431
|
+
the automated dogfooding path: its setup uses the CLI from the current checkout
|
|
432
|
+
to initialize Copilot and install the `assess` extension, after which Copilot
|
|
433
|
+
follows the generated assessment skills against feature requests. The other
|
|
434
|
+
agentic workflows currently operate independently of the Specify CLI.
|
|
435
|
+
|
|
436
|
+
This does not mean every change goes through the full workflow. Small fixes can
|
|
437
|
+
use the normal issue, pull request, review, and test process. Dogfooding
|
|
438
|
+
scaffolding and artifacts under `.github/agents/`, `.github/prompts/`,
|
|
439
|
+
`.github/copilot-instructions.md`, `.grok/`, `.specify/`, and `specs/` are
|
|
440
|
+
intentionally gitignored. The automated assessment workflow is ephemeral and
|
|
441
|
+
neither commits nor pushes its generated Copilot skills, so its output does not
|
|
442
|
+
enter repository history. See the [contributor development
|
|
443
|
+
workflow](./CONTRIBUTING.md#development-workflow) for the validation expectations.
|
|
444
|
+
|
|
424
445
|
## 🌟 Development Phases
|
|
425
446
|
|
|
426
447
|
| Phase | Focus | Key Activities |
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
- [🧩 Making Spec Kit Your Own: Extensions & Presets](#-making-spec-kit-your-own-extensions--presets)
|
|
45
45
|
- [📦 Bundles: Role-Based Setups](#-bundles-role-based-setups)
|
|
46
46
|
- [📚 Core Philosophy](#-core-philosophy)
|
|
47
|
+
- [🪞 Does Spec Kit Use Spec Kit?](#-does-spec-kit-use-spec-kit)
|
|
47
48
|
- [🌟 Development Phases](#-development-phases)
|
|
48
49
|
- [🎯 Experimental Goals](#-experimental-goals)
|
|
49
50
|
- [🔧 Prerequisites](#-prerequisites)
|
|
@@ -401,6 +402,26 @@ Spec-Driven Development is a structured process that emphasizes:
|
|
|
401
402
|
- **Multi-step refinement** rather than one-shot code generation from prompts
|
|
402
403
|
- **Heavy reliance** on advanced AI model capabilities for specification interpretation
|
|
403
404
|
|
|
405
|
+
## 🪞 Does Spec Kit Use Spec Kit?
|
|
406
|
+
|
|
407
|
+
Yes — we dogfood Spec Kit while developing Spec Kit, especially for substantial
|
|
408
|
+
features and changes to the development workflow. Contributors are asked to test
|
|
409
|
+
relevant changes through the Spec-Driven Development commands. The
|
|
410
|
+
[feature assessment workflow](./.github/workflows/feature-assess.md) is currently
|
|
411
|
+
the automated dogfooding path: its setup uses the CLI from the current checkout
|
|
412
|
+
to initialize Copilot and install the `assess` extension, after which Copilot
|
|
413
|
+
follows the generated assessment skills against feature requests. The other
|
|
414
|
+
agentic workflows currently operate independently of the Specify CLI.
|
|
415
|
+
|
|
416
|
+
This does not mean every change goes through the full workflow. Small fixes can
|
|
417
|
+
use the normal issue, pull request, review, and test process. Dogfooding
|
|
418
|
+
scaffolding and artifacts under `.github/agents/`, `.github/prompts/`,
|
|
419
|
+
`.github/copilot-instructions.md`, `.grok/`, `.specify/`, and `specs/` are
|
|
420
|
+
intentionally gitignored. The automated assessment workflow is ephemeral and
|
|
421
|
+
neither commits nor pushes its generated Copilot skills, so its output does not
|
|
422
|
+
enter repository history. See the [contributor development
|
|
423
|
+
workflow](./CONTRIBUTING.md#development-workflow) for the validation expectations.
|
|
424
|
+
|
|
404
425
|
## 🌟 Development Phases
|
|
405
426
|
|
|
406
427
|
| Phase | Focus | Key Activities |
|
|
@@ -52,7 +52,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
52
52
|
| Bugfix Workflow | Structured bugfix workflow — capture bugs, trace to spec artifacts, and patch specs surgically | `process` | Read+Write | [spec-kit-bugfix](https://github.com/Quratulain-bilal/spec-kit-bugfix) |
|
|
53
53
|
| Canon | Adds canon-driven (baseline-driven) workflows: spec-first, code-first, spec-drift. Requires Canon Core preset installation. | `process` | Read+Write | [spec-kit-canon](https://github.com/maximiliamus/spec-kit-canon/tree/master/extension) |
|
|
54
54
|
| Catalog CI | Automated validation for spec-kit community catalog entries — structure, URLs, diffs, and linting | `process` | Read-only | [spec-kit-catalog-ci](https://github.com/Quratulain-bilal/spec-kit-catalog-ci) |
|
|
55
|
-
| Charter | Compose
|
|
55
|
+
| Charter | Compose project constitutions from shared fragment registries | `process` | Read+Write | [spec-kit-charter](https://github.com/Fyloss/spec-kit-charter) |
|
|
56
56
|
| CI Guard | Spec compliance gates for CI/CD — verify specs exist, check drift, and block merges on gaps | `process` | Read-only | [spec-kit-ci-guard](https://github.com/Quratulain-bilal/spec-kit-ci-guard) |
|
|
57
57
|
| Checkpoint Extension | Commit the changes made during the middle of the implementation, so you don't end up with just one very large commit at the end | `code` | Read+Write | [spec-kit-checkpoint](https://github.com/aaronrsun/spec-kit-checkpoint) |
|
|
58
58
|
| Cleanup Extension | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues, and generates analysis for large issues | `code` | Read+Write | [spec-kit-cleanup](https://github.com/dsrednicki/spec-kit-cleanup) |
|
|
@@ -142,7 +142,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
142
142
|
| 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-) |
|
|
143
143
|
| Spec Inventory | Read-only inventory of live requirement and task IDs, with focused per-task context packs instead of whole-file dumps | `visibility` | Read-only | [spec-kit-inventory-alignment](https://github.com/Yash-Chindam/spec-kit-inventory-alignment) |
|
|
144
144
|
| 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) |
|
|
145
|
-
| Spec Kit Figma |
|
|
145
|
+
| Spec Kit Figma | Grounds SpecKit spec/plan/tasks in Figma design context via REST or MCP, on macOS/Linux/Windows. | `integration` | Read+Write | [spec-kit-figma](https://github.com/Fyloss/spec-kit-figma) |
|
|
146
146
|
| 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) |
|
|
147
147
|
| 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) |
|
|
148
148
|
| 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) |
|
|
@@ -182,6 +182,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
182
182
|
| Verify Review Ship | Post-convergence operational verification, technical review, learning governance, and transactional delivery. | `process` | Read+Write | [spec-kit-verify-review-ship](https://github.com/cadugevaerd/spec-kit-verify-review-ship) |
|
|
183
183
|
| Verify Tasks Extension | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation | `code` | Read-only | [spec-kit-verify-tasks](https://github.com/datastone-inc/spec-kit-verify-tasks) |
|
|
184
184
|
| Version Guard | Verify tech stack versions against live npm registries before planning and implementation | `process` | Read-only | [spec-kit-version-guard](https://github.com/KevinBrown5280/spec-kit-version-guard) |
|
|
185
|
+
| Vurnix Honest Gate | Deterministic three-state honest gate for AI-written code: compile + phantom-import + honest test count in one verdict, executed as code — not as agent self-review. PASS/BLOCK/UNPROVEN by exit code. | `process` | Read-only | [vurnix-spec-kit](https://github.com/shiersa/vurnix-spec-kit) |
|
|
185
186
|
| What-if Analysis | Preview the downstream impact (complexity, effort, tasks, risks) of requirement changes before committing to them | `visibility` | Read-only | [spec-kit-whatif](https://github.com/DevAbdullah90/spec-kit-whatif) |
|
|
186
187
|
| Wireframe Visual Feedback Loop | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement | `visibility` | Read+Write | [spec-kit-extension-wireframe](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) |
|
|
187
188
|
| Work IQ | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `integration` | Read-only | [spec-kit-workiq](https://github.com/sakitA/spec-kit-workiq) |
|
|
@@ -75,6 +75,8 @@ specify extension update [<name>]
|
|
|
75
75
|
|
|
76
76
|
Updates a specific extension, or all installed extensions if no name is given.
|
|
77
77
|
|
|
78
|
+
Bundled extensions (such as `agent-context` and `git`) have no download URL; their updates install from the copy shipped with the running spec-kit release. When the catalog advertises a newer version than your spec-kit release ships, the update is reported as requiring a spec-kit upgrade first.
|
|
79
|
+
|
|
78
80
|
## Enable / Disable an Extension
|
|
79
81
|
|
|
80
82
|
```bash
|
|
@@ -16,7 +16,9 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
|
|
|
16
16
|
| [Codex CLI](https://github.com/openai/codex) | `codex` | Skills-based integration; installs skills into `.agents/skills` and invokes them as `$speckit-<command>` |
|
|
17
17
|
| [Command Code](https://commandcode.ai/docs) | `command-code` | Skills-based integration; installs skills into `.commandcode/skills/` and invokes them as `$speckit-<command>` |
|
|
18
18
|
| [Cursor](https://cursor.sh/) | `cursor-agent` | |
|
|
19
|
+
| [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) | `dsh` | Skills-based integration; installs skills into `.dsh/skills` and invokes them as `/speckit-<command>` |
|
|
19
20
|
| [Devin for Terminal](https://cli.devin.ai/docs) | `devin` | Skills-based integration; installs skills into `.devin/skills/` and invokes them as `/speckit-<command>` |
|
|
21
|
+
| [Docker Agent](https://docs.docker.com/ai/docker-agent/) | `docker-agent` | Skills-based integration; installs skills into `.agents/skills/` (the same directory used by Codex and Zed). In the selected agent YAML, enable local skills with `skills: true` and provide filesystem read access. Detects either the standalone `docker-agent` binary or the Docker CLI plugin (`docker agent`). Configure workflow dispatch with `SPECKIT_INTEGRATION_DOCKER_AGENT_EXTRA_ARGS=./agent.yaml`; the Spec Kit prompt is appended after these arguments. Not multi-install safe by default because the skills directory is shared. |
|
|
20
22
|
| [Factory Droid](https://docs.factory.ai/cli/getting-started/overview) | `droid` | Skills-based integration; installs skills into `.factory/skills/` and invokes them as `/speckit-<command>` |
|
|
21
23
|
| [Firebender](https://firebender.com/) | `firebender` | IDE-based agent for Android Studio / IntelliJ |
|
|
22
24
|
| [Forge](https://forgecode.dev/) | `forge` | |
|
|
@@ -274,8 +274,7 @@ When releasing a new version:
|
|
|
274
274
|
A: The main catalog is for public extensions only. For private extensions:
|
|
275
275
|
|
|
276
276
|
- Host your own catalog.json file
|
|
277
|
-
-
|
|
278
|
-
- Not yet implemented - coming in Phase 4
|
|
277
|
+
- In a Spec Kit project, users add your catalog: `specify extension catalog add https://your-domain.com/catalog.json --name private-catalog`
|
|
279
278
|
|
|
280
279
|
### Q: How long does review take?
|
|
281
280
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-
|
|
3
|
+
"updated_at": "2026-09-02T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"adrkit": {
|
|
@@ -1039,13 +1039,13 @@
|
|
|
1039
1039
|
"charter": {
|
|
1040
1040
|
"name": "Charter",
|
|
1041
1041
|
"id": "charter",
|
|
1042
|
-
"description": "Compose
|
|
1042
|
+
"description": "Compose project constitutions from shared fragment registries",
|
|
1043
1043
|
"author": "Fyloss",
|
|
1044
|
-
"version": "0.
|
|
1045
|
-
"download_url": "https://github.com/Fyloss/spec-kit-charter/archive/refs/tags/v0.
|
|
1044
|
+
"version": "0.6.1",
|
|
1045
|
+
"download_url": "https://github.com/Fyloss/spec-kit-charter/archive/refs/tags/v0.6.1.zip",
|
|
1046
1046
|
"repository": "https://github.com/Fyloss/spec-kit-charter",
|
|
1047
1047
|
"homepage": "https://github.com/Fyloss/spec-kit-charter",
|
|
1048
|
-
"documentation": "https://github.com/Fyloss/spec-kit-charter/
|
|
1048
|
+
"documentation": "https://github.com/Fyloss/spec-kit-charter/blob/master/README.md",
|
|
1049
1049
|
"changelog": "https://github.com/Fyloss/spec-kit-charter/blob/master/CHANGELOG.md",
|
|
1050
1050
|
"license": "MIT",
|
|
1051
1051
|
"category": "process",
|
|
@@ -1066,15 +1066,15 @@
|
|
|
1066
1066
|
"tags": [
|
|
1067
1067
|
"constitution",
|
|
1068
1068
|
"governance",
|
|
1069
|
-
"
|
|
1070
|
-
"
|
|
1071
|
-
"
|
|
1069
|
+
"multi-repo",
|
|
1070
|
+
"composition",
|
|
1071
|
+
"fragments"
|
|
1072
1072
|
],
|
|
1073
1073
|
"verified": false,
|
|
1074
1074
|
"downloads": 0,
|
|
1075
1075
|
"stars": 0,
|
|
1076
1076
|
"created_at": "2026-07-06T00:00:00Z",
|
|
1077
|
-
"updated_at": "2026-
|
|
1077
|
+
"updated_at": "2026-09-02T00:00:00Z"
|
|
1078
1078
|
},
|
|
1079
1079
|
"ci-guard": {
|
|
1080
1080
|
"name": "CI Guard",
|
|
@@ -1783,10 +1783,10 @@
|
|
|
1783
1783
|
"figma": {
|
|
1784
1784
|
"name": "Spec Kit Figma",
|
|
1785
1785
|
"id": "figma",
|
|
1786
|
-
"description": "
|
|
1786
|
+
"description": "Grounds SpecKit spec/plan/tasks in Figma design context via REST or MCP, on macOS/Linux/Windows.",
|
|
1787
1787
|
"author": "Fyloss",
|
|
1788
|
-
"version": "1.
|
|
1789
|
-
"download_url": "https://github.com/Fyloss/spec-kit-figma/archive/refs/tags/
|
|
1788
|
+
"version": "3.1.1",
|
|
1789
|
+
"download_url": "https://github.com/Fyloss/spec-kit-figma/archive/refs/tags/v3.1.1.zip",
|
|
1790
1790
|
"repository": "https://github.com/Fyloss/spec-kit-figma",
|
|
1791
1791
|
"homepage": "https://github.com/Fyloss/spec-kit-figma",
|
|
1792
1792
|
"documentation": "https://github.com/Fyloss/spec-kit-figma/blob/main/docs/INSTALL.md",
|
|
@@ -1795,7 +1795,7 @@
|
|
|
1795
1795
|
"category": "integration",
|
|
1796
1796
|
"effect": "read-write",
|
|
1797
1797
|
"requires": {
|
|
1798
|
-
"speckit_version": ">=0.
|
|
1798
|
+
"speckit_version": ">=0.11.2",
|
|
1799
1799
|
"tools": [
|
|
1800
1800
|
{
|
|
1801
1801
|
"name": "git",
|
|
@@ -1820,8 +1820,8 @@
|
|
|
1820
1820
|
]
|
|
1821
1821
|
},
|
|
1822
1822
|
"provides": {
|
|
1823
|
-
"commands":
|
|
1824
|
-
"hooks":
|
|
1823
|
+
"commands": 7,
|
|
1824
|
+
"hooks": 11
|
|
1825
1825
|
},
|
|
1826
1826
|
"tags": [
|
|
1827
1827
|
"figma",
|
|
@@ -1834,7 +1834,7 @@
|
|
|
1834
1834
|
"downloads": 0,
|
|
1835
1835
|
"stars": 0,
|
|
1836
1836
|
"created_at": "2026-07-08T00:00:00Z",
|
|
1837
|
-
"updated_at": "2026-
|
|
1837
|
+
"updated_at": "2026-08-31T00:00:00Z"
|
|
1838
1838
|
},
|
|
1839
1839
|
"figma-starter": {
|
|
1840
1840
|
"name": "Figma Starter",
|
|
@@ -5796,6 +5796,45 @@
|
|
|
5796
5796
|
"created_at": "2026-04-20T00:00:00Z",
|
|
5797
5797
|
"updated_at": "2026-04-22T21:10:00Z"
|
|
5798
5798
|
},
|
|
5799
|
+
"vurnix": {
|
|
5800
|
+
"name": "Vurnix Honest Gate",
|
|
5801
|
+
"id": "vurnix",
|
|
5802
|
+
"description": "Deterministic three-state honest gate for AI-written code: compile + phantom-import + honest test count, executed as code — not agent self-review. PASS/BLOCK/UNPROVEN by exit code.",
|
|
5803
|
+
"author": "shiersa",
|
|
5804
|
+
"version": "0.1.1",
|
|
5805
|
+
"download_url": "https://github.com/shiersa/vurnix-spec-kit/releases/download/v0.1.1/vurnix-0.1.1.zip",
|
|
5806
|
+
"repository": "https://github.com/shiersa/vurnix-spec-kit",
|
|
5807
|
+
"homepage": "https://vurnix.dev",
|
|
5808
|
+
"documentation": "https://github.com/shiersa/vurnix-spec-kit#readme",
|
|
5809
|
+
"changelog": "",
|
|
5810
|
+
"license": "MIT",
|
|
5811
|
+
"category": "process",
|
|
5812
|
+
"effect": "read-only",
|
|
5813
|
+
"requires": {
|
|
5814
|
+
"speckit_version": ">=0.16.2",
|
|
5815
|
+
"tools": [
|
|
5816
|
+
{ "name": "python3", "version": ">=3.10", "required": true },
|
|
5817
|
+
{ "name": "vurnix", "version": ">=0.3.0", "required": true },
|
|
5818
|
+
{ "name": "bash", "required": true }
|
|
5819
|
+
]
|
|
5820
|
+
},
|
|
5821
|
+
"provides": {
|
|
5822
|
+
"commands": 1,
|
|
5823
|
+
"hooks": 1
|
|
5824
|
+
},
|
|
5825
|
+
"tags": [
|
|
5826
|
+
"deterministic",
|
|
5827
|
+
"honest-gate",
|
|
5828
|
+
"test-integrity",
|
|
5829
|
+
"quality",
|
|
5830
|
+
"fail-closed"
|
|
5831
|
+
],
|
|
5832
|
+
"verified": false,
|
|
5833
|
+
"downloads": 0,
|
|
5834
|
+
"stars": 0,
|
|
5835
|
+
"created_at": "2026-09-01T00:00:00Z",
|
|
5836
|
+
"updated_at": "2026-09-01T00:00:00Z"
|
|
5837
|
+
},
|
|
5799
5838
|
"whatif": {
|
|
5800
5839
|
"name": "What-if Analysis",
|
|
5801
5840
|
"id": "whatif",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-
|
|
3
|
+
"updated_at": "2026-08-31T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/integrations/catalog.json",
|
|
5
5
|
"integrations": {
|
|
6
6
|
"alquimia": {
|
|
@@ -66,6 +66,15 @@
|
|
|
66
66
|
"repository": "https://github.com/github/spec-kit",
|
|
67
67
|
"tags": ["cli", "skills", "factory"]
|
|
68
68
|
},
|
|
69
|
+
"dsh": {
|
|
70
|
+
"id": "dsh",
|
|
71
|
+
"name": "DeepSeek Harness",
|
|
72
|
+
"version": "1.0.0",
|
|
73
|
+
"description": "DeepSeek Harness (DSH) CLI skills-based integration",
|
|
74
|
+
"author": "spec-kit-core",
|
|
75
|
+
"repository": "https://github.com/github/spec-kit",
|
|
76
|
+
"tags": ["cli", "skills"]
|
|
77
|
+
},
|
|
69
78
|
"amp": {
|
|
70
79
|
"id": "amp",
|
|
71
80
|
"name": "Amp",
|
|
@@ -102,6 +111,15 @@
|
|
|
102
111
|
"repository": "https://github.com/github/spec-kit",
|
|
103
112
|
"tags": ["cli", "skills"]
|
|
104
113
|
},
|
|
114
|
+
"docker-agent": {
|
|
115
|
+
"id": "docker-agent",
|
|
116
|
+
"name": "Docker Agent",
|
|
117
|
+
"version": "1.0.0",
|
|
118
|
+
"description": "Docker Agent skills-based integration",
|
|
119
|
+
"author": "spec-kit-core",
|
|
120
|
+
"repository": "https://github.com/github/spec-kit",
|
|
121
|
+
"tags": ["cli", "skills", "docker"]
|
|
122
|
+
},
|
|
105
123
|
"qwen": {
|
|
106
124
|
"id": "qwen",
|
|
107
125
|
"name": "Qwen Code",
|
|
@@ -68,6 +68,8 @@ preset:
|
|
|
68
68
|
|
|
69
69
|
requires:
|
|
70
70
|
speckit_version: ">=0.1.0" # Required spec-kit version
|
|
71
|
+
extensions: # Optional: extensions this preset needs
|
|
72
|
+
- "companion-extension"
|
|
71
73
|
|
|
72
74
|
provides:
|
|
73
75
|
templates:
|
|
@@ -93,6 +95,41 @@ tags: # 2-5 relevant tags
|
|
|
93
95
|
- ✅ Command names use dot notation (e.g. `speckit.specify`)
|
|
94
96
|
- ✅ Tags are lowercase and descriptive
|
|
95
97
|
|
|
98
|
+
#### Declaring extension dependencies
|
|
99
|
+
|
|
100
|
+
If your preset overrides commands that call into an extension, declare it in
|
|
101
|
+
`requires.extensions`. Without the extension the preset still installs and the
|
|
102
|
+
overrides fall through to the core workflow, so nothing errors — the feature
|
|
103
|
+
just silently does less than the user expects. Declaring the dependency makes
|
|
104
|
+
`specify preset add` say so, and spell out how to resolve it.
|
|
105
|
+
|
|
106
|
+
Use a bare id, or a mapping when you need a version constraint or an optional
|
|
107
|
+
dependency:
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
requires:
|
|
111
|
+
speckit_version: ">=0.9.0"
|
|
112
|
+
extensions:
|
|
113
|
+
- "companion-extension" # required, any version
|
|
114
|
+
- id: "other-extension"
|
|
115
|
+
version: ">=1.2.0,<2" # optional PEP 440 specifier
|
|
116
|
+
required: false # optional, defaults to true
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`version` accepts any PEP 440 specifier, not just a lower bound — upper bounds
|
|
120
|
+
(`<2`), exact pins (`==1.2.0`), and exclusions (`!=1.3.0`) all work.
|
|
121
|
+
|
|
122
|
+
Notes:
|
|
123
|
+
|
|
124
|
+
- The field is optional. A preset that declares nothing behaves exactly as before.
|
|
125
|
+
- A dependency that is missing, stale, disabled, or version-unsatisfied produces a **warning, not a failure** — the install still succeeds.
|
|
126
|
+
- A disabled extension counts as unmet, and so does one whose registry entry survives after its files were removed. Resolution skips both, so the preset is just as inert as if the extension were absent.
|
|
127
|
+
- The warning names an exact command for the missing, stale, and disabled cases. For a version mismatch it states the constraint to satisfy rather than naming a command, because `specify extension update` only moves forward to the catalog release and cannot satisfy an upper bound, a pin, or a downgrade.
|
|
128
|
+
- A recorded version that cannot be parsed is treated as uncomparable rather than as a mismatch, so an extension whose registry version reads `unknown` is not reported as failing a constraint it was never evaluated against.
|
|
129
|
+
- An extension present on disk but absent from the registry counts as satisfied. Resolution admits unregistered directories, so the preset works and warning about it would be a false alarm — though with no recorded version, a `version` constraint cannot be checked against it.
|
|
130
|
+
- `required: false` documents an enhancing-but-optional extension and is never warned about.
|
|
131
|
+
- Declare it in `preset.yml`, not only in your catalog entry. The catalog is not consulted for `--dev` and `--from <url>` installs, so the manifest is the only copy present on every install path.
|
|
132
|
+
|
|
96
133
|
### 3. Test Locally
|
|
97
134
|
|
|
98
135
|
```bash
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#
|
|
10
10
|
# OPTIONS:
|
|
11
11
|
# --json Output in JSON format
|
|
12
|
+
# --require-spec Require spec.md to exist (for analysis phase)
|
|
12
13
|
# --require-tasks Require tasks.md to exist (for implementation phase)
|
|
13
14
|
# --include-tasks Include tasks.md in AVAILABLE_DOCS list
|
|
14
15
|
# --paths-only Only output path variables (no validation)
|
|
@@ -24,6 +25,7 @@ set -e
|
|
|
24
25
|
|
|
25
26
|
# Parse command line arguments
|
|
26
27
|
JSON_MODE=false
|
|
28
|
+
REQUIRE_SPEC=false
|
|
27
29
|
REQUIRE_TASKS=false
|
|
28
30
|
INCLUDE_TASKS=false
|
|
29
31
|
PATHS_ONLY=false
|
|
@@ -34,6 +36,9 @@ while [[ $# -gt 0 ]]; do
|
|
|
34
36
|
--json)
|
|
35
37
|
JSON_MODE=true
|
|
36
38
|
;;
|
|
39
|
+
--require-spec)
|
|
40
|
+
REQUIRE_SPEC=true
|
|
41
|
+
;;
|
|
37
42
|
--require-tasks)
|
|
38
43
|
REQUIRE_TASKS=true
|
|
39
44
|
;;
|
|
@@ -59,6 +64,7 @@ Consolidated prerequisite checking for Spec-Driven Development workflow.
|
|
|
59
64
|
|
|
60
65
|
OPTIONS:
|
|
61
66
|
--json Output in JSON format
|
|
67
|
+
--require-spec Require spec.md to exist (for analysis phase)
|
|
62
68
|
--require-tasks Require tasks.md to exist (for implementation phase)
|
|
63
69
|
--include-tasks Include tasks.md in AVAILABLE_DOCS list
|
|
64
70
|
--paths-only Only output path variables (no prerequisite validation)
|
|
@@ -142,6 +148,13 @@ if [[ ! -f "$IMPL_PLAN" ]]; then
|
|
|
142
148
|
exit 1
|
|
143
149
|
fi
|
|
144
150
|
|
|
151
|
+
# Check for spec.md if required
|
|
152
|
+
if $REQUIRE_SPEC && [[ ! -f "$FEATURE_SPEC" ]]; then
|
|
153
|
+
echo "ERROR: spec.md not found in $FEATURE_DIR" >&2
|
|
154
|
+
echo "Run $(format_speckit_command specify "$REPO_ROOT") first to create the feature specification." >&2
|
|
155
|
+
exit 1
|
|
156
|
+
fi
|
|
157
|
+
|
|
145
158
|
# Check for tasks.md if required
|
|
146
159
|
if $REQUIRE_TASKS && [[ ! -f "$TASKS" ]]; then
|
|
147
160
|
echo "ERROR: tasks.md not found in $FEATURE_DIR" >&2
|
|
@@ -902,12 +902,20 @@ except Exception as exc:
|
|
|
902
902
|
*'{CORE_TEMPLATE}'*) ;;
|
|
903
903
|
*) echo "Error: wrap strategy missing {CORE_TEMPLATE} placeholder" >&2; return 2 ;;
|
|
904
904
|
esac
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
905
|
+
# Consume the wrapper left to right instead of rewriting it in
|
|
906
|
+
# place. Rewriting re-scanned the string just modified, so base
|
|
907
|
+
# content holding a literal {CORE_TEMPLATE} reintroduced the
|
|
908
|
+
# token every pass and the loop never terminated. Advancing over
|
|
909
|
+
# ``rest`` bounds the work by the tokens in the original wrapper
|
|
910
|
+
# and leaves inserted content untouched, matching the single-pass
|
|
911
|
+
# semantics of .Replace()/.replace() in the PowerShell and Python
|
|
912
|
+
# ports.
|
|
913
|
+
local wrapped="" rest="$layer_content"
|
|
914
|
+
while [[ "$rest" == *'{CORE_TEMPLATE}'* ]]; do
|
|
915
|
+
wrapped="${wrapped}${rest%%\{CORE_TEMPLATE\}*}${content}"
|
|
916
|
+
rest="${rest#*\{CORE_TEMPLATE\}}"
|
|
909
917
|
done
|
|
910
|
-
content="$
|
|
918
|
+
content="${wrapped}${rest}"
|
|
911
919
|
;;
|
|
912
920
|
*) echo "Error: unknown strategy '$strat'" >&2; return 2 ;;
|
|
913
921
|
esac
|
|
@@ -4,7 +4,6 @@ set -e
|
|
|
4
4
|
|
|
5
5
|
# Parse command line arguments
|
|
6
6
|
JSON_MODE=false
|
|
7
|
-
ARGS=()
|
|
8
7
|
|
|
9
8
|
for arg in "$@"; do
|
|
10
9
|
case "$arg" in
|
|
@@ -18,7 +17,8 @@ for arg in "$@"; do
|
|
|
18
17
|
exit 0
|
|
19
18
|
;;
|
|
20
19
|
*)
|
|
21
|
-
|
|
20
|
+
echo "ERROR: Unknown option '$arg'" >&2
|
|
21
|
+
exit 1
|
|
22
22
|
;;
|
|
23
23
|
esac
|
|
24
24
|
done
|