specify-cli 0.13.2__tar.gz → 0.13.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. {specify_cli-0.13.2 → specify_cli-0.13.4}/.devcontainer/post-create.sh +11 -0
  2. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
  3. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -0
  4. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/ISSUE_TEMPLATE/feature_request.yml +1 -0
  5. specify_cli-0.13.4/.github/scripts/check_security_requirements.py +115 -0
  6. specify_cli-0.13.4/.github/security-audit-requirements.txt +253 -0
  7. specify_cli-0.13.4/.github/workflows/security.yml +78 -0
  8. {specify_cli-0.13.2 → specify_cli-0.13.4}/CHANGELOG.md +45 -0
  9. {specify_cli-0.13.2 → specify_cli-0.13.4}/CONTRIBUTING.md +21 -0
  10. {specify_cli-0.13.2 → specify_cli-0.13.4}/PKG-INFO +1 -1
  11. specify_cli-0.13.4/bundles/catalog.community.json +35 -0
  12. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/community/bundles.md +1 -0
  13. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/community/extensions.md +1 -0
  14. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/community/presets.md +4 -1
  15. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/concepts/complex-features.md +8 -4
  16. specify_cli-0.13.4/docs/concepts/spec-of-specs.md +171 -0
  17. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/installation.md +4 -2
  18. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/core.md +1 -1
  19. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/extensions.md +3 -1
  20. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/integrations.md +1 -0
  21. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/toc.yml +2 -0
  22. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/upgrade.md +75 -69
  23. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +35 -0
  24. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/catalog.community.json +34 -0
  25. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +7 -1
  26. {specify_cli-0.13.2 → specify_cli-0.13.4}/integrations/catalog.json +10 -1
  27. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/catalog.community.json +100 -11
  28. {specify_cli-0.13.2 → specify_cli-0.13.4}/pyproject.toml +1 -1
  29. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/commands_impl/catalog_config.py +9 -2
  30. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/models/catalog.py +15 -1
  31. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/models/manifest.py +5 -0
  32. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/commands/init.py +2 -0
  33. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/extensions/__init__.py +5 -0
  34. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/__init__.py +2 -0
  35. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/_helpers.py +3 -2
  36. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/catalog.py +34 -14
  37. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/cline/__init__.py +13 -0
  38. specify_cli-0.13.4/src/specify_cli/integrations/droid/__init__.py +135 -0
  39. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/_commands.py +2 -2
  40. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/catalog.py +31 -3
  41. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/engine.py +54 -2
  42. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/expressions.py +4 -0
  43. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/command/__init__.py +64 -5
  44. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/fan_out/__init__.py +4 -3
  45. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/gate/__init__.py +5 -1
  46. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/prompt/__init__.py +63 -5
  47. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/contract/test_catalog_schema.py +36 -0
  48. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/contract/test_manifest_schema.py +10 -0
  49. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/git/test_git_extension.py +16 -0
  50. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_base.py +18 -0
  51. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_catalog.py +67 -0
  52. specify_cli-0.13.4/tests/integrations/test_integration_droid.py +262 -0
  53. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_forge.py +36 -0
  54. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_subcommand.py +24 -0
  55. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_registry.py +1 -0
  56. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_agent_config_consistency.py +1 -0
  57. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_extensions.py +36 -0
  58. specify_cli-0.13.4/tests/test_security_workflow.py +349 -0
  59. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_workflows.py +459 -2
  60. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_catalog_config.py +41 -0
  61. specify_cli-0.13.4/workflows/catalog.community.json +27 -0
  62. specify_cli-0.13.2/bundles/catalog.community.json +0 -6
  63. specify_cli-0.13.2/workflows/catalog.community.json +0 -6
  64. {specify_cli-0.13.2 → specify_cli-0.13.4}/.devcontainer/devcontainer.json +0 -0
  65. {specify_cli-0.13.2 → specify_cli-0.13.4}/.editorconfig +0 -0
  66. {specify_cli-0.13.2 → specify_cli-0.13.4}/.gitattributes +0 -0
  67. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/CODEOWNERS +0 -0
  68. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  69. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  70. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  71. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  72. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  73. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/aw/actions-lock.json +0 -0
  74. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/dependabot.yml +0 -0
  75. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/skills/add-community-extension/SKILL.md +0 -0
  76. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/RELEASE-PROCESS.md +0 -0
  77. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/add-community-bundle.lock.yml +0 -0
  78. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/add-community-bundle.md +0 -0
  79. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/add-community-extension.lock.yml +0 -0
  80. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/add-community-extension.md +0 -0
  81. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/add-community-preset.lock.yml +0 -0
  82. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/add-community-preset.md +0 -0
  83. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/bug-assess.lock.yml +0 -0
  84. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/bug-assess.md +0 -0
  85. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/bug-fix.lock.yml +0 -0
  86. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/bug-fix.md +0 -0
  87. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/bug-test.lock.yml +0 -0
  88. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/bug-test.md +0 -0
  89. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/catalog-assign.yml +0 -0
  90. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/codeql.yml +0 -0
  91. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/docs.yml +0 -0
  92. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/lint.yml +0 -0
  93. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/publish-pypi.yml +0 -0
  94. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/release-trigger.yml +0 -0
  95. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/release.yml +0 -0
  96. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/stale.yml +0 -0
  97. {specify_cli-0.13.2 → specify_cli-0.13.4}/.github/workflows/test.yml +0 -0
  98. {specify_cli-0.13.2 → specify_cli-0.13.4}/.gitignore +0 -0
  99. {specify_cli-0.13.2 → specify_cli-0.13.4}/.markdownlint-cli2.jsonc +0 -0
  100. {specify_cli-0.13.2 → specify_cli-0.13.4}/.pre-commit-config.yaml +0 -0
  101. {specify_cli-0.13.2 → specify_cli-0.13.4}/.zenodo.json +0 -0
  102. {specify_cli-0.13.2 → specify_cli-0.13.4}/AGENTS.md +0 -0
  103. {specify_cli-0.13.2 → specify_cli-0.13.4}/CITATION.cff +0 -0
  104. {specify_cli-0.13.2 → specify_cli-0.13.4}/CODE_OF_CONDUCT.md +0 -0
  105. {specify_cli-0.13.2 → specify_cli-0.13.4}/DEVELOPMENT.md +0 -0
  106. {specify_cli-0.13.2 → specify_cli-0.13.4}/LICENSE +0 -0
  107. {specify_cli-0.13.2 → specify_cli-0.13.4}/README.md +0 -0
  108. {specify_cli-0.13.2 → specify_cli-0.13.4}/SECURITY.md +0 -0
  109. {specify_cli-0.13.2 → specify_cli-0.13.4}/SUPPORT.md +0 -0
  110. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/.gitignore +0 -0
  111. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/README.md +0 -0
  112. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/community/friends.md +0 -0
  113. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/community/overview.md +0 -0
  114. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/community/walkthroughs.md +0 -0
  115. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/concepts/sdd.md +0 -0
  116. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/concepts/spec-persistence.md +0 -0
  117. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/docfx.json +0 -0
  118. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/guides/evolving-specs.md +0 -0
  119. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/guides/monorepo.md +0 -0
  120. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/index.md +0 -0
  121. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/install/air-gapped.md +0 -0
  122. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/install/one-time.md +0 -0
  123. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/install/pipx.md +0 -0
  124. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/install/pypi.md +0 -0
  125. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/install/uv.md +0 -0
  126. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/local-development.md +0 -0
  127. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/quickstart.md +0 -0
  128. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/agentic-bugfix.md +0 -0
  129. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/agentic-sdd.md +0 -0
  130. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/authentication.md +0 -0
  131. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/bundles.md +0 -0
  132. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/overview.md +0 -0
  133. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/presets.md +0 -0
  134. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/reference/workflows.md +0 -0
  135. {specify_cli-0.13.2 → specify_cli-0.13.4}/docs/template/public/main.css +0 -0
  136. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/business-analyst/README.md +0 -0
  137. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/business-analyst/bundle.yml +0 -0
  138. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/developer/README.md +0 -0
  139. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/developer/bundle.yml +0 -0
  140. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/product-manager/README.md +0 -0
  141. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/product-manager/bundle.yml +0 -0
  142. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/security-researcher/README.md +0 -0
  143. {specify_cli-0.13.2 → specify_cli-0.13.4}/examples/bundles/security-researcher/bundle.yml +0 -0
  144. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  145. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  146. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  147. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/README.md +0 -0
  148. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  149. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/README.md +0 -0
  150. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/agent-context-config.yml +0 -0
  151. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/agent-context-defaults.json +0 -0
  152. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  153. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/extension.yml +0 -0
  154. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
  155. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
  156. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  157. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/assess/README.md +0 -0
  158. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/assess/commands/speckit.assess.decide.md +0 -0
  159. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/assess/commands/speckit.assess.define.md +0 -0
  160. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/assess/commands/speckit.assess.intake.md +0 -0
  161. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/assess/commands/speckit.assess.research.md +0 -0
  162. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/assess/commands/speckit.assess.shape.md +0 -0
  163. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/assess/extension.yml +0 -0
  164. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/bug/README.md +0 -0
  165. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  166. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  167. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/bug/commands/speckit.bug.test.md +0 -0
  168. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/bug/extension.yml +0 -0
  169. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/catalog.json +0 -0
  170. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/README.md +0 -0
  171. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/commands/speckit.git.commit.md +0 -0
  172. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/commands/speckit.git.feature.md +0 -0
  173. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/commands/speckit.git.initialize.md +0 -0
  174. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/commands/speckit.git.remote.md +0 -0
  175. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/commands/speckit.git.validate.md +0 -0
  176. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/config-template.yml +0 -0
  177. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/extension.yml +0 -0
  178. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/git-config.yml +0 -0
  179. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  180. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  181. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/bash/git-common.sh +0 -0
  182. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  183. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  184. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  185. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  186. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/python/auto_commit.py +0 -0
  187. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
  188. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/python/git_common.py +0 -0
  189. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/git/scripts/python/initialize_repo.py +0 -0
  190. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/selftest/commands/selftest.md +0 -0
  191. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/selftest/extension.yml +0 -0
  192. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/.gitignore +0 -0
  193. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/CHANGELOG.md +0 -0
  194. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/EXAMPLE-README.md +0 -0
  195. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/LICENSE +0 -0
  196. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/README.md +0 -0
  197. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/commands/example.md +0 -0
  198. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/config-template.yml +0 -0
  199. {specify_cli-0.13.2 → specify_cli-0.13.4}/extensions/template/extension.yml +0 -0
  200. {specify_cli-0.13.2 → specify_cli-0.13.4}/integrations/CONTRIBUTING.md +0 -0
  201. {specify_cli-0.13.2 → specify_cli-0.13.4}/integrations/README.md +0 -0
  202. {specify_cli-0.13.2 → specify_cli-0.13.4}/integrations/catalog.community.json +0 -0
  203. {specify_cli-0.13.2 → specify_cli-0.13.4}/media/bootstrap-claude-code.gif +0 -0
  204. {specify_cli-0.13.2 → specify_cli-0.13.4}/media/logo_large.webp +0 -0
  205. {specify_cli-0.13.2 → specify_cli-0.13.4}/media/logo_small.webp +0 -0
  206. {specify_cli-0.13.2 → specify_cli-0.13.4}/media/spec-kit-video-header.jpg +0 -0
  207. {specify_cli-0.13.2 → specify_cli-0.13.4}/media/specify_cli.gif +0 -0
  208. {specify_cli-0.13.2 → specify_cli-0.13.4}/newsletters/2026-April.md +0 -0
  209. {specify_cli-0.13.2 → specify_cli-0.13.4}/newsletters/2026-February.md +0 -0
  210. {specify_cli-0.13.2 → specify_cli-0.13.4}/newsletters/2026-June.md +0 -0
  211. {specify_cli-0.13.2 → specify_cli-0.13.4}/newsletters/2026-March.md +0 -0
  212. {specify_cli-0.13.2 → specify_cli-0.13.4}/newsletters/2026-May.md +0 -0
  213. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/ARCHITECTURE.md +0 -0
  214. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/PUBLISHING.md +0 -0
  215. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/README.md +0 -0
  216. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/catalog.json +0 -0
  217. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/lean/README.md +0 -0
  218. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/lean/commands/speckit.constitution.md +0 -0
  219. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/lean/commands/speckit.implement.md +0 -0
  220. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/lean/commands/speckit.plan.md +0 -0
  221. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/lean/commands/speckit.specify.md +0 -0
  222. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/lean/commands/speckit.tasks.md +0 -0
  223. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/lean/preset.yml +0 -0
  224. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/scaffold/README.md +0 -0
  225. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  226. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/scaffold/commands/speckit.specify.md +0 -0
  227. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/scaffold/preset.yml +0 -0
  228. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/scaffold/templates/myext-template.md +0 -0
  229. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/scaffold/templates/spec-template.md +0 -0
  230. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/commands/speckit.specify.md +0 -0
  231. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  232. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/preset.yml +0 -0
  233. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/templates/checklist-template.md +0 -0
  234. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/templates/constitution-template.md +0 -0
  235. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/templates/plan-template.md +0 -0
  236. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/templates/spec-template.md +0 -0
  237. {specify_cli-0.13.2 → specify_cli-0.13.4}/presets/self-test/templates/tasks-template.md +0 -0
  238. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/bash/check-prerequisites.sh +0 -0
  239. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/bash/common.sh +0 -0
  240. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/bash/create-new-feature.sh +0 -0
  241. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/bash/setup-plan.sh +0 -0
  242. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/bash/setup-tasks.sh +0 -0
  243. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/powershell/check-prerequisites.ps1 +0 -0
  244. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/powershell/common.ps1 +0 -0
  245. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/powershell/create-new-feature.ps1 +0 -0
  246. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/powershell/setup-plan.ps1 +0 -0
  247. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/powershell/setup-tasks.ps1 +0 -0
  248. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/python/check_prerequisites.py +0 -0
  249. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/python/common.py +0 -0
  250. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/python/create_new_feature.py +0 -0
  251. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/python/setup_plan.py +0 -0
  252. {specify_cli-0.13.2 → specify_cli-0.13.4}/scripts/python/setup_tasks.py +0 -0
  253. {specify_cli-0.13.2 → specify_cli-0.13.4}/spec-driven.md +0 -0
  254. {specify_cli-0.13.2 → specify_cli-0.13.4}/spec-kit.code-workspace +0 -0
  255. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/__init__.py +0 -0
  256. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_agent_config.py +0 -0
  257. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_assets.py +0 -0
  258. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_console.py +0 -0
  259. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_github_http.py +0 -0
  260. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_init_options.py +0 -0
  261. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_invocation_style.py +0 -0
  262. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_project.py +0 -0
  263. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_toml_string.py +0 -0
  264. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_utils.py +0 -0
  265. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/_version.py +0 -0
  266. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/agents.py +0 -0
  267. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/authentication/__init__.py +0 -0
  268. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/authentication/azure_devops.py +0 -0
  269. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/authentication/base.py +0 -0
  270. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/authentication/config.py +0 -0
  271. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/authentication/github.py +0 -0
  272. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/authentication/http.py +0 -0
  273. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/__init__.py +0 -0
  274. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  275. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/lib/__init__.py +0 -0
  276. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/lib/project.py +0 -0
  277. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/lib/versioning.py +0 -0
  278. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/lib/yamlio.py +0 -0
  279. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/models/__init__.py +0 -0
  280. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/models/records.py +0 -0
  281. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/__init__.py +0 -0
  282. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/adapters.py +0 -0
  283. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  284. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/conflict.py +0 -0
  285. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/installer.py +0 -0
  286. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/packager.py +0 -0
  287. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/primitives.py +0 -0
  288. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/references.py +0 -0
  289. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/resolver.py +0 -0
  290. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/bundler/services/validator.py +0 -0
  291. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/catalogs.py +0 -0
  292. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/commands/__init__.py +0 -0
  293. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/commands/bundle/__init__.py +0 -0
  294. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/extensions/_commands.py +0 -0
  295. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integration_runtime.py +0 -0
  296. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integration_scaffold.py +0 -0
  297. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integration_state.py +0 -0
  298. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integration_status.py +0 -0
  299. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/_commands.py +0 -0
  300. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/_install_commands.py +0 -0
  301. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  302. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/_query_commands.py +0 -0
  303. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  304. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/agy/__init__.py +0 -0
  305. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/amp/__init__.py +0 -0
  306. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  307. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/base.py +0 -0
  308. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/bob/__init__.py +0 -0
  309. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/claude/__init__.py +0 -0
  310. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  311. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/codex/__init__.py +0 -0
  312. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  313. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  314. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/devin/__init__.py +0 -0
  315. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  316. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/forge/__init__.py +0 -0
  317. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  318. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/generic/__init__.py +0 -0
  319. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/goose/__init__.py +0 -0
  320. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/grok/__init__.py +0 -0
  321. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  322. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/junie/__init__.py +0 -0
  323. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  324. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  325. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
  326. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  327. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/manifest.py +0 -0
  328. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/omp/__init__.py +0 -0
  329. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  330. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/pi/__init__.py +0 -0
  331. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  332. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  333. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  334. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/shai/__init__.py +0 -0
  335. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  336. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/trae/__init__.py +0 -0
  337. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  338. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  339. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/integrations/zed/__init__.py +0 -0
  340. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/presets/__init__.py +0 -0
  341. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/presets/_commands.py +0 -0
  342. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/shared_infra.py +0 -0
  343. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/__init__.py +0 -0
  344. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/base.py +0 -0
  345. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/overlays/__init__.py +0 -0
  346. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/overlays/_commands.py +0 -0
  347. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/overlays/composer.py +0 -0
  348. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
  349. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/overlays/merge.py +0 -0
  350. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/overlays/schema.py +0 -0
  351. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/__init__.py +0 -0
  352. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  353. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
  354. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
  355. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
  356. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  357. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  358. {specify_cli-0.13.2 → specify_cli-0.13.4}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  359. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/checklist-template.md +0 -0
  360. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/analyze.md +0 -0
  361. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/checklist.md +0 -0
  362. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/clarify.md +0 -0
  363. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/constitution.md +0 -0
  364. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/converge.md +0 -0
  365. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/implement.md +0 -0
  366. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/plan.md +0 -0
  367. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/specify.md +0 -0
  368. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/tasks.md +0 -0
  369. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/commands/taskstoissues.md +0 -0
  370. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/constitution-template.md +0 -0
  371. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/plan-template.md +0 -0
  372. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/spec-template.md +0 -0
  373. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/tasks-template.md +0 -0
  374. {specify_cli-0.13.2 → specify_cli-0.13.4}/templates/vscode-settings.json +0 -0
  375. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/__init__.py +0 -0
  376. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/auth_helpers.py +0 -0
  377. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/bundler_helpers.py +0 -0
  378. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/conftest.py +0 -0
  379. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/contract/test_bundle_cli.py +0 -0
  380. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/__init__.py +0 -0
  381. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/assess/__init__.py +0 -0
  382. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/assess/test_assess_extension.py +0 -0
  383. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/bug/__init__.py +0 -0
  384. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/bug/test_bug_extension.py +0 -0
  385. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/git/__init__.py +0 -0
  386. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
  387. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/test_agent_context_cli_free.py +0 -0
  388. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/test_extension_agent_context.py +0 -0
  389. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  390. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  391. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/hooks/TESTING.md +0 -0
  392. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/hooks/plan.md +0 -0
  393. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/hooks/spec.md +0 -0
  394. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/hooks/tasks.md +0 -0
  395. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/http_helpers.py +0 -0
  396. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integration/test_bundler_catalog_stack.py +0 -0
  397. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integration/test_bundler_init_install.py +0 -0
  398. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integration/test_bundler_install_flow.py +0 -0
  399. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integration/test_bundler_local_install.py +0 -0
  400. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integration/test_bundler_offline.py +0 -0
  401. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integration/test_bundler_security_paths.py +0 -0
  402. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/__init__.py +0 -0
  403. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/conftest.py +0 -0
  404. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_cli.py +0 -0
  405. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_extra_args.py +0 -0
  406. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_home_isolation.py +0 -0
  407. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_agy.py +0 -0
  408. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_amp.py +0 -0
  409. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_auggie.py +0 -0
  410. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_base_markdown.py +0 -0
  411. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_base_skills.py +0 -0
  412. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_base_toml.py +0 -0
  413. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_base_yaml.py +0 -0
  414. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_bob.py +0 -0
  415. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_claude.py +0 -0
  416. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_cline.py +0 -0
  417. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_codebuddy.py +0 -0
  418. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_codex.py +0 -0
  419. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_copilot.py +0 -0
  420. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_cursor_agent.py +0 -0
  421. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_devin.py +0 -0
  422. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_firebender.py +0 -0
  423. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_gemini.py +0 -0
  424. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_generic.py +0 -0
  425. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_goose.py +0 -0
  426. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_grok.py +0 -0
  427. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_hermes.py +0 -0
  428. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_junie.py +0 -0
  429. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_kilocode.py +0 -0
  430. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_kimi.py +0 -0
  431. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_kiro_cli.py +0 -0
  432. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_lingma.py +0 -0
  433. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_omp.py +0 -0
  434. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_opencode.py +0 -0
  435. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_pi.py +0 -0
  436. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_qodercli.py +0 -0
  437. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_qwen.py +0 -0
  438. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_rovodev.py +0 -0
  439. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_scaffold.py +0 -0
  440. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_shai.py +0 -0
  441. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_state.py +0 -0
  442. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_tabnine.py +0 -0
  443. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_trae.py +0 -0
  444. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_vibe.py +0 -0
  445. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_zcode.py +0 -0
  446. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_integration_zed.py +0 -0
  447. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_manifest.py +0 -0
  448. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  449. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/parity_helpers.py +0 -0
  450. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/self_upgrade_helpers.py +0 -0
  451. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_authentication.py +0 -0
  452. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_branch_numbering.py +0 -0
  453. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_check_prerequisites_paths_only.py +0 -0
  454. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_check_prerequisites_python_parity.py +0 -0
  455. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_check_tool.py +0 -0
  456. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_cli_version.py +0 -0
  457. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_command_template_py_scripts.py +0 -0
  458. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_commands_package.py +0 -0
  459. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_console_imports.py +0 -0
  460. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_create_new_feature_python_parity.py +0 -0
  461. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_extension_registration.py +0 -0
  462. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_extension_skills.py +0 -0
  463. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_extension_update_hardening.py +0 -0
  464. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_github_http.py +0 -0
  465. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_github_workflows.py +0 -0
  466. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_init_dir.py +0 -0
  467. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_init_dir_cli.py +0 -0
  468. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_live_transient_windows.py +0 -0
  469. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_merge.py +0 -0
  470. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_post_process.py +0 -0
  471. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_presets.py +0 -0
  472. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_ps1_encoding.py +0 -0
  473. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_registrar_path_traversal.py +0 -0
  474. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_self_upgrade_detection.py +0 -0
  475. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_self_upgrade_execution.py +0 -0
  476. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_self_upgrade_guidance.py +0 -0
  477. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_self_upgrade_verification.py +0 -0
  478. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_setup_plan_feature_json.py +0 -0
  479. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_setup_plan_no_overwrite.py +0 -0
  480. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_setup_plan_python_parity.py +0 -0
  481. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_setup_tasks.py +0 -0
  482. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_setup_tasks_python_parity.py +0 -0
  483. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_shared_infra_integrity.py +0 -0
  484. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_skill_placeholder_py.py +0 -0
  485. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_timestamp_branches.py +0 -0
  486. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_upgrade.py +0 -0
  487. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_utils.py +0 -0
  488. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_utils_assets_imports.py +0 -0
  489. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_version_imports.py +0 -0
  490. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/test_workflow_run_without_project.py +0 -0
  491. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundle_download_url.py +0 -0
  492. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_adapters.py +0 -0
  493. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_conflict.py +0 -0
  494. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_packager.py +0 -0
  495. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_primitives.py +0 -0
  496. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_records.py +0 -0
  497. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_references.py +0 -0
  498. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_resolver.py +0 -0
  499. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_validator.py +0 -0
  500. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/unit/test_bundler_versioning.py +0 -0
  501. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/conftest.py +0 -0
  502. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/test_overlay_commands.py +0 -0
  503. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/test_overlay_composer.py +0 -0
  504. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/test_overlay_layer_sources.py +0 -0
  505. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/test_overlay_merge.py +0 -0
  506. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/test_overlay_schema.py +0 -0
  507. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/test_overlay_security.py +0 -0
  508. {specify_cli-0.13.2 → specify_cli-0.13.4}/tests/workflows/test_resolver_integration.py +0 -0
  509. {specify_cli-0.13.2 → specify_cli-0.13.4}/workflows/ARCHITECTURE.md +0 -0
  510. {specify_cli-0.13.2 → specify_cli-0.13.4}/workflows/PUBLISHING.md +0 -0
  511. {specify_cli-0.13.2 → specify_cli-0.13.4}/workflows/README.md +0 -0
  512. {specify_cli-0.13.2 → specify_cli-0.13.4}/workflows/catalog.json +0 -0
  513. {specify_cli-0.13.2 → specify_cli-0.13.4}/workflows/speckit/workflow.yml +0 -0
  514. {specify_cli-0.13.2 → specify_cli-0.13.4}/workflows/step-catalog.community.json +0 -0
  515. {specify_cli-0.13.2 → specify_cli-0.13.4}/workflows/step-catalog.json +0 -0
