specify-cli 0.14.4__tar.gz → 0.15.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.4 → specify_cli-0.15.1}/.github/scripts/check_security_requirements.py +10 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/publish-pypi.yml +1 -1
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/security.yml +3 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/stale.yml +1 -1
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/test.yml +2 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/CHANGELOG.md +53 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/PKG-INFO +3 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/README.md +2 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/community/extensions.md +2 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/workflows.md +72 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/upgrade.md +68 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/catalog.community.json +70 -1
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/catalog.json +23 -0
- specify_cli-0.15.1/presets/constitution-sync/README.md +126 -0
- specify_cli-0.15.1/presets/constitution-sync/commands/speckit.constitution.md +54 -0
- specify_cli-0.15.1/presets/constitution-sync/preset.yml +30 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/pyproject.toml +2 -1
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/powershell/common.ps1 +11 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/python/common.py +19 -8
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/__init__.py +5 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_download_security.py +376 -15
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_version.py +13 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/agents.py +13 -1
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/models/manifest.py +26 -10
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/adapters.py +4 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/primitives.py +63 -7
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/catalogs.py +7 -0
- specify_cli-0.15.1/src/specify_cli/commands/event.py +39 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/commands/init.py +8 -0
- specify_cli-0.15.1/src/specify_cli/events.py +2098 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/extensions/__init__.py +181 -33
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/extensions/_commands.py +506 -146
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/_helpers.py +8 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/_install_commands.py +9 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/_migrate_commands.py +17 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/base.py +65 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/claude/__init__.py +11 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/codex/__init__.py +16 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/copilot/__init__.py +36 -8
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/cursor_agent/__init__.py +16 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/devin/__init__.py +21 -2
- specify_cli-0.15.1/src/specify_cli/integrations/gemini/__init__.py +40 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/manifest.py +17 -1
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/opencode/__init__.py +9 -0
- specify_cli-0.15.1/src/specify_cli/integrations/qwen/__init__.py +38 -0
- specify_cli-0.15.1/src/specify_cli/integrations/tabnine/__init__.py +41 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/presets/__init__.py +95 -23
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/presets/_commands.py +116 -38
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/_commands.py +553 -32
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/base.py +3 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/catalog.py +10 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/engine.py +105 -12
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/overlays/_commands.py +12 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/gate/__init__.py +74 -10
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/prompt/__init__.py +59 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/shell/__init__.py +14 -6
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/contract/test_manifest_schema.py +39 -0
- specify_cli-0.15.1/tests/contract/test_wheel_bundled_presets.py +53 -0
- specify_cli-0.15.1/tests/integrations/test_events.py +2239 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_catalog.py +6 -3
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_copilot.py +15 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_subcommand.py +62 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_manifest.py +36 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_check_prerequisites_python_parity.py +66 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_download_security.py +176 -0
- specify_cli-0.15.1/tests/test_extension_add_path_traversal.py +401 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_extension_skills.py +129 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_extensions.py +265 -6
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_init_dir.py +138 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_presets.py +463 -2
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_security_workflow.py +21 -5
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_self_upgrade_verification.py +20 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_workflows.py +1572 -59
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_primitives.py +119 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/test_overlay_commands.py +80 -0
- specify_cli-0.15.1/workflows/catalog.community.json +50 -0
- specify_cli-0.14.4/src/specify_cli/integrations/gemini/__init__.py +0 -21
- specify_cli-0.14.4/src/specify_cli/integrations/qwen/__init__.py +0 -21
- specify_cli-0.14.4/src/specify_cli/integrations/tabnine/__init__.py +0 -21
- specify_cli-0.14.4/workflows/catalog.community.json +0 -27
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.editorconfig +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.gitattributes +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/CODEOWNERS +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/dependabot.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/security-audit-requirements.txt +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/add-community-bundle.lock.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/add-community-bundle.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/bug-fix.lock.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/bug-fix.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/bug-test.lock.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/bug-test.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/codeql.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/docs.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/lint.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.github/workflows/release.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.gitignore +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.pre-commit-config.yaml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/.zenodo.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/AGENTS.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/CITATION.cff +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/CONTRIBUTING.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/DEVELOPMENT.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/LICENSE +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/README.zh-CN.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/SECURITY.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/SUPPORT.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/bundles/catalog.community.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/.gitignore +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/community/bundles.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/community/friends.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/community/overview.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/community/presets.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/concepts/spec-of-specs.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/docfx.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/guides/monorepo.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/index.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/install/one-time.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/install/pipx.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/install/pypi.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/install/uv.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/installation.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/local-development.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/quickstart.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/agentic-bugfix.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/agentic-sdd.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/authentication.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/bundles.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/core.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/extensions.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/integrations.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/overview.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/reference/presets.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/template/public/main.css +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/docs/toc.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/developer/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/agent-context-defaults.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/assess/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/assess/commands/speckit.assess.decide.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/assess/commands/speckit.assess.define.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/assess/commands/speckit.assess.intake.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/assess/commands/speckit.assess.research.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/assess/commands/speckit.assess.shape.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/assess/extension.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/bug/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/catalog.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/extension.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/python/auto_commit.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/python/git_common.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/git/scripts/python/initialize_repo.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/.gitignore +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/LICENSE +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/extensions/template/extension.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/integrations/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/integrations/catalog.community.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/integrations/catalog.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/media/logo_large.webp +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/media/logo_small.webp +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/media/specify_cli.gif +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/newsletters/2026-April.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/newsletters/2026-February.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/newsletters/2026-June.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/newsletters/2026-March.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/newsletters/2026-May.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/catalog.community.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/lean/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/lean/preset.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/scaffold/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/bash/common.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/bash/create-new-feature.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/python/check_prerequisites.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/python/create_new_feature.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/python/setup_plan.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/scripts/python/setup_tasks.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/spec-driven.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/spec-kit.code-workspace +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_github_http.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_project.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/authentication/http.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/lib/yamlio.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/models/catalog.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/models/records.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/installer.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/alquimia/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/droid/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/grok/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/omp/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/expressions.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/overlays/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/overlays/composer.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/overlays/merge.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/overlays/schema.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/checklist-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/analyze.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/checklist.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/clarify.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/constitution.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/converge.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/implement.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/plan.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/specify.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/tasks.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/commands/taskstoissues.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/constitution-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/plan-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/spec-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/tasks-template.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/templates/vscode-settings.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/auth_helpers.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/bundler_helpers.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/conftest.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/contract/test_bundle_cli.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/contract/test_catalog_schema.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/contract/test_wheel_core_pack_scripts.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/assess/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/assess/test_assess_extension.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/git/test_git_extension.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/hooks/plan.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/hooks/spec.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/http_helpers.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integration/test_bundler_install_flow.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_cli.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_alquimia.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_droid.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_grok.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_registry.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/parity_helpers.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_authentication.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_check_tool.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_cli_version.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_command_template_py_scripts.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_commands_package.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_console_imports.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_create_new_feature_python_parity.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_github_http.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_github_workflows.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_merge.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_post_process.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_setup_plan_python_parity.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_setup_tasks_python_parity.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_skill_placeholder_py.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_specify_template_numbering.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_upgrade.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_utils.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_version_imports.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundle_download_url.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_adapters.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_catalog_config.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_records.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/unit/test_bundler_yamlio.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/conftest.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/test_overlay_composer.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/test_overlay_layer_sources.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/test_overlay_merge.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/test_overlay_schema.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/test_overlay_security.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/tests/workflows/test_resolver_integration.py +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/workflows/README.md +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/workflows/catalog.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.14.4 → specify_cli-0.15.1}/workflows/step-catalog.json +0 -0
|
@@ -29,12 +29,20 @@ def _dependency_diff_refs() -> tuple[str, str]:
|
|
|
29
29
|
def _dependency_inputs_changed() -> bool:
|
|
30
30
|
base_ref, head_ref = _dependency_diff_refs()
|
|
31
31
|
try:
|
|
32
|
+
merge_base = subprocess.run(
|
|
33
|
+
["git", "merge-base", base_ref, head_ref],
|
|
34
|
+
check=True,
|
|
35
|
+
cwd=REPO_ROOT,
|
|
36
|
+
stderr=subprocess.PIPE,
|
|
37
|
+
stdout=subprocess.PIPE,
|
|
38
|
+
text=True,
|
|
39
|
+
).stdout.strip()
|
|
32
40
|
result = subprocess.run(
|
|
33
41
|
[
|
|
34
42
|
"git",
|
|
35
43
|
"diff",
|
|
36
44
|
"--name-only",
|
|
37
|
-
|
|
45
|
+
merge_base,
|
|
38
46
|
head_ref,
|
|
39
47
|
"--",
|
|
40
48
|
*DEPENDENCY_INPUTS,
|
|
@@ -77,6 +85,7 @@ def main() -> int:
|
|
|
77
85
|
|
|
78
86
|
generated_requirements = Path(generated_requirements_env)
|
|
79
87
|
generated_requirements.parent.mkdir(parents=True, exist_ok=True)
|
|
88
|
+
generated_requirements.write_bytes(COMMITTED_REQUIREMENTS.read_bytes())
|
|
80
89
|
|
|
81
90
|
subprocess.run(
|
|
82
91
|
[
|
|
@@ -87,7 +96,6 @@ def main() -> int:
|
|
|
87
96
|
"--extra",
|
|
88
97
|
"test",
|
|
89
98
|
"--universal",
|
|
90
|
-
"--upgrade",
|
|
91
99
|
"--generate-hashes",
|
|
92
100
|
"--quiet",
|
|
93
101
|
"--no-header",
|
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
36
36
|
|
|
37
37
|
- name: Set up Python
|
|
38
|
-
uses: actions/setup-python@
|
|
38
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
39
39
|
with:
|
|
40
40
|
python-version: "3.13"
|
|
41
41
|
|
|
@@ -27,14 +27,14 @@ jobs:
|
|
|
27
27
|
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
28
28
|
|
|
29
29
|
- name: Set up Python
|
|
30
|
-
uses: actions/setup-python@
|
|
30
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
31
31
|
with:
|
|
32
32
|
python-version: "3.14"
|
|
33
33
|
|
|
34
34
|
- name: Check committed audit requirements are current
|
|
35
35
|
env:
|
|
36
36
|
DEPENDENCY_DIFF_BASE: ${{ github.event.pull_request.base.sha || github.event.before || '' }}
|
|
37
|
-
DEPENDENCY_DIFF_HEAD: ${{ github.sha }}
|
|
37
|
+
DEPENDENCY_DIFF_HEAD: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
38
38
|
GENERATED_REQUIREMENTS: ${{ runner.temp }}/security-audit-requirements.txt
|
|
39
39
|
run: python .github/scripts/check_security_requirements.py
|
|
40
40
|
|
|
@@ -58,7 +58,7 @@ jobs:
|
|
|
58
58
|
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
59
59
|
|
|
60
60
|
- name: Set up Python ${{ matrix.python-version }}
|
|
61
|
-
uses: actions/setup-python@
|
|
61
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
62
62
|
with:
|
|
63
63
|
python-version: ${{ matrix.python-version }}
|
|
64
64
|
|
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
stale:
|
|
15
15
|
runs-on: ubuntu-latest
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/stale@
|
|
17
|
+
- uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0
|
|
18
18
|
with:
|
|
19
19
|
# Days of inactivity before an issue or PR becomes stale
|
|
20
20
|
days-before-stale: 150
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
20
20
|
|
|
21
21
|
- name: Set up Python
|
|
22
|
-
uses: actions/setup-python@
|
|
22
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
23
23
|
with:
|
|
24
24
|
python-version: "3.14"
|
|
25
25
|
|
|
@@ -40,7 +40,7 @@ jobs:
|
|
|
40
40
|
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
41
41
|
|
|
42
42
|
- name: Set up Python ${{ matrix.python-version }}
|
|
43
|
-
uses: actions/setup-python@
|
|
43
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
44
44
|
with:
|
|
45
45
|
python-version: ${{ matrix.python-version }}
|
|
46
46
|
|
|
@@ -2,6 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.15.1] - 2026-07-31
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- fix: escape Rich markup in `workflow resolve` output (#3879)
|
|
10
|
+
- chore(deps): bump actions/stale from 10.4.0 to 11.0.0 (#3877)
|
|
11
|
+
- chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 (#3876)
|
|
12
|
+
- feat: support tar archives for installs (#3874)
|
|
13
|
+
- fix: eliminate TOCTOU race in file unlink calls (#3819)
|
|
14
|
+
- fix(scripts): tolerate an unusable integration.json in the Python helper (#3785)
|
|
15
|
+
- fix(catalogs): validate the port in the shared catalog-URL validator, like its mirrors do (#3804)
|
|
16
|
+
- feat(presets): add opt-in constitution-sync preset (#3873)
|
|
17
|
+
- fix: reject non-object workflow caches (#3860)
|
|
18
|
+
- Harden extension URL download cache against symlink and junction races (#3869)
|
|
19
|
+
- fix: escape workflow step metadata (#3863)
|
|
20
|
+
- [bug-fix] Fix bundle-update-force-mislead: add refresh() to DefaultPrimitiveInstaller (#3452)
|
|
21
|
+
- fix: use chunked read for extension manifest hash (#3841)
|
|
22
|
+
- fix: preserve unreadable event config files (#3861)
|
|
23
|
+
- fix(scripts): use a .NET Framework-safe trim in the PowerShell init-dir resolver (#3872)
|
|
24
|
+
- Add ContextForge MCP extension to community catalog (#3487)
|
|
25
|
+
- fix: normalize non-UTF-8 integration manifests (#3862)
|
|
26
|
+
- feat: bind gate verdict to workflow input via verdict_input (#3725)
|
|
27
|
+
- docs: use absolute image URLs in README for PyPI rendering (#3867)
|
|
28
|
+
- chore: release 0.15.0, begin 0.15.1.dev0 development (#3871)
|
|
29
|
+
|
|
30
|
+
## [0.15.0] - 2026-07-30
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- Add yolo to community workflow catalog (#3864)
|
|
35
|
+
- fix(workflows): guard the shell step's timeout check against OverflowError (#3865)
|
|
36
|
+
- Add Intent Reconciliation extension to community catalog (#3858)
|
|
37
|
+
- fix(workflows): validate prompt step 'timeout' like the shell step (#3847)
|
|
38
|
+
- fix: add utf-8 encoding to registry file open calls (#3816)
|
|
39
|
+
- fix: eliminate TOCTOU race in file unlink calls (#3815)
|
|
40
|
+
- test(workflows): name the condition-rejection tests for the real boundary (#3808)
|
|
41
|
+
- fix: eliminate TOCTOU race in file unlink calls (#3811)
|
|
42
|
+
- fix(presets): escape user-supplied catalog name/URL in add/remove output (#3806)
|
|
43
|
+
- fix: add missing utf-8 encoding to registry file open calls (#3810)
|
|
44
|
+
- [bug-fix] Fix upgrade-overwrites-copilot-skills: pass force=True to extension skill re-registration after upgrade (#3853)
|
|
45
|
+
- fix(integrations): don't abort uninstall when the manifest can't be deleted (#3805)
|
|
46
|
+
- test(extensions): update stale manifest validation message assertion (#3859)
|
|
47
|
+
- fix(agents): coerce a non-string description in TOML command rendering (#3799)
|
|
48
|
+
- fix(workflows): make security requirements sync deterministic (#3832)
|
|
49
|
+
- fix(cli): render the literal [suffix] in --tag help and rejection message (#3800)
|
|
50
|
+
- fix(integrations): preserve non-UTF-8 VS Code settings (#3833)
|
|
51
|
+
- fix(bundler): treat an explicit-null manifest field as missing, not the text "None" (#3798)
|
|
52
|
+
- feat: first-class agent-native runtime hooks for integrations (#3704)
|
|
53
|
+
- fix(extensions): guard the required manifest sections so one bad extension cannot break `extension list` (#3797)
|
|
54
|
+
- fix(presets): escape installed preset metadata in Rich output (#3826)
|
|
55
|
+
- fix(workflows): dispatch prompt steps via the resolved executable (#3793)
|
|
56
|
+
- chore: release 0.14.4, begin 0.14.5.dev0 development (#3850)
|
|
57
|
+
|
|
5
58
|
## [0.14.4] - 2026-07-29
|
|
6
59
|
|
|
7
60
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specify-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.15.1
|
|
4
4
|
Summary: Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD).
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -19,7 +19,7 @@ Requires-Dist: pytest>=7.0; extra == 'test'
|
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
|
|
21
21
|
<div align="center">
|
|
22
|
-
<img src="
|
|
22
|
+
<img src="https://raw.githubusercontent.com/github/spec-kit/main/media/logo_large.webp" alt="Spec Kit Logo" width="200" height="200"/>
|
|
23
23
|
<h1>🌱 Spec Kit</h1>
|
|
24
24
|
<h3><em>Define what to build before building it — with any AI coding agent.</em></h3>
|
|
25
25
|
</div>
|
|
@@ -156,7 +156,7 @@ For detailed step-by-step instructions, see our [comprehensive guide](./spec-dri
|
|
|
156
156
|
|
|
157
157
|
Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)!
|
|
158
158
|
|
|
159
|
-
[](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
|
|
159
|
+
[](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
|
|
160
160
|
|
|
161
161
|
## 🌍 Community
|
|
162
162
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="
|
|
2
|
+
<img src="https://raw.githubusercontent.com/github/spec-kit/main/media/logo_large.webp" alt="Spec Kit Logo" width="200" height="200"/>
|
|
3
3
|
<h1>🌱 Spec Kit</h1>
|
|
4
4
|
<h3><em>Define what to build before building it — with any AI coding agent.</em></h3>
|
|
5
5
|
</div>
|
|
@@ -136,7 +136,7 @@ For detailed step-by-step instructions, see our [comprehensive guide](./spec-dri
|
|
|
136
136
|
|
|
137
137
|
Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)!
|
|
138
138
|
|
|
139
|
-
[](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
|
|
139
|
+
[](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
|
|
140
140
|
|
|
141
141
|
## 🌍 Community
|
|
142
142
|
|
|
@@ -50,6 +50,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
50
50
|
| Coding Standards Drift Control | Generate coding-standards drift reports and remediation tasks for active Spec Kit features | `code` | Read+Write | [spec-kit-coding-standards-drift-control](https://github.com/benizzio/spec-kit-coding-standards-drift-control) |
|
|
51
51
|
| Conduct Extension | Orchestrates spec-kit phases via sub-agent delegation to reduce context pollution. | `process` | Read+Write | [spec-kit-conduct-ext](https://github.com/twbrandon7/spec-kit-conduct-ext) |
|
|
52
52
|
| Confluence Extension | Create a doc in Confluence summarizing the specifications and planning files | `integration` | Read+Write | [spec-kit-confluence](https://github.com/aaronrsun/spec-kit-confluence) |
|
|
53
|
+
| ContextForge MCP | Integrates codebase-memory-mcp + headroom into Spec Kit — graph-based code intelligence and context compression for the implement phase | `code` | Read+Write | [contextforge-mcp](https://github.com/capatinore/contextforge-mcp) |
|
|
53
54
|
| Cost Tracker | Track real LLM dollar cost across SDD workflows — per-feature budgets, per-integration comparison, and finance-ready exports | `visibility` | Read+Write | [spec-kit-cost](https://github.com/Quratulain-bilal/spec-kit-cost) |
|
|
54
55
|
| Data Model Diagram | Generates Mermaid ER diagrams from Spec Kit data models after planning | `docs` | Read+Write | [spec-kit-data-model-diagram](https://github.com/benizzio/spec-kit-data-model-diagram) |
|
|
55
56
|
| DocGuard — CDD Enforcement | The only doc-integrity engine with an MCP server, SARIF/JUnit output, and a deterministic zero-LLM core. Validates, scores, and traces documentation against code — 27 validators, stable finding codes, adoption baseline for legacy repos, compliance-evidence reports, GitHub Action with PR annotations, spec-kit hooks. Pure Node.js, one pinned dep. | `docs` | Read+Write | [spec-kit-docguard](https://github.com/raccioly/docguard) |
|
|
@@ -66,6 +67,7 @@ The following community-contributed extensions are available in [`catalog.commun
|
|
|
66
67
|
| Improve Extension | Audits any codebase as a senior advisor and writes prioritized, self-contained spec prompts under specs/ that the spec-kit lifecycle can process | `process` | Read+Write | [spec-kit-improve](https://github.com/d0whc3r/spec-kit-improve) |
|
|
67
68
|
| Intake | Normalize PRD, design, HTML SSOT, and test-case evidence into SDD-ready intake artifacts. | `docs` | Read+Write | [spec-kit-intake](https://github.com/bigsmartben/spec-kit-intake) |
|
|
68
69
|
| Intelligent Agent Orchestrator | Cross-catalog agent discovery and intelligent prompt-to-command routing | `process` | Read+Write | [spec-kit-orchestrator](https://github.com/pragya247/spec-kit-orchestrator) |
|
|
70
|
+
| Intent Reconciliation | Reconcile implementation-discovered decisions against approved feature intent | `process` | Read+Write | [spec-kit-reconcile](https://github.com/SuhaibAslam/spec-kit-reconcile) |
|
|
69
71
|
| Iterate | Iterate on spec documents with a two-phase define-and-apply workflow — refine specs mid-implementation and go straight back to building | `docs` | Read+Write | [spec-kit-iterate](https://github.com/imviancagrace/spec-kit-iterate) |
|
|
70
72
|
| Jira Integration | Create Jira Epics, Stories, and Issues from spec-kit specifications and task breakdowns with configurable hierarchy and custom field support | `integration` | Read+Write | [spec-kit-jira](https://github.com/mbachorik/spec-kit-jira) |
|
|
71
73
|
| Jira Integration (Sync Engine) | Idempotent, drift-aware, fail-closed reconcile engine mirroring spec-kit specs into Jira (Epic per repo, Story per spec, Subtask per phase) | `integration` | Read+Write | [spec-kit-jira-sync](https://github.com/ashbrener/spec-kit-jira-sync) |
|
|
@@ -39,6 +39,21 @@ specify workflow run my-pipeline.yml --json
|
|
|
39
39
|
|
|
40
40
|
`workflow_id` is the `workflow.id` declared inside the YAML, not the file name. The object is printed exactly as shown — pretty-printed with two-space indentation, on plain stdout with no Rich markup — so it always parses. While the workflow runs under `--json`, any progress a step would print (for example a gate prompt, or output from a prompt step's CLI subprocess) is redirected to stderr, so stdout carries only the JSON object. Read the object from stdout; leave stderr attached to the terminal or capture it separately.
|
|
41
41
|
|
|
42
|
+
For `failed` and `aborted` runs, the payload includes an `error` field carrying the terminal step's error message:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"run_id": "662bf791",
|
|
47
|
+
"workflow_id": "build-and-review",
|
|
48
|
+
"status": "failed",
|
|
49
|
+
"current_step_id": "boom",
|
|
50
|
+
"current_step_index": 0,
|
|
51
|
+
"error": "Command exited with code 3"
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`completed` and `paused` runs omit the `error` field. The error is persisted in the run's `state.json`, so `specify workflow status <run_id> --json` surfaces the same message after the fact.
|
|
56
|
+
|
|
42
57
|
> **Note:** Most workflow commands require a project already initialized with `specify init`. The exception is `specify workflow run <local-file.{yml,yaml}>`, which can run outside a project; in that case, run state is stored under the current directory's `.specify/workflows/runs/<run_id>/`.
|
|
43
58
|
|
|
44
59
|
## Resume a Workflow
|
|
@@ -88,10 +103,17 @@ specify workflow add <source>
|
|
|
88
103
|
|
|
89
104
|
| Option | Description |
|
|
90
105
|
| --------------- | ------------------------------------------------------ |
|
|
91
|
-
| `--dev` | Install from a local
|
|
106
|
+
| `--dev` | Install from a local YAML file, package directory, or archive |
|
|
92
107
|
| `--from <url>` | Install from a custom URL (`<source>` names the expected workflow ID) |
|
|
93
108
|
|
|
94
|
-
Installs a workflow from the catalog,
|
|
109
|
+
Installs a workflow from the catalog, an HTTPS URL, a local YAML file, a
|
|
110
|
+
directory containing `workflow.yml`, or a `.zip`, `.tar.gz`, or `.tgz`
|
|
111
|
+
archive. Archives may contain `workflow.yml` at the root or inside one
|
|
112
|
+
top-level directory.
|
|
113
|
+
|
|
114
|
+
Directory and archive installs preserve the complete workflow package,
|
|
115
|
+
including scripts and other companion files. ZIP, `.tar.gz`, and `.tgz`
|
|
116
|
+
archives follow the same validation and installation behavior.
|
|
95
117
|
|
|
96
118
|
## Workflow Overlays
|
|
97
119
|
|
|
@@ -266,7 +288,9 @@ Lower priority values have higher precedence. Change this overlay to `priority:
|
|
|
266
288
|
|
|
267
289
|
### Interaction with Bundles and Updates
|
|
268
290
|
|
|
269
|
-
`specify workflow add <local-directory>` installs
|
|
291
|
+
`specify workflow add <local-directory>` installs the complete local workflow
|
|
292
|
+
package into `.specify/workflows/<id>/`. Archive installs preserve the same
|
|
293
|
+
package contents.
|
|
270
294
|
|
|
271
295
|
When an installed workflow is refreshed or reinstalled, project overlays in `.specify/workflows/overlays/<id>/` are preserved because they live outside the installed workflow directory.
|
|
272
296
|
|
|
@@ -554,6 +578,51 @@ Each workflow run persists its state at `.specify/workflows/runs/<run_id>/`:
|
|
|
554
578
|
|
|
555
579
|
This enables `specify workflow resume` to continue from the exact step where a run was paused (e.g., at a gate) or failed.
|
|
556
580
|
|
|
581
|
+
### Gate Verdict Inputs
|
|
582
|
+
|
|
583
|
+
`verdict_input` binds a gate's verdict to a named workflow input. The input must be declared in the workflow's `inputs` block; `specify workflow validate` reports an undeclared reference.
|
|
584
|
+
|
|
585
|
+
`verdict_input` is not supported inside a `fan-out` template. Fan-out items
|
|
586
|
+
share workflow inputs, while workflow state can represent only one paused
|
|
587
|
+
gate. Place a gate before the fan-out to approve the whole batch, or after a
|
|
588
|
+
fan-in to review the aggregated results.
|
|
589
|
+
|
|
590
|
+
**Input value semantics:**
|
|
591
|
+
|
|
592
|
+
| Value | Behavior |
|
|
593
|
+
|---|---|
|
|
594
|
+
| Non-empty string, matches an option (case-insensitive) | Gate auto-decides; `output.choice` is set to the configured option spelling |
|
|
595
|
+
| Non-empty string, no match | Gate fails immediately |
|
|
596
|
+
| Non-string | Gate fails immediately |
|
|
597
|
+
| Missing or empty | Gate prompts on a TTY; pauses otherwise |
|
|
598
|
+
|
|
599
|
+
**Default value semantics:** A non-empty `default` is consumed as a verdict on the first run — matching an option auto-decides the gate, not matching fails it immediately.
|
|
600
|
+
|
|
601
|
+
```yaml
|
|
602
|
+
inputs:
|
|
603
|
+
spec_verdict:
|
|
604
|
+
type: string
|
|
605
|
+
default: ""
|
|
606
|
+
steps:
|
|
607
|
+
- id: review-spec
|
|
608
|
+
type: gate
|
|
609
|
+
message: "Approve the specification?"
|
|
610
|
+
options: [approve, reject]
|
|
611
|
+
on_reject: retry
|
|
612
|
+
verdict_input: spec_verdict
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
Supply a verdict when resuming:
|
|
616
|
+
|
|
617
|
+
```bash
|
|
618
|
+
specify workflow resume <run_id> --input spec_verdict=approve
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
For `on_reject: retry`, a bound reject verdict is consumed before the gate
|
|
622
|
+
pauses: the named stored input is reset to `""`. A later resume therefore
|
|
623
|
+
prompts or pauses again until another verdict is supplied. Approve, abort, and
|
|
624
|
+
skip outcomes leave the input unchanged.
|
|
625
|
+
|
|
557
626
|
## FAQ
|
|
558
627
|
|
|
559
628
|
### What happens when a workflow hits a gate step?
|
|
@@ -208,6 +208,74 @@ Restart your IDE to refresh the command list.
|
|
|
208
208
|
|
|
209
209
|
---
|
|
210
210
|
|
|
211
|
+
## Behavior change: `/constitution` no longer propagates into templates
|
|
212
|
+
|
|
213
|
+
The `/constitution` command ([#3790](https://github.com/github/spec-kit/pull/3790)) is scoped to
|
|
214
|
+
its own artifact. It updates
|
|
215
|
+
`.specify/memory/constitution.md` and writes a Sync Impact Report, and **no longer edits**
|
|
216
|
+
`plan-template.md`, `spec-template.md`, `tasks-template.md`, installed command files, or
|
|
217
|
+
guidance docs.
|
|
218
|
+
|
|
219
|
+
### Why
|
|
220
|
+
|
|
221
|
+
Spec Kit uses **runtime resolution**: `plan`, `tasks`, and `analyze` read
|
|
222
|
+
`.specify/memory/constitution.md` live on every run, and `analyze` is the dedicated drift
|
|
223
|
+
checker. The governed templates carry a pointer, not a copy — `plan-template.md` ships
|
|
224
|
+
`[Gates determined based on constitution file]`, and `/plan` fills that section from the live
|
|
225
|
+
constitution each run. Propagation duplicated the single source of truth and fought the
|
|
226
|
+
preset/override composition system (a `replace` preset shadows an edited core template).
|
|
227
|
+
|
|
228
|
+
More broadly, presets and extensions — not in-place file edits — are how Spec Kit now governs
|
|
229
|
+
shared assets. Composing policy through the resolution stack keeps it centrally owned, versioned,
|
|
230
|
+
and auditable across repositories, instead of frozen into per-repo copies no core team can see.
|
|
231
|
+
|
|
232
|
+
### Is this a breaking change for existing projects?
|
|
233
|
+
|
|
234
|
+
**No — your workflow keeps working.** You would only notice a difference if you relied on
|
|
235
|
+
`/constitution` editing those files in place. The templates are scaffolds, not authorities. When you
|
|
236
|
+
run `/plan`, it copies the template into a per-feature `plan.md` and re-derives the Constitution
|
|
237
|
+
Check from the live constitution; `/analyze` validates against it. Even if a previous
|
|
238
|
+
`/constitution` run materialized concrete gate text into `.specify/templates/plan-template.md`,
|
|
239
|
+
the live constitution remains the source of truth at runtime.
|
|
240
|
+
|
|
241
|
+
On a **non-forced upgrade**, a materialized template is *preserved* (its hash diverges from the
|
|
242
|
+
recorded managed copy, so the refresh treats it as a customization and does not overwrite it).
|
|
243
|
+
Nothing regresses.
|
|
244
|
+
|
|
245
|
+
### Optional cleanup — return to the runtime pointer
|
|
246
|
+
|
|
247
|
+
A frozen, pre-filled Constitution Check is a slightly misleading scaffold and can bias the first
|
|
248
|
+
`/plan` pass. To move fully back to runtime resolution, reset the section body in
|
|
249
|
+
`.specify/templates/plan-template.md` to the pointer:
|
|
250
|
+
|
|
251
|
+
```text
|
|
252
|
+
## Constitution Check
|
|
253
|
+
|
|
254
|
+
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
|
|
255
|
+
|
|
256
|
+
[Gates determined based on constitution file]
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Leave the rest of the file untouched. This is cleanup, not a required migration.
|
|
260
|
+
|
|
261
|
+
### Keeping the old behavior (opt-in)
|
|
262
|
+
|
|
263
|
+
If your team treats the materialized templates as **reviewed, committed artifacts** and wants
|
|
264
|
+
`/constitution` to keep propagating, install the bundled **`constitution-sync`** preset:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
specify preset add constitution-sync
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
It wraps the core `/constitution` command and re-adds the propagation pass. It does **not** edit
|
|
271
|
+
versioned preset- or extension-provided templates or command files (those are owned by their
|
|
272
|
+
packages and are recomposed on reconciliation). Note that this edit-in-place propagation model
|
|
273
|
+
conflicts with the composition model used by the rest of the SDD commands when they are
|
|
274
|
+
preset/extension-managed — see the "Interaction with the resolution stack" section in
|
|
275
|
+
`presets/constitution-sync/README.md` for the tradeoffs and when to prefer the default instead.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
211
279
|
## Common Scenarios
|
|
212
280
|
|
|
213
281
|
### Scenario 1: "I just want new slash commands"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-07-
|
|
3
|
+
"updated_at": "2026-07-29T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"aide": {
|
|
@@ -1070,6 +1070,41 @@
|
|
|
1070
1070
|
"created_at": "2026-03-29T00:00:00Z",
|
|
1071
1071
|
"updated_at": "2026-03-29T00:00:00Z"
|
|
1072
1072
|
},
|
|
1073
|
+
"contextforge-mcp": {
|
|
1074
|
+
"name": "ContextForge MCP",
|
|
1075
|
+
"id": "contextforge-mcp",
|
|
1076
|
+
"description": "Integrates codebase-memory-mcp + headroom into Spec Kit — graph-based code intelligence and context compression for the implement phase.",
|
|
1077
|
+
"author": "capatinore",
|
|
1078
|
+
"version": "0.1.0",
|
|
1079
|
+
"download_url": "https://github.com/capatinore/contextforge-mcp/releases/download/ext-v0.1.0/contextforge-mcp-speckit-extension.zip",
|
|
1080
|
+
"repository": "https://github.com/capatinore/contextforge-mcp",
|
|
1081
|
+
"homepage": "https://github.com/capatinore/contextforge-mcp",
|
|
1082
|
+
"documentation": "https://github.com/capatinore/contextforge-mcp/blob/main/README.md",
|
|
1083
|
+
"changelog": "",
|
|
1084
|
+
"license": "MIT",
|
|
1085
|
+
"category": "code",
|
|
1086
|
+
"effect": "read-write",
|
|
1087
|
+
"requires": {
|
|
1088
|
+
"speckit_version": ">=0.10.0"
|
|
1089
|
+
},
|
|
1090
|
+
"provides": {
|
|
1091
|
+
"commands": 4,
|
|
1092
|
+
"hooks": 0
|
|
1093
|
+
},
|
|
1094
|
+
"tags": [
|
|
1095
|
+
"mcp",
|
|
1096
|
+
"code-intelligence",
|
|
1097
|
+
"context-compression",
|
|
1098
|
+
"tokens",
|
|
1099
|
+
"claude",
|
|
1100
|
+
"spec-driven-development"
|
|
1101
|
+
],
|
|
1102
|
+
"verified": false,
|
|
1103
|
+
"downloads": 0,
|
|
1104
|
+
"stars": 0,
|
|
1105
|
+
"created_at": "2026-07-13T00:00:00Z",
|
|
1106
|
+
"updated_at": "2026-07-13T00:00:00Z"
|
|
1107
|
+
},
|
|
1073
1108
|
"cost": {
|
|
1074
1109
|
"name": "Cost Tracker",
|
|
1075
1110
|
"id": "cost",
|
|
@@ -1861,6 +1896,40 @@
|
|
|
1861
1896
|
"created_at": "2026-06-23T00:00:00Z",
|
|
1862
1897
|
"updated_at": "2026-06-30T00:00:00Z"
|
|
1863
1898
|
},
|
|
1899
|
+
"intent": {
|
|
1900
|
+
"name": "Intent Reconciliation",
|
|
1901
|
+
"id": "intent",
|
|
1902
|
+
"description": "Reconcile implementation-discovered decisions against approved feature intent",
|
|
1903
|
+
"author": "SuhaibAslam",
|
|
1904
|
+
"version": "1.0.2",
|
|
1905
|
+
"download_url": "https://github.com/SuhaibAslam/spec-kit-reconcile/archive/refs/tags/v1.0.2.zip",
|
|
1906
|
+
"repository": "https://github.com/SuhaibAslam/spec-kit-reconcile",
|
|
1907
|
+
"homepage": "https://github.com/SuhaibAslam/spec-kit-reconcile",
|
|
1908
|
+
"documentation": "https://github.com/SuhaibAslam/spec-kit-reconcile/blob/main/README.md",
|
|
1909
|
+
"changelog": "https://github.com/SuhaibAslam/spec-kit-reconcile/blob/main/CHANGELOG.md",
|
|
1910
|
+
"license": "MIT",
|
|
1911
|
+
"category": "process",
|
|
1912
|
+
"effect": "read-write",
|
|
1913
|
+
"requires": {
|
|
1914
|
+
"speckit_version": ">=0.12.0"
|
|
1915
|
+
},
|
|
1916
|
+
"provides": {
|
|
1917
|
+
"commands": 3,
|
|
1918
|
+
"hooks": 0
|
|
1919
|
+
},
|
|
1920
|
+
"tags": [
|
|
1921
|
+
"intent",
|
|
1922
|
+
"decisions",
|
|
1923
|
+
"reconciliation",
|
|
1924
|
+
"drift",
|
|
1925
|
+
"workflow"
|
|
1926
|
+
],
|
|
1927
|
+
"verified": false,
|
|
1928
|
+
"downloads": 0,
|
|
1929
|
+
"stars": 0,
|
|
1930
|
+
"created_at": "2026-07-29T00:00:00Z",
|
|
1931
|
+
"updated_at": "2026-07-29T00:00:00Z"
|
|
1932
|
+
},
|
|
1864
1933
|
"issue": {
|
|
1865
1934
|
"name": "GitHub Issues Integration 2",
|
|
1866
1935
|
"id": "issue",
|
|
@@ -25,6 +25,29 @@
|
|
|
25
25
|
"workflow",
|
|
26
26
|
"core"
|
|
27
27
|
]
|
|
28
|
+
},
|
|
29
|
+
"constitution-sync": {
|
|
30
|
+
"name": "Constitution Template Sync",
|
|
31
|
+
"id": "constitution-sync",
|
|
32
|
+
"version": "1.0.0",
|
|
33
|
+
"description": "Opt-in: restores /constitution propagation of amended guidance into plan/spec/tasks templates and installed command files, for teams that treat materialized templates as reviewed artifacts.",
|
|
34
|
+
"author": "github",
|
|
35
|
+
"repository": "https://github.com/github/spec-kit",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"bundled": true,
|
|
38
|
+
"requires": {
|
|
39
|
+
"speckit_version": ">=0.14.4"
|
|
40
|
+
},
|
|
41
|
+
"provides": {
|
|
42
|
+
"commands": 1,
|
|
43
|
+
"templates": 0
|
|
44
|
+
},
|
|
45
|
+
"tags": [
|
|
46
|
+
"constitution",
|
|
47
|
+
"governance",
|
|
48
|
+
"templates",
|
|
49
|
+
"compatibility"
|
|
50
|
+
]
|
|
28
51
|
}
|
|
29
52
|
}
|
|
30
53
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Constitution Template Sync
|
|
2
|
+
|
|
3
|
+
An **opt-in** preset that restores `/constitution`'s ability to propagate amended guidance into your
|
|
4
|
+
project's own templates and command files. After you update the constitution, it aligns
|
|
5
|
+
`plan-template.md`, `spec-template.md`, `tasks-template.md`, project-local command files, and
|
|
6
|
+
guidance docs so they reflect the current principles.
|
|
7
|
+
|
|
8
|
+
This propagation used to be built into `/constitution`; it was dropped when the command moved to the
|
|
9
|
+
preset model. Installing this preset opts you back into it: you get the guidance materialized into
|
|
10
|
+
reviewed, committed artifacts instead of relying on runtime resolution alone.
|
|
11
|
+
|
|
12
|
+
> **What you're opting into.** Propagation was removed deliberately — it duplicates the constitution
|
|
13
|
+
> as the source of truth and can fight the composition stack (materialized edits get shadowed or
|
|
14
|
+
> clobbered on the next recompose). This preset knowingly **reintroduces** that behavior, and those
|
|
15
|
+
> tradeoffs, for teams that want it. Read the [caveats](#caveats-you-take-on) before installing.
|
|
16
|
+
|
|
17
|
+
For most projects the default composable stack is the **recommended** approach, and at organization
|
|
18
|
+
scale it is usually the stronger governance model. Runtime resolution keeps the live constitution as
|
|
19
|
+
the single source of truth (nothing to re-sync, so nothing drifts), and the stack composes the
|
|
20
|
+
**entire** Spec Kit ecosystem — not just the SDD commands, but every command, template, script and
|
|
21
|
+
extension — with explicit priority levels, strategies, and independent versioning. It is a
|
|
22
|
+
capability, not automatic governance: a core team authors its own organizational presets and
|
|
23
|
+
extensions, then owns, versions, and audits that policy in one place and rolls it across many
|
|
24
|
+
repositories, instead of scattering frozen, per-repo copies no central team can see. This preset is
|
|
25
|
+
a supported escape hatch for teams whose workflow depends on reviewing materialized artifacts
|
|
26
|
+
directly — useful as a bridge, though for org-wide policy the better long-term path is usually a
|
|
27
|
+
versioned preset a core team maintains.
|
|
28
|
+
|
|
29
|
+
## What it does
|
|
30
|
+
|
|
31
|
+
Ships a single `wrap`-strategy override of `speckit.constitution`. It composes on top of the
|
|
32
|
+
current core command (via `{CORE_TEMPLATE}`), so it stays forward-compatible with core changes, and
|
|
33
|
+
appends a propagation pass that, after the constitution is written:
|
|
34
|
+
|
|
35
|
+
- Aligns `plan/spec/tasks-template.md` in `.specify/templates/` with the updated principles.
|
|
36
|
+
- Updates **project-local** command files and guidance docs to correct stale references.
|
|
37
|
+
- Extends the Sync Impact Report in `.specify/memory/constitution.md` with the files it touched.
|
|
38
|
+
|
|
39
|
+
## What it does not do
|
|
40
|
+
|
|
41
|
+
- It does **not** change behavior for anyone who does not install it — the default runtime
|
|
42
|
+
resolution model is untouched.
|
|
43
|
+
- It does **not** disable runtime resolution. `plan`, `tasks`, and `analyze` still read the live
|
|
44
|
+
constitution every run; this preset adds materialized copies on top — it does not replace the
|
|
45
|
+
source of truth.
|
|
46
|
+
- It does **not** edit versioned, package-owned files — templates or command files provided or
|
|
47
|
+
wrapped by another preset or extension. Those are recomposed from the resolution stack, so it
|
|
48
|
+
only ever writes into your project's own `.specify/templates/` scaffolds and command files that
|
|
49
|
+
are not managed by a preset/extension.
|
|
50
|
+
|
|
51
|
+
## When to use it
|
|
52
|
+
|
|
53
|
+
Install it **only** if your team treats the materialized templates and commands as
|
|
54
|
+
**reviewed, committed artifacts** — for example, if `plan-template.md`'s Constitution Check is
|
|
55
|
+
read in PRs as "here are our current gates" and is expected to track the constitution.
|
|
56
|
+
|
|
57
|
+
If you rely on the default runtime-resolution model, you do **not** need this preset: the live
|
|
58
|
+
constitution is already the single source of truth and there is nothing to sync.
|
|
59
|
+
|
|
60
|
+
## Caveats you take on
|
|
61
|
+
|
|
62
|
+
The preset resolution stack is how Spec Kit composes templates and commands going forward: they are
|
|
63
|
+
**layered, package-owned artifacts recomposed on demand**, not frozen files you edit in place.
|
|
64
|
+
Propagation is the opposite idea — it **materializes** guidance into files and freezes it. That
|
|
65
|
+
tension is the main thing to understand before installing:
|
|
66
|
+
|
|
67
|
+
- **Materialized copies can drift.** Anything propagated is a snapshot; if you amend the
|
|
68
|
+
constitution and do not re-run `/constitution`, the copies fall out of sync. The default runtime
|
|
69
|
+
model has no drift because it reads the live constitution every run.
|
|
70
|
+
|
|
71
|
+
- **Edits to composed files do not survive reconciliation.** If the rest of your SDD flow is
|
|
72
|
+
preset/extension-managed, the commands it materializes (`speckit.plan`, `speckit.specify`,
|
|
73
|
+
`speckit.tasks`, `speckit.analyze`, `speckit.implement`, …) are recomputed from the stack. Any
|
|
74
|
+
guidance propagated into them is clobbered the next time the stack reconciles — on
|
|
75
|
+
`specify integration use <key>` / `switch`, `specify integration upgrade`, or any preset/extension
|
|
76
|
+
install or remove. The same applies to templates owned by another preset/extension. This is why
|
|
77
|
+
the preset restricts itself to project-local files; propagation is reliable **only** for
|
|
78
|
+
artifacts you own outright.
|
|
79
|
+
|
|
80
|
+
- **A pre-filled Constitution Check can bias `/plan`.** Materializing concrete gates into
|
|
81
|
+
`plan-template.md` replaces the runtime pointer, so the first `/plan` pass may anchor on the
|
|
82
|
+
frozen text. Keep the pointer unless you specifically want committed gates.
|
|
83
|
+
|
|
84
|
+
**Bottom line:** this preset fits projects whose governed templates and commands are project-local
|
|
85
|
+
artifacts they review, with the rest of the SDD flow on the plain bundled core. If your
|
|
86
|
+
`plan`/`specify`/`tasks`/`analyze` commands or templates come from other presets or extensions,
|
|
87
|
+
prefer the default runtime-resolution model.
|
|
88
|
+
|
|
89
|
+
## Installation
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# constitution-sync is a bundled preset — no download needed
|
|
93
|
+
specify preset add constitution-sync
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Development
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Test from local directory
|
|
100
|
+
specify preset add --dev ./presets/constitution-sync
|
|
101
|
+
|
|
102
|
+
# Verify the wrapped command resolves
|
|
103
|
+
specify preset resolve speckit.constitution
|
|
104
|
+
|
|
105
|
+
# Remove when done
|
|
106
|
+
specify preset remove constitution-sync
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Migrating back to the default
|
|
110
|
+
|
|
111
|
+
To move back to runtime resolution, reset each materialized `## Constitution Check` section in
|
|
112
|
+
`.specify/templates/plan-template.md` to the pointer:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
## Constitution Check
|
|
116
|
+
|
|
117
|
+
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
|
|
118
|
+
|
|
119
|
+
[Gates determined based on constitution file]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Then remove this preset. See `docs/upgrade.md` for details.
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT
|