specify-cli 1.0.7__tar.gz → 1.0.9__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.7 → specify_cli-1.0.9}/.github/ISSUE_TEMPLATE/agent_request.yml +13 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/ISSUE_TEMPLATE/bug_report.yml +13 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/ISSUE_TEMPLATE/feature_request.yml +13 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/PULL_REQUEST_TEMPLATE.md +4 -2
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/aw/actions-lock.json +5 -0
- specify_cli-1.0.9/.github/workflows/RELEASE-PROCESS.md +245 -0
- specify_cli-1.0.9/.github/workflows/add-community-bundle.lock.yml +2010 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/add-community-bundle.md +19 -1
- specify_cli-1.0.9/.github/workflows/add-community-extension.lock.yml +1993 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/add-community-extension.md +20 -1
- specify_cli-1.0.9/.github/workflows/add-community-preset.lock.yml +1993 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/add-community-preset.md +20 -1
- specify_cli-1.0.9/.github/workflows/bug-fix.lock.yml +1997 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/bug-fix.md +12 -1
- specify_cli-1.0.9/.github/workflows/bug-test.lock.yml +1937 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/bug-test.md +16 -4
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/codeql.yml +2 -2
- specify_cli-1.0.9/.github/workflows/feature-assess.lock.yml +1956 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/feature-assess.md +6 -2
- {specify_cli-1.0.7 → specify_cli-1.0.9}/AGENTS.md +11 -2
- {specify_cli-1.0.7 → specify_cli-1.0.9}/CHANGELOG.md +50 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/CONTRIBUTING.md +16 -8
- {specify_cli-1.0.7 → specify_cli-1.0.9}/PKG-INFO +1 -1
- specify_cli-1.0.9/bundles/assess/README.md +40 -0
- specify_cli-1.0.9/bundles/assess/bundle.yml +25 -0
- specify_cli-1.0.9/bundles/bugfix/README.md +38 -0
- specify_cli-1.0.9/bundles/bugfix/bundle.yml +25 -0
- specify_cli-1.0.9/bundles/catalog.json +51 -0
- specify_cli-1.0.9/design/cli.md +303 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/community/extensions.md +7 -4
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/community/presets.md +1 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/concepts/sdd.md +5 -0
- specify_cli-1.0.9/docs/guides/contract-driven-development.md +264 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/guides/monorepo.md +6 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/bundles.md +22 -1
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/core.md +18 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/integrations.md +3 -1
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/toc.yml +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/catalog.community.json +178 -51
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/catalog.community.json +32 -1
- {specify_cli-1.0.7 → specify_cli-1.0.9}/pyproject.toml +6 -3
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/bash/common.sh +1 -1
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/bash/create-new-feature.sh +4 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/powershell/common.ps1 +1 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/powershell/create-new-feature.ps1 +4 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/python/create_new_feature.py +7 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/__init__.py +9 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_github_http.py +103 -7
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_invocation_style.py +1 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/agents.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/authentication/http.py +6 -2
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/adapters.py +117 -22
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/primitives.py +32 -8
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/commands/bundle/__init__.py +22 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/events.py +18 -5
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/extensions/__init__.py +63 -8
- specify_cli-1.0.9/src/specify_cli/extensions/_command_update_artifacts.py +164 -0
- specify_cli-1.0.9/src/specify_cli/extensions/_command_update_discovery.py +145 -0
- specify_cli-1.0.9/src/specify_cli/extensions/_command_update_transaction.py +871 -0
- specify_cli-1.0.9/src/specify_cli/extensions/_commands.py +690 -0
- specify_cli-1.0.9/src/specify_cli/extensions/catalog/__init__.py +32 -0
- specify_cli-1.0.9/src/specify_cli/extensions/catalog/_helpers.py +37 -0
- specify_cli-1.0.9/src/specify_cli/extensions/catalog/command_add.py +102 -0
- specify_cli-1.0.9/src/specify_cli/extensions/catalog/command_list.py +94 -0
- specify_cli-1.0.9/src/specify_cli/extensions/catalog/command_remove.py +66 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_add.py +292 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_disable.py +62 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_enable.py +84 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_info.py +261 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_list.py +75 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_remove.py +86 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_search.py +111 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_set_priority.py +66 -0
- specify_cli-1.0.9/src/specify_cli/extensions/command_update.py +25 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/agy/__init__.py +17 -4
- specify_cli-1.0.9/src/specify_cli/integrations/amp/__init__.py +52 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/base.py +5 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/bob/__init__.py +2 -2
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/codex/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/copilot/__init__.py +1 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/cursor_agent/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/devin/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/docker_agent/__init__.py +3 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/droid/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/dsh/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/generic/__init__.py +113 -2
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/goose/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/grok/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/hermes/__init__.py +1 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/muse/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/omp/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/opencode/__init__.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/rovodev/__init__.py +1 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/_commands.py +2 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/engine.py +31 -1
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/overlays/merge.py +66 -7
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/command/__init__.py +3 -2
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/prompt/__init__.py +10 -5
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/converge.md +6 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/conftest.py +5 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/contract/test_bundle_cli.py +162 -8
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/contract/test_catalog_schema.py +13 -0
- specify_cli-1.0.9/tests/contract/test_firstparty_bundle_catalog_consistency.py +155 -0
- specify_cli-1.0.9/tests/contract/test_wheel_bundled_workflows.py +52 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integration/test_bundler_offline.py +59 -3
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_base.py +1 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_cli.py +0 -68
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_events.py +118 -1
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_agy.py +102 -11
- specify_cli-1.0.9/tests/integrations/test_integration_amp.py +84 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_bob.py +22 -6
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_generic.py +192 -1
- specify_cli-1.0.9/tests/specify_cli/__init__.py +1 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/__init__.py +6 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/_helpers.py +46 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/catalog/__init__.py +1 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/catalog/test_command_add.py +196 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/catalog/test_command_list.py +129 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/catalog/test_command_remove.py +75 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/conftest.py +89 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_add.py +1270 -0
- specify_cli-1.0.7/tests/test_extension_add_path_traversal.py → specify_cli-1.0.9/tests/specify_cli/extensions/test_command_add_path_traversal.py +4 -1
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_disable.py +55 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_enable.py +52 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_info.py +241 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_list.py +110 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_remove.py +102 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_search.py +102 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_set_priority.py +142 -0
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_update.py +863 -0
- specify_cli-1.0.7/tests/test_extension_content_staleness.py → specify_cli-1.0.9/tests/specify_cli/extensions/test_command_update_artifacts.py +3 -2
- specify_cli-1.0.9/tests/specify_cli/extensions/test_command_update_discovery.py +102 -0
- specify_cli-1.0.7/tests/test_extension_update_hardening.py → specify_cli-1.0.9/tests/specify_cli/extensions/test_command_update_transaction.py +5 -0
- specify_cli-1.0.9/tests/test_bug_fix_workflow.py +102 -0
- specify_cli-1.0.9/tests/test_converge_template_scaffold.py +37 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_create_new_feature_python_parity.py +54 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_extensions.py +312 -3153
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_github_http.py +169 -0
- specify_cli-1.0.9/tests/test_github_workflows.py +1104 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_workflows.py +166 -0
- specify_cli-1.0.9/tests/unit/test_bundler_adapters.py +517 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_primitives.py +7 -2
- specify_cli-1.0.9/tests/workflows/test_bundled_bugfix_assess_workflows.py +93 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_overlay_merge.py +197 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/workflows/README.md +5 -1
- specify_cli-1.0.9/workflows/assess/workflow.yml +62 -0
- specify_cli-1.0.9/workflows/bugfix/workflow.yml +50 -0
- specify_cli-1.0.9/workflows/catalog.json +37 -0
- specify_cli-1.0.7/.github/workflows/RELEASE-PROCESS.md +0 -191
- specify_cli-1.0.7/.github/workflows/add-community-bundle.lock.yml +0 -1745
- specify_cli-1.0.7/.github/workflows/add-community-extension.lock.yml +0 -1725
- specify_cli-1.0.7/.github/workflows/add-community-preset.lock.yml +0 -1725
- specify_cli-1.0.7/.github/workflows/bug-fix.lock.yml +0 -1732
- specify_cli-1.0.7/.github/workflows/bug-test.lock.yml +0 -1655
- specify_cli-1.0.7/.github/workflows/feature-assess.lock.yml +0 -1677
- specify_cli-1.0.7/src/specify_cli/extensions/_commands.py +0 -2911
- specify_cli-1.0.7/src/specify_cli/integrations/amp/__init__.py +0 -20
- specify_cli-1.0.7/tests/integrations/test_integration_amp.py +0 -10
- specify_cli-1.0.7/tests/test_github_workflows.py +0 -356
- specify_cli-1.0.7/tests/unit/test_bundler_adapters.py +0 -203
- specify_cli-1.0.7/workflows/catalog.json +0 -16
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.devcontainer/post-create.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.editorconfig +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.gitattributes +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/CODEOWNERS +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/dependabot.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/scripts/check_extension_version_bump.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/scripts/check_security_requirements.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/security-audit-requirements.txt +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/skills/code-review/SKILL.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/docs.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/extension-version-guard.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/lint.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/publish-pypi.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/release.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/security.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/stale.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.github/workflows/test.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.gitignore +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.pre-commit-config.yaml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/.zenodo.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/CITATION.cff +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/DEVELOPMENT.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/LICENSE +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/README.zh-CN.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/SECURITY.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/SUPPORT.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/bundles/catalog.community.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/.gitignore +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/community/bundles.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/community/friends.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/community/overview.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/community/walkthroughs.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/concepts/complex-features.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/concepts/spec-of-specs.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/docfx.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/guides/assessment.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/guides/bugfix.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/guides/customization.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/guides/existing-projects.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/history.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/images/spec-kit-logo.webp +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/index.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/install/air-gapped.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/install/one-time.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/install/pipx.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/install/pypi.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/install/uv.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/installation.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/local-development.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/quickstart.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/agentic-assessment.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/agentic-bugfix.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/agentic-sdd.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/artifacts.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/authentication.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/extensions.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/overview.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/presets.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/reference/workflows.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/template/public/main.css +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/docs/upgrade.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/developer/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/agent-context-defaults.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/assess/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/assess/commands/speckit.assess.decide.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/assess/commands/speckit.assess.define.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/assess/commands/speckit.assess.intake.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/assess/commands/speckit.assess.research.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/assess/commands/speckit.assess.shape.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/assess/extension.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/bug/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/bug/extension.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/catalog.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/config-template.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/extension.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/git-config.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/python/auto_commit.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/python/git_common.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/git/scripts/python/initialize_repo.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/selftest/extension.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/.gitignore +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/LICENSE +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/commands/example.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/config-template.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/extensions/template/extension.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/integrations/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/integrations/catalog.community.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/integrations/catalog.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/media/logo_large.webp +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/media/logo_small.webp +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/media/specify_cli.gif +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/newsletters/2026-April.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/newsletters/2026-August.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/newsletters/2026-February.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/newsletters/2026-July.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/newsletters/2026-June.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/newsletters/2026-March.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/newsletters/2026-May.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/PUBLISHING.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/catalog.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/constitution-sync/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/constitution-sync/commands/speckit.constitution.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/constitution-sync/preset.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/lean/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/lean/preset.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/scaffold/README.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/scaffold/preset.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/preset.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/bash/resolve-template.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/powershell/resolve-template.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/python/check_prerequisites.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/python/common.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/python/resolve_template.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/python/setup_plan.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/scripts/python/setup_tasks.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/spec-driven.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/spec-kit.code-workspace +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_assets.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_console.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_download_security.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_installed_list_json.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_project.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_utils.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/_version.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/artifacts/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/artifacts/_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/artifacts/_identifiers.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/artifacts/catalog.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/artifacts/models.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/artifacts/resolution.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/lib/yamlio.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/models/catalog.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/models/manifest.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/models/records.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/installer.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/commands/event.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/commands/init.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/alquimia/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/claude/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/command_code/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/presets/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/presets/_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/catalog.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/expressions.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/overlays/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/overlays/_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/overlays/composer.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/overlays/schema.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/slot/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/checklist-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/analyze.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/checklist.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/clarify.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/constitution.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/implement.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/plan.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/specify.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/tasks.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/commands/taskstoissues.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/constitution-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/plan-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/spec-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/tasks-template.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/templates/vscode-settings.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/auth_helpers.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/bundler_helpers.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/contract/test_bundled_extension_versions.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/contract/test_extension_version_guard_script.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/contract/test_manifest_schema.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/contract/test_wheel_bundled_presets.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/contract/test_wheel_core_pack_scripts.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/assess/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/assess/test_assess_extension.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/git/test_git_extension.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/hooks/TESTING.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/hooks/plan.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/hooks/spec.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/hooks/tasks.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/http_helpers.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integration/test_bundler_install_flow.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/__init__.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/conftest.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_alquimia.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_command_code.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_docker_agent.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_droid.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_dsh.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_grok.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_muse.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_registry.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/parity_helpers.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_artifact_command.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_artifact_command_parity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_authentication.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_branch_numbering.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_check_prerequisites_python_parity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_check_tool.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_clarify_stage_gate.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_cli_version.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_command_template_hooks.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_command_template_py_scripts.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_commands_package.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_console_imports.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_constitution_template_sync_report.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_download_security.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_event_command.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_extension_registration.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_extension_skills.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_init_dir.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_init_output_markup.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_installed_list_json.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_merge.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_post_process.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_presets.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_resolve_template_python_parity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_security_workflow.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_setup_plan_python_parity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_setup_tasks.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_setup_tasks_python_parity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_shared_infra_gitignore.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_skill_placeholder_py.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_specify_template_numbering.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_tasks_template_constraints.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_upgrade.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_utils.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_version_imports.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundle_download_url.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_catalog_config.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_records.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_bundler_yamlio.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/unit/test_condition_expression_block.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/conftest.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_bundled_speckit_workflow.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_overlay_commands.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_overlay_composer.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_overlay_layer_sources.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_overlay_schema.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_overlay_security.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_resolver_integration.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/tests/workflows/test_slot_step.py +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/workflows/PUBLISHING.md +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/workflows/catalog.community.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/workflows/step-catalog.community.json +0 -0
- {specify_cli-1.0.7 → specify_cli-1.0.9}/workflows/step-catalog.json +0 -0
|
@@ -139,3 +139,16 @@ body:
|
|
|
139
139
|
label: Additional Context
|
|
140
140
|
description: Any other relevant information about this agent
|
|
141
141
|
placeholder: Screenshots, community links, comparison to existing agents, etc.
|
|
142
|
+
|
|
143
|
+
- type: textarea
|
|
144
|
+
id: ai-disclosure
|
|
145
|
+
attributes:
|
|
146
|
+
label: AI Disclosure
|
|
147
|
+
description: >-
|
|
148
|
+
Per our [Contributing guidelines](https://github.com/github/spec-kit/blob/main/CONTRIBUTING.md#ai-contributions-in-spec-kit),
|
|
149
|
+
any AI assistance used to create this issue must be disclosed. If you used AI, name the agent/tool, model(s),
|
|
150
|
+
settings/mode (reasoning effort; autonomous vs. human-supervised), and extent. Otherwise leave this as "N/A".
|
|
151
|
+
This does not change how your issue is handled — it just gives maintainers visibility into model/agent usage.
|
|
152
|
+
value: "N/A"
|
|
153
|
+
validations:
|
|
154
|
+
required: true
|
|
@@ -138,3 +138,16 @@ body:
|
|
|
138
138
|
label: Additional Context
|
|
139
139
|
description: Add any other context about the problem
|
|
140
140
|
placeholder: Screenshots, related issues, workarounds attempted, etc.
|
|
141
|
+
|
|
142
|
+
- type: textarea
|
|
143
|
+
id: ai-disclosure
|
|
144
|
+
attributes:
|
|
145
|
+
label: AI Disclosure
|
|
146
|
+
description: >-
|
|
147
|
+
Per our [Contributing guidelines](https://github.com/github/spec-kit/blob/main/CONTRIBUTING.md#ai-contributions-in-spec-kit),
|
|
148
|
+
any AI assistance used to create this issue must be disclosed. If you used AI, name the agent/tool, model(s),
|
|
149
|
+
settings/mode (reasoning effort; autonomous vs. human-supervised), and extent. Otherwise leave this as "N/A".
|
|
150
|
+
This does not change how your issue is handled — it just gives maintainers visibility into model/agent usage.
|
|
151
|
+
value: "N/A"
|
|
152
|
+
validations:
|
|
153
|
+
required: true
|
|
@@ -124,3 +124,16 @@ body:
|
|
|
124
124
|
label: Additional Context
|
|
125
125
|
description: Add any other context, screenshots, or examples
|
|
126
126
|
placeholder: Links to similar features, mockups, related discussions, etc.
|
|
127
|
+
|
|
128
|
+
- type: textarea
|
|
129
|
+
id: ai-disclosure
|
|
130
|
+
attributes:
|
|
131
|
+
label: AI Disclosure
|
|
132
|
+
description: >-
|
|
133
|
+
Per our [Contributing guidelines](https://github.com/github/spec-kit/blob/main/CONTRIBUTING.md#ai-contributions-in-spec-kit),
|
|
134
|
+
any AI assistance used to create this issue must be disclosed. If you used AI, name the agent/tool, model(s),
|
|
135
|
+
settings/mode (reasoning effort; autonomous vs. human-supervised), and extent. Otherwise leave this as "N/A".
|
|
136
|
+
This does not change how your issue is handled — it just gives maintainers visibility into model/agent usage.
|
|
137
|
+
value: "N/A"
|
|
138
|
+
validations:
|
|
139
|
+
required: true
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
<!-- See: https://github.com/github/spec-kit/blob/main/CONTRIBUTING.md#ai-contributions-in-spec-kit -->
|
|
17
17
|
|
|
18
18
|
- [ ] I **did not** use AI assistance for this contribution
|
|
19
|
-
- [ ] I **did** use AI assistance (
|
|
19
|
+
- [ ] I **did** use AI assistance (fill in the disclosure below)
|
|
20
20
|
|
|
21
|
-
<!-- If you used AI,
|
|
21
|
+
<!-- If you used AI assistance, replace "N/A" below with a free-form disclosure that names the agent/tool, model(s), settings/mode (reasoning effort; autonomous vs. human-supervised), and extent (docs vs. code generation). This does not change how much scrutiny your PR receives — the same evidence bar applies to everyone. It just gives maintainers visibility into model/agent usage. -->
|
|
22
|
+
|
|
23
|
+
**AI disclosure:** N/A
|
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
"version": "v10.0.1",
|
|
36
36
|
"sha": "20cfd1bf945f4377ade1205e4dbc17946fc9a30d"
|
|
37
37
|
},
|
|
38
|
+
"github/gh-aw-actions/setup-cli@v0.88.7": {
|
|
39
|
+
"repo": "github/gh-aw-actions/setup-cli",
|
|
40
|
+
"version": "v0.88.7",
|
|
41
|
+
"sha": "5e508589e03a7757a7e05b26e834292f5445bfb6"
|
|
42
|
+
},
|
|
38
43
|
"github/gh-aw-actions/setup@v0.88.7": {
|
|
39
44
|
"repo": "github/gh-aw-actions/setup",
|
|
40
45
|
"version": "v0.88.7",
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Release Process
|
|
2
|
+
|
|
3
|
+
This document describes the automated release process for Spec Kit.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The release process is split into three workflows:
|
|
8
|
+
|
|
9
|
+
1. **Release Trigger Workflow** (`release-trigger.yml`) - Manages versioning, creates the tag, and opens the release PR
|
|
10
|
+
2. **Release Workflow** (`release.yml`) - Creates the GitHub Release and release notes
|
|
11
|
+
3. **Publish to PyPI Workflow** (`publish-pypi.yml`) - Builds and publishes the Python package from an exact tag
|
|
12
|
+
|
|
13
|
+
This separation ensures that git tags point to commits with the correct version in `pyproject.toml` and lets maintainers recover the GitHub and PyPI publishing steps independently.
|
|
14
|
+
|
|
15
|
+
## Before Creating a Release
|
|
16
|
+
|
|
17
|
+
**Important**: Write clear, descriptive commit messages!
|
|
18
|
+
|
|
19
|
+
### How CHANGELOG.md Works
|
|
20
|
+
|
|
21
|
+
The CHANGELOG is **automatically generated** from your git commit messages:
|
|
22
|
+
|
|
23
|
+
1. **During Development**: Write clear, descriptive commit messages:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
git commit -m "feat: Add new authentication feature"
|
|
27
|
+
git commit -m "fix: Resolve timeout issue in API client (#123)"
|
|
28
|
+
git commit -m "docs: Update installation instructions"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
2. **When Releasing**: The release trigger workflow automatically:
|
|
32
|
+
- Finds all commits since the last release tag
|
|
33
|
+
- Formats them as changelog entries
|
|
34
|
+
- Inserts them into CHANGELOG.md
|
|
35
|
+
- Commits the updated changelog before creating the new tag
|
|
36
|
+
|
|
37
|
+
### Commit Message Best Practices
|
|
38
|
+
|
|
39
|
+
Good commit messages make good changelogs:
|
|
40
|
+
|
|
41
|
+
- **Be descriptive**: "Add user authentication" not "Update files"
|
|
42
|
+
- **Reference issues/PRs**: Include `(#123)` for automated linking
|
|
43
|
+
- **Use conventional commits** (optional): `feat:`, `fix:`, `docs:`, `chore:`
|
|
44
|
+
- **Keep it concise**: One line is ideal, details go in commit body
|
|
45
|
+
|
|
46
|
+
**Example commits that become good changelog entries:**
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
fix: prepend YAML frontmatter to Cursor .mdc files (#1699)
|
|
50
|
+
feat: add generic agent support with customizable command directories (#1639)
|
|
51
|
+
docs: document dual-catalog system for extensions (#1689)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Creating a Release
|
|
55
|
+
|
|
56
|
+
### Option 1: Auto-Increment (Recommended for patches)
|
|
57
|
+
|
|
58
|
+
1. Go to **Actions** → **Release Trigger**
|
|
59
|
+
2. Click **Run workflow**
|
|
60
|
+
3. Leave the version field **empty**
|
|
61
|
+
4. Click **Run workflow**
|
|
62
|
+
|
|
63
|
+
The workflow will:
|
|
64
|
+
|
|
65
|
+
- Auto-increment the patch version (e.g., `0.1.10` → `0.1.11`)
|
|
66
|
+
- Update `pyproject.toml`
|
|
67
|
+
- Update `CHANGELOG.md` by adding a new section for the release based on commits since the last tag
|
|
68
|
+
- Commit changes to a `chore/release-vX.Y.Z` branch
|
|
69
|
+
- Create and push the git tag from that branch
|
|
70
|
+
- Bump the release branch to the next patch development version (for example, `1.2.3` → `1.2.4.dev0`)
|
|
71
|
+
- Open a PR to merge the version bump into `main`
|
|
72
|
+
- Trigger the release workflow automatically via the tag push
|
|
73
|
+
|
|
74
|
+
### Option 2: Manual Version (For major/minor bumps)
|
|
75
|
+
|
|
76
|
+
1. Go to **Actions** → **Release Trigger**
|
|
77
|
+
2. Click **Run workflow**
|
|
78
|
+
3. Enter the desired version (e.g., `0.2.0` or `v0.2.0`)
|
|
79
|
+
4. Click **Run workflow**
|
|
80
|
+
|
|
81
|
+
The workflow will:
|
|
82
|
+
|
|
83
|
+
- Use your specified version
|
|
84
|
+
- Update `pyproject.toml`
|
|
85
|
+
- Update `CHANGELOG.md` by adding a new section for the release based on commits since the last tag
|
|
86
|
+
- Commit changes to a `chore/release-vX.Y.Z` branch
|
|
87
|
+
- Create and push the git tag from that branch
|
|
88
|
+
- Bump the release branch to the next patch development version (for example, `1.2.3` → `1.2.4.dev0`)
|
|
89
|
+
- Open a PR to merge the version bump into `main`
|
|
90
|
+
- Trigger the release workflow automatically via the tag push
|
|
91
|
+
|
|
92
|
+
## What Happens Next
|
|
93
|
+
|
|
94
|
+
The release trigger pushes a `chore/release-vX.Y.Z` branch with the release version commit, then pushes the tag pointing to that commit. After the tag push, two paths proceed independently:
|
|
95
|
+
|
|
96
|
+
- The **Release Workflow** creates a GitHub Release with generated release notes. No per-agent ZIP assets are built or uploaded; GitHub still provides its standard source archives.
|
|
97
|
+
- The **Release Trigger Workflow** continues by bumping the release branch to the next patch development version and opening a PR to merge both version commits into `main`.
|
|
98
|
+
|
|
99
|
+
GitHub Release creation may finish before or after the development bump and PR creation. Run the **Publish to PyPI Workflow** manually with the same tag to build and publish the wheel and source distribution.
|
|
100
|
+
|
|
101
|
+
> **Note**: The GitHub Release and PyPI workflows do not depend on each other. Waiting for the GitHub Release to complete before publishing to PyPI makes the release state easier to verify. Merge the auto-opened PR after publishing to keep `main` on the next development version.
|
|
102
|
+
|
|
103
|
+
## Workflow Details
|
|
104
|
+
|
|
105
|
+
### Release Trigger Workflow
|
|
106
|
+
|
|
107
|
+
**File**: `.github/workflows/release-trigger.yml`
|
|
108
|
+
|
|
109
|
+
**Trigger**: Manual (`workflow_dispatch`)
|
|
110
|
+
|
|
111
|
+
**Permissions Required**: `contents: write`, `pull-requests: write`
|
|
112
|
+
|
|
113
|
+
**Steps**:
|
|
114
|
+
|
|
115
|
+
1. Checkout repository
|
|
116
|
+
2. Determine version (manual or auto-increment)
|
|
117
|
+
3. Check if tag already exists (prevents duplicates)
|
|
118
|
+
4. Create `chore/release-vX.Y.Z` branch
|
|
119
|
+
5. Update `pyproject.toml`
|
|
120
|
+
6. Update `CHANGELOG.md` from git commits
|
|
121
|
+
7. Commit changes
|
|
122
|
+
8. Push branch and tag
|
|
123
|
+
9. Bump `pyproject.toml` to the next patch development version and push the branch
|
|
124
|
+
10. Open PR to merge the release and development version commits into `main`
|
|
125
|
+
|
|
126
|
+
### Release Workflow
|
|
127
|
+
|
|
128
|
+
**File**: `.github/workflows/release.yml`
|
|
129
|
+
|
|
130
|
+
**Trigger**: Tag push (`v*`)
|
|
131
|
+
|
|
132
|
+
**Permissions Required**: `contents: write`
|
|
133
|
+
|
|
134
|
+
**Steps**:
|
|
135
|
+
|
|
136
|
+
1. Checkout repository at tag
|
|
137
|
+
2. Extract version from tag name
|
|
138
|
+
3. Check if release already exists
|
|
139
|
+
4. Generate release notes from commits
|
|
140
|
+
5. Create the GitHub Release without additional uploaded assets
|
|
141
|
+
|
|
142
|
+
### Publish to PyPI Workflow
|
|
143
|
+
|
|
144
|
+
**File**: `.github/workflows/publish-pypi.yml`
|
|
145
|
+
|
|
146
|
+
**Trigger**: Manual (`workflow_dispatch`) with the exact release tag
|
|
147
|
+
|
|
148
|
+
**Permissions Required**: `contents: read`, `actions: write` for the build job; `actions: read`, `id-token: write` for the publish job
|
|
149
|
+
|
|
150
|
+
**Steps**:
|
|
151
|
+
|
|
152
|
+
1. Validate that the input uses the strict `vX.Y.Z` tag format
|
|
153
|
+
2. Checkout `refs/tags/vX.Y.Z`
|
|
154
|
+
3. Verify that the tag version exactly matches the version in `pyproject.toml`
|
|
155
|
+
4. Build the wheel and source distribution with `uv build`
|
|
156
|
+
5. Transfer the distributions between jobs as a GitHub Actions artifact
|
|
157
|
+
6. Publish them to PyPI with `uv publish` and Trusted Publishing
|
|
158
|
+
|
|
159
|
+
## Version Constraints
|
|
160
|
+
|
|
161
|
+
- Tags must follow format: `v{MAJOR}.{MINOR}.{PATCH}`
|
|
162
|
+
- Example valid versions: `v0.1.11`, `v0.2.0`, `v1.0.0`
|
|
163
|
+
- Auto-increment only bumps patch version
|
|
164
|
+
- Cannot create duplicate tags (workflow will fail)
|
|
165
|
+
|
|
166
|
+
## Benefits of This Approach
|
|
167
|
+
|
|
168
|
+
✅ **Version Consistency**: Git tags point to commits with matching `pyproject.toml` version
|
|
169
|
+
|
|
170
|
+
✅ **Single Source of Truth**: Version set once, used everywhere
|
|
171
|
+
|
|
172
|
+
✅ **Prevents Drift**: No more manual version synchronization needed
|
|
173
|
+
|
|
174
|
+
✅ **Independent Publishing**: GitHub Release creation and PyPI publishing can be verified and recovered separately
|
|
175
|
+
|
|
176
|
+
✅ **Flexibility**: Supports both auto-increment and manual versioning
|
|
177
|
+
|
|
178
|
+
## Troubleshooting
|
|
179
|
+
|
|
180
|
+
### No Commits Since Last Release
|
|
181
|
+
|
|
182
|
+
If you run the release trigger workflow when there are no new commits since the last tag:
|
|
183
|
+
|
|
184
|
+
- The workflow will still succeed
|
|
185
|
+
- The CHANGELOG will show "- Initial release" if it's the first release
|
|
186
|
+
- Or it will be empty if there are no commits
|
|
187
|
+
- Consider adding meaningful commits before releasing
|
|
188
|
+
|
|
189
|
+
**Best Practice**: Use descriptive commit messages - they become your changelog!
|
|
190
|
+
|
|
191
|
+
### Tag Already Exists
|
|
192
|
+
|
|
193
|
+
If you see "Error: Tag vX.Y.Z already exists!", inspect the existing tag, GitHub Release, and PyPI version before taking action. Do not move or delete a tag for a version that has already been published to PyPI. PyPI does not allow an uploaded distribution filename to be reused, even after deletion.
|
|
194
|
+
|
|
195
|
+
If the existing tag identifies the intended release, keep it and recover any missing outputs using the guidance below. Choose a new version when publishing different release contents under a version that is already in use. Only consider removing an erroneous tag when you have confirmed that the version was not published to PyPI and that no consumers rely on it.
|
|
196
|
+
|
|
197
|
+
### Recovering an Incomplete Release
|
|
198
|
+
|
|
199
|
+
Verify the release branch/tag, GitHub Release, wheel (`.whl`), and source distribution (`.tar.gz`) separately. A PyPI version page alone does not confirm that both distributions were uploaded.
|
|
200
|
+
|
|
201
|
+
| State | Recovery |
|
|
202
|
+
|---|---|
|
|
203
|
+
| Release branch exists, tag is missing | Inspect the failed run and confirm the intended release commit has package version `X.Y.Z`. Create or reuse the local `vX.Y.Z` tag only if it points to that commit, then push it. Do not tag a subsequent `.dev0` commit. Complete any missing development bump or PR as described below. |
|
|
204
|
+
| Tag exists, release branch development bump or PR is incomplete | Keep the tag unchanged. Inspect `chore/release-vX.Y.Z` and any existing PR; restore the branch from the release commit if missing, apply the next patch development bump if needed, and open or reuse the PR into `main`. Merge after publication is complete. Do not rerun Release Trigger for the existing tag. |
|
|
205
|
+
| Tag exists, GitHub Release is missing | Confirm that the tag points to the intended release commit, then create the GitHub Release from that existing tag with the same notes format used by `release.yml`. |
|
|
206
|
+
| Valid tag exists, neither wheel nor sdist is published to PyPI | Run **Publish to PyPI** manually with the exact release tag, independently of GitHub Release creation. |
|
|
207
|
+
| PyPI version exists, GitHub Release is missing | Keep the existing tag unchanged and create the GitHub Release from it. |
|
|
208
|
+
| Wheel is published, sdist is missing | Recover the original build artifacts and publish the missing sdist using the procedure below; verify the existing wheel matches exactly. |
|
|
209
|
+
| Sdist is published, wheel is missing | Recover the original build artifacts and publish the missing wheel using the procedure below; verify the existing sdist matches exactly. |
|
|
210
|
+
|
|
211
|
+
For partial PyPI uploads, use a recovery procedure that does not depend on a failed-job rerun retaining access to the original build:
|
|
212
|
+
|
|
213
|
+
1. Inspect the original **Publish to PyPI** run and the files already on PyPI. Download and preserve its original `dist` artifact before any rerun, if it is still accessible, and confirm the run used the intended release tag.
|
|
214
|
+
2. Extract the wheel and sdist into a clean `dist/` directory. Compare the SHA-256 hashes of files whose names are already on PyPI with the hashes published by PyPI; they must match exactly.
|
|
215
|
+
3. Have a maintainer with PyPI publishing permission run `uv publish` against that directory using an authorized PyPI token. The current workflow accepts only a tag and cannot take a saved artifact as input; its Trusted Publishing identity does not grant credentials to a local shell. With PyPI, [repeating `uv publish` skips existing identical files](https://docs.astral.sh/uv/guides/package/#publishing-your-package) and uploads missing files. Confirm that both the wheel and sdist are present afterward.
|
|
216
|
+
|
|
217
|
+
If the original artifact is unavailable, rebuild from the unchanged release tag and perform the same hash comparison before publishing. The same tag alone does not guarantee identical build output. If any already-published file differs, stop and investigate; do not replace published files or move the tag. Previously used distribution filenames cannot be replaced or reused for different contents, even after deletion.
|
|
218
|
+
|
|
219
|
+
Rerunning the entire workflow also reruns `uv build` and proceeds to publication without a separate manual comparison step. Do not use it as a substitute for the verification above after a partial upload. If no authorized publishing path is available for the verified artifacts, ask a PyPI project owner to arrange recovery.
|
|
220
|
+
|
|
221
|
+
### Release Workflow Didn't Trigger
|
|
222
|
+
|
|
223
|
+
Check that:
|
|
224
|
+
|
|
225
|
+
- The release trigger workflow completed successfully
|
|
226
|
+
- The tag was pushed (check repository tags)
|
|
227
|
+
- The release workflow is enabled in Actions settings
|
|
228
|
+
|
|
229
|
+
### Version Mismatch
|
|
230
|
+
|
|
231
|
+
After a release PR is merged, `pyproject.toml` on `main` is expected to differ from the latest release tag. The tag `vX.Y.Z` points to a commit whose package version is exactly `X.Y.Z`; the release branch is subsequently bumped to the next patch development version (for example, `1.2.3` → `1.2.4.dev0`). Do not sync `main` back to the released version.
|
|
232
|
+
|
|
233
|
+
The **Publish to PyPI** workflow checks out the release tag and verifies that its version, without the `v` prefix, exactly matches `pyproject.toml` at that commit. A mismatch at the tagged commit is an error; the next development version on `main` is expected.
|
|
234
|
+
|
|
235
|
+
If that check fails, inspect the tag, GitHub Release, and PyPI publication state before choosing a recovery path (see **Tag Already Exists** and **Recovering an Incomplete Release** above). Do not move or recreate a published tag.
|
|
236
|
+
|
|
237
|
+
## Legacy Behavior (Pre-v0.1.10)
|
|
238
|
+
|
|
239
|
+
Before this change, the release workflow:
|
|
240
|
+
|
|
241
|
+
- Created tags automatically on main branch pushes
|
|
242
|
+
- Updated `pyproject.toml` AFTER creating the tag
|
|
243
|
+
- Resulted in tags pointing to commits with outdated versions
|
|
244
|
+
|
|
245
|
+
This has been fixed in v0.1.10+.
|