specify-cli 0.12.13__tar.gz → 0.12.15__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 (462) hide show
  1. {specify_cli-0.12.13 → specify_cli-0.12.15}/CHANGELOG.md +31 -0
  2. {specify_cli-0.12.13 → specify_cli-0.12.15}/PKG-INFO +1 -1
  3. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/extensions.md +4 -1
  4. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/presets.md +2 -0
  5. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/workflows.md +26 -3
  6. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/catalog.community.json +142 -5
  7. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/catalog.community.json +58 -1
  8. {specify_cli-0.12.13 → specify_cli-0.12.15}/pyproject.toml +1 -1
  9. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_github_http.py +30 -5
  10. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_init_options.py +1 -1
  11. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/yamlio.py +50 -2
  12. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/installer.py +32 -10
  13. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/commands/init.py +34 -5
  14. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/extensions/__init__.py +65 -1
  15. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_helpers.py +9 -1
  16. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/base.py +31 -3
  17. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/kiro_cli/__init__.py +7 -0
  18. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/presets/__init__.py +68 -23
  19. specify_cli-0.12.15/src/specify_cli/workflows/_commands.py +3153 -0
  20. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/catalog.py +215 -30
  21. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/engine.py +118 -5
  22. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/command/__init__.py +38 -2
  23. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/fan_in/__init__.py +18 -0
  24. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/contract/test_bundle_cli.py +39 -11
  25. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_install_flow.py +208 -2
  26. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_cli.py +59 -1
  27. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_yaml.py +30 -0
  28. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_subcommand.py +21 -0
  29. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_registry.py +14 -0
  30. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extensions.py +132 -0
  31. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_github_http.py +38 -0
  32. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_presets.py +185 -44
  33. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_workflows.py +5160 -65
  34. specify_cli-0.12.13/src/specify_cli/workflows/_commands.py +0 -1729
  35. {specify_cli-0.12.13 → specify_cli-0.12.15}/.devcontainer/devcontainer.json +0 -0
  36. {specify_cli-0.12.13 → specify_cli-0.12.15}/.devcontainer/post-create.sh +0 -0
  37. {specify_cli-0.12.13 → specify_cli-0.12.15}/.editorconfig +0 -0
  38. {specify_cli-0.12.13 → specify_cli-0.12.15}/.gitattributes +0 -0
  39. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/CODEOWNERS +0 -0
  40. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
  41. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  42. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  43. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  44. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  45. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  46. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  47. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  48. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/aw/actions-lock.json +0 -0
  49. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/dependabot.yml +0 -0
  50. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/skills/add-community-extension/SKILL.md +0 -0
  51. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/RELEASE-PROCESS.md +0 -0
  52. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-extension.lock.yml +0 -0
  53. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-extension.md +0 -0
  54. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-preset.lock.yml +0 -0
  55. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/add-community-preset.md +0 -0
  56. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-assess.lock.yml +0 -0
  57. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-assess.md +0 -0
  58. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-fix.lock.yml +0 -0
  59. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-fix.md +0 -0
  60. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-test.lock.yml +0 -0
  61. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/bug-test.md +0 -0
  62. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/catalog-assign.yml +0 -0
  63. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/codeql.yml +0 -0
  64. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/docs.yml +0 -0
  65. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/lint.yml +0 -0
  66. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/publish-pypi.yml +0 -0
  67. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/release-trigger.yml +0 -0
  68. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/release.yml +0 -0
  69. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/stale.yml +0 -0
  70. {specify_cli-0.12.13 → specify_cli-0.12.15}/.github/workflows/test.yml +0 -0
  71. {specify_cli-0.12.13 → specify_cli-0.12.15}/.gitignore +0 -0
  72. {specify_cli-0.12.13 → specify_cli-0.12.15}/.markdownlint-cli2.jsonc +0 -0
  73. {specify_cli-0.12.13 → specify_cli-0.12.15}/.pre-commit-config.yaml +0 -0
  74. {specify_cli-0.12.13 → specify_cli-0.12.15}/.zenodo.json +0 -0
  75. {specify_cli-0.12.13 → specify_cli-0.12.15}/AGENTS.md +0 -0
  76. {specify_cli-0.12.13 → specify_cli-0.12.15}/CITATION.cff +0 -0
  77. {specify_cli-0.12.13 → specify_cli-0.12.15}/CODE_OF_CONDUCT.md +0 -0
  78. {specify_cli-0.12.13 → specify_cli-0.12.15}/CONTRIBUTING.md +0 -0
  79. {specify_cli-0.12.13 → specify_cli-0.12.15}/DEVELOPMENT.md +0 -0
  80. {specify_cli-0.12.13 → specify_cli-0.12.15}/LICENSE +0 -0
  81. {specify_cli-0.12.13 → specify_cli-0.12.15}/README.md +0 -0
  82. {specify_cli-0.12.13 → specify_cli-0.12.15}/SECURITY.md +0 -0
  83. {specify_cli-0.12.13 → specify_cli-0.12.15}/SUPPORT.md +0 -0
  84. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/.gitignore +0 -0
  85. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/README.md +0 -0
  86. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/bundles.md +0 -0
  87. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/friends.md +0 -0
  88. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/overview.md +0 -0
  89. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/community/walkthroughs.md +0 -0
  90. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/concepts/complex-features.md +0 -0
  91. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/concepts/sdd.md +0 -0
  92. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/concepts/spec-persistence.md +0 -0
  93. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/docfx.json +0 -0
  94. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/guides/evolving-specs.md +0 -0
  95. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/guides/monorepo.md +0 -0
  96. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/index.md +0 -0
  97. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/air-gapped.md +0 -0
  98. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/one-time.md +0 -0
  99. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/pipx.md +0 -0
  100. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/install/uv.md +0 -0
  101. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/installation.md +0 -0
  102. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/local-development.md +0 -0
  103. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/quickstart.md +0 -0
  104. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/authentication.md +0 -0
  105. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/bundles.md +0 -0
  106. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/core.md +0 -0
  107. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/extensions.md +0 -0
  108. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/integrations.md +0 -0
  109. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/overview.md +0 -0
  110. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/reference/presets.md +0 -0
  111. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/template/public/main.css +0 -0
  112. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/toc.yml +0 -0
  113. {specify_cli-0.12.13 → specify_cli-0.12.15}/docs/upgrade.md +0 -0
  114. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/business-analyst/README.md +0 -0
  115. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/business-analyst/bundle.yml +0 -0
  116. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/developer/README.md +0 -0
  117. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/developer/bundle.yml +0 -0
  118. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/product-manager/README.md +0 -0
  119. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/product-manager/bundle.yml +0 -0
  120. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/security-researcher/README.md +0 -0
  121. {specify_cli-0.12.13 → specify_cli-0.12.15}/examples/bundles/security-researcher/bundle.yml +0 -0
  122. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  123. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  124. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  125. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  126. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/README.md +0 -0
  127. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  128. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/README.md +0 -0
  129. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/agent-context-config.yml +0 -0
  130. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/agent-context-defaults.json +0 -0
  131. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  132. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/extension.yml +0 -0
  133. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
  134. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
  135. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  136. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/README.md +0 -0
  137. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  138. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  139. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/commands/speckit.bug.test.md +0 -0
  140. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/bug/extension.yml +0 -0
  141. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/catalog.json +0 -0
  142. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/README.md +0 -0
  143. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.commit.md +0 -0
  144. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.feature.md +0 -0
  145. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.initialize.md +0 -0
  146. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.remote.md +0 -0
  147. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/commands/speckit.git.validate.md +0 -0
  148. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/config-template.yml +0 -0
  149. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/extension.yml +0 -0
  150. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/git-config.yml +0 -0
  151. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  152. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  153. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/git-common.sh +0 -0
  154. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  155. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  156. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
  157. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  158. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  159. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/selftest/commands/selftest.md +0 -0
  160. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/selftest/extension.yml +0 -0
  161. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/.gitignore +0 -0
  162. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/CHANGELOG.md +0 -0
  163. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/EXAMPLE-README.md +0 -0
  164. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/LICENSE +0 -0
  165. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/README.md +0 -0
  166. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/commands/example.md +0 -0
  167. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/config-template.yml +0 -0
  168. {specify_cli-0.12.13 → specify_cli-0.12.15}/extensions/template/extension.yml +0 -0
  169. {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/CONTRIBUTING.md +0 -0
  170. {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/README.md +0 -0
  171. {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/catalog.community.json +0 -0
  172. {specify_cli-0.12.13 → specify_cli-0.12.15}/integrations/catalog.json +0 -0
  173. {specify_cli-0.12.13 → specify_cli-0.12.15}/media/bootstrap-claude-code.gif +0 -0
  174. {specify_cli-0.12.13 → specify_cli-0.12.15}/media/logo_large.webp +0 -0
  175. {specify_cli-0.12.13 → specify_cli-0.12.15}/media/logo_small.webp +0 -0
  176. {specify_cli-0.12.13 → specify_cli-0.12.15}/media/spec-kit-video-header.jpg +0 -0
  177. {specify_cli-0.12.13 → specify_cli-0.12.15}/media/specify_cli.gif +0 -0
  178. {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-April.md +0 -0
  179. {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-February.md +0 -0
  180. {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-June.md +0 -0
  181. {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-March.md +0 -0
  182. {specify_cli-0.12.13 → specify_cli-0.12.15}/newsletters/2026-May.md +0 -0
  183. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/ARCHITECTURE.md +0 -0
  184. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/PUBLISHING.md +0 -0
  185. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/README.md +0 -0
  186. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/catalog.json +0 -0
  187. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/README.md +0 -0
  188. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.constitution.md +0 -0
  189. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.implement.md +0 -0
  190. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.plan.md +0 -0
  191. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.specify.md +0 -0
  192. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/commands/speckit.tasks.md +0 -0
  193. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/lean/preset.yml +0 -0
  194. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/README.md +0 -0
  195. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  196. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/commands/speckit.specify.md +0 -0
  197. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/preset.yml +0 -0
  198. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/templates/myext-template.md +0 -0
  199. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/scaffold/templates/spec-template.md +0 -0
  200. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/commands/speckit.specify.md +0 -0
  201. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  202. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/preset.yml +0 -0
  203. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/checklist-template.md +0 -0
  204. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/constitution-template.md +0 -0
  205. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/plan-template.md +0 -0
  206. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/spec-template.md +0 -0
  207. {specify_cli-0.12.13 → specify_cli-0.12.15}/presets/self-test/templates/tasks-template.md +0 -0
  208. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/check-prerequisites.sh +0 -0
  209. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/common.sh +0 -0
  210. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/create-new-feature.sh +0 -0
  211. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/setup-plan.sh +0 -0
  212. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/bash/setup-tasks.sh +0 -0
  213. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/check-prerequisites.ps1 +0 -0
  214. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/common.ps1 +0 -0
  215. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/create-new-feature.ps1 +0 -0
  216. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/setup-plan.ps1 +0 -0
  217. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/powershell/setup-tasks.ps1 +0 -0
  218. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/python/check_prerequisites.py +0 -0
  219. {specify_cli-0.12.13 → specify_cli-0.12.15}/scripts/python/common.py +0 -0
  220. {specify_cli-0.12.13 → specify_cli-0.12.15}/spec-driven.md +0 -0
  221. {specify_cli-0.12.13 → specify_cli-0.12.15}/spec-kit.code-workspace +0 -0
  222. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/__init__.py +0 -0
  223. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_agent_config.py +0 -0
  224. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_assets.py +0 -0
  225. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_console.py +0 -0
  226. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_invocation_style.py +0 -0
  227. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_project.py +0 -0
  228. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_toml_string.py +0 -0
  229. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_utils.py +0 -0
  230. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/_version.py +0 -0
  231. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/agents.py +0 -0
  232. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/__init__.py +0 -0
  233. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/azure_devops.py +0 -0
  234. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/base.py +0 -0
  235. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/config.py +0 -0
  236. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/github.py +0 -0
  237. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/authentication/http.py +0 -0
  238. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/__init__.py +0 -0
  239. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  240. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
  241. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/__init__.py +0 -0
  242. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/project.py +0 -0
  243. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/lib/versioning.py +0 -0
  244. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/__init__.py +0 -0
  245. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/catalog.py +0 -0
  246. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/manifest.py +0 -0
  247. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/models/records.py +0 -0
  248. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/__init__.py +0 -0
  249. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/adapters.py +0 -0
  250. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  251. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/conflict.py +0 -0
  252. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/packager.py +0 -0
  253. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/primitives.py +0 -0
  254. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/references.py +0 -0
  255. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/resolver.py +0 -0
  256. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/bundler/services/validator.py +0 -0
  257. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/catalogs.py +0 -0
  258. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/commands/__init__.py +0 -0
  259. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/commands/bundle/__init__.py +0 -0
  260. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/extensions/_commands.py +0 -0
  261. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_runtime.py +0 -0
  262. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_scaffold.py +0 -0
  263. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_state.py +0 -0
  264. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integration_status.py +0 -0
  265. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/__init__.py +0 -0
  266. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_commands.py +0 -0
  267. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_install_commands.py +0 -0
  268. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  269. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_query_commands.py +0 -0
  270. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  271. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/agy/__init__.py +0 -0
  272. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/amp/__init__.py +0 -0
  273. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  274. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/bob/__init__.py +0 -0
  275. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/catalog.py +0 -0
  276. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/claude/__init__.py +0 -0
  277. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/cline/__init__.py +0 -0
  278. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  279. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/codex/__init__.py +0 -0
  280. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  281. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  282. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/devin/__init__.py +0 -0
  283. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  284. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/forge/__init__.py +0 -0
  285. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  286. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/generic/__init__.py +0 -0
  287. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/goose/__init__.py +0 -0
  288. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  289. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/junie/__init__.py +0 -0
  290. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  291. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  292. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  293. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/manifest.py +0 -0
  294. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/omp/__init__.py +0 -0
  295. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  296. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/pi/__init__.py +0 -0
  297. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  298. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  299. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  300. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/shai/__init__.py +0 -0
  301. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  302. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/trae/__init__.py +0 -0
  303. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  304. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  305. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/integrations/zed/__init__.py +0 -0
  306. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/presets/_commands.py +0 -0
  307. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/shared_infra.py +0 -0
  308. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/__init__.py +0 -0
  309. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/base.py +0 -0
  310. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/expressions.py +0 -0
  311. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/__init__.py +0 -0
  312. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  313. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
  314. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
  315. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
  316. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
  317. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
  318. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  319. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  320. {specify_cli-0.12.13 → specify_cli-0.12.15}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  321. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/checklist-template.md +0 -0
  322. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/analyze.md +0 -0
  323. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/checklist.md +0 -0
  324. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/clarify.md +0 -0
  325. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/constitution.md +0 -0
  326. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/converge.md +0 -0
  327. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/implement.md +0 -0
  328. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/plan.md +0 -0
  329. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/specify.md +0 -0
  330. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/tasks.md +0 -0
  331. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/commands/taskstoissues.md +0 -0
  332. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/constitution-template.md +0 -0
  333. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/plan-template.md +0 -0
  334. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/spec-template.md +0 -0
  335. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/tasks-template.md +0 -0
  336. {specify_cli-0.12.13 → specify_cli-0.12.15}/templates/vscode-settings.json +0 -0
  337. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/__init__.py +0 -0
  338. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/auth_helpers.py +0 -0
  339. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/bundler_helpers.py +0 -0
  340. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/conftest.py +0 -0
  341. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/contract/test_catalog_schema.py +0 -0
  342. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/contract/test_manifest_schema.py +0 -0
  343. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/__init__.py +0 -0
  344. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/bug/__init__.py +0 -0
  345. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/bug/test_bug_extension.py +0 -0
  346. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/git/__init__.py +0 -0
  347. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/git/test_git_extension.py +0 -0
  348. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_agent_context_cli_free.py +0 -0
  349. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_extension_agent_context.py +0 -0
  350. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  351. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  352. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/TESTING.md +0 -0
  353. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/plan.md +0 -0
  354. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/spec.md +0 -0
  355. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/hooks/tasks.md +0 -0
  356. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/http_helpers.py +0 -0
  357. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_catalog_stack.py +0 -0
  358. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_init_install.py +0 -0
  359. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_local_install.py +0 -0
  360. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_offline.py +0 -0
  361. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integration/test_bundler_security_paths.py +0 -0
  362. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/__init__.py +0 -0
  363. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/conftest.py +0 -0
  364. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_base.py +0 -0
  365. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_extra_args.py +0 -0
  366. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_home_isolation.py +0 -0
  367. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_agy.py +0 -0
  368. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_amp.py +0 -0
  369. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_auggie.py +0 -0
  370. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_markdown.py +0 -0
  371. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_skills.py +0 -0
  372. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_base_toml.py +0 -0
  373. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_bob.py +0 -0
  374. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_catalog.py +0 -0
  375. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_claude.py +0 -0
  376. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_cline.py +0 -0
  377. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_codebuddy.py +0 -0
  378. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_codex.py +0 -0
  379. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_copilot.py +0 -0
  380. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_cursor_agent.py +0 -0
  381. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_devin.py +0 -0
  382. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_firebender.py +0 -0
  383. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_forge.py +0 -0
  384. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_gemini.py +0 -0
  385. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_generic.py +0 -0
  386. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_goose.py +0 -0
  387. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_hermes.py +0 -0
  388. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_junie.py +0 -0
  389. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_kilocode.py +0 -0
  390. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_kimi.py +0 -0
  391. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_kiro_cli.py +0 -0
  392. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_lingma.py +0 -0
  393. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_omp.py +0 -0
  394. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_opencode.py +0 -0
  395. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_pi.py +0 -0
  396. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_qodercli.py +0 -0
  397. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_qwen.py +0 -0
  398. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_rovodev.py +0 -0
  399. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_scaffold.py +0 -0
  400. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_shai.py +0 -0
  401. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_state.py +0 -0
  402. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_tabnine.py +0 -0
  403. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_trae.py +0 -0
  404. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_vibe.py +0 -0
  405. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_zcode.py +0 -0
  406. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_integration_zed.py +0 -0
  407. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_manifest.py +0 -0
  408. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  409. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/self_upgrade_helpers.py +0 -0
  410. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_agent_config_consistency.py +0 -0
  411. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_authentication.py +0 -0
  412. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_branch_numbering.py +0 -0
  413. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_check_prerequisites_paths_only.py +0 -0
  414. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_check_prerequisites_python_parity.py +0 -0
  415. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_check_tool.py +0 -0
  416. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_cli_version.py +0 -0
  417. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_command_template_py_scripts.py +0 -0
  418. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_commands_package.py +0 -0
  419. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_console_imports.py +0 -0
  420. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extension_registration.py +0 -0
  421. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extension_skills.py +0 -0
  422. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_extension_update_hardening.py +0 -0
  423. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_github_workflows.py +0 -0
  424. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_init_dir.py +0 -0
  425. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_init_dir_cli.py +0 -0
  426. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_live_transient_windows.py +0 -0
  427. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_merge.py +0 -0
  428. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_post_process.py +0 -0
  429. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_ps1_encoding.py +0 -0
  430. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_registrar_path_traversal.py +0 -0
  431. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_detection.py +0 -0
  432. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_execution.py +0 -0
  433. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_guidance.py +0 -0
  434. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_self_upgrade_verification.py +0 -0
  435. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_setup_plan_feature_json.py +0 -0
  436. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_setup_plan_no_overwrite.py +0 -0
  437. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_setup_tasks.py +0 -0
  438. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_shared_infra_integrity.py +0 -0
  439. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_timestamp_branches.py +0 -0
  440. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_upgrade.py +0 -0
  441. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_utils.py +0 -0
  442. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_utils_assets_imports.py +0 -0
  443. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_version_imports.py +0 -0
  444. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/test_workflow_run_without_project.py +0 -0
  445. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_adapters.py +0 -0
  446. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_catalog_config.py +0 -0
  447. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_conflict.py +0 -0
  448. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_packager.py +0 -0
  449. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_primitives.py +0 -0
  450. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_records.py +0 -0
  451. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_references.py +0 -0
  452. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_resolver.py +0 -0
  453. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_validator.py +0 -0
  454. {specify_cli-0.12.13 → specify_cli-0.12.15}/tests/unit/test_bundler_versioning.py +0 -0
  455. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/ARCHITECTURE.md +0 -0
  456. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/PUBLISHING.md +0 -0
  457. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/README.md +0 -0
  458. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/catalog.community.json +0 -0
  459. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/catalog.json +0 -0
  460. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/speckit/workflow.yml +0 -0
  461. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/step-catalog.community.json +0 -0
  462. {specify_cli-0.12.13 → specify_cli-0.12.15}/workflows/step-catalog.json +0 -0
@@ -2,6 +2,37 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.12.15] - 2026-07-14
6
+
7
+ ### Changed
8
+
9
+ - Update Autonomous Run Governance preset to v0.1.4 (#3511)
10
+ - fix(workflows): raise catalog error, not raw ValueError, on a malformed catalog URL (#3484)
11
+ - fix(workflows): evaluate 'in'/'not in' safely on a non-iterable right operand (#3447) (#3468)
12
+ - fix: add trailing newline to init-options.json output (#3509)
13
+ - feat(workflows): align workflow CLI with extension command surface (#3419)
14
+ - fix(extensions): stop env-var config leaking across prefix-colliding extension IDs (#3497)
15
+ - fix(integrations): escape control characters in goose recipe YAML renderer (#3384)
16
+ - [extension] Update DocGuard — CDD Enforcement extension to v0.32.0 (#3489)
17
+ - [extension] Add Multi-Repo Branch Sync extension to community catalog (#3411)
18
+ - chore: release 0.12.14, begin 0.12.15.dev0 development (#3506)
19
+
20
+ ## [0.12.14] - 2026-07-13
21
+
22
+ ### Changed
23
+
24
+ - [extension] Add Spec Kit Memory extension to community catalog (#3455)
25
+ - Add Test-First Governance preset to community catalog (#3504)
26
+ - Add Autonomous Run Governance preset to community catalog (#3501)
27
+ - fix(workflows): validate command step input/options are mappings (#3262)
28
+ - fix(presets): resolve() honors manifest-declared file: for installed presets (#3351)
29
+ - fix(init): don't block on confirmation for 'init --here' without a TTY (#3236)
30
+ - [extension] Add Quality Gates (Enforcement Layer) extension to community catalog (#3431)
31
+ - fix(integrations): exit cleanly on unbalanced quote in --integration-options (#3457) (#3466)
32
+ - fix(integrations): declare kiro-cli multi-install safe (#3471) (#3485)
33
+ - fix(workflows): fail fan-in step on non-list wait_for instead of crashing (#3482)
34
+ - chore: release 0.12.13, begin 0.12.14.dev0 development (#3498)
35
+
5
36
  ## [0.12.13] - 2026-07-13
6
37
 
7
38
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specify-cli
3
- Version: 0.12.13
3
+ Version: 0.12.15
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
@@ -51,7 +51,7 @@ The following community-contributed extensions are available in [`catalog.commun
51
51
  | 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) |
52
52
  | 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) |
53
53
  | 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) |
54
- | DocGuard — CDD Enforcement | The only doc-integrity engine with an MCP server, SARIF output, and a deterministic zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, 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) |
54
+ | DocGuard — CDD Enforcement | Doc-integrity engine with MCP server, SARIF output, and zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, spec-kit hooks. Pure Node.js. | `docs` | Read+Write | [spec-kit-docguard](https://github.com/raccioly/docguard) |
55
55
  | EARS Requirements Syntax | Author, lint, and convert requirements using EARS - the five industry-standard sentence patterns for unambiguous, testable requirements | `docs` | Read+Write | [spec-kit-ears](https://github.com/dhruv-15-03/spec-kit-ears) |
56
56
  | Extensify | Create and validate extensions and extension catalogs | `process` | Read+Write | [extensify](https://github.com/mnriem/spec-kit-extensions/tree/main/extensify) |
57
57
  | Fix Findings | Automated analyze-fix-reanalyze loop that resolves spec findings until clean | `code` | Read+Write | [spec-kit-fix-findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) |
@@ -84,6 +84,7 @@ The following community-contributed extensions are available in [`catalog.commun
84
84
  | MemoryLint | Evidence-driven instruction drift checker: audits agent memory files for boundary, reality, conflict, and redundancy drift. | `process` | Read+Write | [memorylint](https://github.com/RbBtSn0w/spec-kit-extensions/tree/main/memorylint) |
85
85
  | Microsoft 365 Integration | Fetch Teams messages, meeting transcripts, and SharePoint/OneDrive files as local Markdown for spec generation | `integration` | Read+Write | [spec-kit-m365](https://github.com/BenBtg/spec-kit-m365) |
86
86
  | Multi-Model Review | Cross-model Spec Kit handoffs for spec authoring, implementation routing, and review. | `process` | Read+Write | [multi-model-review](https://github.com/formin/multi-model-review) |
87
+ | Multi-Repo Branch Sync | Creates the feature branch in affected sub-repositories and git submodules via plan/tasks hooks | `process` | Read+Write | [multi-repo-sync](https://github.com/fyloss/spec-kit-multi-repo-sync) |
87
88
  | Multi-Sites Spec Kit | Multi-site aware specify command with per-site spec folders, auto-increment, and Drupal support | `process` | Read+Write | [spec-kit-multi-sites](https://github.com/teeyo/spec-kit-multi-sites) |
88
89
  | .NET Framework to Modern .NET Migration | Orchestrate end-to-end .NET Framework to modern .NET migration across 7 phases, with SDD lifecycle integration | `process` | Read+Write | [spec-kit-fx-to-net](https://github.com/RogerBestMsft/spec-kit-FxToNet) |
89
90
  | Onboard | Contextual onboarding and progressive growth for developers new to spec-kit projects. Explains specs, maps dependencies, validates understanding, and guides the next step | `process` | Read+Write | [spec-kit-onboard](https://github.com/dmux/spec-kit-onboard) |
@@ -98,6 +99,7 @@ The following community-contributed extensions are available in [`catalog.commun
98
99
  | Project Health Check | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git | `visibility` | Read-only | [spec-kit-doctor](https://github.com/KhawarHabibKhan/spec-kit-doctor) |
99
100
  | Project Status | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary | `visibility` | Read-only | [spec-kit-status](https://github.com/KhawarHabibKhan/spec-kit-status) |
100
101
  | QA Testing Extension | Systematic QA testing with browser-driven or CLI-based validation of acceptance criteria from spec | `code` | Read-only | [spec-kit-qa](https://github.com/arunt14/spec-kit-qa) |
102
+ | Quality Gates (Enforcement Layer) | Deterministic quality enforcement for Spec Kit projects at three boundaries — agent hooks, git pre-commit, CI — with one policy file and provable enforcement (attestations, canaries, verified parity). | `process` | Read+Write | [spec-gates](https://github.com/schwichtgit/spec-gates) |
101
103
  | RAG Azure Builder | Spec Kit extension for onboarding and operating an Azure RAG stack with guided workflows. | `process` | Read+Write | [spec-kit-extension-rag-azure-builder](https://github.com/Sertxito/spec-kit-extension-rag-azure-builder) |
102
104
  | Ralph Loop | Autonomous implementation loop using AI agent CLI | `code` | Read+Write | [spec-kit-ralph](https://github.com/Rubiss-Projects/spec-kit-ralph) |
103
105
  | Reconcile Extension | Reconcile implementation drift by surgically updating feature artifacts. | `docs` | Read+Write | [spec-kit-reconcile](https://github.com/stn1slv/spec-kit-reconcile) |
@@ -119,6 +121,7 @@ The following community-contributed extensions are available in [`catalog.commun
119
121
  | Spec Diagram | Auto-generate Mermaid diagrams of SDD workflow state, feature progress, and task dependencies | `visibility` | Read-only | [spec-kit-diagram-](https://github.com/Quratulain-bilal/spec-kit-diagram-) |
120
122
  | Spec Kit Discovery Extension | Run technical discovery commands for feasibility, technology selection, scenario-specific technical decisions, legacy codebase assessment, implementation understanding, and proof-of-concept validation | `process` | Read+Write | [spec-kit-discovery](https://github.com/bigsmartben/spec-kit-discovery) |
121
123
  | Spec Kit Figma | Agent-agnostic SpecKit extension that grounds spec, plan & task generation in Figma design context — REST + optional MCP, single/mono/multi-repo, macOS/Linux/Windows. | `integration` | Read+Write | [spec-kit-figma](https://github.com/Fyloss/spec-kit-figma) |
124
+ | Spec Kit Memory | Recalls prior specs and decisions from configurable memory tools (e.g. memsearch) before SDLC stages, so planning and specification start from what the project already knows | `docs` | Read+Write | [spec-kit-memory](https://github.com/zaytsevand/spec-kit-memory) |
122
125
  | Spec Kit Preview | Generate evidence-backed low, mid, or high fidelity previews from Spec Kit artifacts as Markdown or self-contained HTML | `docs` | Read+Write | [spec-kit-preview](https://github.com/bigsmartben/spec-kit-preview) |
123
126
  | Spec Kit Schedule | Optimal multi-agent task scheduling via CP-SAT — DAG precedence, hallucination-aware caps, file-conflict avoidance, stochastic durations, replanning, and interactive HTML output | `process` | Read+Write | [spec-kit-schedule](https://github.com/jfranc38/spec-kit-schedule) |
124
127
  | Spec Kit TLDR | Render a feature's spec.md / plan.md into a review-oriented TLDR (self-contained HTML dashboard + PR-native Markdown) that surfaces risks for faster PR review. | `visibility` | Read+Write | [speckit-tldr](https://github.com/qurore/speckit-tldr) |
@@ -11,6 +11,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
11
11
  | Agent Parity Governance | Adds shared-guidance parity, audit-ready Spec-Kit run evidence, and agent-neutral model-routing guidance across a project's declared AI-agent instruction surfaces so agent guidance does not drift. | 6 templates, 3 commands | — | [spec-kit-preset-agent-parity-governance](https://github.com/hindermath/spec-kit-preset-agent-parity-governance) |
12
12
  | AIDE In-Place Migration | Adapts the AIDE extension workflow for in-place technology migrations (X → Y pattern) — adds migration objectives, verification gates, knowledge documents, and behavioral equivalence criteria | 2 templates, 8 commands | AIDE extension | [spec-kit-presets](https://github.com/mnriem/spec-kit-presets) |
13
13
  | Architecture Governance | Adds secure software architecture, STRIDE+CAPEC threat modeling, arc42 security cross-cutting concepts, S-ADRs, Zero Trust applicability, OWASP SAMM governance, BSI C3A cloud autonomy, BSI C5 cloud compliance assurance, and audit-ready Spec Kit run evidence | 13 templates, 3 commands | — | [spec-kit-preset-architecture-governance](https://github.com/hindermath/spec-kit-preset-architecture-governance) |
14
+ | Autonomous Run Governance | Adds permission-bounded, evidence-first governance for autonomous Spec Kit delivery, convergence, resume, closeout, and retrospective learning. | 12 templates, 2 commands, 2 scripts | — | [spec-kit-preset-autonomous-run-governance](https://github.com/hindermath/spec-kit-preset-autonomous-run-governance) |
14
15
  | Canon Core | Adapts original Spec Kit workflow to work together with Canon extension | 2 templates, 8 commands | — | [spec-kit-canon](https://github.com/maximiliamus/spec-kit-canon) |
15
16
  | Claude AskUserQuestion | Upgrades `/speckit.clarify` and `/speckit.checklist` on Claude Code from Markdown-table prompts to the native AskUserQuestion picker, with a recommended option and reasoning on every question | 2 commands | — | [spec-kit-preset-claude-ask-questions](https://github.com/0xrafasec/spec-kit-preset-claude-ask-questions) |
16
17
  | Command Density | Compacts the nine core Spec Kit command prompts while preserving scripts, handoffs, placeholders, hook output blocks, and rule structure | 9 commands | — | [spec-kit-preset-command-density](https://github.com/Xopoko/spec-kit-preset-command-density) |
@@ -28,6 +29,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
28
29
  | SicarioSpec Core | Baseline secure-by-default Spec Kit governance profile. | 5 templates | — | [sicario-spec](https://github.com/dfirs1car1o/sicario-spec) |
29
30
  | Spec2Cloud | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy | 5 templates, 8 commands | — | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) |
30
31
  | Table of Contents Navigation | Adds a navigable Table of Contents to generated spec.md, plan.md, and tasks.md documents | 3 templates, 3 commands | — | [spec-kit-preset-toc-navigation](https://github.com/Quratulain-bilal/spec-kit-preset-toc-navigation) |
32
+ | Test-First Governance | Governs TDD with coverage-complete BDD/ATDD Gherkin scenarios, explicit suite ownership, professional test reports, traceability, and risk-based quality gates. | 10 templates, 8 commands | — | [spec-kit-preset-test-first-governance](https://github.com/ka-zo/spec-kit-preset-test-first-governance) |
31
33
  | VS Code Ask Questions | Enhances the clarify command to use `vscode/askQuestions` for batched interactive questioning. | 1 command | — | [spec-kit-presets](https://github.com/fdcastel/spec-kit-presets) |
32
34
  | Workflow Preset | Behavior-first specification, design artifacts, and agent-native handoff orchestration — adds requirement-phase behavior drafts, formal BDD/UIF/behavior contracts, optional design artifacts, and scoped implementation handoffs with Core Agent, Vertical Planner Agent, and Worker Agent modes | 22 templates, 8 commands | — | [spec-kit-workflow-preset](https://github.com/bigsmartben/spec-kit-workflow-preset) |
33
35
 
@@ -86,8 +86,30 @@ Lists workflows installed in the current project.
86
86
  specify workflow add <source>
87
87
  ```
88
88
 
89
+ | Option | Description |
90
+ | --------------- | ------------------------------------------------------ |
91
+ | `--dev` | Install from a local workflow YAML file or directory |
92
+ | `--from <url>` | Install from a custom URL (`<source>` names the expected workflow ID) |
93
+
89
94
  Installs a workflow from the catalog, a URL (HTTPS required), or a local file path.
90
95
 
96
+ ## Update Workflows
97
+
98
+ ```bash
99
+ specify workflow update [workflow_id]
100
+ ```
101
+
102
+ Updates one installed catalog workflow — or all of them when no ID is given — to the latest catalog version. Prompts for confirmation and keeps the installed copy if a download or validation fails.
103
+
104
+ ## Enable or Disable a Workflow
105
+
106
+ ```bash
107
+ specify workflow enable <workflow_id>
108
+ specify workflow disable <workflow_id>
109
+ ```
110
+
111
+ Disabled workflows stay installed and listed (marked `[disabled]`) but refuse to run until re-enabled.
112
+
91
113
  ## Remove a Workflow
92
114
 
93
115
  ```bash
@@ -102,9 +124,10 @@ Removes an installed workflow from the project.
102
124
  specify workflow search [query]
103
125
  ```
104
126
 
105
- | Option | Description |
106
- | ------- | --------------- |
107
- | `--tag` | Filter by tag |
127
+ | Option | Description |
128
+ | ---------- | ----------------- |
129
+ | `--tag` | Filter by tag |
130
+ | `--author` | Filter by author |
108
131
 
109
132
  Searches all active catalogs for workflows matching the query.
110
133
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-07-10T00:00:00Z",
3
+ "updated_at": "2026-07-13T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
5
5
  "extensions": {
6
6
  "aide": {
@@ -1106,10 +1106,10 @@
1106
1106
  "docguard": {
1107
1107
  "name": "DocGuard — CDD Enforcement",
1108
1108
  "id": "docguard",
1109
- "description": "The only doc-integrity engine with an MCP server, SARIF output, and a deterministic zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, GitHub Action with PR annotations, spec-kit hooks. Pure Node.js, one pinned dep.",
1109
+ "description": "Doc-integrity engine with MCP server, SARIF output, and zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, spec-kit hooks. Pure Node.js.",
1110
1110
  "author": "raccioly",
1111
- "version": "0.30.0",
1112
- "download_url": "https://github.com/raccioly/docguard/releases/download/v0.30.0/spec-kit-docguard-v0.30.0.zip",
1111
+ "version": "0.32.0",
1112
+ "download_url": "https://github.com/raccioly/docguard/releases/download/v0.32.0/spec-kit-docguard-v0.32.0.zip",
1113
1113
  "repository": "https://github.com/raccioly/docguard",
1114
1114
  "homepage": "https://www.npmjs.com/package/docguard-cli",
1115
1115
  "documentation": "https://github.com/raccioly/docguard/blob/main/extensions/spec-kit-docguard/README.md",
@@ -1124,6 +1124,14 @@
1124
1124
  "name": "node",
1125
1125
  "version": ">=18.0.0",
1126
1126
  "required": true
1127
+ },
1128
+ {
1129
+ "name": "npx",
1130
+ "required": true
1131
+ },
1132
+ {
1133
+ "name": "specify",
1134
+ "required": false
1127
1135
  }
1128
1136
  ]
1129
1137
  },
@@ -1145,7 +1153,7 @@
1145
1153
  "downloads": 0,
1146
1154
  "stars": 0,
1147
1155
  "created_at": "2026-03-13T00:00:00Z",
1148
- "updated_at": "2026-07-06T00:00:00Z"
1156
+ "updated_at": "2026-07-13T00:00:00Z"
1149
1157
  },
1150
1158
  "doctor": {
1151
1159
  "name": "Project Health Check",
@@ -1427,6 +1435,57 @@
1427
1435
  "created_at": "2026-05-06T00:00:00Z",
1428
1436
  "updated_at": "2026-05-06T00:00:00Z"
1429
1437
  },
1438
+ "gates": {
1439
+ "name": "Quality Gates (Enforcement Layer)",
1440
+ "id": "gates",
1441
+ "description": "Deterministic quality enforcement for Spec Kit projects at three boundaries — agent hooks, git pre-commit, CI — with one policy file and provable enforcement (attestations, canaries, verified parity).",
1442
+ "author": "schwichtgit",
1443
+ "version": "0.1.0",
1444
+ "download_url": "https://github.com/schwichtgit/spec-gates/releases/download/v0.1.0/gates-0.1.0.zip",
1445
+ "repository": "https://github.com/schwichtgit/spec-gates",
1446
+ "homepage": "https://github.com/schwichtgit/spec-gates",
1447
+ "documentation": "https://github.com/schwichtgit/spec-gates/blob/main/docs/how-it-works.md",
1448
+ "license": "MIT",
1449
+ "category": "process",
1450
+ "effect": "read-write",
1451
+ "requires": {
1452
+ "speckit_version": ">=0.12.0",
1453
+ "tools": [
1454
+ {
1455
+ "name": "jq",
1456
+ "required": true
1457
+ },
1458
+ {
1459
+ "name": "git",
1460
+ "required": true
1461
+ },
1462
+ {
1463
+ "name": "node",
1464
+ "required": false
1465
+ },
1466
+ {
1467
+ "name": "shellcheck",
1468
+ "required": false
1469
+ }
1470
+ ]
1471
+ },
1472
+ "provides": {
1473
+ "commands": 5,
1474
+ "hooks": 1
1475
+ },
1476
+ "tags": [
1477
+ "quality",
1478
+ "enforcement",
1479
+ "hooks",
1480
+ "ci",
1481
+ "governance"
1482
+ ],
1483
+ "verified": false,
1484
+ "downloads": 0,
1485
+ "stars": 0,
1486
+ "created_at": "2026-07-09T00:00:00Z",
1487
+ "updated_at": "2026-07-13T00:00:00Z"
1488
+ },
1430
1489
  "github-issues": {
1431
1490
  "name": "GitHub Issues Integration 1",
1432
1491
  "id": "github-issues",
@@ -2217,6 +2276,42 @@
2217
2276
  "created_at": "2026-05-08T00:00:00Z",
2218
2277
  "updated_at": "2026-05-08T00:00:00Z"
2219
2278
  },
2279
+ "memory": {
2280
+ "name": "Spec Kit Memory",
2281
+ "id": "memory",
2282
+ "description": "Recalls prior specs and decisions from configurable memory tools (e.g. memsearch) before SDLC stages, so planning and specification start from what the project already knows.",
2283
+ "author": "Andrey Zaytsev",
2284
+ "version": "0.3.0",
2285
+ "download_url": "https://github.com/zaytsevand/spec-kit-memory/archive/refs/tags/v0.3.0.zip",
2286
+ "repository": "https://github.com/zaytsevand/spec-kit-memory",
2287
+ "homepage": "https://github.com/zaytsevand/spec-kit-memory",
2288
+ "documentation": "https://github.com/zaytsevand/spec-kit-memory/blob/main/README.md",
2289
+ "changelog": "",
2290
+ "license": "MIT",
2291
+ "category": "docs",
2292
+ "effect": "read-write",
2293
+ "requires": {
2294
+ "speckit_version": ">=0.2.0",
2295
+ "tools": [
2296
+ { "name": "memsearch", "required": false }
2297
+ ]
2298
+ },
2299
+ "provides": {
2300
+ "commands": 2,
2301
+ "hooks": 3
2302
+ },
2303
+ "tags": [
2304
+ "memory",
2305
+ "recall",
2306
+ "research",
2307
+ "memsearch"
2308
+ ],
2309
+ "verified": false,
2310
+ "downloads": 0,
2311
+ "stars": 0,
2312
+ "created_at": "2026-07-10T00:00:00Z",
2313
+ "updated_at": "2026-07-10T00:00:00Z"
2314
+ },
2220
2315
  "memory-loader": {
2221
2316
  "name": "Memory Loader",
2222
2317
  "id": "memory-loader",
@@ -2371,6 +2466,48 @@
2371
2466
  "created_at": "2026-05-04T02:51:52Z",
2372
2467
  "updated_at": "2026-06-18T00:00:00Z"
2373
2468
  },
2469
+ "multi-repo-sync": {
2470
+ "name": "Multi-Repo Branch Sync",
2471
+ "id": "multi-repo-sync",
2472
+ "description": "Creates the feature branch in affected sub-repositories and git submodules via plan/tasks hooks",
2473
+ "author": "Fyloss",
2474
+ "version": "1.0.0",
2475
+ "download_url": "https://github.com/fyloss/spec-kit-multi-repo-sync/releases/download/v1.0.0/spec-kit-multi-repo-sync.zip",
2476
+ "sha256": "12a5c7392145b4424b20715aaa3d8b6a8218c143dea596873e344146c1a76ba0",
2477
+ "repository": "https://github.com/fyloss/spec-kit-multi-repo-sync",
2478
+ "homepage": "https://github.com/fyloss/spec-kit-multi-repo-sync",
2479
+ "documentation": "https://github.com/fyloss/spec-kit-multi-repo-sync/blob/main/README.md",
2480
+ "changelog": "https://github.com/fyloss/spec-kit-multi-repo-sync/blob/main/CHANGELOG.md",
2481
+ "license": "MIT",
2482
+ "category": "process",
2483
+ "effect": "read-write",
2484
+ "requires": {
2485
+ "speckit_version": ">=0.2.0",
2486
+ "tools": [
2487
+ {
2488
+ "name": "git",
2489
+ "version": ">=2.31",
2490
+ "required": true
2491
+ }
2492
+ ]
2493
+ },
2494
+ "provides": {
2495
+ "commands": 3,
2496
+ "hooks": 2
2497
+ },
2498
+ "tags": [
2499
+ "git",
2500
+ "branching",
2501
+ "multi-repo",
2502
+ "submodules",
2503
+ "workflow"
2504
+ ],
2505
+ "verified": false,
2506
+ "downloads": 0,
2507
+ "stars": 0,
2508
+ "created_at": "2026-07-13T00:00:00Z",
2509
+ "updated_at": "2026-07-13T00:00:00Z"
2510
+ },
2374
2511
  "multi-sites": {
2375
2512
  "name": "Multi-Sites Spec Kit",
2376
2513
  "id": "multi-sites",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-06-30T00:00:00Z",
3
+ "updated_at": "2026-07-14T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/presets/catalog.community.json",
5
5
  "presets": {
6
6
  "a11y-governance": {
@@ -131,6 +131,35 @@
131
131
  "created_at": "2026-04-27T00:00:00Z",
132
132
  "updated_at": "2026-06-14T00:00:00Z"
133
133
  },
134
+ "autonomous-run-governance": {
135
+ "name": "Autonomous Run Governance",
136
+ "id": "autonomous-run-governance",
137
+ "version": "0.1.4",
138
+ "description": "Adds permission-bounded, evidence-first governance for autonomous Spec Kit delivery, convergence, resume, closeout, and retrospective learning.",
139
+ "author": "Thorsten Hindermann",
140
+ "repository": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance",
141
+ "download_url": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance/archive/refs/tags/v0.1.4.zip",
142
+ "homepage": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance",
143
+ "documentation": "https://github.com/hindermath/spec-kit-preset-autonomous-run-governance/blob/v0.1.4/README.md",
144
+ "license": "MIT",
145
+ "requires": {
146
+ "speckit_version": ">=0.8.3"
147
+ },
148
+ "provides": {
149
+ "templates": 12,
150
+ "commands": 2,
151
+ "scripts": 2
152
+ },
153
+ "tags": [
154
+ "autonomous",
155
+ "governance",
156
+ "evidence",
157
+ "permissions",
158
+ "retrospective"
159
+ ],
160
+ "created_at": "2026-07-13T00:00:00Z",
161
+ "updated_at": "2026-07-14T00:00:00Z"
162
+ },
134
163
  "canon-core": {
135
164
  "name": "Canon Core",
136
165
  "id": "canon-core",
@@ -618,6 +647,34 @@
618
647
  "created_at": "2026-04-30T00:00:00Z",
619
648
  "updated_at": "2026-04-30T00:00:00Z"
620
649
  },
650
+ "test-first-governance": {
651
+ "name": "Test-First Governance",
652
+ "id": "test-first-governance",
653
+ "version": "1.3.0",
654
+ "description": "Governs TDD with coverage-complete BDD/ATDD Gherkin scenarios, explicit suite ownership, professional test reports, traceability, and risk-based quality gates.",
655
+ "author": "Zoltán Katona, PhD",
656
+ "repository": "https://github.com/ka-zo/spec-kit-preset-test-first-governance",
657
+ "download_url": "https://github.com/ka-zo/spec-kit-preset-test-first-governance/archive/refs/tags/1.3.0.zip",
658
+ "homepage": "https://github.com/ka-zo/spec-kit-preset-test-first-governance",
659
+ "documentation": "https://github.com/ka-zo/spec-kit-preset-test-first-governance/blob/main/README.md",
660
+ "license": "MIT",
661
+ "requires": {
662
+ "speckit_version": ">=0.12.11"
663
+ },
664
+ "provides": {
665
+ "templates": 10,
666
+ "commands": 8
667
+ },
668
+ "tags": [
669
+ "tdd",
670
+ "bdd",
671
+ "atdd",
672
+ "quality-gates",
673
+ "traceability"
674
+ ],
675
+ "created_at": "2026-07-13T00:00:00Z",
676
+ "updated_at": "2026-07-13T00:00:00Z"
677
+ },
621
678
  "toc-navigation": {
622
679
  "name": "Table of Contents Navigation",
623
680
  "id": "toc-navigation",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "specify-cli"
3
- version = "0.12.13"
3
+ version = "0.12.15"
4
4
  description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -24,6 +24,7 @@ GITHUB_HOSTS = frozenset({
24
24
  "api.github.com",
25
25
  "codeload.github.com",
26
26
  })
27
+ _MAX_RELEASE_METADATA_BYTES = 5 * 1024 * 1024
27
28
 
28
29
 
29
30
  def build_github_request(url: str) -> urllib.request.Request:
@@ -68,6 +69,8 @@ def resolve_github_release_asset_api_url(
68
69
  open_url_fn: Callable,
69
70
  timeout: int = 60,
70
71
  github_hosts: tuple[str, ...] = (),
72
+ redirect_validator: Callable[[str, str], None] | None = None,
73
+ max_metadata_bytes: int = _MAX_RELEASE_METADATA_BYTES,
71
74
  ) -> Optional[str]:
72
75
  """Resolve a GitHub release browser-download URL to its REST API asset URL.
73
76
 
@@ -91,6 +94,8 @@ def resolve_github_release_asset_api_url(
91
94
  authenticated release-metadata lookup.
92
95
  timeout: Per-request timeout in seconds.
93
96
  github_hosts: Host patterns to treat as GitHub Enterprise Server.
97
+ redirect_validator: Optional policy applied to metadata redirects.
98
+ max_metadata_bytes: Maximum release-metadata response size.
94
99
  """
95
100
  import json
96
101
  import urllib.error
@@ -149,13 +154,33 @@ def resolve_github_release_asset_api_url(
149
154
  release_url = f"{api_base}/repos/{owner}/{repo}/releases/tags/{encoded_tag}"
150
155
 
151
156
  try:
152
- with open_url_fn(release_url, timeout=timeout) as response:
153
- release_data = json.loads(response.read())
154
- except (urllib.error.URLError, json.JSONDecodeError):
157
+ open_kwargs = {"timeout": timeout}
158
+ if redirect_validator is not None:
159
+ open_kwargs["redirect_validator"] = redirect_validator
160
+ with open_url_fn(release_url, **open_kwargs) as response:
161
+ raw_release_data = response.read(max_metadata_bytes + 1)
162
+ if len(raw_release_data) > max_metadata_bytes:
163
+ raise ValueError("GitHub release metadata exceeds size limit")
164
+ release_data = json.loads(raw_release_data)
165
+ except (
166
+ urllib.error.URLError,
167
+ json.JSONDecodeError,
168
+ TypeError,
169
+ ValueError,
170
+ ):
155
171
  return None
156
172
 
157
- for asset in release_data.get("assets", []):
158
- if asset.get("name") == asset_name and asset.get("url"):
173
+ if not isinstance(release_data, dict):
174
+ return None
175
+ assets = release_data.get("assets", [])
176
+ if not isinstance(assets, list):
177
+ return None
178
+ for asset in assets:
179
+ if (
180
+ isinstance(asset, dict)
181
+ and asset.get("name") == asset_name
182
+ and asset.get("url")
183
+ ):
159
184
  return str(asset["url"])
160
185
 
161
186
  return None
@@ -14,7 +14,7 @@ def save_init_options(project_path: Path, options: dict[str, Any]) -> None:
14
14
  dest = project_path / INIT_OPTIONS_FILE
15
15
  dest.parent.mkdir(parents=True, exist_ok=True)
16
16
  dest.write_text(
17
- json.dumps(options, indent=2, sort_keys=True, ensure_ascii=False),
17
+ json.dumps(options, indent=2, sort_keys=True, ensure_ascii=False) + "\n",
18
18
  encoding="utf-8",
19
19
  )
20
20
 
@@ -10,6 +10,8 @@ from __future__ import annotations
10
10
  import json
11
11
  import os
12
12
  import re
13
+ import stat
14
+ import tempfile
13
15
  from pathlib import Path, PurePosixPath
14
16
  from typing import Any
15
17
 
@@ -87,17 +89,63 @@ def loads_json(text: str, *, origin: str = "<string>") -> Any:
87
89
 
88
90
 
89
91
  def dump_json(path: Path, data: Any, *, within: Path | None = None) -> Path:
90
- """Write *data* as pretty JSON to *path* (optionally confined to *within*)."""
92
+ """Atomically write pretty JSON to *path* (optionally confined to *within*)."""
91
93
  path = Path(path)
92
94
  if within is not None:
93
95
  path = ensure_within(within, path)
96
+ fd = -1
97
+ temp_path: Path | None = None
94
98
  try:
95
99
  path.parent.mkdir(parents=True, exist_ok=True)
96
- with path.open("w", encoding="utf-8") as handle:
100
+ fd, temp_name = tempfile.mkstemp(
101
+ dir=path.parent,
102
+ prefix=f".{path.name}.",
103
+ suffix=".tmp",
104
+ )
105
+ temp_path = Path(temp_name)
106
+ with os.fdopen(os.dup(fd), "w", encoding="utf-8") as handle:
97
107
  json.dump(data, handle, indent=2, sort_keys=False)
98
108
  handle.write("\n")
109
+
110
+ try:
111
+ if path.exists():
112
+ existing = path.stat(follow_symlinks=False)
113
+ if stat.S_ISREG(existing.st_mode) and hasattr(os, "fchmod"):
114
+ os.fchmod(fd, stat.S_IMODE(existing.st_mode))
115
+ if stat.S_ISREG(existing.st_mode) and hasattr(os, "fchown"):
116
+ try:
117
+ os.fchown(fd, existing.st_uid, existing.st_gid)
118
+ except PermissionError:
119
+ pass
120
+ except OSError:
121
+ pass
122
+
123
+ staged = os.stat(temp_path, follow_symlinks=False)
124
+ opened = os.fstat(fd)
125
+ if (
126
+ not stat.S_ISREG(staged.st_mode)
127
+ or staged.st_dev != opened.st_dev
128
+ or staged.st_ino != opened.st_ino
129
+ ):
130
+ raise OSError("staged JSON file changed before commit")
131
+
132
+ os.close(fd)
133
+ fd = -1
134
+ os.replace(temp_path, path)
135
+ temp_path = None
99
136
  except OSError as exc:
100
137
  raise BundlerError(f"Could not write {path}: {exc}") from exc
138
+ finally:
139
+ if fd >= 0:
140
+ try:
141
+ os.close(fd)
142
+ except OSError:
143
+ pass
144
+ if temp_path is not None:
145
+ try:
146
+ temp_path.unlink(missing_ok=True)
147
+ except OSError:
148
+ pass
101
149
  return path
102
150
 
103
151
 
@@ -187,19 +187,41 @@ def remove_bundle(
187
187
 
188
188
  still_needed = components_still_needed(records, exclude_bundle_id=bundle_id)
189
189
  result = InstallResult(bundle_id=bundle_id)
190
+ remove_attempted = False
190
191
 
191
- for component in target.contributed_components:
192
- key = (component.kind, component.id)
193
- if key in still_needed:
194
- result.skipped.append(component)
195
- continue
196
- if installer.is_installed(project_root, component):
197
- installer.remove(project_root, component)
198
- result.uninstalled.append(component)
192
+ try:
193
+ for component in target.contributed_components:
194
+ key = (component.kind, component.id)
195
+ if key in still_needed:
196
+ result.skipped.append(component)
197
+ continue
198
+ if installer.is_installed(project_root, component):
199
+ remove_attempted = True
200
+ installer.remove(project_root, component)
201
+ result.uninstalled.append(component)
202
+ save_records(project_root, remove_record(records, bundle_id))
203
+ except Exception as exc: # noqa: BLE001
204
+ if result.uninstalled:
205
+ detail = (
206
+ f"{len(result.uninstalled)} component(s) were already removed "
207
+ "before this failure; the bundle record was left unchanged, "
208
+ "so the project may be partially uninstalled."
209
+ )
210
+ elif remove_attempted:
211
+ detail = (
212
+ "No components were removed, but the failing component may "
213
+ "have made partial changes before raising, so the project "
214
+ "may be partially uninstalled."
215
+ )
199
216
  else:
200
- result.skipped.append(component)
217
+ detail = (
218
+ "No components were removed and no removal was attempted; "
219
+ "the bundle record was left unchanged."
220
+ )
221
+ raise BundlerError(
222
+ f"Failed to remove bundle '{bundle_id}': {exc}. {detail}"
223
+ ) from exc
201
224
 
202
- save_records(project_root, remove_record(records, bundle_id))
203
225
  return result
204
226
 
205
227