specify-cli 0.11.8__tar.gz → 0.11.9__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 (445) hide show
  1. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/publish-pypi.yml +1 -1
  2. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/test.yml +2 -2
  3. {specify_cli-0.11.8 → specify_cli-0.11.9}/CHANGELOG.md +18 -0
  4. {specify_cli-0.11.8 → specify_cli-0.11.9}/PKG-INFO +1 -1
  5. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/presets.md +1 -1
  6. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/authentication.md +27 -0
  7. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/extensions.md +1 -0
  8. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/integrations.md +3 -0
  9. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/presets.md +5 -5
  10. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/scripts/bash/update-agent-context.sh +67 -12
  11. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +81 -17
  12. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/catalog.community.json +12 -12
  13. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +4 -1
  14. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/catalog.community.json +6 -7
  15. {specify_cli-0.11.8 → specify_cli-0.11.9}/pyproject.toml +1 -1
  16. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/__init__.py +4 -2
  17. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_github_http.py +56 -31
  18. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/http.py +14 -0
  19. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/extensions/__init__.py +8 -2
  20. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/claude/__init__.py +11 -7
  21. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/presets/__init__.py +11 -2
  22. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/presets/_commands.py +4 -1
  23. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/analyze.md +2 -0
  24. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/checklist.md +2 -0
  25. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/clarify.md +2 -0
  26. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/constitution.md +2 -0
  27. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/converge.md +2 -0
  28. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/implement.md +2 -0
  29. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/plan.md +2 -0
  30. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/specify.md +2 -0
  31. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/tasks.md +2 -0
  32. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/taskstoissues.md +2 -0
  33. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/git/test_git_extension.py +33 -0
  34. specify_cli-0.11.9/tests/extensions/test_update_agent_context_feature_json.py +211 -0
  35. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_claude.py +40 -53
  36. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_authentication.py +42 -0
  37. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extensions.py +35 -0
  38. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_github_http.py +114 -0
  39. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_presets.py +98 -0
  40. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_timestamp_branches.py +30 -0
  41. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_workflows.py +131 -0
  42. {specify_cli-0.11.8 → specify_cli-0.11.9}/.devcontainer/devcontainer.json +0 -0
  43. {specify_cli-0.11.8 → specify_cli-0.11.9}/.devcontainer/post-create.sh +0 -0
  44. {specify_cli-0.11.8 → specify_cli-0.11.9}/.editorconfig +0 -0
  45. {specify_cli-0.11.8 → specify_cli-0.11.9}/.gitattributes +0 -0
  46. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/CODEOWNERS +0 -0
  47. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
  48. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  49. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  50. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  51. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  52. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  53. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  54. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/aw/actions-lock.json +0 -0
  55. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/dependabot.yml +0 -0
  56. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/skills/add-community-extension/SKILL.md +0 -0
  57. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/RELEASE-PROCESS.md +0 -0
  58. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-extension.lock.yml +0 -0
  59. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-extension.md +0 -0
  60. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-preset.lock.yml +0 -0
  61. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-preset.md +0 -0
  62. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/bug-assess.lock.yml +0 -0
  63. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/bug-assess.md +0 -0
  64. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/catalog-assign.yml +0 -0
  65. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/codeql.yml +0 -0
  66. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/docs.yml +0 -0
  67. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/lint.yml +0 -0
  68. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/release-trigger.yml +0 -0
  69. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/release.yml +0 -0
  70. {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/stale.yml +0 -0
  71. {specify_cli-0.11.8 → specify_cli-0.11.9}/.gitignore +0 -0
  72. {specify_cli-0.11.8 → specify_cli-0.11.9}/.markdownlint-cli2.jsonc +0 -0
  73. {specify_cli-0.11.8 → specify_cli-0.11.9}/.zenodo.json +0 -0
  74. {specify_cli-0.11.8 → specify_cli-0.11.9}/AGENTS.md +0 -0
  75. {specify_cli-0.11.8 → specify_cli-0.11.9}/CITATION.cff +0 -0
  76. {specify_cli-0.11.8 → specify_cli-0.11.9}/CODE_OF_CONDUCT.md +0 -0
  77. {specify_cli-0.11.8 → specify_cli-0.11.9}/CONTRIBUTING.md +0 -0
  78. {specify_cli-0.11.8 → specify_cli-0.11.9}/DEVELOPMENT.md +0 -0
  79. {specify_cli-0.11.8 → specify_cli-0.11.9}/LICENSE +0 -0
  80. {specify_cli-0.11.8 → specify_cli-0.11.9}/README.md +0 -0
  81. {specify_cli-0.11.8 → specify_cli-0.11.9}/SECURITY.md +0 -0
  82. {specify_cli-0.11.8 → specify_cli-0.11.9}/SUPPORT.md +0 -0
  83. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/.gitignore +0 -0
  84. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/README.md +0 -0
  85. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/extensions.md +0 -0
  86. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/friends.md +0 -0
  87. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/overview.md +0 -0
  88. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/walkthroughs.md +0 -0
  89. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/concepts/complex-features.md +0 -0
  90. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/concepts/sdd.md +0 -0
  91. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/concepts/spec-persistence.md +0 -0
  92. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/docfx.json +0 -0
  93. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/guides/evolving-specs.md +0 -0
  94. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/guides/monorepo.md +0 -0
  95. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/index.md +0 -0
  96. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/air-gapped.md +0 -0
  97. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/one-time.md +0 -0
  98. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/pipx.md +0 -0
  99. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/uv.md +0 -0
  100. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/installation.md +0 -0
  101. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/local-development.md +0 -0
  102. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/quickstart.md +0 -0
  103. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/bundles.md +0 -0
  104. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/core.md +0 -0
  105. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/overview.md +0 -0
  106. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/workflows.md +0 -0
  107. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/template/public/main.css +0 -0
  108. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/toc.yml +0 -0
  109. {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/upgrade.md +0 -0
  110. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/business-analyst/README.md +0 -0
  111. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/business-analyst/bundle.yml +0 -0
  112. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/developer/README.md +0 -0
  113. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/developer/bundle.yml +0 -0
  114. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/product-manager/README.md +0 -0
  115. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/product-manager/bundle.yml +0 -0
  116. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/security-researcher/README.md +0 -0
  117. {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/security-researcher/bundle.yml +0 -0
  118. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  119. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  120. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  121. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  122. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/README.md +0 -0
  123. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  124. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/README.md +0 -0
  125. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/agent-context-config.yml +0 -0
  126. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  127. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/extension.yml +0 -0
  128. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/README.md +0 -0
  129. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  130. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  131. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/commands/speckit.bug.test.md +0 -0
  132. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/extension.yml +0 -0
  133. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/catalog.json +0 -0
  134. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/README.md +0 -0
  135. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.commit.md +0 -0
  136. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.feature.md +0 -0
  137. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.initialize.md +0 -0
  138. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.remote.md +0 -0
  139. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.validate.md +0 -0
  140. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/config-template.yml +0 -0
  141. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/extension.yml +0 -0
  142. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/git-config.yml +0 -0
  143. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  144. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  145. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/git-common.sh +0 -0
  146. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  147. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  148. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  149. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  150. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/selftest/commands/selftest.md +0 -0
  151. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/selftest/extension.yml +0 -0
  152. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/.gitignore +0 -0
  153. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/CHANGELOG.md +0 -0
  154. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/EXAMPLE-README.md +0 -0
  155. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/LICENSE +0 -0
  156. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/README.md +0 -0
  157. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/commands/example.md +0 -0
  158. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/config-template.yml +0 -0
  159. {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/extension.yml +0 -0
  160. {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/CONTRIBUTING.md +0 -0
  161. {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/README.md +0 -0
  162. {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/catalog.community.json +0 -0
  163. {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/catalog.json +0 -0
  164. {specify_cli-0.11.8 → specify_cli-0.11.9}/media/bootstrap-claude-code.gif +0 -0
  165. {specify_cli-0.11.8 → specify_cli-0.11.9}/media/logo_large.webp +0 -0
  166. {specify_cli-0.11.8 → specify_cli-0.11.9}/media/logo_small.webp +0 -0
  167. {specify_cli-0.11.8 → specify_cli-0.11.9}/media/spec-kit-video-header.jpg +0 -0
  168. {specify_cli-0.11.8 → specify_cli-0.11.9}/media/specify_cli.gif +0 -0
  169. {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-April.md +0 -0
  170. {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-February.md +0 -0
  171. {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-March.md +0 -0
  172. {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-May.md +0 -0
  173. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/ARCHITECTURE.md +0 -0
  174. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/PUBLISHING.md +0 -0
  175. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/README.md +0 -0
  176. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/catalog.json +0 -0
  177. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/README.md +0 -0
  178. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.constitution.md +0 -0
  179. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.implement.md +0 -0
  180. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.plan.md +0 -0
  181. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.specify.md +0 -0
  182. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.tasks.md +0 -0
  183. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/preset.yml +0 -0
  184. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/README.md +0 -0
  185. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  186. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/commands/speckit.specify.md +0 -0
  187. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/preset.yml +0 -0
  188. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/templates/myext-template.md +0 -0
  189. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/templates/spec-template.md +0 -0
  190. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/commands/speckit.specify.md +0 -0
  191. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  192. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/preset.yml +0 -0
  193. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/agent-file-template.md +0 -0
  194. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/checklist-template.md +0 -0
  195. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/constitution-template.md +0 -0
  196. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/plan-template.md +0 -0
  197. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/spec-template.md +0 -0
  198. {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/tasks-template.md +0 -0
  199. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/check-prerequisites.sh +0 -0
  200. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/common.sh +0 -0
  201. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/create-new-feature.sh +0 -0
  202. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/setup-plan.sh +0 -0
  203. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/setup-tasks.sh +0 -0
  204. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/check-prerequisites.ps1 +0 -0
  205. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/common.ps1 +0 -0
  206. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/create-new-feature.ps1 +0 -0
  207. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/setup-plan.ps1 +0 -0
  208. {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/setup-tasks.ps1 +0 -0
  209. {specify_cli-0.11.8 → specify_cli-0.11.9}/spec-driven.md +0 -0
  210. {specify_cli-0.11.8 → specify_cli-0.11.9}/spec-kit.code-workspace +0 -0
  211. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_agent_config.py +0 -0
  212. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_assets.py +0 -0
  213. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_console.py +0 -0
  214. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_init_options.py +0 -0
  215. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_invocation_style.py +0 -0
  216. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_utils.py +0 -0
  217. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_version.py +0 -0
  218. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/agents.py +0 -0
  219. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/__init__.py +0 -0
  220. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/azure_devops.py +0 -0
  221. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/base.py +0 -0
  222. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/config.py +0 -0
  223. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/github.py +0 -0
  224. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/__init__.py +0 -0
  225. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  226. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
  227. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/__init__.py +0 -0
  228. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/project.py +0 -0
  229. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/versioning.py +0 -0
  230. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/yamlio.py +0 -0
  231. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/__init__.py +0 -0
  232. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/catalog.py +0 -0
  233. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/manifest.py +0 -0
  234. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/records.py +0 -0
  235. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/__init__.py +0 -0
  236. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/adapters.py +0 -0
  237. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  238. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/conflict.py +0 -0
  239. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/installer.py +0 -0
  240. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/packager.py +0 -0
  241. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/primitives.py +0 -0
  242. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/references.py +0 -0
  243. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/resolver.py +0 -0
  244. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/validator.py +0 -0
  245. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/catalogs.py +0 -0
  246. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/commands/__init__.py +0 -0
  247. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/commands/bundle/__init__.py +0 -0
  248. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/commands/init.py +0 -0
  249. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/extensions/_commands.py +0 -0
  250. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_runtime.py +0 -0
  251. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_scaffold.py +0 -0
  252. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_state.py +0 -0
  253. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_status.py +0 -0
  254. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/__init__.py +0 -0
  255. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_commands.py +0 -0
  256. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_helpers.py +0 -0
  257. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_install_commands.py +0 -0
  258. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  259. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_query_commands.py +0 -0
  260. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  261. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/agy/__init__.py +0 -0
  262. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/amp/__init__.py +0 -0
  263. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  264. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/base.py +0 -0
  265. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/bob/__init__.py +0 -0
  266. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/catalog.py +0 -0
  267. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/cline/__init__.py +0 -0
  268. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  269. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/codex/__init__.py +0 -0
  270. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  271. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  272. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/devin/__init__.py +0 -0
  273. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  274. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/forge/__init__.py +0 -0
  275. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  276. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/generic/__init__.py +0 -0
  277. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/goose/__init__.py +0 -0
  278. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  279. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/iflow/__init__.py +0 -0
  280. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/junie/__init__.py +0 -0
  281. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  282. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  283. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
  284. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  285. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/manifest.py +0 -0
  286. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/omp/__init__.py +0 -0
  287. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  288. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/pi/__init__.py +0 -0
  289. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  290. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  291. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/roo/__init__.py +0 -0
  292. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  293. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/shai/__init__.py +0 -0
  294. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  295. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/trae/__init__.py +0 -0
  296. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  297. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/windsurf/__init__.py +0 -0
  298. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  299. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/zed/__init__.py +0 -0
  300. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/shared_infra.py +0 -0
  301. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/__init__.py +0 -0
  302. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/base.py +0 -0
  303. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/catalog.py +0 -0
  304. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/engine.py +0 -0
  305. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/expressions.py +0 -0
  306. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/__init__.py +0 -0
  307. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
  308. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  309. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
  310. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
  311. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
  312. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
  313. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
  314. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
  315. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  316. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  317. {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  318. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/checklist-template.md +0 -0
  319. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/constitution-template.md +0 -0
  320. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/plan-template.md +0 -0
  321. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/spec-template.md +0 -0
  322. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/tasks-template.md +0 -0
  323. {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/vscode-settings.json +0 -0
  324. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/__init__.py +0 -0
  325. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/auth_helpers.py +0 -0
  326. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/bundler_helpers.py +0 -0
  327. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/conftest.py +0 -0
  328. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/contract/test_bundle_cli.py +0 -0
  329. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/contract/test_catalog_schema.py +0 -0
  330. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/contract/test_manifest_schema.py +0 -0
  331. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/__init__.py +0 -0
  332. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/bug/__init__.py +0 -0
  333. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/bug/test_bug_extension.py +0 -0
  334. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/git/__init__.py +0 -0
  335. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/test_extension_agent_context.py +0 -0
  336. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/TESTING.md +0 -0
  337. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/plan.md +0 -0
  338. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/spec.md +0 -0
  339. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/tasks.md +0 -0
  340. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/http_helpers.py +0 -0
  341. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_catalog_stack.py +0 -0
  342. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_init_install.py +0 -0
  343. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_install_flow.py +0 -0
  344. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_local_install.py +0 -0
  345. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_offline.py +0 -0
  346. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_security_paths.py +0 -0
  347. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/__init__.py +0 -0
  348. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/conftest.py +0 -0
  349. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_base.py +0 -0
  350. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_cli.py +0 -0
  351. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_extra_args.py +0 -0
  352. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_agy.py +0 -0
  353. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_amp.py +0 -0
  354. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_auggie.py +0 -0
  355. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_markdown.py +0 -0
  356. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_skills.py +0 -0
  357. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_toml.py +0 -0
  358. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_yaml.py +0 -0
  359. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_bob.py +0 -0
  360. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_catalog.py +0 -0
  361. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_cline.py +0 -0
  362. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_codebuddy.py +0 -0
  363. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_codex.py +0 -0
  364. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_copilot.py +0 -0
  365. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_cursor_agent.py +0 -0
  366. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_devin.py +0 -0
  367. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_firebender.py +0 -0
  368. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_forge.py +0 -0
  369. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_gemini.py +0 -0
  370. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_generic.py +0 -0
  371. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_goose.py +0 -0
  372. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_hermes.py +0 -0
  373. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_iflow.py +0 -0
  374. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_junie.py +0 -0
  375. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_kilocode.py +0 -0
  376. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_kimi.py +0 -0
  377. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_kiro_cli.py +0 -0
  378. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_lingma.py +0 -0
  379. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_omp.py +0 -0
  380. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_opencode.py +0 -0
  381. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_pi.py +0 -0
  382. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_qodercli.py +0 -0
  383. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_qwen.py +0 -0
  384. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_roo.py +0 -0
  385. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_rovodev.py +0 -0
  386. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_scaffold.py +0 -0
  387. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_shai.py +0 -0
  388. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_state.py +0 -0
  389. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_subcommand.py +0 -0
  390. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_tabnine.py +0 -0
  391. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_trae.py +0 -0
  392. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_vibe.py +0 -0
  393. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_windsurf.py +0 -0
  394. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_zcode.py +0 -0
  395. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_zed.py +0 -0
  396. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_manifest.py +0 -0
  397. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_registry.py +0 -0
  398. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/self_upgrade_helpers.py +0 -0
  399. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_agent_config_consistency.py +0 -0
  400. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_branch_numbering.py +0 -0
  401. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_check_prerequisites_paths_only.py +0 -0
  402. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_check_tool.py +0 -0
  403. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_cli_version.py +0 -0
  404. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_commands_package.py +0 -0
  405. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_console_imports.py +0 -0
  406. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extension_registration.py +0 -0
  407. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extension_skills.py +0 -0
  408. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extension_update_hardening.py +0 -0
  409. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_github_workflows.py +0 -0
  410. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_init_dir.py +0 -0
  411. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_live_transient_windows.py +0 -0
  412. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_merge.py +0 -0
  413. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_ps1_encoding.py +0 -0
  414. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_registrar_path_traversal.py +0 -0
  415. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_detection.py +0 -0
  416. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_execution.py +0 -0
  417. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_guidance.py +0 -0
  418. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_verification.py +0 -0
  419. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_setup_plan_feature_json.py +0 -0
  420. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_setup_plan_no_overwrite.py +0 -0
  421. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_setup_tasks.py +0 -0
  422. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_shared_infra_integrity.py +0 -0
  423. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_upgrade.py +0 -0
  424. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_utils.py +0 -0
  425. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_utils_assets_imports.py +0 -0
  426. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_version_imports.py +0 -0
  427. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_workflow_run_without_project.py +0 -0
  428. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_adapters.py +0 -0
  429. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_catalog_config.py +0 -0
  430. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_conflict.py +0 -0
  431. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_packager.py +0 -0
  432. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_primitives.py +0 -0
  433. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_records.py +0 -0
  434. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_references.py +0 -0
  435. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_resolver.py +0 -0
  436. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_validator.py +0 -0
  437. {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_versioning.py +0 -0
  438. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/ARCHITECTURE.md +0 -0
  439. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/PUBLISHING.md +0 -0
  440. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/README.md +0 -0
  441. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/catalog.community.json +0 -0
  442. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/catalog.json +0 -0
  443. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/speckit/workflow.yml +0 -0
  444. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/step-catalog.community.json +0 -0
  445. {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/step-catalog.json +0 -0
@@ -35,7 +35,7 @@ jobs:
35
35
  uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
36
36
 
37
37
  - name: Set up Python
38
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
38
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
39
39
  with:
40
40
  python-version: "3.13"
41
41
 
@@ -19,7 +19,7 @@ jobs:
19
19
  uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
20
20
 
21
21
  - name: Set up Python
22
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
22
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
23
23
  with:
24
24
  python-version: "3.13"
25
25
 
@@ -40,7 +40,7 @@ jobs:
40
40
  uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
41
41
 
42
42
  - name: Set up Python ${{ matrix.python-version }}
43
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
43
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
44
44
  with:
45
45
  python-version: ${{ matrix.python-version }}
46
46
 
@@ -2,6 +2,24 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.11.9] - 2026-06-26
6
+
7
+ ### Changed
8
+
9
+ - Docs: add cline and zcode to multi-install-safe table (#3180)
10
+ - Docs: document missing flags --force and --refresh-shared-infra (#3179)
11
+ - fix(claude): stop forking /speckit-analyze to prevent long-session freezes (#3188)
12
+ - fix: derive plan path from feature.json in update-agent-context (#3069)
13
+ - fix(catalog): companion → README docs, version-pinned download URL, v0.11.0, refreshed tags (#2954)
14
+ - chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (#3173)
15
+ - Update SicarioSpec Core preset to v0.5.1 (#3165)
16
+ - fix(extensions,presets,workflows): resolve private GHES release assets via /api/v3 (#3157)
17
+ - Update preset composition strategy reference (#3143)
18
+ - fix(scripts): keep PowerShell branch-name acronym match case-sensitive (parity with bash) (#3129)
19
+ - fix(extensions): tell agent to run mandatory hooks, not just emit the directive (#2901)
20
+ - Point sicario-core docs to preset README (#3120)
21
+ - chore: release 0.11.8, begin 0.11.9.dev0 development (#3156)
22
+
5
23
  ## [0.11.8] - 2026-06-24
6
24
 
7
25
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specify-cli
3
- Version: 0.11.8
3
+ Version: 0.11.9
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
@@ -25,7 +25,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
25
25
  | Pirate Speak (Full) | Transforms all Spec Kit output into pirate speak — specs become "Voyage Manifests", plans become "Battle Plans", tasks become "Crew Assignments" | 6 templates, 9 commands | — | [spec-kit-presets](https://github.com/mnriem/spec-kit-presets) |
26
26
  | Screenwriting | Spec-Driven Development for screenwriting/scriptwriting/tutorials: feature films, television (pilot, episode, limited series), and stage plays. Adapts the Spec Kit workflow to screenplay craft — slug lines, action lines, act breaks, beat sheets, and industry-standard pitch documents. Supports three-act, Save the Cat, TV pilot, network episode, cable/streaming episode, and stage-play structural frameworks. Export to Fountain, FTX, PDF | 26 templates, 32 commands, 1 script | — | [speckit-preset-screenwriting](https://github.com/adaumann/speckit-preset-screenwriting) |
27
27
  | Security Governance | Adds memory-safe-language preference, language-specific secure coding profiles, audit-ready Spec-Kit run evidence, ASVS verification, SBOM/AI-SBOM supply-chain transparency, CRA awareness, and regulatory applicability screening for NIS2, CRA, EU AI Act, and DORA | 14 templates, 3 commands | — | [spec-kit-preset-security-governance](https://github.com/hindermath/spec-kit-preset-security-governance) |
28
- | SicarioSpec Core | Evidence-first security operations governance that maps feature risk to controls, gates, evidence, owners, approval, and accepted-risk decisions. | 5 templates | — | [sicario-spec](https://github.com/dfirs1car1o/sicario-spec) |
28
+ | SicarioSpec Core | Baseline secure-by-default Spec Kit governance profile. | 5 templates | — | [sicario-spec](https://github.com/dfirs1car1o/sicario-spec) |
29
29
  | Spec2Cloud | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy | 5 templates, 8 commands | — | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) |
30
30
  | Table of Contents Navigation | Adds a navigable Table of Contents to generated spec.md, plan.md, and tasks.md documents | 3 templates, 3 commands | — | [spec-kit-preset-toc-navigation](https://github.com/Quratulain-bilal/spec-kit-preset-toc-navigation) |
31
31
  | VS Code Ask Questions | Enhances the clarify command to use `vscode/askQuestions` for batched interactive questioning. | 1 command | — | [spec-kit-presets](https://github.com/fdcastel/spec-kit-presets) |
@@ -69,6 +69,33 @@ Either `token` or `token_env` must be set for `bearer` and `basic-pat` schemes.
69
69
  }
70
70
  ```
71
71
 
72
+ ### GitHub Enterprise Server (GHES)
73
+
74
+ To use a private catalog or extension hosted on a GitHub Enterprise Server
75
+ instance, add a `github` entry listing your GHES host(s). The same entry
76
+ authenticates both catalog JSON fetches **and** private release-asset
77
+ downloads — Specify recognizes the listed hosts as GitHub Enterprise and
78
+ resolves release downloads through the GHES REST API (`/api/v3`).
79
+
80
+ ```json
81
+ {
82
+ "providers": [
83
+ {
84
+ "hosts": ["ghes.example.com", "raw.ghes.example.com", "codeload.ghes.example.com"],
85
+ "provider": "github",
86
+ "auth": "bearer",
87
+ "token_env": "GH_ENTERPRISE_TOKEN"
88
+ }
89
+ ]
90
+ }
91
+ ```
92
+
93
+ List the **bare** web host (e.g. `ghes.example.com`) — release-download URLs
94
+ live there. If your instance uses subdomain isolation, also list the `raw.`
95
+ and `codeload.` subdomains your catalog/extension URLs use. A
96
+ `*.ghes.example.com` wildcard matches subdomains but **not** the bare host,
97
+ so always include the bare host explicitly.
98
+
72
99
  ### Azure DevOps (`azure-devops`)
73
100
 
74
101
  | Scheme | Header | Use for |
@@ -26,6 +26,7 @@ specify extension add <name>
26
26
  | --------------- | -------------------------------------------------------- |
27
27
  | `--dev` | Install from a local directory (for development) |
28
28
  | `--from <url>` | Install from a custom URL instead of the catalog |
29
+ | `--force` | Overwrite if already installed |
29
30
  | `--priority <N>`| Resolution priority (default: 10; lower = higher precedence) |
30
31
 
31
32
  Installs an extension from the catalog, a URL, or a local directory. Extension commands are automatically registered with the currently installed AI coding agent integration.
@@ -100,6 +100,7 @@ specify integration switch <key>
100
100
  | ------------------------ | ------------------------------------------------------------------------ |
101
101
  | `--script sh\|ps` | Script type: `sh` (bash/zsh) or `ps` (PowerShell) |
102
102
  | `--force` | Force removal of modified files during uninstall; when the target is already installed, overwrite managed shared templates while changing the default |
103
+ | `--refresh-shared-infra` | Also overwrite shared infrastructure files even if you customized them (otherwise customizations are preserved) |
103
104
  | `--integration-options` | Options for the target integration when it is not already installed |
104
105
 
105
106
  If the target integration is not already installed, equivalent to running `uninstall` followed by `install` in a single step. In this mode, `--force` controls whether modified files from the removed integration are deleted. If the target integration is already installed, `switch` only changes the default integration, like `use`; in this mode, `--force` controls whether managed shared templates are overwritten while the default changes. `--integration-options` is rejected for already-installed targets because changing integration options requires reinstalling managed files; run `upgrade <key> --integration-options ...` first, then `use <key>`.
@@ -184,6 +185,7 @@ The currently declared multi-install safe integrations are:
184
185
  | --- | --------- |
185
186
  | `auggie` | `.augment/commands`, `.augment/rules/specify-rules.md` |
186
187
  | `claude` | `.claude/skills`, `CLAUDE.md` |
188
+ | `cline` | `.clinerules/workflows`, `.clinerules/specify-rules.md` |
187
189
  | `codebuddy` | `.codebuddy/commands`, `CODEBUDDY.md` |
188
190
  | `codex` | `.agents/skills`, `AGENTS.md` |
189
191
  | `cursor-agent` | `.cursor/skills`, `.cursor/rules/specify-rules.mdc` |
@@ -199,6 +201,7 @@ The currently declared multi-install safe integrations are:
199
201
  | `tabnine` | `.tabnine/agent/commands`, `TABNINE.md` |
200
202
  | `trae` | `.trae/skills`, `.trae/rules/project_rules.md` |
201
203
  | `windsurf` | `.windsurf/workflows`, `.windsurf/rules/specify-rules.md` |
204
+ | `zcode` | `.zcode/skills`, `ZCODE.md` |
202
205
 
203
206
  Integrations that share a context file or command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`.
204
207
 
@@ -137,9 +137,11 @@ catalogs:
137
137
 
138
138
  ## File Resolution
139
139
 
140
- Presets can provide command files, template files (like `plan-template.md`), and script files. These are resolved at runtime using a **replace** strategy — the first match in the priority stack wins and is used entirely. Each file is looked up independently, so different files can come from different layers.
140
+ Presets can provide command files, template files (like `plan-template.md`), and script files. Each file name is evaluated independently against the priority stack, so different files can come from different layers.
141
141
 
142
- > **Note:** Additional composition strategies (`append`, `prepend`, `wrap`) are planned for a future release.
142
+ Templates and scripts are looked up from the stack when Spec Kit needs them. Commands use the same stack for replacement and composition, but are materialized into detected agent directories instead of being re-resolved by agents. During preset install, Spec Kit registers command files for the preset being installed; post-install and post-removal reconciliation then recomputes and writes the effective command content for affected command names based on the active stack. Agents do not re-resolve the stack each time they run a command.
143
+
144
+ By default, files use a **replace** strategy: the first match in the priority stack wins and is used entirely. Templates and commands can also use composition strategies: **prepend** places preset content before lower-priority content, **append** places it after lower-priority content, and **wrap** replaces `{CORE_TEMPLATE}` with lower-priority content. Scripts support **replace** and **wrap**; script wrappers use `$CORE_SCRIPT` as the placeholder.
143
145
 
144
146
  The resolution stack, from highest to lowest precedence:
145
147
 
@@ -148,8 +150,6 @@ The resolution stack, from highest to lowest precedence:
148
150
  3. **Installed extensions** — sorted by priority
149
151
  4. **Spec Kit core** — `.specify/templates/`
150
152
 
151
- Commands are registered at install time (not resolved through the stack at runtime).
152
-
153
153
  ### Resolution Stack
154
154
 
155
155
  ```mermaid
@@ -215,7 +215,7 @@ Run `specify preset resolve <name>` to trace the resolution stack and see which
215
215
 
216
216
  ### What's the difference between disabling and removing a preset?
217
217
 
218
- **Disabling** (`specify preset disable`) keeps the preset installed but excludes its files from the resolution stack. Commands the preset registered remain available in your AI coding agent. This is useful for temporarily testing behavior without a preset, or comparing output with and without it. Re-enable anytime with `specify preset enable`.
218
+ **Disabling** (`specify preset disable`) keeps the preset installed but excludes it from future template and script resolution. Previously registered commands remain available in your AI coding agent until preset removal, so use removal when you need command changes to stop taking effect. Disabling is useful for temporarily testing template/script behavior without a preset, or comparing template/script output with and without it. Re-enable anytime with `specify preset enable`.
219
219
 
220
220
  **Removing** (`specify preset remove`) fully uninstalls the preset — deletes its files, unregisters its commands from your AI coding agent, and removes it from the registry.
221
221
 
@@ -10,9 +10,9 @@
10
10
  #
11
11
  # Usage: update-agent-context.sh [plan_path]
12
12
  #
13
- # When `plan_path` is omitted, the script picks the most recently modified
14
- # `specs/*/plan.md` if any exist, otherwise emits the section without a
15
- # concrete plan path.
13
+ # When `plan_path` is omitted, the script derives it from `.specify/feature.json`
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.
16
16
 
17
17
  set -euo pipefail
18
18
 
@@ -202,23 +202,78 @@ unset _cf_parts _seg
202
202
 
203
203
  PLAN_PATH="${1:-}"
204
204
  if [[ -z "$PLAN_PATH" ]]; then
205
- # Pick the most recently modified plan.md one level deep (specs/<feature>/plan.md).
206
- # Use find + sort by modification time to avoid ls/head fragility with
207
- # spaces in paths or SIGPIPE from pipefail.
208
- _plan_abs="$("$_python" - "$PROJECT_ROOT" <<'PY'
209
- import sys, os
205
+ # Prefer .specify/feature.json (written by /speckit-specify) over mtime heuristic.
206
+ _feature_json="$PROJECT_ROOT/.specify/feature.json"
207
+ if [[ -f "$_feature_json" ]]; then
208
+ _feature_dir="$("$_python" - "$_feature_json" <<'PY'
209
+ import sys, json
210
+ try:
211
+ with open(sys.argv[1], encoding="utf-8") as fh:
212
+ d = json.load(fh)
213
+ val = d.get("feature_directory", "")
214
+ print(val if isinstance(val, str) else "")
215
+ except Exception:
216
+ print("")
217
+ PY
218
+ )"
219
+ # Normalize backslashes (written by PS on Windows) to forward slashes before path ops.
220
+ _feature_dir="$(printf '%s' "$_feature_dir" | tr '\\' '/')"
221
+ _feature_dir="${_feature_dir%/}"
222
+ if [[ -n "$_feature_dir" ]]; then
223
+ # feature_directory may be relative or absolute (absolute paths outside PROJECT_ROOT
224
+ # are preserved as-is by _persist_feature_json in common.sh).
225
+ # Also match drive-qualified paths (C:/...) written by PowerShell on Windows.
226
+ if [[ "$_feature_dir" == /* ]] || [[ "$_feature_dir" =~ ^[A-Za-z]:/ ]]; then
227
+ _candidate="$_feature_dir/plan.md"
228
+ else
229
+ _candidate="$PROJECT_ROOT/$_feature_dir/plan.md"
230
+ fi
231
+ if [[ -f "$_candidate" ]]; then
232
+ # Resolve symlinks before comparing so paths like /var/… vs /private/var/…
233
+ # (macOS) are treated as equivalent. Mirrors the mtime-fallback approach.
234
+ PLAN_PATH="$("$_python" - "$PROJECT_ROOT" "$_candidate" <<'PY'
235
+ import sys
210
236
  from pathlib import Path
211
- specs = Path(sys.argv[1]) / "specs"
237
+ root = Path(sys.argv[1]).resolve()
238
+ cand = Path(sys.argv[2]).resolve()
239
+ try:
240
+ print(cand.relative_to(root).as_posix())
241
+ except ValueError:
242
+ # Outside project root: emit the resolved path in POSIX form.
243
+ # as_posix() converts backslashes correctly on native Windows Python.
244
+ print(cand.as_posix())
245
+ PY
246
+ )"
247
+ fi
248
+ fi
249
+ fi
250
+
251
+ # Fall back to mtime only when feature.json is absent or its plan does not exist yet.
252
+ # Python emits a project-relative POSIX path directly to avoid bash prefix-strip
253
+ # issues with backslash paths on Windows (Git bash / MSYS2).
254
+ if [[ -z "$PLAN_PATH" ]]; then
255
+ _plan_rel="$("$_python" - "$PROJECT_ROOT" <<'PY'
256
+ import sys
257
+ from pathlib import Path
258
+ root = Path(sys.argv[1]).resolve()
259
+ specs = root / "specs"
212
260
  plans = sorted(
213
261
  specs.glob("*/plan.md"),
214
262
  key=lambda p: p.stat().st_mtime,
215
263
  reverse=True,
216
264
  )
217
- print(plans[0] if plans else "")
265
+ if plans:
266
+ try:
267
+ print(plans[0].relative_to(root).as_posix())
268
+ except ValueError:
269
+ print("")
270
+ else:
271
+ print("")
218
272
  PY
219
273
  )"
220
- if [[ -n "$_plan_abs" ]]; then
221
- PLAN_PATH="${_plan_abs#"$PROJECT_ROOT/"}"
274
+ if [[ -n "$_plan_rel" ]]; then
275
+ PLAN_PATH="$_plan_rel"
276
+ fi
222
277
  fi
223
278
  fi
224
279
 
@@ -9,6 +9,10 @@
9
9
  # .specify/extensions/agent-context/agent-context-config.yml
10
10
  #
11
11
  # Usage: update-agent-context.ps1 [plan_path]
12
+ #
13
+ # When `plan_path` is omitted, the script derives it from `.specify/feature.json`
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.
12
16
 
13
17
  [CmdletBinding()]
14
18
  param(
@@ -126,14 +130,26 @@ if (-not (Test-Path -LiteralPath $ExtConfig)) {
126
130
  $Options = $null
127
131
  if (Get-Command ConvertFrom-Yaml -ErrorAction SilentlyContinue) {
128
132
  try {
129
- $Options = Get-Content -LiteralPath $ExtConfig -Raw | ConvertFrom-Yaml -ErrorAction Stop
133
+ $Options = Get-Content -LiteralPath $ExtConfig -Raw -Encoding UTF8 | ConvertFrom-Yaml -ErrorAction Stop
134
+ } catch {
135
+ # fall through to ConvertFrom-Json fallback
136
+ }
137
+ }
138
+
139
+ if ($null -eq $Options) {
140
+ # ConvertFrom-Yaml unavailable or failed; try ConvertFrom-Json (no external deps,
141
+ # works when the config file is valid JSON, which is a subset of YAML).
142
+ try {
143
+ $raw = Get-Content -LiteralPath $ExtConfig -Raw -Encoding UTF8
144
+ $Options = $raw | ConvertFrom-Json -ErrorAction Stop
145
+ if (-not (Test-ConfigObject -Object $Options)) { $Options = $null }
130
146
  } catch {
131
- # fall through to Python fallback
147
+ $Options = $null
132
148
  }
133
149
  }
134
150
 
135
151
  if ($null -eq $Options) {
136
- # ConvertFrom-Yaml unavailable or failed; fall back to Python+PyYAML.
152
+ # ConvertFrom-Yaml/Json unavailable or failed; fall back to Python+PyYAML.
137
153
  $pythonCmd = $null
138
154
  $pythonCandidates = @()
139
155
  if ($env:SPECKIT_PYTHON) {
@@ -280,21 +296,69 @@ if ($cm) {
280
296
  }
281
297
 
282
298
  if (-not $PlanPath) {
283
- # Discover plan.md exactly one level deep (specs/<feature>/plan.md),
284
- # matching the bash glob specs/*/plan.md. Wrap in try/catch so access errors under
285
- # $ErrorActionPreference = 'Stop' don't abort the script.
286
- try {
287
- $specsDir = Join-Path $ProjectRoot 'specs'
288
- $candidate = Get-ChildItem -Path $specsDir -Directory -ErrorAction SilentlyContinue |
289
- ForEach-Object { Get-Item -LiteralPath (Join-Path $_.FullName 'plan.md') -ErrorAction SilentlyContinue } |
290
- Where-Object { $_ } |
291
- Sort-Object LastWriteTime -Descending |
292
- Select-Object -First 1
293
- if ($candidate) {
294
- $PlanPath = [System.IO.Path]::GetRelativePath($ProjectRoot, $candidate.FullName).Replace('\','/')
299
+ # Prefer .specify/feature.json (written by /speckit-specify) over mtime heuristic.
300
+ $FeatureJson = Join-Path $ProjectRoot '.specify/feature.json'
301
+ if (Test-Path -LiteralPath $FeatureJson) {
302
+ try {
303
+ $fj = Get-Content -LiteralPath $FeatureJson -Raw -Encoding UTF8 | ConvertFrom-Json
304
+ $featureDir = $fj.feature_directory
305
+ if ($featureDir -isnot [string] -or -not $featureDir) {
306
+ $featureDir = $null
307
+ } else {
308
+ $featureDir = $featureDir.TrimEnd('\', '/')
309
+ }
310
+ if ($featureDir) {
311
+ # Join-Path on Unix does not treat absolute ChildPath as "wins"; check explicitly.
312
+ if ([System.IO.Path]::IsPathRooted($featureDir)) {
313
+ $candidatePlan = Join-Path $featureDir 'plan.md'
314
+ } else {
315
+ $candidatePlan = Join-Path (Join-Path $ProjectRoot $featureDir) 'plan.md'
316
+ }
317
+ if (Test-Path -LiteralPath $candidatePlan) {
318
+ # Resolve ./ .. segments before relativizing (mirrors bash Path.resolve()).
319
+ # GetFullPath is available in .NET Framework 4.x (PS 5.1 compatible).
320
+ $resolvedPlan = [System.IO.Path]::GetFullPath($candidatePlan)
321
+ $resolvedDir = [System.IO.Path]::GetDirectoryName($resolvedPlan)
322
+ $normRoot = $ProjectRoot.TrimEnd('\', '/') + [System.IO.Path]::DirectorySeparatorChar
323
+ $normDir = $resolvedDir.TrimEnd('\', '/') + [System.IO.Path]::DirectorySeparatorChar
324
+ $cmp = if ([System.Environment]::OSVersion.Platform -eq [System.PlatformID]::Win32NT) { [System.StringComparison]::OrdinalIgnoreCase } else { [System.StringComparison]::Ordinal }
325
+ if ($normDir.StartsWith($normRoot, $cmp)) {
326
+ $relDir = $normDir.Substring($normRoot.Length).TrimEnd('\', '/')
327
+ $PlanPath = if ($relDir) { $relDir.Replace('\', '/') + '/plan.md' } else { 'plan.md' }
328
+ } else {
329
+ $PlanPath = $resolvedPlan.Replace('\', '/')
330
+ }
331
+ }
332
+ }
333
+ } catch {
334
+ # Non-fatal: fall through to mtime heuristic.
335
+ }
336
+ }
337
+
338
+ # Fall back to mtime only when feature.json is absent or its plan does not exist yet.
339
+ if (-not $PlanPath) {
340
+ try {
341
+ $specsDir = Join-Path $ProjectRoot 'specs'
342
+ $candidate = Get-ChildItem -Path $specsDir -Directory -ErrorAction SilentlyContinue |
343
+ ForEach-Object { Get-Item -LiteralPath (Join-Path $_.FullName 'plan.md') -ErrorAction SilentlyContinue } |
344
+ Where-Object { $_ } |
345
+ Sort-Object LastWriteTime -Descending |
346
+ Select-Object -First 1
347
+ if ($candidate) {
348
+ # GetRelativePath is .NET 5+ only; strip prefix manually for PS 5.1 compat.
349
+ # Use case-insensitive comparison on Windows only (matches common.ps1 pattern).
350
+ $fullPath = $candidate.FullName.Replace('\', '/')
351
+ $normRoot = $ProjectRoot.Replace('\', '/').TrimEnd('/') + '/'
352
+ $cmp = if ([System.Environment]::OSVersion.Platform -eq [System.PlatformID]::Win32NT) { [System.StringComparison]::OrdinalIgnoreCase } else { [System.StringComparison]::Ordinal }
353
+ if ($fullPath.StartsWith($normRoot, $cmp)) {
354
+ $PlanPath = $fullPath.Substring($normRoot.Length)
355
+ } else {
356
+ $PlanPath = $fullPath
357
+ }
358
+ }
359
+ } catch {
360
+ # Non-fatal: continue without a plan path.
295
361
  }
296
- } catch {
297
- # Non-fatal: continue without a plan path.
298
362
  }
299
363
  }
300
364
 
@@ -772,40 +772,40 @@
772
772
  "companion": {
773
773
  "name": "SpecKit Companion",
774
774
  "id": "companion",
775
- "description": "Live spec-driven progress for SpecKit Companion — lifecycle capture, status, resume, and a turbo pipeline profile.",
775
+ "description": "Live spec-driven progress for SpecKit Companion — lifecycle capture, status, resume, and composable commands you can customize with hooks and recipes.",
776
776
  "author": "alfredoperez",
777
- "version": "0.3.0",
778
- "download_url": "https://github.com/alfredoperez/speckit-companion/releases/download/speckit-ext-v0.3.0/companion-0.3.0.zip",
777
+ "version": "0.11.0",
778
+ "download_url": "https://github.com/alfredoperez/speckit-companion/releases/download/speckit-ext-v0.11.0/companion-0.11.0.zip",
779
779
  "repository": "https://github.com/alfredoperez/speckit-companion",
780
780
  "homepage": "https://github.com/alfredoperez/speckit-companion/tree/main/speckit-extension",
781
- "documentation": "https://github.com/alfredoperez/speckit-companion/blob/main/speckit-extension/docs/",
781
+ "documentation": "https://github.com/alfredoperez/speckit-companion/blob/main/speckit-extension/README.md",
782
782
  "changelog": "https://github.com/alfredoperez/speckit-companion/blob/main/speckit-extension/CHANGELOG.md",
783
783
  "license": "MIT",
784
784
  "category": "visibility",
785
785
  "effect": "read-write",
786
786
  "requires": {
787
- "speckit_version": ">=0.8.5",
787
+ "speckit_version": ">=0.9.5",
788
788
  "tools": [
789
789
  { "name": "python3", "required": false }
790
790
  ]
791
791
  },
792
792
  "provides": {
793
- "commands": 10,
793
+ "commands": 13,
794
794
  "hooks": 4
795
795
  },
796
796
  "tags": [
797
- "tracking",
798
- "companion",
799
- "progress",
800
797
  "vscode",
801
- "lifecycle",
802
- "resume"
798
+ "progress",
799
+ "status",
800
+ "resume",
801
+ "configurable",
802
+ "extensible"
803
803
  ],
804
804
  "verified": false,
805
805
  "downloads": 0,
806
806
  "stars": 0,
807
807
  "created_at": "2026-06-11T00:00:00Z",
808
- "updated_at": "2026-06-11T00:00:00Z"
808
+ "updated_at": "2026-06-24T00:00:00Z"
809
809
  },
810
810
  "conduct": {
811
811
  "name": "Conduct Extension",
@@ -252,7 +252,10 @@ function Get-BranchName {
252
252
  if ($stopWords -contains $word) { continue }
253
253
  if ($word.Length -ge 3) {
254
254
  $meaningfulWords += $word
255
- } elseif ($Description -match "\b$($word.ToUpper())\b") {
255
+ } elseif ($Description -cmatch "\b$($word.ToUpper())\b") {
256
+ # Case-sensitive (-cmatch) to mirror the bash twin's `grep -qw -- "${word^^}"`:
257
+ # keep a short word only when its UPPERCASE form appears in the original
258
+ # (an acronym). -match is case-insensitive and would keep every short word.
256
259
  $meaningfulWords += $word
257
260
  }
258
261
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-06-22T00:00:00Z",
3
+ "updated_at": "2026-06-25T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/presets/catalog.community.json",
5
5
  "presets": {
6
6
  "a11y-governance": {
@@ -567,13 +567,13 @@
567
567
  "sicario-core": {
568
568
  "name": "SicarioSpec Core",
569
569
  "id": "sicario-core",
570
- "version": "0.4.0",
571
- "description": "Evidence-first security operations governance that maps feature risk to controls, gates, evidence, owners, approval, and accepted-risk decisions.",
570
+ "version": "0.5.1",
571
+ "description": "Baseline secure-by-default Spec Kit governance profile.",
572
572
  "author": "SicarioSpec Contributors",
573
573
  "repository": "https://github.com/dfirs1car1o/sicario-spec",
574
- "download_url": "https://github.com/dfirs1car1o/sicario-spec/releases/download/v0.4.0/sicario-core-0.4.0.zip",
574
+ "download_url": "https://github.com/dfirs1car1o/sicario-spec/releases/download/v0.5.1/sicario-core-0.5.1.zip",
575
575
  "homepage": "https://github.com/dfirs1car1o/sicario-spec",
576
- "documentation": "https://github.com/dfirs1car1o/sicario-spec/blob/main/README.md",
576
+ "documentation": "https://github.com/dfirs1car1o/sicario-spec/blob/main/presets/sicario-core/README.md",
577
577
  "license": "MIT",
578
578
  "requires": {
579
579
  "speckit_version": ">=0.9.0"
@@ -583,14 +583,13 @@
583
583
  "commands": 0
584
584
  },
585
585
  "tags": [
586
- "security",
587
586
  "governance",
588
587
  "security-ops",
589
588
  "secure-by-default",
590
589
  "evidence"
591
590
  ],
592
591
  "created_at": "2026-06-22T00:00:00Z",
593
- "updated_at": "2026-06-22T00:00:00Z"
592
+ "updated_at": "2026-06-25T00:00:00Z"
594
593
  },
595
594
  "spec2cloud": {
596
595
  "name": "Spec2Cloud",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "specify-cli"
3
- version = "0.11.8"
3
+ version = "0.11.9"
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"
@@ -1128,9 +1128,10 @@ def workflow_add(
1128
1128
  raise typer.Exit(1)
1129
1129
 
1130
1130
  from specify_cli._github_http import resolve_github_release_asset_api_url as _resolve_gh_asset
1131
+ from specify_cli.authentication.http import github_provider_hosts
1131
1132
 
1132
1133
  _wf_url_extra_headers = None
1133
- _resolved_wf_url = _resolve_gh_asset(source, _open_url, timeout=30)
1134
+ _resolved_wf_url = _resolve_gh_asset(source, _open_url, timeout=30, github_hosts=github_provider_hosts())
1134
1135
  if _resolved_wf_url:
1135
1136
  source = _resolved_wf_url
1136
1137
  _wf_url_extra_headers = {"Accept": "application/octet-stream"}
@@ -1234,10 +1235,11 @@ def workflow_add(
1234
1235
 
1235
1236
  try:
1236
1237
  from specify_cli.authentication.http import open_url as _open_url
1238
+ from specify_cli.authentication.http import github_provider_hosts
1237
1239
  from specify_cli._github_http import resolve_github_release_asset_api_url as _resolve_gh_asset
1238
1240
 
1239
1241
  _wf_cat_extra_headers = None
1240
- _resolved_workflow_url = _resolve_gh_asset(workflow_url, _open_url, timeout=30)
1242
+ _resolved_workflow_url = _resolve_gh_asset(workflow_url, _open_url, timeout=30, github_hosts=github_provider_hosts())
1241
1243
  if _resolved_workflow_url:
1242
1244
  workflow_url = _resolved_workflow_url
1243
1245
  _wf_cat_extra_headers = {"Accept": "application/octet-stream"}