specify-cli 0.13.2__tar.gz → 0.13.3__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 (512) hide show
  1. specify_cli-0.13.3/.github/scripts/check_security_requirements.py +115 -0
  2. specify_cli-0.13.3/.github/security-audit-requirements.txt +253 -0
  3. specify_cli-0.13.3/.github/workflows/security.yml +78 -0
  4. {specify_cli-0.13.2 → specify_cli-0.13.3}/CHANGELOG.md +20 -0
  5. {specify_cli-0.13.2 → specify_cli-0.13.3}/CONTRIBUTING.md +21 -0
  6. {specify_cli-0.13.2 → specify_cli-0.13.3}/PKG-INFO +1 -1
  7. specify_cli-0.13.3/bundles/catalog.community.json +35 -0
  8. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/community/bundles.md +1 -0
  9. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/community/extensions.md +1 -0
  10. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/community/presets.md +3 -1
  11. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/extensions.md +3 -1
  12. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +35 -0
  13. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/catalog.community.json +34 -0
  14. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/catalog.community.json +71 -11
  15. {specify_cli-0.13.2 → specify_cli-0.13.3}/pyproject.toml +1 -1
  16. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/_helpers.py +3 -2
  17. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/catalog.py +26 -2
  18. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/engine.py +54 -2
  19. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/command/__init__.py +59 -4
  20. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/fan_out/__init__.py +4 -3
  21. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/prompt/__init__.py +59 -4
  22. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_subcommand.py +24 -0
  23. specify_cli-0.13.3/tests/test_security_workflow.py +349 -0
  24. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_workflows.py +338 -2
  25. specify_cli-0.13.3/workflows/catalog.community.json +27 -0
  26. specify_cli-0.13.2/bundles/catalog.community.json +0 -6
  27. specify_cli-0.13.2/workflows/catalog.community.json +0 -6
  28. {specify_cli-0.13.2 → specify_cli-0.13.3}/.devcontainer/devcontainer.json +0 -0
  29. {specify_cli-0.13.2 → specify_cli-0.13.3}/.devcontainer/post-create.sh +0 -0
  30. {specify_cli-0.13.2 → specify_cli-0.13.3}/.editorconfig +0 -0
  31. {specify_cli-0.13.2 → specify_cli-0.13.3}/.gitattributes +0 -0
  32. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/CODEOWNERS +0 -0
  33. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
  34. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  35. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  36. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  37. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  38. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  39. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  40. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  41. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/aw/actions-lock.json +0 -0
  42. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/dependabot.yml +0 -0
  43. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/skills/add-community-extension/SKILL.md +0 -0
  44. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/RELEASE-PROCESS.md +0 -0
  45. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/add-community-bundle.lock.yml +0 -0
  46. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/add-community-bundle.md +0 -0
  47. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/add-community-extension.lock.yml +0 -0
  48. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/add-community-extension.md +0 -0
  49. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/add-community-preset.lock.yml +0 -0
  50. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/add-community-preset.md +0 -0
  51. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/bug-assess.lock.yml +0 -0
  52. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/bug-assess.md +0 -0
  53. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/bug-fix.lock.yml +0 -0
  54. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/bug-fix.md +0 -0
  55. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/bug-test.lock.yml +0 -0
  56. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/bug-test.md +0 -0
  57. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/catalog-assign.yml +0 -0
  58. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/codeql.yml +0 -0
  59. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/docs.yml +0 -0
  60. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/lint.yml +0 -0
  61. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/publish-pypi.yml +0 -0
  62. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/release-trigger.yml +0 -0
  63. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/release.yml +0 -0
  64. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/stale.yml +0 -0
  65. {specify_cli-0.13.2 → specify_cli-0.13.3}/.github/workflows/test.yml +0 -0
  66. {specify_cli-0.13.2 → specify_cli-0.13.3}/.gitignore +0 -0
  67. {specify_cli-0.13.2 → specify_cli-0.13.3}/.markdownlint-cli2.jsonc +0 -0
  68. {specify_cli-0.13.2 → specify_cli-0.13.3}/.pre-commit-config.yaml +0 -0
  69. {specify_cli-0.13.2 → specify_cli-0.13.3}/.zenodo.json +0 -0
  70. {specify_cli-0.13.2 → specify_cli-0.13.3}/AGENTS.md +0 -0
  71. {specify_cli-0.13.2 → specify_cli-0.13.3}/CITATION.cff +0 -0
  72. {specify_cli-0.13.2 → specify_cli-0.13.3}/CODE_OF_CONDUCT.md +0 -0
  73. {specify_cli-0.13.2 → specify_cli-0.13.3}/DEVELOPMENT.md +0 -0
  74. {specify_cli-0.13.2 → specify_cli-0.13.3}/LICENSE +0 -0
  75. {specify_cli-0.13.2 → specify_cli-0.13.3}/README.md +0 -0
  76. {specify_cli-0.13.2 → specify_cli-0.13.3}/SECURITY.md +0 -0
  77. {specify_cli-0.13.2 → specify_cli-0.13.3}/SUPPORT.md +0 -0
  78. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/.gitignore +0 -0
  79. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/README.md +0 -0
  80. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/community/friends.md +0 -0
  81. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/community/overview.md +0 -0
  82. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/community/walkthroughs.md +0 -0
  83. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/concepts/complex-features.md +0 -0
  84. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/concepts/sdd.md +0 -0
  85. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/concepts/spec-persistence.md +0 -0
  86. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/docfx.json +0 -0
  87. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/guides/evolving-specs.md +0 -0
  88. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/guides/monorepo.md +0 -0
  89. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/index.md +0 -0
  90. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/install/air-gapped.md +0 -0
  91. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/install/one-time.md +0 -0
  92. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/install/pipx.md +0 -0
  93. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/install/pypi.md +0 -0
  94. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/install/uv.md +0 -0
  95. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/installation.md +0 -0
  96. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/local-development.md +0 -0
  97. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/quickstart.md +0 -0
  98. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/agentic-bugfix.md +0 -0
  99. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/agentic-sdd.md +0 -0
  100. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/authentication.md +0 -0
  101. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/bundles.md +0 -0
  102. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/core.md +0 -0
  103. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/integrations.md +0 -0
  104. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/overview.md +0 -0
  105. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/presets.md +0 -0
  106. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/reference/workflows.md +0 -0
  107. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/template/public/main.css +0 -0
  108. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/toc.yml +0 -0
  109. {specify_cli-0.13.2 → specify_cli-0.13.3}/docs/upgrade.md +0 -0
  110. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/business-analyst/README.md +0 -0
  111. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/business-analyst/bundle.yml +0 -0
  112. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/developer/README.md +0 -0
  113. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/developer/bundle.yml +0 -0
  114. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/product-manager/README.md +0 -0
  115. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/product-manager/bundle.yml +0 -0
  116. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/security-researcher/README.md +0 -0
  117. {specify_cli-0.13.2 → specify_cli-0.13.3}/examples/bundles/security-researcher/bundle.yml +0 -0
  118. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  119. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  120. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  121. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/README.md +0 -0
  122. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  123. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/README.md +0 -0
  124. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/agent-context-config.yml +0 -0
  125. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/agent-context-defaults.json +0 -0
  126. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  127. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/extension.yml +0 -0
  128. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
  129. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
  130. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  131. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/assess/README.md +0 -0
  132. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/assess/commands/speckit.assess.decide.md +0 -0
  133. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/assess/commands/speckit.assess.define.md +0 -0
  134. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/assess/commands/speckit.assess.intake.md +0 -0
  135. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/assess/commands/speckit.assess.research.md +0 -0
  136. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/assess/commands/speckit.assess.shape.md +0 -0
  137. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/assess/extension.yml +0 -0
  138. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/bug/README.md +0 -0
  139. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  140. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  141. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/bug/commands/speckit.bug.test.md +0 -0
  142. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/bug/extension.yml +0 -0
  143. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/catalog.json +0 -0
  144. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/README.md +0 -0
  145. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/commands/speckit.git.commit.md +0 -0
  146. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/commands/speckit.git.feature.md +0 -0
  147. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/commands/speckit.git.initialize.md +0 -0
  148. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/commands/speckit.git.remote.md +0 -0
  149. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/commands/speckit.git.validate.md +0 -0
  150. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/config-template.yml +0 -0
  151. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/extension.yml +0 -0
  152. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/git-config.yml +0 -0
  153. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  154. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  155. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/bash/git-common.sh +0 -0
  156. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  157. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  158. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +0 -0
  159. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  160. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  161. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/python/auto_commit.py +0 -0
  162. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
  163. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/python/git_common.py +0 -0
  164. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/git/scripts/python/initialize_repo.py +0 -0
  165. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/selftest/commands/selftest.md +0 -0
  166. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/selftest/extension.yml +0 -0
  167. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/.gitignore +0 -0
  168. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/CHANGELOG.md +0 -0
  169. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/EXAMPLE-README.md +0 -0
  170. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/LICENSE +0 -0
  171. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/README.md +0 -0
  172. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/commands/example.md +0 -0
  173. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/config-template.yml +0 -0
  174. {specify_cli-0.13.2 → specify_cli-0.13.3}/extensions/template/extension.yml +0 -0
  175. {specify_cli-0.13.2 → specify_cli-0.13.3}/integrations/CONTRIBUTING.md +0 -0
  176. {specify_cli-0.13.2 → specify_cli-0.13.3}/integrations/README.md +0 -0
  177. {specify_cli-0.13.2 → specify_cli-0.13.3}/integrations/catalog.community.json +0 -0
  178. {specify_cli-0.13.2 → specify_cli-0.13.3}/integrations/catalog.json +0 -0
  179. {specify_cli-0.13.2 → specify_cli-0.13.3}/media/bootstrap-claude-code.gif +0 -0
  180. {specify_cli-0.13.2 → specify_cli-0.13.3}/media/logo_large.webp +0 -0
  181. {specify_cli-0.13.2 → specify_cli-0.13.3}/media/logo_small.webp +0 -0
  182. {specify_cli-0.13.2 → specify_cli-0.13.3}/media/spec-kit-video-header.jpg +0 -0
  183. {specify_cli-0.13.2 → specify_cli-0.13.3}/media/specify_cli.gif +0 -0
  184. {specify_cli-0.13.2 → specify_cli-0.13.3}/newsletters/2026-April.md +0 -0
  185. {specify_cli-0.13.2 → specify_cli-0.13.3}/newsletters/2026-February.md +0 -0
  186. {specify_cli-0.13.2 → specify_cli-0.13.3}/newsletters/2026-June.md +0 -0
  187. {specify_cli-0.13.2 → specify_cli-0.13.3}/newsletters/2026-March.md +0 -0
  188. {specify_cli-0.13.2 → specify_cli-0.13.3}/newsletters/2026-May.md +0 -0
  189. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/ARCHITECTURE.md +0 -0
  190. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/PUBLISHING.md +0 -0
  191. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/README.md +0 -0
  192. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/catalog.json +0 -0
  193. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/lean/README.md +0 -0
  194. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/lean/commands/speckit.constitution.md +0 -0
  195. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/lean/commands/speckit.implement.md +0 -0
  196. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/lean/commands/speckit.plan.md +0 -0
  197. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/lean/commands/speckit.specify.md +0 -0
  198. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/lean/commands/speckit.tasks.md +0 -0
  199. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/lean/preset.yml +0 -0
  200. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/scaffold/README.md +0 -0
  201. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  202. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/scaffold/commands/speckit.specify.md +0 -0
  203. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/scaffold/preset.yml +0 -0
  204. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/scaffold/templates/myext-template.md +0 -0
  205. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/scaffold/templates/spec-template.md +0 -0
  206. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/commands/speckit.specify.md +0 -0
  207. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  208. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/preset.yml +0 -0
  209. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/templates/checklist-template.md +0 -0
  210. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/templates/constitution-template.md +0 -0
  211. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/templates/plan-template.md +0 -0
  212. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/templates/spec-template.md +0 -0
  213. {specify_cli-0.13.2 → specify_cli-0.13.3}/presets/self-test/templates/tasks-template.md +0 -0
  214. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/bash/check-prerequisites.sh +0 -0
  215. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/bash/common.sh +0 -0
  216. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/bash/create-new-feature.sh +0 -0
  217. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/bash/setup-plan.sh +0 -0
  218. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/bash/setup-tasks.sh +0 -0
  219. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/powershell/check-prerequisites.ps1 +0 -0
  220. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/powershell/common.ps1 +0 -0
  221. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/powershell/create-new-feature.ps1 +0 -0
  222. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/powershell/setup-plan.ps1 +0 -0
  223. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/powershell/setup-tasks.ps1 +0 -0
  224. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/python/check_prerequisites.py +0 -0
  225. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/python/common.py +0 -0
  226. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/python/create_new_feature.py +0 -0
  227. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/python/setup_plan.py +0 -0
  228. {specify_cli-0.13.2 → specify_cli-0.13.3}/scripts/python/setup_tasks.py +0 -0
  229. {specify_cli-0.13.2 → specify_cli-0.13.3}/spec-driven.md +0 -0
  230. {specify_cli-0.13.2 → specify_cli-0.13.3}/spec-kit.code-workspace +0 -0
  231. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/__init__.py +0 -0
  232. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_agent_config.py +0 -0
  233. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_assets.py +0 -0
  234. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_console.py +0 -0
  235. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_github_http.py +0 -0
  236. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_init_options.py +0 -0
  237. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_invocation_style.py +0 -0
  238. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_project.py +0 -0
  239. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_toml_string.py +0 -0
  240. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_utils.py +0 -0
  241. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/_version.py +0 -0
  242. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/agents.py +0 -0
  243. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/authentication/__init__.py +0 -0
  244. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/authentication/azure_devops.py +0 -0
  245. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/authentication/base.py +0 -0
  246. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/authentication/config.py +0 -0
  247. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/authentication/github.py +0 -0
  248. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/authentication/http.py +0 -0
  249. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/__init__.py +0 -0
  250. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  251. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
  252. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/lib/__init__.py +0 -0
  253. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/lib/project.py +0 -0
  254. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/lib/versioning.py +0 -0
  255. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/lib/yamlio.py +0 -0
  256. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/models/__init__.py +0 -0
  257. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/models/catalog.py +0 -0
  258. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/models/manifest.py +0 -0
  259. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/models/records.py +0 -0
  260. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/__init__.py +0 -0
  261. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/adapters.py +0 -0
  262. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  263. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/conflict.py +0 -0
  264. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/installer.py +0 -0
  265. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/packager.py +0 -0
  266. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/primitives.py +0 -0
  267. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/references.py +0 -0
  268. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/resolver.py +0 -0
  269. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/bundler/services/validator.py +0 -0
  270. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/catalogs.py +0 -0
  271. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/commands/__init__.py +0 -0
  272. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/commands/bundle/__init__.py +0 -0
  273. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/commands/init.py +0 -0
  274. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/extensions/__init__.py +0 -0
  275. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/extensions/_commands.py +0 -0
  276. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integration_runtime.py +0 -0
  277. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integration_scaffold.py +0 -0
  278. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integration_state.py +0 -0
  279. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integration_status.py +0 -0
  280. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/__init__.py +0 -0
  281. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/_commands.py +0 -0
  282. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/_install_commands.py +0 -0
  283. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  284. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/_query_commands.py +0 -0
  285. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  286. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/agy/__init__.py +0 -0
  287. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/amp/__init__.py +0 -0
  288. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  289. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/base.py +0 -0
  290. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/bob/__init__.py +0 -0
  291. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/catalog.py +0 -0
  292. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/claude/__init__.py +0 -0
  293. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/cline/__init__.py +0 -0
  294. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  295. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/codex/__init__.py +0 -0
  296. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  297. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  298. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/devin/__init__.py +0 -0
  299. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  300. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/forge/__init__.py +0 -0
  301. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  302. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/generic/__init__.py +0 -0
  303. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/goose/__init__.py +0 -0
  304. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/grok/__init__.py +0 -0
  305. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  306. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/junie/__init__.py +0 -0
  307. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  308. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  309. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
  310. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  311. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/manifest.py +0 -0
  312. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/omp/__init__.py +0 -0
  313. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  314. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/pi/__init__.py +0 -0
  315. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  316. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  317. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  318. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/shai/__init__.py +0 -0
  319. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  320. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/trae/__init__.py +0 -0
  321. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  322. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  323. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/integrations/zed/__init__.py +0 -0
  324. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/presets/__init__.py +0 -0
  325. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/presets/_commands.py +0 -0
  326. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/shared_infra.py +0 -0
  327. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/__init__.py +0 -0
  328. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/_commands.py +0 -0
  329. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/base.py +0 -0
  330. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/expressions.py +0 -0
  331. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/overlays/__init__.py +0 -0
  332. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/overlays/_commands.py +0 -0
  333. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/overlays/composer.py +0 -0
  334. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
  335. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/overlays/merge.py +0 -0
  336. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/overlays/schema.py +0 -0
  337. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/__init__.py +0 -0
  338. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  339. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
  340. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
  341. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
  342. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
  343. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  344. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  345. {specify_cli-0.13.2 → specify_cli-0.13.3}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  346. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/checklist-template.md +0 -0
  347. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/analyze.md +0 -0
  348. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/checklist.md +0 -0
  349. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/clarify.md +0 -0
  350. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/constitution.md +0 -0
  351. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/converge.md +0 -0
  352. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/implement.md +0 -0
  353. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/plan.md +0 -0
  354. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/specify.md +0 -0
  355. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/tasks.md +0 -0
  356. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/commands/taskstoissues.md +0 -0
  357. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/constitution-template.md +0 -0
  358. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/plan-template.md +0 -0
  359. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/spec-template.md +0 -0
  360. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/tasks-template.md +0 -0
  361. {specify_cli-0.13.2 → specify_cli-0.13.3}/templates/vscode-settings.json +0 -0
  362. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/__init__.py +0 -0
  363. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/auth_helpers.py +0 -0
  364. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/bundler_helpers.py +0 -0
  365. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/conftest.py +0 -0
  366. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/contract/test_bundle_cli.py +0 -0
  367. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/contract/test_catalog_schema.py +0 -0
  368. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/contract/test_manifest_schema.py +0 -0
  369. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/__init__.py +0 -0
  370. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/assess/__init__.py +0 -0
  371. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/assess/test_assess_extension.py +0 -0
  372. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/bug/__init__.py +0 -0
  373. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/bug/test_bug_extension.py +0 -0
  374. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/git/__init__.py +0 -0
  375. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/git/test_git_extension.py +0 -0
  376. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
  377. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/test_agent_context_cli_free.py +0 -0
  378. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/test_extension_agent_context.py +0 -0
  379. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  380. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  381. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/hooks/TESTING.md +0 -0
  382. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/hooks/plan.md +0 -0
  383. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/hooks/spec.md +0 -0
  384. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/hooks/tasks.md +0 -0
  385. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/http_helpers.py +0 -0
  386. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integration/test_bundler_catalog_stack.py +0 -0
  387. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integration/test_bundler_init_install.py +0 -0
  388. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integration/test_bundler_install_flow.py +0 -0
  389. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integration/test_bundler_local_install.py +0 -0
  390. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integration/test_bundler_offline.py +0 -0
  391. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integration/test_bundler_security_paths.py +0 -0
  392. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/__init__.py +0 -0
  393. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/conftest.py +0 -0
  394. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_base.py +0 -0
  395. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_cli.py +0 -0
  396. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_extra_args.py +0 -0
  397. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_home_isolation.py +0 -0
  398. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_agy.py +0 -0
  399. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_amp.py +0 -0
  400. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_auggie.py +0 -0
  401. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_base_markdown.py +0 -0
  402. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_base_skills.py +0 -0
  403. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_base_toml.py +0 -0
  404. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_base_yaml.py +0 -0
  405. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_bob.py +0 -0
  406. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_catalog.py +0 -0
  407. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_claude.py +0 -0
  408. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_cline.py +0 -0
  409. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_codebuddy.py +0 -0
  410. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_codex.py +0 -0
  411. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_copilot.py +0 -0
  412. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_cursor_agent.py +0 -0
  413. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_devin.py +0 -0
  414. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_firebender.py +0 -0
  415. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_forge.py +0 -0
  416. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_gemini.py +0 -0
  417. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_generic.py +0 -0
  418. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_goose.py +0 -0
  419. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_grok.py +0 -0
  420. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_hermes.py +0 -0
  421. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_junie.py +0 -0
  422. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_kilocode.py +0 -0
  423. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_kimi.py +0 -0
  424. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_kiro_cli.py +0 -0
  425. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_lingma.py +0 -0
  426. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_omp.py +0 -0
  427. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_opencode.py +0 -0
  428. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_pi.py +0 -0
  429. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_qodercli.py +0 -0
  430. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_qwen.py +0 -0
  431. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_rovodev.py +0 -0
  432. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_scaffold.py +0 -0
  433. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_shai.py +0 -0
  434. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_state.py +0 -0
  435. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_tabnine.py +0 -0
  436. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_trae.py +0 -0
  437. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_vibe.py +0 -0
  438. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_zcode.py +0 -0
  439. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_integration_zed.py +0 -0
  440. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_manifest.py +0 -0
  441. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_registry.py +0 -0
  442. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  443. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/parity_helpers.py +0 -0
  444. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/self_upgrade_helpers.py +0 -0
  445. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_agent_config_consistency.py +0 -0
  446. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_authentication.py +0 -0
  447. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_branch_numbering.py +0 -0
  448. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_check_prerequisites_paths_only.py +0 -0
  449. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_check_prerequisites_python_parity.py +0 -0
  450. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_check_tool.py +0 -0
  451. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_cli_version.py +0 -0
  452. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_command_template_py_scripts.py +0 -0
  453. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_commands_package.py +0 -0
  454. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_console_imports.py +0 -0
  455. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_create_new_feature_python_parity.py +0 -0
  456. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_extension_registration.py +0 -0
  457. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_extension_skills.py +0 -0
  458. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_extension_update_hardening.py +0 -0
  459. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_extensions.py +0 -0
  460. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_github_http.py +0 -0
  461. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_github_workflows.py +0 -0
  462. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_init_dir.py +0 -0
  463. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_init_dir_cli.py +0 -0
  464. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_live_transient_windows.py +0 -0
  465. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_merge.py +0 -0
  466. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_post_process.py +0 -0
  467. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_presets.py +0 -0
  468. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_ps1_encoding.py +0 -0
  469. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_registrar_path_traversal.py +0 -0
  470. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_self_upgrade_detection.py +0 -0
  471. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_self_upgrade_execution.py +0 -0
  472. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_self_upgrade_guidance.py +0 -0
  473. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_self_upgrade_verification.py +0 -0
  474. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_setup_plan_feature_json.py +0 -0
  475. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_setup_plan_no_overwrite.py +0 -0
  476. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_setup_plan_python_parity.py +0 -0
  477. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_setup_tasks.py +0 -0
  478. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_setup_tasks_python_parity.py +0 -0
  479. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_shared_infra_integrity.py +0 -0
  480. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_skill_placeholder_py.py +0 -0
  481. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_timestamp_branches.py +0 -0
  482. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_upgrade.py +0 -0
  483. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_utils.py +0 -0
  484. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_utils_assets_imports.py +0 -0
  485. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_version_imports.py +0 -0
  486. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/test_workflow_run_without_project.py +0 -0
  487. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundle_download_url.py +0 -0
  488. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_adapters.py +0 -0
  489. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_catalog_config.py +0 -0
  490. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_conflict.py +0 -0
  491. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_packager.py +0 -0
  492. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_primitives.py +0 -0
  493. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_records.py +0 -0
  494. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_references.py +0 -0
  495. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_resolver.py +0 -0
  496. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_validator.py +0 -0
  497. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/unit/test_bundler_versioning.py +0 -0
  498. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/conftest.py +0 -0
  499. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/test_overlay_commands.py +0 -0
  500. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/test_overlay_composer.py +0 -0
  501. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/test_overlay_layer_sources.py +0 -0
  502. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/test_overlay_merge.py +0 -0
  503. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/test_overlay_schema.py +0 -0
  504. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/test_overlay_security.py +0 -0
  505. {specify_cli-0.13.2 → specify_cli-0.13.3}/tests/workflows/test_resolver_integration.py +0 -0
  506. {specify_cli-0.13.2 → specify_cli-0.13.3}/workflows/ARCHITECTURE.md +0 -0
  507. {specify_cli-0.13.2 → specify_cli-0.13.3}/workflows/PUBLISHING.md +0 -0
  508. {specify_cli-0.13.2 → specify_cli-0.13.3}/workflows/README.md +0 -0
  509. {specify_cli-0.13.2 → specify_cli-0.13.3}/workflows/catalog.json +0 -0
  510. {specify_cli-0.13.2 → specify_cli-0.13.3}/workflows/speckit/workflow.yml +0 -0
  511. {specify_cli-0.13.2 → specify_cli-0.13.3}/workflows/step-catalog.community.json +0 -0
  512. {specify_cli-0.13.2 → specify_cli-0.13.3}/workflows/step-catalog.json +0 -0
