docguard-cli 0.15.2__tar.gz → 0.16.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 (303) hide show
  1. {docguard_cli-0.15.2/extensions/spec-kit-docguard → docguard_cli-0.16.0/.agent}/skills/docguard-fix/SKILL.md +2 -2
  2. {docguard_cli-0.15.2/extensions/spec-kit-docguard → docguard_cli-0.16.0/.agent}/skills/docguard-guard/SKILL.md +2 -2
  3. {docguard_cli-0.15.2/extensions/spec-kit-docguard → docguard_cli-0.16.0/.agent}/skills/docguard-review/SKILL.md +2 -2
  4. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/docguard-score/SKILL.md +2 -2
  5. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/docguard-sync/SKILL.md +1 -1
  6. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/CHANGELOG.md +101 -39
  7. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/PKG-INFO +1 -1
  8. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/diff.mjs +28 -2
  9. docguard_cli-0.16.0/cli/commands/explain.mjs +286 -0
  10. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/hooks.mjs +82 -13
  11. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/init.mjs +5 -1
  12. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/score.mjs +9 -2
  13. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/trace.mjs +72 -25
  14. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/upgrade.mjs +1 -1
  15. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/docguard.mjs +19 -2
  16. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/memory-plan.mjs +1 -1
  17. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/environment.mjs +12 -0
  18. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/freshness.mjs +1 -1
  19. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/structure.mjs +26 -4
  20. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/extension.yml +1 -1
  21. {docguard_cli-0.15.2/.agent → docguard_cli-0.16.0/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
  22. {docguard_cli-0.15.2/.agent → docguard_cli-0.16.0/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +2 -2
  23. {docguard_cli-0.15.2/.agent → docguard_cli-0.16.0/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
  24. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/skills/docguard-score/SKILL.md +2 -2
  25. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +1 -1
  26. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/package.json +1 -1
  27. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/pyproject.toml +1 -1
  28. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/003-v011-false-positives/plan.md +1 -1
  29. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/003-v011-false-positives/spec.md +4 -4
  30. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/003-v011-false-positives/tasks.md +1 -1
  31. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/hooks.test.mjs +42 -5
  32. docguard_cli-0.16.0/tests/section-na-markers.test.mjs +91 -0
  33. docguard_cli-0.16.0/tests/trace-multilang.test.mjs +139 -0
  34. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.analyze.md +0 -0
  35. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.checklist.md +0 -0
  36. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.clarify.md +0 -0
  37. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.constitution.md +0 -0
  38. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.implement.md +0 -0
  39. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.plan.md +0 -0
  40. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.specify.md +0 -0
  41. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.tasks.md +0 -0
  42. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/commands/speckit.taskstoissues.md +0 -0
  43. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-analyze/SKILL.md +0 -0
  44. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-checklist/SKILL.md +0 -0
  45. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-clarify/SKILL.md +0 -0
  46. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-constitution/SKILL.md +0 -0
  47. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-implement/SKILL.md +0 -0
  48. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-plan/SKILL.md +0 -0
  49. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-specify/SKILL.md +0 -0
  50. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-tasks/SKILL.md +0 -0
  51. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
  52. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.docguard.json +0 -0
  53. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.docguardignore +0 -0
  54. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  55. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  56. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/dependabot.yml +0 -0
  57. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/scripts/patch-catalog.py +0 -0
  58. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/workflows/ci.yml +0 -0
  59. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/workflows/release.yml +0 -0
  60. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/workflows/supply-chain.yml +0 -0
  61. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.github/workflows/sync-speckit-catalog.yml +0 -0
  62. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.gitignore +0 -0
  63. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.jules/bolt.md +0 -0
  64. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.jules/palette.md +0 -0
  65. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.jules/sentinel.md +0 -0
  66. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.npmignore +0 -0
  67. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.npmrc +0 -0
  68. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
  69. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
  70. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/extensions/.cache/catalog-metadata.json +0 -0
  71. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/extensions/.cache/catalog.json +0 -0
  72. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/init-options.json +0 -0
  73. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/memory/constitution.md +0 -0
  74. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  75. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/scripts/bash/common.sh +0 -0
  76. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
  77. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/scripts/bash/setup-plan.sh +0 -0
  78. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
  79. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/templates/agent-file-template.md +0 -0
  80. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/templates/checklist-template.md +0 -0
  81. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/templates/constitution-template.md +0 -0
  82. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/templates/plan-template.md +0 -0
  83. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/templates/spec-template.md +0 -0
  84. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/.specify/templates/tasks-template.md +0 -0
  85. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/AGENTS.md +0 -0
  86. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/CODE_OF_CONDUCT.md +0 -0
  87. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/COMPARISONS.md +0 -0
  88. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/CONTRIBUTING.md +0 -0
  89. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/DRIFT-LOG.md +0 -0
  90. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/LICENSE +0 -0
  91. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/PHILOSOPHY.md +0 -0
  92. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/README.md +0 -0
  93. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/ROADMAP.md +0 -0
  94. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/SECURITY.md +0 -0
  95. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/STANDARD.md +0 -0
  96. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/SUPPLY-CHAIN-AUDIT.md +0 -0
  97. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/SUPPORT.md +0 -0
  98. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/action.yml +0 -0
  99. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/agents.mjs +0 -0
  100. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/badge.mjs +0 -0
  101. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/ci.mjs +0 -0
  102. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/diagnose.mjs +0 -0
  103. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/fix.mjs +0 -0
  104. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/generate.mjs +0 -0
  105. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/guard.mjs +0 -0
  106. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/impact.mjs +0 -0
  107. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/llms.mjs +0 -0
  108. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/publish.mjs +0 -0
  109. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/setup.mjs +0 -0
  110. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/sync.mjs +0 -0
  111. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/commands/watch.mjs +0 -0
  112. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/ensure-skills.mjs +0 -0
  113. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/api-doc.mjs +0 -0
  114. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/cdk.mjs +0 -0
  115. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/doc-tools.mjs +0 -0
  116. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/frontend.mjs +0 -0
  117. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/iac.mjs +0 -0
  118. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/integrations.mjs +0 -0
  119. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/project-type.mjs +0 -0
  120. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/routes.mjs +0 -0
  121. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/schemas.mjs +0 -0
  122. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/scanners/speckit.mjs +0 -0
  123. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/shared-git.mjs +0 -0
  124. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/shared-ignore.mjs +0 -0
  125. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/shared-source.mjs +0 -0
  126. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/shared.mjs +0 -0
  127. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/api-surface.mjs +0 -0
  128. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/architecture.mjs +0 -0
  129. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/changelog.mjs +0 -0
  130. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/cross-reference.mjs +0 -0
  131. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/doc-quality.mjs +0 -0
  132. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/docs-coverage.mjs +0 -0
  133. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/docs-diff.mjs +0 -0
  134. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/docs-sync.mjs +0 -0
  135. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/drift.mjs +0 -0
  136. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/generated-staleness.mjs +0 -0
  137. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/metadata-sync.mjs +0 -0
  138. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/metrics-consistency.mjs +0 -0
  139. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/schema-sync.mjs +0 -0
  140. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/security.mjs +0 -0
  141. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/test-spec.mjs +0 -0
  142. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/todo-tracking.mjs +0 -0
  143. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/validators/traceability.mjs +0 -0
  144. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/writers/api-reference.mjs +0 -0
  145. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/writers/fix-memory.mjs +0 -0
  146. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/writers/mechanical.mjs +0 -0
  147. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/cli/writers/sections.mjs +0 -0
  148. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/commands/docguard.fix.md +0 -0
  149. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/commands/docguard.guard.md +0 -0
  150. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/commands/docguard.review.md +0 -0
  151. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/commands/docguard.score.md +0 -0
  152. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/configs/fastify.json +0 -0
  153. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/configs/generic.json +0 -0
  154. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/configs/nextjs.json +0 -0
  155. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/configs/python.json +0 -0
  156. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docguard_cli/__init__.py +0 -0
  157. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docguard_cli/wrapper.py +0 -0
  158. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/ai-integration.md +0 -0
  159. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/commands.md +0 -0
  160. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/configuration.md +0 -0
  161. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/doc-sections.md +0 -0
  162. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/faq.md +0 -0
  163. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/installation.md +0 -0
  164. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/profiles.md +0 -0
  165. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs/quickstart.md +0 -0
  166. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs-canonical/ARCHITECTURE.md +0 -0
  167. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs-canonical/CI-RECIPES.md +0 -0
  168. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs-canonical/DATA-MODEL.md +0 -0
  169. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs-canonical/ENVIRONMENT.md +0 -0
  170. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs-canonical/SECURITY.md +0 -0
  171. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/docs-canonical/TEST-SPEC.md +0 -0
  172. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/01-express-api/README.md +0 -0
  173. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/01-express-api/package.json +0 -0
  174. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/01-express-api/server.js +0 -0
  175. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/02-python-flask/README.md +0 -0
  176. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/02-python-flask/app.py +0 -0
  177. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
  178. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/02-python-flask/requirements.txt +0 -0
  179. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
  180. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/03-spec-kit-project/README.md +0 -0
  181. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
  182. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
  183. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/03-spec-kit-project/package.json +0 -0
  184. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/03-spec-kit-project/src/index.js +0 -0
  185. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
  186. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/examples/README.md +0 -0
  187. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/LICENSE +0 -0
  188. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/README.md +0 -0
  189. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
  190. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/fix.md +0 -0
  191. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/generate.md +0 -0
  192. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/guard.md +0 -0
  193. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/init.md +0 -0
  194. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/score.md +0 -0
  195. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/sync.md +0 -0
  196. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/commands/trace.md +0 -0
  197. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
  198. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
  199. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
  200. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
  201. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
  202. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
  203. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +0 -0
  204. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/pr_description.md +0 -0
  205. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/schemas/docguard-config.schema.json +0 -0
  206. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/001-fix-ignore-validators/plan.md +0 -0
  207. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/001-fix-ignore-validators/spec.md +0 -0
  208. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/001-fix-ignore-validators/tasks.md +0 -0
  209. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/002-fix-test-discovery/plan.md +0 -0
  210. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/002-fix-test-discovery/spec.md +0 -0
  211. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/specs/002-fix-test-discovery/tasks.md +0 -0
  212. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/ADR.md.template +0 -0
  213. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/AGENTS.md.template +0 -0
  214. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/ARCHITECTURE.md.template +0 -0
  215. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/CHANGELOG.md.template +0 -0
  216. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/CURRENT-STATE.md.template +0 -0
  217. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/DATA-MODEL.md.template +0 -0
  218. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/DEPLOYMENT.md.template +0 -0
  219. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/DRIFT-LOG.md.template +0 -0
  220. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/ENVIRONMENT.md.template +0 -0
  221. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/KNOWN-GOTCHAS.md.template +0 -0
  222. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/REQUIREMENTS.md.template +0 -0
  223. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/ROADMAP.md.template +0 -0
  224. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/RUNBOOKS.md.template +0 -0
  225. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/SECURITY.md.template +0 -0
  226. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/TEST-SPEC.md.template +0 -0
  227. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/TROUBLESHOOTING.md.template +0 -0
  228. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/VENDOR-BUGS.md.template +0 -0
  229. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/ci/github-actions.yml +0 -0
  230. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/commands/docguard.fix.md +0 -0
  231. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/commands/docguard.guard.md +0 -0
  232. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/commands/docguard.init.md +0 -0
  233. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/commands/docguard.review.md +0 -0
  234. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/templates/commands/docguard.update.md +0 -0
  235. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/test-draft.js +0 -0
  236. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/test-metrics.js +0 -0
  237. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/anchor-autofix.test.mjs +0 -0
  238. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/api-doc.test.mjs +0 -0
  239. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/api-surface.test.mjs +0 -0
  240. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/api-write.test.mjs +0 -0
  241. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/architecture.test.mjs +0 -0
  242. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/backup-failure.test.mjs +0 -0
  243. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/cdk-detection.test.mjs +0 -0
  244. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/changed-only-scoping.test.mjs +0 -0
  245. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/changed-only.test.mjs +0 -0
  246. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/changelog.test.mjs +0 -0
  247. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/commands.test.mjs +0 -0
  248. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/cross-reference.test.mjs +0 -0
  249. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/doc-quality.test.mjs +0 -0
  250. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/docguardignore.test.mjs +0 -0
  251. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/docs-coverage.test.mjs +0 -0
  252. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/docs-diff.test.mjs +0 -0
  253. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/docs-sync.test.mjs +0 -0
  254. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/drift.test.mjs +0 -0
  255. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/environment.test.mjs +0 -0
  256. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/fix-memory.test.mjs +0 -0
  257. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/fix-suppression.test.mjs +0 -0
  258. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/fixture-projects.test.mjs +0 -0
  259. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/freshness.test.mjs +0 -0
  260. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/frontend-deep.test.mjs +0 -0
  261. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/frontend.test.mjs +0 -0
  262. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/generated-staleness.test.mjs +0 -0
  263. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/guard-classify.test.mjs +0 -0
  264. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/guard-no-throw.test.mjs +0 -0
  265. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/i18n.test.mjs +0 -0
  266. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/impact.test.mjs +0 -0
  267. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/integrations.test.mjs +0 -0
  268. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/mechanical.test.mjs +0 -0
  269. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/memory-plan.test.mjs +0 -0
  270. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/metadata-sync.test.mjs +0 -0
  271. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/metrics-consistency.test.mjs +0 -0
  272. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/metrics-dedup.test.mjs +0 -0
  273. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/monorepo-scanning.test.mjs +0 -0
  274. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/multi-spec.test.mjs +0 -0
  275. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/patch-0.11.2.test.mjs +0 -0
  276. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/profile-flag.test.mjs +0 -0
  277. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/project-type.test.mjs +0 -0
  278. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/regenerate-section.test.mjs +0 -0
  279. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/routes-multilang.test.mjs +0 -0
  280. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/schema-sync.test.mjs +0 -0
  281. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/schemas-multilang.test.mjs +0 -0
  282. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/schemas.test.mjs +0 -0
  283. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/scoping-extended.test.mjs +0 -0
  284. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/sections.test.mjs +0 -0
  285. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/security.test.mjs +0 -0
  286. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/severity.test.mjs +0 -0
  287. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/shared-git.test.mjs +0 -0
  288. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/shared-source.test.mjs +0 -0
  289. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/stress-test.test.mjs +0 -0
  290. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/structure.test.mjs +0 -0
  291. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/sweep-nudge.test.mjs +0 -0
  292. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/sync-since.test.mjs +0 -0
  293. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/sync.test.mjs +0 -0
  294. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/test-spec.test.mjs +0 -0
  295. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/todo-tracking.test.mjs +0 -0
  296. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/trace-reverse.test.mjs +0 -0
  297. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/traceability.test.mjs +0 -0
  298. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/upgrade-pr.test.mjs +0 -0
  299. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/tests/upgrade.test.mjs +0 -0
  300. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/vscode-extension/.vscodeignore +0 -0
  301. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/vscode-extension/README.md +0 -0
  302. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/vscode-extension/extension.js +0 -0
  303. {docguard_cli-0.15.2 → docguard_cli-0.16.0}/vscode-extension/package.json +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.15.2
9
+ version: 0.16.0
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.15.2 -->
12
+ <!-- docguard:version: 0.16.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.15.2
10
+ version: 0.16.0
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.15.2 -->
13
+ <!-- docguard:version: 0.16.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.15.2
9
+ version: 0.16.0
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.15.2 -->
12
+ <!-- docguard:version: 0.16.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.15.2
9
+ version: 0.16.0
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.15.2 -->
12
+ <!-- docguard:version: 0.16.0 -->
13
13
 
14
14
  # DocGuard Score Skill
15
15
 
@@ -4,7 +4,7 @@ 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.15.2
7
+ version: 0.16.0
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
10
 
@@ -7,6 +7,68 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.16.0] - 2026-05-26
11
+
12
+ Feature release driven entirely by feedback from a real Python project running
13
+ DocGuard for the first time. **8 user-reported items shipped, 519 tests** (was
14
+ 497, +22). 22 validators. The Python user's top two asks (language-aware
15
+ TRACE_MAP, hook-overwrite protection) are both in.
16
+
17
+ ### Fixed
18
+
19
+ - **P1 — JSON+ANSI bleed in `score`/`trace`/`diff` `--format json`.** Critical CI bug. The v0.12 headless-mode fix only covered `guard` and (later) `diagnose`; three other commands leaked colored banners before the JSON body, breaking `jq` / `python -c "json.loads(...)"` pipelines. All five JSON-emitting commands now produce clean parseable output.
20
+ - **P4 — `docguard diff` false positive on system env vars.** Backticked mentions of `PATH`, `HOME`, `USER`, `SHELL`, etc. inside ENVIRONMENT.md prose ("the venv `PATH`") were flagged as documented-but-not-implemented user env vars. Added a `SYSTEM_ENV_VARS` denylist to both `diff` and the `Environment` validator. The 30-name list covers OS/shell/CI vars; user-app names (`DATABASE_URL`, `API_KEY`, etc.) still count as documented.
21
+
22
+ ### Added
23
+
24
+ - **P2 — Language-aware `TRACE_MAP`** (top user ask). The original JS/TS-only patterns false-negatived on Python (`test_*.py`), Rust (`tests/*.rs`), Go (`*_test.go`), Java (`*Test.java`), Ruby (`*_spec.rb`), and PHP test layouts. Every `TRACE_MAP` entry — Test files, Entry points, Config files, Schemas, Env files — now matches the equivalent patterns across ecosystems. New `tests/trace-multilang.test.mjs` (16 tests) locks the cross-language matching in.
25
+ - **P3 — Hook overwrite protection** (2nd user ask). `docguard hooks --type pre-commit` previously clobbered user customizations on re-install. Now wraps DocGuard's content in `# BEGIN DOCGUARD MANAGED — do not edit between these markers` / `# END DOCGUARD MANAGED` markers and **splices only the managed block** on re-install, preserving everything around it. Legacy pre-v0.16 hooks (no markers) prompt the user to re-run with `--force` to upgrade. Third-party pre-existing hooks refuse to clobber without `--force`.
26
+ - **P5 — `--quiet` / `-q` flag.** Suppresses the banner + ensureSkills decorative line. Useful inside git hooks and CI loops where the 5-line banner becomes 30 lines of noise. Doesn't affect validator output itself.
27
+ - **P6 — `docguard explain <warning>` command** (user wishlist). Paste any warning text and get back: which validator emitted it, what triggered it, how to fix, a passing example, and the standard it references. Cuts source-spelunking time from 5-10 minutes to seconds. Covers all 16 validators. Also accepts a validator key directly (`docguard explain freshness`). JSON mode for tooling.
28
+ - **P7 — N/A markers for required doc sections.** A project that legitimately has no auth (CLI, library, internal tool) can now declare it via `<!-- docguard:section authentication n/a — CLI tool, no user accounts -->` instead of writing "Absent by design" boilerplate. The marker requires a reason (non-empty after the dash) so it can't be a silent opt-out. Doc-Sections counts the marked section as passed.
29
+ - **P8 — `--no-spec-kit` flag for `init`.** Default-on stays for discoverability, but minimalist library projects can now skip the `.specify/`, `.agent/`, `commands/` scaffolding entirely with `docguard init --no-spec-kit`.
30
+
31
+ ### Internal
32
+
33
+ - **3 new test files**: `tests/trace-multilang.test.mjs` (16), `tests/section-na-markers.test.mjs` (5), plus expanded `tests/hooks.test.mjs` (+2 for managed-block). **Total: 497 → 519 tests (+22 new).**
34
+ - New top-level command: `cli/commands/explain.mjs` with a 16-validator explainer table.
35
+ - New helpers in `cli/commands/hooks.mjs`: `wrapManaged()`, `spliceManagedBlock()`, `BEGIN_MARKER`, `END_MARKER`.
36
+ - New `SYSTEM_ENV_VARS` constant exported from `cli/commands/diff.mjs` (mirrored in `cli/validators/environment.mjs`).
37
+ - Headless-mode flag check (`flags.quiet`) added to the main dispatcher.
38
+ - No new NPM deps.
39
+
40
+ ### Out of scope (deferred to v0.17)
41
+
42
+ User feedback items NOT addressed in this release:
43
+
44
+ - **F6 — Score "Top improvements" cache** (low repro confidence — user cleared on the next run, may have been observer effect).
45
+ - **F7 — Validator count drift in tool's own scaffolding** (philosophical: counts ARE accurate per-run; the issue is that DocGuard's OWN docs mention the count and naturally drift as validators are added. Could compute at runtime; defer for now.)
46
+ - **F8 — Version pin in `.docguard.json`** (CDD reproducibility — record the DocGuard version that last passed). Medium effort, real value.
47
+ - **F10 — Memory accuracy drill-down** (`docguard memory --diff` to show which claims don't match code). Bigger feature.
48
+ - **N1 — Validator naming consistency** (`testSpec` JSON key / `test-spec` CLI flag / `Test-Spec` display). Breaking change; needs migration story.
49
+ - **N3 — `--tax` fold** (philosophical: `--tax` does add information, just not enough to feel different).
50
+
51
+ ## [0.15.3] - 2026-05-26
52
+
53
+ Repo hygiene release — scrubbed a client-specific project name from public artifacts.
54
+ No code-behavior changes.
55
+
56
+ ### Changed
57
+
58
+ - **Removed client-specific project references from public-facing artifacts**: CHANGELOG.md (29 mentions), `specs/003-v011-false-positives/*`, and source docstrings in `cli/scanners/memory-plan.mjs`, `cli/commands/upgrade.mjs`, `cli/validators/freshness.mjs`. Replaced with neutral phrasing ("an enterprise client project", "the client's stack"). The fact that v0.11.2 → v0.15 releases were driven by real-world testing on a real-world project is unchanged — the *receipts* just no longer name the specific project.
59
+ - Test files retain references for internal traceability — `// REASON:` comments and `@req` markers stay as-is. Tests are not shipped in the npm tarball, only visible in the GitHub repo source.
60
+
61
+ ### Why this matters
62
+
63
+ DocGuard is a public OSS tool on npm + PyPI. Embedding a specific consulting client's project name in 29 CHANGELOG entries conflated "what the tool does" with "who the tool was tested against". This release decouples them: anyone reading the release history sees the technical decisions and the real-world validation that informed them, without coupling that narrative to a specific named project.
64
+
65
+ ### Internal
66
+
67
+ - 497 tests still pass (no test logic changed).
68
+ - 22 validators unchanged.
69
+ - Self-guard unchanged.
70
+ - No new NPM deps.
71
+
10
72
  ## [0.15.2] - 2026-05-26
11
73
 
12
74
  Patch release responding to a `/docguard.diagnose` self-audit run on canonical-spec-kit.
@@ -34,7 +96,7 @@ through targeted doc + test edits. **497 tests** (unchanged). 22 validators.
34
96
 
35
97
  Feature + performance release. **497 tests** (was 492, +5). 22 validators.
36
98
  Headline: full `--changed-only` set now covers **5 validators in ~100ms** on
37
- both wu-whatsappinbox AND a synthetic 1000-file repo. New `.docguard.json`
99
+ both an enterprise client project AND a synthetic 1000-file repo. New `.docguard.json`
38
100
  JSON Schema for IDE autocomplete.
39
101
 
40
102
  > **Note**: v0.15.0 was committed but never published — the CI self-guard
@@ -52,7 +114,7 @@ JSON Schema for IDE autocomplete.
52
114
 
53
115
  ### Added
54
116
 
55
- - **P3: Drift-Comments + TODO-Tracking honor `config.changedFiles`.** Extending the v0.13 N-1 + v0.14-P2 lite-mode scoping. Now 5 of 22 validators scope to changed files in `--changed-only` mode (was 3). `CHANGED_ONLY_VALIDATORS` updated to include `drift` and `todoTracking`. **Result on wu: `--changed-only --since HEAD~3` runs 5 validators in 116ms** (was 78ms with 3 validators in v0.14 — adding two more validators cost only ~40ms because each is scoped). **Result on synthetic 1000-file repo: 91ms** (verified via new stress test).
117
+ - **P3: Drift-Comments + TODO-Tracking honor `config.changedFiles`.** Extending the v0.13 N-1 + v0.14-P2 lite-mode scoping. Now 5 of 22 validators scope to changed files in `--changed-only` mode (was 3). `CHANGED_ONLY_VALIDATORS` updated to include `drift` and `todoTracking`. **Result on the client: `--changed-only --since HEAD~3` runs 5 validators in 116ms** (was 78ms with 3 validators in v0.14 — adding two more validators cost only ~40ms because each is scoped). **Result on synthetic 1000-file repo: 91ms** (verified via new stress test).
56
118
  - **P4: JSON Schema for `.docguard.json`.** New `schemas/docguard-config.schema.json` shipped in the npm package. `docguard init` now writes `$schema` reference into newly-created configs so VS Code / IntelliJ / any JSON-Schema-aware editor gets autocomplete + inline validation for every config field. Includes types, descriptions, enums (severity = high/medium/low; profile = starter/standard/enterprise; projectType = cli/library/webapp/api/unknown), and field-level help text. Zero runtime impact — DocGuard ignores the `$schema` field itself.
57
119
  - **Q: Stress-test fixture.** New `tests/stress-test.test.mjs` builds a synthetic 1000-file monorepo (500 services + 500 routes + 1000 doc references) and asserts:
58
120
  - `--changed-only` finishes in **< 500ms** (actual: ~91ms).
@@ -62,8 +124,8 @@ JSON Schema for IDE autocomplete.
62
124
  ### Performance
63
125
 
64
126
  - **P1: `buildMemoryPlan` cache.** Memoizes the memory plan per (projectDir + scanner-relevant config) within a single process. Helps cross-command flows where `guard` then `sync` would otherwise rebuild the plan twice. New `clearMemoryPlanCache()` export for tests. Single-`guard` runs see no change (only one caller per process).
65
- - **P2: `walkDir` cache in `cli/scanners/schemas.mjs`.** `walkDir` was called 8× inside `scanSchemasDeep` for different entity types (Pydantic, Mongoose, Prisma, SQLAlchemy, Sequelize, GORM, Sqlx, Hibernate). Now caches the file list per directory; subsequent callers iterate an array instead of re-traversing. Net gain on wu's mixed Python+TS stack is modest (~3% of total validator time) but real, and helps on stacks where multiple scanners hit the same root dir.
66
- - **Combined P1+P2+P3 result on wu**: full guard 1456ms → 1431ms (~2%). `--changed-only` covers 5/22 validators in 116ms (vs 1456ms full = **12.6× faster**).
127
+ - **P2: `walkDir` cache in `cli/scanners/schemas.mjs`.** `walkDir` was called 8× inside `scanSchemasDeep` for different entity types (Pydantic, Mongoose, Prisma, SQLAlchemy, Sequelize, GORM, Sqlx, Hibernate). Now caches the file list per directory; subsequent callers iterate an array instead of re-traversing. Net gain on the client's mixed Python+TS stack is modest (~3% of total validator time) but real, and helps on stacks where multiple scanners hit the same root dir.
128
+ - **Combined P1+P2+P3 result on the client**: full guard 1456ms → 1431ms (~2%). `--changed-only` covers 5/22 validators in 116ms (vs 1456ms full = **12.6× faster**).
67
129
 
68
130
  ### Internal
69
131
 
@@ -71,30 +133,30 @@ JSON Schema for IDE autocomplete.
71
133
  - New helpers: `clearMemoryPlanCache()`, `clearWalkDirCache()`, `_scanTodoFile()`.
72
134
  - `schemas/docguard-config.schema.json` is the first non-code file under `schemas/` — added to `package.json#files` so it ships in the npm tarball.
73
135
  - `.docguard.json` now self-documents via `$schema` reference when created by `init`.
74
- - Dry-run on wu: **672/672 PASS in 1.43s**.
136
+ - Dry-run on the client: **672/672 PASS in 1.43s**.
75
137
  - No new NPM deps.
76
138
 
77
139
  ### Out of scope (deferred to v0.16)
78
140
 
79
- - **Deeper Generated-Staleness optimization** — still the slowest validator at 26% of guard time on wu. The cache helps cross-command flows but not single-guard runs. Next attack vector: stream `buildMemoryPlan` so it yields partial results as scanners complete, letting the validator early-exit on the first non-stale section.
141
+ - **Deeper Generated-Staleness optimization** — still the slowest validator at 26% of guard time on the client. The cache helps cross-command flows but not single-guard runs. Next attack vector: stream `buildMemoryPlan` so it yields partial results as scanners complete, letting the validator early-exit on the first non-stale section.
80
142
  - **`upgrade --apply --pr` battle-test** on a real GitHub repo. Logic shipped in v0.14; end-to-end PR creation hasn't been tested against a live remote with branch protections.
81
143
  - **Cross-process memoization** — if guard / sync / fix runs in CI sequentially, they each rebuild the plan. A serialized cache under `.docguard/plan.cache.json` (keyed by a tree-state hash) would share across processes.
82
144
  - **Tree-state hashing for plan cache invalidation** — currently the in-process cache assumes the tree doesn't change mid-run. A proper hash would let long-running `watch` mode keep a stable cache that only invalidates on actual file changes.
83
145
 
84
146
  ## [0.14.1] - 2026-05-26
85
147
 
86
- Patch + small feature release responding to the wu-whatsappinbox v0.12 feedback.
148
+ Patch + small feature release responding to the an enterprise client project v0.12 feedback.
87
149
  **492 tests** (was 481, +11). 22 validators.
88
150
 
89
151
  ### Fixed
90
152
 
91
- - **N-1: Metrics-Consistency double-counted warnings.** When a doc mentioned the stale validator/check count multiple times (e.g. once in a heading, once in a body table), the validator emitted one warning per regex match — producing "4 warnings for 2 files" on wu-whatsappinbox. Now dedupes by `(file, label, found-value)` so a single file contributes ONE warning per distinct drift value. The `replace-count` mechanical fix already uses replace-all semantics, so one fix per (file, label) is sufficient. **Reported by wu-whatsappinbox.**
153
+ - **N-1: Metrics-Consistency double-counted warnings.** When a doc mentioned the stale validator/check count multiple times (e.g. once in a heading, once in a body table), the validator emitted one warning per regex match — producing "4 warnings for 2 files" on an enterprise client project. Now dedupes by `(file, label, found-value)` so a single file contributes ONE warning per distinct drift value. The `replace-count` mechanical fix already uses replace-all semantics, so one fix per (file, label) is sufficient. **Reported by an enterprise client project.**
92
154
 
93
155
  ### Added
94
156
 
95
- - **S-12+: High-confidence anchor matches now auto-fix via `fix --write`.** v0.13.1 added "did you mean #X?" hints when Cross-Reference flagged a broken anchor. v0.14.1 takes the next step: when the suggested anchor is **unambiguous** (edit distance ≤ 2 AND no other candidates within the same distance), the warning is tagged `[auto-fixable]` and the validator emits a `replace-anchor` mechanical fix. New `replace-anchor` applier in `cli/writers/mechanical.mjs` rewrites only the anchor inside markdown link form `](#X)`, leaves plain-text occurrences and link text alone, is idempotent. **Three of five wu broken-anchor cases in v0.12.0 were "heading renamed, link not updated" — those are now `fix --write`-resolvable.**
157
+ - **S-12+: High-confidence anchor matches now auto-fix via `fix --write`.** v0.13.1 added "did you mean #X?" hints when Cross-Reference flagged a broken anchor. v0.14.1 takes the next step: when the suggested anchor is **unambiguous** (edit distance ≤ 2 AND no other candidates within the same distance), the warning is tagged `[auto-fixable]` and the validator emits a `replace-anchor` mechanical fix. New `replace-anchor` applier in `cli/writers/mechanical.mjs` rewrites only the anchor inside markdown link form `](#X)`, leaves plain-text occurrences and link text alone, is idempotent. **Three of five the client broken-anchor cases in v0.12.0 were "heading renamed, link not updated" — those are now `fix --write`-resolvable.**
96
158
 
97
- ### Note to wu — the "still open" suggestions are all already shipped
159
+ ### Note to the client — the "still open" suggestions are all already shipped
98
160
 
99
161
  The S-1, S-11, S-12 items in the v0.12 feedback letter all shipped earlier. The user just needs to upgrade:
100
162
 
@@ -124,7 +186,7 @@ Same backlog as v0.14:
124
186
  Feature release closing the v0.13 backlog (4 features) + 2 quality investments
125
187
  (multi-fixture harness, `--timings` profiler). **481 tests** (was 448, +33).
126
188
  22 validators. Headline wins: pre-commit lite went from 2s → **78ms** on
127
- wu-whatsappinbox, and Generated-Doc Staleness now CLOSES THE LOOP by emitting
189
+ an enterprise client project, and Generated-Doc Staleness now CLOSES THE LOOP by emitting
128
190
  structured fixes that `fix --write` consumes.
129
191
 
130
192
  ### Added
@@ -133,11 +195,11 @@ structured fixes that `fix --write` consumes.
133
195
  - **P2: Environment + API-Surface honor `config.changedFiles`** (extends N-1). When `--changed-only` is set:
134
196
  - `grepEnvUsage` scans only the listed files instead of the whole source tree.
135
197
  - `validateApiSurface` returns N/A when no route/spec/controller files are in the changed set.
136
- - **Result on wu-whatsappinbox: `--changed-only --since HEAD~3` runs in 78ms — a 25× speedup from v0.13.**
198
+ - **Result on an enterprise client project: `--changed-only --since HEAD~3` runs in 78ms — a 25× speedup from v0.13.**
137
199
  - **P3: Generated-Doc Staleness emits structured fixes**. M-1 (v0.13) only warned; now it ALSO produces a `fixes[]` array with new `regenerate-section` fix type that `fix --write` consumes mechanically. **Closes the loop: detect drift → fix without AI.** The applier rewrites only the named section's body, leaves surrounding prose alone, and is idempotent.
138
200
  - **P4: `docguard upgrade --apply --pr`** for team-wide schema rollouts. Creates a branch, applies the migration, commits as "chore(docguard): migrate schema X → Y", pushes, opens a PR via `gh` CLI. Pre-flight checks `gh` is installed; clear error if not. Useful when `.docguard.json` is branch-protected.
139
201
  - **Q1: Multi-fixture test harness** — `tests/fixture-projects.test.mjs`. Runs full guard against 5 real-world project shapes (Next.js webapp, Vite frontend, Express backend, Python CLI, Rust lib). Cross-cutting "no validator throws a developer error" assertion across every fixture. The harness that would have caught B-5 (v0.13.0 Freshness crash) before release.
140
- - **Q2: `docguard guard --timings`** — per-validator wall-time profile, sorted slowest-first, with `data.validators[].durationMs` in JSON output. Honest delivery on the "perf pass" item: instead of speculative refactoring, ship the measurement tool. Real finding on wu: Generated-Staleness is **33% of total validator time** (~400ms) — targeted v0.15 optimization candidate.
202
+ - **Q2: `docguard guard --timings`** — per-validator wall-time profile, sorted slowest-first, with `data.validators[].durationMs` in JSON output. Honest delivery on the "perf pass" item: instead of speculative refactoring, ship the measurement tool. Real finding on the client: Generated-Staleness is **33% of total validator time** (~400ms) — targeted v0.15 optimization candidate.
141
203
 
142
204
  ### Changed
143
205
 
@@ -152,7 +214,7 @@ structured fixes that `fix --write` consumes.
152
214
  - `cli/writers/mechanical.mjs` got a top-level lazy-loaded `_shouldSuppress` and `_sectionsModule` to support the new applier without circular deps.
153
215
  - `cli/commands/upgrade.mjs` got `openUpgradePR()` — gates on `gh` CLI availability.
154
216
  - `cli/commands/guard.mjs` per-validator timing via `performance.now()`.
155
- - Dry-run on wu-whatsappinbox: **674/674 PASS in 1.48s** (full guard), **78ms** for `--changed-only --since HEAD~3` (P2 scoping in action), Generated-Staleness identified as biggest perf hog at 33% of validator time (v0.15 target).
217
+ - Dry-run on an enterprise client project: **674/674 PASS in 1.48s** (full guard), **78ms** for `--changed-only --since HEAD~3` (P2 scoping in action), Generated-Staleness identified as biggest perf hog at 33% of validator time (v0.15 target).
156
218
  - No new NPM deps.
157
219
 
158
220
  ### Out of scope (deferred to v0.15)
@@ -164,34 +226,34 @@ structured fixes that `fix --write` consumes.
164
226
 
165
227
  ## [0.13.1] - 2026-05-26
166
228
 
167
- Patch + small feature release responding to the wu-whatsappinbox v0.12/v0.13
229
+ Patch + small feature release responding to the an enterprise client project v0.12/v0.13
168
230
  feedback. Fixes 2 bugs (B-5, B-6), ships 3 new features (S-7, S-11, S-12),
169
231
  and adds a cross-cutting "no validator throws" safety net. **22 validators,
170
232
  448 tests (was 434, +14 new).** New `docguard impact` command.
171
233
 
172
234
  ### Fixed
173
235
 
174
- - **B-5: Freshness validator crashed with `getLastCommitDate is not defined`.** A wu-whatsappinbox install of v0.13.0 produced this ReferenceError despite all the imports being correct in source — we couldn't reproduce locally, but the user's report was clear. Fix: defensive dynamic import in `freshness.mjs` that falls back to the pre-v0.13 inline implementation if `../shared-git.mjs` ever fails to load. Worst-case behavior is now "rename detection silently disabled" instead of "validator crashes with useless message". Also added an inline fallback for the same defensive layering. Reported by wu-whatsappinbox.
175
- - **B-6: Cross-Reference didn't URL-decode link target paths.** A markdown link like `[name](../WU%20Documentation/foo.md)` (where the directory has a space) was looked up with `existsSync('../WU%20Documentation/foo.md')` literally — the filesystem stores the decoded form. Now: `resolveTarget` tries BOTH the literal path (for paths that legitimately contain `%`) and the URL-decoded form. **Effect on wu-whatsappinbox: Cross-Reference went from 28/28 to 101/101 checks — 73 previously-broken refs now resolve correctly.** Reported by wu-whatsappinbox.
236
+ - **B-5: Freshness validator crashed with `getLastCommitDate is not defined`.** A an enterprise client project install of v0.13.0 produced this ReferenceError despite all the imports being correct in source — we couldn't reproduce locally, but the user's report was clear. Fix: defensive dynamic import in `freshness.mjs` that falls back to the pre-v0.13 inline implementation if `../shared-git.mjs` ever fails to load. Worst-case behavior is now "rename detection silently disabled" instead of "validator crashes with useless message". Also added an inline fallback for the same defensive layering. Reported by an enterprise client project.
237
+ - **B-6: Cross-Reference didn't URL-decode link target paths.** A markdown link like `[name](../WU%20Documentation/foo.md)` (where the directory has a space) was looked up with `existsSync('../WU%20Documentation/foo.md')` literally — the filesystem stores the decoded form. Now: `resolveTarget` tries BOTH the literal path (for paths that legitimately contain `%`) and the URL-decoded form. **Effect on an enterprise client project: Cross-Reference went from 28/28 to 101/101 checks — 73 previously-broken refs now resolve correctly.** Reported by an enterprise client project.
176
238
  - **Cross-cutting safety net**: new `tests/guard-no-throw.test.mjs` runs guard against a fixture repo and asserts no validator leaks a ReferenceError / TypeError / "is not defined" / "is not a function" / "Cannot read properties of undefined" pattern into user-facing output. Found a *second* lurking bug while writing the test: Structure validator threw `Cannot read properties of undefined (reading 'some')` when `config.requiredFiles.agentFile` was missing — fixed with defensive array-or-string coercion + skip-when-missing for `changelog` too. This safety net runs in CI, catching the entire class of developer-error-leaks before release.
177
239
 
178
240
  ### Added
179
241
 
180
- - **S-12: Cross-Reference suggests the closest anchor on near-miss.** When the validator flags a broken anchor, it now appends `(did you mean #athena-setup-aws-only?)` when a heading in the target doc is a close match. Two-pass matcher: (1) substring containment with ≥4-char minimum and ≥50% overlap to avoid spurious matches, (2) Levenshtein edit distance within a `max(3, len/5)` budget. **Three of the five wu user-fixes in v0.12.0 were "heading renamed, link not updated" — now deterministic-fixable from the warning text.** Reported by wu-whatsappinbox.
181
- - **S-7: Draft-staleness check in Generated-Doc Staleness validator.** A `docguard:generated` doc with `status: draft` (either YAML frontmatter or `<!-- status: draft -->` inline marker) that hasn't been modified in `> draftStalenessDays` days (default 14) now warns. Catches forgotten skeletons that stall before the AI fills them in. Threshold configurable via `config.draftStalenessDays`. Validator returns N/A only when there's NOTHING to check (no source=code sections AND no draft docs). Reported by wu-whatsappinbox.
182
- - **S-11: New `docguard impact` command.** After a commit (or before a PR), runs `git diff --name-only --since=<ref>` and shows which canonical doc sections reference any of the changed code files. Three match strategies (direct path / basename / backticked module name — same as L-2 trace --reverse). Highlights orphaned files (code that changed but no doc references it) so reviewers know what's undocumented. JSON mode emits `{ since, changedFiles, ignoredFiles, affectedDocs }` for CI bots. Designed as a post-commit hook companion to K-1's auto-fix Action. Reported by wu-whatsappinbox.
242
+ - **S-12: Cross-Reference suggests the closest anchor on near-miss.** When the validator flags a broken anchor, it now appends `(did you mean #athena-setup-aws-only?)` when a heading in the target doc is a close match. Two-pass matcher: (1) substring containment with ≥4-char minimum and ≥50% overlap to avoid spurious matches, (2) Levenshtein edit distance within a `max(3, len/5)` budget. **Three of the five the client user-fixes in v0.12.0 were "heading renamed, link not updated" — now deterministic-fixable from the warning text.** Reported by an enterprise client project.
243
+ - **S-7: Draft-staleness check in Generated-Doc Staleness validator.** A `docguard:generated` doc with `status: draft` (either YAML frontmatter or `<!-- status: draft -->` inline marker) that hasn't been modified in `> draftStalenessDays` days (default 14) now warns. Catches forgotten skeletons that stall before the AI fills them in. Threshold configurable via `config.draftStalenessDays`. Validator returns N/A only when there's NOTHING to check (no source=code sections AND no draft docs). Reported by an enterprise client project.
244
+ - **S-11: New `docguard impact` command.** After a commit (or before a PR), runs `git diff --name-only --since=<ref>` and shows which canonical doc sections reference any of the changed code files. Three match strategies (direct path / basename / backticked module name — same as L-2 trace --reverse). Highlights orphaned files (code that changed but no doc references it) so reviewers know what's undocumented. JSON mode emits `{ since, changedFiles, ignoredFiles, affectedDocs }` for CI bots. Designed as a post-commit hook companion to K-1's auto-fix Action. Reported by an enterprise client project.
183
245
 
184
246
  ### Internal
185
247
 
186
248
  - **+3 new test files**: `tests/guard-no-throw.test.mjs` (2 — cross-cutting safety), `tests/impact.test.mjs` (5 — S-11), plus 5 new test cases in `cross-reference.test.mjs` (S-12 + B-6) and `generated-staleness.test.mjs` (S-7). **Total: 434 → 448 tests (+14 new).**
187
249
  - **New module**: `cli/commands/impact.mjs` (~140 lines).
188
250
  - **Hardened**: `cli/validators/freshness.mjs` (defensive shared-git import), `cli/validators/structure.mjs` (defensive config-shape handling), `cli/validators/cross-reference.mjs` (URL-decode + anchor suggestion).
189
- - **Dry-run on wu-whatsappinbox before push** (read-only): 670/674 PASS in 1.8s with all 22 validators. Cross-Reference jumped from 28/28 to **101/101 checks** — B-6 fix unlocked 73 previously-broken refs.
251
+ - **Dry-run on an enterprise client project before push** (read-only): 670/674 PASS in 1.8s with all 22 validators. Cross-Reference jumped from 28/28 to **101/101 checks** — B-6 fix unlocked 73 previously-broken refs.
190
252
  - No new NPM deps.
191
253
 
192
- ### Note on wu's v0.12 feedback
254
+ ### Note on the client's v0.12 feedback
193
255
 
194
- Several "still open" suggestions from the wu-whatsappinbox v0.12 feedback were already shipped:
256
+ Several "still open" suggestions from the an enterprise client project v0.12 feedback were already shipped:
195
257
 
196
258
  - **S-2 (sweep-needed nudge)** → shipped in v0.12.0 as K-6.
197
259
  - **S-3 (trace --reverse)** → shipped in v0.13.0 as L-2.
@@ -201,7 +263,7 @@ Several "still open" suggestions from the wu-whatsappinbox v0.12 feedback were a
201
263
  - **S-9 (pre-commit lite)** → shipped in v0.12.0 as K-5.
202
264
  - **S-10 (`.docguard/fixed.json`)** → shipped in v0.13.0 as M-2.
203
265
 
204
- Upgrade with `docguard upgrade --apply` (or `npm i -g docguard-cli@latest`) to get all of these. **The wu report header said v0.12.0 but the B-5 error pattern indicates an in-flight v0.13.0 install** — either way, this patch makes both versions resilient to the regression.
266
+ Upgrade with `docguard upgrade --apply` (or `npm i -g docguard-cli@latest`) to get all of these. **The the client report header said v0.12.0 but the B-5 error pattern indicates an in-flight v0.13.0 install** — either way, this patch makes both versions resilient to the regression.
205
267
 
206
268
  ## [0.13.0] - 2026-05-26
207
269
 
@@ -214,7 +276,7 @@ Feature release — full backlog cleanup. **Phase L** (sync intelligence: 3 feat
214
276
  - **L-3 / S-4: Rename detection via `git log --follow`.** New `cli/shared-git.mjs` module centralises every git-log call. All file-scoped queries now pass `--follow` so a `git mv` no longer resets the file's history. Freshness, Test-Spec, Traceability — anything that asks git "when was this file last touched?" — now answers correctly across renames.
215
277
  - **M-1 / S-7: Generated-Doc Staleness validator** (22nd validator). New validator re-runs the memory-plan scanner and compares each `source=code` section's expected body against on-disk content. Flags sections where the doc and the scanner disagree — i.e. either code changed without `sync --write` running, or someone hand-edited a machine-owned section. Warning includes a "first drift at line N" hint that names the diff site.
216
278
  - **M-2 / S-10: `.docguard/fixed.json` fix-history audit log.** Every mechanical fix `fix --write` applies is appended to a small JSON log under `.docguard/`. Entries are fingerprinted by `type+file+summary` and deduped (re-applying the same fix updates the timestamp instead of growing the file). Rolls over at 500 entries. New `docguard fix --history` command pretty-prints the log grouped by day. Also recorded: `appliedBy` (so K-1's `docguard-bot` auto-commits are distinguishable from human runs).
217
- - **N-1: Per-file scoping of `--changed-only`.** The `--changed-only` lite mode now computes the actually-changed files (`git diff --name-only HEAD~1 HEAD`, configurable with `--since`) and passes them as `config.changedFiles` to validators that opt in. Docs-Sync is the first opt-in: routes and services outside the changed set are skipped entirely. On wu-whatsappinbox the Docs-Sync check count went from 101 → 21 in `--changed-only` mode.
279
+ - **N-1: Per-file scoping of `--changed-only`.** The `--changed-only` lite mode now computes the actually-changed files (`git diff --name-only HEAD~1 HEAD`, configurable with `--since`) and passes them as `config.changedFiles` to validators that opt in. Docs-Sync is the first opt-in: routes and services outside the changed set are skipped entirely. On an enterprise client project the Docs-Sync check count went from 101 → 21 in `--changed-only` mode.
218
280
  - **N-2: 4 broken README anchors fixed** (caught by K-7's Cross-Reference validator). `[Commands](#-commands)` → `[Usage](#usage)`. `CONTRIBUTING.md` added to the validator's standard-docs lookup list (along with CODE_OF_CONDUCT.md, SECURITY.md, PHILOSOPHY.md, STANDARD.md, COMPARISONS.md) so cross-doc refs to those resolve.
219
281
 
220
282
  ### Changed
@@ -228,7 +290,7 @@ Feature release — full backlog cleanup. **Phase L** (sync intelligence: 3 feat
228
290
  - **6 new test files**: `tests/shared-git.test.mjs` (11), `tests/sync-since.test.mjs` (3), `tests/trace-reverse.test.mjs` (5), `tests/generated-staleness.test.mjs` (4), `tests/fix-memory.test.mjs` (11), plus updates to `tests/changed-only.test.mjs`. **Total: 434 tests passing (was 400, +34 new).**
229
291
  - **New modules**: `cli/shared-git.mjs` (centralized git plumbing with --follow), `cli/validators/generated-staleness.mjs` (M-1), `cli/writers/fix-memory.mjs` (M-2). New helpers exported from sync.mjs: section→file matcher table for surgical refresh.
230
292
  - **Action / CLI dual-fix from v0.12** is now coordinated: K-1's auto-fix Action records to `.docguard/fixed.json` via `appliedBy: 'docguard-bot'`, giving teams a permanent record of which fixes the bot applied without diving into git history.
231
- - **Dry-run on wu-whatsappinbox before push** (read-only): 670/674 PASS in 1.82s with all 22 validators. 4 warnings are stale "21 validators" references in wu's local docguard skill files — those auto-fix on the next `fix --write`.
293
+ - **Dry-run on an enterprise client project before push** (read-only): 670/674 PASS in 1.82s with all 22 validators. 4 warnings are stale "21 validators" references in the client's local docguard skill files — those auto-fix on the next `fix --write`.
232
294
  - Bumped extension files via auto-fix (6 files: extension.yml + 5 SKILL.md).
233
295
  - No new NPM dependencies. Still zero deps.
234
296
 
@@ -246,7 +308,7 @@ PR-time auto-fix GitHub Action, `docguard upgrade` command + post-guard
246
308
  nudge, `.docguardignore` support, per-validator severity overrides,
247
309
  pre-commit-lite mode, sweep-needed nudge, and the new Cross-Reference
248
310
  validator (21 validators total, up from 20). Plus 4 papercut fixes
249
- caught during the wu-whatsappinbox dry-run.
311
+ caught during the an enterprise client project dry-run.
250
312
 
251
313
  ### Added
252
314
 
@@ -268,7 +330,7 @@ caught during the wu-whatsappinbox dry-run.
268
330
  ### Fixed
269
331
 
270
332
  - **Docs-Coverage Check 5 silent-fail** (also in v0.11.2) — recommended README sections no longer bump `total` without emitting a message. Now a true bonus: present = +1, missing = no-op.
271
- - **Papercut #1 — `upgrade` missed pre-0.4 schemas.** A `.docguard.json` that exists but has no `version` field (the 2024-era format used by `wu-whatsappinbox`, with `project` instead of `projectName`) was silently treated as "no config". Now: `readProjectSchemaVersion` returns the sentinel `'0.0'` for pre-0.4 schemas, and the migration registry has a `0.0 → 0.4` recipe that renames `project → projectName` while stamping the version. The user-facing label is friendlier too ("pre-0.4 (no version field)" instead of "Schema 0.0").
333
+ - **Papercut #1 — `upgrade` missed pre-0.4 schemas.** A `.docguard.json` that exists but has no `version` field (the 2024-era format used by `an enterprise client project`, with `project` instead of `projectName`) was silently treated as "no config". Now: `readProjectSchemaVersion` returns the sentinel `'0.0'` for pre-0.4 schemas, and the migration registry has a `0.0 → 0.4` recipe that renames `project → projectName` while stamping the version. The user-facing label is friendlier too ("pre-0.4 (no version field)" instead of "Schema 0.0").
272
334
  - **Papercut #2 — `--format json` was unparseable.** The banner and `ensureSkills` install message wrote to stdout BEFORE the JSON body, so `JSON.parse` failed on every consumer. New `jsonMode` + `headless` detection in `main()` skips both for `--format json`, `--write`, `--check-only`, and `--changed-only`. Affects every Action recipe using `format: json` (Score-on-PR was broken).
273
335
  - **Papercut #3 — auto-fix Action counted CLI side effects as "fixes".** `ensureSkills` writes to `.agent/`, `.specify/`, `commands/` on first run; the Action's `git status --porcelain` diff was treating those as mechanical fixes and committing them. Two-part fix: (1) the new headless-mode skips `ensureSkills` so the side effects don't appear, and (2) the Action's bash filter excludes `.agent/`, `.specify/`, `commands/`, `.docguard/`, `.wolf/`, `.claude/` from the changed-files detection as belt-and-suspenders.
274
336
  - **Papercut #4 — slugifier didn't match GitHub's GFM.** The Cross-Reference validator's first iteration false-positived on every emoji-prefixed heading (`## ⚡ Quick Start` → GitHub produces `#-quick-start` with a leading dash, but my code produced `#quick-start`). Also collapsed `--` to `-` which GitHub keeps. Three bugs fixed; tests now lock in GFM compatibility for emoji-prefixed headings and stripped-punctuation cases.
@@ -277,7 +339,7 @@ caught during the wu-whatsappinbox dry-run.
277
339
 
278
340
  - 6 new test files: `tests/upgrade.test.mjs` (12 tests), `tests/docguardignore.test.mjs` (11 tests), `tests/severity.test.mjs` (9 tests), `tests/changed-only.test.mjs` (4 tests), `tests/sweep-nudge.test.mjs` (3 tests), `tests/cross-reference.test.mjs` (22 tests). **Total: 400 tests passing (was 339, +61 new).**
279
341
  - Cross-Reference validator added (21 total validators, up from 20). Metrics-Consistency picked up the new count and `fix --write` auto-bumped 8 doc references from "20 validators" → "21 validators" in one pass — eating our own dogfood.
280
- - Dry-run on `wu-whatsappinbox` (read-only) before push surfaced the 4 papercuts above. All fixed in this release.
342
+ - Dry-run on `an enterprise client project` (read-only) before push surfaced the 4 papercuts above. All fixed in this release.
281
343
  - New modules: `cli/commands/upgrade.mjs`, `loadDocguardIgnore` + `mergeIgnoreFile` exports in `cli/shared-ignore.mjs`, `CURRENT_SCHEMA_VERSION` + `SEVERITY_LEVELS` + `resolveSeverity` + `compareVersions` + `parseVersion` exports in `cli/shared.mjs`, `CHANGED_ONLY_VALIDATORS` + `liteValidatorsConfig` in `cli/commands/guard.mjs`.
282
344
  - New docs: `docs-canonical/CI-RECIPES.md` (5 recipes + permissions cheatsheet + full action inputs/outputs reference).
283
345
  - `action.yml` grew from 166 → 323 lines (+157) with the auto-commit/comment flow.
@@ -291,16 +353,16 @@ caught during the wu-whatsappinbox dry-run.
291
353
 
292
354
  ## [0.11.2] - 2026-05-25
293
355
 
294
- Patch release addressing the four bugs (B-1..B-4) reported from the v0.11.1 audit of `wu-whatsappinbox` (score 98/100, 572/575 passed, 1 warning), plus Antigravity/Kiro/Windsurf agent-routing aliases and a Docs-Coverage silent-fail fix that the new B-4 nudge itself exposed.
356
+ Patch release addressing the four bugs (B-1..B-4) reported from the v0.11.1 audit of `an enterprise client project` (score 98/100, 572/575 passed, 1 warning), plus Antigravity/Kiro/Windsurf agent-routing aliases and a Docs-Coverage silent-fail fix that the new B-4 nudge itself exposed.
295
357
 
296
358
  ### Fixed
297
- - **B-1: Vite intrinsics no longer reported as user env vars.** `grepEnvUsage` in `cli/shared-source.mjs` now skips `DEV`, `PROD`, `MODE`, `BASE_URL`, and `SSR` on `import.meta.env.*` — these are injected by Vite at build time, not user-configured. Real user vars like `VITE_API_URL` are still captured. (Reported by wu-whatsappinbox v0.11.1 audit.)
298
- - **B-2: `docguard diff` Data Entities now uses real exported names, not file basenames.** Previously the entity diff walked filenames and reported the stem (e.g. `models.py` → "models"), missing all the actual classes inside. Now uses `scanSchemasDeep` — the same code-side scanner the rest of DocGuard uses — which extracts real Pydantic/Dataclass/Mongoose/Prisma/Zod/Sequelize/Sqlx/SQLAlchemy/JPA entity names. (Reported by wu-whatsappinbox v0.11.1 audit.)
299
- - **B-3: Literal `` `VITE_` `` prefix in prose no longer captured as an env var name.** Tightened the env-var name regex across `shared-source.mjs`, `validators/environment.mjs`, and `commands/diff.mjs` from `[A-Z][A-Z0-9_]*` to `[A-Z][A-Z0-9_]*[A-Z0-9]` (must end with letter/digit, not underscore). Documentation like ``All vars start with `VITE_` (Vite convention)`` no longer triggers a "missing `VITE_`" warning. (Reported by wu-whatsappinbox v0.11.1 audit.)
300
- - **B-4 nudge surfaced: Docs-Coverage Check 5 (`checkReadmeSections`) silent-fail fixed.** The "recommended sections" loop bumped `total` without emitting a message when missing — exactly the anti-pattern B-4 flags. Recommended sections are now a true bonus: present = +1 to both passed/total, missing = no-op. Restores honest scoring on the README checker. (Found by the B-4 nudge running on the wu-whatsappinbox fixture.)
359
+ - **B-1: Vite intrinsics no longer reported as user env vars.** `grepEnvUsage` in `cli/shared-source.mjs` now skips `DEV`, `PROD`, `MODE`, `BASE_URL`, and `SSR` on `import.meta.env.*` — these are injected by Vite at build time, not user-configured. Real user vars like `VITE_API_URL` are still captured. (Reported by an enterprise client project v0.11.1 audit.)
360
+ - **B-2: `docguard diff` Data Entities now uses real exported names, not file basenames.** Previously the entity diff walked filenames and reported the stem (e.g. `models.py` → "models"), missing all the actual classes inside. Now uses `scanSchemasDeep` — the same code-side scanner the rest of DocGuard uses — which extracts real Pydantic/Dataclass/Mongoose/Prisma/Zod/Sequelize/Sqlx/SQLAlchemy/JPA entity names. (Reported by an enterprise client project v0.11.1 audit.)
361
+ - **B-3: Literal `` `VITE_` `` prefix in prose no longer captured as an env var name.** Tightened the env-var name regex across `shared-source.mjs`, `validators/environment.mjs`, and `commands/diff.mjs` from `[A-Z][A-Z0-9_]*` to `[A-Z][A-Z0-9_]*[A-Z0-9]` (must end with letter/digit, not underscore). Documentation like ``All vars start with `VITE_` (Vite convention)`` no longer triggers a "missing `VITE_`" warning. (Reported by an enterprise client project v0.11.1 audit.)
362
+ - **B-4 nudge surfaced: Docs-Coverage Check 5 (`checkReadmeSections`) silent-fail fixed.** The "recommended sections" loop bumped `total` without emitting a message when missing — exactly the anti-pattern B-4 flags. Recommended sections are now a true bonus: present = +1 to both passed/total, missing = no-op. Restores honest scoring on the README checker. (Found by the B-4 nudge running on the an enterprise client project fixture.)
301
363
 
302
364
  ### Added
303
- - **B-4: `--show-failing` flag and validator-bug nudge.** `docguard guard --show-failing` shows warnings/errors for every non-passing validator even if the overall status would have suppressed them. New nudge fires when a validator has `passed < total` but emits no warning or error messages — points at a likely silent-fail validator bug for the user to file an issue. (Reported by wu-whatsappinbox v0.11.1 audit.)
365
+ - **B-4: `--show-failing` flag and validator-bug nudge.** `docguard guard --show-failing` shows warnings/errors for every non-passing validator even if the overall status would have suppressed them. New nudge fires when a validator has `passed < total` but emits no warning or error messages — points at a likely silent-fail validator bug for the user to file an issue. (Reported by an enterprise client project v0.11.1 audit.)
304
366
  - **Antigravity / Kiro / Windsurf / GEMINI agent signals.** `cli/ensure-skills.mjs` now detects these agent ecosystems via additional signal files (`.agents`, `.antigravity`, `ANTIGRAVITY.md`, `.kiro`, `.windsurf`, `GEMINI.md`) so the right skills are installed for each. Antigravity was already wired via `.agents → agy`; this expands the alias surface so neither side-by-side IDEs nor Spec Kit's `.agents` convention break detection.
305
367
 
306
368
  ### Internal
@@ -310,11 +372,11 @@ Patch release addressing the four bugs (B-1..B-4) reported from the v0.11.1 audi
310
372
  ### Out of scope (deferred to v0.12)
311
373
  - S-1 (`sync --since` surgical refresh), S-2 (sweep-needed nudge from freshness counters), S-3 (`trace --reverse` code→doc map), S-4 (rename detection via `git log --follow`), S-5 (`.docguardignore` template at init), S-6 (per-validator severity in `.docguard.json`), S-7 (generated-doc-in-draft staleness validator), S-8 (cross-reference validator for broken `§X` anchors), S-9 (pre-commit lite on changed files only), S-10 (`.docguard/fixed.json` memory of past fixes).
312
374
 
313
- Credit: feedback from running v0.11.1 on the `wu-whatsappinbox` enterprise monorepo (audit score 98/100, 572/575 passed).
375
+ Credit: feedback from running v0.11.1 on the `an enterprise client project` enterprise monorepo (audit score 98/100, 572/575 passed).
314
376
 
315
377
  ## [0.11.1] - 2026-05-25
316
378
 
317
- Patch release addressing false positives surfaced by the v0.11.0 audit of the `wu-whatsappinbox` enterprise monorepo, generalized into a multi-tool IaC detector, plus several DocGuard self-audit improvements. Spec: `specs/003-v011-false-positives/`.
379
+ Patch release addressing false positives surfaced by the v0.11.0 audit of the `an enterprise client project` enterprise monorepo, generalized into a multi-tool IaC detector, plus several DocGuard self-audit improvements. Spec: `specs/003-v011-false-positives/`.
318
380
 
319
381
  ### Fixed
320
382
  - **Docs-Sync no longer misclassifies frontend API clients as backend routes.** Dropped the ambiguous bare `'api'` from the route-directory convention list. `src/api/client.ts` (frontend axios) and similar are no longer scanned as Express/Next.js routes (FP-1). For Next.js App Router (`src/app/api`, `app/api`), only files matching the strict `route.{ts,tsx,js,jsx,mjs}` filename convention are counted — helper files in the same tree are skipped (FR-001, FR-002).
@@ -332,7 +394,7 @@ Patch release addressing false positives surfaced by the v0.11.0 audit of the `w
332
394
  ### Added
333
395
  - **Multi-tool IaC detector + consolidated documentation reminder.** New `cli/scanners/iac.mjs` identifies projects shipping any of: **AWS CDK** (`cdk.json`), **Terraform** (`*.tf` files), **Pulumi** (`Pulumi.yaml`), **AWS SAM** (`template.yaml` with `AWS::Serverless::`), and **Serverless Framework** (`serverless.yml`). When an IaC project's ARCHITECTURE.md has no Infrastructure heading, DocGuard emits ONE actionable warning per detected tool naming the marker file location and the expected source layout — instead of multiple generic per-directory warnings (FR-009, FR-010, FR-011). The generic per-dir warnings inside IaC packages (`bin/`, `lib/`, `modules/`, `stacks/`, `constructs/`, `handlers/`, etc.) are suppressed in favor of these consolidated messages. The legacy `cli/scanners/cdk.mjs` is preserved as a thin re-export for backward compatibility.
334
396
  - **`## Infrastructure (IaC)` section in `templates/ARCHITECTURE.md.template`.** New projects initialized via `docguard init` start with placeholder tables for AWS CDK, Terraform, and Pulumi/SAM/Serverless layouts plus a Deployment Pipeline subsection (FR-012). Explicitly skippable for non-IaC projects via a header comment.
335
- - **`DEFAULT_IGNORE_DIRS`** exported from `cli/shared-ignore.mjs` — canonical shared ignore set covering build outputs (`dist`, `build`, `out`, `cdk.out`, `target`, `.gradle`), VCS internals (`.git`, `.jj`, `.hg`, `.svn`), package caches (`node_modules`, `vendor`, `.venv`, `__pycache__`), and framework synth outputs (`.next`, `.nuxt`, `.turbo`, `.vercel`, `.cache`, `.svelte-kit`) (FR-008). Added `target` (Rust/Java), `.gradle`, and `.svelte-kit` per the updated wu-whatsappinbox audit. Available for any future validator to import; existing per-validator `IGNORE_DIRS` sets are left in place (deferred migration).
397
+ - **`DEFAULT_IGNORE_DIRS`** exported from `cli/shared-ignore.mjs` — canonical shared ignore set covering build outputs (`dist`, `build`, `out`, `cdk.out`, `target`, `.gradle`), VCS internals (`.git`, `.jj`, `.hg`, `.svn`), package caches (`node_modules`, `vendor`, `.venv`, `__pycache__`), and framework synth outputs (`.next`, `.nuxt`, `.turbo`, `.vercel`, `.cache`, `.svelte-kit`) (FR-008). Added `target` (Rust/Java), `.gradle`, and `.svelte-kit` per the updated an enterprise client project audit. Available for any future validator to import; existing per-validator `IGNORE_DIRS` sets are left in place (deferred migration).
336
398
 
337
399
  ### Changed
338
400
  - **DocGuard package version bumped to 0.11.1** across `package.json` and all `extensions/spec-kit-docguard/` files (extension.yml + 5 SKILL.md files were referencing stale `v0.9.9`/`v0.10.0`).
@@ -350,7 +412,7 @@ Patch release addressing false positives surfaced by the v0.11.0 audit of the `w
350
412
  - Migrating all 17 modules that define their own `IGNORE_DIRS` constant to import `DEFAULT_IGNORE_DIRS` — mechanical, large diff, tracked separately.
351
413
  - Multi-line string-literal detection in TODO-Tracking — current heuristic still false-positives on `// TODO:` inside multi-line template literals. Workaround: keep test files out of TODO scanning (now default) or use `config.todoIgnore` globs.
352
414
 
353
- Credit: feedback from running v0.11.0 on the `wu-whatsappinbox` enterprise monorepo (audit score 98/100, 40 warnings).
415
+ Credit: feedback from running v0.11.0 on the `an enterprise client project` enterprise monorepo (audit score 98/100, 40 warnings).
354
416
 
355
417
  ## [0.11.0] - 2026-05-22
356
418
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docguard-cli
3
- Version: 0.15.2
3
+ Version: 0.16.0
4
4
  Summary: The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. Zero dependencies.
5
5
  Project-URL: Homepage, https://github.com/raccioly/docguard
6
6
  Project-URL: Documentation, https://github.com/raccioly/docguard#readme
@@ -25,8 +25,12 @@ const CODE_EXTENSIONS = new Set([
25
25
  ]);
26
26
 
27
27
  export function runDiff(projectDir, config, flags) {
28
- console.log(`${c.bold}🔍 DocGuard Diff ${config.projectName}${c.reset}`);
29
- console.log(`${c.dim} Directory: ${projectDir}${c.reset}\n`);
28
+ // v0.16-P1: headless mode for JSON output (matches guard/score/trace fix).
29
+ const isJson = flags.format === 'json';
30
+ if (!isJson) {
31
+ console.log(`${c.bold}🔍 DocGuard Diff — ${config.projectName}${c.reset}`);
32
+ console.log(`${c.dim} Directory: ${projectDir}${c.reset}\n`);
33
+ }
30
34
 
31
35
  const results = [];
32
36
 
@@ -196,6 +200,25 @@ function diffEntities(dir, config = {}) {
196
200
  };
197
201
  }
198
202
 
203
+ // v0.16-P4: common system environment variables that get backticked in
204
+ // prose ("the venv `PATH`", "your `HOME` directory") but are NEVER user-set
205
+ // application env vars. Excluding them from the docVars set kills the
206
+ // false-positive class reported by the Python user where `PATH` was flagged
207
+ // as "documented-but-not-implemented".
208
+ //
209
+ // Conservative list — only the names that are unambiguously OS/shell vars.
210
+ // Application names like `DATABASE_URL`, `API_KEY` etc. still count.
211
+ const SYSTEM_ENV_VARS = new Set([
212
+ 'PATH', 'HOME', 'USER', 'USERNAME', 'SHELL', 'PWD', 'OLDPWD', 'TMPDIR', 'TEMP', 'TMP',
213
+ 'LANG', 'LC_ALL', 'LC_CTYPE', 'LC_MESSAGES', 'TZ',
214
+ 'EDITOR', 'VISUAL', 'PAGER', 'TERM', 'COLORTERM',
215
+ 'DISPLAY', 'SSH_AUTH_SOCK', 'SSH_CONNECTION', 'SSH_TTY',
216
+ 'XDG_CONFIG_HOME', 'XDG_DATA_HOME', 'XDG_CACHE_HOME', 'XDG_RUNTIME_DIR',
217
+ // CI/build platform vars (set by the platform, not by the app)
218
+ 'CI', 'GITHUB_TOKEN', 'GITHUB_ACTIONS', 'GITHUB_REF', 'GITHUB_SHA',
219
+ 'NODE_ENV', // could be app-set but more often platform-set; conservative skip
220
+ ]);
221
+
199
222
  function diffEnvVars(dir, config = {}) {
200
223
  const envDocPath = resolve(dir, 'docs-canonical/ENVIRONMENT.md');
201
224
  if (!existsSync(envDocPath)) return null;
@@ -208,6 +231,9 @@ function diffEnvVars(dir, config = {}) {
208
231
  const varRegex = /`([A-Z][A-Z0-9_]*[A-Z0-9])`/g;
209
232
  let match;
210
233
  while ((match = varRegex.exec(content)) !== null) {
234
+ // v0.16-P4: skip backticked system vars that appear in prose. They're
235
+ // never user-set application env vars; flagging them produces noise.
236
+ if (SYSTEM_ENV_VARS.has(match[1])) continue;
211
237
  docVars.add(match[1]);
212
238
  }
213
239