docguard-cli 0.9.8__tar.gz → 0.9.10__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 (197) hide show
  1. {docguard_cli-0.9.8/extensions/spec-kit-docguard → docguard_cli-0.9.10/.agent}/skills/docguard-fix/SKILL.md +2 -1
  2. {docguard_cli-0.9.8/extensions/spec-kit-docguard → docguard_cli-0.9.10/.agent}/skills/docguard-guard/SKILL.md +9 -4
  3. {docguard_cli-0.9.8/extensions/spec-kit-docguard → docguard_cli-0.9.10/.agent}/skills/docguard-review/SKILL.md +5 -1
  4. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/docguard-score/SKILL.md +2 -1
  5. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.docguard.json +4 -0
  6. docguard_cli-0.9.10/.github/scripts/patch-catalog.py +104 -0
  7. docguard_cli-0.9.10/.github/workflows/release.yml +191 -0
  8. docguard_cli-0.9.10/.github/workflows/sync-speckit-catalog.yml +162 -0
  9. docguard_cli-0.9.10/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +4 -0
  10. docguard_cli-0.9.10/.specify/extensions/.cache/catalog-ebf165086500aab1.json +595 -0
  11. docguard_cli-0.9.10/.specify/extensions/.cache/catalog-metadata.json +4 -0
  12. docguard_cli-0.9.10/.specify/extensions/.cache/catalog.json +21 -0
  13. docguard_cli-0.9.10/.specify/memory/constitution.md +76 -0
  14. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/CHANGELOG.md +61 -0
  15. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/PKG-INFO +1 -1
  16. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/diagnose.mjs +64 -24
  17. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/fix.mjs +1 -1
  18. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/guard.mjs +12 -1
  19. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/hooks.mjs +2 -2
  20. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/init.mjs +94 -73
  21. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/score.mjs +58 -16
  22. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/setup.mjs +60 -30
  23. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/docguard.mjs +14 -5
  24. docguard_cli-0.9.10/cli/ensure-skills.mjs +314 -0
  25. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/scanners/speckit.mjs +1 -1
  26. docguard_cli-0.9.10/cli/shared-ignore.mjs +76 -0
  27. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/architecture.mjs +21 -6
  28. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/doc-quality.mjs +1 -1
  29. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/docs-diff.mjs +79 -12
  30. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/schema-sync.mjs +1 -1
  31. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/security.mjs +49 -1
  32. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/todo-tracking.mjs +41 -15
  33. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/extension.yml +6 -2
  34. {docguard_cli-0.9.8/.agent → docguard_cli-0.9.10/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -1
  35. {docguard_cli-0.9.8/.agent → docguard_cli-0.9.10/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +9 -4
  36. {docguard_cli-0.9.8/.agent → docguard_cli-0.9.10/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +5 -1
  37. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/skills/docguard-score/SKILL.md +2 -1
  38. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/package.json +1 -1
  39. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/pyproject.toml +1 -1
  40. docguard_cli-0.9.10/specs/001-fix-ignore-validators/plan.md +115 -0
  41. docguard_cli-0.9.10/specs/001-fix-ignore-validators/spec.md +104 -0
  42. docguard_cli-0.9.10/specs/001-fix-ignore-validators/tasks.md +49 -0
  43. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/tests/commands.test.mjs +127 -1
  44. docguard_cli-0.9.8/.github/workflows/release.yml +0 -78
  45. docguard_cli-0.9.8/.github/workflows/spec-kit-extension.yml +0 -40
  46. docguard_cli-0.9.8/.specify/memory/constitution.md +0 -50
  47. docguard_cli-0.9.8/cli/ensure-skills.mjs +0 -96
  48. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.analyze.md +0 -0
  49. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.checklist.md +0 -0
  50. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.clarify.md +0 -0
  51. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.constitution.md +0 -0
  52. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.implement.md +0 -0
  53. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.plan.md +0 -0
  54. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.specify.md +0 -0
  55. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.tasks.md +0 -0
  56. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/commands/speckit.taskstoissues.md +0 -0
  57. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-analyze/SKILL.md +0 -0
  58. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-checklist/SKILL.md +0 -0
  59. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-clarify/SKILL.md +0 -0
  60. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-constitution/SKILL.md +0 -0
  61. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-implement/SKILL.md +0 -0
  62. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-plan/SKILL.md +0 -0
  63. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-specify/SKILL.md +0 -0
  64. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-tasks/SKILL.md +0 -0
  65. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
  66. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.docguardignore +0 -0
  67. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  68. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  69. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.github/workflows/ci.yml +0 -0
  70. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.gitignore +0 -0
  71. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.npmignore +0 -0
  72. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/init-options.json +0 -0
  73. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  74. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/scripts/bash/common.sh +0 -0
  75. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/scripts/bash/create-new-feature.sh +0 -0
  76. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/scripts/bash/setup-plan.sh +0 -0
  77. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/scripts/bash/update-agent-context.sh +0 -0
  78. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/templates/agent-file-template.md +0 -0
  79. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/templates/checklist-template.md +0 -0
  80. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/templates/constitution-template.md +0 -0
  81. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/templates/plan-template.md +0 -0
  82. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/templates/spec-template.md +0 -0
  83. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/.specify/templates/tasks-template.md +0 -0
  84. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/AGENTS.md +0 -0
  85. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/CODE_OF_CONDUCT.md +0 -0
  86. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/COMPARISONS.md +0 -0
  87. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/CONTRIBUTING.md +0 -0
  88. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/DRIFT-LOG.md +0 -0
  89. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/LICENSE +0 -0
  90. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/PHILOSOPHY.md +0 -0
  91. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/README.md +0 -0
  92. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/ROADMAP.md +0 -0
  93. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/SECURITY.md +0 -0
  94. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/STANDARD.md +0 -0
  95. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/SUPPORT.md +0 -0
  96. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/action.yml +0 -0
  97. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/agents.mjs +0 -0
  98. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/badge.mjs +0 -0
  99. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/ci.mjs +0 -0
  100. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/diff.mjs +0 -0
  101. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/generate.mjs +0 -0
  102. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/llms.mjs +0 -0
  103. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/publish.mjs +0 -0
  104. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/trace.mjs +0 -0
  105. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/commands/watch.mjs +0 -0
  106. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/scanners/doc-tools.mjs +0 -0
  107. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/scanners/routes.mjs +0 -0
  108. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/scanners/schemas.mjs +0 -0
  109. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/shared.mjs +0 -0
  110. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/changelog.mjs +0 -0
  111. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/docs-coverage.mjs +0 -0
  112. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/docs-sync.mjs +0 -0
  113. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/drift.mjs +0 -0
  114. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/environment.mjs +0 -0
  115. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/freshness.mjs +0 -0
  116. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/metadata-sync.mjs +0 -0
  117. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/metrics-consistency.mjs +0 -0
  118. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/structure.mjs +0 -0
  119. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/test-spec.mjs +0 -0
  120. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/cli/validators/traceability.mjs +0 -0
  121. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/commands/docguard.fix.md +0 -0
  122. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/commands/docguard.guard.md +0 -0
  123. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/commands/docguard.review.md +0 -0
  124. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/commands/docguard.score.md +0 -0
  125. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/configs/fastify.json +0 -0
  126. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/configs/generic.json +0 -0
  127. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/configs/nextjs.json +0 -0
  128. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/configs/python.json +0 -0
  129. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docguard_cli/__init__.py +0 -0
  130. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docguard_cli/wrapper.py +0 -0
  131. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs/ai-integration.md +0 -0
  132. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs/commands.md +0 -0
  133. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs/configuration.md +0 -0
  134. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs/faq.md +0 -0
  135. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs/installation.md +0 -0
  136. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs/profiles.md +0 -0
  137. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs/quickstart.md +0 -0
  138. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs-canonical/ARCHITECTURE.md +0 -0
  139. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs-canonical/DATA-MODEL.md +0 -0
  140. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs-canonical/ENVIRONMENT.md +0 -0
  141. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs-canonical/SECURITY.md +0 -0
  142. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/docs-canonical/TEST-SPEC.md +0 -0
  143. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/01-express-api/README.md +0 -0
  144. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/01-express-api/package.json +0 -0
  145. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/01-express-api/server.js +0 -0
  146. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/02-python-flask/README.md +0 -0
  147. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/02-python-flask/app.py +0 -0
  148. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
  149. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/02-python-flask/requirements.txt +0 -0
  150. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
  151. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/03-spec-kit-project/README.md +0 -0
  152. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
  153. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
  154. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/03-spec-kit-project/package.json +0 -0
  155. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/03-spec-kit-project/src/index.js +0 -0
  156. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
  157. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/examples/README.md +0 -0
  158. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/LICENSE +0 -0
  159. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/README.md +0 -0
  160. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
  161. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/commands/generate.md +0 -0
  162. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/commands/guard.md +0 -0
  163. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/commands/init.md +0 -0
  164. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/commands/score.md +0 -0
  165. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/commands/trace.md +0 -0
  166. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
  167. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
  168. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
  169. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
  170. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
  171. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/ADR.md.template +0 -0
  172. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/AGENTS.md.template +0 -0
  173. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/ARCHITECTURE.md.template +0 -0
  174. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/CHANGELOG.md.template +0 -0
  175. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/CURRENT-STATE.md.template +0 -0
  176. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/DATA-MODEL.md.template +0 -0
  177. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/DEPLOYMENT.md.template +0 -0
  178. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/DRIFT-LOG.md.template +0 -0
  179. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/ENVIRONMENT.md.template +0 -0
  180. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/KNOWN-GOTCHAS.md.template +0 -0
  181. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/REQUIREMENTS.md.template +0 -0
  182. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/ROADMAP.md.template +0 -0
  183. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/RUNBOOKS.md.template +0 -0
  184. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/SECURITY.md.template +0 -0
  185. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/TEST-SPEC.md.template +0 -0
  186. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/TROUBLESHOOTING.md.template +0 -0
  187. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/VENDOR-BUGS.md.template +0 -0
  188. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/ci/github-actions.yml +0 -0
  189. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/commands/docguard.fix.md +0 -0
  190. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/commands/docguard.guard.md +0 -0
  191. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/commands/docguard.init.md +0 -0
  192. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/commands/docguard.review.md +0 -0
  193. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/templates/commands/docguard.update.md +0 -0
  194. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/vscode-extension/.vscodeignore +0 -0
  195. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/vscode-extension/README.md +0 -0
  196. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/vscode-extension/extension.js +0 -0
  197. {docguard_cli-0.9.8 → docguard_cli-0.9.10}/vscode-extension/package.json +0 -0
@@ -6,9 +6,10 @@ description: AI-driven documentation repair with structured research workflow, t
6
6
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
7
7
  metadata:
8
8
  author: docguard
9
- version: 0.9.5
9
+ version: 0.9.9
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
+ <!-- docguard:version: 0.9.9 -->
12
13
 
13
14
  # DocGuard Fix Skill
14
15
 
@@ -7,9 +7,10 @@ description: Run DocGuard guard validation against Canonical-Driven Development
7
7
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
8
8
  metadata:
9
9
  author: docguard
10
- version: 0.9.5
10
+ version: 0.9.9
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
+ <!-- docguard:version: 0.9.9 -->
13
14
 
14
15
  # DocGuard Guard Skill
15
16
 
@@ -155,12 +156,16 @@ Present the user with options:
155
156
  - **Track progress** — if user runs guard multiple times, compare before/after
156
157
  - If user provides `$ARGUMENTS` like "just structure" or "only security", filter report to those validators
157
158
 
158
- ## Integration with Spec Kit
159
+ ## Integration with Spec Kit (Extension-First)
159
160
 
160
- If this project has `.specify/` directory (spec-kit enabled):
161
+ DocGuard is a spec-kit extension. When this project has a `.specify/` directory:
162
+ - Read `.specify/memory/constitution.md` for project principles that constrain documentation
161
163
  - Include Spec-Kit validator results in the triage
162
164
  - Cross-reference spec quality issues with `specs/*/spec.md` file paths
163
- - Suggest `/speckit.analyze` if spec-related findings exceed 3
165
+ - When specification issues found → suggest `/speckit.specify` or `/speckit.clarify`
166
+ - When architecture gaps found → suggest `/speckit.plan`
167
+ - When cross-artifact inconsistencies exceed 3 → suggest `/speckit.analyze`
168
+ - When no constitution exists → suggest `/speckit.constitution` as first step
164
169
 
165
170
  ## Context
166
171
 
@@ -6,9 +6,10 @@ description: Cross-document consistency analysis and quality assessment. Perform
6
6
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
7
7
  metadata:
8
8
  author: docguard
9
- version: 0.9.5
9
+ version: 0.9.9
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
+ <!-- docguard:version: 0.9.9 -->
12
13
 
13
14
  # DocGuard Review Skill
14
15
 
@@ -163,7 +164,10 @@ Output a structured markdown report (do NOT write to disk):
163
164
 
164
165
  Based on findings:
165
166
  - **If CRITICAL issues**: "Run `/docguard.fix --doc [name]` to resolve blocking issues"
167
+ - **If spec-related gaps**: "Run `/speckit.specify` to update specifications" or "/speckit.clarify to resolve ambiguities"
168
+ - **If architecture drift**: "Run `/speckit.plan` to realign implementation plan with codebase"
166
169
  - **If only LOW/MEDIUM**: "Documentation is healthy. Consider `/docguard.fix` for polish"
170
+ - **If constitution missing**: "Run `/speckit.constitution` to establish project principles"
167
171
  - **If all clean**: "Documentation is excellent. No action needed."
168
172
 
169
173
  Ask: "Would you like me to fix the top N issues? (I'll show you what I plan to change before applying)"
@@ -6,9 +6,10 @@ description: CDD maturity assessment with category-aware improvement roadmap. Ru
6
6
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
7
7
  metadata:
8
8
  author: docguard
9
- version: 0.9.5
9
+ version: 0.9.9
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
+ <!-- docguard:version: 0.9.9 -->
12
13
 
13
14
  # DocGuard Score Skill
14
15
 
@@ -27,6 +27,10 @@
27
27
  "runCommand": "node cli/docguard.mjs"
28
28
  },
29
29
 
30
+ "securityIgnore": [
31
+ "tests/**"
32
+ ],
33
+
30
34
  "validators": {
31
35
  "structure": true,
32
36
  "docsSync": true,
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env python3
2
+ """Surgical catalog.community.json patcher for DocGuard.
3
+
4
+ Updates ONLY the docguard entry and top-level updated_at.
5
+ Does NOT re-serialize the entire JSON (preserves unicode escapes,
6
+ formatting, and other extensions' entries exactly as-is).
7
+
8
+ Usage: python3 patch-catalog.py <version> <download_url> <updated_at>
9
+ """
10
+ import sys
11
+ import json
12
+
13
+ if len(sys.argv) != 4:
14
+ print("Usage: patch-catalog.py <version> <download_url> <updated_at>")
15
+ sys.exit(1)
16
+
17
+ version = sys.argv[1]
18
+ download_url = sys.argv[2]
19
+ updated_at = sys.argv[3]
20
+
21
+ CATALOG_FILE = "extensions/catalog.community.json"
22
+
23
+ with open(CATALOG_FILE, "r") as f:
24
+ content = f.read()
25
+
26
+ # Parse to validate structure and get current values
27
+ data = json.loads(content)
28
+
29
+ if "extensions" not in data or "docguard" not in data["extensions"]:
30
+ print("❌ DocGuard entry not found in catalog.extensions")
31
+ sys.exit(1)
32
+
33
+ dg = data["extensions"]["docguard"]
34
+ old_version = dg["version"]
35
+ old_url = dg["download_url"]
36
+ old_entry_updated = dg["updated_at"]
37
+ old_desc = dg["description"]
38
+ top_updated = data["updated_at"]
39
+
40
+ # Correct description (matches our constitution: "Zero NPM runtime dependencies")
41
+ new_desc = (
42
+ "Canonical-Driven Development enforcement. "
43
+ "Validates, scores, and traces project documentation with automated checks, "
44
+ "AI-driven workflows, and spec-kit hooks. Zero NPM runtime dependencies."
45
+ )
46
+
47
+ # Surgical string replacements — only touch specific values
48
+ # 1. DocGuard version (first occurrence after "docguard" block)
49
+ content = content.replace(
50
+ f'"version": "{old_version}"',
51
+ f'"version": "{version}"',
52
+ 1,
53
+ )
54
+
55
+ # 2. Download URL (unique string, safe to replace globally)
56
+ content = content.replace(old_url, download_url)
57
+
58
+ # 3. DocGuard updated_at (first occurrence after version change)
59
+ content = content.replace(
60
+ f'"updated_at": "{old_entry_updated}"',
61
+ f'"updated_at": "{updated_at}"',
62
+ 1,
63
+ )
64
+
65
+ # 4. Description fix (if needed)
66
+ if old_desc != new_desc:
67
+ content = content.replace(old_desc, new_desc)
68
+
69
+ # 5. Bump top-level updated_at (should appear early in file)
70
+ content = content.replace(
71
+ f'"updated_at": "{top_updated}"',
72
+ f'"updated_at": "{updated_at}"',
73
+ 1,
74
+ )
75
+
76
+ with open(CATALOG_FILE, "w") as f:
77
+ f.write(content)
78
+
79
+ print(f"✅ Updated catalog.community.json → v{version} (surgical, no noisy diffs)")
80
+ print(f" version: {old_version} → {version}")
81
+ print(f" download_url: updated")
82
+ print(f" updated_at: {old_entry_updated} → {updated_at}")
83
+ print(f" top-level updated_at: {top_updated} → {updated_at}")
84
+ if old_desc != new_desc:
85
+ print(f" description: updated to match constitution")
86
+
87
+ # --- Also patch extensions/README.md (table row description) ---
88
+ README_FILE = "extensions/README.md"
89
+ try:
90
+ with open(README_FILE, "r") as f:
91
+ readme = f.read()
92
+
93
+ # The DocGuard row in the README table looks like:
94
+ # | DocGuard — CDD Enforcement | <description> | [spec-kit-docguard](...) |
95
+ # Only update if the old description is present
96
+ if old_desc in readme and old_desc != new_desc:
97
+ readme = readme.replace(old_desc, new_desc)
98
+ with open(README_FILE, "w") as f:
99
+ f.write(readme)
100
+ print(f"✅ Updated extensions/README.md — description synced")
101
+ else:
102
+ print(f"ℹ️ extensions/README.md already up to date")
103
+ except FileNotFoundError:
104
+ print(f"⚠️ {README_FILE} not found — skipping README update")
@@ -0,0 +1,191 @@
1
+ name: Auto Release — Tag, GitHub Release, npm, PyPI
2
+
3
+ # Triggers on push to main — detects version bumps automatically
4
+ on:
5
+ workflow_dispatch: # Allow manual trigger for recovery
6
+ push:
7
+ branches: [main]
8
+ paths:
9
+ - 'package.json' # Only run when package.json changes (version bump)
10
+
11
+ permissions:
12
+ contents: write # Needed to create tags and releases
13
+
14
+ jobs:
15
+ # ── Step 1: Detect if version changed ──────────────────────────────────
16
+ detect-version:
17
+ runs-on: ubuntu-latest
18
+ outputs:
19
+ version: ${{ steps.check.outputs.version }}
20
+ changed: ${{ steps.check.outputs.changed }}
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 2 # Need previous commit to compare
25
+
26
+ - name: Check if version changed
27
+ id: check
28
+ run: |
29
+ CURRENT=$(node -p "require('./package.json').version")
30
+ # Get version from previous commit
31
+ PREVIOUS=$(git show HEAD~1:package.json 2>/dev/null | node -p "JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8')).version" 2>/dev/null || echo "0.0.0")
32
+ echo "current=$CURRENT"
33
+ echo "previous=$PREVIOUS"
34
+ if [ "$CURRENT" != "$PREVIOUS" ]; then
35
+ echo "version=$CURRENT" >> "$GITHUB_OUTPUT"
36
+ echo "changed=true" >> "$GITHUB_OUTPUT"
37
+ echo "✅ Version changed: $PREVIOUS → $CURRENT"
38
+ else
39
+ echo "changed=false" >> "$GITHUB_OUTPUT"
40
+ echo "⏭️ Version unchanged ($CURRENT), skipping release"
41
+ fi
42
+
43
+ # ── Step 2: Run full test suite ────────────────────────────────────────
44
+ test:
45
+ needs: detect-version
46
+ if: needs.detect-version.outputs.changed == 'true'
47
+ runs-on: ubuntu-latest
48
+ strategy:
49
+ matrix:
50
+ node-version: [18, 20, 22]
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ with:
54
+ fetch-depth: 0
55
+ - uses: actions/setup-node@v4
56
+ with:
57
+ node-version: ${{ matrix.node-version }}
58
+ - name: Run Tests
59
+ run: npm test
60
+ - name: Guard (self-check)
61
+ run: node cli/docguard.mjs guard || [ $? -eq 2 ]
62
+
63
+ # ── Step 3: Create git tag + GitHub Release ────────────────────────────
64
+ create-release:
65
+ needs: [detect-version, test]
66
+ if: needs.detect-version.outputs.changed == 'true'
67
+ runs-on: ubuntu-latest
68
+ outputs:
69
+ tag: v${{ needs.detect-version.outputs.version }}
70
+ steps:
71
+ - uses: actions/checkout@v4
72
+ with:
73
+ fetch-depth: 0 # Fetch all history + tags for reliable tag detection
74
+
75
+ - name: Create and push tag
76
+ env:
77
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
78
+ run: |
79
+ VERSION="${{ needs.detect-version.outputs.version }}"
80
+ TAG="v${VERSION}"
81
+
82
+ # Check if tag already exists on remote (not just local)
83
+ if git ls-remote --tags origin | grep -q "refs/tags/$TAG$"; then
84
+ echo "✅ Tag $TAG already exists on remote, skipping tag creation"
85
+ else
86
+ git config user.name "github-actions[bot]"
87
+ git config user.email "github-actions[bot]@users.noreply.github.com"
88
+ git tag -a "$TAG" -m "Release $TAG"
89
+ git push origin "$TAG"
90
+ echo "✅ Tag $TAG created and pushed"
91
+ fi
92
+
93
+ - name: Generate release notes from CHANGELOG
94
+ id: notes
95
+ run: |
96
+ VERSION="${{ needs.detect-version.outputs.version }}"
97
+ # Extract the section for this version from CHANGELOG.md
98
+ # Matches from ## [X.X.X] until the next ## [
99
+ NOTES=$(awk "/^## \\[${VERSION}\\]/{found=1; next} /^## \\[/{if(found) exit} found{print}" CHANGELOG.md)
100
+ if [ -z "$NOTES" ]; then
101
+ NOTES="Release v${VERSION} — see CHANGELOG.md for details."
102
+ fi
103
+ # Write to file to avoid escaping issues
104
+ echo "$NOTES" > /tmp/release-notes.md
105
+ echo "✅ Release notes extracted"
106
+
107
+ - name: Create GitHub Release
108
+ env:
109
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
110
+ run: |
111
+ VERSION="${{ needs.detect-version.outputs.version }}"
112
+ TAG="v${VERSION}"
113
+ # Skip if release already exists (e.g., manually created)
114
+ if gh release view "$TAG" >/dev/null 2>&1; then
115
+ echo "✅ Release $TAG already exists, skipping"
116
+ else
117
+ gh release create "$TAG" \
118
+ --title "DocGuard $TAG" \
119
+ --notes-file /tmp/release-notes.md \
120
+ --latest
121
+ fi
122
+
123
+ # ── Step 4: Build and attach spec-kit extension ZIP ────────────────────
124
+ build-extension:
125
+ needs: [detect-version, create-release]
126
+ runs-on: ubuntu-latest
127
+ steps:
128
+ - uses: actions/checkout@v4
129
+
130
+ - name: Build extension ZIP
131
+ run: |
132
+ VERSION="${{ needs.detect-version.outputs.version }}"
133
+ cd extensions/spec-kit-docguard
134
+ zip -r "../../spec-kit-docguard-v${VERSION}.zip" . -x ".*"
135
+ cd ../..
136
+ echo "--- ZIP contents ---"
137
+ unzip -l "spec-kit-docguard-v${VERSION}.zip"
138
+
139
+ - name: Upload to release
140
+ env:
141
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
142
+ run: |
143
+ VERSION="${{ needs.detect-version.outputs.version }}"
144
+ gh release upload "v${VERSION}" \
145
+ "spec-kit-docguard-v${VERSION}.zip" \
146
+ --clobber
147
+
148
+ # ── Step 5: Publish to npm ─────────────────────────────────────────────
149
+ publish-npm:
150
+ needs: [detect-version, test, create-release]
151
+ runs-on: ubuntu-latest
152
+ steps:
153
+ - uses: actions/checkout@v4
154
+ - uses: actions/setup-node@v4
155
+ with:
156
+ node-version: 20
157
+ registry-url: 'https://registry.npmjs.org'
158
+
159
+ - name: Publish
160
+ run: npm publish
161
+ env:
162
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
163
+
164
+ # ── Step 6: Publish to PyPI ────────────────────────────────────────────
165
+ publish-pypi:
166
+ needs: [detect-version, test, create-release]
167
+ runs-on: ubuntu-latest
168
+ steps:
169
+ - uses: actions/checkout@v4
170
+ - uses: actions/setup-python@v5
171
+ with:
172
+ python-version: '3.12'
173
+
174
+ - name: Sync version in pyproject.toml
175
+ run: |
176
+ VERSION="${{ needs.detect-version.outputs.version }}"
177
+ sed -i "s/^version = \".*\"/version = \"$VERSION\"/" pyproject.toml
178
+ echo "Publishing version $VERSION"
179
+ grep 'version' pyproject.toml
180
+
181
+ - name: Install build tools
182
+ run: pip install build twine
183
+
184
+ - name: Build
185
+ run: python -m build
186
+
187
+ - name: Publish
188
+ run: python -m twine upload dist/*
189
+ env:
190
+ TWINE_USERNAME: __token__
191
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,162 @@
1
+ name: Sync DocGuard to Spec Kit Community Catalog
2
+
3
+ # Triggers after the release workflow completes, or manually
4
+ on:
5
+ workflow_run:
6
+ workflows: ["Auto Release — Tag, GitHub Release, npm, PyPI"]
7
+ types: [completed]
8
+ branches: [main]
9
+ workflow_dispatch:
10
+ inputs:
11
+ version:
12
+ description: 'Override version (leave empty to read from package.json)'
13
+ required: false
14
+ type: string
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ sync-catalog:
21
+ runs-on: ubuntu-latest
22
+ # Only run if the release workflow succeeded (or manual trigger)
23
+ if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
24
+
25
+ steps:
26
+ - name: Checkout docguard repo
27
+ uses: actions/checkout@v4
28
+
29
+ - name: Get version and metadata
30
+ id: meta
31
+ run: |
32
+ if [ -n "${{ inputs.version }}" ]; then
33
+ VERSION="${{ inputs.version }}"
34
+ else
35
+ VERSION=$(node -p "require('./package.json').version")
36
+ fi
37
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
38
+ echo "tag=v${VERSION}" >> "$GITHUB_OUTPUT"
39
+ echo "download_url=https://github.com/raccioly/docguard/releases/download/v${VERSION}/spec-kit-docguard-v${VERSION}.zip" >> "$GITHUB_OUTPUT"
40
+ echo "updated_at=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT"
41
+
42
+ # Extract short description (avoid multiline output issues)
43
+ DESC="Canonical-Driven Development enforcement with automated checks, AI skills, and spec-kit hooks. Zero NPM runtime dependencies."
44
+ echo "description=$DESC" >> "$GITHUB_OUTPUT"
45
+
46
+ # Count commands
47
+ COMMANDS=$(ls extensions/spec-kit-docguard/commands/*.md 2>/dev/null | wc -l | tr -d ' ')
48
+ echo "commands=${COMMANDS:-6}" >> "$GITHUB_OUTPUT"
49
+
50
+ echo "✅ Version: $VERSION"
51
+ echo " Download: https://github.com/raccioly/docguard/releases/download/v${VERSION}/spec-kit-docguard-v${VERSION}.zip"
52
+
53
+ - name: Extract release notes from CHANGELOG
54
+ id: notes
55
+ run: |
56
+ VERSION="${{ steps.meta.outputs.version }}"
57
+ NOTES=$(awk "/^## \\[${VERSION}\\]/{found=1; next} /^## \\[/{if(found) exit} found{print}" CHANGELOG.md)
58
+ if [ -z "$NOTES" ]; then
59
+ NOTES="Updated to v${VERSION}. See [CHANGELOG](https://github.com/raccioly/docguard/blob/main/CHANGELOG.md) for details."
60
+ fi
61
+ # Write to file (avoids multiline env var issues)
62
+ echo "$NOTES" > /tmp/changelog-section.md
63
+ echo "✅ Release notes extracted ($(wc -l < /tmp/changelog-section.md) lines)"
64
+
65
+ - name: Sync fork with upstream
66
+ env:
67
+ GH_TOKEN: ${{ secrets.SPECKIT_PR_TOKEN }}
68
+ run: |
69
+ # Use GitHub API to sync fork — avoids needing workflow scope on PAT
70
+ gh repo sync raccioly/spec-kit --source github/spec-kit --branch main --force
71
+ echo "✅ Fork synced with upstream"
72
+
73
+ - name: Checkout spec-kit fork (fresh after sync)
74
+ uses: actions/checkout@v4
75
+ with:
76
+ repository: raccioly/spec-kit
77
+ token: ${{ secrets.SPECKIT_PR_TOKEN }}
78
+ path: spec-kit-fork
79
+ ref: main
80
+
81
+ - name: Update catalog.community.json
82
+ working-directory: spec-kit-fork
83
+ run: |
84
+ VERSION="${{ steps.meta.outputs.version }}"
85
+ DOWNLOAD_URL="${{ steps.meta.outputs.download_url }}"
86
+ UPDATED_AT="${{ steps.meta.outputs.updated_at }}"
87
+
88
+ # Surgical updates using external script — no full-file re-serialization
89
+ # Prevents noisy diffs on unrelated extensions (unicode escapes, formatting)
90
+ # Also bumps top-level updated_at and fixes description wording
91
+ cp ${{ github.workspace }}/.github/scripts/patch-catalog.py /tmp/patch-catalog.py
92
+ python3 /tmp/patch-catalog.py "$VERSION" "$DOWNLOAD_URL" "$UPDATED_AT"
93
+
94
+ - name: Create or update branch
95
+ working-directory: spec-kit-fork
96
+ run: |
97
+ BRANCH="update-docguard"
98
+ git config user.name "github-actions[bot]"
99
+ git config user.email "github-actions[bot]@users.noreply.github.com"
100
+
101
+ # Always use the same branch name (so PRs get updated, not duplicated)
102
+ git checkout -B "$BRANCH"
103
+ git add extensions/catalog.community.json extensions/README.md
104
+ git commit -m "chore: update DocGuard extension to v${{ steps.meta.outputs.version }}" || echo "No changes to commit"
105
+ git push --force origin "$BRANCH"
106
+ echo "✅ Branch $BRANCH pushed"
107
+
108
+ - name: Create or update PR
109
+ working-directory: spec-kit-fork
110
+ env:
111
+ GH_TOKEN: ${{ secrets.SPECKIT_PR_TOKEN }}
112
+ run: |
113
+ VERSION="${{ steps.meta.outputs.version }}"
114
+ BRANCH="update-docguard"
115
+
116
+ # Build PR body
117
+ cat > /tmp/pr-body.md << 'HEADER'
118
+ ## DocGuard Community Extension Update
119
+
120
+ Updates the DocGuard community extension catalog entry.
121
+
122
+ ### Changes
123
+ HEADER
124
+
125
+ echo "- Version: **v${VERSION}**" >> /tmp/pr-body.md
126
+ echo "- Download: \`spec-kit-docguard-v${VERSION}.zip\`" >> /tmp/pr-body.md
127
+ echo "- Repository: https://github.com/raccioly/docguard" >> /tmp/pr-body.md
128
+ echo "" >> /tmp/pr-body.md
129
+ echo "### Release Notes" >> /tmp/pr-body.md
130
+ echo "" >> /tmp/pr-body.md
131
+ cat /tmp/changelog-section.md >> /tmp/pr-body.md
132
+ echo "" >> /tmp/pr-body.md
133
+ echo "---" >> /tmp/pr-body.md
134
+ echo "*This PR was automatically generated by the DocGuard release pipeline.*" >> /tmp/pr-body.md
135
+
136
+ # Try to create PR first — if it already exists, edit it instead
137
+ PR_URL=$(gh pr create \
138
+ --repo github/spec-kit \
139
+ --head "raccioly:${BRANCH}" \
140
+ --base main \
141
+ --title "chore: update DocGuard extension to v${VERSION}" \
142
+ --body-file /tmp/pr-body.md 2>&1) && {
143
+ echo "✅ Created new PR: $PR_URL"
144
+ } || {
145
+ echo "PR already exists — updating title and body..."
146
+ # Find the existing PR number
147
+ EXISTING_PR=$(gh pr list \
148
+ --repo github/spec-kit \
149
+ --head "raccioly:${BRANCH}" \
150
+ --state open \
151
+ --json number \
152
+ --jq '.[0].number' 2>/dev/null || echo "")
153
+ if [ -n "$EXISTING_PR" ] && [ "$EXISTING_PR" != "null" ]; then
154
+ gh pr edit "$EXISTING_PR" \
155
+ --repo github/spec-kit \
156
+ --title "chore: update DocGuard extension to v${VERSION}" \
157
+ --body-file /tmp/pr-body.md
158
+ echo "✅ Updated existing PR #${EXISTING_PR}"
159
+ else
160
+ echo "✅ Branch force-pushed — PR content is updated via the branch"
161
+ fi
162
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "cached_at": "2026-03-17T15:48:51.701820+00:00",
3
+ "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json"
4
+ }