@@ -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,26 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.13.3] - 2026-07-22
6
+
7
+ ### Changed
8
+
9
+ - fix(integrations): escape Rich markup in --integration-options error messages (#3458)
10
+ - docs: document __SPECKIT_COMMAND_ token for portable cross-command references (#3503)
11
+ - [preset] Add Parallel Autonomous Run Governance preset to community catalog (#3614)
12
+ - docs(workflows): fix stale FanOutStep docstring claiming sequential-only execution (#3639)
13
+ - [bundle] Add SicarioSpec Security & Governance Bundle to community catalog (#3636)
14
+ - [preset] Update Autonomous Run Governance preset to v0.3.2 (#3615)
15
+ - fix(workflows): validate every redirect hop when fetching workflow/step catalogs (#3637)
16
+ - Add pipeline workflow to community catalog (#3338)
17
+ - [extension] Add Linear Weave extension to community catalog (#3609)
18
+ - docs: clarify hook priority validation semantics (#3594)
19
+ - fix(workflows): reject a non-string 'integration'/'model' in command & prompt steps (#3597)
20
+ - ci: add dependency audit workflow (#3138)
21
+ - Add Intake Review Governance preset to community catalog (#3613)
22
+ - fix(workflows): reject non-list input 'enum' instead of crashing (#3601)
23
+ - chore: release 0.13.2, begin 0.13.3.dev0 development (#3617)
24
+
5
25
  ## [0.13.2] - 2026-07-21
6
26
 
7
27
  ### 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.3
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) |
@@ -11,7 +11,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
11
11
  | Agent Parity Governance | Adds shared-guidance parity, audit-ready Spec-Kit run evidence, and agent-neutral model-routing guidance across a project's declared AI-agent instruction surfaces so agent guidance does not drift. | 6 templates, 3 commands | — | [spec-kit-preset-agent-parity-governance](https://github.com/hindermath/spec-kit-preset-agent-parity-governance) |
12
12
  | AIDE In-Place Migration | Adapts the AIDE extension workflow for in-place technology migrations (X → Y pattern) — adds migration objectives, verification gates, knowledge documents, and behavioral equivalence criteria | 2 templates, 8 commands | AIDE extension | [spec-kit-presets](https://github.com/mnriem/spec-kit-presets) |
13
13
  | Architecture Governance | Adds secure software architecture, STRIDE+CAPEC threat modeling, arc42 security cross-cutting concepts, S-ADRs, Zero Trust applicability, OWASP SAMM governance, BSI C3A cloud autonomy, BSI C5 cloud compliance assurance, and audit-ready Spec Kit run evidence | 13 templates, 3 commands | — | [spec-kit-preset-architecture-governance](https://github.com/hindermath/spec-kit-preset-architecture-governance) |
14
- | Autonomous Run Governance | Adds permission-bounded, evidence-first governance for autonomous Spec Kit delivery with validated status, stop, resume, exact-head proof, closeout, and learner guidance. | 13 templates, 5 commands, 4 scripts | — | [spec-kit-preset-autonomous-run-governance](https://github.com/hindermath/spec-kit-preset-autonomous-run-governance) |
14
+ | Autonomous Run Governance | Adds permission-bounded, evidence-first governance for complete autonomous Spec Kit delivery, including validated status, stop, explicit resume, exact-head proof, post-merge closeout, retrospective learning, and an optional policy-driven intake-review gate before feature creation. | 13 templates, 5 commands, 4 scripts | — | [spec-kit-preset-autonomous-run-governance](https://github.com/hindermath/spec-kit-preset-autonomous-run-governance) |
15
15
  | Canon Core | Adapts original Spec Kit workflow to work together with Canon extension | 2 templates, 8 commands | — | [spec-kit-canon](https://github.com/maximiliamus/spec-kit-canon) |
16
16
  | Claude AskUserQuestion | Upgrades `/speckit.clarify` and `/speckit.checklist` on Claude Code from Markdown-table prompts to the native AskUserQuestion picker, with a recommended option and reasoning on every question | 2 commands | — | [spec-kit-preset-claude-ask-questions](https://github.com/0xrafasec/spec-kit-preset-claude-ask-questions) |
17
17
  | Command Density | Compacts the nine core Spec Kit command prompts while preserving scripts, handoffs, placeholders, hook output blocks, and rule structure | 9 commands | — | [spec-kit-preset-command-density](https://github.com/Xopoko/spec-kit-preset-command-density) |
@@ -19,10 +19,12 @@ The following community-contributed presets customize how Spec Kit behaves — o
19
19
  | Explicit Task Dependencies | Adds explicit `(depends on T###)` dependency declarations and an Execution Wave DAG to tasks.md for parallel scheduling | 1 template, 1 command | — | [spec-kit-preset-explicit-task-dependencies](https://github.com/Quratulain-bilal/spec-kit-preset-explicit-task-dependencies) |
20
20
  | Fiction Book Writing | It adapts the Spec-Driven Development workflow for storytelling to create books or audiobooks (with annotations) in 12 languages: features become story elements, specs become story briefs, plans become story structures, and tasks become scene-by-scene writing tasks. Supports single and multi-POV, all major plot structure frameworks, and two style modes: an author voice sample or humanized AI prose principles. Supports interactive elements like brainstorming, interview, roleplay, and extras like statistics, cover builder, illustration builder, and bio command. Export with templates for KDP, D2D, etc. | 26 templates, 34 commands, 2 scripts | — | [speckit-preset-fiction-book-writing](https://github.com/adaumann/speckit-preset-fiction-book-writing) |
21
21
  | Game Narrative Writing | Preset for game narrative design and interactive storytelling. It adapts the Spec-Driven Development workflow for game narratives: features become story mechanics, specs become narrative briefs, plans become story maps, and tasks become dialogue and scene-writing tasks. Supports branching narratives, player agency systems, state machines, and interactive dialogue trees. | 37 templates, 34 commands, 5 scripts | — | [speckit-preset-game-narrative-writing](https://github.com/adaumann/speckit-preset-game-narrative-writing) |
22
+ | Intake Review Governance | Adds hash-bound review, repair, and status gates for single, series, and campaign intake files before interactive, autonomous, or parallel Spec Kit execution. | 8 templates, 3 commands, 2 scripts | — | [spec-kit-preset-intake-review-governance](https://github.com/hindermath/spec-kit-preset-intake-review-governance) |
22
23
  | iSAQB Architecture Governance | Adds general iSAQB/CPSA-F and arc42 software-architecture governance, including audit-ready Spec Kit run evidence for architecture goals, views, quality scenarios, ADRs, risks, and technical debt. | 13 templates, 3 commands | — | [spec-kit-preset-isaqb-architecture-governance](https://github.com/hindermath/spec-kit-preset-isaqb-architecture-governance) |
23
24
  | Jira Issue Tracking | Overrides `speckit.taskstoissues` to create Jira epics, stories, and tasks instead of GitHub Issues via Atlassian MCP tools | 1 command | — | [spec-kit-preset-jira](https://github.com/luno/spec-kit-preset-jira) |
24
25
  | Model Driven Engineering | Focuses on streamlined commands, app repository support, cross-spec support, and capability-aware project memory for model-driven engineering workflows | 6 templates, 11 commands | MDE extension | [spec-kit-preset-mde](https://github.com/AI-MDE/spec-kit-preset-mde) |
25
26
  | Multi-Repo Branching | Coordinates feature branch creation across multiple git repositories (independent repos and submodules) during plan and tasks phases | 2 commands | — | [spec-kit-preset-multi-repo-branching](https://github.com/sakitA/spec-kit-preset-multi-repo-branching) |
27
+ | Parallel Autonomous Run Governance | Coordinates isolated autonomous Spec Kit campaigns with bounded concurrency, mixed agents, resumable consolidation, governed post-merge closeout, schema 1.2, and an optional current intake-review gate before worker scheduling. | 9 templates, 5 commands, 2 scripts | autonomous-run-governance >=0.3.2; optional: intake-review-governance >=0.1.0 | [spec-kit-preset-parallel-autonomous-run-governance](https://github.com/hindermath/spec-kit-preset-parallel-autonomous-run-governance) |
26
28
  | 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) |
27
29
  | 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) |
28
30
  | 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) |
@@ -221,12 +221,14 @@ Each hook entry supports the following fields:
221
221
  | `command` | Extension command associated with the hook. |
222
222
  | `enabled` | Whether the hook is active. Hooks with `enabled: false` are skipped. |
223
223
  | `optional` | Whether the hook is optional. If `true`, the hook is presented with its `prompt` and can be skipped; if `false`, the hook is emitted as an automatic hook (includes `EXECUTE_COMMAND` markers). |
224
- | `priority` | Priority metadata for the hook. Values must be integers >= 1; invalid values fall back to the default priority `10`. Current command templates surface hooks in their configured YAML order and do not sort them by `priority`. |
224
+ | `priority` | Priority metadata for the hook. Registered hook entries use integer values >= 1; entries installed from manifests default to `10` when no priority is declared. Current command templates surface hooks in their configured YAML order and do not sort them by `priority`. |
225
225
  | `prompt` | Message shown when asking whether to run an optional hook. |
226
226
  | `description` | Human-readable explanation of what the hook does. |
227
227
  | `condition` | Optional expression evaluated by `HookExecutor` (using `config.<path>` or `env.<VAR>` with `is set`, `==`, or `!=`). Current command templates do not evaluate conditions and skip hooks with a non-empty condition. |
228
228
  Hook event names identify when a hook is invoked. They generally use `before_<command>` or `after_<command>`, such as `before_implement`, `after_implement`, `before_tasks`, and `after_tasks`.
229
229
 
230
+ Extension manifests reject invalid hook priorities during installation. For existing `.specify/extensions.yml` entries, `HookExecutor.get_hooks_for_event()` sorts with `normalize_priority()`: missing values, booleans, non-numeric values rejected by `int()`, and values less than `1` fall back to `10`; numeric strings and finite floats are coerced with `int()`, while non-finite floats are unsupported and may fail instead of falling back.
231
+
230
232
  `HookExecutor.get_hooks_for_event()` returns hooks ordered by `priority`, with lower values first. However, current command templates read hook lists directly and surface them in their configured YAML order rather than using priority ordering.
231
233
 
232
234
  ## FAQ