docguard-cli 0.11.1__tar.gz → 0.11.2__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 (267) hide show
  1. {docguard_cli-0.11.1/extensions/spec-kit-docguard → docguard_cli-0.11.2/.agent}/skills/docguard-fix/SKILL.md +2 -2
  2. {docguard_cli-0.11.1/extensions/spec-kit-docguard → docguard_cli-0.11.2/.agent}/skills/docguard-guard/SKILL.md +2 -2
  3. {docguard_cli-0.11.1/extensions/spec-kit-docguard → docguard_cli-0.11.2/.agent}/skills/docguard-review/SKILL.md +2 -2
  4. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/docguard-score/SKILL.md +2 -2
  5. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/docguard-sync/SKILL.md +1 -1
  6. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/CHANGELOG.md +23 -0
  7. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/PKG-INFO +1 -1
  8. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/diff.mjs +15 -17
  9. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/guard.mjs +12 -2
  10. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/docguard.mjs +2 -0
  11. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/ensure-skills.mjs +8 -1
  12. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/shared-source.mjs +17 -6
  13. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/docs-coverage.mjs +4 -1
  14. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/environment.mjs +9 -3
  15. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/extension.yml +1 -1
  16. {docguard_cli-0.11.1/.agent → docguard_cli-0.11.2/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
  17. {docguard_cli-0.11.1/.agent → docguard_cli-0.11.2/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +2 -2
  18. {docguard_cli-0.11.1/.agent → docguard_cli-0.11.2/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
  19. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/skills/docguard-score/SKILL.md +2 -2
  20. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +1 -1
  21. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/package.json +1 -1
  22. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/pyproject.toml +1 -1
  23. docguard_cli-0.11.2/tests/patch-0.11.2.test.mjs +103 -0
  24. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.analyze.md +0 -0
  25. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.checklist.md +0 -0
  26. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.clarify.md +0 -0
  27. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.constitution.md +0 -0
  28. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.implement.md +0 -0
  29. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.plan.md +0 -0
  30. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.specify.md +0 -0
  31. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.tasks.md +0 -0
  32. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.taskstoissues.md +0 -0
  33. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-analyze/SKILL.md +0 -0
  34. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-checklist/SKILL.md +0 -0
  35. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-clarify/SKILL.md +0 -0
  36. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-constitution/SKILL.md +0 -0
  37. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-implement/SKILL.md +0 -0
  38. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-plan/SKILL.md +0 -0
  39. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-specify/SKILL.md +0 -0
  40. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-tasks/SKILL.md +0 -0
  41. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
  42. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.docguard.json +0 -0
  43. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.docguardignore +0 -0
  44. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  45. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  46. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/dependabot.yml +0 -0
  47. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/scripts/patch-catalog.py +0 -0
  48. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/ci.yml +0 -0
  49. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/release.yml +0 -0
  50. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/supply-chain.yml +0 -0
  51. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/sync-speckit-catalog.yml +0 -0
  52. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.gitignore +0 -0
  53. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.jules/bolt.md +0 -0
  54. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.jules/palette.md +0 -0
  55. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.jules/sentinel.md +0 -0
  56. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.npmignore +0 -0
  57. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.npmrc +0 -0
  58. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
  59. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
  60. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-metadata.json +0 -0
  61. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog.json +0 -0
  62. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/init-options.json +0 -0
  63. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/memory/constitution.md +0 -0
  64. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  65. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/common.sh +0 -0
  66. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/create-new-feature.sh +0 -0
  67. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/setup-plan.sh +0 -0
  68. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/update-agent-context.sh +0 -0
  69. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/agent-file-template.md +0 -0
  70. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/checklist-template.md +0 -0
  71. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/constitution-template.md +0 -0
  72. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/plan-template.md +0 -0
  73. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/spec-template.md +0 -0
  74. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/tasks-template.md +0 -0
  75. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/AGENTS.md +0 -0
  76. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/CODE_OF_CONDUCT.md +0 -0
  77. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/COMPARISONS.md +0 -0
  78. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/CONTRIBUTING.md +0 -0
  79. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/DRIFT-LOG.md +0 -0
  80. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/LICENSE +0 -0
  81. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/PHILOSOPHY.md +0 -0
  82. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/README.md +0 -0
  83. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/ROADMAP.md +0 -0
  84. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/SECURITY.md +0 -0
  85. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/STANDARD.md +0 -0
  86. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/SUPPLY-CHAIN-AUDIT.md +0 -0
  87. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/SUPPORT.md +0 -0
  88. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/action.yml +0 -0
  89. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/agents.mjs +0 -0
  90. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/badge.mjs +0 -0
  91. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/ci.mjs +0 -0
  92. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/diagnose.mjs +0 -0
  93. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/fix.mjs +0 -0
  94. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/generate.mjs +0 -0
  95. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/hooks.mjs +0 -0
  96. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/init.mjs +0 -0
  97. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/llms.mjs +0 -0
  98. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/publish.mjs +0 -0
  99. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/score.mjs +0 -0
  100. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/setup.mjs +0 -0
  101. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/sync.mjs +0 -0
  102. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/trace.mjs +0 -0
  103. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/watch.mjs +0 -0
  104. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/api-doc.mjs +0 -0
  105. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/cdk.mjs +0 -0
  106. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/doc-tools.mjs +0 -0
  107. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/frontend.mjs +0 -0
  108. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/iac.mjs +0 -0
  109. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/integrations.mjs +0 -0
  110. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/memory-plan.mjs +0 -0
  111. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/project-type.mjs +0 -0
  112. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/routes.mjs +0 -0
  113. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/schemas.mjs +0 -0
  114. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/speckit.mjs +0 -0
  115. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/shared-ignore.mjs +0 -0
  116. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/shared.mjs +0 -0
  117. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/api-surface.mjs +0 -0
  118. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/architecture.mjs +0 -0
  119. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/changelog.mjs +0 -0
  120. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/doc-quality.mjs +0 -0
  121. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/docs-diff.mjs +0 -0
  122. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/docs-sync.mjs +0 -0
  123. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/drift.mjs +0 -0
  124. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/freshness.mjs +0 -0
  125. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/metadata-sync.mjs +0 -0
  126. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/metrics-consistency.mjs +0 -0
  127. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/schema-sync.mjs +0 -0
  128. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/security.mjs +0 -0
  129. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/structure.mjs +0 -0
  130. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/test-spec.mjs +0 -0
  131. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/todo-tracking.mjs +0 -0
  132. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/traceability.mjs +0 -0
  133. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/writers/api-reference.mjs +0 -0
  134. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/writers/mechanical.mjs +0 -0
  135. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/writers/sections.mjs +0 -0
  136. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.fix.md +0 -0
  137. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.guard.md +0 -0
  138. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.review.md +0 -0
  139. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.score.md +0 -0
  140. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/fastify.json +0 -0
  141. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/generic.json +0 -0
  142. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/nextjs.json +0 -0
  143. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/python.json +0 -0
  144. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docguard_cli/__init__.py +0 -0
  145. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docguard_cli/wrapper.py +0 -0
  146. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/ai-integration.md +0 -0
  147. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/commands.md +0 -0
  148. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/configuration.md +0 -0
  149. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/doc-sections.md +0 -0
  150. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/faq.md +0 -0
  151. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/installation.md +0 -0
  152. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/profiles.md +0 -0
  153. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/quickstart.md +0 -0
  154. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/ARCHITECTURE.md +0 -0
  155. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/DATA-MODEL.md +0 -0
  156. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/ENVIRONMENT.md +0 -0
  157. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/SECURITY.md +0 -0
  158. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/TEST-SPEC.md +0 -0
  159. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/01-express-api/README.md +0 -0
  160. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/01-express-api/package.json +0 -0
  161. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/01-express-api/server.js +0 -0
  162. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/README.md +0 -0
  163. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/app.py +0 -0
  164. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
  165. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/requirements.txt +0 -0
  166. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
  167. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/README.md +0 -0
  168. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
  169. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
  170. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/package.json +0 -0
  171. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/src/index.js +0 -0
  172. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
  173. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/README.md +0 -0
  174. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/LICENSE +0 -0
  175. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/README.md +0 -0
  176. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
  177. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/fix.md +0 -0
  178. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/generate.md +0 -0
  179. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/guard.md +0 -0
  180. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/init.md +0 -0
  181. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/score.md +0 -0
  182. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/sync.md +0 -0
  183. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/trace.md +0 -0
  184. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
  185. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
  186. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
  187. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
  188. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
  189. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/pr_description.md +0 -0
  190. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/001-fix-ignore-validators/plan.md +0 -0
  191. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/001-fix-ignore-validators/spec.md +0 -0
  192. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/001-fix-ignore-validators/tasks.md +0 -0
  193. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/002-fix-test-discovery/plan.md +0 -0
  194. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/002-fix-test-discovery/spec.md +0 -0
  195. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/002-fix-test-discovery/tasks.md +0 -0
  196. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/003-v011-false-positives/plan.md +0 -0
  197. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/003-v011-false-positives/spec.md +0 -0
  198. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/003-v011-false-positives/tasks.md +0 -0
  199. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ADR.md.template +0 -0
  200. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/AGENTS.md.template +0 -0
  201. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ARCHITECTURE.md.template +0 -0
  202. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/CHANGELOG.md.template +0 -0
  203. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/CURRENT-STATE.md.template +0 -0
  204. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/DATA-MODEL.md.template +0 -0
  205. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/DEPLOYMENT.md.template +0 -0
  206. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/DRIFT-LOG.md.template +0 -0
  207. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ENVIRONMENT.md.template +0 -0
  208. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/KNOWN-GOTCHAS.md.template +0 -0
  209. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/REQUIREMENTS.md.template +0 -0
  210. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ROADMAP.md.template +0 -0
  211. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/RUNBOOKS.md.template +0 -0
  212. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/SECURITY.md.template +0 -0
  213. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/TEST-SPEC.md.template +0 -0
  214. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/TROUBLESHOOTING.md.template +0 -0
  215. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/VENDOR-BUGS.md.template +0 -0
  216. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ci/github-actions.yml +0 -0
  217. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.fix.md +0 -0
  218. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.guard.md +0 -0
  219. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.init.md +0 -0
  220. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.review.md +0 -0
  221. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.update.md +0 -0
  222. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/test-draft.js +0 -0
  223. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/test-metrics.js +0 -0
  224. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/api-doc.test.mjs +0 -0
  225. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/api-surface.test.mjs +0 -0
  226. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/api-write.test.mjs +0 -0
  227. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/architecture.test.mjs +0 -0
  228. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/backup-failure.test.mjs +0 -0
  229. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/cdk-detection.test.mjs +0 -0
  230. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/changelog.test.mjs +0 -0
  231. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/commands.test.mjs +0 -0
  232. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/doc-quality.test.mjs +0 -0
  233. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/docs-coverage.test.mjs +0 -0
  234. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/docs-diff.test.mjs +0 -0
  235. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/docs-sync.test.mjs +0 -0
  236. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/drift.test.mjs +0 -0
  237. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/environment.test.mjs +0 -0
  238. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/freshness.test.mjs +0 -0
  239. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/frontend-deep.test.mjs +0 -0
  240. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/frontend.test.mjs +0 -0
  241. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/guard-classify.test.mjs +0 -0
  242. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/hooks.test.mjs +0 -0
  243. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/i18n.test.mjs +0 -0
  244. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/integrations.test.mjs +0 -0
  245. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/mechanical.test.mjs +0 -0
  246. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/memory-plan.test.mjs +0 -0
  247. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/metadata-sync.test.mjs +0 -0
  248. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/metrics-consistency.test.mjs +0 -0
  249. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/monorepo-scanning.test.mjs +0 -0
  250. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/multi-spec.test.mjs +0 -0
  251. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/project-type.test.mjs +0 -0
  252. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/routes-multilang.test.mjs +0 -0
  253. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/schema-sync.test.mjs +0 -0
  254. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/schemas-multilang.test.mjs +0 -0
  255. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/schemas.test.mjs +0 -0
  256. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/sections.test.mjs +0 -0
  257. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/security.test.mjs +0 -0
  258. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/shared-source.test.mjs +0 -0
  259. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/structure.test.mjs +0 -0
  260. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/sync.test.mjs +0 -0
  261. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/test-spec.test.mjs +0 -0
  262. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/todo-tracking.test.mjs +0 -0
  263. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/traceability.test.mjs +0 -0
  264. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/vscode-extension/.vscodeignore +0 -0
  265. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/vscode-extension/README.md +0 -0
  266. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/vscode-extension/extension.js +0 -0
  267. {docguard_cli-0.11.1 → docguard_cli-0.11.2}/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.11.1
9
+ version: 0.11.2
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.11.1 -->
12
+ <!-- docguard:version: 0.11.2 -->
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.11.1
10
+ version: 0.11.2
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.11.1 -->
13
+ <!-- docguard:version: 0.11.2 -->
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.11.1
9
+ version: 0.11.2
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.11.1 -->
12
+ <!-- docguard:version: 0.11.2 -->
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.11.1
9
+ version: 0.11.2
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.11.1 -->
12
+ <!-- docguard:version: 0.11.2 -->
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.11.1
7
+ version: 0.11.2
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
10
 
@@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.11.2] - 2026-05-25
11
+
12
+ 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.
13
+
14
+ ### Fixed
15
+ - **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.)
16
+ - **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.)
17
+ - **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.)
18
+ - **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.)
19
+
20
+ ### Added
21
+ - **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.)
22
+ - **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.
23
+
24
+ ### Internal
25
+ - New test file: `tests/patch-0.11.2.test.mjs` with regression coverage for B-1 (Vite intrinsics skip), B-2 (Pydantic class names, not file basename), and B-3 (literal `VITE_` not captured). **Total: 339 tests passing (was 336, +3 new).**
26
+ - No new NPM dependencies. Zero schema or config-file changes. Bumped `pyproject.toml` from `0.11.0 → 0.11.2` to re-sync the PyPI publish (the previous patch released to npm but skipped PyPI version bump).
27
+
28
+ ### Out of scope (deferred to v0.12)
29
+ - 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).
30
+
31
+ Credit: feedback from running v0.11.1 on the `wu-whatsappinbox` enterprise monorepo (audit score 98/100, 572/575 passed).
32
+
10
33
  ## [0.11.1] - 2026-05-25
