specify-cli 1.0.2__tar.gz → 1.0.4__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 (550) hide show
  1. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
  2. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/bug_report.yml +2 -0
  3. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/feature_request.yml +2 -0
  4. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/codeql.yml +2 -2
  5. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/publish-pypi.yml +5 -3
  6. {specify_cli-1.0.2 → specify_cli-1.0.4}/AGENTS.md +3 -1
  7. {specify_cli-1.0.2 → specify_cli-1.0.4}/CHANGELOG.md +50 -0
  8. {specify_cli-1.0.2 → specify_cli-1.0.4}/PKG-INFO +22 -1
  9. {specify_cli-1.0.2 → specify_cli-1.0.4}/README.md +21 -0
  10. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/extensions.md +3 -2
  11. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/extensions.md +2 -0
  12. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/integrations.md +2 -0
  13. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-PUBLISHING-GUIDE.md +1 -2
  14. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/catalog.community.json +55 -16
  15. {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/catalog.json +19 -1
  16. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/PUBLISHING.md +37 -0
  17. {specify_cli-1.0.2 → specify_cli-1.0.4}/pyproject.toml +1 -1
  18. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/check-prerequisites.sh +13 -0
  19. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/common.sh +13 -5
  20. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/setup-plan.sh +2 -2
  21. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/check-prerequisites.ps1 +11 -0
  22. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/create-new-feature.ps1 +8 -1
  23. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/setup-plan.ps1 +5 -0
  24. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/check_prerequisites.py +14 -0
  25. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/setup_plan.py +3 -1
  26. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_github_http.py +3 -0
  27. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_invocation_style.py +1 -1
  28. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_utils.py +41 -0
  29. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/config.py +4 -1
  30. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/catalog.py +11 -0
  31. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/records.py +12 -6
  32. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/primitives.py +5 -3
  33. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/init.py +7 -0
  34. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/events.py +1 -1
  35. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/extensions/_commands.py +109 -13
  36. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/__init__.py +4 -0
  37. specify_cli-1.0.4/src/specify_cli/integrations/docker_agent/__init__.py +126 -0
  38. specify_cli-1.0.4/src/specify_cli/integrations/dsh/__init__.py +64 -0
  39. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/rovodev/__init__.py +11 -0
  40. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/presets/__init__.py +284 -3
  41. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/presets/_commands.py +112 -0
  42. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/_commands.py +3 -3
  43. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/catalog.py +12 -6
  44. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/expressions.py +70 -1
  45. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/_commands.py +18 -2
  46. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/schema.py +7 -1
  47. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/do_while/__init__.py +16 -0
  48. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/if_then/__init__.py +16 -0
  49. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/while_loop/__init__.py +16 -0
  50. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/analyze.md +3 -3
  51. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/converge.md +3 -3
  52. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_bundle_cli.py +4 -1
  53. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_catalog_schema.py +17 -0
  54. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_events.py +16 -0
  55. specify_cli-1.0.4/tests/integrations/test_integration_docker_agent.py +133 -0
  56. specify_cli-1.0.4/tests/integrations/test_integration_dsh.py +314 -0
  57. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_rovodev.py +39 -0
  58. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_registry.py +1 -1
  59. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/parity_helpers.py +11 -1
  60. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_agent_config_consistency.py +2 -0
  61. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_authentication.py +1 -1
  62. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_check_prerequisites_python_parity.py +72 -0
  63. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_check_tool.py +36 -0
  64. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_create_new_feature_python_parity.py +53 -0
  65. specify_cli-1.0.4/tests/test_extension_content_staleness.py +134 -0
  66. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extensions.py +206 -0
  67. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_github_http.py +18 -0
  68. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_github_workflows.py +86 -0
  69. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_presets.py +626 -0
  70. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_resolve_template_python_parity.py +34 -0
  71. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_plan_python_parity.py +10 -8
  72. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_workflows.py +174 -0
  73. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_primitives.py +114 -15
  74. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_records.py +70 -0
  75. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_condition_expression_block.py +71 -0
  76. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_commands.py +109 -0
  77. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_schema.py +51 -0
  78. {specify_cli-1.0.2 → specify_cli-1.0.4}/.devcontainer/devcontainer.json +0 -0
  79. {specify_cli-1.0.2 → specify_cli-1.0.4}/.devcontainer/post-create.sh +0 -0
  80. {specify_cli-1.0.2 → specify_cli-1.0.4}/.editorconfig +0 -0
  81. {specify_cli-1.0.2 → specify_cli-1.0.4}/.gitattributes +0 -0
  82. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/CODEOWNERS +0 -0
  83. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  84. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  85. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  86. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  87. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  88. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/aw/actions-lock.json +0 -0
  89. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/dependabot.yml +0 -0
  90. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/scripts/check_security_requirements.py +0 -0
  91. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/security-audit-requirements.txt +0 -0
  92. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/skills/add-community-extension/SKILL.md +0 -0
  93. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/RELEASE-PROCESS.md +0 -0
  94. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-bundle.lock.yml +0 -0
  95. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-bundle.md +0 -0
  96. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-extension.lock.yml +0 -0
  97. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-extension.md +0 -0
  98. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-preset.lock.yml +0 -0
  99. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/add-community-preset.md +0 -0
  100. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-assess.lock.yml +0 -0
  101. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-assess.md +0 -0
  102. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-fix.lock.yml +0 -0
  103. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-fix.md +0 -0
  104. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-test.lock.yml +0 -0
  105. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/bug-test.md +0 -0
  106. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/catalog-assign.yml +0 -0
  107. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/docs.yml +0 -0
  108. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/feature-assess.lock.yml +0 -0
  109. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/feature-assess.md +0 -0
  110. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/lint.yml +0 -0
  111. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/release-trigger.yml +0 -0
  112. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/release.yml +0 -0
  113. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/security.yml +0 -0
  114. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/stale.yml +0 -0
  115. {specify_cli-1.0.2 → specify_cli-1.0.4}/.github/workflows/test.yml +0 -0
  116. {specify_cli-1.0.2 → specify_cli-1.0.4}/.gitignore +0 -0
  117. {specify_cli-1.0.2 → specify_cli-1.0.4}/.markdownlint-cli2.jsonc +0 -0
  118. {specify_cli-1.0.2 → specify_cli-1.0.4}/.pre-commit-config.yaml +0 -0
  119. {specify_cli-1.0.2 → specify_cli-1.0.4}/.zenodo.json +0 -0
  120. {specify_cli-1.0.2 → specify_cli-1.0.4}/CITATION.cff +0 -0
  121. {specify_cli-1.0.2 → specify_cli-1.0.4}/CODE_OF_CONDUCT.md +0 -0
  122. {specify_cli-1.0.2 → specify_cli-1.0.4}/CONTRIBUTING.md +0 -0
  123. {specify_cli-1.0.2 → specify_cli-1.0.4}/DEVELOPMENT.md +0 -0
  124. {specify_cli-1.0.2 → specify_cli-1.0.4}/LICENSE +0 -0
  125. {specify_cli-1.0.2 → specify_cli-1.0.4}/README.zh-CN.md +0 -0
  126. {specify_cli-1.0.2 → specify_cli-1.0.4}/SECURITY.md +0 -0
  127. {specify_cli-1.0.2 → specify_cli-1.0.4}/SUPPORT.md +0 -0
  128. {specify_cli-1.0.2 → specify_cli-1.0.4}/bundles/catalog.community.json +0 -0
  129. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/.gitignore +0 -0
  130. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/README.md +0 -0
  131. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/bundles.md +0 -0
  132. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/friends.md +0 -0
  133. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/overview.md +0 -0
  134. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/presets.md +0 -0
  135. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/community/walkthroughs.md +0 -0
  136. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/complex-features.md +0 -0
  137. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/sdd.md +0 -0
  138. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/spec-of-specs.md +0 -0
  139. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/concepts/spec-persistence.md +0 -0
  140. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/docfx.json +0 -0
  141. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/guides/evolving-specs.md +0 -0
  142. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/guides/existing-projects.md +0 -0
  143. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/guides/monorepo.md +0 -0
  144. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/history.md +0 -0
  145. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/images/spec-kit-logo.webp +0 -0
  146. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/index.md +0 -0
  147. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/air-gapped.md +0 -0
  148. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/one-time.md +0 -0
  149. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/pipx.md +0 -0
  150. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/pypi.md +0 -0
  151. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/install/uv.md +0 -0
  152. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/installation.md +0 -0
  153. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/local-development.md +0 -0
  154. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/quickstart.md +0 -0
  155. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/agentic-bugfix.md +0 -0
  156. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/agentic-sdd.md +0 -0
  157. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/authentication.md +0 -0
  158. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/bundles.md +0 -0
  159. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/core.md +0 -0
  160. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/overview.md +0 -0
  161. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/presets.md +0 -0
  162. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/reference/workflows.md +0 -0
  163. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/template/public/main.css +0 -0
  164. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/toc.yml +0 -0
  165. {specify_cli-1.0.2 → specify_cli-1.0.4}/docs/upgrade.md +0 -0
  166. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/business-analyst/README.md +0 -0
  167. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/business-analyst/bundle.yml +0 -0
  168. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/developer/README.md +0 -0
  169. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/developer/bundle.yml +0 -0
  170. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/product-manager/README.md +0 -0
  171. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/product-manager/bundle.yml +0 -0
  172. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/security-researcher/README.md +0 -0
  173. {specify_cli-1.0.2 → specify_cli-1.0.4}/examples/bundles/security-researcher/bundle.yml +0 -0
  174. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  175. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  176. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  177. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/README.md +0 -0
  178. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  179. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/README.md +0 -0
  180. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/agent-context-config.yml +0 -0
  181. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/agent-context-defaults.json +0 -0
  182. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  183. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/extension.yml +0 -0
  184. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
  185. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
  186. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  187. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/README.md +0 -0
  188. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.decide.md +0 -0
  189. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.define.md +0 -0
  190. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.intake.md +0 -0
  191. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.research.md +0 -0
  192. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/commands/speckit.assess.shape.md +0 -0
  193. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/assess/extension.yml +0 -0
  194. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/README.md +0 -0
  195. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  196. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  197. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/commands/speckit.bug.test.md +0 -0
  198. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/bug/extension.yml +0 -0
  199. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/catalog.json +0 -0
  200. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/README.md +0 -0
  201. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.commit.md +0 -0
  202. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.feature.md +0 -0
  203. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.initialize.md +0 -0
  204. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.remote.md +0 -0
  205. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/commands/speckit.git.validate.md +0 -0
  206. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/config-template.yml +0 -0
  207. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/extension.yml +0 -0
  208. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/git-config.yml +0 -0
  209. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  210. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  211. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/git-common.sh +0 -0
  212. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  213. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  214. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
  215. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  216. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  217. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/auto_commit.py +0 -0
  218. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
  219. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/git_common.py +0 -0
  220. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/git/scripts/python/initialize_repo.py +0 -0
  221. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/selftest/commands/selftest.md +0 -0
  222. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/selftest/extension.yml +0 -0
  223. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/.gitignore +0 -0
  224. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/CHANGELOG.md +0 -0
  225. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/EXAMPLE-README.md +0 -0
  226. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/LICENSE +0 -0
  227. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/README.md +0 -0
  228. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/commands/example.md +0 -0
  229. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/config-template.yml +0 -0
  230. {specify_cli-1.0.2 → specify_cli-1.0.4}/extensions/template/extension.yml +0 -0
  231. {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/CONTRIBUTING.md +0 -0
  232. {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/README.md +0 -0
  233. {specify_cli-1.0.2 → specify_cli-1.0.4}/integrations/catalog.community.json +0 -0
  234. {specify_cli-1.0.2 → specify_cli-1.0.4}/media/bootstrap-claude-code.gif +0 -0
  235. {specify_cli-1.0.2 → specify_cli-1.0.4}/media/logo_large.webp +0 -0
  236. {specify_cli-1.0.2 → specify_cli-1.0.4}/media/logo_small.webp +0 -0
  237. {specify_cli-1.0.2 → specify_cli-1.0.4}/media/spec-kit-video-header.jpg +0 -0
  238. {specify_cli-1.0.2 → specify_cli-1.0.4}/media/specify_cli.gif +0 -0
  239. {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-April.md +0 -0
  240. {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-February.md +0 -0
  241. {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-July.md +0 -0
  242. {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-June.md +0 -0
  243. {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-March.md +0 -0
  244. {specify_cli-1.0.2 → specify_cli-1.0.4}/newsletters/2026-May.md +0 -0
  245. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/ARCHITECTURE.md +0 -0
  246. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/README.md +0 -0
  247. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/catalog.community.json +0 -0
  248. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/catalog.json +0 -0
  249. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/constitution-sync/README.md +0 -0
  250. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/constitution-sync/commands/speckit.constitution.md +0 -0
  251. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/constitution-sync/preset.yml +0 -0
  252. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/README.md +0 -0
  253. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.constitution.md +0 -0
  254. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.implement.md +0 -0
  255. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.plan.md +0 -0
  256. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.specify.md +0 -0
  257. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/commands/speckit.tasks.md +0 -0
  258. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/lean/preset.yml +0 -0
  259. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/README.md +0 -0
  260. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  261. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/commands/speckit.specify.md +0 -0
  262. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/preset.yml +0 -0
  263. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/templates/myext-template.md +0 -0
  264. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/scaffold/templates/spec-template.md +0 -0
  265. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/commands/speckit.specify.md +0 -0
  266. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  267. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/preset.yml +0 -0
  268. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/checklist-template.md +0 -0
  269. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/constitution-template.md +0 -0
  270. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/plan-template.md +0 -0
  271. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/spec-template.md +0 -0
  272. {specify_cli-1.0.2 → specify_cli-1.0.4}/presets/self-test/templates/tasks-template.md +0 -0
  273. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/create-new-feature.sh +0 -0
  274. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/resolve-template.sh +0 -0
  275. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/bash/setup-tasks.sh +0 -0
  276. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/common.ps1 +0 -0
  277. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/resolve-template.ps1 +0 -0
  278. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/powershell/setup-tasks.ps1 +0 -0
  279. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/common.py +0 -0
  280. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/create_new_feature.py +0 -0
  281. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/resolve_template.py +0 -0
  282. {specify_cli-1.0.2 → specify_cli-1.0.4}/scripts/python/setup_tasks.py +0 -0
  283. {specify_cli-1.0.2 → specify_cli-1.0.4}/spec-driven.md +0 -0
  284. {specify_cli-1.0.2 → specify_cli-1.0.4}/spec-kit.code-workspace +0 -0
  285. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/__init__.py +0 -0
  286. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_agent_config.py +0 -0
  287. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_assets.py +0 -0
  288. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_console.py +0 -0
  289. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_download_security.py +0 -0
  290. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_init_options.py +0 -0
  291. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_project.py +0 -0
  292. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_toml_string.py +0 -0
  293. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/_version.py +0 -0
  294. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/agents.py +0 -0
  295. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/__init__.py +0 -0
  296. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/azure_devops.py +0 -0
  297. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/base.py +0 -0
  298. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/github.py +0 -0
  299. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/authentication/http.py +0 -0
  300. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/__init__.py +0 -0
  301. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  302. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
  303. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/__init__.py +0 -0
  304. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/project.py +0 -0
  305. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/versioning.py +0 -0
  306. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/lib/yamlio.py +0 -0
  307. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/__init__.py +0 -0
  308. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/models/manifest.py +0 -0
  309. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/__init__.py +0 -0
  310. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/adapters.py +0 -0
  311. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  312. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/conflict.py +0 -0
  313. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/installer.py +0 -0
  314. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/packager.py +0 -0
  315. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/references.py +0 -0
  316. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/resolver.py +0 -0
  317. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/bundler/services/validator.py +0 -0
  318. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/catalogs.py +0 -0
  319. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/__init__.py +0 -0
  320. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/bundle/__init__.py +0 -0
  321. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/commands/event.py +0 -0
  322. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/extensions/__init__.py +0 -0
  323. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_runtime.py +0 -0
  324. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_scaffold.py +0 -0
  325. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_state.py +0 -0
  326. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integration_status.py +0 -0
  327. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_commands.py +0 -0
  328. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_helpers.py +0 -0
  329. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_install_commands.py +0 -0
  330. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  331. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_query_commands.py +0 -0
  332. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  333. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/agy/__init__.py +0 -0
  334. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/alquimia/__init__.py +0 -0
  335. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/amp/__init__.py +0 -0
  336. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  337. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/base.py +0 -0
  338. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/bob/__init__.py +0 -0
  339. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/catalog.py +0 -0
  340. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/claude/__init__.py +0 -0
  341. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/cline/__init__.py +0 -0
  342. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  343. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/codex/__init__.py +0 -0
  344. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/command_code/__init__.py +0 -0
  345. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  346. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  347. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/devin/__init__.py +0 -0
  348. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/droid/__init__.py +0 -0
  349. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  350. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/forge/__init__.py +0 -0
  351. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  352. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/generic/__init__.py +0 -0
  353. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/goose/__init__.py +0 -0
  354. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/grok/__init__.py +0 -0
  355. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  356. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/junie/__init__.py +0 -0
  357. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  358. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  359. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
  360. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  361. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/manifest.py +0 -0
  362. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/omp/__init__.py +0 -0
  363. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  364. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/pi/__init__.py +0 -0
  365. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  366. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  367. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/shai/__init__.py +0 -0
  368. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  369. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/trae/__init__.py +0 -0
  370. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  371. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  372. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/integrations/zed/__init__.py +0 -0
  373. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/shared_infra.py +0 -0
  374. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/__init__.py +0 -0
  375. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/base.py +0 -0
  376. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/engine.py +0 -0
  377. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/__init__.py +0 -0
  378. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/composer.py +0 -0
  379. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
  380. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/overlays/merge.py +0 -0
  381. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/__init__.py +0 -0
  382. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
  383. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
  384. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
  385. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
  386. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
  387. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
  388. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  389. {specify_cli-1.0.2 → specify_cli-1.0.4}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  390. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/checklist-template.md +0 -0
  391. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/checklist.md +0 -0
  392. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/clarify.md +0 -0
  393. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/constitution.md +0 -0
  394. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/implement.md +0 -0
  395. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/plan.md +0 -0
  396. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/specify.md +0 -0
  397. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/tasks.md +0 -0
  398. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/commands/taskstoissues.md +0 -0
  399. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/constitution-template.md +0 -0
  400. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/plan-template.md +0 -0
  401. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/spec-template.md +0 -0
  402. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/tasks-template.md +0 -0
  403. {specify_cli-1.0.2 → specify_cli-1.0.4}/templates/vscode-settings.json +0 -0
  404. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/__init__.py +0 -0
  405. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/auth_helpers.py +0 -0
  406. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/bundler_helpers.py +0 -0
  407. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/conftest.py +0 -0
  408. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_manifest_schema.py +0 -0
  409. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_wheel_bundled_presets.py +0 -0
  410. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/contract/test_wheel_core_pack_scripts.py +0 -0
  411. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/__init__.py +0 -0
  412. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/assess/__init__.py +0 -0
  413. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/assess/test_assess_extension.py +0 -0
  414. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/bug/__init__.py +0 -0
  415. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/bug/test_bug_extension.py +0 -0
  416. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/git/__init__.py +0 -0
  417. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/git/test_git_extension.py +0 -0
  418. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
  419. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_agent_context_cli_free.py +0 -0
  420. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_extension_agent_context.py +0 -0
  421. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  422. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  423. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/TESTING.md +0 -0
  424. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/plan.md +0 -0
  425. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/spec.md +0 -0
  426. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/hooks/tasks.md +0 -0
  427. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/http_helpers.py +0 -0
  428. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_catalog_stack.py +0 -0
  429. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_init_install.py +0 -0
  430. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_install_flow.py +0 -0
  431. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_local_install.py +0 -0
  432. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_offline.py +0 -0
  433. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integration/test_bundler_security_paths.py +0 -0
  434. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/__init__.py +0 -0
  435. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/conftest.py +0 -0
  436. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_base.py +0 -0
  437. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_cli.py +0 -0
  438. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_extra_args.py +0 -0
  439. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_home_isolation.py +0 -0
  440. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_agy.py +0 -0
  441. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_alquimia.py +0 -0
  442. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_amp.py +0 -0
  443. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_auggie.py +0 -0
  444. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_markdown.py +0 -0
  445. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_skills.py +0 -0
  446. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_toml.py +0 -0
  447. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_base_yaml.py +0 -0
  448. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_bob.py +0 -0
  449. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_catalog.py +0 -0
  450. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_claude.py +0 -0
  451. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_cline.py +0 -0
  452. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_codebuddy.py +0 -0
  453. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_codex.py +0 -0
  454. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_command_code.py +0 -0
  455. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_copilot.py +0 -0
  456. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_cursor_agent.py +0 -0
  457. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_devin.py +0 -0
  458. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_droid.py +0 -0
  459. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_firebender.py +0 -0
  460. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_forge.py +0 -0
  461. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_gemini.py +0 -0
  462. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_generic.py +0 -0
  463. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_goose.py +0 -0
  464. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_grok.py +0 -0
  465. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_hermes.py +0 -0
  466. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_junie.py +0 -0
  467. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_kilocode.py +0 -0
  468. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_kimi.py +0 -0
  469. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_kiro_cli.py +0 -0
  470. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_lingma.py +0 -0
  471. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_omp.py +0 -0
  472. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_opencode.py +0 -0
  473. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_pi.py +0 -0
  474. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_qodercli.py +0 -0
  475. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_qwen.py +0 -0
  476. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_scaffold.py +0 -0
  477. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_shai.py +0 -0
  478. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_state.py +0 -0
  479. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_subcommand.py +0 -0
  480. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_tabnine.py +0 -0
  481. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_trae.py +0 -0
  482. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_vibe.py +0 -0
  483. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_zcode.py +0 -0
  484. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_integration_zed.py +0 -0
  485. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_manifest.py +0 -0
  486. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  487. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/self_upgrade_helpers.py +0 -0
  488. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_branch_numbering.py +0 -0
  489. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_check_prerequisites_paths_only.py +0 -0
  490. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_cli_version.py +0 -0
  491. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_command_template_py_scripts.py +0 -0
  492. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_commands_package.py +0 -0
  493. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_console_imports.py +0 -0
  494. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_download_security.py +0 -0
  495. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_event_command.py +0 -0
  496. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_add_path_traversal.py +0 -0
  497. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_registration.py +0 -0
  498. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_skills.py +0 -0
  499. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_extension_update_hardening.py +0 -0
  500. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_init_dir.py +0 -0
  501. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_init_dir_cli.py +0 -0
  502. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_init_output_markup.py +0 -0
  503. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_live_transient_windows.py +0 -0
  504. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_merge.py +0 -0
  505. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_post_process.py +0 -0
  506. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_ps1_encoding.py +0 -0
  507. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_registrar_path_traversal.py +0 -0
  508. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_security_workflow.py +0 -0
  509. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_detection.py +0 -0
  510. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_execution.py +0 -0
  511. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_guidance.py +0 -0
  512. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_self_upgrade_verification.py +0 -0
  513. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_plan_feature_json.py +0 -0
  514. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_plan_no_overwrite.py +0 -0
  515. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_tasks.py +0 -0
  516. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_setup_tasks_python_parity.py +0 -0
  517. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_shared_infra_gitignore.py +0 -0
  518. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_shared_infra_integrity.py +0 -0
  519. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_skill_placeholder_py.py +0 -0
  520. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_specify_template_numbering.py +0 -0
  521. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_timestamp_branches.py +0 -0
  522. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_upgrade.py +0 -0
  523. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_utils.py +0 -0
  524. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_utils_assets_imports.py +0 -0
  525. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_version_imports.py +0 -0
  526. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/test_workflow_run_without_project.py +0 -0
  527. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundle_download_url.py +0 -0
  528. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_adapters.py +0 -0
  529. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_catalog_config.py +0 -0
  530. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_conflict.py +0 -0
  531. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_packager.py +0 -0
  532. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_references.py +0 -0
  533. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_resolver.py +0 -0
  534. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_validator.py +0 -0
  535. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_versioning.py +0 -0
  536. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/unit/test_bundler_yamlio.py +0 -0
  537. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/conftest.py +0 -0
  538. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_composer.py +0 -0
  539. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_layer_sources.py +0 -0
  540. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_merge.py +0 -0
  541. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_overlay_security.py +0 -0
  542. {specify_cli-1.0.2 → specify_cli-1.0.4}/tests/workflows/test_resolver_integration.py +0 -0
  543. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/ARCHITECTURE.md +0 -0
  544. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/PUBLISHING.md +0 -0
  545. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/README.md +0 -0
  546. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/catalog.community.json +0 -0
  547. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/catalog.json +0 -0
  548. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/speckit/workflow.yml +0 -0
  549. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/step-catalog.community.json +0 -0
  550. {specify_cli-1.0.2 → specify_cli-1.0.4}/workflows/step-catalog.json +0 -0
@@ -8,7 +8,7 @@ body:
8
8
  value: |
9
9
  Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
10
10
 
11
- **Currently supported agents**: Alquimia AI, Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Command Code, Cursor, Devin for Terminal, Factory Droid, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Grok Build, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
11
+ **Currently supported agents**: Alquimia AI, Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Command Code, Cursor, Devin for Terminal, Docker Agent, Factory Droid, DeepSeek Harness, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Grok Build, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
12
12
 
13
13
  - type: input
14
14
  id: agent-name
@@ -73,7 +73,9 @@ body:
73
73
  - Command Code
74
74
  - Cursor
75
75
  - Devin for Terminal
76
+ - Docker Agent
76
77
  - Factory Droid
78
+ - DeepSeek Harness
77
79
  - Firebender
78
80
  - Forge
79
81
  - Gemini CLI
@@ -67,7 +67,9 @@ body:
67
67
  - Command Code
68
68
  - Cursor
69
69
  - Devin for Terminal
70
+ - Docker Agent
70
71
  - Factory Droid
72
+ - DeepSeek Harness
71
73
  - Firebender
72
74
  - Forge
73
75
  - Gemini CLI
@@ -22,11 +22,11 @@ jobs:
22
22
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
23
23
 
24
24
  - name: Initialize CodeQL
25
- uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
25
+ uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
26
26
  with:
27
27
  languages: ${{ matrix.language }}
28
28
 
29
29
  - name: Perform CodeQL Analysis
30
- uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
30
+ uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
31
31
  with:
32
32
  category: "/language:${{ matrix.language }}"
@@ -19,8 +19,9 @@ jobs:
19
19
  actions: write
20
20
  steps:
21
21
  - name: Verify tag format
22
+ env:
23
+ TAG: ${{ inputs.tag }}
22
24
  run: |
23
- TAG="${{ inputs.tag }}"
24
25
  if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
25
26
  echo "Error: '$TAG' is not a valid release tag (expected vX.Y.Z)"
26
27
  exit 1
@@ -40,9 +41,10 @@ jobs:
40
41
  python-version: "3.13"
41
42
 
42
43
  - name: Verify tag matches package version
44
+ env:
45
+ TAG: ${{ inputs.tag }}
43
46
  run: |
44
- TAG_VERSION="${{ inputs.tag }}"
45
- TAG_VERSION="${TAG_VERSION#v}"
47
+ TAG_VERSION="${TAG#v}"
46
48
  PROJECT_VERSION="$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')"
47
49
  if [[ "$TAG_VERSION" != "$PROJECT_VERSION" ]]; then
48
50
  echo "Error: Tag version ($TAG_VERSION) does not match pyproject.toml version ($PROJECT_VERSION)"
@@ -41,6 +41,8 @@ src/specify_cli/integrations/
41
41
  │ └── __init__.py
42
42
  ├── copilot/ # Example: IntegrationBase subclass (custom setup)
43
43
  │ └── __init__.py
44
+ ├── docker_agent/ # Example: Docker Agent SkillsIntegration subclass
45
+ │ └── __init__.py
44
46
  └── ... # One subpackage per supported agent
45
47
  ```
46
48
 
@@ -504,7 +506,7 @@ Disclosure is **continuous**, not a one-time event. A single AI-disclosure parag
504
506
  ### Opening pull requests
505
507
 
506
508
  - Before opening a pull request, check whether the account that will file it already has three open pull requests in this repository.
507
- - If so, alert the user that additional submissions may receive lower review priority and ask for explicit permission to proceed. Do not assume consent.
509
+ - If so, alert the user that additional submissions may receive lower review priority and ask for explicit permission to proceed. Do not assume consent. If the user is unavailable to provide that permission, including during autonomous or non-interactive operation, do not open the pull request. Preserve the work on a branch and report that confirmation is required.
508
510
 
509
511
  ### Commits
510
512
 
@@ -2,6 +2,56 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [1.0.4] - 2026-09-02
6
+
7
+ ### Changed
8
+
9
+ - fix(scripts): stop wrap composition looping on a token in core content (#4396)
10
+ - [extension] Update Charter extension to v0.6.1 (#4409)
11
+ - fix(workflows): keep non-ASCII text readable in written overlay files (#4148)
12
+ - fix(workflows): report overlay operation keys in declaration order (#4146)
13
+ - fix: skip corrupted state.json in list_runs() instead of aborting (#3904)
14
+ - fix(rovodev): guard non-string prompt names when merging prompts.yml (#4145)
15
+ - fix: narrow bare except Exception in preset command reconciliation (#3842)
16
+ - fix(workflows): refuse a filter mixed with a comparison operator instead of silently mis-binding it (#3894)
17
+ - fix: escape Rich markup in workflow error output (#3837)
18
+ - fix: add JSON error handling to auth config loader (#3836)
19
+ - fix: use missing_ok=True in extension ZIP cleanup (#3870)
20
+ - feat(presets): let a preset declare a required extension (#4250)
21
+ - fix(bundler): reject unsupported catalog payload versions (#4090)
22
+ - fix(extensions): install bundled extension updates from the local package (#4351)
23
+ - docs: clarify autonomous PR handling (#4392)
24
+ - fix(workflows): reject malformed step config on add (#4087)
25
+ - fix(powershell): stop create-new-feature crashing on a non-Latin description (#4138)
26
+ - fix(bundler): treat an explicit-null records field as missing, not "None" (#4136)
27
+ - Add DeepSeek Harness (DSH) integration (#4336)
28
+ - chore: release 1.0.3, begin 1.0.4.dev0 development (#4391)
29
+
30
+ ## [1.0.3] - 2026-09-01
31
+
32
+ ### Changed
33
+
34
+ - fix(workflows): reject malformed step config on remove (#4095)
35
+ - fix(workflows): reject malformed workflow config on remove (#4096)
36
+ - fix(events): skip unreadable extension manifests (#4089)
37
+ - docs(extensions): fix private catalog FAQ command (#4373)
38
+ - [extension] Add Vurnix Honest Gate extension to community catalog (#4388)
39
+ - fix(presets): fail closed on unreadable provenance (#4092)
40
+ - docs: explain how Spec Kit dogfoods itself (#4381)
41
+ - add --require-spec to check-prerequisites (#4367)
42
+ - fix(ci): harden PyPI release tag handling (#4386)
43
+ - fix(github-http): reject malformed explicit URL ports (#4372)
44
+ - fix: scaffold extension config when installing via bundler (#4285)
45
+ - fix: reject unknown setup-plan arguments (#4371)
46
+ - feat(docker-agent): add Docker Agent integration (#4302)
47
+ - fix(workflows): reject a condition that is spliced into text, not evaluated (#4292)
48
+ - fix(bundler): pass explicit workflow_add options from bundle install (#4284)
49
+ - test(bundle): join across wrap points in the build output-path assertion (#4280)
50
+ - chore(deps): bump the codeql-action group with 2 updates (#4357)
51
+ - [extension] Update Spec Kit Figma extension to v3.1.1 (#4377)
52
+ - fix(presets): reject falsy non-mapping catalog roots (#4088)
53
+ - chore: release 1.0.2, begin 1.0.3.dev0 development (#4379)
54
+
5
55
  ## [1.0.2] - 2026-08-31
6
56
 
7
57
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: specify-cli
3
- Version: 1.0.2
3
+ Version: 1.0.4
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
@@ -64,6 +64,7 @@ Description-Content-Type: text/markdown
64
64
  - [🧩 Making Spec Kit Your Own: Extensions & Presets](#-making-spec-kit-your-own-extensions--presets)
65
65
  - [📦 Bundles: Role-Based Setups](#-bundles-role-based-setups)
66
66
  - [📚 Core Philosophy](#-core-philosophy)
67
+ - [🪞 Does Spec Kit Use Spec Kit?](#-does-spec-kit-use-spec-kit)
67
68
  - [🌟 Development Phases](#-development-phases)
68
69
  - [🎯 Experimental Goals](#-experimental-goals)
69
70
  - [🔧 Prerequisites](#-prerequisites)
@@ -421,6 +422,26 @@ Spec-Driven Development is a structured process that emphasizes:
421
422
  - **Multi-step refinement** rather than one-shot code generation from prompts
422
423
  - **Heavy reliance** on advanced AI model capabilities for specification interpretation
423
424
 
425
+ ## 🪞 Does Spec Kit Use Spec Kit?
426
+
427
+ Yes — we dogfood Spec Kit while developing Spec Kit, especially for substantial
428
+ features and changes to the development workflow. Contributors are asked to test
429
+ relevant changes through the Spec-Driven Development commands. The
430
+ [feature assessment workflow](./.github/workflows/feature-assess.md) is currently
431
+ the automated dogfooding path: its setup uses the CLI from the current checkout
432
+ to initialize Copilot and install the `assess` extension, after which Copilot
433
+ follows the generated assessment skills against feature requests. The other
434
+ agentic workflows currently operate independently of the Specify CLI.
435
+
436
+ This does not mean every change goes through the full workflow. Small fixes can
437
+ use the normal issue, pull request, review, and test process. Dogfooding
438
+ scaffolding and artifacts under `.github/agents/`, `.github/prompts/`,
439
+ `.github/copilot-instructions.md`, `.grok/`, `.specify/`, and `specs/` are
440
+ intentionally gitignored. The automated assessment workflow is ephemeral and
441
+ neither commits nor pushes its generated Copilot skills, so its output does not
442
+ enter repository history. See the [contributor development
443
+ workflow](./CONTRIBUTING.md#development-workflow) for the validation expectations.
444
+
424
445
  ## 🌟 Development Phases
425
446
 
426
447
  | Phase | Focus | Key Activities |
@@ -44,6 +44,7 @@
44
44
  - [🧩 Making Spec Kit Your Own: Extensions & Presets](#-making-spec-kit-your-own-extensions--presets)
45
45
  - [📦 Bundles: Role-Based Setups](#-bundles-role-based-setups)
46
46
  - [📚 Core Philosophy](#-core-philosophy)
47
+ - [🪞 Does Spec Kit Use Spec Kit?](#-does-spec-kit-use-spec-kit)
47
48
  - [🌟 Development Phases](#-development-phases)
48
49
  - [🎯 Experimental Goals](#-experimental-goals)
49
50
  - [🔧 Prerequisites](#-prerequisites)
@@ -401,6 +402,26 @@ Spec-Driven Development is a structured process that emphasizes:
401
402
  - **Multi-step refinement** rather than one-shot code generation from prompts
402
403
  - **Heavy reliance** on advanced AI model capabilities for specification interpretation
403
404
 
405
+ ## 🪞 Does Spec Kit Use Spec Kit?
406
+
407
+ Yes — we dogfood Spec Kit while developing Spec Kit, especially for substantial
408
+ features and changes to the development workflow. Contributors are asked to test
409
+ relevant changes through the Spec-Driven Development commands. The
410
+ [feature assessment workflow](./.github/workflows/feature-assess.md) is currently
411
+ the automated dogfooding path: its setup uses the CLI from the current checkout
412
+ to initialize Copilot and install the `assess` extension, after which Copilot
413
+ follows the generated assessment skills against feature requests. The other
414
+ agentic workflows currently operate independently of the Specify CLI.
415
+
416
+ This does not mean every change goes through the full workflow. Small fixes can
417
+ use the normal issue, pull request, review, and test process. Dogfooding
418
+ scaffolding and artifacts under `.github/agents/`, `.github/prompts/`,
419
+ `.github/copilot-instructions.md`, `.grok/`, `.specify/`, and `specs/` are
420
+ intentionally gitignored. The automated assessment workflow is ephemeral and
421
+ neither commits nor pushes its generated Copilot skills, so its output does not
422
+ enter repository history. See the [contributor development
423
+ workflow](./CONTRIBUTING.md#development-workflow) for the validation expectations.
424
+
404
425
  ## 🌟 Development Phases
405
426
 
406
427
  | Phase | Focus | Key Activities |
@@ -52,7 +52,7 @@ The following community-contributed extensions are available in [`catalog.commun
52
52
  | Bugfix Workflow | Structured bugfix workflow — capture bugs, trace to spec artifacts, and patch specs surgically | `process` | Read+Write | [spec-kit-bugfix](https://github.com/Quratulain-bilal/spec-kit-bugfix) |
53
53
  | Canon | Adds canon-driven (baseline-driven) workflows: spec-first, code-first, spec-drift. Requires Canon Core preset installation. | `process` | Read+Write | [spec-kit-canon](https://github.com/maximiliamus/spec-kit-canon/tree/master/extension) |
54
54
  | Catalog CI | Automated validation for spec-kit community catalog entries — structure, URLs, diffs, and linting | `process` | Read-only | [spec-kit-catalog-ci](https://github.com/Quratulain-bilal/spec-kit-catalog-ci) |
55
- | Charter | Compose modular project constitutions from shared fragment registries. Centralize governance rules, select per-project fragments, track upstream changes, and keep multi-project setups consistent. | `process` | Read+Write | [spec-kit-charter](https://github.com/Fyloss/spec-kit-charter) |
55
+ | Charter | Compose project constitutions from shared fragment registries | `process` | Read+Write | [spec-kit-charter](https://github.com/Fyloss/spec-kit-charter) |
56
56
  | CI Guard | Spec compliance gates for CI/CD — verify specs exist, check drift, and block merges on gaps | `process` | Read-only | [spec-kit-ci-guard](https://github.com/Quratulain-bilal/spec-kit-ci-guard) |
57
57
  | Checkpoint Extension | Commit the changes made during the middle of the implementation, so you don't end up with just one very large commit at the end | `code` | Read+Write | [spec-kit-checkpoint](https://github.com/aaronrsun/spec-kit-checkpoint) |
58
58
  | Cleanup Extension | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues, and generates analysis for large issues | `code` | Read+Write | [spec-kit-cleanup](https://github.com/dsrednicki/spec-kit-cleanup) |
@@ -142,7 +142,7 @@ The following community-contributed extensions are available in [`catalog.commun
142
142
  | 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-) |
143
143
  | Spec Inventory | Read-only inventory of live requirement and task IDs, with focused per-task context packs instead of whole-file dumps | `visibility` | Read-only | [spec-kit-inventory-alignment](https://github.com/Yash-Chindam/spec-kit-inventory-alignment) |
144
144
  | 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) |
145
- | 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) |
145
+ | Spec Kit Figma | Grounds SpecKit spec/plan/tasks in Figma design context via REST or MCP, on macOS/Linux/Windows. | `integration` | Read+Write | [spec-kit-figma](https://github.com/Fyloss/spec-kit-figma) |
146
146
  | 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) |
147
147
  | 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) |
148
148
  | 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) |
@@ -182,6 +182,7 @@ The following community-contributed extensions are available in [`catalog.commun
182
182
  | Verify Review Ship | Post-convergence operational verification, technical review, learning governance, and transactional delivery. | `process` | Read+Write | [spec-kit-verify-review-ship](https://github.com/cadugevaerd/spec-kit-verify-review-ship) |
183
183
  | Verify Tasks Extension | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation | `code` | Read-only | [spec-kit-verify-tasks](https://github.com/datastone-inc/spec-kit-verify-tasks) |
184
184
  | Version Guard | Verify tech stack versions against live npm registries before planning and implementation | `process` | Read-only | [spec-kit-version-guard](https://github.com/KevinBrown5280/spec-kit-version-guard) |
185
+ | Vurnix Honest Gate | Deterministic three-state honest gate for AI-written code: compile + phantom-import + honest test count in one verdict, executed as code — not as agent self-review. PASS/BLOCK/UNPROVEN by exit code. | `process` | Read-only | [vurnix-spec-kit](https://github.com/shiersa/vurnix-spec-kit) |
185
186
  | What-if Analysis | Preview the downstream impact (complexity, effort, tasks, risks) of requirement changes before committing to them | `visibility` | Read-only | [spec-kit-whatif](https://github.com/DevAbdullah90/spec-kit-whatif) |
186
187
  | Wireframe Visual Feedback Loop | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement | `visibility` | Read+Write | [spec-kit-extension-wireframe](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) |
187
188
  | Work IQ | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `integration` | Read-only | [spec-kit-workiq](https://github.com/sakitA/spec-kit-workiq) |
@@ -75,6 +75,8 @@ specify extension update [<name>]
75
75
 
76
76
  Updates a specific extension, or all installed extensions if no name is given.
77
77
 
78
+ Bundled extensions (such as `agent-context` and `git`) have no download URL; their updates install from the copy shipped with the running spec-kit release. When the catalog advertises a newer version than your spec-kit release ships, the update is reported as requiring a spec-kit upgrade first.
79
+
78
80
  ## Enable / Disable an Extension
79
81
 
80
82
  ```bash
@@ -16,7 +16,9 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
16
16
  | [Codex CLI](https://github.com/openai/codex) | `codex` | Skills-based integration; installs skills into `.agents/skills` and invokes them as `$speckit-<command>` |
17
17
  | [Command Code](https://commandcode.ai/docs) | `command-code` | Skills-based integration; installs skills into `.commandcode/skills/` and invokes them as `$speckit-<command>` |
18
18
  | [Cursor](https://cursor.sh/) | `cursor-agent` | |
19
+ | [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) | `dsh` | Skills-based integration; installs skills into `.dsh/skills` and invokes them as `/speckit-<command>` |
19
20
  | [Devin for Terminal](https://cli.devin.ai/docs) | `devin` | Skills-based integration; installs skills into `.devin/skills/` and invokes them as `/speckit-<command>` |
21
+ | [Docker Agent](https://docs.docker.com/ai/docker-agent/) | `docker-agent` | Skills-based integration; installs skills into `.agents/skills/` (the same directory used by Codex and Zed). In the selected agent YAML, enable local skills with `skills: true` and provide filesystem read access. Detects either the standalone `docker-agent` binary or the Docker CLI plugin (`docker agent`). Configure workflow dispatch with `SPECKIT_INTEGRATION_DOCKER_AGENT_EXTRA_ARGS=./agent.yaml`; the Spec Kit prompt is appended after these arguments. Not multi-install safe by default because the skills directory is shared. |
20
22
  | [Factory Droid](https://docs.factory.ai/cli/getting-started/overview) | `droid` | Skills-based integration; installs skills into `.factory/skills/` and invokes them as `/speckit-<command>` |
21
23
  | [Firebender](https://firebender.com/) | `firebender` | IDE-based agent for Android Studio / IntelliJ |
22
24
  | [Forge](https://forgecode.dev/) | `forge` | |
@@ -274,8 +274,7 @@ When releasing a new version:
274
274
  A: The main catalog is for public extensions only. For private extensions:
275
275
 
276
276
  - Host your own catalog.json file
277
- - Users add your catalog: `specify extension add-catalog https://your-domain.com/catalog.json`
278
- - Not yet implemented - coming in Phase 4
277
+ - In a Spec Kit project, users add your catalog: `specify extension catalog add https://your-domain.com/catalog.json --name private-catalog`
279
278
 
280
279
  ### Q: How long does review take?
281
280
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-08-31T00:00:00Z",
3
+ "updated_at": "2026-09-02T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
5
5
  "extensions": {
6
6
  "adrkit": {
@@ -1039,13 +1039,13 @@
1039
1039
  "charter": {
1040
1040
  "name": "Charter",
1041
1041
  "id": "charter",
1042
- "description": "Compose modular project constitutions from shared fragment registries. Centralize governance rules, select per-project fragments, track upstream changes, and keep multi-project setups consistent.",
1042
+ "description": "Compose project constitutions from shared fragment registries",
1043
1043
  "author": "Fyloss",
1044
- "version": "0.5.1",
1045
- "download_url": "https://github.com/Fyloss/spec-kit-charter/archive/refs/tags/v0.5.1.zip",
1044
+ "version": "0.6.1",
1045
+ "download_url": "https://github.com/Fyloss/spec-kit-charter/archive/refs/tags/v0.6.1.zip",
1046
1046
  "repository": "https://github.com/Fyloss/spec-kit-charter",
1047
1047
  "homepage": "https://github.com/Fyloss/spec-kit-charter",
1048
- "documentation": "https://github.com/Fyloss/spec-kit-charter/tree/master/docs",
1048
+ "documentation": "https://github.com/Fyloss/spec-kit-charter/blob/master/README.md",
1049
1049
  "changelog": "https://github.com/Fyloss/spec-kit-charter/blob/master/CHANGELOG.md",
1050
1050
  "license": "MIT",
1051
1051
  "category": "process",
@@ -1066,15 +1066,15 @@
1066
1066
  "tags": [
1067
1067
  "constitution",
1068
1068
  "governance",
1069
- "modular",
1070
- "fragments",
1071
- "registry"
1069
+ "multi-repo",
1070
+ "composition",
1071
+ "fragments"
1072
1072
  ],
1073
1073
  "verified": false,
1074
1074
  "downloads": 0,
1075
1075
  "stars": 0,
1076
1076
  "created_at": "2026-07-06T00:00:00Z",
1077
- "updated_at": "2026-08-04T00:00:00Z"
1077
+ "updated_at": "2026-09-02T00:00:00Z"
1078
1078
  },
1079
1079
  "ci-guard": {
1080
1080
  "name": "CI Guard",
@@ -1783,10 +1783,10 @@
1783
1783
  "figma": {
1784
1784
  "name": "Spec Kit Figma",
1785
1785
  "id": "figma",
1786
- "description": "Agent-agnostic SpecKit extension that grounds spec, plan & task generation in Figma design context REST + optional MCP, single/mono/multi-repo, macOS/Linux/Windows.",
1786
+ "description": "Grounds SpecKit spec/plan/tasks in Figma design context via REST or MCP, on macOS/Linux/Windows.",
1787
1787
  "author": "Fyloss",
1788
- "version": "1.6.0",
1789
- "download_url": "https://github.com/Fyloss/spec-kit-figma/archive/refs/tags/v1.6.0.zip",
1788
+ "version": "3.1.1",
1789
+ "download_url": "https://github.com/Fyloss/spec-kit-figma/archive/refs/tags/v3.1.1.zip",
1790
1790
  "repository": "https://github.com/Fyloss/spec-kit-figma",
1791
1791
  "homepage": "https://github.com/Fyloss/spec-kit-figma",
1792
1792
  "documentation": "https://github.com/Fyloss/spec-kit-figma/blob/main/docs/INSTALL.md",
@@ -1795,7 +1795,7 @@
1795
1795
  "category": "integration",
1796
1796
  "effect": "read-write",
1797
1797
  "requires": {
1798
- "speckit_version": ">=0.1.0",
1798
+ "speckit_version": ">=0.11.2",
1799
1799
  "tools": [
1800
1800
  {
1801
1801
  "name": "git",
@@ -1820,8 +1820,8 @@
1820
1820
  ]
1821
1821
  },
1822
1822
  "provides": {
1823
- "commands": 5,
1824
- "hooks": 6
1823
+ "commands": 7,
1824
+ "hooks": 11
1825
1825
  },
1826
1826
  "tags": [
1827
1827
  "figma",
@@ -1834,7 +1834,7 @@
1834
1834
  "downloads": 0,
1835
1835
  "stars": 0,
1836
1836
  "created_at": "2026-07-08T00:00:00Z",
1837
- "updated_at": "2026-07-08T00:00:00Z"
1837
+ "updated_at": "2026-08-31T00:00:00Z"
1838
1838
  },
1839
1839
  "figma-starter": {
1840
1840
  "name": "Figma Starter",
@@ -5796,6 +5796,45 @@
5796
5796
  "created_at": "2026-04-20T00:00:00Z",
5797
5797
  "updated_at": "2026-04-22T21:10:00Z"
5798
5798
  },
5799
+ "vurnix": {
5800
+ "name": "Vurnix Honest Gate",
5801
+ "id": "vurnix",
5802
+ "description": "Deterministic three-state honest gate for AI-written code: compile + phantom-import + honest test count, executed as code — not agent self-review. PASS/BLOCK/UNPROVEN by exit code.",
5803
+ "author": "shiersa",
5804
+ "version": "0.1.1",
5805
+ "download_url": "https://github.com/shiersa/vurnix-spec-kit/releases/download/v0.1.1/vurnix-0.1.1.zip",
5806
+ "repository": "https://github.com/shiersa/vurnix-spec-kit",
5807
+ "homepage": "https://vurnix.dev",
5808
+ "documentation": "https://github.com/shiersa/vurnix-spec-kit#readme",
5809
+ "changelog": "",
5810
+ "license": "MIT",
5811
+ "category": "process",
5812
+ "effect": "read-only",
5813
+ "requires": {
5814
+ "speckit_version": ">=0.16.2",
5815
+ "tools": [
5816
+ { "name": "python3", "version": ">=3.10", "required": true },
5817
+ { "name": "vurnix", "version": ">=0.3.0", "required": true },
5818
+ { "name": "bash", "required": true }
5819
+ ]
5820
+ },
5821
+ "provides": {
5822
+ "commands": 1,
5823
+ "hooks": 1
5824
+ },
5825
+ "tags": [
5826
+ "deterministic",
5827
+ "honest-gate",
5828
+ "test-integrity",
5829
+ "quality",
5830
+ "fail-closed"
5831
+ ],
5832
+ "verified": false,
5833
+ "downloads": 0,
5834
+ "stars": 0,
5835
+ "created_at": "2026-09-01T00:00:00Z",
5836
+ "updated_at": "2026-09-01T00:00:00Z"
5837
+ },
5799
5838
  "whatif": {
5800
5839
  "name": "What-if Analysis",
5801
5840
  "id": "whatif",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-07-27T00:00:00Z",
3
+ "updated_at": "2026-08-31T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/integrations/catalog.json",
5
5
  "integrations": {
6
6
  "alquimia": {
@@ -66,6 +66,15 @@
66
66
  "repository": "https://github.com/github/spec-kit",
67
67
  "tags": ["cli", "skills", "factory"]
68
68
  },
69
+ "dsh": {
70
+ "id": "dsh",
71
+ "name": "DeepSeek Harness",
72
+ "version": "1.0.0",
73
+ "description": "DeepSeek Harness (DSH) CLI skills-based integration",
74
+ "author": "spec-kit-core",
75
+ "repository": "https://github.com/github/spec-kit",
76
+ "tags": ["cli", "skills"]
77
+ },
69
78
  "amp": {
70
79
  "id": "amp",
71
80
  "name": "Amp",
@@ -102,6 +111,15 @@
102
111
  "repository": "https://github.com/github/spec-kit",
103
112
  "tags": ["cli", "skills"]
104
113
  },
114
+ "docker-agent": {
115
+ "id": "docker-agent",
116
+ "name": "Docker Agent",
117
+ "version": "1.0.0",
118
+ "description": "Docker Agent skills-based integration",
119
+ "author": "spec-kit-core",
120
+ "repository": "https://github.com/github/spec-kit",
121
+ "tags": ["cli", "skills", "docker"]
122
+ },
105
123
  "qwen": {
106
124
  "id": "qwen",
107
125
  "name": "Qwen Code",
@@ -68,6 +68,8 @@ preset:
68
68
 
69
69
  requires:
70
70
  speckit_version: ">=0.1.0" # Required spec-kit version
71
+ extensions: # Optional: extensions this preset needs
72
+ - "companion-extension"
71
73
 
72
74
  provides:
73
75
  templates:
@@ -93,6 +95,41 @@ tags: # 2-5 relevant tags
93
95
  - ✅ Command names use dot notation (e.g. `speckit.specify`)
94
96
  - ✅ Tags are lowercase and descriptive
95
97
 
98
+ #### Declaring extension dependencies
99
+
100
+ If your preset overrides commands that call into an extension, declare it in
101
+ `requires.extensions`. Without the extension the preset still installs and the
102
+ overrides fall through to the core workflow, so nothing errors — the feature
103
+ just silently does less than the user expects. Declaring the dependency makes
104
+ `specify preset add` say so, and spell out how to resolve it.
105
+
106
+ Use a bare id, or a mapping when you need a version constraint or an optional
107
+ dependency:
108
+
109
+ ```yaml
110
+ requires:
111
+ speckit_version: ">=0.9.0"
112
+ extensions:
113
+ - "companion-extension" # required, any version
114
+ - id: "other-extension"
115
+ version: ">=1.2.0,<2" # optional PEP 440 specifier
116
+ required: false # optional, defaults to true
117
+ ```
118
+
119
+ `version` accepts any PEP 440 specifier, not just a lower bound — upper bounds
120
+ (`<2`), exact pins (`==1.2.0`), and exclusions (`!=1.3.0`) all work.
121
+
122
+ Notes:
123
+
124
+ - The field is optional. A preset that declares nothing behaves exactly as before.
125
+ - A dependency that is missing, stale, disabled, or version-unsatisfied produces a **warning, not a failure** — the install still succeeds.
126
+ - A disabled extension counts as unmet, and so does one whose registry entry survives after its files were removed. Resolution skips both, so the preset is just as inert as if the extension were absent.
127
+ - The warning names an exact command for the missing, stale, and disabled cases. For a version mismatch it states the constraint to satisfy rather than naming a command, because `specify extension update` only moves forward to the catalog release and cannot satisfy an upper bound, a pin, or a downgrade.
128
+ - A recorded version that cannot be parsed is treated as uncomparable rather than as a mismatch, so an extension whose registry version reads `unknown` is not reported as failing a constraint it was never evaluated against.
129
+ - An extension present on disk but absent from the registry counts as satisfied. Resolution admits unregistered directories, so the preset works and warning about it would be a false alarm — though with no recorded version, a `version` constraint cannot be checked against it.
130
+ - `required: false` documents an enhancing-but-optional extension and is never warned about.
131
+ - Declare it in `preset.yml`, not only in your catalog entry. The catalog is not consulted for `--dev` and `--from <url>` installs, so the manifest is the only copy present on every install path.
132
+
96
133
  ### 3. Test Locally
97
134
 
98
135
  ```bash
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "specify-cli"
3
- version = "1.0.2"
3
+ version = "1.0.4"
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"
@@ -9,6 +9,7 @@
9
9
  #
10
10
  # OPTIONS:
11
11
  # --json Output in JSON format
12
+ # --require-spec Require spec.md to exist (for analysis phase)
12
13
  # --require-tasks Require tasks.md to exist (for implementation phase)
13
14
  # --include-tasks Include tasks.md in AVAILABLE_DOCS list
14
15
  # --paths-only Only output path variables (no validation)
@@ -24,6 +25,7 @@ set -e
24
25
 
25
26
  # Parse command line arguments
26
27
  JSON_MODE=false
28
+ REQUIRE_SPEC=false
27
29
  REQUIRE_TASKS=false
28
30
  INCLUDE_TASKS=false
29
31
  PATHS_ONLY=false
@@ -34,6 +36,9 @@ while [[ $# -gt 0 ]]; do
34
36
  --json)
35
37
  JSON_MODE=true
36
38
  ;;
39
+ --require-spec)
40
+ REQUIRE_SPEC=true
41
+ ;;
37
42
  --require-tasks)
38
43
  REQUIRE_TASKS=true
39
44
  ;;
@@ -59,6 +64,7 @@ Consolidated prerequisite checking for Spec-Driven Development workflow.
59
64
 
60
65
  OPTIONS:
61
66
  --json Output in JSON format
67
+ --require-spec Require spec.md to exist (for analysis phase)
62
68
  --require-tasks Require tasks.md to exist (for implementation phase)
63
69
  --include-tasks Include tasks.md in AVAILABLE_DOCS list
64
70
  --paths-only Only output path variables (no prerequisite validation)
@@ -142,6 +148,13 @@ if [[ ! -f "$IMPL_PLAN" ]]; then
142
148
  exit 1
143
149
  fi
144
150
 
151
+ # Check for spec.md if required
152
+ if $REQUIRE_SPEC && [[ ! -f "$FEATURE_SPEC" ]]; then
153
+ echo "ERROR: spec.md not found in $FEATURE_DIR" >&2
154
+ echo "Run $(format_speckit_command specify "$REPO_ROOT") first to create the feature specification." >&2
155
+ exit 1
156
+ fi
157
+
145
158
  # Check for tasks.md if required
146
159
  if $REQUIRE_TASKS && [[ ! -f "$TASKS" ]]; then
147
160
  echo "ERROR: tasks.md not found in $FEATURE_DIR" >&2
@@ -902,12 +902,20 @@ except Exception as exc:
902
902
  *'{CORE_TEMPLATE}'*) ;;
903
903
  *) echo "Error: wrap strategy missing {CORE_TEMPLATE} placeholder" >&2; return 2 ;;
904
904
  esac
905
- while [[ "$layer_content" == *'{CORE_TEMPLATE}'* ]]; do
906
- local before="${layer_content%%\{CORE_TEMPLATE\}*}"
907
- local after="${layer_content#*\{CORE_TEMPLATE\}}"
908
- layer_content="${before}${content}${after}"
905
+ # Consume the wrapper left to right instead of rewriting it in
906
+ # place. Rewriting re-scanned the string just modified, so base
907
+ # content holding a literal {CORE_TEMPLATE} reintroduced the
908
+ # token every pass and the loop never terminated. Advancing over
909
+ # ``rest`` bounds the work by the tokens in the original wrapper
910
+ # and leaves inserted content untouched, matching the single-pass
911
+ # semantics of .Replace()/.replace() in the PowerShell and Python
912
+ # ports.
913
+ local wrapped="" rest="$layer_content"
914
+ while [[ "$rest" == *'{CORE_TEMPLATE}'* ]]; do
915
+ wrapped="${wrapped}${rest%%\{CORE_TEMPLATE\}*}${content}"
916
+ rest="${rest#*\{CORE_TEMPLATE\}}"
909
917
  done
910
- content="$layer_content"
918
+ content="${wrapped}${rest}"
911
919
  ;;
912
920
  *) echo "Error: unknown strategy '$strat'" >&2; return 2 ;;
913
921
  esac
@@ -4,7 +4,6 @@ set -e
4
4
 
5
5
  # Parse command line arguments
6
6
  JSON_MODE=false
7
- ARGS=()
8
7
 
9
8
  for arg in "$@"; do
10
9
  case "$arg" in
@@ -18,7 +17,8 @@ for arg in "$@"; do
18
17
  exit 0
19
18
  ;;
20
19
  *)
21
- ARGS+=("$arg")
20
+ echo "ERROR: Unknown option '$arg'" >&2
21
+ exit 1
22
22
  ;;
23
23
  esac
24
24
  done