docguard-cli 0.30.1__tar.gz → 0.31.0__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 (446) hide show
  1. {docguard_cli-0.30.1/extensions/spec-kit-docguard → docguard_cli-0.31.0/.agent}/skills/docguard-fix/SKILL.md +2 -2
  2. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/docguard-guard/SKILL.md +2 -2
  3. {docguard_cli-0.30.1/extensions/spec-kit-docguard → docguard_cli-0.31.0/.agent}/skills/docguard-review/SKILL.md +2 -2
  4. {docguard_cli-0.30.1/extensions/spec-kit-docguard → docguard_cli-0.31.0/.agent}/skills/docguard-score/SKILL.md +2 -2
  5. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/docguard-sync/SKILL.md +2 -2
  6. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/buglog.json +20 -0
  7. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/cerebrum.md +2 -0
  8. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/AGENTS.md +1 -1
  9. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CHANGELOG.md +55 -0
  10. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/PKG-INFO +10 -7
  11. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/README.md +9 -6
  12. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/explain.mjs +34 -0
  13. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/guard.mjs +8 -0
  14. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/impact.mjs +93 -12
  15. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/verify.mjs +63 -1
  16. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/config.mjs +7 -0
  17. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/findings.mjs +26 -0
  18. docguard_cli-0.31.0/cli/shared-diff.mjs +209 -0
  19. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-git.mjs +93 -0
  20. docguard_cli-0.31.0/cli/shared-ir.mjs +81 -0
  21. docguard_cli-0.31.0/cli/validators/api-doc-smells.mjs +143 -0
  22. docguard_cli-0.31.0/cli/validators/diff-suspicion.mjs +178 -0
  23. docguard_cli-0.31.0/cli/validators/reference-existence.mjs +157 -0
  24. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/traceability.mjs +44 -4
  25. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/quickstart.md +1 -1
  26. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/ARCHITECTURE.md +1 -1
  27. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/CI-RECIPES.md +2 -2
  28. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/extension.yml +1 -1
  29. {docguard_cli-0.30.1/.agent → docguard_cli-0.31.0/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
  30. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/skills/docguard-guard/SKILL.md +2 -2
  31. {docguard_cli-0.30.1/.agent → docguard_cli-0.31.0/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
  32. {docguard_cli-0.30.1/.agent → docguard_cli-0.31.0/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
  33. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
  34. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/llms-full.txt +167 -144
  35. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/package.json +1 -1
  36. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/pyproject.toml +1 -1
  37. docguard_cli-0.31.0/tests/api-doc-smells.test.mjs +62 -0
  38. docguard_cli-0.31.0/tests/diff-suspicion.test.mjs +76 -0
  39. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/impact.test.mjs +56 -0
  40. docguard_cli-0.31.0/tests/reference-existence.test.mjs +54 -0
  41. docguard_cli-0.31.0/tests/shared-diff.test.mjs +118 -0
  42. docguard_cli-0.31.0/tests/shared-ir.test.mjs +50 -0
  43. docguard_cli-0.31.0/tests/traceability-ir.test.mjs +38 -0
  44. docguard_cli-0.31.0/tests/verify-change-context.test.mjs +51 -0
  45. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.fix.md +0 -0
  46. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.guard.md +0 -0
  47. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.review.md +0 -0
  48. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.score.md +0 -0
  49. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.analyze.md +0 -0
  50. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.checklist.md +0 -0
  51. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.clarify.md +0 -0
  52. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.constitution.md +0 -0
  53. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.implement.md +0 -0
  54. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.plan.md +0 -0
  55. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.specify.md +0 -0
  56. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.tasks.md +0 -0
  57. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.taskstoissues.md +0 -0
  58. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-analyze/SKILL.md +0 -0
  59. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-checklist/SKILL.md +0 -0
  60. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-clarify/SKILL.md +0 -0
  61. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-constitution/SKILL.md +0 -0
  62. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-implement/SKILL.md +0 -0
  63. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-plan/SKILL.md +0 -0
  64. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-specify/SKILL.md +0 -0
  65. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-tasks/SKILL.md +0 -0
  66. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
  67. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.claude/rules/openwolf.md +0 -0
  68. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.claude/settings.json +0 -0
  69. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.docguard.json +0 -0
  70. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.docguardignore +0 -0
  71. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  72. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
  73. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  74. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  75. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/dependabot.yml +0 -0
  76. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/scripts/speckit-submission.py +0 -0
  77. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/ci.yml +0 -0
  78. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/jules-triage.yml +0 -0
  79. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/release.yml +0 -0
  80. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/supply-chain.yml +0 -0
  81. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/sync-speckit-catalog.yml +0 -0
  82. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.gitignore +0 -0
  83. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules/bolt.md +0 -0
  84. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules/palette.md +0 -0
  85. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules/sentinel.md +0 -0
  86. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules-setup.sh +0 -0
  87. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.npmignore +0 -0
  88. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.npmrc +0 -0
  89. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.pre-commit-hooks.yaml +0 -0
  90. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
  91. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
  92. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog-metadata.json +0 -0
  93. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog.json +0 -0
  94. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/init-options.json +0 -0
  95. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/memory/constitution.md +0 -0
  96. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  97. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/common.sh +0 -0
  98. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
  99. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/setup-plan.sh +0 -0
  100. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
  101. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/agent-file-template.md +0 -0
  102. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/checklist-template.md +0 -0
  103. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/constitution-template.md +0 -0
  104. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/plan-template.md +0 -0
  105. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/spec-template.md +0 -0
  106. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/tasks-template.md +0 -0
  107. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/OPENWOLF.md +0 -0
  108. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/anatomy.md +0 -0
  109. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/config.json +0 -0
  110. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/cron-manifest.json +0 -0
  111. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/cron-state.json +0 -0
  112. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/daemon.log +0 -0
  113. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/designqc-report.json +0 -0
  114. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/_session.json +0 -0
  115. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/_wrap_up_nudged +0 -0
  116. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/package.json +0 -0
  117. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/post-read.js +0 -0
  118. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/post-write.js +0 -0
  119. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/pre-read.js +0 -0
  120. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/pre-write.js +0 -0
  121. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/session-start.js +0 -0
  122. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/shared.js +0 -0
  123. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/stop.js +0 -0
  124. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/identity.md +0 -0
  125. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/memory.md +0 -0
  126. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/reframe-frameworks.md +0 -0
  127. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/suggestions.json +0 -0
  128. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/token-ledger.json +0 -0
  129. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CLAUDE.md +0 -0
  130. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CODE_OF_CONDUCT.md +0 -0
  131. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/COMPARISONS.md +0 -0
  132. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CONTRIBUTING.md +0 -0
  133. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/DRIFT-LOG.md +0 -0
  134. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/Dockerfile +0 -0
  135. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/LICENSE +0 -0
  136. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/PHILOSOPHY.md +0 -0
  137. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/README.es.md +0 -0
  138. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/README.pt-BR.md +0 -0
  139. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/ROADMAP.md +0 -0
  140. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/SECURITY.md +0 -0
  141. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/STANDARD.md +0 -0
  142. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/SUPPLY-CHAIN-AUDIT.md +0 -0
  143. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/SUPPORT.md +0 -0
  144. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/action.yml +0 -0
  145. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/bin/docguard +0 -0
  146. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/demo.gif +0 -0
  147. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/demo.tape +0 -0
  148. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/docguard-logo.png +0 -0
  149. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/agent.mjs +0 -0
  150. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/agents.mjs +0 -0
  151. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/badge.mjs +0 -0
  152. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/ci.mjs +0 -0
  153. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/demo.mjs +0 -0
  154. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/diagnose.mjs +0 -0
  155. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/diff.mjs +0 -0
  156. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/feedback.mjs +0 -0
  157. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/fix.mjs +0 -0
  158. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/generate.mjs +0 -0
  159. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/hooks.mjs +0 -0
  160. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/init.mjs +0 -0
  161. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/llms.mjs +0 -0
  162. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/mcp.mjs +0 -0
  163. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/memory.mjs +0 -0
  164. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/publish.mjs +0 -0
  165. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/score.mjs +0 -0
  166. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/setup.mjs +0 -0
  167. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/sync-tests.mjs +0 -0
  168. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/sync.mjs +0 -0
  169. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/trace.mjs +0 -0
  170. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/upgrade.mjs +0 -0
  171. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/watch.mjs +0 -0
  172. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/docguard.mjs +0 -0
  173. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/ensure-skills.mjs +0 -0
  174. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/agent-readability.mjs +0 -0
  175. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/api-doc.mjs +0 -0
  176. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/cdk.mjs +0 -0
  177. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/doc-tools.mjs +0 -0
  178. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/frontend.mjs +0 -0
  179. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/iac.mjs +0 -0
  180. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/instruction-audit.mjs +0 -0
  181. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/integrations.mjs +0 -0
  182. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/inventory.mjs +0 -0
  183. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/js-ast.mjs +0 -0
  184. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/memory-plan.mjs +0 -0
  185. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/project-type.mjs +0 -0
  186. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/py-ast.mjs +0 -0
  187. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/routes.mjs +0 -0
  188. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/schemas.mjs +0 -0
  189. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/semantic-claims.mjs +0 -0
  190. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/speckit.mjs +0 -0
  191. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-ignore.mjs +0 -0
  192. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-source.mjs +0 -0
  193. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-trace-patterns.mjs +0 -0
  194. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared.mjs +0 -0
  195. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validator-markers.mjs +0 -0
  196. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/api-surface.mjs +0 -0
  197. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/architecture.mjs +0 -0
  198. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/canonical-sync.mjs +0 -0
  199. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/changelog.mjs +0 -0
  200. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/cross-reference.mjs +0 -0
  201. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/doc-quality.mjs +0 -0
  202. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/docs-coverage.mjs +0 -0
  203. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/docs-diff.mjs +0 -0
  204. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/docs-sync.mjs +0 -0
  205. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/drift.mjs +0 -0
  206. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/environment.mjs +0 -0
  207. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/freshness.mjs +0 -0
  208. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/generated-staleness.mjs +0 -0
  209. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/metadata-sync.mjs +0 -0
  210. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/metrics-consistency.mjs +0 -0
  211. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/schema-sync.mjs +0 -0
  212. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/security.mjs +0 -0
  213. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/spec-kit.mjs +0 -0
  214. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/structure.mjs +0 -0
  215. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/surface-sync.mjs +0 -0
  216. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/test-spec.mjs +0 -0
  217. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/todo-tracking.mjs +0 -0
  218. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/api-reference.mjs +0 -0
  219. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/doc-generators.mjs +0 -0
  220. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/fix-memory.mjs +0 -0
  221. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/generate-io.mjs +0 -0
  222. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/mechanical.mjs +0 -0
  223. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/sarif.mjs +0 -0
  224. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/sections.mjs +0 -0
  225. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.fix.md +0 -0
  226. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.guard.md +0 -0
  227. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.review.md +0 -0
  228. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.score.md +0 -0
  229. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/fastify.json +0 -0
  230. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/generic.json +0 -0
  231. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/nextjs.json +0 -0
  232. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/python.json +0 -0
  233. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docguard_cli/__init__.py +0 -0
  234. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docguard_cli/wrapper.py +0 -0
  235. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/ai-integration.md +0 -0
  236. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/commands.md +0 -0
  237. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/configuration.md +0 -0
  238. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/doc-sections.md +0 -0
  239. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/faq.md +0 -0
  240. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/installation.md +0 -0
  241. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/profiles.md +0 -0
  242. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/DATA-MODEL.md +0 -0
  243. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/ENVIRONMENT.md +0 -0
  244. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/REQUIREMENTS.md +0 -0
  245. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/SECURITY.md +0 -0
  246. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/SURFACE-AUDIT.md +0 -0
  247. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/TEST-SPEC.md +0 -0
  248. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-implementation/MIGRATION-v0.20.md +0 -0
  249. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/01-express-api/README.md +0 -0
  250. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/01-express-api/package.json +0 -0
  251. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/01-express-api/server.js +0 -0
  252. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/README.md +0 -0
  253. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/app.py +0 -0
  254. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
  255. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/requirements.txt +0 -0
  256. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
  257. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/README.md +0 -0
  258. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
  259. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
  260. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/package.json +0 -0
  261. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/src/index.js +0 -0
  262. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/tasks.json +0 -0
  263. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
  264. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/README.md +0 -0
  265. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/LICENSE +0 -0
  266. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/README.md +0 -0
  267. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
  268. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/fix.md +0 -0
  269. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/generate.md +0 -0
  270. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/guard.md +0 -0
  271. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/init.md +0 -0
  272. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/score.md +0 -0
  273. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/sync.md +0 -0
  274. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/trace.md +0 -0
  275. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
  276. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
  277. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
  278. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
  279. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
  280. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
  281. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +0 -0
  282. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/glama.json +0 -0
  283. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/llms.txt +0 -0
  284. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/package-lock.json +0 -0
  285. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/packaging/homebrew/docguard.rb +0 -0
  286. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/packaging/submissions.md +0 -0
  287. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/schemas/docguard-config.schema.json +0 -0
  288. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/server.json +0 -0
  289. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/smithery.yaml +0 -0
  290. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/001-fix-ignore-validators/plan.md +0 -0
  291. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/001-fix-ignore-validators/spec.md +0 -0
  292. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/001-fix-ignore-validators/tasks.md +0 -0
  293. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/002-fix-test-discovery/plan.md +0 -0
  294. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/002-fix-test-discovery/spec.md +0 -0
  295. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/002-fix-test-discovery/tasks.md +0 -0
  296. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/003-v011-false-positives/plan.md +0 -0
  297. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/003-v011-false-positives/spec.md +0 -0
  298. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/003-v011-false-positives/tasks.md +0 -0
  299. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/004-v020-env-var-false-negative/spec.md +0 -0
  300. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/005-hugocross-next-bugs/spec.md +0 -0
  301. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ADR.md.template +0 -0
  302. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/AGENTS.md.template +0 -0
  303. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ARCHITECTURE.md.template +0 -0
  304. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/CHANGELOG.md.template +0 -0
  305. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/CURRENT-STATE.md.template +0 -0
  306. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/DATA-MODEL.md.template +0 -0
  307. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/DEPLOYMENT.md.template +0 -0
  308. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/DRIFT-LOG.md.template +0 -0
  309. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ENVIRONMENT.md.template +0 -0
  310. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/KNOWN-GOTCHAS.md.template +0 -0
  311. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/REQUIREMENTS.md.template +0 -0
  312. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ROADMAP.md.template +0 -0
  313. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/RUNBOOKS.md.template +0 -0
  314. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/SECURITY.md.template +0 -0
  315. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/TEST-SPEC.md.template +0 -0
  316. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/TROUBLESHOOTING.md.template +0 -0
  317. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/VENDOR-BUGS.md.template +0 -0
  318. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ci/github-actions.yml +0 -0
  319. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ci/gitlab-component.yml +0 -0
  320. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.fix.md +0 -0
  321. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.guard.md +0 -0
  322. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.init.md +0 -0
  323. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.review.md +0 -0
  324. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.update.md +0 -0
  325. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/.docguard.json +0 -0
  326. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/.env.example +0 -0
  327. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/AGENTS.md +0 -0
  328. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/CHANGELOG.md +0 -0
  329. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/DRIFT-LOG.md +0 -0
  330. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/README.md +0 -0
  331. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
  332. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
  333. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
  334. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
  335. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
  336. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
  337. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/package.json +0 -0
  338. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/api.mjs +0 -0
  339. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/notifier.mjs +0 -0
  340. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/scheduler.mjs +0 -0
  341. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/worker.mjs +0 -0
  342. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/agent-readability.test.mjs +0 -0
  343. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/agent.test.mjs +0 -0
  344. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/agents-sync.test.mjs +0 -0
  345. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/anchor-autofix.test.mjs +0 -0
  346. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/api-doc.test.mjs +0 -0
  347. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/api-surface.test.mjs +0 -0
  348. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/api-write.test.mjs +0 -0
  349. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/architecture.test.mjs +0 -0
  350. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/b7-node-env-symmetry.test.mjs +0 -0
  351. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/backup-failure.test.mjs +0 -0
  352. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/canonical-sync.test.mjs +0 -0
  353. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/cdk-detection.test.mjs +0 -0
  354. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/changed-only-scoping.test.mjs +0 -0
  355. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/changed-only.test.mjs +0 -0
  356. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/changelog.test.mjs +0 -0
  357. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/commands.test.mjs +0 -0
  358. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/cross-reference.test.mjs +0 -0
  359. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/demo-command.test.mjs +0 -0
  360. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/doc-quality.test.mjs +0 -0
  361. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/doc-section-synonyms.test.mjs +0 -0
  362. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docguardignore.test.mjs +0 -0
  363. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docs-coverage.test.mjs +0 -0
  364. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docs-diff.test.mjs +0 -0
  365. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docs-sync.test.mjs +0 -0
  366. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/drift.test.mjs +0 -0
  367. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/ensure-skills-idempotent.test.mjs +0 -0
  368. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/env-schema-detection.test.mjs +0 -0
  369. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/environment.test.mjs +0 -0
  370. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/explain-coverage.test.mjs +0 -0
  371. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/field-report-2-cli.test.mjs +0 -0
  372. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/field-report-3-deferred.test.mjs +0 -0
  373. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/field-report-3.test.mjs +0 -0
  374. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/fix-memory.test.mjs +0 -0
  375. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/fix-suppression.test.mjs +0 -0
  376. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/fixture-projects.test.mjs +0 -0
  377. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/freshness.test.mjs +0 -0
  378. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/frontend-deep.test.mjs +0 -0
  379. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/frontend.test.mjs +0 -0
  380. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/generated-staleness.test.mjs +0 -0
  381. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/guard-classify.test.mjs +0 -0
  382. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/guard-no-throw.test.mjs +0 -0
  383. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/hooks.test.mjs +0 -0
  384. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/i18n.test.mjs +0 -0
  385. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/init-smart-detection.test.mjs +0 -0
  386. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/instruction-audit.test.mjs +0 -0
  387. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/integrations.test.mjs +0 -0
  388. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/inventory.test.mjs +0 -0
  389. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/js-ast.test.mjs +0 -0
  390. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/llms-full-pack.test.mjs +0 -0
  391. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/mcp.test.mjs +0 -0
  392. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/mechanical.test.mjs +0 -0
  393. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/memory-plan.test.mjs +0 -0
  394. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/metadata-sync.test.mjs +0 -0
  395. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/metrics-consistency.test.mjs +0 -0
  396. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/metrics-dedup.test.mjs +0 -0
  397. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/monorepo-scanning.test.mjs +0 -0
  398. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/multi-spec.test.mjs +0 -0
  399. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/npm-pack-smoke.test.mjs +0 -0
  400. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/openapi-parse-honesty.test.mjs +0 -0
  401. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/patch-0.11.2.test.mjs +0 -0
  402. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/plan-disk-cache.test.mjs +0 -0
  403. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/profile-flag.test.mjs +0 -0
  404. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/project-type.test.mjs +0 -0
  405. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/py-ast.test.mjs +0 -0
  406. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/regenerate-section.test.mjs +0 -0
  407. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-express-mounts.test.mjs +0 -0
  408. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-fastify.test.mjs +0 -0
  409. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-multilang.test.mjs +0 -0
  410. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-nextjs-app-router.test.mjs +0 -0
  411. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sarif.test.mjs +0 -0
  412. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/schema-sync.test.mjs +0 -0
  413. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/schemas-multilang.test.mjs +0 -0
  414. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/schemas.test.mjs +0 -0
  415. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/scoping-extended.test.mjs +0 -0
  416. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/score-suggestions.test.mjs +0 -0
  417. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/section-na-markers.test.mjs +0 -0
  418. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sections.test.mjs +0 -0
  419. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/security-init-injection.test.mjs +0 -0
  420. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/security.test.mjs +0 -0
  421. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/severity.test.mjs +0 -0
  422. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/shared-git.test.mjs +0 -0
  423. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/shared-source.test.mjs +0 -0
  424. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/speckit-bugfix.test.mjs +0 -0
  425. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/speckit-phantom.test.mjs +0 -0
  426. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/starter-scaffold.test.mjs +0 -0
  427. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/stress-test.test.mjs +0 -0
  428. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/structure.test.mjs +0 -0
  429. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/surface-sync.test.mjs +0 -0
  430. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sweep-nudge.test.mjs +0 -0
  431. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sync-since.test.mjs +0 -0
  432. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sync.test.mjs +0 -0
  433. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/test-spec.test.mjs +0 -0
  434. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/todo-tracking.test.mjs +0 -0
  435. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/trace-features.test.mjs +0 -0
  436. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/trace-multilang.test.mjs +0 -0
  437. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/trace-reverse.test.mjs +0 -0
  438. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/traceability.test.mjs +0 -0
  439. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/upgrade-pr-e2e.test.mjs +0 -0
  440. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/upgrade-pr.test.mjs +0 -0
  441. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/upgrade.test.mjs +0 -0
  442. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/v020-consolidation.test.mjs +0 -0
  443. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/validator-markers.test.mjs +0 -0
  444. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/validator-naming.test.mjs +0 -0
  445. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/version-pin.test.mjs +0 -0
  446. {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/whats-new.test.mjs +0 -0
@@ -6,10 +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.30.0
9
+ version: 0.31.0
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.30.0 -->
12
+ <!-- docguard:version: 0.31.0 -->
13
13
 
14
14
  # DocGuard Fix Skill
15
15
 
@@ -7,10 +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.29.0
10
+ version: 0.31.0
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.29.0 -->
13
+ <!-- docguard:version: 0.31.0 -->
14
14
 
15
15
  # DocGuard Guard Skill
16
16
 
@@ -6,10 +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.30.0
9
+ version: 0.31.0
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.30.0 -->
12
+ <!-- docguard:version: 0.31.0 -->
13
13
 
14
14
  # DocGuard Review Skill
15
15
 
@@ -6,10 +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.30.0
9
+ version: 0.31.0
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.30.0 -->
12
+ <!-- docguard:version: 0.31.0 -->
13
13
 
14
14
  # DocGuard Score Skill
15
15
 
@@ -4,10 +4,10 @@ description: Keep canonical documentation ALWAYS UP TO DATE. Refreshes code-trut
4
4
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
5
5
  metadata:
6
6
  author: docguard
7
- version: 0.29.0
7
+ version: 0.31.0
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
- <!-- docguard:version: 0.29.0 -->
10
+ <!-- docguard:version: 0.31.0 -->
11
11
 
12
12
  # DocGuard Sync Skill
13
13
 
@@ -3294,6 +3294,26 @@
3294
3294
  "related_bugs": [],
3295
3295
  "occurrences": 1,
3296
3296
  "last_seen": "2026-07-06T14:40:55.317Z"
3297
+ },
3298
+ {
3299
+ "id": "bug-201",
3300
+ "timestamp": "2026-07-07T00:00:00Z",
3301
+ "error_message": "reference-existence (REF001) fabricated 3 false positives in DocGuard AGENTS.md (after_implement, before_tasks, after_tasks flagged as removed) — symbols actually still present in .github/scripts/",
3302
+ "file": "cli/validators/reference-existence.mjs",
3303
+ "root_cause": "Asymmetry between two presence checks: the fast in-memory HEAD set was built with walkFiles() which SKIPS dot-directories (.github, .specify) by default (skipDotEntries), while the historical presence check used `git grep` which does NOT skip dot-dirs. So a symbol living only in a dot-dir read as absent-at-HEAD (walk missed it) but present-at-doc-rev (git grep found it) → false removed finding.",
3304
+ "fix": "Confirm every walk-miss with an authoritative `git grep HEAD` before flagging (symbolExistsAtRev at HEAD). Only symbols absent from BOTH the walk AND git grep proceed to the historical check. Reduced docguard-self FPs 3→0.",
3305
+ "tags": [
3306
+ "reference-existence",
3307
+ "walkFiles",
3308
+ "git-grep",
3309
+ "dot-dir",
3310
+ "false-positive",
3311
+ "dogfooding",
3312
+ "v0.31.0"
3313
+ ],
3314
+ "related_bugs": [],
3315
+ "occurrences": 1,
3316
+ "last_seen": "2026-07-07T00:00:00Z"
3297
3317
  }
3298
3318
  ]
3299
3319
  }
@@ -67,6 +67,8 @@
67
67
 
68
68
  ## Decision Log
69
69
 
70
+ - **2026-07-07 (v0.31.0 accuracy release — 6 research-backed detectors, empirical keep/cut)** — Implemented the verified deep-research roadmap as one batched release (PR #311, 9 commits, validator count 24→27). Built on TWO zero-dep foundations reused across features: `cli/shared-diff.mjs` (unified-diff parser + identifier-aware tokenizer + activity-labeled diff) and `cli/shared-ir.mjs` (TF-IDF + cosine). Features: (1) `impact` doc→doc BLAST RADIUS incl. agent files — the flagship, unclaimed by competitors; (2) `reference-existence` REF001 two-revision check; (3) `diff-suspicion` DSP001 diff-overlap; (4) `api-doc-smells` APS001/2 Bloated/Lazy; (5) IR soft-link recovery folded into traceability TRC004; (6) `verify --since` structured-diff staging. **METHOD THE USER MANDATED (durable preference): don't pick validator defaults abstractly — build each, run it READ-ONLY against their real active repos (temp/no-writes), measure signal-vs-noise, KEEP/CUT/tune empirically, remove if no value.** Corpus: hugocross_revamp, taxes_helper, stablecoin-strategy-lab, Agent Ops Platform, globalshares_revamp (~/Repo_claude), Whatsapp_Inbox (~/GitHub). All 6 KEEP; all default-ON, all soft (`confidence:'low'`, never break CI). Precision levers that mattered: DSP001 needed path/module-only refs (drop basename) + generic/HTTP/CSS token filter + per-doc cap (globalshares route-inventory doc flooded 45→capped). Validation log lived in scratchpad/validation-log.md.
71
+ - **2026-07-07 (Do-Not-Repeat: adding a default-OFF validator SPLITS DocGuard's self-count)** — `metrics-consistency` counts guard results where `status !== 'skipped'` (excludes a config-disabled validator), but `canonical-sync` counts the full validatorMap (includes it). So a validator added default-OFF makes the two self-counters disagree by 1 (26 vs 27), and DocGuard's own guard flags CSY003 + MET001 forever. Resolution chosen: default the validator ON (it was zero-FP + soft anyway) so both counters agree — cleaner than special-casing the count logic. If a future validator MUST be default-off, reconcile the two counters first. Also: `canonical-sync` CSY003 false-positives on a validators-TABLE row whose number collides with the word "validators" in its description (row `| 24 | Surface-Sync | …validators… |` read as "24 validators") — reword such descriptions (used "checks"). And `metrics-consistency` MET001 can't tell HISTORICAL counts ("v0.22 had 24 validators" in a changelog row) from current claims — reword historical rows to drop the bare number. `docguard fix --write` will wrongly rewrite those historical counts.
70
72
  - **2026-07-06 (Jules PR triage policy — established)** — How to handle the Google Jules bot's auto-PRs, applied to a batch of 5 (#299 #300 #305 #306 #307). Rule: judge each on merit against the persona's own evidence bar, adopt real fixes CLEANLY (re-apply in our own commit without Jules's auto-generated `.agent/skills` churn), close the rest with a specific technical reason so the bot/human learns the bar. Verdicts recorded: (a) **#307 hooks /dev/null fix = genuinely correct** (one-line getHooksDir guard + a reproducing test) → adopted cleanly in #308, closed as superseded. (b) **#300 "CRITICAL command injection" = FALSE positive** — every flagged `execSync` target is a static string literal (`which specify`, `git log --since=...`) with no user-input interpolation, so no injection surface; also on a stale base (setup.mjs isCliAvailable already removed in #296). Closed — but harvested the ONE real nugget (score.mjs `git log | wc -l` shell pipe → `execFileSync`, Windows-portable). (c) **#299 Bolt regex hoisting = no benchmark, negative-value** — `new RegExp()` runs once per file (O(files)), never inside the match loop, so the claimed "O(N·M) bottleneck" is fiction; hoisting to a shared stateful `g`-regex + manual `.lastIndex=0` is a footgun for zero measured gain. Closed per Bolt's own ">20% measured benchmark" rule. (d) **#305/#306 = +0/-0 status reports** ("babel up to date", "no flaky tests") — well-behaved (no spurious diff) but shouldn't be PRs; closed with thanks. Meta-lesson: the persona files (.jules/*.md) + AGENTS.md bot rules + the jules-triage.yml workflow set the bar; enforcing it consistently in close-comments is what actually trains the bot down from duplicate-PR floods. Two of five carried real value — Jules is worth keeping, not silencing.
71
73
  - **2026-07-05 (distribution flywheel — v0.30.0)** — Executed the full external-distribution push. Durable facts: (1) **Official MCP Registry** publish needs THREE things aligned: `server.json` at repo root (2025-12-11 camelCase schema, name `io.github.raccioly/docguard`), `mcpName` in the PUBLISHED npm package (registry validates the referenced package carries it — so a release must SHIP after adding mcpName; adding it to main isn't enough), and `mcp-publisher login github && mcp-publisher publish` run FROM THE REPO ROLE on the user's Mac (I can't run it — sandbox ≠ their terminal; their GitHub device-auth token is local). Registry is IMMUTABLE per version → "400 duplicate version" means it ALREADY published (success, not failure). Verify via `curl https://registry.modelcontextprotocol.io/v0/servers?search=docguard`. (2) **Glama** listing: submitted via their web form (browser); the quality Score has code-fixable items — `glama.json` (root, `{$schema, maintainers:[gh-user]}`) fixes "No glama.json"; read-only MCP tool `annotations` (readOnlyHint/openWorldHint:false) + `title` serve the tool-def-quality/safety scans; a `Dockerfile` running `docguard mcp` enables their build-based "Glama release" (the big score driver, but the Make-Release clicks are the user's). (3) **awesome-mcp-servers** requires the server live on Glama first (bot label missing-glama→has-glama on re-check after a `synchronize`/force-push); entry format = `[owner/repo](url) [![badge](glama .../badges/score.svg)](glama url) 📇 🏠 🍎 🪟 🐧 - desc \`npx cmd\`` (badge AFTER repo link per file convention, NOT after description as the bot template says). (4) **Homebrew tap**: separate public repo `raccioly/homebrew-tap` with `Formula/docguard.rb`; formula url = npm tarball, sha256 must be recomputed per version (`curl -sL <tgz>|shasum -a256`). Bump the tap formula each release. (5) **spec-kit catalog**: one OPEN submission issue at a time (latest version), close superseded ones — established pattern. (6) **PATH shadowing gotcha**: a stale `npm i -g docguard-cli` shadows Homebrew's copy; `docguard --version` shows the FIRST-in-PATH one → `npm i -g docguard-cli@latest` to reconcile.
72
74
 
@@ -68,7 +68,7 @@ returns `status` (PASS/WARN/FAIL, matches exit code 0/2/1), `findings[]`
68
68
  (Markdown tier map incl. `unclassified[]`), and `semanticClaims.count`
69
69
  (documented numbers not yet verified against code).
70
70
 
71
- - Every finding has a stable code (`STR001`, `ENV003`, `XRF002`, …) — all 24
71
+ - Every finding has a stable code (`STR001`, `ENV003`, `XRF002`, …) — all 27
72
72
  validators emit them. `docguard explain <CODE>` gives the contract and fix.
73
73
  - Mechanical fixes go through `docguard fix --write` (provenance-checked,
74
74
  fail-closed) — never hand-apply what the tool fixes deterministically.
@@ -7,6 +7,61 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.31.0] - 2026-07-07
11
+
12
+ Accuracy release — six research-backed detectors that make drift detection
13
+ change-aware and language-agnostic, built on one shared diff foundation. Every
14
+ new check was empirically tuned read-only against six real production repos
15
+ (TypeScript + Python) before shipping; all are deterministic (no LLM at
16
+ validation time) and soft (`confidence: low`, never break CI). Validator count
17
+ 24 → 27.
18
+
19
+ ### Added
20
+ - **`docguard impact` — doc→doc blast radius + agent-instruction files** (feat 1).
21
+ Agent-instruction files (AGENTS.md/CLAUDE.md/GEMINI.md) are now indexed, so a
22
+ changed code file they reference is surfaced. New: when a canonical/agent doc
23
+ changes, the docs that reference it — including agent-instruction files — are
24
+ flagged as a "blast radius" (`{ changedDocs, blastRadius }` in JSON). No
25
+ verified competitor propagates doc staleness across the doc graph. Proven on a
26
+ real repo: an ARCHITECTURE.md change flags the AGENTS.md/CLAUDE.md that cite it.
27
+ - **Diff-Suspicion validator (DSP001)** (feat 3) — change-driven. A doc that BOTH
28
+ references a code file changed since the ref AND shares domain tokens removed
29
+ in that diff is flagged for review. Deterministic diff-overlap rule
30
+ (arXiv 2010.01625, F1 74.7); path/module refs + domain-token filtering +
31
+ per-doc cap keep it quiet at PR granularity.
32
+ - **Reference-Existence validator (REF001)** (feat 2) — two-revision check. A
33
+ compound code identifier backticked in a doc that existed when the doc was last
34
+ updated but has ZERO matches at HEAD is flagged as outdated (arXiv 2212.01479).
35
+ In-memory HEAD identifier set + authoritative git-grep confirmation; zero false
36
+ positives across the corpus.
37
+ - **API-Doc-Smells validator (APS001 Bloated / APS002 Lazy)** (feat 4) —
38
+ deterministic length signals on signature-headed doc units (F1 0.90 / 0.95).
39
+ - **IR-based traceability soft-matching** (feat 5) — `cli/shared-ir.mjs`
40
+ (zero-dep TF-IDF + cosine). An untraced requirement now surfaces the
41
+ TF-IDF-closest test file ("X may already cover it — add @req there"),
42
+ reducing false "no coverage" for tests that lack the annotation.
43
+ - **`docguard verify --since <ref>` — change-aware staging** (feat 6). Attaches
44
+ an activity-labeled (ordered replace/delete/add) structured diff to the staged
45
+ agent-judgment tasks and flags which claims are about just-changed code —
46
+ CARL-CCI showed the structured-diff representation drives judgment accuracy
47
+ (arXiv 2512.19883).
48
+ - **`cli/shared-diff.mjs`** — zero-dependency unified-diff parser + identifier-
49
+ aware tokenizer + activity-labeled diff, the shared foundation for feats 1/2/3/6.
50
+
51
+ ### Fixed
52
+ - `hooks` crash from a `core.hooksPath` edge and other pre-ship bugs caught by
53
+ dogfooding DocGuard on itself (a `walkFiles`-vs-`git grep` dot-directory
54
+ asymmetry that fabricated reference-existence false positives; a `.map(basename)`
55
+ index-as-suffix crash in verify).
56
+ - **Self-counting consistency** — `canonical-sync` and `metrics-consistency` now
57
+ agree on the validator count (both 27); a default-off validator previously made
58
+ them disagree.
59
+
60
+ ### Changed
61
+ - New validators default ON except where noted; all are soft warnings.
62
+ - README, ARCHITECTURE.md, quickstart, CI-RECIPES, AGENTS.md updated to 27
63
+ validators (historical version-log counts preserved).
64
+
10
65
  ## [0.30.1] - 2026-07-06
11
66
 
12
67
  Patch release: a hooks crash fix that unblocks sandboxed CI/agent environments,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docguard-cli
3
- Version: 0.30.1
3
+ Version: 0.31.0
4
4
  Summary: The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. No Python dependencies (requires Node.js 18+).
5
5
  Project-URL: Homepage, https://github.com/raccioly/docguard
6
6
  Project-URL: Documentation, https://github.com/raccioly/docguard#readme
@@ -100,7 +100,7 @@ graph TD
100
100
  Commands --> setup["setup wizard"]
101
101
  Commands --> other["diff · init · fix · trace · impact · sync<br/>explain · memory · upgrade · agents · hooks · badge · ci · watch"]
102
102
 
103
- guard --> Validators["Validators (24)"]
103
+ guard --> Validators["Validators (27)"]
104
104
  generate --> Scanners["Scanners (4)<br/>routes · schemas · doc-tools · speckit"]
105
105
  score --> Scoring["Weighted Scoring<br/>8 categories"]
106
106
  diagnose --> Validators
@@ -278,7 +278,7 @@ DocGuard ships **18 commands** (the "Daily 5" + 13 situational tools, including
278
278
  | Command | What It Does |
279
279
  |:--------|:-------------|
280
280
  | `init` | Bootstrap a project (`--wizard` for interactive · `--with <name>` for scaffolders) |
281
- | `guard` | Validate against canonical docs — 24 validators |
281
+ | `guard` | Validate against canonical docs — 27 validators |
282
282
  | `diff` | Show gaps between docs and code (`--since <ref>` for impact mode) |
283
283
  | `sync` | Refresh code-truth doc sections — keeps memory always up to date |
284
284
  | `score` | CDD maturity score (0-100; `--diff` for delta between refs) |
@@ -384,7 +384,7 @@ $ npx docguard-cli generate
384
384
 
385
385
  ## 🔍 Validators
386
386
 
387
- DocGuard runs **24 automated validators** on every `guard` check. Every one is **language-aware** as of v0.16 — patterns for Python (`test_*.py`), Rust (`tests/*.rs`), Go (`*_test.go`), Java (`*Test.java`), Ruby (`*_spec.rb`), PHP, and JS/TS all match.
387
+ DocGuard runs **27 automated validators** on every `guard` check. Every one is **language-aware** as of v0.16 — patterns for Python (`test_*.py`), Rust (`tests/*.rs`), Go (`*_test.go`), Java (`*Test.java`), Ruby (`*_spec.rb`), PHP, and JS/TS all match.
388
388
 
389
389
  | # | Validator | What It Checks | Default |
390
390
  |:--|:----------|:--------------|:--------|
@@ -411,7 +411,10 @@ DocGuard runs **24 automated validators** on every `guard` check. Every one is *
411
411
  | 21 | **Generated-Staleness** | `source=code` sections match scanner output; `status: draft` doc age | ✅ On |
412
412
  | 22 | **Canonical-Sync** | DocGuard's own README count claims match code-truth (DocGuard repo only — N/A elsewhere) | ✅ On |
413
413
  | 23 | **Metrics-Consistency** | Hardcoded numbers match actual counts | ✅ On |
414
- | 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands, validators, etc.) match code-truth (opt-in via `surfaceSync.surfaces`; N/A unless configured) | ✅ On |
414
+ | 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands, checks, etc.) match code-truth (opt-in via `surfaceSync.surfaces`; N/A unless configured) | ✅ On |
415
+ | 25 | **Diff-Suspicion** | Change-driven: a doc/agent-instruction file that references code changed since the ref AND shares removed domain symbols is flagged for review (arXiv 2010.01625, F1 74.7) | ✅ On |
416
+ | 26 | **Reference-Existence** | Two-revision check: a backticked code symbol present when the doc was last updated but gone at HEAD is flagged as outdated (arXiv 2212.01479) | ✅ On |
417
+ | 27 | **API-Doc-Smells** | Bloated (≥300 words) / Lazy (≤6 prose words) API documentation units, keyed on signature-headed sections (F1 0.90/0.95) | ✅ On |
415
418
 
416
419
  **Per-validator controls** (in `.docguard.json`):
417
420
  ```json
@@ -480,7 +483,7 @@ DocGuard provides AI agent slash commands for integrated workflows. Installed au
480
483
  | Command | What It Does |
481
484
  |:--------|:-------------|
482
485
  | `/docguard.init` | Initialize Canonical-Driven Development in a new or existing project |
483
- | `/docguard.guard` | Run quality validation — check all 24 validators |
486
+ | `/docguard.guard` | Run quality validation — check all 27 validators |
484
487
  | `/docguard.review` | Analyze doc quality and suggest improvements |
485
488
  | `/docguard.fix` | Generate targeted fix prompts for specific issues |
486
489
  | `/docguard.update` | Update canonical docs after code changes — detect drift and sync documentation |
@@ -639,7 +642,7 @@ Two ready-to-use templates ship with the Spec Kit extension and as standalone fi
639
642
  Recent highlights across the v0.16 → v0.19 line:
640
643
 
641
644
  - **`docguard explain <validator>`** — `docguard explain freshness` prints purpose, rules, common
642
- failures, and fix recipes for any of the 24 validators. No need to dig into source.
645
+ failures, and fix recipes for any of the 27 validators. No need to dig into source.
643
646
  - **`docguard memory --diff`** — surface what changed in your canonical docs between two refs
644
647
  (`HEAD~10..HEAD` by default). Great for code review and changelog drafting.
645
648
  - **`docguard score --diff`** — see exactly which validators moved the score up or down between
@@ -76,7 +76,7 @@ graph TD
76
76
  Commands --> setup["setup wizard"]
77
77
  Commands --> other["diff · init · fix · trace · impact · sync<br/>explain · memory · upgrade · agents · hooks · badge · ci · watch"]
78
78
 
79
- guard --> Validators["Validators (24)"]
79
+ guard --> Validators["Validators (27)"]
80
80
  generate --> Scanners["Scanners (4)<br/>routes · schemas · doc-tools · speckit"]
81
81
  score --> Scoring["Weighted Scoring<br/>8 categories"]
82
82
  diagnose --> Validators
@@ -254,7 +254,7 @@ DocGuard ships **18 commands** (the "Daily 5" + 13 situational tools, including
254
254
  | Command | What It Does |
255
255
  |:--------|:-------------|
256
256
  | `init` | Bootstrap a project (`--wizard` for interactive · `--with <name>` for scaffolders) |
257
- | `guard` | Validate against canonical docs — 24 validators |
257
+ | `guard` | Validate against canonical docs — 27 validators |
258
258
  | `diff` | Show gaps between docs and code (`--since <ref>` for impact mode) |
259
259
  | `sync` | Refresh code-truth doc sections — keeps memory always up to date |
260
260
  | `score` | CDD maturity score (0-100; `--diff` for delta between refs) |
@@ -360,7 +360,7 @@ $ npx docguard-cli generate
360
360
 
361
361
  ## 🔍 Validators
362
362
 
363
- DocGuard runs **24 automated validators** on every `guard` check. Every one is **language-aware** as of v0.16 — patterns for Python (`test_*.py`), Rust (`tests/*.rs`), Go (`*_test.go`), Java (`*Test.java`), Ruby (`*_spec.rb`), PHP, and JS/TS all match.
363
+ DocGuard runs **27 automated validators** on every `guard` check. Every one is **language-aware** as of v0.16 — patterns for Python (`test_*.py`), Rust (`tests/*.rs`), Go (`*_test.go`), Java (`*Test.java`), Ruby (`*_spec.rb`), PHP, and JS/TS all match.
364
364
 
365
365
  | # | Validator | What It Checks | Default |
366
366
  |:--|:----------|:--------------|:--------|
@@ -387,7 +387,10 @@ DocGuard runs **24 automated validators** on every `guard` check. Every one is *
387
387
  | 21 | **Generated-Staleness** | `source=code` sections match scanner output; `status: draft` doc age | ✅ On |
388
388
  | 22 | **Canonical-Sync** | DocGuard's own README count claims match code-truth (DocGuard repo only — N/A elsewhere) | ✅ On |
389
389
  | 23 | **Metrics-Consistency** | Hardcoded numbers match actual counts | ✅ On |
390
- | 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands, validators, etc.) match code-truth (opt-in via `surfaceSync.surfaces`; N/A unless configured) | ✅ On |
390
+ | 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands, checks, etc.) match code-truth (opt-in via `surfaceSync.surfaces`; N/A unless configured) | ✅ On |
391
+ | 25 | **Diff-Suspicion** | Change-driven: a doc/agent-instruction file that references code changed since the ref AND shares removed domain symbols is flagged for review (arXiv 2010.01625, F1 74.7) | ✅ On |
392
+ | 26 | **Reference-Existence** | Two-revision check: a backticked code symbol present when the doc was last updated but gone at HEAD is flagged as outdated (arXiv 2212.01479) | ✅ On |
393
+ | 27 | **API-Doc-Smells** | Bloated (≥300 words) / Lazy (≤6 prose words) API documentation units, keyed on signature-headed sections (F1 0.90/0.95) | ✅ On |
391
394
 
392
395
  **Per-validator controls** (in `.docguard.json`):
393
396
  ```json
@@ -456,7 +459,7 @@ DocGuard provides AI agent slash commands for integrated workflows. Installed au
456
459
  | Command | What It Does |
457
460
  |:--------|:-------------|
458
461
  | `/docguard.init` | Initialize Canonical-Driven Development in a new or existing project |
459
- | `/docguard.guard` | Run quality validation — check all 24 validators |
462
+ | `/docguard.guard` | Run quality validation — check all 27 validators |
460
463
  | `/docguard.review` | Analyze doc quality and suggest improvements |
461
464
  | `/docguard.fix` | Generate targeted fix prompts for specific issues |
462
465
  | `/docguard.update` | Update canonical docs after code changes — detect drift and sync documentation |
@@ -615,7 +618,7 @@ Two ready-to-use templates ship with the Spec Kit extension and as standalone fi
615
618
  Recent highlights across the v0.16 → v0.19 line:
616
619
 
617
620
  - **`docguard explain <validator>`** — `docguard explain freshness` prints purpose, rules, common
618
- failures, and fix recipes for any of the 24 validators. No need to dig into source.
621
+ failures, and fix recipes for any of the 27 validators. No need to dig into source.
619
622
  - **`docguard memory --diff`** — surface what changed in your canonical docs between two refs
620
623
  (`HEAD~10..HEAD` by default). Great for code review and changelog drafting.
621
624
  - **`docguard score --diff`** — see exactly which validators moved the score up or down between
@@ -178,6 +178,37 @@ const EXPLAINERS = {
178
178
  example: '`cli/commands/demo.mjs` exists and `| `demo` | Zero-install preview |` appears in README.md\'s commands table',
179
179
  standard: 'CDD principle: documented surfaces match implemented surfaces',
180
180
  },
181
+ diffSuspicion: {
182
+ title: 'Diff-Suspicion — docs describing code that just changed (DSP001)',
183
+ what: 'Change-driven. For each code file changed since the ref (`config.changedSinceRef`, else HEAD~1), flags a canonical doc or agent-instruction file that BOTH references the file (path/`module`) AND shares domain tokens that were removed/replaced in the diff. Deterministic diff-overlap rule (arXiv 2010.01625, F1 74.7); confidence:low.',
184
+ why: 'A doc that talks about a symbol the code just deleted is the highest-signal, lowest-cost drift class — and it is exactly what whole-repo scans miss but a diff makes obvious.',
185
+ triggers: [
186
+ ['describes X, which just had … removed/changed', 'Re-read the doc against the current file; the removed symbols may now be wrong. Suppress the pairing if it is a false positive.'],
187
+ ],
188
+ example: 'AUTH.md references `src/auth.ts` and `validateToken` was renamed away in the last commit',
189
+ standard: 'Just-in-time comment-code inconsistency detection (AAAI 2021)',
190
+ },
191
+ referenceExistence: {
192
+ title: 'Reference-Existence — doc names a code symbol that no longer exists (REF001)',
193
+ what: 'Two-revision check. A compound code identifier backticked in a doc that existed in the source when the doc was last updated but has ZERO whole-word matches at HEAD is flagged as outdated. Deterministic (arXiv 2212.01479); confidence:low.',
194
+ why: 'References go stale silently for years; the two-revision gate distinguishes "renamed away" from "never existed", keeping false positives near zero.',
195
+ triggers: [
196
+ ['references `X`, which existed … but has ZERO matches at HEAD', 'Update or remove the reference. Suppress with `<!-- docguard:ignore REF001 -->` if it is a still-relevant user-facing name.'],
197
+ ],
198
+ example: 'API-REFERENCE.md backticks `getUserById` which was deleted three commits ago',
199
+ standard: 'Outdated code-element reference detection (EMSE 2022)',
200
+ },
201
+ apiDocSmells: {
202
+ title: 'API-Doc-Smells — Bloated / Lazy API documentation (APS001/APS002)',
203
+ what: 'Length signals on doc units whose heading is a code signature (HTTP endpoint / function / backticked symbol). Lazy = ≤6 prose words (documented in name only); Bloated = ≥300 words for one unit. Deterministic (F1 0.90/0.95); confidence:low. OFF by default — enable with `validators.apiDocSmells: true`.',
204
+ why: 'An endpoint documented in name only, or buried in 400 words, both fail the reader — and both are detectable without understanding the prose.',
205
+ triggers: [
206
+ ['documented in name only', 'Describe what it does, its params, return, and errors — not just the signature.'],
207
+ ['is N words for one unit — Bloated', 'Trim to the essential contract; move examples/edge-cases elsewhere.'],
208
+ ],
209
+ example: '`#### GET /api/health` with an empty body → Lazy',
210
+ standard: 'API documentation smell taxonomy',
211
+ },
181
212
  crossReference: {
182
213
  title: 'Cross-Reference — internal markdown links resolve',
183
214
  what: 'Scans canonical docs for `[text](./OTHER.md#anchor)` and `#anchor` links. Verifies the target file exists and the anchor matches a heading.',
@@ -351,6 +382,9 @@ const DISPLAY_NAMES = {
351
382
  surfaceSync: 'Surface-Sync',
352
383
  canonicalSync: 'Canonical-Sync',
353
384
  metricsConsistency: 'Metrics-Consistency',
385
+ diffSuspicion: 'Diff-Suspicion',
386
+ referenceExistence: 'Reference-Existence',
387
+ apiDocSmells: 'API-Doc-Smells',
354
388
  };
355
389
 
356
390
  /** Collapse a key / display name to a comparable form: lowercase, alnum only. */
@@ -147,6 +147,10 @@ import { validateSchemaSync } from '../validators/schema-sync.mjs';
147
147
  import { validateSpecKitIntegration } from '../validators/spec-kit.mjs';
148
148
  import { validateCanonicalSync } from '../validators/canonical-sync.mjs';
149
149
  import { validateSurfaceSync } from '../validators/surface-sync.mjs';
150
+ // v0.31.0 change-driven + smell detectors
151
+ import { validateDiffSuspicion } from '../validators/diff-suspicion.mjs';
152
+ import { validateReferenceExistence } from '../validators/reference-existence.mjs';
153
+ import { validateApiDocSmells } from '../validators/api-doc-smells.mjs';
150
154
 
151
155
  /**
152
156
  * Internal guard — returns structured data, no console output, no process.exit.
@@ -313,6 +317,10 @@ export function runGuardInternal(projectDir, config) {
313
317
  { key: 'crossReference', name: 'Cross-Reference', fn: () => validateCrossReferences(projectDir, config) },
314
318
  { key: 'generatedStaleness', name: 'Generated-Staleness', fn: () => validateGeneratedStaleness(projectDir, config) },
315
319
  { key: 'surfaceSync', name: 'Surface-Sync', fn: () => validateSurfaceSync(projectDir, config) },
320
+ // v0.31.0 — change-driven + smell detectors (all confidence:low / soft).
321
+ { key: 'diffSuspicion', name: 'Diff-Suspicion', fn: () => validateDiffSuspicion(projectDir, config) },
322
+ { key: 'referenceExistence', name: 'Reference-Existence', fn: () => validateReferenceExistence(projectDir, config) },
323
+ { key: 'apiDocSmells', name: 'API-Doc-Smells', fn: () => validateApiDocSmells(projectDir, config) },
316
324
  // Metrics-Consistency runs post-loop (needs guard results)
317
325
  ];
318
326
 
@@ -15,10 +15,21 @@
15
15
  * JSON mode emits a structured `{ changedFiles, affectedDocs }` payload
16
16
  * for CI integrations and PR-comment bots.
17
17
  *
18
+ * v0.31.0 — blast radius (feat 1):
19
+ * - Agent-instruction files (AGENTS.md/CLAUDE.md/GEMINI.md) are indexed
20
+ * alongside canonical docs, so a changed code file they reference is
21
+ * surfaced too (agent instructions drift when the code they describe moves).
22
+ * - Doc→doc graph: when a DOC changes, the docs that reference it — INCLUDING
23
+ * agent-instruction files — are flagged as suspect ("blast radius"). This is
24
+ * the unclaimed slice: a change in ARCHITECTURE.md marks the AGENTS.md that
25
+ * points at it for review.
26
+ *
18
27
  * @req SC-S11-001 — impact reports per-file → doc mappings
19
28
  * @req SC-S11-002 — files with no doc references are listed as "no impact"
20
29
  * @req SC-S11-003 — --format json emits parseable structured output
21
30
  * @req SC-S11-004 — non-code files (.md, .json, etc.) are skipped from impact analysis
31
+ * @req SC-S11-007 — agent-instruction files participate in impact analysis
32
+ * @req SC-S11-008 — a changed doc flags the docs that reference it (blast radius)
22
33
  */
23
34
 
24
35
  import { existsSync, readFileSync, readdirSync } from 'node:fs';
@@ -33,10 +44,28 @@ import { changedFilesSince, isGitRepo } from '../shared-git.mjs';
33
44
  */
34
45
  const CODE_EXTENSIONS = /\.(ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|rb|php|cs|swift)$/;
35
46
 
47
+ // Root agent-instruction files — documentation that names code and other docs.
48
+ const AGENT_FILES = ['AGENTS.md', 'CLAUDE.md', 'GEMINI.md'];
49
+
36
50
  function escapeRegex(s) {
37
51
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
38
52
  }
39
53
 
54
+ /**
55
+ * Doc→doc references: which indexed docs reference `changedDocPath` (by its
56
+ * basename — the form used in prose "see ARCHITECTURE.md" and markdown links
57
+ * `](ARCHITECTURE.md)`). Skips self. This is the blast-radius edge set.
58
+ */
59
+ function docsReferencing(changedDocPath, index) {
60
+ const cbase = basename(changedDocPath);
61
+ const dependents = [];
62
+ for (const [docName, lines] of index) {
63
+ if (docName === cbase || docName === changedDocPath) continue; // not self
64
+ if (lines.some(l => l.includes(cbase))) dependents.push(docName);
65
+ }
66
+ return dependents;
67
+ }
68
+
40
69
  /**
41
70
  * Find canonical doc references for a single file. Reuses the same three
42
71
  * match strategies as trace --reverse for consistency: direct path,
@@ -81,9 +110,11 @@ export function runImpact(projectDir, _config, flags) {
81
110
  // impact" in the same sense; they ARE the docs (or config).
82
111
  const codeChanged = changed.filter(f => CODE_EXTENSIONS.test(f));
83
112
 
84
- // Index canonical docs once
113
+ // Index canonical docs once, PLUS root agent-instruction files (they name
114
+ // code and other docs, so they belong in both code→doc and doc→doc analysis).
85
115
  const docsDir = resolve(projectDir, 'docs-canonical');
86
116
  const docsIndex = new Map(); // docName → lines[]
117
+ const agentDocs = new Set(); // which indexed docs are agent-instruction files
87
118
  if (existsSync(docsDir)) {
88
119
  try {
89
120
  for (const f of readdirSync(docsDir)) {
@@ -95,6 +126,11 @@ export function runImpact(projectDir, _config, flags) {
95
126
  }
96
127
  } catch { /* skip if dir unreadable */ }
97
128
  }
129
+ for (const a of AGENT_FILES) {
130
+ const p = resolve(projectDir, a);
131
+ if (!existsSync(p)) continue;
132
+ try { docsIndex.set(a, readFileSync(p, 'utf-8').split('\n')); agentDocs.add(a); } catch { /* skip */ }
133
+ }
98
134
 
99
135
  // Compute per-file references
100
136
  const fileImpact = []; // { file, references: [{doc, line, kind}] }
@@ -113,15 +149,38 @@ export function runImpact(projectDir, _config, flags) {
113
149
  const affectedDocs = Array.from(docMap.entries()).map(([doc, files]) => ({
114
150
  doc,
115
151
  files: Array.from(files),
152
+ isAgentFile: agentDocs.has(doc),
116
153
  }));
117
154
 
155
+ // ── Doc→doc blast radius: a changed DOC flags the docs that reference it ──
156
+ // (including agent-instruction files that point at it). Only meaningful edges
157
+ // are emitted (changed doc with ≥1 dependent).
158
+ //
159
+ // A source must be an INDEXED canonical/agent doc — not any changed `.md`.
160
+ // Otherwise a CHANGELOG.md / README.md / .wolf/*.md change flags every doc
161
+ // that merely mentions it in passing (dogfooding false positives).
162
+ const indexBasenames = new Set(docsIndex.keys());
163
+ const changedDocs = changed.filter(f => f.endsWith('.md') && indexBasenames.has(basename(f)));
164
+ const blastRadius = [];
165
+ for (const cd of changedDocs) {
166
+ const dependents = docsReferencing(cd, docsIndex);
167
+ if (dependents.length > 0) {
168
+ blastRadius.push({
169
+ changedDoc: cd,
170
+ dependents: dependents.map(d => ({ doc: d, isAgentFile: agentDocs.has(d) })),
171
+ });
172
+ }
173
+ }
174
+
118
175
  // ── JSON output ──
119
176
  if (isJson) {
120
177
  console.log(JSON.stringify({
121
178
  since,
122
179
  changedFiles: codeChanged,
123
- ignoredFiles: changed.filter(f => !CODE_EXTENSIONS.test(f)),
180
+ changedDocs,
181
+ ignoredFiles: changed.filter(f => !CODE_EXTENSIONS.test(f) && !f.endsWith('.md')),
124
182
  affectedDocs,
183
+ blastRadius,
125
184
  timestamp: new Date().toISOString(),
126
185
  }, null, 2));
127
186
  return;
@@ -134,8 +193,28 @@ export function runImpact(projectDir, _config, flags) {
134
193
  console.log(` ${c.green}✅ No file changes since ${since}.${c.reset}`);
135
194
  return;
136
195
  }
196
+
197
+ // Doc→doc blast radius — shown whether or not code changed (a doc-only change
198
+ // can still ripple to the docs / agent files that reference it).
199
+ const printBlast = () => {
200
+ if (blastRadius.length === 0) return;
201
+ console.log(`\n ${c.bold}🌐 Doc blast radius${c.reset} ${c.dim}(${changedDocs.length} doc(s) changed)${c.reset}`);
202
+ for (const { changedDoc, dependents } of blastRadius) {
203
+ console.log(` ${c.cyan}${changedDoc}${c.reset} ${c.dim}changed → review ${dependents.length} dependent doc(s):${c.reset}`);
204
+ for (const dep of dependents.slice(0, 8)) {
205
+ const tag = dep.isAgentFile ? ` ${c.yellow}[agent-instruction]${c.reset}` : '';
206
+ console.log(` ${c.dim}↳${c.reset} ${dep.doc}${tag}`);
207
+ }
208
+ if (dependents.length > 8) console.log(` ${c.dim}... ${dependents.length - 8} more${c.reset}`);
209
+ }
210
+ };
211
+
137
212
  if (codeChanged.length === 0) {
138
- console.log(` ${c.dim}No code files changed (${changed.length} non-code files: ${changed.slice(0, 3).join(', ')}${changed.length > 3 ? '…' : ''}).${c.reset}`);
213
+ console.log(` ${c.dim}No code files changed (${changedDocs.length} doc(s) + ${changed.length - changedDocs.length} other non-code file(s)).${c.reset}`);
214
+ if (blastRadius.length === 0 && changedDocs.length > 0) {
215
+ console.log(` ${c.green}✅ No other docs reference the changed doc(s).${c.reset}`);
216
+ }
217
+ printBlast();
139
218
  return;
140
219
  }
141
220
 
@@ -146,16 +225,16 @@ export function runImpact(projectDir, _config, flags) {
146
225
  console.log(` ${c.dim}This often means the changed code is undocumented. Consider:${c.reset}`);
147
226
  console.log(` ${c.dim} - Running ${c.cyan}docguard generate --plan${c.dim} to add doc skeletons${c.reset}`);
148
227
  console.log(` ${c.dim} - Reviewing whether the change belongs in an existing doc${c.reset}`);
149
- return;
150
- }
151
-
152
- console.log(` ${c.green}${affectedDocs.length}${c.reset} canonical doc(s) reference the changed files:\n`);
153
- for (const { doc, files } of affectedDocs) {
154
- console.log(` ${c.cyan}${doc}${c.reset} ${c.dim}(${files.length} file${files.length > 1 ? 's' : ''})${c.reset}`);
155
- for (const f of files.slice(0, 5)) {
156
- console.log(` ${c.dim}via${c.reset} ${f}`);
228
+ } else {
229
+ console.log(` ${c.green}${affectedDocs.length}${c.reset} canonical doc(s) reference the changed files:\n`);
230
+ for (const { doc, files, isAgentFile } of affectedDocs) {
231
+ const tag = isAgentFile ? ` ${c.yellow}[agent-instruction]${c.reset}` : '';
232
+ console.log(` ${c.cyan}${doc}${c.reset}${tag} ${c.dim}(${files.length} file${files.length > 1 ? 's' : ''})${c.reset}`);
233
+ for (const f of files.slice(0, 5)) {
234
+ console.log(` ${c.dim}via${c.reset} ${f}`);
235
+ }
236
+ if (files.length > 5) console.log(` ${c.dim}... ${files.length - 5} more${c.reset}`);
157
237
  }
158
- if (files.length > 5) console.log(` ${c.dim}... ${files.length - 5} more${c.reset}`);
159
238
  }
160
239
 
161
240
  // List code files with NO doc references — these may need new docs
@@ -166,4 +245,6 @@ export function runImpact(projectDir, _config, flags) {
166
245
  if (orphaned.length > 5) console.log(` ${c.dim}... ${orphaned.length - 5} more${c.reset}`);
167
246
  console.log(` ${c.dim}These may be undocumented — review whether they belong in an existing doc.${c.reset}`);
168
247
  }
248
+
249
+ printBlast();
169
250
  }