specify-cli 0.11.2__tar.gz → 0.11.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- specify_cli-0.11.4/.gitattributes +7 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/add-community-extension.lock.yml +6 -6
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/add-community-preset.lock.yml +6 -6
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/bug-assess.lock.yml +4 -4
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/codeql.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/docs.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/lint.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/release-trigger.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/release.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/test.yml +2 -2
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.gitignore +2 -2
- {specify_cli-0.11.2 → specify_cli-0.11.4}/AGENTS.md +33 -3
- {specify_cli-0.11.2 → specify_cli-0.11.4}/CHANGELOG.md +30 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/CONTRIBUTING.md +18 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/PKG-INFO +53 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/README.md +52 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/community/extensions.md +2 -0
- specify_cli-0.11.4/docs/reference/bundles.md +156 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/reference/core.md +4 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/reference/overview.md +6 -0
- specify_cli-0.11.4/examples/bundles/business-analyst/README.md +22 -0
- specify_cli-0.11.4/examples/bundles/business-analyst/bundle.yml +33 -0
- specify_cli-0.11.4/examples/bundles/developer/README.md +22 -0
- specify_cli-0.11.4/examples/bundles/developer/bundle.yml +33 -0
- specify_cli-0.11.4/examples/bundles/product-manager/README.md +22 -0
- specify_cli-0.11.4/examples/bundles/product-manager/bundle.yml +35 -0
- specify_cli-0.11.4/examples/bundles/security-researcher/README.md +23 -0
- specify_cli-0.11.4/examples/bundles/security-researcher/bundle.yml +33 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/catalog.community.json +85 -7
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/bash/create-new-feature-branch.sh +13 -3
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +11 -2
- {specify_cli-0.11.2 → specify_cli-0.11.4}/pyproject.toml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/bash/common.sh +39 -2
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/bash/create-new-feature.sh +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/powershell/common.ps1 +42 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/__init__.py +80 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_utils.py +39 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/agents.py +56 -3
- specify_cli-0.11.4/src/specify_cli/bundler/__init__.py +19 -0
- specify_cli-0.11.4/src/specify_cli/bundler/commands_impl/__init__.py +2 -0
- specify_cli-0.11.4/src/specify_cli/bundler/commands_impl/catalog_config.py +191 -0
- specify_cli-0.11.4/src/specify_cli/bundler/lib/__init__.py +2 -0
- specify_cli-0.11.4/src/specify_cli/bundler/lib/project.py +62 -0
- specify_cli-0.11.4/src/specify_cli/bundler/lib/versioning.py +99 -0
- specify_cli-0.11.4/src/specify_cli/bundler/lib/yamlio.py +119 -0
- specify_cli-0.11.4/src/specify_cli/bundler/models/__init__.py +2 -0
- specify_cli-0.11.4/src/specify_cli/bundler/models/catalog.py +258 -0
- specify_cli-0.11.4/src/specify_cli/bundler/models/manifest.py +263 -0
- specify_cli-0.11.4/src/specify_cli/bundler/models/records.py +229 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/__init__.py +2 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/adapters.py +193 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/catalog_stack.py +114 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/conflict.py +54 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/installer.py +210 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/packager.py +145 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/primitives.py +345 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/references.py +114 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/resolver.py +122 -0
- specify_cli-0.11.4/src/specify_cli/bundler/services/validator.py +60 -0
- specify_cli-0.11.4/src/specify_cli/commands/bundle/__init__.py +834 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/extensions.py +81 -43
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/claude/__init__.py +45 -41
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/presets/__init__.py +6 -2
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/base.py +4 -3
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/engine.py +1 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/expressions.py +34 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/taskstoissues.md +5 -2
- specify_cli-0.11.4/tests/bundler_helpers.py +125 -0
- specify_cli-0.11.4/tests/contract/test_bundle_cli.py +391 -0
- specify_cli-0.11.4/tests/contract/test_catalog_schema.py +147 -0
- specify_cli-0.11.4/tests/contract/test_manifest_schema.py +126 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/extensions/git/test_git_extension.py +127 -0
- specify_cli-0.11.4/tests/integration/test_bundler_catalog_stack.py +79 -0
- specify_cli-0.11.4/tests/integration/test_bundler_init_install.py +92 -0
- specify_cli-0.11.4/tests/integration/test_bundler_install_flow.py +222 -0
- specify_cli-0.11.4/tests/integration/test_bundler_local_install.py +114 -0
- specify_cli-0.11.4/tests/integration/test_bundler_offline.py +78 -0
- specify_cli-0.11.4/tests/integration/test_bundler_security_paths.py +173 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_claude.py +97 -1
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_extension_skills.py +87 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_extensions.py +34 -0
- specify_cli-0.11.4/tests/test_init_dir.py +467 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_presets.py +78 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_registrar_path_traversal.py +180 -2
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_workflows.py +298 -0
- specify_cli-0.11.4/tests/unit/test_bundler_adapters.py +71 -0
- specify_cli-0.11.4/tests/unit/test_bundler_catalog_config.py +181 -0
- specify_cli-0.11.4/tests/unit/test_bundler_conflict.py +54 -0
- specify_cli-0.11.4/tests/unit/test_bundler_packager.py +193 -0
- specify_cli-0.11.4/tests/unit/test_bundler_primitives.py +133 -0
- specify_cli-0.11.4/tests/unit/test_bundler_records.py +190 -0
- specify_cli-0.11.4/tests/unit/test_bundler_references.py +41 -0
- specify_cli-0.11.4/tests/unit/test_bundler_resolver.py +81 -0
- specify_cli-0.11.4/tests/unit/test_bundler_validator.py +32 -0
- specify_cli-0.11.4/tests/unit/test_bundler_versioning.py +68 -0
- specify_cli-0.11.2/.gitattributes +0 -3
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.editorconfig +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/CODEOWNERS +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/dependabot.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/stale.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/.zenodo.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/CITATION.cff +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/DEVELOPMENT.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/LICENSE +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/SECURITY.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/SUPPORT.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/.gitignore +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/community/friends.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/community/overview.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/community/presets.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/docfx.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/index.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/install/one-time.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/install/pipx.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/install/uv.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/installation.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/local-development.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/quickstart.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/reference/authentication.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/reference/extensions.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/reference/integrations.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/reference/presets.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/reference/workflows.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/template/public/main.css +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/toc.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/docs/upgrade.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/bug/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/.gitignore +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/LICENSE +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/extensions/template/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/integrations/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/integrations/catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/integrations/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/media/logo_large.webp +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/media/logo_small.webp +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/media/specify_cli.gif +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/newsletters/2026-April.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/newsletters/2026-February.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/newsletters/2026-March.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/newsletters/2026-May.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/lean/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/lean/preset.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/scaffold/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/templates/agent-file-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/spec-driven.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/spec-kit.code-workspace +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_github_http.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/_version.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/commands/init.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/iflow/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/roo/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/windsurf/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/presets/_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/catalog.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/checklist-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/analyze.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/checklist.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/clarify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/constitution.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/converge.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/implement.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/plan.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/commands/tasks.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/constitution-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/plan-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/spec-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/tasks-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/templates/vscode-settings.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/auth_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/conftest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/hooks/plan.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/hooks/spec.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/http_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_cli.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_iflow.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_roo.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_windsurf.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/integrations/test_registry.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_authentication.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_check_tool.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_cli_version.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_commands_package.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_console_imports.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_github_http.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_merge.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_upgrade.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_version_imports.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.4}/workflows/step-catalog.json +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
2
|
+
|
|
3
|
+
.github/workflows/*.lock.yml linguist-generated=true merge=ours -whitespace
|
|
4
|
+
# The project constitution is the one dogfooding artifact carried forward.
|
|
5
|
+
# Keep it exempt from git's whitespace checks (git diff --check / CI) since its
|
|
6
|
+
# generated formatting is not hand-edited.
|
|
7
|
+
.specify/memory/constitution.md -whitespace
|
{specify_cli-0.11.2 → specify_cli-0.11.4}/.github/workflows/add-community-extension.lock.yml
RENAMED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
# - GITHUB_TOKEN
|
|
34
34
|
#
|
|
35
35
|
# Custom actions used:
|
|
36
|
-
# - actions/checkout@
|
|
36
|
+
# - actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
37
37
|
# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
38
38
|
# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
39
39
|
# - actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
@@ -162,7 +162,7 @@ jobs:
|
|
|
162
162
|
env:
|
|
163
163
|
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
|
|
164
164
|
- name: Checkout .github and .agents folders
|
|
165
|
-
uses: actions/checkout@
|
|
165
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
166
166
|
with:
|
|
167
167
|
persist-credentials: false
|
|
168
168
|
sparse-checkout: |
|
|
@@ -434,7 +434,7 @@ jobs:
|
|
|
434
434
|
echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json"
|
|
435
435
|
} >> "$GITHUB_OUTPUT"
|
|
436
436
|
- name: Checkout repository
|
|
437
|
-
uses: actions/checkout@
|
|
437
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
438
438
|
with:
|
|
439
439
|
persist-credentials: false
|
|
440
440
|
fetch-depth: 0
|
|
@@ -1332,7 +1332,7 @@ jobs:
|
|
|
1332
1332
|
echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT"
|
|
1333
1333
|
- name: Checkout repository for patch context
|
|
1334
1334
|
if: needs.agent.outputs.has_patch == 'true'
|
|
1335
|
-
uses: actions/checkout@
|
|
1335
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
1336
1336
|
with:
|
|
1337
1337
|
persist-credentials: false
|
|
1338
1338
|
# --- Threat Detection ---
|
|
@@ -1658,7 +1658,7 @@ jobs:
|
|
|
1658
1658
|
await main();
|
|
1659
1659
|
- name: Checkout repository (trusted default branch for comment events)
|
|
1660
1660
|
if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') && (github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment')
|
|
1661
|
-
uses: actions/checkout@
|
|
1661
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
1662
1662
|
with:
|
|
1663
1663
|
ref: ${{ github.event.repository.default_branch }}
|
|
1664
1664
|
token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
|
@@ -1666,7 +1666,7 @@ jobs:
|
|
|
1666
1666
|
fetch-depth: 0
|
|
1667
1667
|
- name: Checkout repository
|
|
1668
1668
|
if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') && github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment'
|
|
1669
|
-
uses: actions/checkout@
|
|
1669
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
1670
1670
|
with:
|
|
1671
1671
|
ref: ${{ steps.extract-base-branch.outputs.base-branch || github.base_ref || github.event.pull_request.base.ref || github.ref_name || github.event.repository.default_branch }}
|
|
1672
1672
|
token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
# - GITHUB_TOKEN
|
|
34
34
|
#
|
|
35
35
|
# Custom actions used:
|
|
36
|
-
# - actions/checkout@
|
|
36
|
+
# - actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
37
37
|
# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
38
38
|
# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
39
39
|
# - actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
@@ -162,7 +162,7 @@ jobs:
|
|
|
162
162
|
env:
|
|
163
163
|
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
|
|
164
164
|
- name: Checkout .github and .agents folders
|
|
165
|
-
uses: actions/checkout@
|
|
165
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
166
166
|
with:
|
|
167
167
|
persist-credentials: false
|
|
168
168
|
sparse-checkout: |
|
|
@@ -434,7 +434,7 @@ jobs:
|
|
|
434
434
|
echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json"
|
|
435
435
|
} >> "$GITHUB_OUTPUT"
|
|
436
436
|
- name: Checkout repository
|
|
437
|
-
uses: actions/checkout@
|
|
437
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
438
438
|
with:
|
|
439
439
|
persist-credentials: false
|
|
440
440
|
fetch-depth: 0
|
|
@@ -1332,7 +1332,7 @@ jobs:
|
|
|
1332
1332
|
echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT"
|
|
1333
1333
|
- name: Checkout repository for patch context
|
|
1334
1334
|
if: needs.agent.outputs.has_patch == 'true'
|
|
1335
|
-
uses: actions/checkout@
|
|
1335
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
1336
1336
|
with:
|
|
1337
1337
|
persist-credentials: false
|
|
1338
1338
|
# --- Threat Detection ---
|
|
@@ -1658,7 +1658,7 @@ jobs:
|
|
|
1658
1658
|
await main();
|
|
1659
1659
|
- name: Checkout repository (trusted default branch for comment events)
|
|
1660
1660
|
if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') && (github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment')
|
|
1661
|
-
uses: actions/checkout@
|
|
1661
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
1662
1662
|
with:
|
|
1663
1663
|
ref: ${{ github.event.repository.default_branch }}
|
|
1664
1664
|
token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
|
@@ -1666,7 +1666,7 @@ jobs:
|
|
|
1666
1666
|
fetch-depth: 0
|
|
1667
1667
|
- name: Checkout repository
|
|
1668
1668
|
if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') && github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment'
|
|
1669
|
-
uses: actions/checkout@
|
|
1669
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
1670
1670
|
with:
|
|
1671
1671
|
ref: ${{ steps.extract-base-branch.outputs.base-branch || github.base_ref || github.event.pull_request.base.ref || github.ref_name || github.event.repository.default_branch }}
|
|
1672
1672
|
token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
# - GITHUB_TOKEN
|
|
33
33
|
#
|
|
34
34
|
# Custom actions used:
|
|
35
|
-
# - actions/checkout@
|
|
35
|
+
# - actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
36
36
|
# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
37
37
|
# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
38
38
|
# - actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
@@ -161,7 +161,7 @@ jobs:
|
|
|
161
161
|
env:
|
|
162
162
|
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
|
|
163
163
|
- name: Checkout .github and .agents folders
|
|
164
|
-
uses: actions/checkout@
|
|
164
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
165
165
|
with:
|
|
166
166
|
persist-credentials: false
|
|
167
167
|
sparse-checkout: |
|
|
@@ -430,7 +430,7 @@ jobs:
|
|
|
430
430
|
echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json"
|
|
431
431
|
} >> "$GITHUB_OUTPUT"
|
|
432
432
|
- name: Checkout repository
|
|
433
|
-
uses: actions/checkout@
|
|
433
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
434
434
|
with:
|
|
435
435
|
persist-credentials: false
|
|
436
436
|
fetch-depth: 0
|
|
@@ -1277,7 +1277,7 @@ jobs:
|
|
|
1277
1277
|
echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT"
|
|
1278
1278
|
- name: Checkout repository for patch context
|
|
1279
1279
|
if: needs.agent.outputs.has_patch == 'true'
|
|
1280
|
-
uses: actions/checkout@
|
|
1280
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
1281
1281
|
with:
|
|
1282
1282
|
persist-credentials: false
|
|
1283
1283
|
# --- Threat Detection ---
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
language: [ 'actions', 'python' ]
|
|
20
20
|
steps:
|
|
21
21
|
- name: Checkout repository
|
|
22
|
-
uses: actions/checkout@
|
|
22
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
23
23
|
|
|
24
24
|
- name: Initialize CodeQL
|
|
25
25
|
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
runs-on: ubuntu-latest
|
|
31
31
|
steps:
|
|
32
32
|
- name: Checkout
|
|
33
|
-
uses: actions/checkout@
|
|
33
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
34
34
|
with:
|
|
35
35
|
fetch-depth: 0 # Fetch all history for git info
|
|
36
36
|
|
|
@@ -16,7 +16,7 @@ jobs:
|
|
|
16
16
|
pull-requests: write
|
|
17
17
|
steps:
|
|
18
18
|
- name: Checkout repository
|
|
19
|
-
uses: actions/checkout@
|
|
19
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
20
20
|
with:
|
|
21
21
|
fetch-depth: 0
|
|
22
22
|
token: ${{ secrets.RELEASE_PAT }}
|
|
@@ -12,7 +12,7 @@ jobs:
|
|
|
12
12
|
contents: write
|
|
13
13
|
steps:
|
|
14
14
|
- name: Checkout repository
|
|
15
|
-
uses: actions/checkout@
|
|
15
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
16
16
|
with:
|
|
17
17
|
fetch-depth: 0
|
|
18
18
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -13,7 +13,7 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
steps:
|
|
15
15
|
- name: Checkout
|
|
16
|
-
uses: actions/checkout@
|
|
16
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
17
17
|
|
|
18
18
|
- name: Install uv
|
|
19
19
|
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
@@ -34,7 +34,7 @@ jobs:
|
|
|
34
34
|
python-version: ["3.11", "3.12", "3.13"]
|
|
35
35
|
steps:
|
|
36
36
|
- name: Checkout
|
|
37
|
-
uses: actions/checkout@
|
|
37
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
38
38
|
|
|
39
39
|
- name: Install uv
|
|
40
40
|
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
@@ -14,7 +14,7 @@ The toolkit supports multiple AI coding assistants, allowing teams to use their
|
|
|
14
14
|
|
|
15
15
|
Each AI agent is a self-contained **integration subpackage** under `src/specify_cli/integrations/<key>/`. The subpackage exposes a single class that declares all metadata and inherits setup/teardown logic from a base class. Built-in integrations are then instantiated and added to the global `INTEGRATION_REGISTRY` by `src/specify_cli/integrations/__init__.py` via `_register_builtins()`.
|
|
16
16
|
|
|
17
|
-
```
|
|
17
|
+
```text
|
|
18
18
|
src/specify_cli/integrations/
|
|
19
19
|
├── __init__.py # INTEGRATION_REGISTRY + _register_builtins()
|
|
20
20
|
├── base.py # IntegrationBase, MarkdownIntegration, TomlIntegration, YamlIntegration, SkillsIntegration
|
|
@@ -340,18 +340,21 @@ Some agents require custom processing beyond the standard template transformatio
|
|
|
340
340
|
### Copilot Integration
|
|
341
341
|
|
|
342
342
|
GitHub Copilot has unique requirements:
|
|
343
|
+
|
|
343
344
|
- Commands use `.agent.md` extension (not `.md`)
|
|
344
345
|
- Each command gets a companion `.prompt.md` file in `.github/prompts/`
|
|
345
346
|
- Installs `.vscode/settings.json` with prompt file recommendations
|
|
346
347
|
- Context file lives at `.github/copilot-instructions.md`
|
|
347
348
|
|
|
348
349
|
Implementation: Extends `IntegrationBase` with custom `setup()` method that:
|
|
350
|
+
|
|
349
351
|
1. Processes templates with `process_template()`
|
|
350
352
|
2. Generates companion `.prompt.md` files
|
|
351
353
|
3. Merges VS Code settings
|
|
352
354
|
|
|
353
355
|
**Skills mode (`--skills`):** Copilot also supports an alternative skills-based layout
|
|
354
356
|
via `--integration-options="--skills"`. When enabled:
|
|
357
|
+
|
|
355
358
|
- Commands are scaffolded as `speckit-<name>/SKILL.md` under `.github/skills/`
|
|
356
359
|
- No companion `.prompt.md` files are generated
|
|
357
360
|
- No `.vscode/settings.json` merge
|
|
@@ -371,11 +374,13 @@ specify init my-project --integration copilot --integration-options="--skills"
|
|
|
371
374
|
### Forge Integration
|
|
372
375
|
|
|
373
376
|
Forge has special frontmatter and argument requirements:
|
|
377
|
+
|
|
374
378
|
- Uses `{{parameters}}` instead of `$ARGUMENTS`
|
|
375
379
|
- Strips `handoffs` frontmatter key (Forge-specific collaboration feature)
|
|
376
380
|
- Injects `name` field into frontmatter when missing
|
|
377
381
|
|
|
378
382
|
Implementation: Extends `MarkdownIntegration` with custom `setup()` method that:
|
|
383
|
+
|
|
379
384
|
1. Inherits standard template processing from `MarkdownIntegration`
|
|
380
385
|
2. Adds extra `$ARGUMENTS` → `{{parameters}}` replacement after template processing
|
|
381
386
|
3. Applies Forge-specific transformations via `_apply_forge_transformations()`
|
|
@@ -385,11 +390,13 @@ Implementation: Extends `MarkdownIntegration` with custom `setup()` method that:
|
|
|
385
390
|
### Goose Integration
|
|
386
391
|
|
|
387
392
|
Goose is a YAML-format agent using Block's recipe system:
|
|
393
|
+
|
|
388
394
|
- Uses `.goose/recipes/` directory for YAML recipe files
|
|
389
395
|
- Uses `{{args}}` argument placeholder
|
|
390
396
|
- Produces YAML with `prompt: |` block scalar for command content
|
|
391
397
|
|
|
392
398
|
Implementation: Extends `YamlIntegration` (parallel to `TomlIntegration`):
|
|
399
|
+
|
|
393
400
|
1. Processes templates through the standard placeholder pipeline
|
|
394
401
|
2. Extracts title and description from frontmatter
|
|
395
402
|
3. Renders output as Goose recipe YAML (version, title, description, author, extensions, activities, prompt)
|
|
@@ -400,7 +407,7 @@ Implementation: Extends `YamlIntegration` (parallel to `TomlIntegration`):
|
|
|
400
407
|
|
|
401
408
|
Branches follow one of two patterns depending on whether an issue exists:
|
|
402
409
|
|
|
403
|
-
```
|
|
410
|
+
```text
|
|
404
411
|
<type>/<number>-<short-slug> # when an issue is created first
|
|
405
412
|
<type>/<short-slug> # when no issue exists (PR-only changes)
|
|
406
413
|
```
|
|
@@ -423,15 +430,37 @@ When an issue exists, include its number immediately after the prefix — this i
|
|
|
423
430
|
|
|
424
431
|
---
|
|
425
432
|
|
|
426
|
-
##
|
|
433
|
+
## Agent Disclosure for PRs, Comments, and Commits
|
|
434
|
+
|
|
435
|
+
Disclosure is **continuous**, not a one-time event. A single AI-disclosure paragraph in the PR body does **not** cover the commits and replies you add during review rounds. Each of the following must independently attest to agent authorship.
|
|
436
|
+
|
|
437
|
+
### Commits
|
|
438
|
+
|
|
439
|
+
- **Every commit you author must carry an `Assisted-by:` trailer** identifying the agent and whether it acted autonomously or under direct human supervision, for example:
|
|
440
|
+
|
|
441
|
+
```
|
|
442
|
+
Assisted-by: GitHub Copilot (model: <name-if-known>, autonomous)
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
Use `supervised` instead of `autonomous` only when a human actually authored or line-by-line reviewed the change before it was committed.
|
|
446
|
+
- **Never push solo-authored commits that hide agent authorship behind the operator's git identity.** If an agent generated the change, the trailer must say so even when the commit is attributed to a human account.
|
|
447
|
+
- Preserve any tool-generated `Co-authored-by:` trailers (e.g. Copilot Autofix) — do not strip them to make a commit look hand-written.
|
|
448
|
+
|
|
449
|
+
### Comments
|
|
427
450
|
|
|
428
451
|
- If you are an agent working on behalf of a human, **disclose your identity in your PR comment** — name the agent (and model, if applicable) and the human you are acting for (e.g., "Posted on behalf of @user by GitHub Copilot (model: <name-if-known>)").
|
|
452
|
+
- **Re-state agent identity in each review-round summary comment.** A prior PR-body disclosure does not cover later comments or commits.
|
|
429
453
|
- Post **one** top-level summary comment per review round listing what changed and the commit SHA. Do not reply on every individual comment.
|
|
430
454
|
- Reply inline only when context is needed (disagreement, deferral, non-obvious fix). Keep it to a sentence or two.
|
|
431
455
|
- **Never click "Resolve conversation"** — that belongs to the reviewer or PR author.
|
|
432
456
|
- No emoji, no celebratory framing, no checklist mirroring the reviewer's items, no restating what the reviewer wrote.
|
|
433
457
|
- Re-request review once per round (when all feedback is addressed), not after every intermediate push.
|
|
434
458
|
|
|
459
|
+
### Anti-patterns (do not do these)
|
|
460
|
+
|
|
461
|
+
- **Do not** reply "Done" or push a "fix" within seconds/minutes of a review event without disclosing that the response or commit was agent-generated. Speed of turnaround is not a substitute for attestation — a near-instant tested code change is itself a signal of automation and must be disclosed as such.
|
|
462
|
+
- **Do not** claim "reviewed, tested, and understood by me" for commits that were authored and pushed automatically in response to a review trigger. If the loop is automated, disclose it as automated.
|
|
463
|
+
|
|
435
464
|
---
|
|
436
465
|
|
|
437
466
|
## Common Pitfalls
|
|
@@ -441,6 +470,7 @@ When an issue exists, include its number immediately after the prefix — this i
|
|
|
441
470
|
3. **Incorrect `requires_cli` value**: Set to `True` only for agents that have a CLI tool; set to `False` for IDE-based agents.
|
|
442
471
|
4. **Wrong argument format**: Use `$ARGUMENTS` for Markdown agents, `{{args}}` for TOML agents.
|
|
443
472
|
5. **Skipping registration**: The import and `_register()` call in `_register_builtins()` must both be added.
|
|
473
|
+
6. **Running tests against the wrong environment**: Always run the suite inside this working tree's own virtualenv (`uv sync --extra test` then `.venv/bin/python -m pytest`, or activate the venv first). A bare `uv run pytest` can resolve to an ambient/global interpreter whose editable `.pth` points at a *different* worktree. The failure is sneaky: test collection still imports `specify_cli` successfully, but newly-added subpackages (e.g. a fresh `specify_cli/bundler/`) resolve as a stale namespace package and raise `ModuleNotFoundError`. If a brand-new subpackage imports under `python -c` but not under pytest, suspect environment contamination, not your code.
|
|
444
474
|
|
|
445
475
|
---
|
|
446
476
|
|
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.11.4] - 2026-06-22
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- [extension] Add Tasks to GitHub Project extension to community catalog (#3090)
|
|
10
|
+
- Update Linear Integration extension to v0.7.0 (#3089)
|
|
11
|
+
- fix: fail loudly on an unknown workflow expression filter (#3074)
|
|
12
|
+
- fix: anchor lib/ and lib64/ patterns to repo root in .gitignore (#3083)
|
|
13
|
+
- fix(build): include specify_cli.bundler.lib in built distribution (#3085)
|
|
14
|
+
- Harden command registration path handling (#3088)
|
|
15
|
+
- fix(presets): preserve argument-hint in preset SKILL.md generation (#2978)
|
|
16
|
+
- feat: surface gate detail in the workflow run/resume --json payload (#2965)
|
|
17
|
+
- feat: add `specify bundle` command (#3070)
|
|
18
|
+
- chore: release 0.11.3, begin 0.11.4.dev0 development (#3072)
|
|
19
|
+
|
|
20
|
+
## [0.11.3] - 2026-06-19
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- docs: strengthen agent disclosure to cover commits and per-round comments (#3071)
|
|
25
|
+
- fix: isolate per-extension failures so one bad extension can't drop the rest (#2951)
|
|
26
|
+
- fix(taskstoissues): skip tasks that already have a GitHub issue (#2992)
|
|
27
|
+
- feat(scripts): add SPECIFY_INIT_DIR to target a member project from the repo root (#2892)
|
|
28
|
+
- Update Multi-Model Review extension to v0.1.2 (#3066)
|
|
29
|
+
- chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 (#3064)
|
|
30
|
+
- feat(claude): run /analyze in a forked subagent (#2511)
|
|
31
|
+
- fix: count worktree branches in git extension numbering (#3054)
|
|
32
|
+
- Add Token Economy extension to community catalog (#3049)
|
|
33
|
+
- chore: release 0.11.2, begin 0.11.3.dev0 development (#3059)
|
|
34
|
+
|
|
5
35
|
## [0.11.2] - 2026-06-18
|
|
6
36
|
|
|
7
37
|
### Changed
|
|
@@ -1823,4 +1853,3 @@
|
|
|
1823
1853
|
### Changed
|
|
1824
1854
|
|
|
1825
1855
|
- Update release.yml
|
|
1826
|
-
|
|
@@ -95,6 +95,24 @@ uv run python -m pytest tests/test_agent_config_consistency.py -q
|
|
|
95
95
|
|
|
96
96
|
Run this when you change agent metadata, context update scripts, or integration wiring.
|
|
97
97
|
|
|
98
|
+
#### Running the full test suite
|
|
99
|
+
|
|
100
|
+
Install the test dependencies into the project's own virtual environment and run
|
|
101
|
+
`pytest` through that interpreter:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
uv pip install -e ".[test]"
|
|
105
|
+
.venv/bin/python -m pytest tests -q # Windows: .venv\Scripts\python -m pytest tests -q
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
> **Note:** prefer `.venv/bin/python -m pytest` over a bare `uv run pytest`.
|
|
109
|
+
> If another Spec Kit checkout has an editable (`-e`) install registered in a
|
|
110
|
+
> shared/global environment, `uv run pytest` can resolve `specify_cli` to that
|
|
111
|
+
> *other* worktree, turning it into a partial namespace package that fails to
|
|
112
|
+
> import newly added subpackages. Running through the project `.venv` resolves
|
|
113
|
+
> `specify_cli` to this checkout's `src/`. This matches the gotcha documented in
|
|
114
|
+
> `AGENTS.md` (Common Pitfalls).
|
|
115
|
+
|
|
98
116
|
### Manual testing
|
|
99
117
|
|
|
100
118
|
#### Testing setup
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specify-cli
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.4
|
|
4
4
|
Summary: Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD).
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -46,6 +46,7 @@ Description-Content-Type: text/markdown
|
|
|
46
46
|
- [🤖 Supported AI Coding Agent Integrations](#-supported-ai-coding-agent-integrations)
|
|
47
47
|
- [🔧 Specify CLI Reference](#-specify-cli-reference)
|
|
48
48
|
- [🧩 Making Spec Kit Your Own: Extensions & Presets](#-making-spec-kit-your-own-extensions--presets)
|
|
49
|
+
- [📦 Bundles: Role-Based Setups](#-bundles-role-based-setups)
|
|
49
50
|
- [📚 Core Philosophy](#-core-philosophy)
|
|
50
51
|
- [🌟 Development Phases](#-development-phases)
|
|
51
52
|
- [🎯 Experimental Goals](#-experimental-goals)
|
|
@@ -248,6 +249,56 @@ For example, presets could restructure spec templates to require regulatory trac
|
|
|
248
249
|
|
|
249
250
|
See the [Presets reference](https://github.github.io/spec-kit/reference/presets.html) for the full command guide, including resolution order and priority stacking.
|
|
250
251
|
|
|
252
|
+
## 📦 Bundles: Role-Based Setups
|
|
253
|
+
|
|
254
|
+
Extensions and presets are individual building blocks. A **bundle** packages a
|
|
255
|
+
curated set of them — extensions, presets, steps, and workflows — into a single,
|
|
256
|
+
versioned, role-oriented setup so a whole team persona (product manager, business
|
|
257
|
+
analyst, security researcher, developer, …) can be provisioned with one command.
|
|
258
|
+
|
|
259
|
+
A bundle is described by a hand-written `bundle.yml` manifest. It pins each
|
|
260
|
+
component to a version and, optionally, targets a specific integration; a bundle
|
|
261
|
+
with no `integration` is **agnostic** and inherits whatever integration the
|
|
262
|
+
project already uses.
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
# Discover bundles in the active catalog stack
|
|
266
|
+
specify bundle search [<query>]
|
|
267
|
+
|
|
268
|
+
# Inspect the exact component set a bundle will add (equals what install does)
|
|
269
|
+
specify bundle info <bundle-id>
|
|
270
|
+
|
|
271
|
+
# Install a bundle's full component set in one operation
|
|
272
|
+
specify bundle install <bundle-id>
|
|
273
|
+
|
|
274
|
+
# See what's installed, then update or remove non-destructively
|
|
275
|
+
specify bundle list
|
|
276
|
+
specify bundle update <bundle-id> # or --all
|
|
277
|
+
specify bundle remove <bundle-id> # removes only this bundle's components
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Bundles resolve from a **priority-ordered catalog stack** (project > user >
|
|
281
|
+
built-in). Each source carries an install policy: `install-allowed` sources can
|
|
282
|
+
be installed from, while `discovery-only` sources are visible in `search`/`info`
|
|
283
|
+
but refuse installation. Manage the stack with `specify bundle catalog list|add|remove`.
|
|
284
|
+
|
|
285
|
+
Authors validate and package bundles locally — there is no first-class publish;
|
|
286
|
+
distribution is hosting the built artifact and adding a catalog entry:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
specify bundle validate --path ./my-bundle # structural + reference checks
|
|
290
|
+
specify bundle build --path ./my-bundle # produce a versioned .zip artifact
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Four ready-to-read example manifests live under
|
|
294
|
+
[`examples/bundles/`](examples/bundles/) (product manager, business analyst,
|
|
295
|
+
security researcher, developer).
|
|
296
|
+
|
|
297
|
+
Key guarantees: `info` shows exactly what `install` adds (transparency);
|
|
298
|
+
installs are idempotent and confined to the project root; `remove` never touches
|
|
299
|
+
components another installed bundle still needs; and all consume/author commands
|
|
300
|
+
work **offline** against local or pinned sources.
|
|
301
|
+
|
|
251
302
|
### When to Use Which
|
|
252
303
|
|
|
253
304
|
| Goal | Use |
|
|
@@ -257,6 +308,7 @@ See the [Presets reference](https://github.github.io/spec-kit/reference/presets.
|
|
|
257
308
|
| Integrate an external tool or service | Extension |
|
|
258
309
|
| Enforce organizational or regulatory standards | Preset |
|
|
259
310
|
| Ship reusable domain-specific templates | Either — presets for template overrides, extensions for templates bundled with new commands |
|
|
311
|
+
| Provision a complete role-based setup in one command | Bundle |
|
|
260
312
|
|
|
261
313
|
## 📚 Core Philosophy
|
|
262
314
|
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
- [🤖 Supported AI Coding Agent Integrations](#-supported-ai-coding-agent-integrations)
|
|
27
27
|
- [🔧 Specify CLI Reference](#-specify-cli-reference)
|
|
28
28
|
- [🧩 Making Spec Kit Your Own: Extensions & Presets](#-making-spec-kit-your-own-extensions--presets)
|
|
29
|
+
- [📦 Bundles: Role-Based Setups](#-bundles-role-based-setups)
|
|
29
30
|
- [📚 Core Philosophy](#-core-philosophy)
|
|
30
31
|
- [🌟 Development Phases](#-development-phases)
|
|
31
32
|
- [🎯 Experimental Goals](#-experimental-goals)
|
|
@@ -228,6 +229,56 @@ For example, presets could restructure spec templates to require regulatory trac
|
|
|
228
229
|
|
|
229
230
|
See the [Presets reference](https://github.github.io/spec-kit/reference/presets.html) for the full command guide, including resolution order and priority stacking.
|
|
230
231
|
|
|
232
|
+
## 📦 Bundles: Role-Based Setups
|
|
233
|
+
|
|
234
|
+
Extensions and presets are individual building blocks. A **bundle** packages a
|
|
235
|
+
curated set of them — extensions, presets, steps, and workflows — into a single,
|
|
236
|
+
versioned, role-oriented setup so a whole team persona (product manager, business
|
|
237
|
+
analyst, security researcher, developer, …) can be provisioned with one command.
|
|
238
|
+
|
|
239
|
+
A bundle is described by a hand-written `bundle.yml` manifest. It pins each
|
|
240
|
+
component to a version and, optionally, targets a specific integration; a bundle
|
|
241
|
+
with no `integration` is **agnostic** and inherits whatever integration the
|
|
242
|
+
project already uses.
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Discover bundles in the active catalog stack
|
|
246
|
+
specify bundle search [<query>]
|
|
247
|
+
|
|
248
|
+
# Inspect the exact component set a bundle will add (equals what install does)
|
|
249
|
+
specify bundle info <bundle-id>
|
|
250
|
+
|
|
251
|
+
# Install a bundle's full component set in one operation
|
|
252
|
+
specify bundle install <bundle-id>
|
|
253
|
+
|
|
254
|
+
# See what's installed, then update or remove non-destructively
|
|
255
|
+
specify bundle list
|
|
256
|
+
specify bundle update <bundle-id> # or --all
|
|
257
|
+
specify bundle remove <bundle-id> # removes only this bundle's components
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Bundles resolve from a **priority-ordered catalog stack** (project > user >
|
|
261
|
+
built-in). Each source carries an install policy: `install-allowed` sources can
|
|
262
|
+
be installed from, while `discovery-only` sources are visible in `search`/`info`
|
|
263
|
+
but refuse installation. Manage the stack with `specify bundle catalog list|add|remove`.
|
|
264
|
+
|
|
265
|
+
Authors validate and package bundles locally — there is no first-class publish;
|
|
266
|
+
distribution is hosting the built artifact and adding a catalog entry:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
specify bundle validate --path ./my-bundle # structural + reference checks
|
|
270
|
+
specify bundle build --path ./my-bundle # produce a versioned .zip artifact
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Four ready-to-read example manifests live under
|
|
274
|
+
[`examples/bundles/`](examples/bundles/) (product manager, business analyst,
|
|
275
|
+
security researcher, developer).
|
|
276
|
+
|
|
277
|
+
Key guarantees: `info` shows exactly what `install` adds (transparency);
|
|
278
|
+
installs are idempotent and confined to the project root; `remove` never touches
|
|
279
|
+
components another installed bundle still needs; and all consume/author commands
|
|
280
|
+
work **offline** against local or pinned sources.
|
|
281
|
+
|
|
231
282
|
### When to Use Which
|
|
232
283
|
|
|
233
284
|
| Goal | Use |
|
|
@@ -237,6 +288,7 @@ See the [Presets reference](https://github.github.io/spec-kit/reference/presets.
|
|
|
237
288
|
| Integrate an external tool or service | Extension |
|
|
238
289
|
| Enforce organizational or regulatory standards | Preset |
|
|
239
290
|
| Ship reusable domain-specific templates | Either — presets for template overrides, extensions for templates bundled with new commands |
|
|
291
|
+
| Provision a complete role-based setup in one command | Bundle |
|
|
240
292
|
|
|
241
293
|
## 📚 Core Philosophy
|
|
242
294
|
|
|
@@ -128,11 +128,13 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
128
128
|
| Superpowers Bridge | Bridges selected Superpowers disciplines into Spec Kit as evidence-first trust gates for agent workflows. | `process` | Read+Write | [superpowers-bridge](https://github.com/RbBtSn0w/spec-kit-extensions/tree/main/superpowers-bridge) |
|
|
129
129
|
| Superpowers Implementation Bridge | Thin orchestrator between Spec Kit (design) and Superpowers (implementation). Cross-agent. | `process` | Read+Write | [speckit-superpowers-bridge](https://github.com/lihan3238/speckit-superpowers-bridge) |
|
|
130
130
|
| Superspec | Bridges spec-kit with obra/superpowers (brainstorming, TDD, subagent, code-review) into a unified, resumable workflow with graceful degradation and session progress tracking | `process` | Read+Write | [superspec](https://github.com/WangX0111/superspec) |
|
|
131
|
+
| Tasks to GitHub Project | Publish and synchronize Spec Kit tasks as cards on a GitHub Project (v2) kanban board, with priority and status sync between spec.md/tasks.md and the board. | `integration` | Read+Write | [spec-kit-tasks-to-project](https://github.com/mancioshell/spec-kit-tasks-to-project) |
|
|
131
132
|
| Team Assign | Assign tasks.md items to human engineers, split into subtasks, and generate a per-engineer workboard | `process` | Read+Write | [spec-kit-team-assign](https://github.com/tarunkumarbhati/spec-kit-team-assign) |
|
|
132
133
|
| Time Machine | Retroactively apply the full SDD workflow to existing codebases — analyse, spec, and ship feature-by-feature | `process` | Read+Write | [spec-kit-time-machine](https://github.com/teeyo/spec-kit-time-machine) |
|
|
133
134
|
| TinySpec | Lightweight single-file workflow for small tasks — skip the heavy multi-step SDD process | `process` | Read+Write | [spec-kit-tinyspec](https://github.com/Quratulain-bilal/spec-kit-tinyspec) |
|
|
134
135
|
| Token Budget | Reduces LLM token consumption in Spec Kit workflows: compact artifacts in-place, scope per-phase reading, suppress prose padding, and report token usage | `process` | Read+Write | [spec-kit-token-budget](https://github.com/tinesoft/spec-kit-token-budget) |
|
|
135
136
|
| Token Consumption Analyzer | Captures, analyzes, and compares token consumption across SDD workflows | `visibility` | Read-only | [spec-kit-token-analyzer](https://github.com/coderandhiker/spec-kit-token-analyzer) |
|
|
137
|
+
| Token Economy | Token routing, measured savings, and context audit workflows | `process` | Read+Write | [spec-kit-token-economy](https://github.com/formin/spec-kit-token-economy) |
|
|
136
138
|
| V-Model Extension Pack | Enforces V-Model paired generation of development specs and test specs with full traceability | `docs` | Read+Write | [spec-kit-v-model](https://github.com/leocamello/spec-kit-v-model) |
|
|
137
139
|
| Verify Extension | Post-implementation quality gate that validates implemented code against specification artifacts | `code` | Read-only | [spec-kit-verify](https://github.com/ismaelJimenez/spec-kit-verify) |
|
|
138
140
|
| Verify Tasks Extension | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation | `code` | Read-only | [spec-kit-verify-tasks](https://github.com/datastone-inc/spec-kit-verify-tasks) |
|