specify-cli 0.11.2__tar.gz → 0.11.3__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.2 → specify_cli-0.11.3}/.github/workflows/add-community-extension.lock.yml +6 -6
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/add-community-preset.lock.yml +6 -6
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/bug-assess.lock.yml +4 -4
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/codeql.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/docs.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/lint.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/release-trigger.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/release.yml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/test.yml +2 -2
- {specify_cli-0.11.2 → specify_cli-0.11.3}/AGENTS.md +23 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/CHANGELOG.md +17 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/PKG-INFO +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/community/extensions.md +1 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/reference/core.md +4 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/catalog.community.json +44 -4
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/bash/create-new-feature-branch.sh +13 -3
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +11 -2
- {specify_cli-0.11.2 → specify_cli-0.11.3}/pyproject.toml +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/bash/common.sh +39 -2
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/bash/create-new-feature.sh +1 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/powershell/common.ps1 +42 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/extensions.py +64 -28
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/claude/__init__.py +45 -41
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/taskstoissues.md +5 -2
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/extensions/git/test_git_extension.py +127 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_claude.py +97 -1
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_extension_skills.py +87 -0
- specify_cli-0.11.3/tests/test_init_dir.py +467 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.editorconfig +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.gitattributes +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/CODEOWNERS +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/dependabot.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.github/workflows/stale.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.gitignore +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/.zenodo.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/CITATION.cff +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/CONTRIBUTING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/DEVELOPMENT.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/LICENSE +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/SECURITY.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/SUPPORT.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/.gitignore +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/community/friends.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/community/overview.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/community/presets.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/docfx.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/index.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/install/one-time.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/install/pipx.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/install/uv.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/installation.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/local-development.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/quickstart.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/reference/authentication.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/reference/extensions.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/reference/integrations.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/reference/overview.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/reference/presets.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/reference/workflows.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/template/public/main.css +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/toc.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/docs/upgrade.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/bug/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/.gitignore +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/LICENSE +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/template/extension.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/integrations/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/integrations/catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/integrations/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/media/logo_large.webp +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/media/logo_small.webp +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/media/specify_cli.gif +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/newsletters/2026-April.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/newsletters/2026-February.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/newsletters/2026-March.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/newsletters/2026-May.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/lean/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/lean/preset.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/scaffold/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/templates/agent-file-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/spec-driven.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/spec-kit.code-workspace +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_github_http.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/_version.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/agents.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/commands/init.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/iflow/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/roo/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/windsurf/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/presets/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/presets/_commands.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/catalog.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/engine.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/expressions.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/checklist-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/analyze.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/checklist.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/clarify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/constitution.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/converge.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/implement.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/plan.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/specify.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/commands/tasks.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/constitution-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/plan-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/spec-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/tasks-template.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/templates/vscode-settings.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/auth_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/conftest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/hooks/plan.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/hooks/spec.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/http_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_cli.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_iflow.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_roo.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_windsurf.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/integrations/test_registry.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_authentication.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_check_tool.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_cli_version.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_commands_package.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_console_imports.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_extensions.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_github_http.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_merge.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_presets.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_upgrade.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_version_imports.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/tests/test_workflows.py +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/README.md +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/catalog.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.11.2 → specify_cli-0.11.3}/workflows/step-catalog.json +0 -0
{specify_cli-0.11.2 → specify_cli-0.11.3}/.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
|
|
@@ -423,15 +423,37 @@ When an issue exists, include its number immediately after the prefix — this i
|
|
|
423
423
|
|
|
424
424
|
---
|
|
425
425
|
|
|
426
|
-
##
|
|
426
|
+
## Agent Disclosure for PRs, Comments, and Commits
|
|
427
|
+
|
|
428
|
+
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.
|
|
429
|
+
|
|
430
|
+
### Commits
|
|
431
|
+
|
|
432
|
+
- **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:
|
|
433
|
+
|
|
434
|
+
```
|
|
435
|
+
Assisted-by: GitHub Copilot (model: <name-if-known>, autonomous)
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
Use `supervised` instead of `autonomous` only when a human actually authored or line-by-line reviewed the change before it was committed.
|
|
439
|
+
- **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.
|
|
440
|
+
- Preserve any tool-generated `Co-authored-by:` trailers (e.g. Copilot Autofix) — do not strip them to make a commit look hand-written.
|
|
441
|
+
|
|
442
|
+
### Comments
|
|
427
443
|
|
|
428
444
|
- 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>)").
|
|
445
|
+
- **Re-state agent identity in each review-round summary comment.** A prior PR-body disclosure does not cover later comments or commits.
|
|
429
446
|
- Post **one** top-level summary comment per review round listing what changed and the commit SHA. Do not reply on every individual comment.
|
|
430
447
|
- Reply inline only when context is needed (disagreement, deferral, non-obvious fix). Keep it to a sentence or two.
|
|
431
448
|
- **Never click "Resolve conversation"** — that belongs to the reviewer or PR author.
|
|
432
449
|
- No emoji, no celebratory framing, no checklist mirroring the reviewer's items, no restating what the reviewer wrote.
|
|
433
450
|
- Re-request review once per round (when all feedback is addressed), not after every intermediate push.
|
|
434
451
|
|
|
452
|
+
### Anti-patterns (do not do these)
|
|
453
|
+
|
|
454
|
+
- **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.
|
|
455
|
+
- **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.
|
|
456
|
+
|
|
435
457
|
---
|
|
436
458
|
|
|
437
459
|
## Common Pitfalls
|
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.11.3] - 2026-06-19
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- docs: strengthen agent disclosure to cover commits and per-round comments (#3071)
|
|
10
|
+
- fix: isolate per-extension failures so one bad extension can't drop the rest (#2951)
|
|
11
|
+
- fix(taskstoissues): skip tasks that already have a GitHub issue (#2992)
|
|
12
|
+
- feat(scripts): add SPECIFY_INIT_DIR to target a member project from the repo root (#2892)
|
|
13
|
+
- Update Multi-Model Review extension to v0.1.2 (#3066)
|
|
14
|
+
- chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 (#3064)
|
|
15
|
+
- feat(claude): run /analyze in a forked subagent (#2511)
|
|
16
|
+
- fix: count worktree branches in git extension numbering (#3054)
|
|
17
|
+
- Add Token Economy extension to community catalog (#3049)
|
|
18
|
+
- chore: release 0.11.2, begin 0.11.3.dev0 development (#3059)
|
|
19
|
+
|
|
20
|
+
- feat(scripts): add SPECIFY_INIT_DIR to target a member project from the repo root (#2892)
|
|
21
|
+
|
|
5
22
|
## [0.11.2] - 2026-06-18
|
|
6
23
|
|
|
7
24
|
### Changed
|
|
@@ -1823,4 +1840,3 @@
|
|
|
1823
1840
|
### Changed
|
|
1824
1841
|
|
|
1825
1842
|
- Update release.yml
|
|
1826
|
-
|
|
@@ -133,6 +133,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
133
133
|
| 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
134
|
| 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
135
|
| 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) |
|
|
136
|
+
| 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
137
|
| 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
138
|
| 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
139
|
| 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) |
|
|
@@ -50,8 +50,12 @@ specify init my-project --integration copilot --preset compliance
|
|
|
50
50
|
|
|
51
51
|
| Variable | Description |
|
|
52
52
|
| ----------------- | ------------------------------------------------------------------------ |
|
|
53
|
+
| `SPECIFY_INIT_DIR` | Target a member project from outside its directory (e.g. a monorepo root) without `cd`, for non-interactive / CI use. Set it to the **project root** — the directory *containing* `.specify/` (relative paths resolve against the current directory). The path must exist and contain `.specify/`, otherwise the command errors and does **not** fall back to the current directory. Resolved once in the core root helper (`get_repo_root` in Bash, `Get-RepoRoot` in PowerShell), so it is honored by the core feature scripts (`/speckit.plan`, `/speckit.tasks`, …) and the Git extension's feature-branch creation, which inherit it. When unset, the project is detected by searching upward from the current directory as before. |
|
|
54
|
+
| `SPECIFY_FEATURE_DIRECTORY` | Override the active feature directory *within* the resolved project (takes precedence over `.specify/feature.json`). Relative paths resolve under the project root. Combine with `SPECIFY_INIT_DIR` to pick both the project and the feature non-interactively. |
|
|
53
55
|
| `SPECIFY_FEATURE` | Override feature detection for non-Git repositories. Set to the feature directory name (e.g., `001-photo-albums`) to work on a specific feature when not using Git branches. Must be set in the context of the agent prior to using `/speckit.plan` or follow-up commands. |
|
|
54
56
|
|
|
57
|
+
> **Two resolution axes.** `SPECIFY_INIT_DIR` selects the **project** (which directory contains `.specify/`); `SPECIFY_FEATURE_DIRECTORY` / `.specify/feature.json` select the **feature** within that project. They are independent — project first, then feature.
|
|
58
|
+
|
|
55
59
|
## Check Installed Tools
|
|
56
60
|
|
|
57
61
|
```bash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-06-
|
|
3
|
+
"updated_at": "2026-06-18T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"aide": {
|
|
@@ -2063,8 +2063,8 @@
|
|
|
2063
2063
|
"id": "multi-model-review",
|
|
2064
2064
|
"description": "Cross-model Spec Kit handoffs for spec authoring, implementation routing, and review.",
|
|
2065
2065
|
"author": "formin",
|
|
2066
|
-
"version": "0.1.
|
|
2067
|
-
"download_url": "https://github.com/formin/multi-model-review/archive/refs/tags/v0.1.
|
|
2066
|
+
"version": "0.1.2",
|
|
2067
|
+
"download_url": "https://github.com/formin/multi-model-review/archive/refs/tags/v0.1.2.zip",
|
|
2068
2068
|
"repository": "https://github.com/formin/multi-model-review",
|
|
2069
2069
|
"homepage": "https://github.com/formin/multi-model-review",
|
|
2070
2070
|
"documentation": "https://github.com/formin/multi-model-review/blob/main/README.md",
|
|
@@ -2108,7 +2108,7 @@
|
|
|
2108
2108
|
"downloads": 0,
|
|
2109
2109
|
"stars": 0,
|
|
2110
2110
|
"created_at": "2026-05-04T02:51:52Z",
|
|
2111
|
-
"updated_at": "2026-06-
|
|
2111
|
+
"updated_at": "2026-06-18T00:00:00Z"
|
|
2112
2112
|
},
|
|
2113
2113
|
"multi-sites": {
|
|
2114
2114
|
"name": "Multi-Sites Spec Kit",
|
|
@@ -3798,6 +3798,46 @@
|
|
|
3798
3798
|
"created_at": "2026-05-26T00:00:00Z",
|
|
3799
3799
|
"updated_at": "2026-05-26T00:00:00Z"
|
|
3800
3800
|
},
|
|
3801
|
+
"token-economy": {
|
|
3802
|
+
"name": "Token Economy",
|
|
3803
|
+
"id": "token-economy",
|
|
3804
|
+
"description": "Token routing, measured savings, and context audit workflows.",
|
|
3805
|
+
"author": "formin",
|
|
3806
|
+
"version": "1.0.0",
|
|
3807
|
+
"download_url": "https://github.com/formin/spec-kit-token-economy/archive/refs/tags/v1.0.0.zip",
|
|
3808
|
+
"repository": "https://github.com/formin/spec-kit-token-economy",
|
|
3809
|
+
"homepage": "https://github.com/formin/spec-kit-token-economy",
|
|
3810
|
+
"documentation": "https://github.com/formin/spec-kit-token-economy/blob/main/README.md",
|
|
3811
|
+
"changelog": "https://github.com/formin/spec-kit-token-economy/blob/main/CHANGELOG.md",
|
|
3812
|
+
"license": "MIT",
|
|
3813
|
+
"category": "process",
|
|
3814
|
+
"effect": "read-write",
|
|
3815
|
+
"requires": {
|
|
3816
|
+
"speckit_version": ">=0.10.0",
|
|
3817
|
+
"tools": [
|
|
3818
|
+
{ "name": "rtk", "required": false },
|
|
3819
|
+
{ "name": "headroom", "required": false },
|
|
3820
|
+
{ "name": "token-router", "required": false },
|
|
3821
|
+
{ "name": "ollama", "required": false },
|
|
3822
|
+
{ "name": "python", "version": ">=3.10", "required": false }
|
|
3823
|
+
]
|
|
3824
|
+
},
|
|
3825
|
+
"provides": {
|
|
3826
|
+
"commands": 3,
|
|
3827
|
+
"hooks": 2
|
|
3828
|
+
},
|
|
3829
|
+
"tags": [
|
|
3830
|
+
"tokens",
|
|
3831
|
+
"routing",
|
|
3832
|
+
"reporting",
|
|
3833
|
+
"context"
|
|
3834
|
+
],
|
|
3835
|
+
"verified": false,
|
|
3836
|
+
"downloads": 0,
|
|
3837
|
+
"stars": 0,
|
|
3838
|
+
"created_at": "2026-06-17T00:00:00Z",
|
|
3839
|
+
"updated_at": "2026-06-17T00:00:00Z"
|
|
3840
|
+
},
|
|
3801
3841
|
"trace": {
|
|
3802
3842
|
"name": "Spec Trace",
|
|
3803
3843
|
"id": "trace",
|
{specify_cli-0.11.2 → specify_cli-0.11.3}/extensions/git/scripts/bash/create-new-feature-branch.sh
RENAMED
|
@@ -127,7 +127,7 @@ get_highest_from_specs() {
|
|
|
127
127
|
|
|
128
128
|
# Function to get highest number from git branches
|
|
129
129
|
get_highest_from_branches() {
|
|
130
|
-
git branch -a 2>/dev/null | sed 's/^[
|
|
130
|
+
git branch -a 2>/dev/null | sed -E 's/^[+*][[:space:]]+//; s/^[[:space:]]+//; s|^remotes/[^/]*/||' | _extract_highest_number
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
# Extract the highest sequential feature number from a list of ref names (one per line).
|
|
@@ -235,9 +235,19 @@ if [ "$_common_loaded" != "true" ]; then
|
|
|
235
235
|
exit 1
|
|
236
236
|
fi
|
|
237
237
|
|
|
238
|
-
#
|
|
238
|
+
# SPECIFY_INIT_DIR is resolved (and validated) by the core resolver. If only the
|
|
239
|
+
# minimal git-common.sh was loaded, or an older core common.sh without the
|
|
240
|
+
# resolver was loaded, refuse rather than silently falling back to the wrong root.
|
|
241
|
+
if [ -n "${SPECIFY_INIT_DIR:-}" ] && ! type resolve_specify_init_dir >/dev/null 2>&1; then
|
|
242
|
+
echo "Error: SPECIFY_INIT_DIR requires updated Spec Kit core scripts (common.sh with resolve_specify_init_dir), which were not found." >&2
|
|
243
|
+
exit 1
|
|
244
|
+
fi
|
|
245
|
+
|
|
246
|
+
# Resolve repository root. When the core scripts are present, get_repo_root
|
|
247
|
+
# honors SPECIFY_INIT_DIR (the explicit project override for non-interactive /
|
|
248
|
+
# CI use) and hard-fails on an invalid value with no silent fallback.
|
|
239
249
|
if type get_repo_root >/dev/null 2>&1; then
|
|
240
|
-
REPO_ROOT=$(get_repo_root)
|
|
250
|
+
REPO_ROOT=$(get_repo_root) || exit 1
|
|
241
251
|
elif git rev-parse --show-toplevel >/dev/null 2>&1; then
|
|
242
252
|
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
243
253
|
elif [ -n "$_PROJECT_ROOT" ]; then
|
|
@@ -88,7 +88,7 @@ function Get-HighestNumberFromBranches {
|
|
|
88
88
|
$branches = git branch -a 2>$null
|
|
89
89
|
if ($LASTEXITCODE -eq 0 -and $branches) {
|
|
90
90
|
$cleanNames = $branches | ForEach-Object {
|
|
91
|
-
$_.Trim() -replace '
|
|
91
|
+
$_.Trim() -replace '^[+*]?\s+', '' -replace '^remotes/[^/]+/', ''
|
|
92
92
|
}
|
|
93
93
|
return Get-HighestNumberFromNames -Names $cleanNames
|
|
94
94
|
}
|
|
@@ -197,7 +197,16 @@ if (-not $commonLoaded) {
|
|
|
197
197
|
throw "Unable to locate common script file. Please ensure the Specify core scripts are installed."
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
#
|
|
200
|
+
# SPECIFY_INIT_DIR is resolved (and validated) by the core resolver. If only the
|
|
201
|
+
# minimal git-common.ps1 was loaded, or an older core common.ps1 without the
|
|
202
|
+
# resolver was loaded, refuse rather than silently falling back to the wrong root.
|
|
203
|
+
if ($env:SPECIFY_INIT_DIR -and -not (Get-Command Resolve-SpecifyInitDir -CommandType Function -ErrorAction SilentlyContinue)) {
|
|
204
|
+
throw "SPECIFY_INIT_DIR requires updated Spec Kit core scripts (common.ps1 with Resolve-SpecifyInitDir), which were not found."
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
# Resolve repository root. When the core scripts are present, Get-RepoRoot
|
|
208
|
+
# honors SPECIFY_INIT_DIR (the explicit project override for non-interactive /
|
|
209
|
+
# CI use) and hard-fails on an invalid value with no silent fallback.
|
|
201
210
|
if (Get-Command Get-RepoRoot -ErrorAction SilentlyContinue) {
|
|
202
211
|
$repoRoot = Get-RepoRoot
|
|
203
212
|
} elseif ($projectRoot) {
|
|
@@ -24,9 +24,42 @@ find_specify_root() {
|
|
|
24
24
|
return 1
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
# Resolve an explicit SPECIFY_INIT_DIR project override (the directory that
|
|
28
|
+
# *contains* .specify/), for non-interactive / CI use — e.g. running a Spec Kit
|
|
29
|
+
# command against a member project from a monorepo root without cd.
|
|
30
|
+
#
|
|
31
|
+
# Precondition: SPECIFY_INIT_DIR is non-empty. Echoes the validated absolute
|
|
32
|
+
# project root, or prints an error and returns 1. Strict by design: the path
|
|
33
|
+
# must exist and contain .specify/, with no silent fallback to cwd or the
|
|
34
|
+
# script-location default (which would silently write to the wrong project).
|
|
35
|
+
#
|
|
36
|
+
# This is the single resolver: bundled extensions inherit it by sourcing core
|
|
37
|
+
# (e.g. the git extension's create-new-feature-branch) rather than duplicating it.
|
|
38
|
+
resolve_specify_init_dir() {
|
|
39
|
+
local init_root
|
|
40
|
+
# Normalize: relative paths resolve against $(pwd); a trailing slash collapses.
|
|
41
|
+
# CDPATH="" so a relative value cannot be resolved against the caller's CDPATH
|
|
42
|
+
# (which would also echo to stdout and corrupt the captured path).
|
|
43
|
+
if ! init_root="$(CDPATH="" cd -- "$SPECIFY_INIT_DIR" 2>/dev/null && pwd)"; then
|
|
44
|
+
echo "ERROR: SPECIFY_INIT_DIR does not point to an existing directory: $SPECIFY_INIT_DIR" >&2
|
|
45
|
+
return 1
|
|
46
|
+
fi
|
|
47
|
+
if [[ ! -d "$init_root/.specify" ]]; then
|
|
48
|
+
echo "ERROR: SPECIFY_INIT_DIR is not a Spec Kit project (no .specify/ directory): $init_root" >&2
|
|
49
|
+
return 1
|
|
50
|
+
fi
|
|
51
|
+
printf '%s\n' "$init_root"
|
|
52
|
+
}
|
|
53
|
+
|
|
27
54
|
# Get repository root, prioritizing .specify directory
|
|
28
55
|
# This prevents using a parent repository when spec-kit is initialized in a subdirectory
|
|
29
56
|
get_repo_root() {
|
|
57
|
+
# Explicit project override wins (see resolve_specify_init_dir).
|
|
58
|
+
if [[ -n "${SPECIFY_INIT_DIR:-}" ]]; then
|
|
59
|
+
resolve_specify_init_dir
|
|
60
|
+
return
|
|
61
|
+
fi
|
|
62
|
+
|
|
30
63
|
# First, look for .specify directory (spec-kit's own marker)
|
|
31
64
|
local specify_root
|
|
32
65
|
if specify_root=$(find_specify_root); then
|
|
@@ -119,8 +152,12 @@ _persist_feature_json() {
|
|
|
119
152
|
}
|
|
120
153
|
|
|
121
154
|
get_feature_paths() {
|
|
122
|
-
|
|
123
|
-
local
|
|
155
|
+
# Split decl/assignment so a SPECIFY_INIT_DIR validation failure in
|
|
156
|
+
# get_repo_root propagates as a hard error instead of being masked by `local`.
|
|
157
|
+
local repo_root
|
|
158
|
+
repo_root=$(get_repo_root) || return 1
|
|
159
|
+
local current_branch
|
|
160
|
+
current_branch=$(get_current_branch)
|
|
124
161
|
|
|
125
162
|
# Resolve feature directory. Priority:
|
|
126
163
|
# 1. SPECIFY_FEATURE_DIRECTORY env var (explicit override)
|
|
@@ -24,9 +24,51 @@ function Find-SpecifyRoot {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
# Resolve an explicit SPECIFY_INIT_DIR project override (the directory that
|
|
28
|
+
# *contains* .specify/), for non-interactive / CI use -- e.g. running a Spec Kit
|
|
29
|
+
# command against a member project from a monorepo root without cd.
|
|
30
|
+
#
|
|
31
|
+
# Precondition: $env:SPECIFY_INIT_DIR is set. Returns the validated project root,
|
|
32
|
+
# or writes an error and exits 1. Strict by design: the path must exist and
|
|
33
|
+
# contain .specify/, with no silent fallback. (An empty string is falsy, so the
|
|
34
|
+
# caller's `if ($env:SPECIFY_INIT_DIR)` guard treats empty as unset.)
|
|
35
|
+
#
|
|
36
|
+
# This is the single resolver: bundled extensions inherit it by sourcing core
|
|
37
|
+
# (e.g. the git extension's create-new-feature-branch) rather than duplicating it.
|
|
38
|
+
function Resolve-SpecifyInitDir {
|
|
39
|
+
$initDir = $env:SPECIFY_INIT_DIR
|
|
40
|
+
# Normalize: relative paths resolve against the current directory.
|
|
41
|
+
if (-not [System.IO.Path]::IsPathRooted($initDir)) {
|
|
42
|
+
$initDir = Join-Path (Get-Location).Path $initDir
|
|
43
|
+
}
|
|
44
|
+
$resolved = Resolve-Path -LiteralPath $initDir -ErrorAction SilentlyContinue
|
|
45
|
+
# Resolve-Path also succeeds for files, so check the resolved path is a
|
|
46
|
+
# directory; otherwise a file value would slip through to the less accurate
|
|
47
|
+
# "not a Spec Kit project" error below.
|
|
48
|
+
if (-not $resolved -or -not (Test-Path -LiteralPath $resolved.Path -PathType Container)) {
|
|
49
|
+
[Console]::Error.WriteLine("ERROR: SPECIFY_INIT_DIR does not point to an existing directory: $($env:SPECIFY_INIT_DIR)")
|
|
50
|
+
exit 1
|
|
51
|
+
}
|
|
52
|
+
# Resolve-Path echoes back any trailing separator from the input; trim it so
|
|
53
|
+
# the returned root matches the bash resolver, whose `cd && pwd` never yields
|
|
54
|
+
# one. TrimEndingDirectorySeparator is a no-op on a bare root and on a path
|
|
55
|
+
# that already has no trailing separator.
|
|
56
|
+
$initRoot = [System.IO.Path]::TrimEndingDirectorySeparator($resolved.Path)
|
|
57
|
+
if (-not (Test-Path -LiteralPath (Join-Path $initRoot '.specify') -PathType Container)) {
|
|
58
|
+
[Console]::Error.WriteLine("ERROR: SPECIFY_INIT_DIR is not a Spec Kit project (no .specify/ directory): $initRoot")
|
|
59
|
+
exit 1
|
|
60
|
+
}
|
|
61
|
+
return $initRoot
|
|
62
|
+
}
|
|
63
|
+
|
|
27
64
|
# Get repository root, prioritizing .specify directory
|
|
28
65
|
# This prevents using a parent repository when spec-kit is initialized in a subdirectory
|
|
29
66
|
function Get-RepoRoot {
|
|
67
|
+
# Explicit project override wins (see Resolve-SpecifyInitDir).
|
|
68
|
+
if ($env:SPECIFY_INIT_DIR) {
|
|
69
|
+
return (Resolve-SpecifyInitDir)
|
|
70
|
+
}
|
|
71
|
+
|
|
30
72
|
# First, look for .specify directory (spec-kit's own marker)
|
|
31
73
|
$specifyRoot = Find-SpecifyRoot
|
|
32
74
|
if ($specifyRoot) {
|