specify-cli 0.12.9__tar.gz → 0.12.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/CODEOWNERS +0 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/extension_submission.yml +4 -4
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/preset_submission.yml +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/PULL_REQUEST_TEMPLATE.md +0 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/lint.yml +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/publish-pypi.yml +2 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/stale.yml +5 -5
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/test.yml +2 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.markdownlint-cli2.jsonc +1 -1
- specify_cli-0.12.11/.pre-commit-config.yaml +12 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/CHANGELOG.md +30 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/LICENSE +0 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/PKG-INFO +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/.gitignore +0 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/extensions.md +2 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/friends.md +2 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/commands/speckit.agent-context.update.md +2 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/scripts/bash/update-agent-context.sh +22 -10
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +6 -4
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/catalog.community.json +75 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/catalog.json +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +8 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/selftest/commands/selftest.md +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-March.md +0 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/pyproject.toml +1 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/check-prerequisites.sh +5 -5
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/create-new-feature.sh +11 -11
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/setup-plan.sh +7 -8
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/check-prerequisites.ps1 +10 -10
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/common.ps1 +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/setup-plan.ps1 +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/spec-kit.code-workspace +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/__init__.py +3 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/config.py +9 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/adapters.py +13 -3
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/catalogs.py +7 -3
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/devin/__init__.py +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/forge/__init__.py +9 -9
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/shared_infra.py +5 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/_commands.py +9 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/engine.py +34 -5
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/shell/__init__.py +22 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/checklist-template.md +3 -3
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/analyze.md +1 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/checklist.md +1 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/clarify.md +2 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/constitution.md +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/converge.md +1 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/implement.md +3 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/plan.md +2 -3
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/specify.md +15 -15
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/tasks.md +3 -3
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/taskstoissues.md +1 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/plan-template.md +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/vscode-settings.json +0 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/git/test_git_extension.py +32 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_extension_agent_context.py +118 -2
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/TESTING.md +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_catalog.py +14 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_cursor_agent.py +0 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_devin.py +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_forge.py +19 -19
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_vibe.py +1 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_authentication.py +14 -0
- specify_cli-0.12.11/tests/test_command_template_py_scripts.py +107 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extension_registration.py +49 -49
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extension_update_hardening.py +18 -18
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_merge.py +18 -18
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_setup_tasks.py +98 -98
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_timestamp_branches.py +0 -1
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_workflows.py +245 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_adapters.py +18 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.editorconfig +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.gitattributes +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/dependabot.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-fix.lock.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-fix.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-test.lock.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-test.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/codeql.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/docs.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/release.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.gitignore +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/.zenodo.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/AGENTS.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/CITATION.cff +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/CONTRIBUTING.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/DEVELOPMENT.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/SECURITY.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/SUPPORT.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/bundles.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/overview.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/presets.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/docfx.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/guides/monorepo.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/index.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/one-time.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/pipx.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/uv.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/installation.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/local-development.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/quickstart.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/authentication.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/bundles.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/core.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/extensions.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/integrations.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/overview.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/presets.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/workflows.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/template/public/main.css +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/toc.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/upgrade.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/developer/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/agent-context-defaults.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/extension.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/.gitignore +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/LICENSE +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/extension.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/catalog.community.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/catalog.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/media/logo_large.webp +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/media/logo_small.webp +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/media/specify_cli.gif +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-April.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-February.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-June.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-May.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/catalog.community.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/catalog.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/preset.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/agent-file-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/common.sh +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/python/check_prerequisites.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/python/common.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/spec-driven.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_github_http.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_project.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_version.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/agents.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/yamlio.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/catalog.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/manifest.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/records.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/installer.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/primitives.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/commands/init.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/extensions/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/extensions/_commands.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/claude/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/omp/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/presets/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/presets/_commands.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/catalog.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/expressions.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/constitution-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/spec-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/tasks-template.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/auth_helpers.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/bundler_helpers.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/conftest.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/contract/test_bundle_cli.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/contract/test_catalog_schema.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/contract/test_manifest_schema.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/plan.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/spec.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/http_helpers.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_install_flow.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_cli.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_registry.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_check_prerequisites_python_parity.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_check_tool.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_cli_version.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_commands_package.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_console_imports.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extension_skills.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extensions.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_github_http.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_github_workflows.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_init_dir.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_post_process.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_presets.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_upgrade.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_utils.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_version_imports.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_catalog_config.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_primitives.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_records.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/README.md +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/catalog.community.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/catalog.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/step-catalog.json +0 -0
|
@@ -7,7 +7,7 @@ body:
|
|
|
7
7
|
attributes:
|
|
8
8
|
value: |
|
|
9
9
|
Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
|
|
12
12
|
|
|
13
13
|
- type: input
|
|
@@ -7,7 +7,7 @@ body:
|
|
|
7
7
|
attributes:
|
|
8
8
|
value: |
|
|
9
9
|
Thanks for contributing an extension! This template helps you submit your extension to the community catalog.
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
**Before submitting:**
|
|
12
12
|
- Review the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md)
|
|
13
13
|
- Ensure your extension has a valid `extension.yml` manifest
|
|
@@ -209,9 +209,9 @@ body:
|
|
|
209
209
|
**Tested on:**
|
|
210
210
|
- macOS 14.0 with Spec Kit v0.1.0
|
|
211
211
|
- Linux Ubuntu 22.04 with Spec Kit v0.1.0
|
|
212
|
-
|
|
212
|
+
|
|
213
213
|
**Test project:** [Link or description]
|
|
214
|
-
|
|
214
|
+
|
|
215
215
|
**Test scenarios:**
|
|
216
216
|
1. Installed extension
|
|
217
217
|
2. Configured settings
|
|
@@ -230,7 +230,7 @@ body:
|
|
|
230
230
|
```bash
|
|
231
231
|
# Install extension
|
|
232
232
|
specify extension add <extension-name> --from https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip
|
|
233
|
-
|
|
233
|
+
|
|
234
234
|
# Use a command
|
|
235
235
|
/speckit.your-extension.command-name arg1 arg2
|
|
236
236
|
```
|
|
@@ -7,7 +7,7 @@ body:
|
|
|
7
7
|
attributes:
|
|
8
8
|
value: |
|
|
9
9
|
Thanks for contributing a preset! This template helps you submit your preset to the community catalog.
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
**Before submitting:**
|
|
12
12
|
- Review the [Preset Publishing Guide](https://github.com/github/spec-kit/blob/main/presets/PUBLISHING.md)
|
|
13
13
|
- Ensure your preset has a valid `preset.yml` manifest
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
fi
|
|
38
38
|
|
|
39
39
|
- name: Run markdownlint-cli2
|
|
40
|
-
uses: DavidAnson/markdownlint-cli2-action@
|
|
40
|
+
uses: DavidAnson/markdownlint-cli2-action@8de2aa07cae85fd17c0b35642db70cf5495f1d25 # v24.0.0
|
|
41
41
|
with:
|
|
42
42
|
globs: |
|
|
43
43
|
'**/*.md'
|
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
ref: refs/tags/${{ inputs.tag }}
|
|
33
33
|
|
|
34
34
|
- name: Install uv
|
|
35
|
-
uses: astral-sh/setup-uv@
|
|
35
|
+
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
|
36
36
|
|
|
37
37
|
- name: Set up Python
|
|
38
38
|
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
@@ -74,7 +74,7 @@ jobs:
|
|
|
74
74
|
path: dist/
|
|
75
75
|
|
|
76
76
|
- name: Install uv
|
|
77
|
-
uses: astral-sh/setup-uv@
|
|
77
|
+
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
|
78
78
|
|
|
79
79
|
- name: Publish to PyPI
|
|
80
80
|
run: uv publish
|
|
@@ -20,24 +20,24 @@ jobs:
|
|
|
20
20
|
days-before-stale: 150
|
|
21
21
|
# Days of inactivity before a stale issue or PR is closed (after being marked stale)
|
|
22
22
|
days-before-close: 30
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
# Stale issue settings
|
|
25
25
|
stale-issue-message: 'This issue has been automatically marked as stale because it has not had any activity for 150 days. It will be closed in 30 days if no further activity occurs.'
|
|
26
26
|
close-issue-message: 'This issue has been automatically closed due to inactivity (180 days total). If you believe this issue is still relevant, please reopen it or create a new issue.'
|
|
27
27
|
stale-issue-label: 'stale'
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
# Stale PR settings
|
|
30
30
|
stale-pr-message: 'This pull request has been automatically marked as stale because it has not had any activity for 150 days. It will be closed in 30 days if no further activity occurs.'
|
|
31
31
|
close-pr-message: 'This pull request has been automatically closed due to inactivity (180 days total). If you believe this PR is still relevant, please reopen it or create a new PR.'
|
|
32
32
|
stale-pr-label: 'stale'
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
# Exempt issues and PRs with these labels from being marked as stale
|
|
35
35
|
exempt-issue-labels: 'pinned,security'
|
|
36
36
|
exempt-pr-labels: 'pinned,security'
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
# Only issues or PRs with all of these labels are checked
|
|
39
39
|
# Leave empty to check all issues and PRs
|
|
40
40
|
any-of-labels: ''
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
# Operations per run (helps avoid rate limits)
|
|
43
43
|
operations-per-run: 250
|
|
@@ -16,7 +16,7 @@ jobs:
|
|
|
16
16
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
17
17
|
|
|
18
18
|
- name: Install uv
|
|
19
|
-
uses: astral-sh/setup-uv@
|
|
19
|
+
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
|
20
20
|
|
|
21
21
|
- name: Set up Python
|
|
22
22
|
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
38
38
|
|
|
39
39
|
- name: Install uv
|
|
40
|
-
uses: astral-sh/setup-uv@
|
|
40
|
+
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
|
41
41
|
|
|
42
42
|
- name: Set up Python ${{ matrix.python-version }}
|
|
43
43
|
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
repos:
|
|
3
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
4
|
+
rev: v6.0.0
|
|
5
|
+
hooks:
|
|
6
|
+
- id: check-executables-have-shebangs
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
exclude: \.lock\.yml$
|
|
9
|
+
- id: end-of-file-fixer
|
|
10
|
+
exclude: \.lock\.yml$
|
|
11
|
+
- id: trailing-whitespace
|
|
12
|
+
exclude: \.lock\.yml$
|
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.12.11] - 2026-07-10
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- fix(agent-context): discover nested plan.md in scoped layouts (#3024) (#3301)
|
|
10
|
+
- fix(auth): return no matches, not raw ValueError, for a malformed URL (#3437)
|
|
11
|
+
- fix(catalogs): raise catalog error, not raw ValueError, on a malformed URL (#3435)
|
|
12
|
+
- fix(bundler): raise BundlerError, not raw ValueError, on a malformed catalog URL (#3433)
|
|
13
|
+
- chore: add pre-commit config and fix trailing whitespace/end-of-file (#3430)
|
|
14
|
+
- Add EARS Requirements Syntax extension to community catalog (#3407)
|
|
15
|
+
- Add Spec Kit Figma extension to community catalog (#3408)
|
|
16
|
+
- fix(workflows): report validation errors instead of crashing on non-string workflow.yml scalars (#3421)
|
|
17
|
+
- fix(templates): remove self-referencing path in plan-template.md note (#3417)
|
|
18
|
+
- chore: release 0.12.10, begin 0.12.11.dev0 development (#3453)
|
|
19
|
+
|
|
20
|
+
## [0.12.10] - 2026-07-10
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- chore(deps): bump astral-sh/setup-uv from 8.2.0 to 8.3.2 (#3439)
|
|
25
|
+
- chore(deps): bump DavidAnson/markdownlint-cli2-action (#3438)
|
|
26
|
+
- fix(templates): correct phase numbering in plan.md (#3416)
|
|
27
|
+
- fix(git-ext): honor explicit -Number 0 in PowerShell branch creation (#3412)
|
|
28
|
+
- docs: add 'spectatui' entry to friends.md (#3362)
|
|
29
|
+
- test: pin interpreter probe so py-template render test passes on Windows (#3428)
|
|
30
|
+
- feat(workflows): make shell step timeout configurable (#3404)
|
|
31
|
+
- fix: find plans in nested spec directories (#3405)
|
|
32
|
+
- feat(templates): add py: lines to command templates' scripts frontmatter (#3403)
|
|
33
|
+
- chore: release 0.12.9, begin 0.12.10.dev0 development (#3426)
|
|
34
|
+
|
|
5
35
|
## [0.12.9] - 2026-07-09
|
|
6
36
|
|
|
7
37
|
### Changed
|
|
@@ -52,6 +52,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
52
52
|
| Cost Tracker | Track real LLM dollar cost across SDD workflows — per-feature budgets, per-integration comparison, and finance-ready exports | `visibility` | Read+Write | [spec-kit-cost](https://github.com/Quratulain-bilal/spec-kit-cost) |
|
|
53
53
|
| Data Model Diagram | Generates Mermaid ER diagrams from Spec Kit data models after planning | `docs` | Read+Write | [spec-kit-data-model-diagram](https://github.com/benizzio/spec-kit-data-model-diagram) |
|
|
54
54
|
| DocGuard — CDD Enforcement | The only doc-integrity engine with an MCP server, SARIF output, and a deterministic zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, GitHub Action with PR annotations, spec-kit hooks. Pure Node.js, one pinned dep. | `docs` | Read+Write | [spec-kit-docguard](https://github.com/raccioly/docguard) |
|
|
55
|
+
| EARS Requirements Syntax | Author, lint, and convert requirements using EARS - the five industry-standard sentence patterns for unambiguous, testable requirements | `docs` | Read+Write | [spec-kit-ears](https://github.com/dhruv-15-03/spec-kit-ears) |
|
|
55
56
|
| Extensify | Create and validate extensions and extension catalogs | `process` | Read+Write | [extensify](https://github.com/mnriem/spec-kit-extensions/tree/main/extensify) |
|
|
56
57
|
| Fix Findings | Automated analyze-fix-reanalyze loop that resolves spec findings until clean | `code` | Read+Write | [spec-kit-fix-findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) |
|
|
57
58
|
| FixIt Extension | Spec-aware bug fixing — maps bugs to spec artifacts, proposes a plan, applies minimal changes | `code` | Read+Write | [spec-kit-fixit](https://github.com/speckit-community/spec-kit-fixit) |
|
|
@@ -117,6 +118,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
117
118
|
| Spec Critique Extension | Dual-lens critical review of spec and plan from product strategy and engineering risk perspectives | `docs` | Read-only | [spec-kit-critique](https://github.com/arunt14/spec-kit-critique) |
|
|
118
119
|
| 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-) |
|
|
119
120
|
| Spec Kit Discovery Extension | Run technical discovery commands for feasibility, technology selection, scenario-specific technical decisions, legacy codebase assessment, implementation understanding, and proof-of-concept validation | `process` | Read+Write | [spec-kit-discovery](https://github.com/bigsmartben/spec-kit-discovery) |
|
|
121
|
+
| Spec Kit Figma | Agent-agnostic SpecKit extension that grounds spec, plan & task generation in Figma design context — REST + optional MCP, single/mono/multi-repo, macOS/Linux/Windows. | `integration` | Read+Write | [spec-kit-figma](https://github.com/Fyloss/spec-kit-figma) |
|
|
120
122
|
| 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) |
|
|
121
123
|
| 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) |
|
|
122
124
|
| Spec Kit TLDR | Render a feature's spec.md / plan.md into a review-oriented TLDR (self-contained HTML dashboard + PR-native Markdown) that surfaces risks for faster PR review. | `visibility` | Read+Write | [speckit-tldr](https://github.com/qurore/speckit-tldr) |
|
|
@@ -14,3 +14,5 @@ Community projects that extend, visualize, or build on Spec Kit:
|
|
|
14
14
|
- **[SpecKit Companion](https://marketplace.visualstudio.com/items?itemName=alfredoperez.speckit-companion)** — A VS Code extension that brings a visual GUI to Spec Kit. Browse specs in a rich markdown viewer with clickable file references, create specifications with image attachments, comment and refine each step inline (GitHub-style review), track your progress through the SDD workflow with a visual phase stepper, and manage steering documents like constitutions and templates.
|
|
15
15
|
|
|
16
16
|
- **[cc-spec-kit](https://github.com/speckit-community/cc-spec-kit)** — Community-maintained plugin for Claude Code and GitHub Copilot CLI that installs Spec Kit skills via the plugin marketplace.
|
|
17
|
+
|
|
18
|
+
- **[spectatui](https://github.com/tinesoft/spectatui)** — A terminal UI (TUI) dashboard for Spec Kit that lets you track features, manage specifications, integrations, presets, workflows, and extensions, and monitor AI agent workflows. Attach to existing AI sessions or launch new ones from your terminal. Keyboard and mouse support. Light/dark theme support. Customizable and performance-oriented. Requires the `specify` CLI in your PATH.
|
|
@@ -15,7 +15,7 @@ The script reads the agent-context extension config at
|
|
|
15
15
|
- `context_files` — optional project-relative paths for multiple coding agent context files. When non-empty, the script updates each listed file and the list takes precedence over `context_file`.
|
|
16
16
|
- `context_markers.start` / `.end` — the delimiters surrounding the managed section. Defaults to `<!-- SPECKIT START -->` and `<!-- SPECKIT END -->` when the field is missing.
|
|
17
17
|
|
|
18
|
-
It then creates, replaces, or appends the managed block so that the section points at the most recent plan path when one can be discovered (`specs/<feature>/plan.md`).
|
|
18
|
+
It then creates, replaces, or appends the managed block so that the section points at the most recent plan path when one can be discovered (any `plan.md` under `specs/`, including nested scoped layouts such as `specs/<scope>/<feature>/plan.md`).
|
|
19
19
|
|
|
20
20
|
If `context_files` and `context_file` are empty, the command reports nothing to do and exits successfully. Context file paths must stay project-relative; absolute paths, Windows drive paths, backslash separators, and `..` path segments are rejected.
|
|
21
21
|
|
|
@@ -24,4 +24,4 @@ If `context_files` and `context_file` are empty, the command reports nothing to
|
|
|
24
24
|
- **Bash**: `.specify/extensions/agent-context/scripts/bash/update-agent-context.sh [plan_path]`
|
|
25
25
|
- **PowerShell**: `.specify/extensions/agent-context/scripts/powershell/update-agent-context.ps1 [plan_path]`
|
|
26
26
|
|
|
27
|
-
When `plan_path` is omitted, the script auto-detects the most recently modified `specs
|
|
27
|
+
When `plan_path` is omitted, the script auto-detects the most recently modified `specs/**/plan.md` (searched recursively, so nested scoped layouts are discovered).
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
#
|
|
13
13
|
# When `plan_path` is omitted, the script derives it from `.specify/feature.json`
|
|
14
14
|
# (written by /speckit-specify). Falls back to the most recently modified
|
|
15
|
-
# `specs
|
|
15
|
+
# `specs/**/plan.md` only when feature.json is absent or its plan does not exist yet.
|
|
16
16
|
|
|
17
17
|
set -euo pipefail
|
|
18
18
|
|
|
@@ -307,16 +307,28 @@ import sys
|
|
|
307
307
|
from pathlib import Path
|
|
308
308
|
root = Path(sys.argv[1]).resolve()
|
|
309
309
|
specs = root / "specs"
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
310
|
+
|
|
311
|
+
def _resolved_rel(p):
|
|
312
|
+
# Resolve symlinks before checking containment: relative_to() is lexical
|
|
313
|
+
# and would otherwise accept a plan reached through a specs/ symlink that
|
|
314
|
+
# points outside the project, emitting an in-project-looking path for an
|
|
315
|
+
# out-of-project file (or picking it as "most recent").
|
|
316
316
|
try:
|
|
317
|
-
|
|
318
|
-
except ValueError:
|
|
319
|
-
|
|
317
|
+
return p.resolve().relative_to(root)
|
|
318
|
+
except (OSError, ValueError):
|
|
319
|
+
return None
|
|
320
|
+
|
|
321
|
+
# Recurse (rather than the old one-level specs/*/plan.md glob) so scoped layouts
|
|
322
|
+
# created via SPECIFY_FEATURE_DIRECTORY, e.g. specs/<scope>/<feature>/plan.md,
|
|
323
|
+
# are still discovered when feature.json is absent (#3024).
|
|
324
|
+
candidates = []
|
|
325
|
+
for p in specs.rglob("plan.md"):
|
|
326
|
+
rel = _resolved_rel(p)
|
|
327
|
+
if rel:
|
|
328
|
+
candidates.append((p, rel))
|
|
329
|
+
candidates.sort(key=lambda pr: pr[0].stat().st_mtime, reverse=True)
|
|
330
|
+
if candidates:
|
|
331
|
+
print(candidates[0][1].as_posix())
|
|
320
332
|
else:
|
|
321
333
|
print("")
|
|
322
334
|
PY
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
#
|
|
13
13
|
# When `plan_path` is omitted, the script derives it from `.specify/feature.json`
|
|
14
14
|
# (written by /speckit-specify). Falls back to the most recently modified
|
|
15
|
-
# `specs
|
|
15
|
+
# `specs/**/plan.md` only when feature.json is absent or its plan does not exist yet.
|
|
16
16
|
|
|
17
17
|
[CmdletBinding()]
|
|
18
18
|
param(
|
|
@@ -426,9 +426,11 @@ if (-not $PlanPath) {
|
|
|
426
426
|
if (-not $PlanPath) {
|
|
427
427
|
try {
|
|
428
428
|
$specsDir = Join-Path $ProjectRoot 'specs'
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
429
|
+
# Recurse (rather than the old one-level specs/*/plan.md scan) so scoped
|
|
430
|
+
# layouts created via SPECIFY_FEATURE_DIRECTORY, e.g.
|
|
431
|
+
# specs/<scope>/<feature>/plan.md, are still discovered when
|
|
432
|
+
# feature.json is absent (#3024).
|
|
433
|
+
$candidate = Get-ChildItem -Path $specsDir -Filter 'plan.md' -File -Recurse -ErrorAction SilentlyContinue |
|
|
432
434
|
Sort-Object LastWriteTime -Descending |
|
|
433
435
|
Select-Object -First 1
|
|
434
436
|
if ($candidate) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-07-
|
|
3
|
+
"updated_at": "2026-07-08T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"aide": {
|
|
@@ -1180,6 +1180,39 @@
|
|
|
1180
1180
|
"created_at": "2026-03-13T00:00:00Z",
|
|
1181
1181
|
"updated_at": "2026-03-13T00:00:00Z"
|
|
1182
1182
|
},
|
|
1183
|
+
"ears": {
|
|
1184
|
+
"name": "EARS Requirements Syntax",
|
|
1185
|
+
"id": "ears",
|
|
1186
|
+
"description": "Author, lint, and convert requirements using EARS (Easy Approach to Requirements Syntax) - the five industry-standard sentence patterns for unambiguous, testable requirements.",
|
|
1187
|
+
"author": "dhruv-15-03",
|
|
1188
|
+
"version": "1.0.0",
|
|
1189
|
+
"download_url": "https://github.com/dhruv-15-03/spec-kit-ears/archive/refs/tags/v1.0.0.zip",
|
|
1190
|
+
"repository": "https://github.com/dhruv-15-03/spec-kit-ears",
|
|
1191
|
+
"homepage": "https://github.com/dhruv-15-03/spec-kit-ears",
|
|
1192
|
+
"documentation": "https://github.com/dhruv-15-03/spec-kit-ears/blob/main/README.md",
|
|
1193
|
+
"changelog": "https://github.com/dhruv-15-03/spec-kit-ears/blob/main/CHANGELOG.md",
|
|
1194
|
+
"license": "MIT",
|
|
1195
|
+
"category": "docs",
|
|
1196
|
+
"effect": "read-write",
|
|
1197
|
+
"requires": {
|
|
1198
|
+
"speckit_version": ">=0.9.0"
|
|
1199
|
+
},
|
|
1200
|
+
"provides": {
|
|
1201
|
+
"commands": 3,
|
|
1202
|
+
"hooks": 0
|
|
1203
|
+
},
|
|
1204
|
+
"tags": [
|
|
1205
|
+
"ears",
|
|
1206
|
+
"requirements",
|
|
1207
|
+
"specification",
|
|
1208
|
+
"quality"
|
|
1209
|
+
],
|
|
1210
|
+
"verified": false,
|
|
1211
|
+
"downloads": 0,
|
|
1212
|
+
"stars": 0,
|
|
1213
|
+
"created_at": "2026-07-08T00:00:00Z",
|
|
1214
|
+
"updated_at": "2026-07-08T00:00:00Z"
|
|
1215
|
+
},
|
|
1183
1216
|
"extensify": {
|
|
1184
1217
|
"name": "Extensify",
|
|
1185
1218
|
"id": "extensify",
|
|
@@ -1213,6 +1246,47 @@
|
|
|
1213
1246
|
"created_at": "2026-03-18T00:00:00Z",
|
|
1214
1247
|
"updated_at": "2026-04-23T00:00:00Z"
|
|
1215
1248
|
},
|
|
1249
|
+
"figma": {
|
|
1250
|
+
"name": "Spec Kit Figma",
|
|
1251
|
+
"id": "figma",
|
|
1252
|
+
"description": "Agent-agnostic SpecKit extension that grounds spec, plan & task generation in Figma design context — REST + optional MCP, single/mono/multi-repo, macOS/Linux/Windows.",
|
|
1253
|
+
"author": "Fyloss",
|
|
1254
|
+
"version": "1.6.0",
|
|
1255
|
+
"download_url": "https://github.com/Fyloss/spec-kit-figma/archive/refs/tags/v1.6.0.zip",
|
|
1256
|
+
"repository": "https://github.com/Fyloss/spec-kit-figma",
|
|
1257
|
+
"homepage": "https://github.com/Fyloss/spec-kit-figma",
|
|
1258
|
+
"documentation": "https://github.com/Fyloss/spec-kit-figma/blob/main/docs/INSTALL.md",
|
|
1259
|
+
"changelog": "https://github.com/Fyloss/spec-kit-figma/blob/main/CHANGELOG.md",
|
|
1260
|
+
"license": "MIT",
|
|
1261
|
+
"category": "integration",
|
|
1262
|
+
"effect": "read-write",
|
|
1263
|
+
"requires": {
|
|
1264
|
+
"speckit_version": ">=0.1.0",
|
|
1265
|
+
"tools": [
|
|
1266
|
+
{ "name": "git", "required": true },
|
|
1267
|
+
{ "name": "bash", "required": false },
|
|
1268
|
+
{ "name": "curl", "required": false },
|
|
1269
|
+
{ "name": "jq", "required": false },
|
|
1270
|
+
{ "name": "pwsh", "required": false }
|
|
1271
|
+
]
|
|
1272
|
+
},
|
|
1273
|
+
"provides": {
|
|
1274
|
+
"commands": 5,
|
|
1275
|
+
"hooks": 6
|
|
1276
|
+
},
|
|
1277
|
+
"tags": [
|
|
1278
|
+
"figma",
|
|
1279
|
+
"design",
|
|
1280
|
+
"frontend",
|
|
1281
|
+
"ui",
|
|
1282
|
+
"design-system"
|
|
1283
|
+
],
|
|
1284
|
+
"verified": false,
|
|
1285
|
+
"downloads": 0,
|
|
1286
|
+
"stars": 0,
|
|
1287
|
+
"created_at": "2026-07-08T00:00:00Z",
|
|
1288
|
+
"updated_at": "2026-07-08T00:00:00Z"
|
|
1289
|
+
},
|
|
1216
1290
|
"fix-findings": {
|
|
1217
1291
|
"name": "Fix Findings",
|
|
1218
1292
|
"id": "fix-findings",
|
|
@@ -446,7 +446,10 @@ if ($env:GIT_BRANCH_NAME) {
|
|
|
446
446
|
$branchSuffix = Get-BranchName -Description $featureDesc
|
|
447
447
|
}
|
|
448
448
|
|
|
449
|
-
if
|
|
449
|
+
# Warn if -Number and -Timestamp are both specified. Use ContainsKey (not
|
|
450
|
+
# `-ne 0`) so an explicit `-Number 0` is also detected, matching the bash twin's
|
|
451
|
+
# `[ -n "$BRANCH_NUMBER" ]` check.
|
|
452
|
+
if ($Timestamp -and $PSBoundParameters.ContainsKey('Number')) {
|
|
450
453
|
Write-Warning "[specify] Warning: -Number is ignored when -Timestamp is used"
|
|
451
454
|
$Number = 0
|
|
452
455
|
}
|
|
@@ -456,7 +459,10 @@ if ($env:GIT_BRANCH_NAME) {
|
|
|
456
459
|
$branchName = New-BranchName -FeatureNum $featureNum -BranchSuffix $branchSuffix
|
|
457
460
|
} else {
|
|
458
461
|
$branchScopePrefix = Get-BranchScopePrefix -Template $branchTemplate -BranchSuffix $branchSuffix
|
|
459
|
-
|
|
462
|
+
# Auto-detect the next number only when -Number was not supplied; an
|
|
463
|
+
# explicit value (including 0) is honored, matching the bash twin's
|
|
464
|
+
# `[ -z "$BRANCH_NUMBER" ]` check.
|
|
465
|
+
if (-not $PSBoundParameters.ContainsKey('Number')) {
|
|
460
466
|
if ($DryRun -and $hasGit) {
|
|
461
467
|
$Number = Get-NextBranchNumber -SpecsDir $specsDir -SkipFetch -ScopePrefix $branchScopePrefix
|
|
462
468
|
} elseif ($DryRun) {
|
|
@@ -48,7 +48,7 @@ cat .specify/extensions/.registry/$ARGUMENTS.json
|
|
|
48
48
|
|
|
49
49
|
### Step 4: Verification Report
|
|
50
50
|
|
|
51
|
-
Analyze the standard output of the three steps.
|
|
51
|
+
Analyze the standard output of the three steps.
|
|
52
52
|
Generate a terminal-style test output format detailing the results of discovery, installation, and registration. Return this directly to the user.
|
|
53
53
|
|
|
54
54
|
Example output format:
|
|
@@ -76,5 +76,3 @@ Areas under discussion or in progress for future development:
|
|
|
76
76
|
- **Continued agent expansion** -- seven new agents were added in March alone. The agent-agnostic design means support for emerging tools can be added by anyone. [\[byteiota.com\]](https://byteiota.com/spec-driven-development-kills-vibe-coding-march-2026/)
|
|
77
77
|
- **Experience simplification** -- the preset system, custom workflows, and growing walkthrough library lower the learning curve, but extension discoverability will need a more robust solution as the catalog grows. [\[github.com\]](https://github.com/github/spec-kit/releases)
|
|
78
78
|
- **Toward a stable release** -- nine releases in one month reflects pre-1.0 momentum. Reaching 1.0 will require stabilizing the extension and preset APIs and ensuring backward compatibility across the agent and extension surface area. [\[github.com\]](https://github.com/github/spec-kit/blob/main/newsletters/2026-February.md)
|
|
79
|
-
|
|
80
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "specify-cli"
|
|
3
|
-
version = "0.12.
|
|
3
|
+
version = "0.12.11"
|
|
4
4
|
description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -83,4 +83,3 @@ extend-select = [
|
|
|
83
83
|
"S604", # call-with-shell-equals-true
|
|
84
84
|
"S605", # start-process-with-a-shell
|
|
85
85
|
]
|
|
86
|
-
|
|
@@ -57,13 +57,13 @@ OPTIONS:
|
|
|
57
57
|
EXAMPLES:
|
|
58
58
|
# Check task prerequisites (plan.md required)
|
|
59
59
|
./check-prerequisites.sh --json
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
# Check implementation prerequisites (plan.md + tasks.md required)
|
|
62
62
|
./check-prerequisites.sh --json --require-tasks --include-tasks
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
# Get feature paths only (no validation)
|
|
65
65
|
./check-prerequisites.sh --paths-only
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
EOF
|
|
68
68
|
exit 0
|
|
69
69
|
;;
|
|
@@ -182,13 +182,13 @@ else
|
|
|
182
182
|
# Text output
|
|
183
183
|
echo "FEATURE_DIR:$FEATURE_DIR"
|
|
184
184
|
echo "AVAILABLE_DOCS:"
|
|
185
|
-
|
|
185
|
+
|
|
186
186
|
# Show status of each potential document
|
|
187
187
|
check_file "$RESEARCH" "research.md"
|
|
188
188
|
check_file "$DATA_MODEL" "data-model.md"
|
|
189
189
|
check_dir "$CONTRACTS_DIR" "contracts/"
|
|
190
190
|
check_file "$QUICKSTART" "quickstart.md"
|
|
191
|
-
|
|
191
|
+
|
|
192
192
|
if $INCLUDE_TASKS; then
|
|
193
193
|
check_file "$TASKS" "tasks.md"
|
|
194
194
|
fi
|
|
@@ -94,7 +94,7 @@ fi
|
|
|
94
94
|
get_highest_from_specs() {
|
|
95
95
|
local specs_dir="$1"
|
|
96
96
|
local highest=0
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
if [ -d "$specs_dir" ]; then
|
|
99
99
|
for dir in "$specs_dir"/*; do
|
|
100
100
|
[ -d "$dir" ] || continue
|
|
@@ -109,7 +109,7 @@ get_highest_from_specs() {
|
|
|
109
109
|
fi
|
|
110
110
|
done
|
|
111
111
|
fi
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
echo "$highest"
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -135,19 +135,19 @@ fi
|
|
|
135
135
|
# Function to generate branch name with stop word filtering and length filtering
|
|
136
136
|
generate_branch_name() {
|
|
137
137
|
local description="$1"
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
# Common stop words to filter out
|
|
140
140
|
local stop_words="^(i|a|an|the|to|for|of|in|on|at|by|with|from|is|are|was|were|be|been|being|have|has|had|do|does|did|will|would|should|could|can|may|might|must|shall|this|that|these|those|my|your|our|their|want|need|add|get|set)$"
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
# Convert to lowercase and split into words
|
|
143
143
|
local clean_name=$(printf '%s' "$description" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/ /g')
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
# Filter words: remove stop words and words shorter than 3 chars (unless they're uppercase acronyms in original)
|
|
146
146
|
local meaningful_words=()
|
|
147
147
|
for word in $clean_name; do
|
|
148
148
|
# Skip empty words
|
|
149
149
|
[ -z "$word" ] && continue
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
# Keep words that are NOT stop words AND (length >= 3 OR are potential acronyms)
|
|
152
152
|
if ! echo "$word" | grep -qiE "$stop_words"; then
|
|
153
153
|
if [ ${#word} -ge 3 ]; then
|
|
@@ -160,12 +160,12 @@ generate_branch_name() {
|
|
|
160
160
|
fi
|
|
161
161
|
fi
|
|
162
162
|
done
|
|
163
|
-
|
|
163
|
+
|
|
164
164
|
# If we have meaningful words, use first 3-4 of them
|
|
165
165
|
if [ ${#meaningful_words[@]} -gt 0 ]; then
|
|
166
166
|
local max_words=3
|
|
167
167
|
if [ ${#meaningful_words[@]} -eq 4 ]; then max_words=4; fi
|
|
168
|
-
|
|
168
|
+
|
|
169
169
|
local result=""
|
|
170
170
|
local count=0
|
|
171
171
|
for word in "${meaningful_words[@]}"; do
|
|
@@ -221,15 +221,15 @@ if [ ${#BRANCH_NAME} -gt $MAX_BRANCH_LENGTH ]; then
|
|
|
221
221
|
# Account for prefix length: timestamp (15) + hyphen (1) = 16, or sequential (3) + hyphen (1) = 4
|
|
222
222
|
PREFIX_LENGTH=$(( ${#FEATURE_NUM} + 1 ))
|
|
223
223
|
MAX_SUFFIX_LENGTH=$((MAX_BRANCH_LENGTH - PREFIX_LENGTH))
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
# Truncate suffix at word boundary if possible
|
|
226
226
|
TRUNCATED_SUFFIX=$(echo "$BRANCH_SUFFIX" | cut -c1-$MAX_SUFFIX_LENGTH)
|
|
227
227
|
# Remove trailing hyphen if truncation created one
|
|
228
228
|
TRUNCATED_SUFFIX=$(echo "$TRUNCATED_SUFFIX" | sed 's/-$//')
|
|
229
|
-
|
|
229
|
+
|
|
230
230
|
ORIGINAL_BRANCH_NAME="$BRANCH_NAME"
|
|
231
231
|
BRANCH_NAME="${FEATURE_NUM}-${TRUNCATED_SUFFIX}"
|
|
232
|
-
|
|
232
|
+
|
|
233
233
|
>&2 echo "[specify] Warning: Branch name exceeded GitHub's 244-byte limit"
|
|
234
234
|
>&2 echo "[specify] Original: $ORIGINAL_BRANCH_NAME (${#ORIGINAL_BRANCH_NAME} bytes)"
|
|
235
235
|
>&2 echo "[specify] Truncated to: $BRANCH_NAME (${#BRANCH_NAME} bytes)"
|
|
@@ -8,17 +8,17 @@ ARGS=()
|
|
|
8
8
|
|
|
9
9
|
for arg in "$@"; do
|
|
10
10
|
case "$arg" in
|
|
11
|
-
--json)
|
|
12
|
-
JSON_MODE=true
|
|
11
|
+
--json)
|
|
12
|
+
JSON_MODE=true
|
|
13
13
|
;;
|
|
14
|
-
--help|-h)
|
|
14
|
+
--help|-h)
|
|
15
15
|
echo "Usage: $0 [--json]"
|
|
16
16
|
echo " --json Output results in JSON format"
|
|
17
17
|
echo " --help Show this help message"
|
|
18
|
-
exit 0
|
|
18
|
+
exit 0
|
|
19
19
|
;;
|
|
20
|
-
*)
|
|
21
|
-
ARGS+=("$arg")
|
|
20
|
+
*)
|
|
21
|
+
ARGS+=("$arg")
|
|
22
22
|
;;
|
|
23
23
|
esac
|
|
24
24
|
done
|
|
@@ -77,8 +77,7 @@ if $JSON_MODE; then
|
|
|
77
77
|
fi
|
|
78
78
|
else
|
|
79
79
|
echo "FEATURE_SPEC: $FEATURE_SPEC"
|
|
80
|
-
echo "IMPL_PLAN: $IMPL_PLAN"
|
|
80
|
+
echo "IMPL_PLAN: $IMPL_PLAN"
|
|
81
81
|
echo "SPECS_DIR: $FEATURE_DIR"
|
|
82
82
|
echo "BRANCH: $CURRENT_BRANCH"
|
|
83
83
|
fi
|
|
84
|
-
|