@@ -97,6 +97,17 @@ echo -e "\n🤖 Installing CodeBuddy CLI..."
97
97
  run_command "npm install -g @tencent-ai/codebuddy-code@latest"
98
98
  echo "✅ Done"
99
99
 
100
+ echo -e "\n🤖 Installing Factory Droid CLI..."
101
+ run_command "npm install -g droid@latest"
102
+
103
+ if ! command -v droid >/dev/null 2>&1; then
104
+ echo -e "\033[0;31m[ERROR] Droid CLI installation did not create 'droid' in PATH.\033[0m" >&2
105
+ exit 1
106
+ fi
107
+
108
+ run_command "droid --version > /dev/null"
109
+ echo "✅ Done"
110
+
100
111
  # Installing UV (Python package manager)
101
112
  echo -e "\n🐍 Installing UV - Python Package Manager..."
102
113
  run_command "pipx install uv"
@@ -8,7 +8,7 @@ body:
8
8
  value: |
9
9
  Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
10
10
 
11
- **Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Grok Build, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
11
+ **Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Factory Droid, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Grok Build, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
12
12
 
13
13
  - type: input
14
14
  id: agent-name
@@ -71,6 +71,7 @@ body:
71
71
  - Codex CLI
72
72
  - Cursor
73
73
  - Devin for Terminal
