specify-cli 0.15.0__tar.gz → 0.15.2__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.
Files changed (531) hide show
  1. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/publish-pypi.yml +1 -1
  2. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/security.yml +2 -2
  3. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/stale.yml +1 -1
  4. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/test.yml +2 -2
  5. {specify_cli-0.15.0 → specify_cli-0.15.2}/CHANGELOG.md +50 -0
  6. {specify_cli-0.15.0 → specify_cli-0.15.2}/PKG-INFO +3 -3
  7. {specify_cli-0.15.0 → specify_cli-0.15.2}/README.md +2 -2
  8. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/community/extensions.md +2 -0
  9. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/core.md +2 -1
  10. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/workflows.md +85 -3
  11. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/upgrade.md +68 -0
  12. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/catalog.community.json +71 -1
  13. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/catalog.json +23 -0
  14. specify_cli-0.15.2/presets/constitution-sync/README.md +126 -0
  15. specify_cli-0.15.2/presets/constitution-sync/commands/speckit.constitution.md +54 -0
  16. specify_cli-0.15.2/presets/constitution-sync/preset.yml +30 -0
  17. {specify_cli-0.15.0 → specify_cli-0.15.2}/pyproject.toml +2 -1
  18. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/powershell/common.ps1 +11 -3
  19. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/python/common.py +19 -8
  20. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/__init__.py +2 -0
  21. specify_cli-0.15.2/src/specify_cli/_agent_config.py +56 -0
  22. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_download_security.py +376 -15
  23. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/agents.py +1 -1
  24. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/adapters.py +7 -3
  25. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/packager.py +5 -3
  26. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/primitives.py +63 -7
  27. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/catalogs.py +7 -0
  28. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/commands/bundle/__init__.py +4 -2
  29. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/commands/init.py +220 -5
  30. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/events.py +9 -7
  31. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/extensions/__init__.py +281 -20
  32. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/extensions/_commands.py +559 -180
  33. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/kimi/__init__.py +1 -1
  34. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/manifest.py +4 -0
  35. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/presets/__init__.py +181 -28
  36. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/presets/_commands.py +48 -13
  37. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/_commands.py +553 -32
  38. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/base.py +3 -0
  39. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/catalog.py +12 -4
  40. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/engine.py +134 -12
  41. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/overlays/_commands.py +12 -2
  42. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/fan_in/__init__.py +24 -2
  43. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/gate/__init__.py +99 -10
  44. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/init/__init__.py +18 -6
  45. specify_cli-0.15.2/tests/contract/test_wheel_bundled_presets.py +53 -0
  46. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integration/test_bundler_init_install.py +14 -0
  47. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_cli.py +338 -0
  48. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_events.py +20 -0
  49. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_catalog.py +6 -3
  50. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_kimi.py +18 -0
  51. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_manifest.py +8 -0
  52. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_check_prerequisites_python_parity.py +66 -0
  53. specify_cli-0.15.2/tests/test_commands_package.py +100 -0
  54. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_download_security.py +176 -0
  55. specify_cli-0.15.2/tests/test_extension_add_path_traversal.py +401 -0
  56. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_extensions.py +580 -9
  57. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_init_dir.py +138 -0
  58. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_post_process.py +26 -0
  59. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_presets.py +409 -2
  60. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_workflows.py +1706 -46
  61. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_adapters.py +12 -0
  62. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_packager.py +26 -0
  63. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_primitives.py +119 -0
  64. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/test_overlay_commands.py +80 -0
  65. specify_cli-0.15.0/src/specify_cli/_agent_config.py +0 -24
  66. specify_cli-0.15.0/tests/test_commands_package.py +0 -52
  67. {specify_cli-0.15.0 → specify_cli-0.15.2}/.devcontainer/devcontainer.json +0 -0
  68. {specify_cli-0.15.0 → specify_cli-0.15.2}/.devcontainer/post-create.sh +0 -0
  69. {specify_cli-0.15.0 → specify_cli-0.15.2}/.editorconfig +0 -0
  70. {specify_cli-0.15.0 → specify_cli-0.15.2}/.gitattributes +0 -0
  71. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/CODEOWNERS +0 -0
  72. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
  73. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  74. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  75. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  76. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  77. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  78. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  79. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  80. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/aw/actions-lock.json +0 -0
  81. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/dependabot.yml +0 -0
  82. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/scripts/check_security_requirements.py +0 -0
  83. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/security-audit-requirements.txt +0 -0
  84. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/skills/add-community-extension/SKILL.md +0 -0
  85. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/RELEASE-PROCESS.md +0 -0
  86. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/add-community-bundle.lock.yml +0 -0
  87. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/add-community-bundle.md +0 -0
  88. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/add-community-extension.lock.yml +0 -0
  89. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/add-community-extension.md +0 -0
  90. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/add-community-preset.lock.yml +0 -0
  91. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/add-community-preset.md +0 -0
  92. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/bug-assess.lock.yml +0 -0
  93. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/bug-assess.md +0 -0
  94. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/bug-fix.lock.yml +0 -0
  95. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/bug-fix.md +0 -0
  96. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/bug-test.lock.yml +0 -0
  97. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/bug-test.md +0 -0
  98. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/catalog-assign.yml +0 -0
  99. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/codeql.yml +0 -0
  100. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/docs.yml +0 -0
  101. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/lint.yml +0 -0
  102. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/release-trigger.yml +0 -0
  103. {specify_cli-0.15.0 → specify_cli-0.15.2}/.github/workflows/release.yml +0 -0
  104. {specify_cli-0.15.0 → specify_cli-0.15.2}/.gitignore +0 -0
  105. {specify_cli-0.15.0 → specify_cli-0.15.2}/.markdownlint-cli2.jsonc +0 -0
  106. {specify_cli-0.15.0 → specify_cli-0.15.2}/.pre-commit-config.yaml +0 -0
  107. {specify_cli-0.15.0 → specify_cli-0.15.2}/.zenodo.json +0 -0
  108. {specify_cli-0.15.0 → specify_cli-0.15.2}/AGENTS.md +0 -0
  109. {specify_cli-0.15.0 → specify_cli-0.15.2}/CITATION.cff +0 -0
  110. {specify_cli-0.15.0 → specify_cli-0.15.2}/CODE_OF_CONDUCT.md +0 -0
  111. {specify_cli-0.15.0 → specify_cli-0.15.2}/CONTRIBUTING.md +0 -0
  112. {specify_cli-0.15.0 → specify_cli-0.15.2}/DEVELOPMENT.md +0 -0
  113. {specify_cli-0.15.0 → specify_cli-0.15.2}/LICENSE +0 -0
  114. {specify_cli-0.15.0 → specify_cli-0.15.2}/README.zh-CN.md +0 -0
  115. {specify_cli-0.15.0 → specify_cli-0.15.2}/SECURITY.md +0 -0
  116. {specify_cli-0.15.0 → specify_cli-0.15.2}/SUPPORT.md +0 -0
  117. {specify_cli-0.15.0 → specify_cli-0.15.2}/bundles/catalog.community.json +0 -0
  118. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/.gitignore +0 -0
  119. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/README.md +0 -0
  120. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/community/bundles.md +0 -0
  121. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/community/friends.md +0 -0
  122. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/community/overview.md +0 -0
  123. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/community/presets.md +0 -0
  124. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/community/walkthroughs.md +0 -0
  125. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/concepts/complex-features.md +0 -0
  126. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/concepts/sdd.md +0 -0
  127. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/concepts/spec-of-specs.md +0 -0
  128. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/concepts/spec-persistence.md +0 -0
  129. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/docfx.json +0 -0
  130. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/guides/evolving-specs.md +0 -0
  131. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/guides/monorepo.md +0 -0
  132. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/index.md +0 -0
  133. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/install/air-gapped.md +0 -0
  134. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/install/one-time.md +0 -0
  135. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/install/pipx.md +0 -0
  136. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/install/pypi.md +0 -0
  137. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/install/uv.md +0 -0
  138. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/installation.md +0 -0
  139. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/local-development.md +0 -0
  140. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/quickstart.md +0 -0
  141. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/agentic-bugfix.md +0 -0
  142. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/agentic-sdd.md +0 -0
  143. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/authentication.md +0 -0
  144. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/bundles.md +0 -0
  145. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/extensions.md +0 -0
  146. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/integrations.md +0 -0
  147. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/overview.md +0 -0
  148. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/reference/presets.md +0 -0
  149. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/template/public/main.css +0 -0
  150. {specify_cli-0.15.0 → specify_cli-0.15.2}/docs/toc.yml +0 -0
  151. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/business-analyst/README.md +0 -0
  152. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/business-analyst/bundle.yml +0 -0
  153. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/developer/README.md +0 -0
  154. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/developer/bundle.yml +0 -0
  155. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/product-manager/README.md +0 -0
  156. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/product-manager/bundle.yml +0 -0
  157. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/security-researcher/README.md +0 -0
  158. {specify_cli-0.15.0 → specify_cli-0.15.2}/examples/bundles/security-researcher/bundle.yml +0 -0
  159. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  160. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  161. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  162. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  163. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/README.md +0 -0
  164. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  165. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/README.md +0 -0
  166. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/agent-context-config.yml +0 -0
  167. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/agent-context-defaults.json +0 -0
  168. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  169. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/extension.yml +0 -0
  170. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
  171. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
  172. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  173. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/assess/README.md +0 -0
  174. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/assess/commands/speckit.assess.decide.md +0 -0
  175. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/assess/commands/speckit.assess.define.md +0 -0
  176. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/assess/commands/speckit.assess.intake.md +0 -0
  177. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/assess/commands/speckit.assess.research.md +0 -0
  178. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/assess/commands/speckit.assess.shape.md +0 -0
  179. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/assess/extension.yml +0 -0
  180. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/bug/README.md +0 -0
  181. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  182. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  183. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/bug/commands/speckit.bug.test.md +0 -0
  184. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/bug/extension.yml +0 -0
  185. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/catalog.json +0 -0
  186. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/README.md +0 -0
  187. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/commands/speckit.git.commit.md +0 -0
  188. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/commands/speckit.git.feature.md +0 -0
  189. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/commands/speckit.git.initialize.md +0 -0
  190. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/commands/speckit.git.remote.md +0 -0
  191. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/commands/speckit.git.validate.md +0 -0
  192. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/config-template.yml +0 -0
  193. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/extension.yml +0 -0
  194. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/git-config.yml +0 -0
  195. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  196. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  197. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/bash/git-common.sh +0 -0
  198. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  199. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  200. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
  201. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  202. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  203. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/python/auto_commit.py +0 -0
  204. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
  205. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/python/git_common.py +0 -0
  206. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/git/scripts/python/initialize_repo.py +0 -0
  207. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/selftest/commands/selftest.md +0 -0
  208. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/selftest/extension.yml +0 -0
  209. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/.gitignore +0 -0
  210. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/CHANGELOG.md +0 -0
  211. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/EXAMPLE-README.md +0 -0
  212. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/LICENSE +0 -0
  213. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/README.md +0 -0
  214. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/commands/example.md +0 -0
  215. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/config-template.yml +0 -0
  216. {specify_cli-0.15.0 → specify_cli-0.15.2}/extensions/template/extension.yml +0 -0
  217. {specify_cli-0.15.0 → specify_cli-0.15.2}/integrations/CONTRIBUTING.md +0 -0
  218. {specify_cli-0.15.0 → specify_cli-0.15.2}/integrations/README.md +0 -0
  219. {specify_cli-0.15.0 → specify_cli-0.15.2}/integrations/catalog.community.json +0 -0
  220. {specify_cli-0.15.0 → specify_cli-0.15.2}/integrations/catalog.json +0 -0
  221. {specify_cli-0.15.0 → specify_cli-0.15.2}/media/bootstrap-claude-code.gif +0 -0
  222. {specify_cli-0.15.0 → specify_cli-0.15.2}/media/logo_large.webp +0 -0
  223. {specify_cli-0.15.0 → specify_cli-0.15.2}/media/logo_small.webp +0 -0
  224. {specify_cli-0.15.0 → specify_cli-0.15.2}/media/spec-kit-video-header.jpg +0 -0
  225. {specify_cli-0.15.0 → specify_cli-0.15.2}/media/specify_cli.gif +0 -0
  226. {specify_cli-0.15.0 → specify_cli-0.15.2}/newsletters/2026-April.md +0 -0
  227. {specify_cli-0.15.0 → specify_cli-0.15.2}/newsletters/2026-February.md +0 -0
  228. {specify_cli-0.15.0 → specify_cli-0.15.2}/newsletters/2026-June.md +0 -0
  229. {specify_cli-0.15.0 → specify_cli-0.15.2}/newsletters/2026-March.md +0 -0
  230. {specify_cli-0.15.0 → specify_cli-0.15.2}/newsletters/2026-May.md +0 -0
  231. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/ARCHITECTURE.md +0 -0
  232. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/PUBLISHING.md +0 -0
  233. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/README.md +0 -0
  234. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/catalog.community.json +0 -0
  235. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/lean/README.md +0 -0
  236. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/lean/commands/speckit.constitution.md +0 -0
  237. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/lean/commands/speckit.implement.md +0 -0
  238. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/lean/commands/speckit.plan.md +0 -0
  239. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/lean/commands/speckit.specify.md +0 -0
  240. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/lean/commands/speckit.tasks.md +0 -0
  241. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/lean/preset.yml +0 -0
  242. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/scaffold/README.md +0 -0
  243. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  244. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/scaffold/commands/speckit.specify.md +0 -0
  245. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/scaffold/preset.yml +0 -0
  246. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/scaffold/templates/myext-template.md +0 -0
  247. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/scaffold/templates/spec-template.md +0 -0
  248. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/commands/speckit.specify.md +0 -0
  249. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  250. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/preset.yml +0 -0
  251. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/templates/checklist-template.md +0 -0
  252. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/templates/constitution-template.md +0 -0
  253. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/templates/plan-template.md +0 -0
  254. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/templates/spec-template.md +0 -0
  255. {specify_cli-0.15.0 → specify_cli-0.15.2}/presets/self-test/templates/tasks-template.md +0 -0
  256. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/bash/check-prerequisites.sh +0 -0
  257. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/bash/common.sh +0 -0
  258. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/bash/create-new-feature.sh +0 -0
  259. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/bash/setup-plan.sh +0 -0
  260. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/bash/setup-tasks.sh +0 -0
  261. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/powershell/check-prerequisites.ps1 +0 -0
  262. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/powershell/create-new-feature.ps1 +0 -0
  263. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/powershell/setup-plan.ps1 +0 -0
  264. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/powershell/setup-tasks.ps1 +0 -0
  265. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/python/check_prerequisites.py +0 -0
  266. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/python/create_new_feature.py +0 -0
  267. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/python/setup_plan.py +0 -0
  268. {specify_cli-0.15.0 → specify_cli-0.15.2}/scripts/python/setup_tasks.py +0 -0
  269. {specify_cli-0.15.0 → specify_cli-0.15.2}/spec-driven.md +0 -0
  270. {specify_cli-0.15.0 → specify_cli-0.15.2}/spec-kit.code-workspace +0 -0
  271. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_assets.py +0 -0
  272. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_console.py +0 -0
  273. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_github_http.py +0 -0
  274. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_init_options.py +0 -0
  275. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_invocation_style.py +0 -0
  276. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_project.py +0 -0
  277. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_toml_string.py +0 -0
  278. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_utils.py +0 -0
  279. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/_version.py +0 -0
  280. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/authentication/__init__.py +0 -0
  281. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/authentication/azure_devops.py +0 -0
  282. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/authentication/base.py +0 -0
  283. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/authentication/config.py +0 -0
  284. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/authentication/github.py +0 -0
  285. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/authentication/http.py +0 -0
  286. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/__init__.py +0 -0
  287. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  288. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
  289. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/lib/__init__.py +0 -0
  290. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/lib/project.py +0 -0
  291. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/lib/versioning.py +0 -0
  292. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/lib/yamlio.py +0 -0
  293. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/models/__init__.py +0 -0
  294. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/models/catalog.py +0 -0
  295. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/models/manifest.py +0 -0
  296. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/models/records.py +0 -0
  297. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/__init__.py +0 -0
  298. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  299. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/conflict.py +0 -0
  300. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/installer.py +0 -0
  301. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/references.py +0 -0
  302. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/resolver.py +0 -0
  303. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/bundler/services/validator.py +0 -0
  304. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/commands/__init__.py +0 -0
  305. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/commands/event.py +0 -0
  306. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integration_runtime.py +0 -0
  307. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integration_scaffold.py +0 -0
  308. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integration_state.py +0 -0
  309. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integration_status.py +0 -0
  310. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/__init__.py +0 -0
  311. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/_commands.py +0 -0
  312. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/_helpers.py +0 -0
  313. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/_install_commands.py +0 -0
  314. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  315. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/_query_commands.py +0 -0
  316. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  317. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/agy/__init__.py +0 -0
  318. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/alquimia/__init__.py +0 -0
  319. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/amp/__init__.py +0 -0
  320. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  321. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/base.py +0 -0
  322. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/bob/__init__.py +0 -0
  323. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/catalog.py +0 -0
  324. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/claude/__init__.py +0 -0
  325. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/cline/__init__.py +0 -0
  326. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  327. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/codex/__init__.py +0 -0
  328. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  329. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  330. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/devin/__init__.py +0 -0
  331. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/droid/__init__.py +0 -0
  332. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  333. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/forge/__init__.py +0 -0
  334. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  335. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/generic/__init__.py +0 -0
  336. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/goose/__init__.py +0 -0
  337. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/grok/__init__.py +0 -0
  338. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  339. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/junie/__init__.py +0 -0
  340. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  341. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
  342. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  343. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/omp/__init__.py +0 -0
  344. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  345. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/pi/__init__.py +0 -0
  346. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  347. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  348. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  349. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/shai/__init__.py +0 -0
  350. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  351. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/trae/__init__.py +0 -0
  352. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  353. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  354. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/integrations/zed/__init__.py +0 -0
  355. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/shared_infra.py +0 -0
  356. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/__init__.py +0 -0
  357. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/expressions.py +0 -0
  358. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/overlays/__init__.py +0 -0
  359. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/overlays/composer.py +0 -0
  360. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
  361. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/overlays/merge.py +0 -0
  362. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/overlays/schema.py +0 -0
  363. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/__init__.py +0 -0
  364. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
  365. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  366. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
  367. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
  368. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
  369. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  370. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  371. {specify_cli-0.15.0 → specify_cli-0.15.2}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  372. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/checklist-template.md +0 -0
  373. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/analyze.md +0 -0
  374. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/checklist.md +0 -0
  375. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/clarify.md +0 -0
  376. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/constitution.md +0 -0
  377. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/converge.md +0 -0
  378. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/implement.md +0 -0
  379. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/plan.md +0 -0
  380. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/specify.md +0 -0
  381. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/tasks.md +0 -0
  382. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/commands/taskstoissues.md +0 -0
  383. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/constitution-template.md +0 -0
  384. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/plan-template.md +0 -0
  385. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/spec-template.md +0 -0
  386. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/tasks-template.md +0 -0
  387. {specify_cli-0.15.0 → specify_cli-0.15.2}/templates/vscode-settings.json +0 -0
  388. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/__init__.py +0 -0
  389. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/auth_helpers.py +0 -0
  390. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/bundler_helpers.py +0 -0
  391. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/conftest.py +0 -0
  392. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/contract/test_bundle_cli.py +0 -0
  393. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/contract/test_catalog_schema.py +0 -0
  394. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/contract/test_manifest_schema.py +0 -0
  395. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/contract/test_wheel_core_pack_scripts.py +0 -0
  396. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/__init__.py +0 -0
  397. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/assess/__init__.py +0 -0
  398. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/assess/test_assess_extension.py +0 -0
  399. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/bug/__init__.py +0 -0
  400. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/bug/test_bug_extension.py +0 -0
  401. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/git/__init__.py +0 -0
  402. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/git/test_git_extension.py +0 -0
  403. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
  404. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/test_agent_context_cli_free.py +0 -0
  405. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/test_extension_agent_context.py +0 -0
  406. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  407. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  408. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/hooks/TESTING.md +0 -0
  409. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/hooks/plan.md +0 -0
  410. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/hooks/spec.md +0 -0
  411. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/hooks/tasks.md +0 -0
  412. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/http_helpers.py +0 -0
  413. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integration/test_bundler_catalog_stack.py +0 -0
  414. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integration/test_bundler_install_flow.py +0 -0
  415. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integration/test_bundler_local_install.py +0 -0
  416. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integration/test_bundler_offline.py +0 -0
  417. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integration/test_bundler_security_paths.py +0 -0
  418. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/__init__.py +0 -0
  419. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/conftest.py +0 -0
  420. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_base.py +0 -0
  421. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_extra_args.py +0 -0
  422. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_home_isolation.py +0 -0
  423. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_agy.py +0 -0
  424. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_alquimia.py +0 -0
  425. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_amp.py +0 -0
  426. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_auggie.py +0 -0
  427. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_base_markdown.py +0 -0
  428. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_base_skills.py +0 -0
  429. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_base_toml.py +0 -0
  430. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_base_yaml.py +0 -0
  431. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_bob.py +0 -0
  432. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_claude.py +0 -0
  433. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_cline.py +0 -0
  434. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_codebuddy.py +0 -0
  435. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_codex.py +0 -0
  436. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_copilot.py +0 -0
  437. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_cursor_agent.py +0 -0
  438. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_devin.py +0 -0
  439. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_droid.py +0 -0
  440. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_firebender.py +0 -0
  441. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_forge.py +0 -0
  442. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_gemini.py +0 -0
  443. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_generic.py +0 -0
  444. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_goose.py +0 -0
  445. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_grok.py +0 -0
  446. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_hermes.py +0 -0
  447. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_junie.py +0 -0
  448. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_kilocode.py +0 -0
  449. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_kiro_cli.py +0 -0
  450. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_lingma.py +0 -0
  451. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_omp.py +0 -0
  452. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_opencode.py +0 -0
  453. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_pi.py +0 -0
  454. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_qodercli.py +0 -0
  455. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_qwen.py +0 -0
  456. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_rovodev.py +0 -0
  457. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_scaffold.py +0 -0
  458. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_shai.py +0 -0
  459. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_state.py +0 -0
  460. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_subcommand.py +0 -0
  461. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_tabnine.py +0 -0
  462. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_trae.py +0 -0
  463. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_vibe.py +0 -0
  464. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_zcode.py +0 -0
  465. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_integration_zed.py +0 -0
  466. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_registry.py +0 -0
  467. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  468. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/parity_helpers.py +0 -0
  469. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/self_upgrade_helpers.py +0 -0
  470. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_agent_config_consistency.py +0 -0
  471. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_authentication.py +0 -0
  472. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_branch_numbering.py +0 -0
  473. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_check_prerequisites_paths_only.py +0 -0
  474. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_check_tool.py +0 -0
  475. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_cli_version.py +0 -0
  476. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_command_template_py_scripts.py +0 -0
  477. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_console_imports.py +0 -0
  478. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_create_new_feature_python_parity.py +0 -0
  479. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_extension_registration.py +0 -0
  480. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_extension_skills.py +0 -0
  481. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_extension_update_hardening.py +0 -0
  482. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_github_http.py +0 -0
  483. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_github_workflows.py +0 -0
  484. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_init_dir_cli.py +0 -0
  485. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_live_transient_windows.py +0 -0
  486. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_merge.py +0 -0
  487. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_ps1_encoding.py +0 -0
  488. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_registrar_path_traversal.py +0 -0
  489. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_security_workflow.py +0 -0
  490. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_self_upgrade_detection.py +0 -0
  491. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_self_upgrade_execution.py +0 -0
  492. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_self_upgrade_guidance.py +0 -0
  493. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_self_upgrade_verification.py +0 -0
  494. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_setup_plan_feature_json.py +0 -0
  495. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_setup_plan_no_overwrite.py +0 -0
  496. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_setup_plan_python_parity.py +0 -0
  497. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_setup_tasks.py +0 -0
  498. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_setup_tasks_python_parity.py +0 -0
  499. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_shared_infra_integrity.py +0 -0
  500. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_skill_placeholder_py.py +0 -0
  501. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_specify_template_numbering.py +0 -0
  502. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_timestamp_branches.py +0 -0
  503. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_upgrade.py +0 -0
  504. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_utils.py +0 -0
  505. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_utils_assets_imports.py +0 -0
  506. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_version_imports.py +0 -0
  507. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/test_workflow_run_without_project.py +0 -0
  508. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundle_download_url.py +0 -0
  509. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_catalog_config.py +0 -0
  510. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_conflict.py +0 -0
  511. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_records.py +0 -0
  512. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_references.py +0 -0
  513. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_resolver.py +0 -0
  514. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_validator.py +0 -0
  515. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_versioning.py +0 -0
  516. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/unit/test_bundler_yamlio.py +0 -0
  517. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/conftest.py +0 -0
  518. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/test_overlay_composer.py +0 -0
  519. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/test_overlay_layer_sources.py +0 -0
  520. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/test_overlay_merge.py +0 -0
  521. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/test_overlay_schema.py +0 -0
  522. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/test_overlay_security.py +0 -0
  523. {specify_cli-0.15.0 → specify_cli-0.15.2}/tests/workflows/test_resolver_integration.py +0 -0
  524. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/ARCHITECTURE.md +0 -0
  525. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/PUBLISHING.md +0 -0
  526. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/README.md +0 -0
  527. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/catalog.community.json +0 -0
  528. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/catalog.json +0 -0
  529. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/speckit/workflow.yml +0 -0
  530. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/step-catalog.community.json +0 -0
  531. {specify_cli-0.15.0 → specify_cli-0.15.2}/workflows/step-catalog.json +0 -0
