specify-cli 0.14.0__tar.gz → 0.14.1__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.14.0 → specify_cli-0.14.1}/.github/workflows/test.yml +1 -1
- {specify_cli-0.14.0 → specify_cli-0.14.1}/CHANGELOG.md +25 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/PKG-INFO +1 -1
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/community/presets.md +7 -7
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/integrations.md +1 -0
- specify_cli-0.14.1/extensions/agent-context/README.md +63 -0
- specify_cli-0.14.1/extensions/agent-context/agent-context-config.yml +24 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/README.md +6 -1
- specify_cli-0.14.1/extensions/git/commands/speckit.git.commit.md +63 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/config-template.yml +7 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/git-config.yml +7 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/bash/auto-commit.sh +68 -2
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/powershell/auto-commit.ps1 +63 -2
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/catalog.community.json +38 -37
- {specify_cli-0.14.0 → specify_cli-0.14.1}/pyproject.toml +1 -1
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/commands_impl/catalog_config.py +5 -2
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/lib/yamlio.py +23 -5
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/models/catalog.py +22 -5
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/models/records.py +14 -4
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/installer.py +4 -1
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/extensions/__init__.py +24 -22
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/extensions/_commands.py +15 -2
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/omp/__init__.py +1 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/_commands.py +9 -1
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/expressions.py +8 -2
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/contract/test_catalog_schema.py +51 -3
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/git/test_git_extension.py +554 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integration/test_bundler_install_flow.py +13 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_omp.py +6 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_extension_skills.py +111 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_extensions.py +105 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_presets.py +52 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_workflows.py +53 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_catalog_config.py +14 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_records.py +21 -0
- specify_cli-0.14.0/extensions/agent-context/README.md +0 -67
- specify_cli-0.14.0/extensions/agent-context/agent-context-config.yml +0 -20
- specify_cli-0.14.0/extensions/git/commands/speckit.git.commit.md +0 -48
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.editorconfig +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.gitattributes +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/CODEOWNERS +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/dependabot.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/scripts/check_security_requirements.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/security-audit-requirements.txt +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/add-community-bundle.lock.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/add-community-bundle.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/bug-fix.lock.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/bug-fix.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/bug-test.lock.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/bug-test.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/codeql.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/docs.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/lint.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/publish-pypi.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/release.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/security.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.github/workflows/stale.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.gitignore +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.pre-commit-config.yaml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/.zenodo.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/AGENTS.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/CITATION.cff +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/CONTRIBUTING.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/DEVELOPMENT.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/LICENSE +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/SECURITY.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/SUPPORT.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/bundles/catalog.community.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/.gitignore +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/community/bundles.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/community/extensions.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/community/friends.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/community/overview.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/concepts/spec-of-specs.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/docfx.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/guides/monorepo.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/index.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/install/one-time.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/install/pipx.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/install/pypi.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/install/uv.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/installation.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/local-development.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/quickstart.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/agentic-bugfix.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/agentic-sdd.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/authentication.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/bundles.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/core.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/extensions.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/overview.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/presets.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/reference/workflows.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/template/public/main.css +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/toc.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/docs/upgrade.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/developer/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/agent-context/agent-context-defaults.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/assess/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/assess/commands/speckit.assess.decide.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/assess/commands/speckit.assess.define.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/assess/commands/speckit.assess.intake.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/assess/commands/speckit.assess.research.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/assess/commands/speckit.assess.shape.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/assess/extension.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/bug/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/catalog.community.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/catalog.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/extension.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/python/auto_commit.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/python/git_common.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/git/scripts/python/initialize_repo.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/.gitignore +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/LICENSE +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/extensions/template/extension.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/integrations/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/integrations/catalog.community.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/integrations/catalog.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/media/logo_large.webp +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/media/logo_small.webp +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/media/specify_cli.gif +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/newsletters/2026-April.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/newsletters/2026-February.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/newsletters/2026-June.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/newsletters/2026-March.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/newsletters/2026-May.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/catalog.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/lean/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/lean/preset.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/scaffold/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/bash/common.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/bash/create-new-feature.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/powershell/common.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/python/check_prerequisites.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/python/common.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/python/create_new_feature.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/python/setup_plan.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/scripts/python/setup_tasks.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/spec-driven.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/spec-kit.code-workspace +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_download_security.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_github_http.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_project.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/_version.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/agents.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/models/manifest.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/adapters.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/primitives.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/commands/init.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/claude/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/droid/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/grok/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/presets/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/presets/_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/catalog.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/engine.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/overlays/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/overlays/_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/overlays/composer.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/overlays/merge.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/overlays/schema.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/checklist-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/analyze.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/checklist.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/clarify.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/constitution.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/converge.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/implement.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/plan.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/specify.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/tasks.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/commands/taskstoissues.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/constitution-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/plan-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/spec-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/tasks-template.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/templates/vscode-settings.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/auth_helpers.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/bundler_helpers.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/conftest.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/contract/test_bundle_cli.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/contract/test_manifest_schema.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/contract/test_wheel_core_pack_scripts.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/assess/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/assess/test_assess_extension.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/hooks/plan.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/hooks/spec.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/http_helpers.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_cli.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_droid.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_grok.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_registry.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/parity_helpers.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_authentication.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_check_prerequisites_python_parity.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_check_tool.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_cli_version.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_command_template_py_scripts.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_commands_package.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_console_imports.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_create_new_feature_python_parity.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_download_security.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_github_http.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_github_workflows.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_init_dir.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_merge.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_post_process.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_security_workflow.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_setup_plan_python_parity.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_setup_tasks_python_parity.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_skill_placeholder_py.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_specify_template_numbering.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_upgrade.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_utils.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_version_imports.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundle_download_url.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_adapters.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_primitives.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/unit/test_bundler_yamlio.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/conftest.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/test_overlay_commands.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/test_overlay_composer.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/test_overlay_layer_sources.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/test_overlay_merge.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/test_overlay_schema.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/test_overlay_security.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/tests/workflows/test_resolver_integration.py +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/README.md +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/catalog.community.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/catalog.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.14.0 → specify_cli-0.14.1}/workflows/step-catalog.json +0 -0
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.14.1] - 2026-07-23
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Update Agent Parity Governance preset to v0.4.0 (#3697)
|
|
10
|
+
- fix(bundler): InstallResult.changed counts uninstalled as a change (#3692)
|
|
11
|
+
- [preset] Update Cross-Platform Governance preset to v0.2.1 (#3695)
|
|
12
|
+
- Update A11Y Governance preset to v0.4.1 (#3693)
|
|
13
|
+
- fix(workflows): escape step-graph brackets in `workflow info` so the type shows (#3690)
|
|
14
|
+
- fix(workflows): filter parser rejects trailing tokens (fullmatch, not match) (#3689)
|
|
15
|
+
- Update iSAQB Architecture Governance preset to v0.2.1 (#3687)
|
|
16
|
+
- fix(extensions): parse SKILL.md on the --- delimiter line during removal (#3634)
|
|
17
|
+
- fix(cli): guard lazy .hostname ValueError in extension/preset add --from (#3651)
|
|
18
|
+
- Update Architecture Governance preset to v0.5.1 (#3686)
|
|
19
|
+
- fix(bundler): reject a top-level non-mapping bundle-catalogs.yml in _merge_config (#3659)
|
|
20
|
+
- Update Security Governance preset to v0.6.1 (#3685)
|
|
21
|
+
- fix(integrations): declare OmpIntegration multi_install_safe (#3650)
|
|
22
|
+
- feat(git-extension): add configurable Conventional Commit support (#3390) (#3413)
|
|
23
|
+
- fix(extensions): hyphenate command names in the Forge post-install listing (#3669)
|
|
24
|
+
- fix(bundler): reject falsy non-mapping requires/provides in CatalogEntry.from_dict (#3667)
|
|
25
|
+
- fix(bundler): reject falsy non-list bundles/contributed_components in records (#3666)
|
|
26
|
+
- Update Intake Authoring Governance preset to v0.1.1 (#3678)
|
|
27
|
+
- docs(extensions): clarify agent-context README and add config examples (#3389)
|
|
28
|
+
- chore: release 0.14.0, begin 0.14.1.dev0 development (#3677)
|
|
29
|
+
|
|
5
30
|
## [0.14.0] - 2026-07-23
|
|
6
31
|
|
|
7
32
|
### Changed
|
|
@@ -7,28 +7,28 @@ The following community-contributed presets customize how Spec Kit behaves — o
|
|
|
7
7
|
|
|
8
8
|
| Preset | Purpose | Provides | Requires | URL |
|
|
9
9
|
|--------|---------|----------|----------|-----|
|
|
10
|
-
| A11Y Governance | Adds
|
|
11
|
-
| Agent Parity Governance | Adds shared-guidance parity,
|
|
10
|
+
| A11Y Governance | Adds WCAG 2.2 AA governance, accessible text/JSON status parity, bilingual DE/EN delivery, CEFR-B2 readability, inclusive content, didactic-comment review, and audit-ready evidence | 10 templates, 3 commands | — | [spec-kit-preset-a11y-governance](https://github.com/hindermath/spec-kit-preset-a11y-governance) |
|
|
11
|
+
| Agent Parity Governance | Adds shared-guidance and generated-command parity, fleet-completion evidence, secret-free runner/status metadata, audit-ready evidence, and agent-neutral model routing. | 6 templates, 3 commands | — | [spec-kit-preset-agent-parity-governance](https://github.com/hindermath/spec-kit-preset-agent-parity-governance) |
|
|
12
12
|
| AIDE In-Place Migration | Adapts the AIDE extension workflow for in-place technology migrations (X → Y pattern) — adds migration objectives, verification gates, knowledge documents, and behavioral equivalence criteria | 2 templates, 8 commands | AIDE extension | [spec-kit-presets](https://github.com/mnriem/spec-kit-presets) |
|
|
13
|
-
| Architecture Governance | Adds secure software architecture, STRIDE+CAPEC threat modeling, arc42 security cross-cutting concepts, S-ADRs, Zero Trust applicability, OWASP SAMM governance, BSI C3A cloud autonomy, BSI C5 cloud compliance assurance, and audit-ready Spec Kit run evidence | 13 templates, 3 commands | — | [spec-kit-preset-architecture-governance](https://github.com/hindermath/spec-kit-preset-architecture-governance) |
|
|
13
|
+
| Architecture Governance | Adds secure software architecture, resumable remote-transaction boundaries, STRIDE+CAPEC threat modeling, arc42 security cross-cutting concepts, S-ADRs, Zero Trust applicability, OWASP SAMM governance, BSI C3A cloud autonomy, BSI C5 cloud compliance assurance, and audit-ready Spec Kit run evidence | 13 templates, 3 commands | — | [spec-kit-preset-architecture-governance](https://github.com/hindermath/spec-kit-preset-architecture-governance) |
|
|
14
14
|
| Autonomous Run Governance | Adds permission-bounded, evidence-first governance for complete autonomous Spec Kit delivery, including validated status, stop, explicit resume, exact-head proof, post-merge closeout, retrospective learning, and an optional policy-driven intake-review gate before feature creation. | 13 templates, 5 commands, 4 scripts | — | [spec-kit-preset-autonomous-run-governance](https://github.com/hindermath/spec-kit-preset-autonomous-run-governance) |
|
|
15
15
|
| Canon Core | Adapts original Spec Kit workflow to work together with Canon extension | 2 templates, 8 commands | — | [spec-kit-canon](https://github.com/maximiliamus/spec-kit-canon) |
|
|
16
16
|
| Claude AskUserQuestion | Upgrades `/speckit.clarify` and `/speckit.checklist` on Claude Code from Markdown-table prompts to the native AskUserQuestion picker, with a recommended option and reasoning on every question | 2 commands | — | [spec-kit-preset-claude-ask-questions](https://github.com/0xrafasec/spec-kit-preset-claude-ask-questions) |
|
|
17
17
|
| Command Density | Compacts the nine core Spec Kit command prompts while preserving scripts, handoffs, placeholders, hook output blocks, and rule structure | 9 commands | — | [spec-kit-preset-command-density](https://github.com/Xopoko/spec-kit-preset-command-density) |
|
|
18
|
-
| Cross-Platform Governance | Adds Bash
|
|
18
|
+
| Cross-Platform Governance | Adds Bash/PowerShell and read-only check parity, root-path and native-override review, Unix man pages, bilingual help, Verb-Noun discipline, and audit-ready evidence. | 8 templates, 3 commands | — | [spec-kit-preset-cross-platform-governance](https://github.com/hindermath/spec-kit-preset-cross-platform-governance) |
|
|
19
19
|
| Explicit Task Dependencies | Adds explicit `(depends on T###)` dependency declarations and an Execution Wave DAG to tasks.md for parallel scheduling | 1 template, 1 command | — | [spec-kit-preset-explicit-task-dependencies](https://github.com/Quratulain-bilal/spec-kit-preset-explicit-task-dependencies) |
|
|
20
20
|
| Fiction Book Writing | It adapts the Spec-Driven Development workflow for storytelling to create books or audiobooks (with annotations) in 12 languages: features become story elements, specs become story briefs, plans become story structures, and tasks become scene-by-scene writing tasks. Supports single and multi-POV, all major plot structure frameworks, and two style modes: an author voice sample or humanized AI prose principles. Supports interactive elements like brainstorming, interview, roleplay, and extras like statistics, cover builder, illustration builder, and bio command. Export with templates for KDP, D2D, etc. | 26 templates, 34 commands, 2 scripts | — | [speckit-preset-fiction-book-writing](https://github.com/adaumann/speckit-preset-fiction-book-writing) |
|
|
21
21
|
| Game Narrative Writing | Preset for game narrative design and interactive storytelling. It adapts the Spec-Driven Development workflow for game narratives: features become story mechanics, specs become narrative briefs, plans become story maps, and tasks become dialogue and scene-writing tasks. Supports branching narratives, player agency systems, state machines, and interactive dialogue trees. | 37 templates, 34 commands, 5 scripts | — | [speckit-preset-game-narrative-writing](https://github.com/adaumann/speckit-preset-game-narrative-writing) |
|
|
22
|
-
| Intake Authoring Governance | Creates traceable Spec Kit
|
|
22
|
+
| Intake Authoring Governance | Creates traceable Spec Kit intakes from ordered text sources and now truthfully adopts legacy intakes without inventing predecessor receipts. | 7 templates, 2 commands, 2 scripts | — | [spec-kit-preset-intake-authoring-governance](https://github.com/hindermath/spec-kit-preset-intake-authoring-governance) |
|
|
23
23
|
| Intake Review Governance | Adds hash-bound review, repair, and status gates for single, series, and campaign intake files before interactive, autonomous, or parallel Spec Kit execution. | 8 templates, 3 commands, 2 scripts | — | [spec-kit-preset-intake-review-governance](https://github.com/hindermath/spec-kit-preset-intake-review-governance) |
|
|
24
|
-
| iSAQB Architecture Governance | Adds
|
|
24
|
+
| iSAQB Architecture Governance | Adds iSAQB/CPSA-F and arc42 architecture governance with audit-ready evidence for goals, views, resumability, partial-failure scenarios, ADRs, risks, and technical debt. | 13 templates, 3 commands | — | [spec-kit-preset-isaqb-architecture-governance](https://github.com/hindermath/spec-kit-preset-isaqb-architecture-governance) |
|
|
25
25
|
| Jira Issue Tracking | Overrides `speckit.taskstoissues` to create Jira epics, stories, and tasks instead of GitHub Issues via Atlassian MCP tools | 1 command | — | [spec-kit-preset-jira](https://github.com/luno/spec-kit-preset-jira) |
|
|
26
26
|
| Model Driven Engineering | Focuses on streamlined commands, app repository support, cross-spec support, and capability-aware project memory for model-driven engineering workflows | 6 templates, 11 commands | MDE extension | [spec-kit-preset-mde](https://github.com/AI-MDE/spec-kit-preset-mde) |
|
|
27
27
|
| Multi-Repo Branching | Coordinates feature branch creation across multiple git repositories (independent repos and submodules) during plan and tasks phases | 2 commands | — | [spec-kit-preset-multi-repo-branching](https://github.com/sakitA/spec-kit-preset-multi-repo-branching) |
|
|
28
28
|
| Parallel Autonomous Run Governance | Coordinates isolated autonomous Spec Kit campaigns with bounded concurrency, mixed agents, resumable consolidation, governed post-merge closeout, schema 1.2, and an optional current intake-review gate before worker scheduling. | 9 templates, 5 commands, 2 scripts | autonomous-run-governance >=0.3.2; optional: intake-review-governance >=0.1.0 | [spec-kit-preset-parallel-autonomous-run-governance](https://github.com/hindermath/spec-kit-preset-parallel-autonomous-run-governance) |
|
|
29
29
|
| Pirate Speak (Full) | Transforms all Spec Kit output into pirate speak — specs become "Voyage Manifests", plans become "Battle Plans", tasks become "Crew Assignments" | 6 templates, 9 commands | — | [spec-kit-presets](https://github.com/mnriem/spec-kit-presets) |
|
|
30
30
|
| Screenwriting | Spec-Driven Development for screenwriting/scriptwriting/tutorials: feature films, television (pilot, episode, limited series), and stage plays. Adapts the Spec Kit workflow to screenplay craft — slug lines, action lines, act breaks, beat sheets, and industry-standard pitch documents. Supports three-act, Save the Cat, TV pilot, network episode, cable/streaming episode, and stage-play structural frameworks. Export to Fountain, FTX, PDF | 26 templates, 32 commands, 1 script | — | [speckit-preset-screenwriting](https://github.com/adaumann/speckit-preset-screenwriting) |
|
|
31
|
-
| Security Governance | Adds memory-safe-language
|
|
31
|
+
| Security Governance | Adds memory-safe-language and secure-coding governance, exact-head and security-gate evidence, provider-failure classification, ASVS, supply-chain transparency, and EU regulatory screening. | 14 templates, 3 commands | — | [spec-kit-preset-security-governance](https://github.com/hindermath/spec-kit-preset-security-governance) |
|
|
32
32
|
| SicarioSpec Core | Baseline secure-by-default Spec Kit governance profile. | 5 templates | — | [sicario-spec](https://github.com/dfirs1car1o/sicario-spec) |
|
|
33
33
|
| Spec2Cloud | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy | 5 templates, 8 commands | — | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) |
|
|
34
34
|
| Table of Contents Navigation | Adds a navigable Table of Contents to generated spec.md, plan.md, and tasks.md documents | 3 templates, 3 commands | — | [spec-kit-preset-toc-navigation](https://github.com/Quratulain-bilal/spec-kit-preset-toc-navigation) |
|
|
@@ -275,6 +275,7 @@ The currently declared multi-install safe integrations are:
|
|
|
275
275
|
| `junie` | `.junie/commands` |
|
|
276
276
|
| `kilocode` | `.kilocode/workflows` |
|
|
277
277
|
| `kiro-cli` | `.kiro/prompts` |
|
|
278
|
+
| `omp` | `.omp/commands` |
|
|
278
279
|
| `qodercli` | `.qoder/commands` |
|
|
279
280
|
| `qwen` | `.qwen/commands` |
|
|
280
281
|
| `shai` | `.shai/commands` |
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Coding Agent Context Extension
|
|
2
|
+
|
|
3
|
+
This bundled extension manages the **coding agent context/instruction file** (e.g. `CLAUDE.md`, `.github/copilot-instructions.md`, `AGENTS.md`, `GEMINI.md`, …) for the active integration.
|
|
4
|
+
|
|
5
|
+
It owns the lifecycle of the managed section delimited by the configurable start/end markers (defaults: `<!-- SPECKIT START -->` / `<!-- SPECKIT END -->`). For `.mdc` files, it also ensures the YAML frontmatter (the metadata block at the top of the file) contains `alwaysApply: true`. Otherwise, everything outside the managed section is untouched.
|
|
6
|
+
|
|
7
|
+
> NOTE: Spec Kit itself never touches your agent context file. This extension is the only thing that does, and it's opt-in: install it if you want the block kept in sync, skip it if you'd rather manage that file yourself.
|
|
8
|
+
|
|
9
|
+
## Why an extension?
|
|
10
|
+
|
|
11
|
+
Not every Spec Kit user wants Spec Kit to write into the coding agent's context file. Keeping this behavior in a dedicated, **opt-in** extension lets users:
|
|
12
|
+
|
|
13
|
+
- **Choose whether to install it at all** - `specify init` does **not** install it. Add it explicitly when you want Spec Kit to manage the agent context file; when it is absent, the file is never modified, and when it is disabled, its automatic hooks do not run.
|
|
14
|
+
- **Customize the markers** by editing `.specify/extensions/agent-context/agent-context-config.yml` ([agent-context-config.yml](./agent-context-config.yml) in this repo) - the bundled scripts honor the `context_markers` value.
|
|
15
|
+
- **Synchronize multiple agent anchors** by setting `context_files` when a project intentionally uses more than one coding agent context file, such as `AGENTS.md` and `CLAUDE.md`.
|
|
16
|
+
- **Refresh on demand** by running the `speckit.agent-context.update` command in your agent, or automatically through the hooks declared in [extension.yml](./extension.yml) (`after_specify`, `after_plan`).
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
To install the extension, from the root of an initialized Spec Kit project, run:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
specify extension add agent-context
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Disabling
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
specify extension disable agent-context
|
|
30
|
+
|
|
31
|
+
# Re-enable it
|
|
32
|
+
specify extension enable agent-context
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
While this extension is disabled (or not installed), nothing in Spec Kit creates, updates, or removes the managed block - the `__CONTEXT_FILE__` placeholder in any template is left as-is, and the extension's own config is never read.
|
|
36
|
+
|
|
37
|
+
## Commands
|
|
38
|
+
|
|
39
|
+
| Command | Description |
|
|
40
|
+
| ------------------------------ | --------------------------------------------------------------------------------- |
|
|
41
|
+
| `speckit.agent-context.update` | Refresh the managed section in the agent context file with the current plan path. |
|
|
42
|
+
|
|
43
|
+
> NOTE: The command ID above is canonical. Invoke it using the syntax for your integration: `/speckit.agent-context.update` for dot-command integrations; `/speckit-agent-context-update` for hyphen/skills integrations (including Forge and Cline); `$speckit-agent-context-update` for Codex or ZCode in skills mode; or `/skill:speckit-agent-context-update` for Kimi.
|
|
44
|
+
|
|
45
|
+
## Configuration
|
|
46
|
+
|
|
47
|
+
All configuration flows through the extension's own config file at `.specify/extensions/agent-context/agent-context-config.yml` ([agent-context-config.yml](./agent-context-config.yml) in the repo).
|
|
48
|
+
|
|
49
|
+
## Requirements
|
|
50
|
+
|
|
51
|
+
The bundled update scripts require **Python 3** with **PyYAML** for YAML/upsert processing (PowerShell can also use `ConvertFrom-Yaml` when available).
|
|
52
|
+
|
|
53
|
+
PyYAML ships with the `specify` CLI and is normally available via the same `python3` interpreter. If a hook reports _"PyYAML is required … not available in the current Python environment"_, it means the system `python3` differs from the one used to install Spec Kit. To resolve, run:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pip install pyyaml
|
|
57
|
+
# or target the specific interpreter Spec Kit uses:
|
|
58
|
+
/path/to/speckit-python -m pip install pyyaml
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Issues
|
|
62
|
+
|
|
63
|
+
For any other issues, please create an issue in the [official GitHub repo](https://github.com/github/spec-kit/issues).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Coding Agent Context Extension Configuration
|
|
2
|
+
|
|
3
|
+
# WHAT: The single agent context file relative to the project root (the directory containing .specify/). Absolute paths, backslash separators, and `..` path segments are rejected.
|
|
4
|
+
# REQUIREMENT: OPTIONAL. Use this if you want to manually specify a single context file. If you leave this entry blank, it will use the default context file for the coding agent you picked when you set up Spec Kit. See `agent-context-defaults.json` for the defaults.
|
|
5
|
+
# EXAMPLE: context_file: CLAUDE.md
|
|
6
|
+
context_file: ""
|
|
7
|
+
|
|
8
|
+
# WHAT: List of agent context files relative to the project root (the directory containing .specify/). If you have both `context_file` and `context_files` filled, then this (`context_files`) takes precedence. Absolute paths, backslash separators, and `..` path segments are rejected.
|
|
9
|
+
# REQUIREMENT: OPTIONAL. Use this if your project requires you to keep multiple agent context files in sync.
|
|
10
|
+
# EXAMPLE:
|
|
11
|
+
# context_files:
|
|
12
|
+
# - AGENTS.md
|
|
13
|
+
# - CLAUDE.md
|
|
14
|
+
context_files: []
|
|
15
|
+
|
|
16
|
+
# WHAT: Markers (delimiters) for the managed Spec Kit section. This extension injects information only between these markers.
|
|
17
|
+
# REQUIREMENT: OPTIONAL. Only change if you wish to have a custom marker name.
|
|
18
|
+
# EXAMPLE:
|
|
19
|
+
# context_markers:
|
|
20
|
+
# start: "<!-- AGENT SPEC KIT CONTEXT START -->"
|
|
21
|
+
# end: "<!-- AGENT SPEC KIT CONTEXT END -->"
|
|
22
|
+
context_markers:
|
|
23
|
+
start: "<!-- SPECKIT START -->"
|
|
24
|
+
end: "<!-- SPECKIT END -->"
|
|
@@ -10,7 +10,7 @@ This extension provides Git operations as an optional, self-contained module. It
|
|
|
10
10
|
- **Feature branch creation** with sequential (`001-feature-name`) or timestamp (`20260319-143022-feature-name`) numbering and optional templates for branch namespaces
|
|
11
11
|
- **Branch validation** to ensure branches follow naming conventions
|
|
12
12
|
- **Git remote detection** for GitHub integration (e.g., issue creation)
|
|
13
|
-
- **Auto-commit** after core commands (configurable per-command with custom messages)
|
|
13
|
+
- **Auto-commit** after core commands (configurable per-command with custom messages, or Conventional Commit messages generated by the agent)
|
|
14
14
|
|
|
15
15
|
## Commands
|
|
16
16
|
|
|
@@ -66,6 +66,11 @@ branch_prefix: ""
|
|
|
66
66
|
# Custom commit message for git init
|
|
67
67
|
init_commit_message: "[Spec Kit] Initial commit"
|
|
68
68
|
|
|
69
|
+
# Commit message style for auto-commit hooks: "fixed" (default) uses the
|
|
70
|
+
# messages below; "conventional" asks the agent to generate a Conventional
|
|
71
|
+
# Commit message (e.g. "feat: add OAuth spec") from the diff instead.
|
|
72
|
+
commit_style: fixed
|
|
73
|
+
|
|
69
74
|
# Auto-commit per command (all disabled by default)
|
|
70
75
|
# Example: enable auto-commit after specify
|
|
71
76
|
auto_commit:
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Auto-commit changes after a Spec Kit command completes"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Auto-Commit Changes
|
|
6
|
+
|
|
7
|
+
Automatically stage and commit all changes after a Spec Kit command completes.
|
|
8
|
+
|
|
9
|
+
## Behavior
|
|
10
|
+
|
|
11
|
+
This command is invoked as a hook after (or before) core commands. It:
|
|
12
|
+
|
|
13
|
+
1. Determines the event name from the hook context (e.g., if invoked as an `after_specify` hook, the event is `after_specify`; if `before_plan`, the event is `before_plan`)
|
|
14
|
+
2. Checks `.specify/extensions/git/git-config.yml` for the `auto_commit` section
|
|
15
|
+
3. Looks up the specific event key to see if auto-commit is enabled
|
|
16
|
+
4. Falls back to `auto_commit.default` if no event-specific key exists
|
|
17
|
+
5. Determines the commit message based on `commit_style` (see below)
|
|
18
|
+
6. If enabled and there are uncommitted changes, runs `git add .` + `git commit`
|
|
19
|
+
|
|
20
|
+
## Commit Message Styles
|
|
21
|
+
|
|
22
|
+
Controlled by the `commit_style` key in `.specify/extensions/git/git-config.yml`:
|
|
23
|
+
|
|
24
|
+
- **`fixed`** (default): use the per-command `message` if configured, otherwise a generic `[Spec Kit] Auto-commit <phase> <command>` message.
|
|
25
|
+
- **`conventional`**: inspect the actual changes (`git diff` / `git status`) since the last commit and generate a single-line [Conventional Commit](https://www.conventionalcommits.org/) message (`type(scope): subject`, e.g. `feat: add OAuth specification` or `docs: update implementation plan`) that accurately summarizes the change. Write this message to a temporary file and pass the file's path to the script (see Execution below). The configured `message` values are ignored in this mode.
|
|
26
|
+
|
|
27
|
+
## Execution
|
|
28
|
+
|
|
29
|
+
Determine the event name from the hook that triggered this command, then run the script:
|
|
30
|
+
|
|
31
|
+
- **Bash**: `.specify/extensions/git/scripts/bash/auto-commit.sh <event_name> [--message-file <path>]`
|
|
32
|
+
- **PowerShell**: `.specify/extensions/git/scripts/powershell/auto-commit.ps1 <event_name> [-MessageFile <path>]`
|
|
33
|
+
|
|
34
|
+
Replace `<event_name>` with the actual hook event (e.g., `after_specify`, `before_plan`, `after_implement`). Only pass a generated message when `commit_style: conventional` is configured — first check `.specify/extensions/git/git-config.yml` for the value of `commit_style`:
|
|
35
|
+
|
|
36
|
+
- If `conventional`: inspect the diff and generate a Conventional Commit message. **Do not interpolate the generated message directly into a shell command string** — its content is derived from repository changes and may contain characters (quotes, `$(...)`, backticks) that a shell would execute or that would break command quoting. Instead, write the message to a temporary file using your file-editing tool (not a shell `echo`/`printf`), then pass that file's path via `--message-file <path>` (Bash) or `-MessageFile <path>` (PowerShell).
|
|
37
|
+
- If `fixed` or absent: run the script with just `<event_name>`; it uses the configured/static message.
|
|
38
|
+
|
|
39
|
+
## Configuration
|
|
40
|
+
|
|
41
|
+
In `.specify/extensions/git/git-config.yml`:
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
# "fixed" (default) uses the messages below; "conventional" asks the agent
|
|
45
|
+
# to generate a Conventional Commit message from the diff instead.
|
|
46
|
+
commit_style: fixed
|
|
47
|
+
|
|
48
|
+
auto_commit:
|
|
49
|
+
default: false # Global toggle — set true to enable for all commands
|
|
50
|
+
after_specify:
|
|
51
|
+
enabled: true # Override per-command
|
|
52
|
+
message: "[Spec Kit] Add specification"
|
|
53
|
+
after_plan:
|
|
54
|
+
enabled: false
|
|
55
|
+
message: "[Spec Kit] Add implementation plan"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Graceful Degradation
|
|
59
|
+
|
|
60
|
+
- If Git is not available or the current directory is not a repository: skips with a warning
|
|
61
|
+
- If no config file exists: skips (disabled by default)
|
|
62
|
+
- If no changes to commit: skips with a message
|
|
63
|
+
- If `commit_style: conventional` is set and no generated message was supplied: fails with a clear error instead of silently falling back to the fixed message format
|
|
@@ -17,6 +17,13 @@ branch_prefix: ""
|
|
|
17
17
|
# Commit message used by `git commit` during repository initialization
|
|
18
18
|
init_commit_message: "[Spec Kit] Initial commit"
|
|
19
19
|
|
|
20
|
+
# Commit message style used by auto-commit hooks (speckit.git.commit):
|
|
21
|
+
# "fixed" - default; use the configured/static messages below.
|
|
22
|
+
# "conventional" - ask the agent to inspect the diff and generate a
|
|
23
|
+
# Conventional Commit message (e.g. "feat: add OAuth spec")
|
|
24
|
+
# instead of using the messages configured below.
|
|
25
|
+
commit_style: fixed
|
|
26
|
+
|
|
20
27
|
# Auto-commit before/after core commands.
|
|
21
28
|
# Set "default" to enable for all commands, then override per-command.
|
|
22
29
|
# Each key can be true/false. Message is customizable per-command.
|
|
@@ -17,6 +17,13 @@ branch_prefix: ""
|
|
|
17
17
|
# Commit message used by `git commit` during repository initialization
|
|
18
18
|
init_commit_message: "[Spec Kit] Initial commit"
|
|
19
19
|
|
|
20
|
+
# Commit message style used by auto-commit hooks (speckit.git.commit):
|
|
21
|
+
# "fixed" - default; use the configured/static messages below.
|
|
22
|
+
# "conventional" - ask the agent to inspect the diff and generate a
|
|
23
|
+
# Conventional Commit message (e.g. "feat: add OAuth spec")
|
|
24
|
+
# instead of using the messages configured below.
|
|
25
|
+
commit_style: fixed
|
|
26
|
+
|
|
20
27
|
# Auto-commit before/after core commands.
|
|
21
28
|
# Set "default" to enable for all commands, then override per-command.
|
|
22
29
|
# Each key can be true/false. Message is customizable per-command.
|
|
@@ -3,16 +3,57 @@
|
|
|
3
3
|
# Automatically commit changes after a Spec Kit command completes.
|
|
4
4
|
# Checks per-command config keys in git-config.yml before committing.
|
|
5
5
|
#
|
|
6
|
-
# Usage: auto-commit.sh <event_name>
|
|
6
|
+
# Usage: auto-commit.sh <event_name> [generated_message]
|
|
7
|
+
# auto-commit.sh <event_name> --message-file <path>
|
|
7
8
|
# e.g.: auto-commit.sh after_specify
|
|
9
|
+
# e.g.: auto-commit.sh after_specify --message-file /tmp/commit-msg.txt (commit_style: conventional)
|
|
10
|
+
#
|
|
11
|
+
# --message-file is the preferred way to supply an agent-generated commit
|
|
12
|
+
# message: it reads the message from a file instead of a shell argument,
|
|
13
|
+
# so message content (which may contain quotes, `$(...)`, backticks, etc.)
|
|
14
|
+
# is never interpolated into a shell command line.
|
|
8
15
|
|
|
9
16
|
set -e
|
|
10
17
|
|
|
11
18
|
EVENT_NAME="${1:-}"
|
|
12
19
|
if [ -z "$EVENT_NAME" ]; then
|
|
13
|
-
echo "Usage: $0 <event_name>" >&2
|
|
20
|
+
echo "Usage: $0 <event_name> [generated_message | --message-file <path>]" >&2
|
|
14
21
|
exit 1
|
|
15
22
|
fi
|
|
23
|
+
shift || true
|
|
24
|
+
|
|
25
|
+
# Optional second argument: an agent-generated commit message (used when
|
|
26
|
+
# commit_style: conventional is configured). Prefer --message-file over
|
|
27
|
+
# passing the message directly as a shell argument.
|
|
28
|
+
GENERATED_MESSAGE=""
|
|
29
|
+
while [ $# -gt 0 ]; do
|
|
30
|
+
case "$1" in
|
|
31
|
+
--message-file)
|
|
32
|
+
_message_file="${2:-}"
|
|
33
|
+
if [ -z "$_message_file" ]; then
|
|
34
|
+
echo "[specify] Error: --message-file requires a path argument" >&2
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
if [ ! -f "$_message_file" ]; then
|
|
38
|
+
echo "[specify] Error: message file '$_message_file' not found" >&2
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
GENERATED_MESSAGE="$(cat "$_message_file")"
|
|
42
|
+
# The message file is a transport-only artifact: its content is
|
|
43
|
+
# now captured above, so remove it immediately. Otherwise, if it
|
|
44
|
+
# was written inside the worktree, it would be picked up as an
|
|
45
|
+
# untracked change by both the "any changes?" check below and by
|
|
46
|
+
# `git add .`, polluting the commit or defeating the no-changes
|
|
47
|
+
# short-circuit even when nothing else changed.
|
|
48
|
+
rm -f "$_message_file"
|
|
49
|
+
shift 2
|
|
50
|
+
;;
|
|
51
|
+
*)
|
|
52
|
+
GENERATED_MESSAGE="$1"
|
|
53
|
+
shift
|
|
54
|
+
;;
|
|
55
|
+
esac
|
|
56
|
+
done
|
|
16
57
|
|
|
17
58
|
SCRIPT_DIR="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
59
|
|
|
@@ -46,8 +87,22 @@ fi
|
|
|
46
87
|
_config_file="$REPO_ROOT/.specify/extensions/git/git-config.yml"
|
|
47
88
|
_enabled=false
|
|
48
89
|
_commit_msg=""
|
|
90
|
+
_commit_style="fixed"
|
|
49
91
|
|
|
50
92
|
if [ -f "$_config_file" ]; then
|
|
93
|
+
# Top-level scalar key: commit_style (fixed | conventional)
|
|
94
|
+
_style_val=$(grep -m1 '^commit_style:' "$_config_file" 2>/dev/null | sed 's/^commit_style:[[:space:]]*//' | sed 's/[[:space:]]\{1,\}#.*$//' | sed 's/[[:space:]]*$//' | sed 's/^["'\'']//' | sed 's/["'\'']*$//' | tr '[:upper:]' '[:lower:]')
|
|
95
|
+
if [ -n "$_style_val" ]; then
|
|
96
|
+
case "$_style_val" in
|
|
97
|
+
fixed|conventional)
|
|
98
|
+
_commit_style="$_style_val"
|
|
99
|
+
;;
|
|
100
|
+
*)
|
|
101
|
+
echo "[specify] Warning: unknown commit_style '$_style_val' in git-config.yml (expected 'fixed' or 'conventional'); defaulting to 'fixed'" >&2
|
|
102
|
+
;;
|
|
103
|
+
esac
|
|
104
|
+
fi
|
|
105
|
+
|
|
51
106
|
# Parse the auto_commit section for this event.
|
|
52
107
|
# Look for auto_commit.<event_name>.enabled and .message
|
|
53
108
|
# Also check auto_commit.default as fallback.
|
|
@@ -128,6 +183,17 @@ if git diff --quiet HEAD 2>/dev/null && git diff --cached --quiet 2>/dev/null &&
|
|
|
128
183
|
exit 0
|
|
129
184
|
fi
|
|
130
185
|
|
|
186
|
+
# In conventional mode, the commit message must be supplied by the agent
|
|
187
|
+
# (via the generated_message argument); never fall back to the fixed message.
|
|
188
|
+
if [ "$_commit_style" = "conventional" ]; then
|
|
189
|
+
if [ -n "$GENERATED_MESSAGE" ]; then
|
|
190
|
+
_commit_msg="$GENERATED_MESSAGE"
|
|
191
|
+
else
|
|
192
|
+
echo "[specify] Error: commit_style is 'conventional' but no generated commit message was supplied; aborting auto-commit (pass --message-file <path>, or a raw message as arg 2, or set commit_style: fixed)" >&2
|
|
193
|
+
exit 1
|
|
194
|
+
fi
|
|
195
|
+
fi
|
|
196
|
+
|
|
131
197
|
# Derive a human-readable command name from the event
|
|
132
198
|
# e.g., after_specify -> specify, before_plan -> plan
|
|
133
199
|
_command_name=$(echo "$EVENT_NAME" | sed 's/^after_//' | sed 's/^before_//')
|
|
@@ -3,14 +3,47 @@
|
|
|
3
3
|
# Automatically commit changes after a Spec Kit command completes.
|
|
4
4
|
# Checks per-command config keys in git-config.yml before committing.
|
|
5
5
|
#
|
|
6
|
-
# Usage: auto-commit.ps1 <event_name>
|
|
6
|
+
# Usage: auto-commit.ps1 <event_name> [generated_message]
|
|
7
|
+
# auto-commit.ps1 <event_name> -MessageFile <path>
|
|
7
8
|
# e.g.: auto-commit.ps1 after_specify
|
|
9
|
+
# e.g.: auto-commit.ps1 after_specify -MessageFile C:\temp\commit-msg.txt (commit_style: conventional)
|
|
10
|
+
#
|
|
11
|
+
# -MessageFile is the preferred way to supply an agent-generated commit
|
|
12
|
+
# message: it reads the message from a file instead of a shell argument,
|
|
13
|
+
# so message content (which may contain quotes, $(...), backticks, etc.)
|
|
14
|
+
# is never interpolated into a shell command line.
|
|
8
15
|
param(
|
|
9
16
|
[Parameter(Position = 0, Mandatory = $true)]
|
|
10
|
-
[string]$EventName
|
|
17
|
+
[string]$EventName,
|
|
18
|
+
|
|
19
|
+
# Optional agent-generated commit message (used when commit_style: conventional is configured).
|
|
20
|
+
# Prefer -MessageFile over passing the message directly as a shell argument.
|
|
21
|
+
[Parameter(Position = 1, Mandatory = $false)]
|
|
22
|
+
[string]$GeneratedMessage = "",
|
|
23
|
+
|
|
24
|
+
[Parameter(Mandatory = $false)]
|
|
25
|
+
[string]$MessageFile = ""
|
|
11
26
|
)
|
|
12
27
|
$ErrorActionPreference = 'Stop'
|
|
13
28
|
|
|
29
|
+
if ($MessageFile) {
|
|
30
|
+
if (-not (Test-Path $MessageFile -PathType Leaf)) {
|
|
31
|
+
Write-Warning "[specify] Error: message file '$MessageFile' not found"
|
|
32
|
+
exit 1
|
|
33
|
+
}
|
|
34
|
+
$GeneratedMessage = (Get-Content -Path $MessageFile -Raw)
|
|
35
|
+
if ($null -ne $GeneratedMessage) {
|
|
36
|
+
$GeneratedMessage = $GeneratedMessage.TrimEnd("`r", "`n")
|
|
37
|
+
}
|
|
38
|
+
# The message file is a transport-only artifact: its content is now
|
|
39
|
+
# captured above, so remove it immediately. Otherwise, if it was written
|
|
40
|
+
# inside the worktree, it would be picked up as an untracked change by
|
|
41
|
+
# both the "any changes?" check below and by `git add .`, polluting the
|
|
42
|
+
# commit or defeating the no-changes short-circuit even when nothing
|
|
43
|
+
# else changed.
|
|
44
|
+
Remove-Item -Path $MessageFile -Force -ErrorAction SilentlyContinue
|
|
45
|
+
}
|
|
46
|
+
|
|
14
47
|
function Find-ProjectRoot {
|
|
15
48
|
param([string]$StartDir)
|
|
16
49
|
$current = Resolve-Path $StartDir
|
|
@@ -55,8 +88,25 @@ if (-not $isRepo) {
|
|
|
55
88
|
$configFile = Join-Path $repoRoot ".specify/extensions/git/git-config.yml"
|
|
56
89
|
$enabled = $false
|
|
57
90
|
$commitMsg = ""
|
|
91
|
+
$commitStyle = "fixed"
|
|
58
92
|
|
|
59
93
|
if (Test-Path $configFile) {
|
|
94
|
+
# Top-level scalar key: commit_style (fixed | conventional)
|
|
95
|
+
foreach ($line in Get-Content $configFile) {
|
|
96
|
+
if ($line -match '^commit_style:\s*(.+)$') {
|
|
97
|
+
$styleVal = (($matches[1] -replace '\s+#.*$', '').Trim()) -replace '^["'']' -replace '["'']$'
|
|
98
|
+
if ($styleVal) {
|
|
99
|
+
$styleVal = $styleVal.ToLower()
|
|
100
|
+
if ($styleVal -eq 'fixed' -or $styleVal -eq 'conventional') {
|
|
101
|
+
$commitStyle = $styleVal
|
|
102
|
+
} else {
|
|
103
|
+
Write-Warning "[specify] Warning: unknown commit_style '$styleVal' in git-config.yml (expected 'fixed' or 'conventional'); defaulting to 'fixed'"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
break
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
60
110
|
# Parse YAML to find auto_commit section
|
|
61
111
|
$inAutoCommit = $false
|
|
62
112
|
$inEvent = $false
|
|
@@ -140,6 +190,17 @@ if ($d1 -eq 0 -and $d2 -eq 0 -and -not $untracked) {
|
|
|
140
190
|
exit 0
|
|
141
191
|
}
|
|
142
192
|
|
|
193
|
+
# In conventional mode, the commit message must be supplied by the agent
|
|
194
|
+
# (via the GeneratedMessage argument); never fall back to the fixed message.
|
|
195
|
+
if ($commitStyle -eq 'conventional') {
|
|
196
|
+
if ($GeneratedMessage) {
|
|
197
|
+
$commitMsg = $GeneratedMessage
|
|
198
|
+
} else {
|
|
199
|
+
Write-Warning "[specify] Error: commit_style is 'conventional' but no generated commit message was supplied; aborting auto-commit (pass -MessageFile <path>, or a raw message as arg 2, or set commit_style: fixed)"
|
|
200
|
+
exit 1
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
143
204
|
# Derive a human-readable command name from the event
|
|
144
205
|
$commandName = $EventName -replace '^after_', '' -replace '^before_', ''
|
|
145
206
|
$phase = if ($EventName -match '^before_') { 'before' } else { 'after' }
|