11
34
 
12
35
  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/`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docguard-cli
3
- Version: 0.11.1
3
+ Version: 0.11.2
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
@@ -10,6 +10,8 @@ import { collectPackageJsons, detectDocker, grepEnvUsage, resolveSourceRoots } f
10
10
  import { parseApiReferenceDoc, compareEndpoints } from '../scanners/api-doc.mjs';
11
11
  import { resolveApiSurface } from '../validators/api-surface.mjs';
12
12
  import { collectCodeTests } from '../validators/docs-diff.mjs';
13
+ import { scanSchemasDeep } from '../scanners/schemas.mjs';
14
+ import { detectDocTools } from '../scanners/doc-tools.mjs';
13
15
 
14
16
  const IGNORE_DIRS = new Set([
15
17
  'node_modules', '.git', '.next', 'dist', 'build',
@@ -163,22 +165,17 @@ function diffEntities(dir, config = {}) {
163
165
  docEntities.add(name.toLowerCase());
164
166
  }
165
167
 
166
- // Find model/entity files in code monorepo-aware (honors config.sourceRoot/workspaces).
168
+ // Use the REAL exported entity names from scanSchemasDeep, not file basenames
169
+ // (a file `dynamoModels.ts` exports `User`/`Order`/etc. — its basename is not
170
+ // an entity). scanSchemasDeep covers JS ORMs, SQLAlchemy/Pydantic, Diesel,
171
+ // Go structs, JPA, Rails, and OpenAPI schemas.
172
+ const docTools = detectDocTools(dir);
173
+ const schemas = scanSchemasDeep(dir, {}, docTools);
167
174
  const codeEntities = new Set();
168
- const modelSubdirs = ['models', 'entities', 'schema', 'schemas', 'prisma'];
169
- const roots = resolveSourceRoots(dir, config);
170
- for (const root of roots) {
171
- for (const sub of modelSubdirs) {
172
- const modelDir = join(root, sub);
173
- if (!existsSync(modelDir)) continue;
174
- const files = getFilesRecursive(modelDir);
175
- for (const f of files) {
176
- const name = basename(f, extname(f)).toLowerCase();
177
- // Skip non-entity infrastructure/aggregation filenames.
178
- if (CODE_ENTITY_NOISE.has(name)) continue;
179
- codeEntities.add(name);
180
- }
181
- }
175
+ for (const e of (schemas.entities || [])) {
176
+ const n = String(e.name || '').toLowerCase();
177
+ if (!n || CODE_ENTITY_NOISE.has(n)) continue;
178
+ codeEntities.add(n);
182
179
  }
183
180
 
184
181
  // No code-side entity source (e.g. DynamoDB single-table design with no model
@@ -207,7 +204,8 @@ function diffEnvVars(dir, config = {}) {
207
204
 
208
205
  // Extract env var names from ENVIRONMENT.md
209
206
  const docVars = new Set();
210
- const varRegex = /`([A-Z][A-Z0-9_]{2,})`/g;
207
+ // Reject names ending in `_` (e.g. the literal prefix `VITE_` in prose).
208
+ const varRegex = /`([A-Z][A-Z0-9_]*[A-Z0-9])`/g;
211
209
  let match;
212
210
  while ((match = varRegex.exec(content)) !== null) {
213
211
  docVars.add(match[1]);
@@ -220,7 +218,7 @@ function diffEnvVars(dir, config = {}) {
220
218
  const envExamplePath = resolve(dir, envFile);
221
219
  if (existsSync(envExamplePath)) {
222
220
  const envContent = readFileSync(envExamplePath, 'utf-8');
223
- const envRegex = /^([A-Z][A-Z0-9_]+)\s*=/gm;
221
+ const envRegex = /^([A-Z][A-Z0-9_]*[A-Z0-9])\s*=/gm;
224
222
  while ((match = envRegex.exec(envContent)) !== null) {
225
223
  codeVars.add(match[1]);
226
224
  }
@@ -194,16 +194,26 @@ export function runGuard(projectDir, config, flags) {
194
194
  console.log(` ${c.yellow}⚠️ ${v.name}${c.reset} ${qBadge}${c.dim} ${v.passed}/${v.total} checks passed${c.reset}`);
195
195
  }
196
196
 
197
- if (flags.verbose || v.status === 'fail') {
197
+ // --show-failing forces enumeration of every error/warning regardless of
198
+ // overall validator status — useful when a validator passes overall
199
+ // (passed < total) without surfacing the specific failing checks.
200
+ const show = flags.verbose || flags.showFailing;
201
+ if (show || v.status === 'fail') {
198
202
  for (const err of v.errors) {
199
203
  console.log(` ${c.red}✗ ${err}${c.reset}`);
200
204
  }
201
205
  }
202
- if (flags.verbose || v.status === 'warn') {
206
+ if (show || v.status === 'warn') {
203
207
  for (const warn of v.warnings) {
204
208
  console.log(` ${c.yellow}⚠ ${warn}${c.reset}`);
205
209
  }
206
210
  }
211
+ // If a validator reports passed < total but has no errors/warnings, surface
212
+ // the gap honestly so users aren't left wondering where the deficit went.
213
+ if (v.status === 'pass' && v.total > v.passed && v.errors.length === 0 && v.warnings.length === 0) {
214
+ const gap = v.total - v.passed;
215
+ console.log(` ${c.yellow}⚠ ${gap} check(s) did not pass but emitted no message — likely a validator bug. Please file an issue.${c.reset}`);
216
+ }
207
217
  }
208
218
 
209
219
  // Summary
@@ -365,6 +365,8 @@ async function main() {
365
365
  } else if (args[i] === '--since' && args[i + 1]) {
366
366
  flags.since = args[i + 1];
367
367
  i++;
368
+ } else if (args[i] === '--show-failing') {
369
+ flags.showFailing = true;
368
370
  } else if (args[i] === '--doc' && args[i + 1]) {
369
371
  flags.doc = args[i + 1];
370
372
  i++;
@@ -54,8 +54,13 @@ export function detectAgentMode(projectDir) {
54
54
  '.specify',
55
55
  '.github/copilot-instructions.md',
56
56
  'CLAUDE.md',
57
+ 'GEMINI.md',
57
58
  '.gemini',
58
59
  '.agents',
60
+ '.antigravity',
61
+ 'ANTIGRAVITY.md',
62
+ '.kiro',
63
+ '.windsurf',
59
64
  ];
60
65
 
61
66
  for (const signal of llmSignals) {
@@ -105,7 +110,9 @@ export function detectAIAgent(projectDir) {
105
110
  { signal: '.claude', agent: 'claude' },
106
111
  { signal: 'CLAUDE.md', agent: 'claude' },
107
112
  { signal: '.gemini', agent: 'gemini' },
108
- { signal: '.agents', agent: 'agy' }, // Antigravity
113
+ { signal: '.agents', agent: 'agy' }, // Antigravity (Spec Kit convention)
114
+ { signal: '.antigravity', agent: 'agy' }, // Antigravity (alt convention)
115
+ { signal: 'ANTIGRAVITY.md', agent: 'agy' }, // Antigravity rules file
109
116
  { signal: '.github/copilot-instructions.md', agent: 'copilot' },
110
117
  { signal: '.windsurf', agent: 'windsurf' },
111
118
  { signal: '.codex', agent: 'codex' },
@@ -210,11 +210,16 @@ export function grepEnvUsage(projectDir, config = {}) {
210
210
  const roots = resolveSourceRoots(projectDir, config);
211
211
  const seen = new Set();
212
212
 
213
+ // Require names to start with a letter and END with a letter/digit (NOT an
214
+ // underscore) — fixes "VITE_" being captured as a literal env var name.
215
+ const NAME = '([A-Z][A-Z0-9_]*[A-Z0-9])';
213
216
  const patterns = [
214
- /process\.env\.([A-Z][A-Z0-9_]+)/g,
215
- /process\.env\[\s*['"]([A-Z][A-Z0-9_]+)['"]\s*\]/g,
216
- /import\.meta\.env\.([A-Z][A-Z0-9_]+)/g,
217
+ new RegExp(`process\\.env\\.${NAME}`, 'g'),
218
+ new RegExp(`process\\.env\\[\\s*['"]${NAME}['"]\\s*\\]`, 'g'),
219
+ new RegExp(`import\\.meta\\.env\\.${NAME}`, 'g'),
217
220
  ];
221
+ // Vite injects these at build time; they are not user-set env vars.
222
+ const VITE_INTRINSICS = new Set(['DEV', 'PROD', 'MODE', 'BASE_URL', 'SSR']);
218
223
 
219
224
  const visit = (filePath) => {
220
225
  if (seen.has(filePath)) return;
@@ -225,10 +230,16 @@ export function grepEnvUsage(projectDir, config = {}) {
225
230
  let content;
226
231
  try { content = readFileSync(filePath, 'utf-8'); } catch { return; }
227
232
  if (!content.includes('env')) return;
228
- for (const re of patterns) {
233
+ // patterns[2] is the import.meta.env one — its matches are Vite-injected
234
+ // when the name is an intrinsic, and must not be reported as user env vars.
235
+ for (let i = 0; i < patterns.length; i++) {
229
236
  let m;
230
- const rx = new RegExp(re.source, 'g');
231
- while ((m = rx.exec(content)) !== null) names.add(m[1]);
237
+ const rx = new RegExp(patterns[i].source, 'g');
238
+ const isViteSource = i === 2;
239
+ while ((m = rx.exec(content)) !== null) {
240
+ if (isViteSource && VITE_INTRINSICS.has(m[1])) continue;
241
+ names.add(m[1]);
242
+ }
232
243
  }
233
244
  };
234
245
 
@@ -422,9 +422,12 @@ function checkReadmeSections(projectDir) {
422
422
  }
423
423
  }
424
424
 
425
+ // Recommended sections are a BONUS — present = +1 to both passed and total,
426
+ // missing = no-op. Counting missing recommended toward `total` without a
427
+ // corresponding warning would be a silent fail (caught by B-4 nudge).
425
428
  for (const section of recommendedSections) {
426
- total++;
427
429
  if (section.patterns.some(p => lowerContent.includes(p))) {
430
+ total++;
428
431
  passed++;
429
432
  }
430
433
  }
@@ -41,13 +41,19 @@ export function validateEnvironment(projectDir, config) {
41
41
  // CLI/library projects that declare no env vars skip this.)
42
42
  if (ptc.needsEnvVars !== false) {
43
43
  const documented = new Set();
44
- const varRe = /`([A-Z][A-Z0-9_]{2,})`/g;
44
+ // Require the matched name to end with a letter/digit — prevents prose-only
45
+ // tokens like `VITE_` (the convention prefix) from being treated as a real
46
+ // variable name.
47
+ const varRe = /`([A-Z][A-Z0-9_]*[A-Z0-9])`/g;
45
48
  let m;
46
- while ((m = varRe.exec(content)) !== null) documented.add(m[1]);
49
+ while ((m = varRe.exec(content)) !== null) {
50
+ if (m[1].length < 3) continue; // 'OK' / 'ID' etc. are too short to be env var refs
51
+ documented.add(m[1]);
52
+ }
47
53
  for (const envFile of ['.env.example', '.env.template']) {
48
54
  const p = resolve(projectDir, envFile);
49
55
  if (!existsSync(p)) continue;
50
- const re = /^([A-Z][A-Z0-9_]+)\s*=/gm;
56
+ const re = /^([A-Z][A-Z0-9_]*[A-Z0-9])\s*=/gm;
51
57
  const ex = readFileSync(p, 'utf-8');
52
58
  let em;
53
59
  while ((em = re.exec(ex)) !== null) documented.add(em[1]);
@@ -3,7 +3,7 @@ schema_version: "1.0"
3
3
  extension:
4
4
  id: "docguard"
5
5
  name: "DocGuard — CDD Enforcement"
6
- version: "0.11.1"
6
+ version: "0.11.2"
7
7
  description: "Canonical-Driven Development enforcement as a true spec-kit extension. LLM-first design with 19 automated validators, 4 AI behavior skills, spec-kit skill chaining, and workflow hooks. Zero NPM runtime dependencies."
8
8
  author: "Ricardo Accioly"
9
9
  repository: "https://github.com/raccioly/docguard"
@@ -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.11.1
9
+ version: 0.11.2
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.11.1 -->
12
+ <!-- docguard:version: 0.11.2 -->
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.11.1
10
+ version: 0.11.2
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.11.1 -->
13
+ <!-- docguard:version: 0.11.2 -->
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.11.1
9
+ version: 0.11.2
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.11.1 -->
12
+ <!-- docguard:version: 0.11.2 -->
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.11.1
9
+ version: 0.11.2
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.11.1 -->
12
+ <!-- docguard:version: 0.11.2 -->
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.11.1
7
+ version: 0.11.2
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
10
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docguard-cli",
3
- "version": "0.11.1",
3
+ "version": "0.11.2",
4
4
  "description": "The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "docguard-cli"
7
- version = "0.11.1"
7
+ version = "0.11.2"
8
8
  description = "The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. Zero dependencies."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * v0.11.2 patch coverage — locks in the bug fixes from the wu-whatsappinbox feedback.
3
+ *
4
+ * B-1: Vite intrinsics (DEV/PROD/MODE/BASE_URL/SSR) on `import.meta.env.*`
5
+ * must NOT be reported as user env vars.
6
+ * B-2: diff Data Entities uses real exported names (not file basenames).
7
+ * B-3: literal env-var-prefix tokens like `VITE_` must not be captured.
8
+ */
9
+
10
+ import { describe, it, beforeEach, afterEach } from 'node:test';
11
+ import { strict as assert } from 'node:assert';
12
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+ import { tmpdir } from 'node:os';
15
+
16
+ import { grepEnvUsage } from '../cli/shared-source.mjs';
17
+ import { validateEnvironment } from '../cli/validators/environment.mjs';
18
+
19
+ function make(files) {
20
+ const dir = mkdtempSync(join(tmpdir(), 'docguard-patch-'));
21
+ for (const [rel, content] of Object.entries(files)) {
22
+ const full = join(dir, rel);
23
+ mkdirSync(join(full, '..'), { recursive: true });
24
+ writeFileSync(full, content);
25
+ }
26
+ return dir;
27
+ }
28
+
29
+ describe('v0.11.2 — bug fixes from wu-whatsappinbox feedback', () => {
30
+ let dir;
31
+ afterEach(() => { if (dir) rmSync(dir, { recursive: true, force: true }); });
32
+
33
+ it('B-1: skips Vite intrinsics on import.meta.env (DEV / PROD / MODE / BASE_URL / SSR)', () => {
34
+ dir = make({
35
+ 'package.json': JSON.stringify({ dependencies: { vite: '^7', react: '^19' } }),
36
+ 'src/config.ts': `
37
+ const dev = import.meta.env.DEV;
38
+ const prod = import.meta.env.PROD;
39
+ const mode = import.meta.env.MODE;
40
+ const base = import.meta.env.BASE_URL;
41
+ const ssr = import.meta.env.SSR;
42
+ const apiUrl = import.meta.env.VITE_API_URL; // user-set → keep
43
+ const dynaTable = process.env.DYNAMO_TABLE_NAME; // user-set → keep
44
+ `,
45
+ });
46
+ const names = grepEnvUsage(dir, { sourceRoot: 'src' });
47
+ for (const intrinsic of ['DEV', 'PROD', 'MODE', 'BASE_URL', 'SSR']) {
48
+ assert.ok(!names.has(intrinsic), `${intrinsic} must not be reported`);
49
+ }
50
+ assert.ok(names.has('VITE_API_URL'), 'real user env var still captured');
51
+ assert.ok(names.has('DYNAMO_TABLE_NAME'));
52
+ });
53
+
54
+ it('B-3: literal `VITE_` (convention prefix in prose) is NOT captured as a var name', () => {
55
+ // process.env.VITE_ is syntactically illegal in real code, so test the env-doc
56
+ // parser which the user actually saw flag `VITE_` from prose `` `VITE_` ``.
57
+ dir = make({
58
+ 'package.json': JSON.stringify({ dependencies: { vite: '^7' } }),
59
+ 'docs-canonical/ENVIRONMENT.md': [
60
+ '# Environment',
61
+ '## Prerequisites',
62
+ '## Environment Variables',
63
+ 'All frontend variables MUST start with `VITE_` (Vite convention).',
64
+ 'The backend reads `DYNAMO_TABLE_NAME` from the environment.',
65
+ ].join('\n'),
66
+ });
67
+ const result = validateEnvironment(dir, { projectTypeConfig: { needsEnvVars: true } });
68
+ // Only the real var should be tracked; the `VITE_` literal prefix must be ignored.
69
+ // The validator's warning text would mention it by name — assert it does NOT.
70
+ assert.ok(!result.warnings.some(w => /\bVITE_\b/.test(w)),
71
+ 'VITE_ prefix should never appear as a flagged variable name');
72
+ });
73
+
74
+ it('B-2: diff Data Entities uses real exported names (Pydantic), not file basenames', async () => {
75
+ // Construct a project whose model FILE is named in a way that would mislead
76
+ // the old filename-stem heuristic. Pydantic class names inside the file are
77
+ // the real entities.
78
+ dir = make({
79
+ 'package.json': JSON.stringify({ name: 'svc' }),
80
+ 'pyproject.toml': '[project]\nname="svc"\ndependencies = ["pydantic"]\n',
81
+ // Misleading filename: "models.py" basename would naively read "models".
82
+ 'api/models.py': `
83
+ from pydantic import BaseModel
84
+
85
+ class User(BaseModel):
86
+ id: int
87
+ email: str
88
+
89
+ class Order(BaseModel):
90
+ id: int
91
+ user_id: int
92
+ `,
93
+ 'docs-canonical/DATA-MODEL.md': '# Data Model\n### User\n### Order\n',
94
+ });
95
+ // Drive the same code-side scan diff.mjs uses (scanSchemasDeep).
96
+ const { scanSchemasDeep } = await import('../cli/scanners/schemas.mjs');
97
+ const r = scanSchemasDeep(dir, {}, { openapi: { found: false } });
98
+ const names = r.entities.map(e => e.name).sort();
99
+ assert.ok(names.includes('User'));
100
+ assert.ok(names.includes('Order'));
101
+ assert.ok(!names.includes('models'), 'file basename must NOT be reported as an entity');
102
+ });
103
+ });
File without changes
File without changes
File without changes