specify-cli 0.12.9__tar.gz → 0.12.11__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.9 → specify_cli-0.12.11}/.github/CODEOWNERS +0 -1
  2. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
  3. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/extension_submission.yml +4 -4
  4. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/preset_submission.yml +1 -1
  5. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/PULL_REQUEST_TEMPLATE.md +0 -1
  6. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/lint.yml +1 -1
  7. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/publish-pypi.yml +2 -2
  8. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/stale.yml +5 -5
  9. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/test.yml +2 -2
  10. {specify_cli-0.12.9 → specify_cli-0.12.11}/.markdownlint-cli2.jsonc +1 -1
  11. specify_cli-0.12.11/.pre-commit-config.yaml +12 -0
  12. {specify_cli-0.12.9 → specify_cli-0.12.11}/CHANGELOG.md +30 -0
  13. {specify_cli-0.12.9 → specify_cli-0.12.11}/LICENSE +0 -1
  14. {specify_cli-0.12.9 → specify_cli-0.12.11}/PKG-INFO +1 -1
  15. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/.gitignore +0 -1
  16. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/extensions.md +2 -0
  17. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/friends.md +2 -0
  18. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/commands/speckit.agent-context.update.md +2 -2
  19. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/scripts/bash/update-agent-context.sh +22 -10
  20. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +6 -4
  21. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/catalog.community.json +75 -1
  22. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/catalog.json +1 -1
  23. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +8 -2
  24. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/selftest/commands/selftest.md +1 -1
  25. {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-March.md +0 -2
  26. {specify_cli-0.12.9 → specify_cli-0.12.11}/pyproject.toml +1 -2
  27. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/check-prerequisites.sh +5 -5
  28. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/create-new-feature.sh +11 -11
  29. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/setup-plan.sh +7 -8
  30. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/check-prerequisites.ps1 +10 -10
  31. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/common.ps1 +1 -1
  32. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/setup-plan.ps1 +1 -1
  33. {specify_cli-0.12.9 → specify_cli-0.12.11}/spec-kit.code-workspace +1 -1
  34. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/__init__.py +3 -2
  35. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/config.py +9 -1
  36. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/adapters.py +13 -3
  37. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/catalogs.py +7 -3
  38. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/devin/__init__.py +1 -1
  39. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/forge/__init__.py +9 -9
  40. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/shared_infra.py +5 -1
  41. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/_commands.py +9 -1
  42. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/engine.py +34 -5
  43. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/shell/__init__.py +22 -2
  44. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/checklist-template.md +3 -3
  45. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/analyze.md +1 -0
  46. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/checklist.md +1 -0
  47. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/clarify.md +2 -1
  48. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/constitution.md +1 -1
  49. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/converge.md +1 -0
  50. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/implement.md +3 -2
  51. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/plan.md +2 -3
  52. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/specify.md +15 -15
  53. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/tasks.md +3 -3
  54. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/commands/taskstoissues.md +1 -0
  55. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/plan-template.md +1 -1
  56. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/vscode-settings.json +0 -1
  57. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/git/test_git_extension.py +32 -0
  58. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_extension_agent_context.py +118 -2
  59. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/TESTING.md +1 -1
  60. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_catalog.py +14 -0
  61. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_cursor_agent.py +0 -1
  62. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_devin.py +1 -1
  63. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_forge.py +19 -19
  64. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_vibe.py +1 -1
  65. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_authentication.py +14 -0
  66. specify_cli-0.12.11/tests/test_command_template_py_scripts.py +107 -0
  67. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extension_registration.py +49 -49
  68. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extension_update_hardening.py +18 -18
  69. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_merge.py +18 -18
  70. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_setup_tasks.py +98 -98
  71. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_timestamp_branches.py +0 -1
  72. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_workflows.py +245 -0
  73. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_adapters.py +18 -0
  74. {specify_cli-0.12.9 → specify_cli-0.12.11}/.devcontainer/devcontainer.json +0 -0
  75. {specify_cli-0.12.9 → specify_cli-0.12.11}/.devcontainer/post-create.sh +0 -0
  76. {specify_cli-0.12.9 → specify_cli-0.12.11}/.editorconfig +0 -0
  77. {specify_cli-0.12.9 → specify_cli-0.12.11}/.gitattributes +0 -0
  78. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  79. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  80. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  81. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  82. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/aw/actions-lock.json +0 -0
  83. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/dependabot.yml +0 -0
  84. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/skills/add-community-extension/SKILL.md +0 -0
  85. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/RELEASE-PROCESS.md +0 -0
  86. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-extension.lock.yml +0 -0
  87. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-extension.md +0 -0
  88. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-preset.lock.yml +0 -0
  89. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/add-community-preset.md +0 -0
  90. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-assess.lock.yml +0 -0
  91. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-assess.md +0 -0
  92. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-fix.lock.yml +0 -0
  93. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-fix.md +0 -0
  94. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-test.lock.yml +0 -0
  95. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/bug-test.md +0 -0
  96. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/catalog-assign.yml +0 -0
  97. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/codeql.yml +0 -0
  98. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/docs.yml +0 -0
  99. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/release-trigger.yml +0 -0
  100. {specify_cli-0.12.9 → specify_cli-0.12.11}/.github/workflows/release.yml +0 -0
  101. {specify_cli-0.12.9 → specify_cli-0.12.11}/.gitignore +0 -0
  102. {specify_cli-0.12.9 → specify_cli-0.12.11}/.zenodo.json +0 -0
  103. {specify_cli-0.12.9 → specify_cli-0.12.11}/AGENTS.md +0 -0
  104. {specify_cli-0.12.9 → specify_cli-0.12.11}/CITATION.cff +0 -0
  105. {specify_cli-0.12.9 → specify_cli-0.12.11}/CODE_OF_CONDUCT.md +0 -0
  106. {specify_cli-0.12.9 → specify_cli-0.12.11}/CONTRIBUTING.md +0 -0
  107. {specify_cli-0.12.9 → specify_cli-0.12.11}/DEVELOPMENT.md +0 -0
  108. {specify_cli-0.12.9 → specify_cli-0.12.11}/README.md +0 -0
  109. {specify_cli-0.12.9 → specify_cli-0.12.11}/SECURITY.md +0 -0
  110. {specify_cli-0.12.9 → specify_cli-0.12.11}/SUPPORT.md +0 -0
  111. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/README.md +0 -0
  112. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/bundles.md +0 -0
  113. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/overview.md +0 -0
  114. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/presets.md +0 -0
  115. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/community/walkthroughs.md +0 -0
  116. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/concepts/complex-features.md +0 -0
  117. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/concepts/sdd.md +0 -0
  118. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/concepts/spec-persistence.md +0 -0
  119. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/docfx.json +0 -0
  120. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/guides/evolving-specs.md +0 -0
  121. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/guides/monorepo.md +0 -0
  122. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/index.md +0 -0
  123. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/air-gapped.md +0 -0
  124. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/one-time.md +0 -0
  125. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/pipx.md +0 -0
  126. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/install/uv.md +0 -0
  127. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/installation.md +0 -0
  128. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/local-development.md +0 -0
  129. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/quickstart.md +0 -0
  130. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/authentication.md +0 -0
  131. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/bundles.md +0 -0
  132. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/core.md +0 -0
  133. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/extensions.md +0 -0
  134. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/integrations.md +0 -0
  135. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/overview.md +0 -0
  136. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/presets.md +0 -0
  137. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/reference/workflows.md +0 -0
  138. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/template/public/main.css +0 -0
  139. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/toc.yml +0 -0
  140. {specify_cli-0.12.9 → specify_cli-0.12.11}/docs/upgrade.md +0 -0
  141. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/business-analyst/README.md +0 -0
  142. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/business-analyst/bundle.yml +0 -0
  143. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/developer/README.md +0 -0
  144. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/developer/bundle.yml +0 -0
  145. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/product-manager/README.md +0 -0
  146. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/product-manager/bundle.yml +0 -0
  147. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/security-researcher/README.md +0 -0
  148. {specify_cli-0.12.9 → specify_cli-0.12.11}/examples/bundles/security-researcher/bundle.yml +0 -0
  149. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  150. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  151. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  152. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  153. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/README.md +0 -0
  154. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  155. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/README.md +0 -0
  156. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/agent-context-config.yml +0 -0
  157. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/agent-context-defaults.json +0 -0
  158. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/extension.yml +0 -0
  159. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  160. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/README.md +0 -0
  161. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  162. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  163. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/commands/speckit.bug.test.md +0 -0
  164. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/bug/extension.yml +0 -0
  165. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/README.md +0 -0
  166. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.commit.md +0 -0
  167. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.feature.md +0 -0
  168. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.initialize.md +0 -0
  169. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.remote.md +0 -0
  170. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/commands/speckit.git.validate.md +0 -0
  171. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/config-template.yml +0 -0
  172. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/extension.yml +0 -0
  173. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/git-config.yml +0 -0
  174. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  175. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  176. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/git-common.sh +0 -0
  177. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  178. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  179. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  180. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  181. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/selftest/extension.yml +0 -0
  182. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/.gitignore +0 -0
  183. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/CHANGELOG.md +0 -0
  184. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/EXAMPLE-README.md +0 -0
  185. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/LICENSE +0 -0
  186. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/README.md +0 -0
  187. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/commands/example.md +0 -0
  188. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/config-template.yml +0 -0
  189. {specify_cli-0.12.9 → specify_cli-0.12.11}/extensions/template/extension.yml +0 -0
  190. {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/CONTRIBUTING.md +0 -0
  191. {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/README.md +0 -0
  192. {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/catalog.community.json +0 -0
  193. {specify_cli-0.12.9 → specify_cli-0.12.11}/integrations/catalog.json +0 -0
  194. {specify_cli-0.12.9 → specify_cli-0.12.11}/media/bootstrap-claude-code.gif +0 -0
  195. {specify_cli-0.12.9 → specify_cli-0.12.11}/media/logo_large.webp +0 -0
  196. {specify_cli-0.12.9 → specify_cli-0.12.11}/media/logo_small.webp +0 -0
  197. {specify_cli-0.12.9 → specify_cli-0.12.11}/media/spec-kit-video-header.jpg +0 -0
  198. {specify_cli-0.12.9 → specify_cli-0.12.11}/media/specify_cli.gif +0 -0
  199. {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-April.md +0 -0
  200. {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-February.md +0 -0
  201. {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-June.md +0 -0
  202. {specify_cli-0.12.9 → specify_cli-0.12.11}/newsletters/2026-May.md +0 -0
  203. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/ARCHITECTURE.md +0 -0
  204. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/PUBLISHING.md +0 -0
  205. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/README.md +0 -0
  206. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/catalog.community.json +0 -0
  207. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/catalog.json +0 -0
  208. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/README.md +0 -0
  209. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.constitution.md +0 -0
  210. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.implement.md +0 -0
  211. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.plan.md +0 -0
  212. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.specify.md +0 -0
  213. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/commands/speckit.tasks.md +0 -0
  214. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/lean/preset.yml +0 -0
  215. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/README.md +0 -0
  216. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  217. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/commands/speckit.specify.md +0 -0
  218. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/preset.yml +0 -0
  219. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/templates/myext-template.md +0 -0
  220. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/scaffold/templates/spec-template.md +0 -0
  221. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/commands/speckit.specify.md +0 -0
  222. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  223. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/preset.yml +0 -0
  224. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/agent-file-template.md +0 -0
  225. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/checklist-template.md +0 -0
  226. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/constitution-template.md +0 -0
  227. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/plan-template.md +0 -0
  228. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/spec-template.md +0 -0
  229. {specify_cli-0.12.9 → specify_cli-0.12.11}/presets/self-test/templates/tasks-template.md +0 -0
  230. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/common.sh +0 -0
  231. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/bash/setup-tasks.sh +0 -0
  232. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/create-new-feature.ps1 +0 -0
  233. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/powershell/setup-tasks.ps1 +0 -0
  234. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/python/check_prerequisites.py +0 -0
  235. {specify_cli-0.12.9 → specify_cli-0.12.11}/scripts/python/common.py +0 -0
  236. {specify_cli-0.12.9 → specify_cli-0.12.11}/spec-driven.md +0 -0
  237. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_agent_config.py +0 -0
  238. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_assets.py +0 -0
  239. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_console.py +0 -0
  240. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_github_http.py +0 -0
  241. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_init_options.py +0 -0
  242. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_invocation_style.py +0 -0
  243. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_project.py +0 -0
  244. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_toml_string.py +0 -0
  245. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_utils.py +0 -0
  246. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/_version.py +0 -0
  247. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/agents.py +0 -0
  248. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/__init__.py +0 -0
  249. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/azure_devops.py +0 -0
  250. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/base.py +0 -0
  251. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/github.py +0 -0
  252. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/authentication/http.py +0 -0
  253. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/__init__.py +0 -0
  254. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  255. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
  256. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/__init__.py +0 -0
  257. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/project.py +0 -0
  258. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/versioning.py +0 -0
  259. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/lib/yamlio.py +0 -0
  260. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/__init__.py +0 -0
  261. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/catalog.py +0 -0
  262. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/manifest.py +0 -0
  263. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/models/records.py +0 -0
  264. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/__init__.py +0 -0
  265. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  266. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/conflict.py +0 -0
  267. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/installer.py +0 -0
  268. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/packager.py +0 -0
  269. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/primitives.py +0 -0
  270. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/references.py +0 -0
  271. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/resolver.py +0 -0
  272. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/bundler/services/validator.py +0 -0
  273. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/commands/__init__.py +0 -0
  274. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/commands/bundle/__init__.py +0 -0
  275. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/commands/init.py +0 -0
  276. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/extensions/__init__.py +0 -0
  277. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/extensions/_commands.py +0 -0
  278. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_runtime.py +0 -0
  279. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_scaffold.py +0 -0
  280. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_state.py +0 -0
  281. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integration_status.py +0 -0
  282. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/__init__.py +0 -0
  283. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_commands.py +0 -0
  284. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_helpers.py +0 -0
  285. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_install_commands.py +0 -0
  286. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  287. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_query_commands.py +0 -0
  288. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  289. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/agy/__init__.py +0 -0
  290. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/amp/__init__.py +0 -0
  291. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  292. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/base.py +0 -0
  293. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/bob/__init__.py +0 -0
  294. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/catalog.py +0 -0
  295. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/claude/__init__.py +0 -0
  296. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/cline/__init__.py +0 -0
  297. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  298. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/codex/__init__.py +0 -0
  299. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  300. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  301. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  302. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  303. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/generic/__init__.py +0 -0
  304. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/goose/__init__.py +0 -0
  305. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  306. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/junie/__init__.py +0 -0
  307. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  308. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  309. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
  310. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  311. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/manifest.py +0 -0
  312. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/omp/__init__.py +0 -0
  313. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  314. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/pi/__init__.py +0 -0
  315. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  316. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  317. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  318. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/shai/__init__.py +0 -0
  319. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  320. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/trae/__init__.py +0 -0
  321. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  322. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  323. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/integrations/zed/__init__.py +0 -0
  324. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/presets/__init__.py +0 -0
  325. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/presets/_commands.py +0 -0
  326. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/__init__.py +0 -0
  327. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/base.py +0 -0
  328. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/catalog.py +0 -0
  329. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/expressions.py +0 -0
  330. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/__init__.py +0 -0
  331. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
  332. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  333. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
  334. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
  335. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
  336. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
  337. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
  338. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
  339. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  340. {specify_cli-0.12.9 → specify_cli-0.12.11}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  341. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/constitution-template.md +0 -0
  342. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/spec-template.md +0 -0
  343. {specify_cli-0.12.9 → specify_cli-0.12.11}/templates/tasks-template.md +0 -0
  344. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/__init__.py +0 -0
  345. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/auth_helpers.py +0 -0
  346. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/bundler_helpers.py +0 -0
  347. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/conftest.py +0 -0
  348. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/contract/test_bundle_cli.py +0 -0
  349. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/contract/test_catalog_schema.py +0 -0
  350. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/contract/test_manifest_schema.py +0 -0
  351. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/__init__.py +0 -0
  352. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/bug/__init__.py +0 -0
  353. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/bug/test_bug_extension.py +0 -0
  354. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/git/__init__.py +0 -0
  355. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_agent_context_cli_free.py +0 -0
  356. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  357. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  358. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/plan.md +0 -0
  359. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/spec.md +0 -0
  360. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/hooks/tasks.md +0 -0
  361. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/http_helpers.py +0 -0
  362. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_catalog_stack.py +0 -0
  363. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_init_install.py +0 -0
  364. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_install_flow.py +0 -0
  365. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_local_install.py +0 -0
  366. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_offline.py +0 -0
  367. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integration/test_bundler_security_paths.py +0 -0
  368. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/__init__.py +0 -0
  369. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/conftest.py +0 -0
  370. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_base.py +0 -0
  371. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_cli.py +0 -0
  372. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_extra_args.py +0 -0
  373. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_home_isolation.py +0 -0
  374. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_agy.py +0 -0
  375. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_amp.py +0 -0
  376. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_auggie.py +0 -0
  377. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_markdown.py +0 -0
  378. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_skills.py +0 -0
  379. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_toml.py +0 -0
  380. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_base_yaml.py +0 -0
  381. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_bob.py +0 -0
  382. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_claude.py +0 -0
  383. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_cline.py +0 -0
  384. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_codebuddy.py +0 -0
  385. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_codex.py +0 -0
  386. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_copilot.py +0 -0
  387. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_firebender.py +0 -0
  388. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_gemini.py +0 -0
  389. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_generic.py +0 -0
  390. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_goose.py +0 -0
  391. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_hermes.py +0 -0
  392. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_junie.py +0 -0
  393. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_kilocode.py +0 -0
  394. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_kimi.py +0 -0
  395. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_kiro_cli.py +0 -0
  396. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_lingma.py +0 -0
  397. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_omp.py +0 -0
  398. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_opencode.py +0 -0
  399. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_pi.py +0 -0
  400. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_qodercli.py +0 -0
  401. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_qwen.py +0 -0
  402. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_rovodev.py +0 -0
  403. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_scaffold.py +0 -0
  404. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_shai.py +0 -0
  405. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_state.py +0 -0
  406. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_subcommand.py +0 -0
  407. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_tabnine.py +0 -0
  408. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_trae.py +0 -0
  409. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_zcode.py +0 -0
  410. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_integration_zed.py +0 -0
  411. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_manifest.py +0 -0
  412. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_registry.py +0 -0
  413. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  414. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/self_upgrade_helpers.py +0 -0
  415. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_agent_config_consistency.py +0 -0
  416. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_branch_numbering.py +0 -0
  417. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_check_prerequisites_paths_only.py +0 -0
  418. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_check_prerequisites_python_parity.py +0 -0
  419. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_check_tool.py +0 -0
  420. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_cli_version.py +0 -0
  421. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_commands_package.py +0 -0
  422. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_console_imports.py +0 -0
  423. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extension_skills.py +0 -0
  424. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_extensions.py +0 -0
  425. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_github_http.py +0 -0
  426. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_github_workflows.py +0 -0
  427. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_init_dir.py +0 -0
  428. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_init_dir_cli.py +0 -0
  429. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_live_transient_windows.py +0 -0
  430. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_post_process.py +0 -0
  431. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_presets.py +0 -0
  432. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_ps1_encoding.py +0 -0
  433. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_registrar_path_traversal.py +0 -0
  434. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_detection.py +0 -0
  435. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_execution.py +0 -0
  436. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_guidance.py +0 -0
  437. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_self_upgrade_verification.py +0 -0
  438. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_setup_plan_feature_json.py +0 -0
  439. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_setup_plan_no_overwrite.py +0 -0
  440. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_shared_infra_integrity.py +0 -0
  441. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_upgrade.py +0 -0
  442. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_utils.py +0 -0
  443. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_utils_assets_imports.py +0 -0
  444. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_version_imports.py +0 -0
  445. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/test_workflow_run_without_project.py +0 -0
  446. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_catalog_config.py +0 -0
  447. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_conflict.py +0 -0
  448. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_packager.py +0 -0
  449. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_primitives.py +0 -0
  450. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_records.py +0 -0
  451. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_references.py +0 -0
  452. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_resolver.py +0 -0
  453. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_validator.py +0 -0
  454. {specify_cli-0.12.9 → specify_cli-0.12.11}/tests/unit/test_bundler_versioning.py +0 -0
  455. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/ARCHITECTURE.md +0 -0
  456. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/PUBLISHING.md +0 -0
  457. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/README.md +0 -0
  458. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/catalog.community.json +0 -0
  459. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/catalog.json +0 -0
  460. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/speckit/workflow.yml +0 -0
  461. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/step-catalog.community.json +0 -0
  462. {specify_cli-0.12.9 → specify_cli-0.12.11}/workflows/step-catalog.json +0 -0
@@ -5,4 +5,3 @@
5
5
  /extensions/catalog.community.json @mnriem
6
6
  /integrations/catalog.community.json @mnriem
7
7
  /presets/catalog.community.json @mnriem
8
-
@@ -7,7 +7,7 @@ body:
7
7
  attributes:
8
8
  value: |
9
9
  Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
10
-
10
+
11
11
  **Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, 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
@@ -7,7 +7,7 @@ body:
7
7
  attributes:
8
8
  value: |
9
9
  Thanks for contributing an extension! This template helps you submit your extension to the community catalog.
10
-
10
+
11
11
  **Before submitting:**
12
12
  - Review the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md)
13
13
  - Ensure your extension has a valid `extension.yml` manifest
@@ -209,9 +209,9 @@ body:
209
209
  **Tested on:**
210
210
  - macOS 14.0 with Spec Kit v0.1.0
211
211
  - Linux Ubuntu 22.04 with Spec Kit v0.1.0
212
-
212
+
213
213
  **Test project:** [Link or description]
214
-
214
+
215
215
  **Test scenarios:**
216
216
  1. Installed extension
217
217
  2. Configured settings
@@ -230,7 +230,7 @@ body:
230
230
  ```bash
231
231
  # Install extension
232
232
  specify extension add <extension-name> --from https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip
233
-
233
+
234
234
  # Use a command
235
235
  /speckit.your-extension.command-name arg1 arg2
236
236
  ```
@@ -7,7 +7,7 @@ body:
7
7
  attributes:
8
8
  value: |
9
9
  Thanks for contributing a preset! This template helps you submit your preset to the community catalog.
10
-
10
+
11
11
  **Before submitting:**
12
12
  - Review the [Preset Publishing Guide](https://github.com/github/spec-kit/blob/main/presets/PUBLISHING.md)
13
13
  - Ensure your preset has a valid `preset.yml` manifest
@@ -19,4 +19,3 @@
19
19
  - [ ] I **did** use AI assistance (describe below)
20
20
 
21
21
  <!-- If you used AI, briefly describe how (e.g., "Code generated by Copilot", "Consulted ChatGPT for approach"): -->
22
-
@@ -37,7 +37,7 @@ jobs:
37
37
  fi
38
38
 
39
39
  - name: Run markdownlint-cli2
40
- uses: DavidAnson/markdownlint-cli2-action@ded1f9488f68a970bc66ea5619e13e9b52e601cd # v23
40
+ uses: DavidAnson/markdownlint-cli2-action@8de2aa07cae85fd17c0b35642db70cf5495f1d25 # v24.0.0
41
41
  with:
42
42
  globs: |
43
43
  '**/*.md'
@@ -32,7 +32,7 @@ jobs:
32
32
  ref: refs/tags/${{ inputs.tag }}
33
33
 
34
34
  - name: Install uv
35
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
35
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
36
36
 
37
37
  - name: Set up Python
38
38
  uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
@@ -74,7 +74,7 @@ jobs:
74
74
  path: dist/
75
75
 
76
76
  - name: Install uv
77
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
77
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
78
78
 
79
79
  - name: Publish to PyPI
80
80
  run: uv publish
@@ -20,24 +20,24 @@ jobs:
20
20
  days-before-stale: 150
21
21
  # Days of inactivity before a stale issue or PR is closed (after being marked stale)
22
22
  days-before-close: 30
23
-
23
+
24
24
  # Stale issue settings
25
25
  stale-issue-message: 'This issue has been automatically marked as stale because it has not had any activity for 150 days. It will be closed in 30 days if no further activity occurs.'
26
26
  close-issue-message: 'This issue has been automatically closed due to inactivity (180 days total). If you believe this issue is still relevant, please reopen it or create a new issue.'
27
27
  stale-issue-label: 'stale'
28
-
28
+
29
29
  # Stale PR settings
30
30
  stale-pr-message: 'This pull request has been automatically marked as stale because it has not had any activity for 150 days. It will be closed in 30 days if no further activity occurs.'
31
31
  close-pr-message: 'This pull request has been automatically closed due to inactivity (180 days total). If you believe this PR is still relevant, please reopen it or create a new PR.'
32
32
  stale-pr-label: 'stale'
33
-
33
+
34
34
  # Exempt issues and PRs with these labels from being marked as stale
35
35
  exempt-issue-labels: 'pinned,security'
36
36
  exempt-pr-labels: 'pinned,security'
37
-
37
+
38
38
  # Only issues or PRs with all of these labels are checked
39
39
  # Leave empty to check all issues and PRs
40
40
  any-of-labels: ''
41
-
41
+
42
42
  # Operations per run (helps avoid rate limits)
43
43
  operations-per-run: 250
@@ -16,7 +16,7 @@ jobs:
16
16
  uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
17
17
 
18
18
  - name: Install uv
19
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
19
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
20
20
 
21
21
  - name: Set up Python
22
22
  uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
@@ -37,7 +37,7 @@ jobs:
37
37
  uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
38
38
 
39
39
  - name: Install uv
40
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
40
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
41
41
 
42
42
  - name: Set up Python ${{ matrix.python-version }}
43
43
  uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
@@ -26,4 +26,4 @@
26
26
  "ignores": [
27
27
  ".genreleases/"
28
28
  ]
29
- }
29
+ }
@@ -0,0 +1,12 @@
1
+ ---
2
+ repos:
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: v6.0.0
5
+ hooks:
6
+ - id: check-executables-have-shebangs
7
+ - id: check-yaml
8
+ exclude: \.lock\.yml$
9
+ - id: end-of-file-fixer
10
+ exclude: \.lock\.yml$
11
+ - id: trailing-whitespace
12
+ exclude: \.lock\.yml$
@@ -2,6 +2,36 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.12.11] - 2026-07-10
6
+
7
+ ### Changed
8
+
9
+ - fix(agent-context): discover nested plan.md in scoped layouts (#3024) (#3301)
10
+ - fix(auth): return no matches, not raw ValueError, for a malformed URL (#3437)
11
+ - fix(catalogs): raise catalog error, not raw ValueError, on a malformed URL (#3435)
12
+ - fix(bundler): raise BundlerError, not raw ValueError, on a malformed catalog URL (#3433)
13
+ - chore: add pre-commit config and fix trailing whitespace/end-of-file (#3430)
14
+ - Add EARS Requirements Syntax extension to community catalog (#3407)
15
+ - Add Spec Kit Figma extension to community catalog (#3408)
16
+ - fix(workflows): report validation errors instead of crashing on non-string workflow.yml scalars (#3421)
17
+ - fix(templates): remove self-referencing path in plan-template.md note (#3417)
18
+ - chore: release 0.12.10, begin 0.12.11.dev0 development (#3453)
19
+
20
+ ## [0.12.10] - 2026-07-10
21
+
22
+ ### Changed
23
+
24
+ - chore(deps): bump astral-sh/setup-uv from 8.2.0 to 8.3.2 (#3439)
25
+ - chore(deps): bump DavidAnson/markdownlint-cli2-action (#3438)
26
+ - fix(templates): correct phase numbering in plan.md (#3416)
27
+ - fix(git-ext): honor explicit -Number 0 in PowerShell branch creation (#3412)
28
+ - docs: add 'spectatui' entry to friends.md (#3362)
29
+ - test: pin interpreter probe so py-template render test passes on Windows (#3428)
30
+ - feat(workflows): make shell step timeout configurable (#3404)
31
+ - fix: find plans in nested spec directories (#3405)
32
+ - feat(templates): add py: lines to command templates' scripts frontmatter (#3403)
33
+ - chore: release 0.12.9, begin 0.12.10.dev0 development (#3426)
34
+
5
35
  ## [0.12.9] - 2026-07-09
6
36
 
7
37
  ### Changed
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specify-cli
3
- Version: 0.12.9
3
+ Version: 0.12.11
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
@@ -6,4 +6,3 @@ obj/
6
6
  # Temporary files
7
7
  *.tmp
8
8
  *.log
9
-
@@ -52,6 +52,7 @@ The following community-contributed extensions are available in [`catalog.commun
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
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) |
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) |
55
56
  | Extensify | Create and validate extensions and extension catalogs | `process` | Read+Write | [extensify](https://github.com/mnriem/spec-kit-extensions/tree/main/extensify) |
56
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) |
57
58
  | FixIt Extension | Spec-aware bug fixing — maps bugs to spec artifacts, proposes a plan, applies minimal changes | `code` | Read+Write | [spec-kit-fixit](https://github.com/speckit-community/spec-kit-fixit) |
@@ -117,6 +118,7 @@ The following community-contributed extensions are available in [`catalog.commun
117
118
  | Spec Critique Extension | Dual-lens critical review of spec and plan from product strategy and engineering risk perspectives | `docs` | Read-only | [spec-kit-critique](https://github.com/arunt14/spec-kit-critique) |
118
119
  | 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-) |
119
120
  | 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
+ | 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) |
120
122
  | 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) |
121
123
  | 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) |
122
124
  | 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) |
@@ -14,3 +14,5 @@ Community projects that extend, visualize, or build on Spec Kit:
14
14
  - **[SpecKit Companion](https://marketplace.visualstudio.com/items?itemName=alfredoperez.speckit-companion)** — A VS Code extension that brings a visual GUI to Spec Kit. Browse specs in a rich markdown viewer with clickable file references, create specifications with image attachments, comment and refine each step inline (GitHub-style review), track your progress through the SDD workflow with a visual phase stepper, and manage steering documents like constitutions and templates.
15
15
 
16
16
  - **[cc-spec-kit](https://github.com/speckit-community/cc-spec-kit)** — Community-maintained plugin for Claude Code and GitHub Copilot CLI that installs Spec Kit skills via the plugin marketplace.
17
+
18
+ - **[spectatui](https://github.com/tinesoft/spectatui)** — A terminal UI (TUI) dashboard for Spec Kit that lets you track features, manage specifications, integrations, presets, workflows, and extensions, and monitor AI agent workflows. Attach to existing AI sessions or launch new ones from your terminal. Keyboard and mouse support. Light/dark theme support. Customizable and performance-oriented. Requires the `specify` CLI in your PATH.
@@ -15,7 +15,7 @@ The script reads the agent-context extension config at
15
15
  - `context_files` — optional project-relative paths for multiple coding agent context files. When non-empty, the script updates each listed file and the list takes precedence over `context_file`.
16
16
  - `context_markers.start` / `.end` — the delimiters surrounding the managed section. Defaults to `<!-- SPECKIT START -->` and `<!-- SPECKIT END -->` when the field is missing.
17
17
 
18
- It then creates, replaces, or appends the managed block so that the section points at the most recent plan path when one can be discovered (`specs/<feature>/plan.md`).
18
+ It then creates, replaces, or appends the managed block so that the section points at the most recent plan path when one can be discovered (any `plan.md` under `specs/`, including nested scoped layouts such as `specs/<scope>/<feature>/plan.md`).
19
19
 
20
20
  If `context_files` and `context_file` are empty, the command reports nothing to do and exits successfully. Context file paths must stay project-relative; absolute paths, Windows drive paths, backslash separators, and `..` path segments are rejected.
21
21
 
@@ -24,4 +24,4 @@ If `context_files` and `context_file` are empty, the command reports nothing to
24
24
  - **Bash**: `.specify/extensions/agent-context/scripts/bash/update-agent-context.sh [plan_path]`
25
25
  - **PowerShell**: `.specify/extensions/agent-context/scripts/powershell/update-agent-context.ps1 [plan_path]`
26
26
 
27
- When `plan_path` is omitted, the script auto-detects the most recently modified `specs/*/plan.md`.
27
+ When `plan_path` is omitted, the script auto-detects the most recently modified `specs/**/plan.md` (searched recursively, so nested scoped layouts are discovered).
@@ -12,7 +12,7 @@
12
12
  #
13
13
  # When `plan_path` is omitted, the script derives it from `.specify/feature.json`
14
14
  # (written by /speckit-specify). Falls back to the most recently modified
15
- # `specs/*/plan.md` only when feature.json is absent or its plan does not exist yet.
15
+ # `specs/**/plan.md` only when feature.json is absent or its plan does not exist yet.
16
16
 
17
17
  set -euo pipefail
18
18
 
@@ -307,16 +307,28 @@ import sys
307
307
  from pathlib import Path
308
308
  root = Path(sys.argv[1]).resolve()
309
309
  specs = root / "specs"
310
- plans = sorted(
311
- specs.glob("*/plan.md"),
312
- key=lambda p: p.stat().st_mtime,
313
- reverse=True,
314
- )
315
- if plans:
310
+
311
+ def _resolved_rel(p):
312
+ # Resolve symlinks before checking containment: relative_to() is lexical
313
+ # and would otherwise accept a plan reached through a specs/ symlink that
314
+ # points outside the project, emitting an in-project-looking path for an
315
+ # out-of-project file (or picking it as "most recent").
316
316
  try:
317
- print(plans[0].relative_to(root).as_posix())
318
- except ValueError:
319
- print("")
317
+ return p.resolve().relative_to(root)
318
+ except (OSError, ValueError):
319
+ return None
320
+
321
+ # Recurse (rather than the old one-level specs/*/plan.md glob) so scoped layouts
322
+ # created via SPECIFY_FEATURE_DIRECTORY, e.g. specs/<scope>/<feature>/plan.md,
323
+ # are still discovered when feature.json is absent (#3024).
324
+ candidates = []
325
+ for p in specs.rglob("plan.md"):
326
+ rel = _resolved_rel(p)
327
+ if rel:
328
+ candidates.append((p, rel))
329
+ candidates.sort(key=lambda pr: pr[0].stat().st_mtime, reverse=True)
330
+ if candidates:
331
+ print(candidates[0][1].as_posix())
320
332
  else:
321
333
  print("")
322
334
  PY
@@ -12,7 +12,7 @@
12
12
  #
13
13
  # When `plan_path` is omitted, the script derives it from `.specify/feature.json`
14
14
  # (written by /speckit-specify). Falls back to the most recently modified
15
- # `specs/*/plan.md` only when feature.json is absent or its plan does not exist yet.
15
+ # `specs/**/plan.md` only when feature.json is absent or its plan does not exist yet.
16
16
 
17
17
  [CmdletBinding()]
18
18
  param(
@@ -426,9 +426,11 @@ if (-not $PlanPath) {
426
426
  if (-not $PlanPath) {
427
427
  try {
428
428
  $specsDir = Join-Path $ProjectRoot 'specs'
429
- $candidate = Get-ChildItem -Path $specsDir -Directory -ErrorAction SilentlyContinue |
430
- ForEach-Object { Get-Item -LiteralPath (Join-Path $_.FullName 'plan.md') -ErrorAction SilentlyContinue } |
431
- Where-Object { $_ } |
429
+ # Recurse (rather than the old one-level specs/*/plan.md scan) so scoped
430
+ # layouts created via SPECIFY_FEATURE_DIRECTORY, e.g.
431
+ # specs/<scope>/<feature>/plan.md, are still discovered when
432
+ # feature.json is absent (#3024).
433
+ $candidate = Get-ChildItem -Path $specsDir -Filter 'plan.md' -File -Recurse -ErrorAction SilentlyContinue |
432
434
  Sort-Object LastWriteTime -Descending |
433
435
  Select-Object -First 1
434
436
  if ($candidate) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-07-07T00:00:00Z",
3
+ "updated_at": "2026-07-08T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
5
5
  "extensions": {
6
6
  "aide": {
@@ -1180,6 +1180,39 @@
1180
1180
  "created_at": "2026-03-13T00:00:00Z",
1181
1181
  "updated_at": "2026-03-13T00:00:00Z"
1182
1182
  },
1183
+ "ears": {
1184
+ "name": "EARS Requirements Syntax",
1185
+ "id": "ears",
1186
+ "description": "Author, lint, and convert requirements using EARS (Easy Approach to Requirements Syntax) - the five industry-standard sentence patterns for unambiguous, testable requirements.",
1187
+ "author": "dhruv-15-03",
1188
+ "version": "1.0.0",
1189
+ "download_url": "https://github.com/dhruv-15-03/spec-kit-ears/archive/refs/tags/v1.0.0.zip",
1190
+ "repository": "https://github.com/dhruv-15-03/spec-kit-ears",
1191
+ "homepage": "https://github.com/dhruv-15-03/spec-kit-ears",
1192
+ "documentation": "https://github.com/dhruv-15-03/spec-kit-ears/blob/main/README.md",
1193
+ "changelog": "https://github.com/dhruv-15-03/spec-kit-ears/blob/main/CHANGELOG.md",
1194
+ "license": "MIT",
1195
+ "category": "docs",
1196
+ "effect": "read-write",
1197
+ "requires": {
1198
+ "speckit_version": ">=0.9.0"
1199
+ },
1200
+ "provides": {
1201
+ "commands": 3,
1202
+ "hooks": 0
1203
+ },
1204
+ "tags": [
1205
+ "ears",
1206
+ "requirements",
1207
+ "specification",
1208
+ "quality"
1209
+ ],
1210
+ "verified": false,
1211
+ "downloads": 0,
1212
+ "stars": 0,
1213
+ "created_at": "2026-07-08T00:00:00Z",
1214
+ "updated_at": "2026-07-08T00:00:00Z"
1215
+ },
1183
1216
  "extensify": {
1184
1217
  "name": "Extensify",
1185
1218
  "id": "extensify",
@@ -1213,6 +1246,47 @@
1213
1246
  "created_at": "2026-03-18T00:00:00Z",
1214
1247
  "updated_at": "2026-04-23T00:00:00Z"
1215
1248
  },
1249
+ "figma": {
1250
+ "name": "Spec Kit Figma",
1251
+ "id": "figma",
1252
+ "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.",
1253
+ "author": "Fyloss",
1254
+ "version": "1.6.0",
1255
+ "download_url": "https://github.com/Fyloss/spec-kit-figma/archive/refs/tags/v1.6.0.zip",
1256
+ "repository": "https://github.com/Fyloss/spec-kit-figma",
1257
+ "homepage": "https://github.com/Fyloss/spec-kit-figma",
1258
+ "documentation": "https://github.com/Fyloss/spec-kit-figma/blob/main/docs/INSTALL.md",
1259
+ "changelog": "https://github.com/Fyloss/spec-kit-figma/blob/main/CHANGELOG.md",
1260
+ "license": "MIT",
1261
+ "category": "integration",
1262
+ "effect": "read-write",
1263
+ "requires": {
1264
+ "speckit_version": ">=0.1.0",
1265
+ "tools": [
1266
+ { "name": "git", "required": true },
1267
+ { "name": "bash", "required": false },
1268
+ { "name": "curl", "required": false },
1269
+ { "name": "jq", "required": false },
1270
+ { "name": "pwsh", "required": false }
1271
+ ]
1272
+ },
1273
+ "provides": {
1274
+ "commands": 5,
1275
+ "hooks": 6
1276
+ },
1277
+ "tags": [
1278
+ "figma",
1279
+ "design",
1280
+ "frontend",
1281
+ "ui",
1282
+ "design-system"
1283
+ ],
1284
+ "verified": false,
1285
+ "downloads": 0,
1286
+ "stars": 0,
1287
+ "created_at": "2026-07-08T00:00:00Z",
1288
+ "updated_at": "2026-07-08T00:00:00Z"
1289
+ },
1216
1290
  "fix-findings": {
1217
1291
  "name": "Fix Findings",
1218
1292
  "id": "fix-findings",
@@ -48,4 +48,4 @@
48
48
  ]
49
49
  }
50
50
  }
51
- }
51
+ }
@@ -446,7 +446,10 @@ if ($env:GIT_BRANCH_NAME) {
446
446
  $branchSuffix = Get-BranchName -Description $featureDesc
447
447
  }
448
448
 
449
- if ($Timestamp -and $Number -ne 0) {
449
+ # Warn if -Number and -Timestamp are both specified. Use ContainsKey (not
450
+ # `-ne 0`) so an explicit `-Number 0` is also detected, matching the bash twin's
451
+ # `[ -n "$BRANCH_NUMBER" ]` check.
452
+ if ($Timestamp -and $PSBoundParameters.ContainsKey('Number')) {
450
453
  Write-Warning "[specify] Warning: -Number is ignored when -Timestamp is used"
451
454
  $Number = 0
452
455
  }
@@ -456,7 +459,10 @@ if ($env:GIT_BRANCH_NAME) {
456
459
  $branchName = New-BranchName -FeatureNum $featureNum -BranchSuffix $branchSuffix
457
460
  } else {
458
461
  $branchScopePrefix = Get-BranchScopePrefix -Template $branchTemplate -BranchSuffix $branchSuffix
459
- if ($Number -eq 0) {
462
+ # Auto-detect the next number only when -Number was not supplied; an
463
+ # explicit value (including 0) is honored, matching the bash twin's
464
+ # `[ -z "$BRANCH_NUMBER" ]` check.
465
+ if (-not $PSBoundParameters.ContainsKey('Number')) {
460
466
  if ($DryRun -and $hasGit) {
461
467
  $Number = Get-NextBranchNumber -SpecsDir $specsDir -SkipFetch -ScopePrefix $branchScopePrefix
462
468
  } elseif ($DryRun) {
@@ -48,7 +48,7 @@ cat .specify/extensions/.registry/$ARGUMENTS.json
48
48
 
49
49
  ### Step 4: Verification Report
50
50
 
51
- Analyze the standard output of the three steps.
51
+ Analyze the standard output of the three steps.
52
52
  Generate a terminal-style test output format detailing the results of discovery, installation, and registration. Return this directly to the user.
53
53
 
54
54
  Example output format:
@@ -76,5 +76,3 @@ Areas under discussion or in progress for future development:
76
76
  - **Continued agent expansion** -- seven new agents were added in March alone. The agent-agnostic design means support for emerging tools can be added by anyone. [\[byteiota.com\]](https://byteiota.com/spec-driven-development-kills-vibe-coding-march-2026/)
77
77
  - **Experience simplification** -- the preset system, custom workflows, and growing walkthrough library lower the learning curve, but extension discoverability will need a more robust solution as the catalog grows. [\[github.com\]](https://github.com/github/spec-kit/releases)
78
78
  - **Toward a stable release** -- nine releases in one month reflects pre-1.0 momentum. Reaching 1.0 will require stabilizing the extension and preset APIs and ensuring backward compatibility across the agent and extension surface area. [\[github.com\]](https://github.com/github/spec-kit/blob/main/newsletters/2026-February.md)
79
-
80
-
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "specify-cli"
3
- version = "0.12.9"
3
+ version = "0.12.11"
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"
@@ -83,4 +83,3 @@ extend-select = [
83
83
  "S604", # call-with-shell-equals-true
84
84
  "S605", # start-process-with-a-shell
85
85
  ]
86
-
@@ -57,13 +57,13 @@ OPTIONS:
57
57
  EXAMPLES:
58
58
  # Check task prerequisites (plan.md required)
59
59
  ./check-prerequisites.sh --json
60
-
60
+
61
61
  # Check implementation prerequisites (plan.md + tasks.md required)
62
62
  ./check-prerequisites.sh --json --require-tasks --include-tasks
63
-
63
+
64
64
  # Get feature paths only (no validation)
65
65
  ./check-prerequisites.sh --paths-only
66
-
66
+
67
67
  EOF
68
68
  exit 0
69
69
  ;;
@@ -182,13 +182,13 @@ else
182
182
  # Text output
183
183
  echo "FEATURE_DIR:$FEATURE_DIR"
184
184
  echo "AVAILABLE_DOCS:"
185
-
185
+
186
186
  # Show status of each potential document
187
187
  check_file "$RESEARCH" "research.md"
188
188
  check_file "$DATA_MODEL" "data-model.md"
189
189
  check_dir "$CONTRACTS_DIR" "contracts/"
190
190
  check_file "$QUICKSTART" "quickstart.md"
191
-
191
+
192
192
  if $INCLUDE_TASKS; then
193
193
  check_file "$TASKS" "tasks.md"
194
194
  fi
@@ -94,7 +94,7 @@ fi
94
94
  get_highest_from_specs() {
95
95
  local specs_dir="$1"
96
96
  local highest=0
97
-
97
+
98
98
  if [ -d "$specs_dir" ]; then
99
99
  for dir in "$specs_dir"/*; do
100
100
  [ -d "$dir" ] || continue
@@ -109,7 +109,7 @@ get_highest_from_specs() {
109
109
  fi
110
110
  done
111
111
  fi
112
-
112
+
113
113
  echo "$highest"
114
114
  }
115
115
 
@@ -135,19 +135,19 @@ fi
135
135
  # Function to generate branch name with stop word filtering and length filtering
136
136
  generate_branch_name() {
137
137
  local description="$1"
138
-
138
+
139
139
  # Common stop words to filter out
140
140
  local stop_words="^(i|a|an|the|to|for|of|in|on|at|by|with|from|is|are|was|were|be|been|being|have|has|had|do|does|did|will|would|should|could|can|may|might|must|shall|this|that|these|those|my|your|our|their|want|need|add|get|set)$"
141
-
141
+
142
142
  # Convert to lowercase and split into words
143
143
  local clean_name=$(printf '%s' "$description" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/ /g')
144
-
144
+
145
145
  # Filter words: remove stop words and words shorter than 3 chars (unless they're uppercase acronyms in original)
146
146
  local meaningful_words=()
147
147
  for word in $clean_name; do
148
148
  # Skip empty words
149
149
  [ -z "$word" ] && continue
150
-
150
+
151
151
  # Keep words that are NOT stop words AND (length >= 3 OR are potential acronyms)
152
152
  if ! echo "$word" | grep -qiE "$stop_words"; then
153
153
  if [ ${#word} -ge 3 ]; then
@@ -160,12 +160,12 @@ generate_branch_name() {
160
160
  fi
161
161
  fi
162
162
  done
163
-
163
+
164
164
  # If we have meaningful words, use first 3-4 of them
165
165
  if [ ${#meaningful_words[@]} -gt 0 ]; then
166
166
  local max_words=3
167
167
  if [ ${#meaningful_words[@]} -eq 4 ]; then max_words=4; fi
168
-
168
+
169
169
  local result=""
170
170
  local count=0
171
171
  for word in "${meaningful_words[@]}"; do
@@ -221,15 +221,15 @@ if [ ${#BRANCH_NAME} -gt $MAX_BRANCH_LENGTH ]; then
221
221
  # Account for prefix length: timestamp (15) + hyphen (1) = 16, or sequential (3) + hyphen (1) = 4
222
222
  PREFIX_LENGTH=$(( ${#FEATURE_NUM} + 1 ))
223
223
  MAX_SUFFIX_LENGTH=$((MAX_BRANCH_LENGTH - PREFIX_LENGTH))
224
-
224
+
225
225
  # Truncate suffix at word boundary if possible
226
226
  TRUNCATED_SUFFIX=$(echo "$BRANCH_SUFFIX" | cut -c1-$MAX_SUFFIX_LENGTH)
227
227
  # Remove trailing hyphen if truncation created one
228
228
  TRUNCATED_SUFFIX=$(echo "$TRUNCATED_SUFFIX" | sed 's/-$//')
229
-
229
+
230
230
  ORIGINAL_BRANCH_NAME="$BRANCH_NAME"
231
231
  BRANCH_NAME="${FEATURE_NUM}-${TRUNCATED_SUFFIX}"
232
-
232
+
233
233
  >&2 echo "[specify] Warning: Branch name exceeded GitHub's 244-byte limit"
234
234
  >&2 echo "[specify] Original: $ORIGINAL_BRANCH_NAME (${#ORIGINAL_BRANCH_NAME} bytes)"
235
235
  >&2 echo "[specify] Truncated to: $BRANCH_NAME (${#BRANCH_NAME} bytes)"
@@ -8,17 +8,17 @@ ARGS=()
8
8
 
9
9
  for arg in "$@"; do
10
10
  case "$arg" in
11
- --json)
12
- JSON_MODE=true
11
+ --json)
12
+ JSON_MODE=true
13
13
  ;;
14
- --help|-h)
14
+ --help|-h)
15
15
  echo "Usage: $0 [--json]"
16
16
  echo " --json Output results in JSON format"
17
17
  echo " --help Show this help message"
18
- exit 0
18
+ exit 0
19
19
  ;;
20
- *)
21
- ARGS+=("$arg")
20
+ *)
21
+ ARGS+=("$arg")
22
22
  ;;
23
23
  esac
24
24
  done
@@ -77,8 +77,7 @@ if $JSON_MODE; then
77
77
  fi
78
78
  else
79
79
  echo "FEATURE_SPEC: $FEATURE_SPEC"
80
- echo "IMPL_PLAN: $IMPL_PLAN"
80
+ echo "IMPL_PLAN: $IMPL_PLAN"
81
81
  echo "SPECS_DIR: $FEATURE_DIR"
82
82
  echo "BRANCH: $CURRENT_BRANCH"
83
83
  fi
84
-