74
+ - Factory Droid
74
75
  - Firebender
75
76
  - Forge
76
77
  - Gemini CLI
@@ -65,6 +65,7 @@ body:
65
65
  - Codex CLI
66
66
  - Cursor
67
67
  - Devin for Terminal
68
+ - Factory Droid
68
69
  - Firebender
69
70
  - Forge
70
71
  - Gemini CLI
@@ -0,0 +1,115 @@
1
+ """Check that committed security audit requirements are up to date."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ import subprocess
7
+ import sys
8
+ from pathlib import Path
9
+
10
+
11
+ REPO_ROOT = Path(__file__).resolve().parents[2]
12
+ COMMITTED_REQUIREMENTS = REPO_ROOT / ".github" / "security-audit-requirements.txt"
13
+ DEPENDENCY_INPUTS = ("pyproject.toml", ".github/security-audit-requirements.txt")
14
+
15
+
16
+ def _dependency_diff_refs() -> tuple[str, str]:
17
+ base_ref = os.environ.get("DEPENDENCY_DIFF_BASE", "").strip()
18
+ head_ref = os.environ.get("DEPENDENCY_DIFF_HEAD", "").strip() or "HEAD"
19
+ if base_ref and not set(base_ref) <= {"0"}:
20
+ return base_ref, head_ref
21
+ # Fallback when no usable base is supplied (push with an all-zero
22
+ # ``github.event.before``, manual dispatch, etc.). ``HEAD^`` fails on a
23
+ # shallow checkout or a single-commit repo; that ``git diff`` error is
24
+ # caught by the caller and deliberately treated as "inputs changed" so the
25
+ # audit runs anyway — failing safe (audit) rather than skipping silently.
26
+ return "HEAD^", "HEAD"
27
+
28
+
29
+ def _dependency_inputs_changed() -> bool:
30
+ base_ref, head_ref = _dependency_diff_refs()
31
+ try:
32
+ result = subprocess.run(
33
+ [
34
+ "git",
35
+ "diff",
36
+ "--name-only",
37
+ base_ref,
38
+ head_ref,
39
+ "--",
40
+ *DEPENDENCY_INPUTS,
41
+ ],
42
+ check=True,
43
+ cwd=REPO_ROOT,
44
+ stderr=subprocess.PIPE,
45
+ stdout=subprocess.PIPE,
46
+ text=True,
47
+ )
48
+ except subprocess.CalledProcessError as exc:
49
+ print(
50
+ "Could not determine changed dependency inputs; checking requirements.",
51
+ file=sys.stderr,
52
+ )
53
+ if exc.stderr:
54
+ print(exc.stderr.strip(), file=sys.stderr)
55
+ return True
56
+
57
+ changed_inputs = [line for line in result.stdout.splitlines() if line]
58
+ if not changed_inputs:
59
+ print("Dependency audit inputs unchanged; sync check skipped.")
60
+ return False
61
+
62
+ print(f"Dependency audit inputs changed: {', '.join(changed_inputs)}")
63
+ return True
64
+
65
+
66
+ def main() -> int:
67
+ if not _dependency_inputs_changed():
68
+ return 0
69
+
70
+ generated_requirements_env = os.environ.get("GENERATED_REQUIREMENTS", "").strip()
71
+ if not generated_requirements_env:
72
+ print(
73
+ "GENERATED_REQUIREMENTS must be set to the temporary output file path.",
74
+ file=sys.stderr,
75
+ )
76
+ return 1
77
+
78
+ generated_requirements = Path(generated_requirements_env)
79
+ generated_requirements.parent.mkdir(parents=True, exist_ok=True)
80
+
81
+ subprocess.run(
82
+ [
83
+ "uv",
84
+ "pip",
85
+ "compile",
86
+ "pyproject.toml",
87
+ "--extra",
88
+ "test",
89
+ "--universal",
90
+ "--upgrade",
91
+ "--generate-hashes",
92
+ "--quiet",
93
+ "--no-header",
94
+ "--output-file",
95
+ str(generated_requirements),
96
+ ],
97
+ check=True,
98
+ cwd=REPO_ROOT,
99
+ )
100
+
101
+ committed = COMMITTED_REQUIREMENTS.read_text(encoding="utf-8")
102
+ generated = generated_requirements.read_text(encoding="utf-8")
103
+ if committed == generated:
104
+ return 0
105
+
106
+ print(
107
+ "Regenerate .github/security-audit-requirements.txt with the documented "
108
+ "uv pip compile command.",
109
+ file=sys.stderr,
110
+ )
111
+ return 1
112
+
113
+
114
+ if __name__ == "__main__":
115
+ raise SystemExit(main())
@@ -0,0 +1,253 @@
1
+ annotated-doc==0.0.4 \
2
+ --hash=sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 \
3
+ --hash=sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4
4
+ # via typer
5
+ click==8.4.2 \
6
+ --hash=sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6 \
7
+ --hash=sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76
8
+ # via specify-cli (pyproject.toml)
9
+ colorama==0.4.6 ; sys_platform == 'win32' \
10
+ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
11
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
12
+ # via
13
+ # click
14
+ # pytest
15
+ # typer
16
+ coverage==7.15.2 \
17
+ --hash=sha256:075560438765b7a2ef43bf7aa7758661b53d889df47f062a31bda6c1ade553a2 \
18
+ --hash=sha256:0901cfe6c13bcd2302da4f83e884555d2a22bda6e4c476f09ef204ba20ca536e \
19
+ --hash=sha256:094dd37f3ef7b2da8b068b583d1f4c40f91c65197e16c52a71962d5d537fc5db \
20
+ --hash=sha256:09f5c6ec5901f667bd97dd140b5b9a2586b10efec66f46fb1e6d8135f8b95bdf \
21
+ --hash=sha256:0e55510bc98ae943cece9e667a6c0fe94c6a92913720dea34243657a17993d0c \
22
+ --hash=sha256:1121caa19159a38b5463eaae4b1e1fde81e525b15ecc5e000cd5b1a108f743a8 \
23
+ --hash=sha256:1268ac8fb9ddcd783d3948dbabaf80a5d53bfdaa0575e873e2139a692f797443 \
24
+ --hash=sha256:1473b3ba8e7ee0f076117b1a72c23f579a2b9e2bb742f48a8d86ea27ca93f91a \
25
+ --hash=sha256:17c432b5f73ad52ef46fb06019f6fa7c66ce381961cf0f7dfd1d3a4bd3a98145 \
26
+ --hash=sha256:1adac78e5abc7c5438f7a209c9ca69d06542f0bf481d728b6989ea80b813fdf9 \
27
+ --hash=sha256:1cd7a5beb7af3e864a13b1f0fb26efd3695da43ef0daf71e586adfffaf34d5b2 \
28
+ --hash=sha256:1d16e3a7104ea84f03e614611b3edbf6fb6892554b3ab0fe7fbb3f2b2ef04376 \
29
+ --hash=sha256:25fd15dd40a0a2c51a500d664ca29053c09c3259d998407bf982b6e114696138 \
30
+ --hash=sha256:2617f8799d268fabdeef42a7e89ac3a23e1deee9025427db2df970f99a89a578 \
31
+ --hash=sha256:26c3b04a6377fd7c09800921fa934e3a17c0020439cd59df73e73ae1d4b6a78c \
32
+ --hash=sha256:29c052f7c83ccfcc5c577eaae025d2e4a9bb80daf03c0ac31c996e83b000ce88 \
33
+ --hash=sha256:2f1ec6f304b156669cfde653b4e9a953f5de87e247ea02ac599bce0ab2744036 \
34
+ --hash=sha256:2fbeeeecea279727f8ac16c8e1133ddfeee793e985c86ae343d6a5ce744eef8c \
35
+ --hash=sha256:2ff08701be2d1556fc78b326c80a3e8042da09352ecb3819105f8e386c8a3071 \
36
+ --hash=sha256:38c9518b7103826c403a461544e3c2e77151e8676d06eaed85911a97e962584a \
37
+ --hash=sha256:3df60dc267f0a2ca23cb7a9ab1109c62b9335ffbf519fcfe167157c28c09b81d \
38
+ --hash=sha256:3ed010aa1b69cda8e827aabfca9866216c980e2dca82ab9a78c5f83689964c8b \
39
+ --hash=sha256:40f633c5c5fc783732f6312280122e859538fa24461235597c13d803ea9a108a \
40
+ --hash=sha256:42ec3d989421b174a2ab607c1539f24127ad362757b7f1c0c0d7a2993f7eb37b \
41
+ --hash=sha256:434e68d531858205895eb0d74b73d20b84260de426387d53c422a5acda2cf050 \
42
+ --hash=sha256:44826758cfe73fcd0e6af5deb4ba6d5417cc1d13df3acb35c93484a11160f846 \
43
+ --hash=sha256:4510fb9cdf6bb02dfa6af0be4a534b8102d086e22e4a33f8836df663da3d660d \
44
+ --hash=sha256:48ccc6395958eda89093ecdc35644c86f23a8b23a7f4d44958812b721aad67c1 \
45
+ --hash=sha256:4d3361879d736f469f45723c11ea1a5bbdaf1f6928f0e632c940378b5aa9b660 \
46
+ --hash=sha256:582edc45c2040543fef83341be23c43024a3ab3ae0c2d8bc498a06282905ad40 \
47
+ --hash=sha256:63022c4c8dec1d0342f05c3ede99842fe3d007689acc45e86f123a1746e4a026 \
48
+ --hash=sha256:67d7602480a47bdf5b675635403625553ebaa70d5a62a657c035149fd401cea0 \
49
+ --hash=sha256:68af907f595ab01a78f794932ff3bdf929c316d3000810d38dbc247129e26f8b \
50
+ --hash=sha256:6aa28cfb6488e5453b5b762d65f73aa586380f6693a04d58078ce228a29b06c0 \
51
+ --hash=sha256:6c0be82b4d4aa5b2704e08518e2252f3e3d110164bcca826816801052e48a7aa \
52
+ --hash=sha256:6f6966fc30e6f06ca8f98fb0ce51eda6b111b3ee8d066a8b1ec9e77fa06ab55d \
53
+ --hash=sha256:6fc448c377d6eeb00a47c673494bd9bae29280ca53987e1869e67ebedfe20658 \
54
+ --hash=sha256:728a33676d4c3f0db977990a4bd421dcaa3be3e53b5b6273036fff6666008e89 \
55
+ --hash=sha256:7466cc7ab6dc0db871d264bf99e8779f0917ee63d40730af0552f71535a6e072 \
56
+ --hash=sha256:77f091ea3a9cc611cd29f433565476bc1936c084ac8eee00ea0e7e70c27e4199 \
57
+ --hash=sha256:77f0ef5011df53a4bd1b35211ab122287f8d9b8d7aa1c4553e5c2deb24b1d446 \
58
+ --hash=sha256:7c63387e21ab21f512c69c9756a8c7dadd322c7275edb064064433c9a09c3743 \
59
+ --hash=sha256:7d29ca7bd67af6e12e74632d65f026eabc1364da5c254494cd914446a28a3ef7 \
60
+ --hash=sha256:7dc2950a2992cd676d35c20ae63522836deeb034f08874699d14068710af3dc1 \
61
+ --hash=sha256:7e8f27131dc7cd53de2c137dd207b3720919320b3c20d499dc30aa9ee6173287 \
62
+ --hash=sha256:81f382c5a94b434ec1f6da607edb904c76d7212e618cd4d1bc9f97bed4120ef5 \
63
+ --hash=sha256:835ec4e20b45f0a7f63ed78f94065aca00de033403df8377bfe8b9c6abc0a7be \
64
+ --hash=sha256:8bb9f4b4279187560796a4cdaca3b0a93dd97e48ee667df005f4ed9a97403688 \
65
+ --hash=sha256:8c726b232659cbd2ae57ade46509eb068c9bd7a06df9fcbff6fe484870006934 \
66
+ --hash=sha256:913b6c56e110da40e035bbd168353bf7aaa2544a5eaccea5d98a4629aac156c7 \
67
+ --hash=sha256:97a5c5457a9fb1d6c4e06cfb5dc835871fbfb6a6a51addc9e925bdeff5ef7440 \
68
+ --hash=sha256:9854ca62c152874b2060772503535be2e8f53f70b8aaa7686b094888d872f984 \
69
+ --hash=sha256:9911f31aad8906abe337c271343485cf20df5e70df5d2f57f9f136e7b55f26bc \
70
+ --hash=sha256:9b5bd92ff1ec22e535eab0de75fa6db021992791f461a2aceb7822c625a1187d \
71
+ --hash=sha256:9deddf09eecb717b7f980414b43d90a5b22ff3967d2949ab29cb0aa83d9e9098 \
72
+ --hash=sha256:9e36686f7a442185db2400b3df171aac520869faf9deb59df687d28659eda2a6 \
73
+ --hash=sha256:9f4432898c4bf2fba0435bbe35dd4437d7264565e5a88a21f5b49d8662a6b629 \
74
+ --hash=sha256:a0f47002c6eeb7c280228467a4cb0cc15ca2103a8421b986b2d3ec04a0f9bd8b \
75
+ --hash=sha256:a164b50081fc7357331c4024ef4d17b78ba325f8380d05f5a69599a7e05257ee \
76
+ --hash=sha256:a29ec5305a7335aacee2d799e3422e91e1c8a12474986e2b3b07e315c91be82f \
77
+ --hash=sha256:a300c6934e0989c327b9e8a1e110329da4641149f872bbe9f70168be66da76c1 \
78
+ --hash=sha256:a4c46b247b5d4b78f613bd89fea926d32b25c6cc61a50bd1e99ba310348f3dad \
79
+ --hash=sha256:a638db90c61cd219aeee65e83a24fdaa57269a741ae0cf773309208ac862cee3 \
80
+ --hash=sha256:a63b9e190711134d581c4d703df5df09851b1acf99792c7aacbbe9f41f0283c9 \
81
+ --hash=sha256:aaccad4129d735a8a4d526f26929894c9a4e8ef7034566f210b176749d6906e3 \
82
+ --hash=sha256:ae901f7e55ba405c84ee1cab3d3e962e4e871e4a2bcb9c90911adbd69b42ac5a \
83
+ --hash=sha256:afa29e2eff3d5729267e2cb2fd4ce9d61c952932fb2694e34ccb5d9540c6a296 \
84
+ --hash=sha256:affd532502d34c0472d0cdb181325c89f1d2c44992fef0c17e88e7b1576259a1 \
85
+ --hash=sha256:b171bdd71cb7ff792bf32e376173b0ace7e7963e7e57c58dfc42063a6a7174cd \
86
+ --hash=sha256:b868acc62aa5de3be7a9d05c2333bf8359ca987e43f9cb30ff8fbda6a024ab73 \
87
+ --hash=sha256:b9a6367e4aff723e8ee8190836836124284e8fcd4265e307c844010cfa074f3f \
88
+ --hash=sha256:bbc808daf4f5cd567af8075ecc72d21c6dfef9a254709a621a84c217c935ebc0 \
89
+ --hash=sha256:bbf44513ceb1589e31948e20eafbde9deaface90e1a1afa5f5f77b4423d17ce6 \
90
+ --hash=sha256:bcc0aae933921d03096f53b0b03eeb702129fd406dee59f08d2efacc68681fa5 \
91
+ --hash=sha256:bfd341ccf78128e72c094bc70cc25b3ef309c33c7c2c66ba3ed4309549e02de1 \
92
+ --hash=sha256:c6a98d698f9e2c8008d0370ec7fc452ebfcc530002ae2d0061170d768b992589 \
93
+ --hash=sha256:cb0fddaa6884be6aae36ced9544b5e90f7d5f03845a2853bf47a14953a4e8688 \
94
+ --hash=sha256:cee0f89f4767a6057c8fbf168f8135f18be651300496086bd873e3189fed0487 \
95
+ --hash=sha256:d17d7512151fedfcc64c1821a8977fc9be0dbf495754669afcab7b57abc98ae9 \
96
+ --hash=sha256:d46e62cb35d91e6e2589fda6d28074426b0e276422b5d2ebef2c6b11dc60dbfd \
97
+ --hash=sha256:d50dd325e18ec25bfcc10cd7f99b04df1ab9ec76b0918c260e60817ad0643dee \
98
+ --hash=sha256:db9c8438057e5b0f6a22a0af99c0c1d26b57fbbdbd1be5861ddb8f897fcc3a2d \
99
+ --hash=sha256:dee88b1ed88587abd8c0269a1fc1f4cc77f7750d1dfde2869e2a123af420e67d \
100
+ --hash=sha256:dfd3db045e95960ae3683059571e597fda7cc610106a8916f77c5839048c1deb \
101
+ --hash=sha256:e26ff680768b8095e8874aabe0e9d3a47a2a9f176a8340d05f8604c56457c23a \
102
+ --hash=sha256:e370c12133095ff18432de8c044962be85a5a96d90c6fcbce8e17e76236d2328 \
103
+ --hash=sha256:e38def96ad59853824c97953fdcd2c320a84ba3ce99b417db78af8bb6c3db635 \
104
+ --hash=sha256:e8f91bce78e32343af184c3b7fa28fcf5a9e2641f4b6623d392038f804939188 \
105
+ --hash=sha256:eb6bcae8d1a9d305351ecb108232441d11c5cfe9de840a04388ba5d2db8d735c \
106
+ --hash=sha256:f653e5d7248c1191ec988a85c72edeab46c3ff44f90639a4ed4874ec0be90243 \
107
+ --hash=sha256:fe41909c9515c3bfdb5f02c4d1f857dba322d9a9a1178069b91eea77889df63a
108
+ # via pytest-cov
109
+ iniconfig==2.3.0 \
110
+ --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \
111
+ --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12
112
+ # via pytest
113
+ json5==0.15.0 \
114
+ --hash=sha256:56636a30c0e8a4665fe2179c0212f32eae3796dea89ea6f649b9436ecdb39618 \
115
+ --hash=sha256:7424d1f1eb1d56da6e3d70643f53619862b4ce81440bdb8ecfd6f875e5ba4a71
116
+ # via specify-cli (pyproject.toml)
117
+ markdown-it-py==4.2.0 \
118
+ --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \
119
+ --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a
120
+ # via rich
121
+ mdurl==0.1.2 \
122
+ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
123
+ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
124
+ # via markdown-it-py
125
+ packaging==26.2 \
126
+ --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e \
127
+ --hash=sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661
128
+ # via
129
+ # specify-cli (pyproject.toml)
130
+ # pytest
131
+ pathspec==1.1.1 \
132
+ --hash=sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a \
133
+ --hash=sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189
134
+ # via specify-cli (pyproject.toml)
135
+ platformdirs==4.11.0 \
136
+ --hash=sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0 \
137
+ --hash=sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74
138
+ # via specify-cli (pyproject.toml)
139
+ pluggy==1.6.0 \
140
+ --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \
141
+ --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
142
+ # via
143
+ # pytest
144
+ # pytest-cov
145
+ pygments==2.20.0 \
146
+ --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \
147
+ --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176
148
+ # via
149
+ # pytest
150
+ # rich
151
+ pytest==9.1.1 \
152
+ --hash=sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313 \
153
+ --hash=sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c
154
+ # via
155
+ # specify-cli (pyproject.toml)
156
+ # pytest-cov
157
+ pytest-cov==7.1.0 \
158
+ --hash=sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2 \
159
+ --hash=sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678
160
+ # via specify-cli (pyproject.toml)
161
+ pyyaml==6.0.3 \
162
+ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \
163
+ --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \
164
+ --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \
165
+ --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \
166
+ --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \
167
+ --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \
168
+ --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \
169
+ --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \
170
+ --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \
171
+ --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \
172
+ --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \
173
+ --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \
174
+ --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \
175
+ --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \
176
+ --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \
177
+ --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \
178
+ --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \
179
+ --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \
180
+ --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \
181
+ --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \
182
+ --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \
183
+ --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \
184
+ --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \
185
+ --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \
186
+ --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \
187
+ --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \
188
+ --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \
189
+ --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \
190
+ --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \
191
+ --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \
192
+ --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \
193
+ --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \
194
+ --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \
195
+ --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \
196
+ --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \
197
+ --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \
198
+ --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \
199
+ --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \
200
+ --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \
201
+ --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \
202
+ --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \
203
+ --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \
204
+ --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \
205
+ --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \
206
+ --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \
207
+ --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \
208
+ --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \
209
+ --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \
210
+ --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \
211
+ --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \
212
+ --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \
213
+ --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \
214
+ --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \
215
+ --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \
216
+ --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \
217
+ --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \
218
+ --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \
219
+ --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \
220
+ --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \
221
+ --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \
222
+ --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \
223
+ --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \
224
+ --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \
225
+ --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \
226
+ --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \
227
+ --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \
228
+ --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \
229
+ --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \
230
+ --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \
231
+ --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \
232
+ --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \
233
+ --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \
234
+ --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0
235
+ # via specify-cli (pyproject.toml)
236
+ readchar==4.2.2 \
237
+ --hash=sha256:92daf7e42c52b0787e6c75d01ecfb9a94f4ceff3764958b570c1dddedd47b200 \
238
+ --hash=sha256:e3b270fe16fc90c50ac79107700330a133dd4c63d22939f5b03b4f24564d5dd8
239
+ # via specify-cli (pyproject.toml)
240
+ rich==15.0.0 \
241
+ --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \
242
+ --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36
243
+ # via
244
+ # specify-cli (pyproject.toml)
245
+ # typer
246
+ shellingham==1.5.4 \
247
+ --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \
248
+ --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de
249
+ # via typer
250
+ typer==0.27.0 \
251
+ --hash=sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5 \
252
+ --hash=sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1
253
+ # via specify-cli (pyproject.toml)
@@ -0,0 +1,78 @@
1
+ name: Security Audit
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ push:
8
+ branches: ["main"]
9
+ pull_request:
10
+ types: [opened, synchronize, reopened]
11
+ schedule:
12
+ - cron: "17 4 * * 1"
13
+ workflow_dispatch:
14
+
15
+ jobs:
16
+ dependency-audit:
17
+ name: Dependency audit
18
+ if: ${{ github.event_name != 'schedule' }}
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
23
+ with:
24
+ fetch-depth: 0
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
28
+
29
+ - name: Set up Python
30
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
31
+ with:
32
+ python-version: "3.14"
33
+
34
+ - name: Check committed audit requirements are current
35
+ env:
36
+ DEPENDENCY_DIFF_BASE: ${{ github.event.pull_request.base.sha || github.event.before || '' }}
37
+ DEPENDENCY_DIFF_HEAD: ${{ github.sha }}
38
+ GENERATED_REQUIREMENTS: ${{ runner.temp }}/security-audit-requirements.txt
39
+ run: python .github/scripts/check_security_requirements.py
40
+
41
+ - name: Run pip-audit (committed requirements)
42
+ run: uvx --from pip-audit==2.10.0 pip-audit --disable-pip --require-hashes -r .github/security-audit-requirements.txt --progress-spinner off
43
+
44
+ dependency-audit-scheduled:
45
+ name: Dependency audit scheduled (${{ matrix.os }}, Python ${{ matrix.python-version }})
46
+ if: ${{ github.event_name == 'schedule' }}
47
+ runs-on: ${{ matrix.os }}
48
+ strategy:
49
+ fail-fast: false
50
+ matrix:
51
+ os: [ubuntu-latest, windows-latest]
52
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
53
+ steps:
54
+ - name: Checkout
55
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
56
+
57
+ - name: Install uv
58
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
59
+
60
+ - name: Set up Python ${{ matrix.python-version }}
61
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
62
+ with:
63
+ python-version: ${{ matrix.python-version }}
64
+
65
+ # The committed .github/security-audit-requirements.txt is generated with
66
+ # --universal (resolves across all interpreters/platforms) and is what
67
+ # push/PR/workflow_dispatch runs audit. The scheduled job instead compiles
68
+ # per matrix entry with --python-version so it can surface advisories in
69
+ # wheels that only resolve on a specific interpreter (e.g. 3.11-only) —
70
+ # coverage the universal file may not exercise. This broadening is
71
+ # intentional; non-scheduled runs trade that depth for determinism against
72
+ # the committed snapshot.
73
+ - name: Compile scheduled audit requirements
74
+ run: |
75
+ uv pip compile pyproject.toml --extra test --python-version "${{ matrix.python-version }}" --upgrade --generate-hashes --quiet --output-file "${{ runner.temp }}/spec-kit-audit-requirements.txt"
76
+
77
+ - name: Run pip-audit (scheduled live resolution)
78
+ run: uvx --from pip-audit==2.10.0 pip-audit --disable-pip --require-hashes -r "${{ runner.temp }}/spec-kit-audit-requirements.txt" --progress-spinner off
@@ -2,6 +2,51 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.13.4] - 2026-07-22
6
+
7
+ ### Changed
8
+
9
+ - docs(concepts): document the spec-of-specs feature breakdown approach (#3648)
10
+ - fix(scripts): git-ext PowerShell emits the '# To persist' SPECIFY_FEATURE hint (parity) (#3632)
11
+ - fix(integrations): validate cached catalog shape before returning it (#3627)
12
+ - fix(bundler): reject non-list 'catalogs' in bundle-catalogs.yml with a clean error (#3623)
13
+ - fix(bundler): guard lazy .hostname ValueError in catalog add_source (#3644)
14
+ - Add Intake Authoring Governance preset to community catalog (#3643)
15
+ - feat: add Factory Droid CLI integration (#822) (#3587)
16
+ - docs(installation): document the 'py' (Python) script type (#3640)
17
+ - fix(init): show hyphenated /speckit-<name> in Next Steps for Forge projects (#3642)
18
+ - fix(extensions): render hyphenated hook invocations for Forge projects (#3641)
19
+ - fix(workflows): workflow add detects local YAML files case-insensitively (#3633)
20
+ - fix(workflows): list-literal expression ignores trailing/empty commas (#3631)
21
+ - fix(workflows): StepRegistry.add tolerates a corrupted non-dict existing entry (#3630)
22
+ - fix(bundler): reject non-mapping 'integration' in a bundle manifest (#3629)
23
+ - fix(workflows): command/prompt steps fail cleanly on a non-string integration (#3626)
24
+ - docs(core): document the 'py' (Python) --script type in the init option table (#3625)
25
+ - fix(workflows): gate prompt uses isdecimal() so a superscript digit doesn't crash (#3624)
26
+ - fix(integrations): Cline dispatches hyphenated /speckit-<cmd> invocations (#3622)
27
+ - docs(upgrade): document integration upgrade / extension update as the project-files upgrade path (#3326)
28
+ - chore: release 0.13.3, begin 0.13.4.dev0 development (#3645)
29
+
30
+ ## [0.13.3] - 2026-07-22
31
+
32
+ ### Changed
33
+
34
+ - fix(integrations): escape Rich markup in --integration-options error messages (#3458)
35
+ - docs: document __SPECKIT_COMMAND_ token for portable cross-command references (#3503)
36
+ - [preset] Add Parallel Autonomous Run Governance preset to community catalog (#3614)
37
+ - docs(workflows): fix stale FanOutStep docstring claiming sequential-only execution (#3639)
38
+ - [bundle] Add SicarioSpec Security & Governance Bundle to community catalog (#3636)
39
+ - [preset] Update Autonomous Run Governance preset to v0.3.2 (#3615)
40
+ - fix(workflows): validate every redirect hop when fetching workflow/step catalogs (#3637)
41
+ - Add pipeline workflow to community catalog (#3338)
42
+ - [extension] Add Linear Weave extension to community catalog (#3609)
43
+ - docs: clarify hook priority validation semantics (#3594)
44
+ - fix(workflows): reject a non-string 'integration'/'model' in command & prompt steps (#3597)
45
+ - ci: add dependency audit workflow (#3138)
46
+ - Add Intake Review Governance preset to community catalog (#3613)
47
+ - fix(workflows): reject non-list input 'enum' instead of crashing (#3601)
48
+ - chore: release 0.13.2, begin 0.13.3.dev0 development (#3617)
49
+
5
50
  ## [0.13.2] - 2026-07-21
6
51
 
7
52
  ### Changed
@@ -113,6 +113,27 @@ uv pip install -e ".[test]"
113
113
  > `specify_cli` to this checkout's `src/`. This matches the gotcha documented in
114
114
  > `AGENTS.md` (Common Pitfalls).
115
115
 
116
+ #### Security checks
117
+
118
+ ```bash
119
+ uvx --from pip-audit==2.10.0 pip-audit --disable-pip --require-hashes -r .github/security-audit-requirements.txt --progress-spinner off
120
+ ```
121
+
122
+ This command audits the committed hashed requirements snapshot. Pull request,
123
+ push, and manual CI runs use the same snapshot so their results stay
124
+ deterministic. If dependency metadata changes, refresh and commit the snapshot
125
+ before auditing it:
126
+
127
+ ```bash
128
+ uv pip compile pyproject.toml --extra test --universal --upgrade --generate-hashes --quiet --no-header --output-file .github/security-audit-requirements.txt
129
+ ```
130
+
131
+ The scheduled CI audit resolves the runtime and `test` extra dependency set
132
+ across the supported Python and OS matrix to catch newly published advisories.
133
+ Upstream package releases drift over time, so even an unrelated PR touching
134
+ `pyproject.toml` can fail the `dependency-audit` check until the committed file
135
+ is regenerated with the command above and re-committed.
136
+
116
137
  #### Shell scripts
117
138
 
118
139
  ```bash
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specify-cli
3
- Version: 0.13.2
3
+ Version: 0.13.4
4
4
  Summary: Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD).
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.11
@@ -0,0 +1,35 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "updated_at": "2026-07-22T00:00:00Z",
4
+ "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/bundles/catalog.community.json",
5
+ "bundles": {
6
+ "sicario-spec": {
7
+ "name": "SicarioSpec Security & Governance Bundle",
8
+ "id": "sicario-spec",
9
+ "version": "0.5.1",
10
+ "role": "security-engineer",
11
+ "description": "Secure-by-default governance bundle for GitHub Spec Kit. Enforces data classification, threat modeling, and code-owned verification gates.",
12
+ "author": "SicarioSpec Contributors",
13
+ "license": "MIT",
14
+ "download_url": "https://github.com/dfirs1car1o/sicario-spec/releases/download/v0.5.1/sicario-spec-0.5.1.zip",
15
+ "repository": "https://github.com/dfirs1car1o/sicario-spec",
16
+ "requires": {
17
+ "speckit_version": ">=0.9.0"
18
+ },
19
+ "provides": {
20
+ "extensions": 1,
21
+ "presets": 11,
22
+ "steps": 0,
23
+ "workflows": 0
24
+ },
25
+ "tags": [
26
+ "security",
27
+ "governance",
28
+ "compliance",
29
+ "appsec",
30
+ "threat-modeling"
31
+ ],
32
+ "verified": false
33
+ }
34
+ }
35
+ }
@@ -9,6 +9,7 @@ Accepted community bundle entries are published in [`bundles/catalog.community.j
9
9
 
10
10
  | Bundle | Purpose | Role or team | Provides | Required catalogs | URL |
11
11
  |--------|---------|--------------|----------|-------------------|-----|
12
+ | SicarioSpec Security & Governance Bundle | Secure-by-default governance bundle for GitHub Spec Kit. Enforces data classification, threat modeling, and code-owned verification gates. | `security-engineer` | 1 extension, 11 presets | Documented | [sicario-spec](https://github.com/dfirs1car1o/sicario-spec) |
12
13
 
13
14
  ## What to Submit
14
15
 
@@ -70,6 +70,7 @@ The following community-contributed extensions are available in [`catalog.commun
70
70
  | Jira Integration (Sync Engine) | Idempotent, drift-aware, fail-closed reconcile engine mirroring spec-kit specs into Jira (Epic per repo, Story per spec, Subtask per phase) | `integration` | Read+Write | [spec-kit-jira-sync](https://github.com/ashbrener/spec-kit-jira-sync) |
71
71
  | Learning Extension | Generate educational guides from implementations and enhance clarifications with mentoring context | `docs` | Read+Write | [spec-kit-learn](https://github.com/imviancagrace/spec-kit-learn) |
72
72
  | Linear Integration | Mirror spec-kit feature directories into Linear (filesystem → Linear, reconcile-based, unidirectional). | `integration` | Read+Write | [spec-kit-linear-sync](https://github.com/ashbrener/spec-kit-linear-sync) |
73
+ | Linear Weave | Weave Spec Kit into Linear: pull requirements, mirror tasks.md into sub-issues, sync statuses | `integration` | Read+Write | [spec-kit-linear-weave](https://github.com/tonydwoodhouse/spec-kit-linear-weave) |
73
74
  | LLM Wiki | LLM-maintained compounding project wiki: source ingestion, cited answers, and consistency linting | `docs` | Read+Write | [spec-kit-wiki](https://github.com/formin/spec-kit-wiki) |
74
75
  | Loop Engineering | Engineer safe autonomous agent loops for spec-driven development: a maker/checker split, externalized loop state, and stay-the-engineer guardrails against comprehension debt and cognitive surrender | `process` | Read+Write | [spec-kit-loop](https://github.com/formin/spec-kit-loop) |
75
76
  | MAQA — Multi-Agent & Quality Assurance | Coordinator → feature → QA agent workflow with parallel worktree-based implementation. Language-agnostic. Auto-detects installed board plugins. Optional CI gate. | `process` | Read+Write | [spec-kit-maqa-ext](https://github.com/GenieRobot/spec-kit-maqa-ext) |