@@ -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@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
38
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
39
39
  with:
40
40
  python-version: "3.13"
41
41
 
@@ -27,7 +27,7 @@ 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@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
30
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
31
31
  with:
32
32
  python-version: "3.14"
33
33
 
@@ -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@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
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@1e223db275d687790206a7acac4d1a11bd6fe629 # v10
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@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
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@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
43
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
44
44
  with:
45
45
  python-version: ${{ matrix.python-version }}
46
46
 
@@ -2,6 +2,56 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.15.2] - 2026-08-03
6
+
7
+ ### Changed
8
+
9
+ - fix(presets): restore core skills instead of deleting them on preset remove (#3929)
10
+ - fix(manifests): reject non-string metadata instead of crashing on it (#3943)
11
+ - fix: narrow bare except Exception in invoke separator resolution (#3856)
12
+ - fix(workflows): keep the init step's documented ignore_agent_tools default on an explicit null (#3889)
13
+ - fix(kimi): preserve non-UTF-8 user skills (#3895)
14
+ - fix(presets): tolerate non-UTF-8 legacy commands (#3896)
15
+ - feat: allow overriding default init integration via SPECKIT_INTEGRATION_DEFAULT (#3952)
16
+ - Add adrkit extension to community catalog (#3947)
17
+ - feat(extensions): scaffold config templates on extension add/enable (#2000)
18
+ - fix(events): skip non-UTF-8 extension manifests (#3900)
19
+ - fix(workflows): fail a gate whose on_reject is not abort/skip/retry (#3888)
20
+ - fix(presets): validate required manifest mappings (#3898)
21
+ - fix: eliminate TOCTOU race in zip packaging (#3855)
22
+ - fix(workflows): fail a fan-in step whose output is not a mapping (#3887)
23
+ - fix(workflows): refetch non-UTF-8 catalog caches (#3901)
24
+ - fix(bundler): wrap local catalog decode failures (#3902)
25
+ - Add `--extension` flag to `specify init` for opting into extensions at init time (#3914)
26
+ - fix: bound response reads in extension catalog and download (#3775)
27
+ - fix(workflows): reject a retry gate whose verdict enum forbids the reset value (#3912)
28
+ - chore: release 0.15.1, begin 0.15.2.dev0 development (#3913)
29
+
30
+ ## [0.15.1] - 2026-07-31
31
+
32
+ ### Changed
33
+
34
+ - fix: escape Rich markup in `workflow resolve` output (#3879)
35
+ - chore(deps): bump actions/stale from 10.4.0 to 11.0.0 (#3877)
36
+ - chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 (#3876)
37
+ - feat: support tar archives for installs (#3874)
38
+ - fix: eliminate TOCTOU race in file unlink calls (#3819)
39
+ - fix(scripts): tolerate an unusable integration.json in the Python helper (#3785)
40
+ - fix(catalogs): validate the port in the shared catalog-URL validator, like its mirrors do (#3804)
41
+ - feat(presets): add opt-in constitution-sync preset (#3873)
42
+ - fix: reject non-object workflow caches (#3860)
43
+ - Harden extension URL download cache against symlink and junction races (#3869)
44
+ - fix: escape workflow step metadata (#3863)
45
+ - [bug-fix] Fix bundle-update-force-mislead: add refresh() to DefaultPrimitiveInstaller (#3452)
46
+ - fix: use chunked read for extension manifest hash (#3841)
47
+ - fix: preserve unreadable event config files (#3861)
48
+ - fix(scripts): use a .NET Framework-safe trim in the PowerShell init-dir resolver (#3872)
49
+ - Add ContextForge MCP extension to community catalog (#3487)
50
+ - fix: normalize non-UTF-8 integration manifests (#3862)
51
+ - feat: bind gate verdict to workflow input via verdict_input (#3725)
52
+ - docs: use absolute image URLs in README for PyPI rendering (#3867)
53
+ - chore: release 0.15.0, begin 0.15.1.dev0 development (#3871)
54
+
5
55
  ## [0.15.0] - 2026-07-30
6
56
 
7
57
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specify-cli
3
- Version: 0.15.0
3
+ Version: 0.15.2
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="./media/logo_large.webp" alt="Spec Kit Logo" width="200" height="200"/>
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
- [![Spec Kit video header](/media/spec-kit-video-header.jpg)](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
159
+ [![Spec Kit video header](https://raw.githubusercontent.com/github/spec-kit/main/media/spec-kit-video-header.jpg)](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="./media/logo_large.webp" alt="Spec Kit Logo" width="200" height="200"/>
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
- [![Spec Kit video header](/media/spec-kit-video-header.jpg)](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
139
+ [![Spec Kit video header](https://raw.githubusercontent.com/github/spec-kit/main/media/spec-kit-video-header.jpg)](https://www.youtube.com/watch?v=a9eR1xsfvHg&pp=0gcJCckJAYcqIYzv)
140
140
 
141
141
  ## 🌍 Community
142
142
 
@@ -25,6 +25,7 @@ The following community-contributed extensions are available in [`catalog.commun
25
25
 
26
26
  | Extension | Purpose | Category | Effect | URL |
27
27
  |-----------|---------|----------|--------|-----|
28
+ | adrkit — decision memory for spec-driven development | Pulls the decisions governing this work into agent context, checks produced plans against them, and drafts an ADR from a plan artifact | `process` | Read+Write | [adrkit](https://github.com/mbeacom/adrkit) |
28
29
  | Agent Assign | Assign specialized Claude Code agents to spec-kit tasks for targeted execution | `process` | Read+Write | [spec-kit-agent-assign](https://github.com/xymelon/spec-kit-agent-assign) |
29
30
  | Agent Governance | Generate agent-platform repository governance files from Spec Kit metadata | `process` | Read+Write | [spec-kit-agent-governance](https://github.com/bigsmartben/spec-kit-agent-governance) |
30
31
  | AI-Driven Engineering (AIDE) | A structured 7-step workflow for building new projects from scratch with AI assistants — from vision through implementation | `process` | Read+Write | [aide](https://github.com/mnriem/spec-kit-extensions/tree/main/aide) |
@@ -50,6 +51,7 @@ The following community-contributed extensions are available in [`catalog.commun
50
51
  | 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
52
  | 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
53
  | 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) |
54
+ | 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
55
  | 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
56
  | 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
57
  | 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) |
@@ -25,7 +25,7 @@ Creates a new Spec Kit project with the necessary directory structure, templates
25
25
 
26
26
  Use `<project_name>` to create a new directory, or `--here` (or `.`) to initialize in the current directory. If the directory already has files, use `--force` to merge without confirmation.
27
27
 
28
- When `--integration` is omitted, interactive terminals prompt you to choose an integration. Non-interactive sessions, such as CI or piped runs, default to GitHub Copilot; pass `--integration <key>` to choose a different integration explicitly.
28
+ When `--integration` is omitted, interactive terminals prompt you to choose an integration. Non-interactive sessions, such as CI or piped runs, default to GitHub Copilot; pass `--integration <key>` to choose a different integration explicitly, or set `SPECKIT_INTEGRATION_DEFAULT` to change the fallback (see [Environment Variables](#environment-variables)).
29
29
 
30
30
  ### Examples
31
31
 
@@ -50,6 +50,7 @@ specify init my-project --integration copilot --preset compliance
50
50
 
51
51
  | Variable | Description |
52
52
  | ----------------- | ------------------------------------------------------------------------ |
53
+ | `SPECKIT_INTEGRATION_DEFAULT` | Override the fallback integration used by `specify init` when `--integration` is omitted (interactive prompt default and non-interactive fallback). Set it to any registered integration key (e.g. `gemini`, `claude`). An unrecognized value is ignored with a warning and the built-in default (`copilot`) is used. An explicit `--integration <key>` always takes precedence. |
53
54
  | `SPECIFY_INIT_DIR` | Target a member project from outside its directory (e.g. a monorepo root) without `cd`, for non-interactive / CI use. Set it to the **project root** — the directory *containing* `.specify/` (relative paths resolve against the current directory). The path must exist and contain `.specify/`, otherwise the command errors and does **not** fall back to the current directory. Resolved once in the core root helper (`get_repo_root` in Bash, `Get-RepoRoot` in PowerShell), so it is honored by the core feature scripts (`/speckit.plan`, `/speckit.tasks`, …) and the Git extension's feature-branch creation, which inherit it. The `specify` CLI applies the **same** validation rules to every project-scoped subcommand (`specify integration …`, `specify extension …`, `specify workflow …`, `specify preset …`, and the rest that operate on a `.specify/` project), so those can target a member project too. When unset, Bash/PowerShell helpers keep their existing upward search; the `specify` CLI keeps its project-scoped resolver cwd-only unless a command explicitly defines broader detection (for example, bundle commands). |
54
55
  | `SPECIFY_FEATURE_DIRECTORY` | Override the active feature directory *within* the resolved project (takes precedence over `.specify/feature.json`). Relative paths resolve under the project root. Combine with `SPECIFY_INIT_DIR` to pick both the project and the feature non-interactively. |
55
56
  | `SPECIFY_FEATURE` | Override feature detection for non-Git repositories. Set to the feature directory name (e.g., `001-photo-albums`) to work on a specific feature when not using Git branches. Must be set in the context of the agent prior to using `/speckit.plan` or follow-up commands. |
@@ -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 workflow YAML file or directory |
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, a URL (HTTPS required), a local YAML file, or a local directory containing `workflow.yml`.
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 `workflow.yml` from the local directory into `.specify/workflows/<id>/`.
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,64 @@ 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
+
626
+ Because of that reset, a verdict input used with `on_reject: retry` must accept
627
+ `""`. If it declares an `enum`, include the empty string — otherwise the reset
628
+ value violates the input's own `enum` and the run can no longer be resumed with
629
+ any input. `specify workflow add` reports this as a validation error.
630
+
631
+ ```yaml
632
+ inputs:
633
+ spec_verdict:
634
+ type: string
635
+ enum: ["", approve, reject]
636
+ default: ""
637
+ ```
638
+
557
639
  ## FAQ
558
640
 
559
641
  ### 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,8 +1,43 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-07-29T00:00:00Z",
3
+ "updated_at": "2026-08-03T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
5
5
  "extensions": {
6
+ "adrkit": {
7
+ "name": "adrkit — decision memory for spec-driven development",
8
+ "id": "adrkit",
9
+ "description": "Pulls the decisions governing this work into agent context, checks produced plans against them, and drafts an ADR from a plan artifact.",
10
+ "author": "Mark Beacom (@mbeacom)",
11
+ "version": "0.1.2",
12
+ "download_url": "https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.2/adrkit.zip",
13
+ "repository": "https://github.com/mbeacom/adrkit",
14
+ "homepage": "https://adrkit.dev",
15
+ "documentation": "https://github.com/mbeacom/adrkit/blob/main/packages/adapters/spec-kit/README.md",
16
+ "changelog": "https://github.com/mbeacom/adrkit/blob/main/CHANGELOG.md",
17
+ "license": "Apache-2.0",
18
+ "category": "process",
19
+ "effect": "read-write",
20
+ "requires": {
21
+ "speckit_version": ">=0.13.0,<0.16.0",
22
+ "tools": [{ "name": "adr", "version": ">=0.3.0", "required": true }]
23
+ },
24
+ "provides": {
25
+ "commands": 3,
26
+ "hooks": 1
27
+ },
28
+ "tags": [
29
+ "adr",
30
+ "governance",
31
+ "decision-records",
32
+ "architecture",
33
+ "compliance"
34
+ ],
35
+ "verified": false,
36
+ "downloads": 0,
37
+ "stars": 0,
38
+ "created_at": "2026-08-03T00:00:00Z",
39
+ "updated_at": "2026-08-03T00:00:00Z"
40
+ },
6
41
  "aide": {
7
42
  "name": "AI-Driven Engineering (AIDE)",
8
43
  "id": "aide",
@@ -1070,6 +1105,41 @@
1070
1105
  "created_at": "2026-03-29T00:00:00Z",
1071
1106
  "updated_at": "2026-03-29T00:00:00Z"
1072
1107
  },
1108
+ "contextforge-mcp": {
1109
+ "name": "ContextForge MCP",
1110
+ "id": "contextforge-mcp",
1111
+ "description": "Integrates codebase-memory-mcp + headroom into Spec Kit — graph-based code intelligence and context compression for the implement phase.",
1112
+ "author": "capatinore",
1113
+ "version": "0.1.0",
1114
+ "download_url": "https://github.com/capatinore/contextforge-mcp/releases/download/ext-v0.1.0/contextforge-mcp-speckit-extension.zip",
1115
+ "repository": "https://github.com/capatinore/contextforge-mcp",
1116
+ "homepage": "https://github.com/capatinore/contextforge-mcp",
1117
+ "documentation": "https://github.com/capatinore/contextforge-mcp/blob/main/README.md",
1118
+ "changelog": "",
1119
+ "license": "MIT",
1120
+ "category": "code",
1121
+ "effect": "read-write",
1122
+ "requires": {
1123
+ "speckit_version": ">=0.10.0"
1124
+ },
1125
+ "provides": {
1126
+ "commands": 4,
1127
+ "hooks": 0
1128
+ },
1129
+ "tags": [
1130
+ "mcp",
1131
+ "code-intelligence",
1132
+ "context-compression",
1133
+ "tokens",
1134
+ "claude",
1135
+ "spec-driven-development"
1136
+ ],
1137
+ "verified": false,
1138
+ "downloads": 0,
1139
+ "stars": 0,
1140
+ "created_at": "2026-07-13T00:00:00Z",
1141
+ "updated_at": "2026-07-13T00:00:00Z"
1142
+ },
1073
1143
  "cost": {
1074
1144
  "name": "Cost Tracker",
1075
1145
  "id": "cost",
@@ -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