docguard-cli 0.41.6__tar.gz → 0.41.7__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 (634) hide show
  1. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/docguard-fix/SKILL.md +2 -2
  2. {docguard_cli-0.41.6/extensions/spec-kit-docguard → docguard_cli-0.41.7/.agent}/skills/docguard-guard/SKILL.md +2 -2
  3. {docguard_cli-0.41.6/extensions/spec-kit-docguard → docguard_cli-0.41.7/.agent}/skills/docguard-review/SKILL.md +2 -2
  4. {docguard_cli-0.41.6/extensions/spec-kit-docguard → docguard_cli-0.41.7/.agent}/skills/docguard-score/SKILL.md +2 -2
  5. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/docguard-sync/SKILL.md +2 -2
  6. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CHANGELOG.md +44 -0
  7. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/PKG-INFO +1 -1
  8. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/init.mjs +83 -1
  9. docguard_cli-0.41.7/cli/shared-doc-roles.mjs +246 -0
  10. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/test-spec.mjs +14 -4
  11. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/todo-tracking.mjs +16 -6
  12. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/extension.yml +1 -1
  13. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/skills/docguard-fix/SKILL.md +2 -2
  14. {docguard_cli-0.41.6/.agent → docguard_cli-0.41.7/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +2 -2
  15. {docguard_cli-0.41.6/.agent → docguard_cli-0.41.7/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
  16. {docguard_cli-0.41.6/.agent → docguard_cli-0.41.7/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
  17. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
  18. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +1 -1
  19. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +1 -1
  20. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/package-lock.json +2 -2
  21. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/package.json +1 -1
  22. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/pyproject.toml +1 -1
  23. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/server.json +2 -2
  24. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ci/github-actions.yml +1 -1
  25. docguard_cli-0.41.7/tests/canonical-layout-detection.test.mjs +93 -0
  26. docguard_cli-0.41.7/tests/doc-name-detection.test.mjs +87 -0
  27. docguard_cli-0.41.6/cli/shared-doc-roles.mjs +0 -102
  28. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/architect.md +0 -0
  29. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.fix.md +0 -0
  30. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.guard.md +0 -0
  31. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.review.md +0 -0
  32. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.score.md +0 -0
  33. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.analyze.md +0 -0
  34. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.checklist.md +0 -0
  35. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.clarify.md +0 -0
  36. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.constitution.md +0 -0
  37. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.implement.md +0 -0
  38. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.plan.md +0 -0
  39. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.specify.md +0 -0
  40. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.tasks.md +0 -0
  41. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.taskstoissues.md +0 -0
  42. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-analyze/SKILL.md +0 -0
  43. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-checklist/SKILL.md +0 -0
  44. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-clarify/SKILL.md +0 -0
  45. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-constitution/SKILL.md +0 -0
  46. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-implement/SKILL.md +0 -0
  47. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-plan/SKILL.md +0 -0
  48. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-specify/SKILL.md +0 -0
  49. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-tasks/SKILL.md +0 -0
  50. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
  51. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.claude/rules/openwolf.md +0 -0
  52. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.claude/settings.json +0 -0
  53. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguard-archive.json +0 -0
  54. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguard-specs.json +0 -0
  55. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguard.json +0 -0
  56. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguardignore +0 -0
  57. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  58. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
  59. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  60. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  61. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/dependabot.yml +0 -0
  62. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/speckit-submission.py +0 -0
  63. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/sync-release-version.mjs +0 -0
  64. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/upsert-catalog-reminder.sh +0 -0
  65. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/validate-release-candidate.mjs +0 -0
  66. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/auto-merge.yml +0 -0
  67. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/ci.yml +0 -0
  68. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/jules-triage.yml +0 -0
  69. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/release.yml +0 -0
  70. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/scheduled-release.yml +0 -0
  71. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/supply-chain.yml +0 -0
  72. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/sync-speckit-catalog.yml +0 -0
  73. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.gitignore +0 -0
  74. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules/bolt.md +0 -0
  75. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules/palette.md +0 -0
  76. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules/sentinel.md +0 -0
  77. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules-setup.sh +0 -0
  78. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.npmignore +0 -0
  79. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.npmrc +0 -0
  80. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.pre-commit-hooks.yaml +0 -0
  81. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
  82. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
  83. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog-metadata.json +0 -0
  84. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog.json +0 -0
  85. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/init-options.json +0 -0
  86. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/memory/constitution.md +0 -0
  87. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  88. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/common.sh +0 -0
  89. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/create-new-feature.sh +0 -0
  90. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/setup-plan.sh +0 -0
  91. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/update-agent-context.sh +0 -0
  92. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/agent-file-template.md +0 -0
  93. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/checklist-template.md +0 -0
  94. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/constitution-template.md +0 -0
  95. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/plan-template.md +0 -0
  96. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/spec-template.md +0 -0
  97. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/tasks-template.md +0 -0
  98. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/AGENTS.md +0 -0
  99. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CLAUDE.md +0 -0
  100. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CODE_OF_CONDUCT.md +0 -0
  101. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/COMPARISONS.md +0 -0
  102. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CONTRIBUTING.md +0 -0
  103. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/DRIFT-LOG.md +0 -0
  104. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/Dockerfile +0 -0
  105. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/LICENSE +0 -0
  106. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/PHILOSOPHY.md +0 -0
  107. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/PRIVACY.md +0 -0
  108. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/README.es.md +0 -0
  109. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/README.md +0 -0
  110. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/README.pt-BR.md +0 -0
  111. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/ROADMAP.md +0 -0
  112. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/SECURITY.md +0 -0
  113. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/STANDARD.md +0 -0
  114. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/SUPPLY-CHAIN-AUDIT.md +0 -0
  115. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/SUPPORT.md +0 -0
  116. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/VALIDATION.md +0 -0
  117. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/action.yml +0 -0
  118. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/bin/docguard +0 -0
  119. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/demo.gif +0 -0
  120. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/demo.tape +0 -0
  121. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/docguard-logo.png +0 -0
  122. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/.docguard-specs.json +0 -0
  123. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/.docguard.json +0 -0
  124. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/AGENTS.md +0 -0
  125. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/CHANGELOG.md +0 -0
  126. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/DRIFT-LOG.md +0 -0
  127. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/docs-canonical/REQUIREMENTS.md +0 -0
  128. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/package.json +0 -0
  129. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/specs/001-retired-timeout/spec.md +0 -0
  130. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/specs/002-timeout-options/spec.md +0 -0
  131. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/src/options.mjs +0 -0
  132. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/tests/options.test.mjs +0 -0
  133. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/.docguard-specs.json +0 -0
  134. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/.docguard.json +0 -0
  135. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/AGENTS.md +0 -0
  136. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/CHANGELOG.md +0 -0
  137. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/DRIFT-LOG.md +0 -0
  138. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/config_loader.py +0 -0
  139. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/docs-canonical/SECURITY.md +0 -0
  140. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/pyproject.toml +0 -0
  141. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/specs/001-safe-config/spec.md +0 -0
  142. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/tests/test_config_loader.py +0 -0
  143. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/.docguard-specs.json +0 -0
  144. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/.docguard.json +0 -0
  145. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/AGENTS.md +0 -0
  146. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/CHANGELOG.md +0 -0
  147. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/DRIFT-LOG.md +0 -0
  148. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/docs-canonical/REQUIREMENTS.md +0 -0
  149. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/package.json +0 -0
  150. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/specs/001-status-aliases/spec.md +0 -0
  151. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/src/status.mjs +0 -0
  152. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/tests/status.test.mjs +0 -0
  153. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/hidden/option-migration/evaluate.mjs +0 -0
  154. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/hidden/python-config/evaluate.py +0 -0
  155. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/hidden/status-alias/evaluate.mjs +0 -0
  156. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/manifest.json +0 -0
  157. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/reference/option-migration/options.mjs +0 -0
  158. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/reference/python-config/config_loader.py +0 -0
  159. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/reference/status-alias/status.mjs +0 -0
  160. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/results/README.md +0 -0
  161. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/results/observed-v1.json +0 -0
  162. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/run.mjs +0 -0
  163. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/baseline.json +0 -0
  164. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/corpus.json +0 -0
  165. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/.docguardignore +0 -0
  166. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/.gitignore +0 -0
  167. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/package.json +0 -0
  168. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/src/generated-client/config.js +0 -0
  169. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/go-todo-control/ROADMAP.md +0 -0
  170. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/go-todo-control/app.go +0 -0
  171. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/go-todo-control/go.mod +0 -0
  172. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/js-security-control/package.json +0 -0
  173. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/js-security-control/src/config.js +0 -0
  174. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/.gitignore +0 -0
  175. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/package.json +0 -0
  176. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/packages/auth/package.json +0 -0
  177. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/packages/auth/src/config.ts +0 -0
  178. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-security-control/.gitignore +0 -0
  179. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-security-control/app.py +0 -0
  180. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-security-control/pyproject.toml +0 -0
  181. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-unsupported/app.py +0 -0
  182. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-unsupported/pyproject.toml +0 -0
  183. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/sparse-doc-control/DRIFT-LOG.md +0 -0
  184. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/sparse-doc-control/docs-canonical/ARCHITECTURE.md +0 -0
  185. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/sparse-doc-control/package.json +0 -0
  186. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/ts-security-control/.gitignore +0 -0
  187. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/ts-security-control/package.json +0 -0
  188. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/ts-security-control/src/config.ts +0 -0
  189. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/compare.mjs +0 -0
  190. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/manifest.mjs +0 -0
  191. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/metrics.mjs +0 -0
  192. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/runner.mjs +0 -0
  193. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/run.mjs +0 -0
  194. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/assessment.mjs +0 -0
  195. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/agent.mjs +0 -0
  196. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/agents.mjs +0 -0
  197. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/badge.mjs +0 -0
  198. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/ci.mjs +0 -0
  199. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/demo.mjs +0 -0
  200. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/diagnose.mjs +0 -0
  201. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/diff.mjs +0 -0
  202. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/explain.mjs +0 -0
  203. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/feedback.mjs +0 -0
  204. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/fix.mjs +0 -0
  205. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/generate.mjs +0 -0
  206. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/guard.mjs +0 -0
  207. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/hooks.mjs +0 -0
  208. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/impact.mjs +0 -0
  209. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/llms.mjs +0 -0
  210. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/mcp.mjs +0 -0
  211. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/memory.mjs +0 -0
  212. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/publish.mjs +0 -0
  213. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/reconcile.mjs +0 -0
  214. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/report.mjs +0 -0
  215. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/retire.mjs +0 -0
  216. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/score.mjs +0 -0
  217. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/setup.mjs +0 -0
  218. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/specs.mjs +0 -0
  219. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/sync-tests.mjs +0 -0
  220. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/sync.mjs +0 -0
  221. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/trace.mjs +0 -0
  222. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/upgrade.mjs +0 -0
  223. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/verify.mjs +0 -0
  224. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/watch.mjs +0 -0
  225. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/config.mjs +0 -0
  226. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/docguard.mjs +0 -0
  227. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/ensure-skills.mjs +0 -0
  228. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/adapters.mjs +0 -0
  229. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/evaluate.mjs +0 -0
  230. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/manifest.mjs +0 -0
  231. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/markdown.mjs +0 -0
  232. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/python-literal.mjs +0 -0
  233. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/feedback-fixture.mjs +0 -0
  234. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/findings.mjs +0 -0
  235. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/release-pr-policy.mjs +0 -0
  236. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/repository-root.mjs +0 -0
  237. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/agent-readability.mjs +0 -0
  238. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/api-doc.mjs +0 -0
  239. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/cdk.mjs +0 -0
  240. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/doc-tools.mjs +0 -0
  241. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/document-lifecycle.mjs +0 -0
  242. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/frontend.mjs +0 -0
  243. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/iac.mjs +0 -0
  244. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/instruction-audit.mjs +0 -0
  245. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/integrations.mjs +0 -0
  246. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/inventory.mjs +0 -0
  247. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/js-ast.mjs +0 -0
  248. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/lifecycle-context.mjs +0 -0
  249. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/memory-plan.mjs +0 -0
  250. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/project-type.mjs +0 -0
  251. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/py-ast.mjs +0 -0
  252. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/reconciliation.mjs +0 -0
  253. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/requirement-evidence.mjs +0 -0
  254. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/retirement-manifest.mjs +0 -0
  255. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/routes.mjs +0 -0
  256. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/schemas.mjs +0 -0
  257. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/semantic-claims.mjs +0 -0
  258. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/spec-registry.mjs +0 -0
  259. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/speckit.mjs +0 -0
  260. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/task-context.mjs +0 -0
  261. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-diff.mjs +0 -0
  262. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-git.mjs +0 -0
  263. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-ignore.mjs +0 -0
  264. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-ir.mjs +0 -0
  265. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-requirements.mjs +0 -0
  266. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-source.mjs +0 -0
  267. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-sync-scope.mjs +0 -0
  268. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-trace-patterns.mjs +0 -0
  269. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-validator-surface.mjs +0 -0
  270. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared.mjs +0 -0
  271. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validator-coverage.mjs +0 -0
  272. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validator-markers.mjs +0 -0
  273. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/api-doc-smells.mjs +0 -0
  274. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/api-surface.mjs +0 -0
  275. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/architecture.mjs +0 -0
  276. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/canonical-sync.mjs +0 -0
  277. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/changelog.mjs +0 -0
  278. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/cross-reference.mjs +0 -0
  279. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/diff-suspicion.mjs +0 -0
  280. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/doc-quality.mjs +0 -0
  281. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/docs-coverage.mjs +0 -0
  282. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/docs-diff.mjs +0 -0
  283. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/docs-sync.mjs +0 -0
  284. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/document-lifecycle.mjs +0 -0
  285. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/drift.mjs +0 -0
  286. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/environment.mjs +0 -0
  287. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/evidence.mjs +0 -0
  288. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/freshness.mjs +0 -0
  289. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/generated-staleness.mjs +0 -0
  290. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/metadata-sync.mjs +0 -0
  291. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/metrics-consistency.mjs +0 -0
  292. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/reference-existence.mjs +0 -0
  293. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/schema-sync.mjs +0 -0
  294. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/security.mjs +0 -0
  295. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/spec-kit.mjs +0 -0
  296. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/spec-registry.mjs +0 -0
  297. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/structure.mjs +0 -0
  298. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/surface-sync.mjs +0 -0
  299. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/traceability.mjs +0 -0
  300. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/api-reference.mjs +0 -0
  301. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/baseline.mjs +0 -0
  302. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/doc-generators.mjs +0 -0
  303. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/file-transaction.mjs +0 -0
  304. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/fix-memory.mjs +0 -0
  305. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/generate-io.mjs +0 -0
  306. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/history.mjs +0 -0
  307. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/junit.mjs +0 -0
  308. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/mechanical.mjs +0 -0
  309. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/sarif.mjs +0 -0
  310. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/sections.mjs +0 -0
  311. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/spec-outcomes.mjs +0 -0
  312. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.fix.md +0 -0
  313. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.guard.md +0 -0
  314. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.review.md +0 -0
  315. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.score.md +0 -0
  316. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/fastify.json +0 -0
  317. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/generic.json +0 -0
  318. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/nextjs.json +0 -0
  319. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/python.json +0 -0
  320. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docguard_cli/__init__.py +0 -0
  321. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docguard_cli/wrapper.py +0 -0
  322. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/ai-integration.md +0 -0
  323. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/commands.md +0 -0
  324. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/configuration.md +0 -0
  325. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/doc-sections.md +0 -0
  326. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/faq.md +0 -0
  327. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/installation.md +0 -0
  328. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/profiles.md +0 -0
  329. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/quickstart.md +0 -0
  330. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/ARCHITECTURE.md +0 -0
  331. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/CI-RECIPES.md +0 -0
  332. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/DATA-MODEL.md +0 -0
  333. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/ENVIRONMENT.md +0 -0
  334. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/REQUIREMENTS.md +0 -0
  335. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/SECURITY.md +0 -0
  336. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/TEST-SPEC.md +0 -0
  337. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/01-express-api/README.md +0 -0
  338. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/01-express-api/package.json +0 -0
  339. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/01-express-api/server.js +0 -0
  340. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/README.md +0 -0
  341. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/app.py +0 -0
  342. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
  343. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/requirements.txt +0 -0
  344. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
  345. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/README.md +0 -0
  346. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
  347. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
  348. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/package.json +0 -0
  349. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/src/index.js +0 -0
  350. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/tasks.json +0 -0
  351. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
  352. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/README.md +0 -0
  353. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/LICENSE +0 -0
  354. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/README.md +0 -0
  355. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/brief.md +0 -0
  356. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/complete.md +0 -0
  357. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
  358. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/fix.md +0 -0
  359. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/generate.md +0 -0
  360. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/guard.md +0 -0
  361. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/init.md +0 -0
  362. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/preflight.md +0 -0
  363. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/review.md +0 -0
  364. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/score.md +0 -0
  365. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/sync.md +0 -0
  366. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/trace.md +0 -0
  367. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
  368. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
  369. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
  370. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
  371. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
  372. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/glama.json +0 -0
  373. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/llms-full.txt +0 -0
  374. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/llms.txt +0 -0
  375. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/mcpb/README.md +0 -0
  376. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/mcpb/manifest.template.json +0 -0
  377. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/packaging/homebrew/docguard.rb +0 -0
  378. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/packaging/submissions.md +0 -0
  379. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-agent-context-benchmark.schema.json +0 -0
  380. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-agent-context-result.schema.json +0 -0
  381. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-benchmark.schema.json +0 -0
  382. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-config.schema.json +0 -0
  383. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-evidence.schema.json +0 -0
  384. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-feedback-fixture.schema.json +0 -0
  385. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-specs.schema.json +0 -0
  386. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-task-context.schema.json +0 -0
  387. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/smithery.yaml +0 -0
  388. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/006-document-lifecycle/plan.md +0 -0
  389. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/006-document-lifecycle/spec.md +0 -0
  390. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/006-document-lifecycle/tasks.md +0 -0
  391. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/007-precision-evidence-loop/plan.md +0 -0
  392. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/007-precision-evidence-loop/spec.md +0 -0
  393. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/007-precision-evidence-loop/tasks.md +0 -0
  394. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/plan.md +0 -0
  395. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/research.md +0 -0
  396. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/spec.md +0 -0
  397. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/tasks.md +0 -0
  398. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/plan.md +0 -0
  399. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/research.md +0 -0
  400. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/spec.md +0 -0
  401. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/tasks.md +0 -0
  402. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/plan.md +0 -0
  403. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/research.md +0 -0
  404. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/spec.md +0 -0
  405. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/tasks.md +0 -0
  406. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/011-tokenless-scheduled-releases/plan.md +0 -0
  407. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/011-tokenless-scheduled-releases/spec.md +0 -0
  408. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/011-tokenless-scheduled-releases/tasks.md +0 -0
  409. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/012-adoption-workflow-integrity/spec.md +0 -0
  410. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ADR.md.template +0 -0
  411. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/AGENTS.md.template +0 -0
  412. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ARCHITECTURE.md.template +0 -0
  413. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/CHANGELOG.md.template +0 -0
  414. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/CURRENT-STATE.md.template +0 -0
  415. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/DATA-MODEL.md.template +0 -0
  416. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/DEPLOYMENT.md.template +0 -0
  417. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/DRIFT-LOG.md.template +0 -0
  418. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ENVIRONMENT.md.template +0 -0
  419. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/KNOWN-GOTCHAS.md.template +0 -0
  420. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/REQUIREMENTS.md.template +0 -0
  421. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ROADMAP.md.template +0 -0
  422. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/RUNBOOKS.md.template +0 -0
  423. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/SECURITY.md.template +0 -0
  424. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/TEST-SPEC.md.template +0 -0
  425. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/TROUBLESHOOTING.md.template +0 -0
  426. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/VENDOR-BUGS.md.template +0 -0
  427. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ci/gitlab-component.yml +0 -0
  428. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.fix.md +0 -0
  429. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.guard.md +0 -0
  430. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.init.md +0 -0
  431. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.review.md +0 -0
  432. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.update.md +0 -0
  433. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/.docguard.json +0 -0
  434. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/.env.example +0 -0
  435. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/AGENTS.md +0 -0
  436. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/CHANGELOG.md +0 -0
  437. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/DRIFT-LOG.md +0 -0
  438. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/README.md +0 -0
  439. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
  440. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
  441. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
  442. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
  443. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
  444. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
  445. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/package.json +0 -0
  446. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/api.mjs +0 -0
  447. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/notifier.mjs +0 -0
  448. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/scheduler.mjs +0 -0
  449. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/worker.mjs +0 -0
  450. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/evidence-manifest.json +0 -0
  451. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/feedback-fixture.json +0 -0
  452. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/testguard.claims.json +0 -0
  453. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/adoption-workflow.test.mjs +0 -0
  454. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent-context-benchmark.test.mjs +0 -0
  455. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent-evidence.test.mjs +0 -0
  456. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent-readability.test.mjs +0 -0
  457. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent.test.mjs +0 -0
  458. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agents-check-readonly.test.mjs +0 -0
  459. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agents-command.test.mjs +0 -0
  460. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agents-sync.test.mjs +0 -0
  461. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/anchor-autofix.test.mjs +0 -0
  462. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-authority-precision.test.mjs +0 -0
  463. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-doc-smells.test.mjs +0 -0
  464. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-doc.test.mjs +0 -0
  465. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-surface.test.mjs +0 -0
  466. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-write.test.mjs +0 -0
  467. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/architecture.test.mjs +0 -0
  468. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/archive.test.mjs +0 -0
  469. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/assessment.test.mjs +0 -0
  470. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/b7-node-env-symmetry.test.mjs +0 -0
  471. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/backup-failure.test.mjs +0 -0
  472. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/badge.test.mjs +0 -0
  473. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/baseline.test.mjs +0 -0
  474. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/benchmark-manifest.test.mjs +0 -0
  475. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/benchmark-metrics.test.mjs +0 -0
  476. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/benchmark-runner.test.mjs +0 -0
  477. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/canonical-docs-nested-phase2.test.mjs +0 -0
  478. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/canonical-docs-nested.test.mjs +0 -0
  479. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/canonical-sync.test.mjs +0 -0
  480. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/catalog-submission.test.mjs +0 -0
  481. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/cdk-detection.test.mjs +0 -0
  482. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/changed-only-scoping.test.mjs +0 -0
  483. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/changed-only.test.mjs +0 -0
  484. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/changelog.test.mjs +0 -0
  485. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/check-coverage.test.mjs +0 -0
  486. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/ci-reproducibility.test.mjs +0 -0
  487. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/ci-scaffolder.test.mjs +0 -0
  488. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/commands.test.mjs +0 -0
  489. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/cross-reference.test.mjs +0 -0
  490. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/demo-command.test.mjs +0 -0
  491. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/diagnose-review-guidance.test.mjs +0 -0
  492. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/diff-suspicion.test.mjs +0 -0
  493. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-quality.test.mjs +0 -0
  494. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-role-boundaries.test.mjs +0 -0
  495. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-role-mapping.test.mjs +0 -0
  496. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-section-synonyms.test.mjs +0 -0
  497. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docguard-config-schema.test.mjs +0 -0
  498. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docguardignore.test.mjs +0 -0
  499. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-coverage-reference-evidence.test.mjs +0 -0
  500. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-coverage-scope.test.mjs +0 -0
  501. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-coverage.test.mjs +0 -0
  502. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-diff.test.mjs +0 -0
  503. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-sync.test.mjs +0 -0
  504. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/document-lifecycle.test.mjs +0 -0
  505. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/drift.test.mjs +0 -0
  506. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/ensure-skills-idempotent.test.mjs +0 -0
  507. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/env-schema-detection.test.mjs +0 -0
  508. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/environment.test.mjs +0 -0
  509. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-adapters.test.mjs +0 -0
  510. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-integration.test.mjs +0 -0
  511. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-manifest.test.mjs +0 -0
  512. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-python-literal.test.mjs +0 -0
  513. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/explain-coverage.test.mjs +0 -0
  514. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/feedback-contributions.test.mjs +0 -0
  515. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/feedback-fixture.test.mjs +0 -0
  516. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-context-precision.test.mjs +0 -0
  517. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-diff-precision.test.mjs +0 -0
  518. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-0415.test.mjs +0 -0
  519. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-2-cli.test.mjs +0 -0
  520. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-3-deferred.test.mjs +0 -0
  521. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-3.test.mjs +0 -0
  522. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-review-clarity.test.mjs +0 -0
  523. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/file-transaction.test.mjs +0 -0
  524. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/finding-severity-config.test.mjs +0 -0
  525. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fix-memory.test.mjs +0 -0
  526. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fix-suppression.test.mjs +0 -0
  527. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fixture-projects.test.mjs +0 -0
  528. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fixtures/release-workflow-probe.json +0 -0
  529. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/freshness.test.mjs +0 -0
  530. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/frontend-deep.test.mjs +0 -0
  531. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/frontend.test.mjs +0 -0
  532. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/generate-io.test.mjs +0 -0
  533. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/generated-staleness.test.mjs +0 -0
  534. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/guard-classify.test.mjs +0 -0
  535. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/guard-no-throw.test.mjs +0 -0
  536. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/history.test.mjs +0 -0
  537. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/hook-fail-open.test.mjs +0 -0
  538. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/hooks-contract.test.mjs +0 -0
  539. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/hooks.test.mjs +0 -0
  540. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/i18n.test.mjs +0 -0
  541. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/impact.test.mjs +0 -0
  542. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/init-smart-detection.test.mjs +0 -0
  543. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/instruction-audit.test.mjs +0 -0
  544. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/integrations.test.mjs +0 -0
  545. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/inventory.test.mjs +0 -0
  546. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/js-ast.test.mjs +0 -0
  547. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/junit.test.mjs +0 -0
  548. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/llms-full-pack.test.mjs +0 -0
  549. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mapped-writers.test.mjs +0 -0
  550. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mcp-http.test.mjs +0 -0
  551. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mcp.test.mjs +0 -0
  552. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mechanical.test.mjs +0 -0
  553. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/memory-plan.test.mjs +0 -0
  554. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/metadata-sync.test.mjs +0 -0
  555. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/metrics-consistency.test.mjs +0 -0
  556. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/metrics-dedup.test.mjs +0 -0
  557. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/monorepo-scanning.test.mjs +0 -0
  558. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/multi-spec.test.mjs +0 -0
  559. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/npm-pack-smoke.test.mjs +0 -0
  560. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/nudge-hook.test.mjs +0 -0
  561. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/openapi-parse-honesty.test.mjs +0 -0
  562. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/patch-0.11.2.test.mjs +0 -0
  563. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/plan-disk-cache.test.mjs +0 -0
  564. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/profile-flag.test.mjs +0 -0
  565. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/project-type.test.mjs +0 -0
  566. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/py-ast.test.mjs +0 -0
  567. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/python-import-graph.test.mjs +0 -0
  568. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/reconcile.test.mjs +0 -0
  569. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/reference-existence.test.mjs +0 -0
  570. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/regenerate-section.test.mjs +0 -0
  571. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/release-version-sync.test.mjs +0 -0
  572. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/report.test.mjs +0 -0
  573. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/repository-root.test.mjs +0 -0
  574. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/requirement-scope.test.mjs +0 -0
  575. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/route-field-precision.test.mjs +0 -0
  576. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-express-mounts.test.mjs +0 -0
  577. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-fastify.test.mjs +0 -0
  578. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-multilang.test.mjs +0 -0
  579. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-nextjs-app-router.test.mjs +0 -0
  580. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sarif.test.mjs +0 -0
  581. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/scheduled-release.test.mjs +0 -0
  582. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schema-sync-scope.test.mjs +0 -0
  583. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schema-sync.test.mjs +0 -0
  584. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schemas-multilang.test.mjs +0 -0
  585. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schemas.test.mjs +0 -0
  586. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/scoping-extended.test.mjs +0 -0
  587. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/score-assurance.test.mjs +0 -0
  588. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/score-suggestions.test.mjs +0 -0
  589. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/section-na-markers.test.mjs +0 -0
  590. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sections.test.mjs +0 -0
  591. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/security-init-injection.test.mjs +0 -0
  592. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/security.test.mjs +0 -0
  593. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/severity.test.mjs +0 -0
  594. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-diff.test.mjs +0 -0
  595. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-git.test.mjs +0 -0
  596. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-ignore-functions.test.mjs +0 -0
  597. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-ir.test.mjs +0 -0
  598. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-source.test.mjs +0 -0
  599. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/spec-completion.test.mjs +0 -0
  600. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/spec-kit-helper-json.test.mjs +0 -0
  601. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/spec-registry.test.mjs +0 -0
  602. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/speckit-bugfix.test.mjs +0 -0
  603. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/speckit-phantom.test.mjs +0 -0
  604. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/starter-scaffold.test.mjs +0 -0
  605. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/stress-test.test.mjs +0 -0
  606. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/structure.test.mjs +0 -0
  607. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/surface-sync.test.mjs +0 -0
  608. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sweep-nudge.test.mjs +0 -0
  609. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sync-since.test.mjs +0 -0
  610. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sync.test.mjs +0 -0
  611. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/task-context.test.mjs +0 -0
  612. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/test-spec.test.mjs +0 -0
  613. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/todo-tracking.test.mjs +0 -0
  614. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/trace-features.test.mjs +0 -0
  615. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/trace-multilang.test.mjs +0 -0
  616. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/trace-reverse.test.mjs +0 -0
  617. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability-fixtures.test.mjs +0 -0
  618. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability-ir.test.mjs +0 -0
  619. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability-lifecycle.test.mjs +0 -0
  620. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability.test.mjs +0 -0
  621. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/upgrade-pr-e2e.test.mjs +0 -0
  622. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/upgrade-pr.test.mjs +0 -0
  623. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/upgrade.test.mjs +0 -0
  624. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/v020-consolidation.test.mjs +0 -0
  625. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/validator-markers.test.mjs +0 -0
  626. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/validator-naming.test.mjs +0 -0
  627. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/validator-surface-invariant.test.mjs +0 -0
  628. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/verify-change-context.test.mjs +0 -0
  629. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/version-pin.test.mjs +0 -0
  630. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/watch-reliability.test.mjs +0 -0
  631. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/whats-new.test.mjs +0 -0
  632. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/worker-python-capability.test.mjs +0 -0
  633. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/workflow-action-pins.test.mjs +0 -0
  634. {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tools/node-test-json-reporter.mjs +0 -0
@@ -6,10 +6,10 @@ description: AI-driven documentation repair with structured research workflow, t
6
6
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
7
7
  metadata:
8
8
  author: docguard
9
- version: 0.41.6
9
+ version: 0.41.7
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.41.6 -->
12
+ <!-- docguard:version: 0.41.7 -->
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.41.6
10
+ version: 0.41.7
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.41.6 -->
13
+ <!-- docguard:version: 0.41.7 -->
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.41.6
9
+ version: 0.41.7
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.41.6 -->
12
+ <!-- docguard:version: 0.41.7 -->
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.41.6
9
+ version: 0.41.7
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.41.6 -->
12
+ <!-- docguard:version: 0.41.7 -->
13
13
 
14
14
  # DocGuard Score Skill
15
15
 
@@ -4,10 +4,10 @@ description: Keep canonical documentation ALWAYS UP TO DATE. Refreshes code-trut
4
4
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
5
5
  metadata:
6
6
  author: docguard
7
- version: 0.41.6
7
+ version: 0.41.7
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
- <!-- docguard:version: 0.41.6 -->
10
+ <!-- docguard:version: 0.41.7 -->
11
11
 
12
12
  # DocGuard Sync Skill
13
13
 
@@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.41.7] - 2026-09-18
11
+
12
+ Automated weekly release — batches everything merged since `v0.41.6`.
13
+
14
+ ### Changed
15
+
16
+ - feat: detect documents by name across the codebase, not by exact path (#418)
17
+
18
+
19
+ ### Added
20
+
21
+ - Find the documents a project already has, instead of assuming where they are.
22
+ `init` now looks for canonical role filenames across the repository before
23
+ creating anything, reports what it found, and offers to adopt that location —
24
+ writing both `docs.roles` and a matching `requiredFiles.canonical`. Detection
25
+ recognises real-world spellings rather than one exact filename: separators and
26
+ case are ignored (`data_model.md`, `Data Model.md`), `.markdown` and `.mdx`
27
+ count, and each role has known aliases (`system-design.md`, `testing.md`,
28
+ `env.md`, `api.md`, `PRD.md`). A directory must hold at least two roles before
29
+ it qualifies, so a lone root `SECURITY.md` — GitHub's policy file — never
30
+ triggers relocation, and the conventional directory wins any tie.
31
+
32
+ ### Fixed
33
+
34
+ - Judge the same repository the same way on every platform. Three detectors
35
+ probed for literal filenames — `existsSync(resolve(dir, 'ROADMAP.md'))` — which
36
+ matches `roadmap.md` on a case-insensitive filesystem (macOS) and not on a
37
+ case-sensitive one (Linux). CI and a laptop could therefore disagree about
38
+ whether the same TODO was tracked. Matching is now explicitly case- and
39
+ separator-insensitive, decided by DocGuard rather than by the filesystem.
40
+ - Recognise work-tracking documents by name rather than by exact path. A TODO
41
+ recorded in `docs/ROADMAP.md`, `PLAN.md` or `TASKS.md` was reported as
42
+ untracked because only ten literal paths were consulted. Tracking documents
43
+ are now found by alias across the conventional documentation directories;
44
+ `README.md` and `NOTES.md` still do not count as work lists.
45
+ - Recognise test directories beyond four exact names. `testing/`, `e2e/`,
46
+ `integration/`, `specs/` and `Tests/` now satisfy the same signal as `tests/`.
47
+ - Stop scaffolding a second canonical directory next to an existing one.
48
+ A project keeping its documents in `docs/canonical/` read as empty, because
49
+ the first-run check only walked `docs-canonical/`. `init` then reported "no
50
+ canonical docs", offered to reverse-engineer them from code, and created a
51
+ duplicate set beside the real documents. Reported as #326.
52
+
53
+
10
54
  ## [0.41.6] - 2026-09-18
11
55
 
12
56
  Automated weekly release — batches everything merged since `v0.41.5`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: docguard-cli
3
- Version: 0.41.6
3
+ Version: 0.41.7
4
4
  Summary: The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. No Python dependencies (requires Node.js 18+).
5
5
  Project-URL: Homepage, https://github.com/raccioly/docguard
6
6
  Project-URL: Documentation, https://github.com/raccioly/docguard#readme
@@ -17,6 +17,7 @@ import { fileURLToPath } from 'node:url';
17
17
  import { createInterface } from 'node:readline';
18
18
  import { execSync } from 'node:child_process';
19
19
  import { c, PROFILES, CURRENT_SCHEMA_VERSION } from '../shared.mjs';
20
+ import { detectCanonicalLayout, applyDocRoles } from '../shared-doc-roles.mjs';
20
21
  import { ensureSkills, detectAgentMode, detectAIAgent, isSpecKitAvailable, isSpecKitInitialized, getDetectedAgent, safeSpawnSpecify } from '../ensure-skills.mjs';
21
22
  import { safeWrite } from '../writers/generate-io.mjs';
22
23
 
@@ -144,8 +145,68 @@ function askQuestion(prompt) {
144
145
  });
145
146
  }
146
147
 
148
+ /**
149
+ * Confirm where a project actually keeps its canonical documents.
150
+ *
151
+ * Runs before init creates anything. If the role filenames already exist
152
+ * somewhere other than the directory the config points at, say so and offer to
153
+ * adopt that location, instead of reporting "no canonical docs" and scaffolding
154
+ * a second copy next to the real one.
155
+ *
156
+ * Writes `docs.roles` (the mechanism every validator already resolves through)
157
+ * plus a matching `requiredFiles.canonical`. Declaring only the latter leaves
158
+ * the content validators walking the conventional directory, where they find
159
+ * nothing and report "no matches" — checks disappear without anyone saying so.
160
+ *
161
+ * @returns {Promise<Record<string,string>|null>} adopted roles, or null
162
+ */
163
+ async function confirmCanonicalLocation(projectDir, flags) {
164
+ const configPath = resolve(projectDir, '.docguard.json');
165
+ let existing = {};
166
+ if (existsSync(configPath)) {
167
+ try { existing = JSON.parse(readFileSync(configPath, 'utf-8')); } catch { return false; }
168
+ }
169
+ // An explicit mapping is the user's answer already; do not second-guess it.
170
+ if (existing.docs?.roles) return null;
171
+
172
+ const hits = detectCanonicalLayout(projectDir).filter(h => h.count >= 2);
173
+ if (hits.length === 0) return null;
174
+ const best = hits[0];
175
+ if (best.dir === 'docs-canonical') return null; // already conventional
176
+
177
+ console.log(`\n${c.bold}📁 Found existing canonical documents${c.reset}`);
178
+ console.log(`${c.dim} DocGuard defaults to docs-canonical/, but ${Object.keys(best.roles).length} of its documents${c.reset}`);
179
+ console.log(`${c.dim} already live in ${c.reset}${c.cyan}${best.dir}/${c.reset}${c.dim}:${c.reset}`);
180
+ for (const [role, path] of Object.entries(best.roles)) {
181
+ console.log(` ${c.green}•${c.reset} ${path} ${c.dim}(${role})${c.reset}`);
182
+ }
183
+
184
+ if (!flags.skipPrompts && !flags.force) {
185
+ const answer = (await askQuestion(`\n Use ${best.dir}/ as the canonical location? [Y/n] `)).trim().toLowerCase();
186
+ if (answer === 'n' || answer === 'no') {
187
+ console.log(`${c.dim} Keeping docs-canonical/. Map them later with docs.roles in .docguard.json.${c.reset}\n`);
188
+ return null;
189
+ }
190
+ } else {
191
+ // Non-interactive: adopting what is on disk is the safe default, because
192
+ // the alternative is scaffolding a duplicate the user never asked for.
193
+ console.log(`${c.dim} Adopting ${best.dir}/ (non-interactive).${c.reset}`);
194
+ }
195
+
196
+ const next = { ...existing };
197
+ next.docs = { ...(next.docs || {}), roles: { ...best.roles } };
198
+ next.requiredFiles = {
199
+ ...(next.requiredFiles || {}),
200
+ canonical: Object.values(best.roles).sort(),
201
+ };
202
+ writeFileSync(configPath, JSON.stringify(next, null, 2) + '\n');
203
+ console.log(` ${c.green}✅${c.reset} .docguard.json now points at ${c.cyan}${best.dir}/${c.reset}\n`);
204
+ return best.roles;
205
+ }
206
+
147
207
  // ── Init Command ─────────────────────────────────────────────────────────
148
208
 
209
+
149
210
  /**
150
211
  * v0.21 — Smart first-run detection.
151
212
  *
@@ -179,6 +240,13 @@ function shouldRunGenerate(projectDir, flags) {
179
240
  // detected as already-initialized, or the wizard re-triggers on every run.
180
241
  if (listCanonicalDocs(projectDir).length > 0) return false;
181
242
 
243
+ // listCanonicalDocs only walks the directories the config points at, so a
244
+ // project keeping the same documents somewhere else (docs/canonical/) read as
245
+ // EMPTY. Init then offered to reverse-engineer docs from code and would
246
+ // scaffold a second canonical directory beside the real one. Look for the
247
+ // role filenames anywhere before concluding a project has no documentation.
248
+ if (detectCanonicalLayout(projectDir).some(hit => hit.count >= 2)) return false;
249
+
182
250
  // Existing-code signals: any of cli/, src/, lib/, app/ as a directory.
183
251
  const codeDirs = ['cli', 'src', 'lib', 'app'];
184
252
  for (const d of codeDirs) {
@@ -198,7 +266,8 @@ function shouldRunGenerate(projectDir, flags) {
198
266
  return false;
199
267
  }
200
268
 
201
- export async function runInit(projectDir, config, flags) {
269
+ export async function runInit(projectDir, configArg, flags) {
270
+ let config = configArg;
202
271
  // `--list` is read-only inventory owned by the hooks scaffolder. Routing it
203
272
  // through normal init can start prompts or create documentation before the
204
273
  // requested inventory is shown, which violates the command's read-only intent.
@@ -211,6 +280,19 @@ export async function runInit(projectDir, config, flags) {
211
280
  const { runHooks } = await import('./hooks.mjs');
212
281
  return runHooks(projectDir, config, flags);
213
282
  }
283
+ // Ask where the documents live before creating any. The adopted mapping has
284
+ // to reach the in-memory config as well: the skeleton path below reads it,
285
+ // and would otherwise create a second canonical directory it was just told
286
+ // not to use.
287
+ const adoptedRoles = await confirmCanonicalLocation(projectDir, flags);
288
+ if (adoptedRoles) {
289
+ config.docs = { ...(config.docs || {}), roles: { ...adoptedRoles } };
290
+ config.requiredFiles = {
291
+ ...(config.requiredFiles || {}),
292
+ canonical: Object.values(adoptedRoles).sort(),
293
+ };
294
+ config = applyDocRoles(projectDir, config);
295
+ }
214
296
  if (true) assertDefaultDocWrites(config);
215
297
  // v0.20: `--wizard` dispatches to the full interactive onboarding (formerly
216
298
  // `docguard setup`). Done before profile validation so the wizard can ask
@@ -0,0 +1,246 @@
1
+ /** Explicit document roles let existing repository layouts serve as canonical input. */
2
+ import { existsSync, lstatSync, readFileSync, readdirSync } from 'node:fs';
3
+ import { resolve, isAbsolute, join } from 'node:path';
4
+ export const DOC_ROLES = Object.freeze({
5
+ architecture: 'docs-canonical/ARCHITECTURE.md', dataModel: 'docs-canonical/DATA-MODEL.md',
6
+ security: 'docs-canonical/SECURITY.md', testSpec: 'docs-canonical/TEST-SPEC.md',
7
+ environment: 'docs-canonical/ENVIRONMENT.md', apiReference: 'docs-canonical/API-REFERENCE.md',
8
+ requirements: 'docs-canonical/REQUIREMENTS.md',
9
+ });
10
+ export function docRolePath(config = {}, role) {
11
+ if (!Object.hasOwn(DOC_ROLES, role)) throw new Error('Unknown document role: ' + role);
12
+ const value = config.docs?.roles?.[role] ?? DOC_ROLES[role];
13
+ if (typeof value !== 'string' || !value.trim() || value.includes('\0')) throw new Error('Invalid document path for role: ' + role);
14
+ const path = value.replace(/\\/g, '/');
15
+ if (config.docs?.roles?.[role] !== undefined && !path.toLowerCase().endsWith('.md')) throw new Error('Mapped document roles currently require Markdown (.md): ' + role);
16
+ if (isAbsolute(path) || /^[A-Za-z]:/.test(path) || path.split('/').some(p => p === '..' || p.toLowerCase() === '.local' || p.toLowerCase() === '.git')) throw new Error('Document role path must stay within the project: ' + role);
17
+ return path.startsWith('./') ? path.slice(2) : path;
18
+ }
19
+ export function resolveDocRole(projectDir, config, role) {
20
+ const rel = docRolePath(config, role);
21
+ // Opt-in mappings must not follow links into another repository/private data.
22
+ if (config.docs?.roles?.[role] !== undefined) {
23
+ let current = resolve(projectDir);
24
+ for (const part of rel.split('/')) {
25
+ current = join(current, part);
26
+ try { if (lstatSync(current).isSymbolicLink()) throw new Error('Document role path contains a symlink: ' + role); }
27
+ catch (e) { if (e.code !== 'ENOENT') throw e; }
28
+ }
29
+ }
30
+ return resolve(projectDir, rel);
31
+ }
32
+ export function applyDocRoles(projectDir, config) {
33
+ const roles = config.docs?.roles;
34
+ if (roles === undefined) return config;
35
+ if (!roles || typeof roles !== 'object' || Array.isArray(roles)) throw new Error('docs.roles must be an object');
36
+ const replacements = new Map();
37
+ for (const role of Object.keys(roles)) {
38
+ resolveDocRole(projectDir, config, role);
39
+ replacements.set(DOC_ROLES[role], docRolePath(config, role));
40
+ }
41
+ const requiredFiles = { ...config.requiredFiles, canonical: [...new Set([...(config.requiredFiles?.canonical || []).map(p => replacements.get(p) || p), ...replacements.values()])] };
42
+ const documentTypes = { ...config.documentTypes };
43
+ for (const [oldPath, newPath] of replacements) {
44
+ const old = documentTypes[oldPath] || {};
45
+ if (oldPath !== newPath) delete documentTypes[oldPath];
46
+ documentTypes[newPath] = { ...old, ...documentTypes[newPath], required: true, category: 'canonical' };
47
+ }
48
+ return { ...config, requiredFiles, documentTypes };
49
+ }
50
+ export function remapDocPath(config, path) {
51
+ const role = Object.keys(DOC_ROLES).find(key => DOC_ROLES[key] === path);
52
+ return role ? docRolePath(config, role) : path;
53
+ }
54
+
55
+ export function mappedRolesForPath(config = {}, path) {
56
+ const target = String(path).replace(/\\/g, '/').replace(/^\.\//, '');
57
+ return Object.keys(DOC_ROLES).filter(role => {
58
+ const configured = config.docs?.roles?.[role];
59
+ return configured !== undefined && docRolePath(config, role) === target && target !== DOC_ROLES[role];
60
+ });
61
+ }
62
+
63
+ export function isMappedDocPath(config = {}, path) {
64
+ return mappedRolesForPath(config, path).length > 0;
65
+ }
66
+
67
+ /**
68
+ * Authorize a whole-document write to custom role targets. New files are safe;
69
+ * existing files must explicitly grant full ownership and one file cannot be
70
+ * the whole-document target of several roles.
71
+ * @implements docguard.language-repository-coverage#FR-010
72
+ * @implements docguard.language-repository-coverage#FR-011
73
+ */
74
+ export function assertMappedFullDocumentWrites(projectDir, config = {}, roles = Object.keys(DOC_ROLES)) {
75
+ const selected = roles.filter(role => Object.hasOwn(DOC_ROLES, role) && config.docs?.roles?.[role] !== undefined
76
+ && docRolePath(config, role) !== DOC_ROLES[role]);
77
+ const paths = new Map();
78
+ for (const role of selected) {
79
+ const rel = docRolePath(config, role);
80
+ if (!paths.has(rel)) paths.set(rel, []);
81
+ paths.get(rel).push(role);
82
+ }
83
+ for (const [rel, owners] of paths) {
84
+ const allOwners = mappedRolesForPath(config, rel);
85
+ if (allOwners.length > 1) {
86
+ throw new Error(`Mapped document ${rel} serves multiple roles (${allOwners.join(', ')}); whole-document generation is unavailable. Use unique source=code sections instead.`);
87
+ }
88
+ const role = owners[0];
89
+ const full = resolveDocRole(projectDir, config, role);
90
+ if (!existsSync(full)) continue;
91
+ const content = readFileSync(full, 'utf8');
92
+ if (!/^[ \t]*<!--\s*docguard:generated\s+true\s*-->[ \t]*$/mi.test(content)) {
93
+ throw new Error(`Mapped document ${rel} is not fully owned by DocGuard. Add unique source=code sections for bounded writes; --force cannot overwrite its prose.`);
94
+ }
95
+ }
96
+ }
97
+
98
+ export function assertDefaultDocWrites(config) {
99
+ if (Object.entries(config.docs?.roles || {}).some(([role, path]) => path !== DOC_ROLES[role])) {
100
+ throw new Error('Custom docs.roles currently support validation and read-only planning. Automatic document generation/repair is unavailable for mapped layouts; review and edit the existing documents directly.');
101
+ }
102
+ }
103
+
104
+ /** Markdown extensions a canonical document realistically uses. */
105
+ const DOC_EXTENSIONS = new Set(['.md', '.markdown', '.mdx']);
106
+
107
+ /**
108
+ * Names a role is known by in the wild, normalised.
109
+ *
110
+ * Matching the exact default filename only (`DATA-MODEL.md`) missed every real
111
+ * project: the same document ships as `data_model.md`, `datamodel.md`,
112
+ * `Data Model.md`, or `API.md` instead of `API-REFERENCE.md`. Separators, case
113
+ * and extension are all noise, so names are normalised to letters and digits
114
+ * before comparison and every plausible spelling collapses to one key.
115
+ *
116
+ * Kept deliberately tight. A directory has to hold at least two roles before it
117
+ * counts as canonical, so a lone root-level `SECURITY.md` — GitHub's security
118
+ * policy, not a design document — never triggers a match on its own.
119
+ */
120
+ const ROLE_SYNONYMS = Object.freeze({
121
+ architecture: ['architecture', 'arch', 'systemdesign', 'design', 'systemarchitecture', 'technicaldesign', 'hld'],
122
+ dataModel: ['datamodel', 'data', 'schema', 'dataschema', 'entities', 'erd', 'domainmodel', 'database'],
123
+ security: ['security', 'threatmodel', 'securitymodel', 'securitydesign'],
124
+ testSpec: ['testspec', 'tests', 'testing', 'testplan', 'teststrategy', 'qa', 'testcases'],
125
+ environment: ['environment', 'env', 'setup', 'configuration', 'config', 'installation', 'install'],
126
+ apiReference: ['apireference', 'api', 'apidocs', 'apispec', 'endpoints', 'rest', 'openapi'],
127
+ requirements: ['requirements', 'reqs', 'prd', 'spec', 'functionalrequirements', 'userstories'],
128
+ });
129
+
130
+ const NORMALISED_ROLE = new Map();
131
+ for (const [role, names] of Object.entries(ROLE_SYNONYMS)) {
132
+ for (const name of names) {
133
+ // First writer wins, so an earlier role keeps an ambiguous name.
134
+ if (!NORMALISED_ROLE.has(name)) NORMALISED_ROLE.set(name, role);
135
+ }
136
+ }
137
+
138
+ /** Normalise a filename to comparable letters and digits, or null if not a doc. */
139
+ export function normaliseDocName(filename) {
140
+ const dot = filename.lastIndexOf('.');
141
+ if (dot <= 0) return null;
142
+ if (!DOC_EXTENSIONS.has(filename.slice(dot).toLowerCase())) return null;
143
+ const stem = filename.slice(0, dot).toLowerCase().replace(/[^a-z0-9]/g, '');
144
+ return stem || null;
145
+ }
146
+
147
+ /** The canonical role a filename denotes, or null. */
148
+ export function roleForFilename(filename) {
149
+ const stem = normaliseDocName(filename);
150
+ return stem ? (NORMALISED_ROLE.get(stem) ?? null) : null;
151
+ }
152
+
153
+ /**
154
+ * Resolve a set of known document names to the files that actually exist.
155
+ *
156
+ * The literal-path approach — `existsSync(resolve(dir, 'ROADMAP.md'))` for each
157
+ * name — fails two ways. It misses every spelling not in the list (`PLAN.md`,
158
+ * `TASKS.md`, `docs/ROADMAP.md`), and it is only case-insensitive by accident:
159
+ * on macOS the probe matches `roadmap.md`, on Linux it does not, so the same
160
+ * repository is judged differently by platform.
161
+ *
162
+ * Reading each directory and normalising what is there fixes both: matching is
163
+ * explicitly case- and separator-insensitive everywhere, and one alias table
164
+ * covers the spellings people use.
165
+ *
166
+ * @param {string} projectDir
167
+ * @param {string[]} aliases normalised names to accept (see normaliseDocName)
168
+ * @param {string[]} dirs project-relative directories to search ('' = root)
169
+ * @returns {string[]} project-relative POSIX paths, de-duplicated, existing
170
+ */
171
+ export function findDocsByName(projectDir, aliases, dirs) {
172
+ const want = new Set(aliases);
173
+ const out = [];
174
+ for (const dir of dirs) {
175
+ const abs = dir ? resolve(projectDir, dir) : resolve(projectDir);
176
+ let entries;
177
+ try { entries = readdirSync(abs, { withFileTypes: true }); } catch { continue; }
178
+ for (const entry of entries) {
179
+ if (!entry.isFile()) continue;
180
+ const stem = normaliseDocName(entry.name);
181
+ if (!stem || !want.has(stem)) continue;
182
+ const rel = dir ? `${dir}/${entry.name}` : entry.name;
183
+ if (!out.includes(rel)) out.push(rel);
184
+ }
185
+ }
186
+ return out;
187
+ }
188
+
189
+ /**
190
+ * Find directories that already hold canonical documents.
191
+ *
192
+ * DocGuard assumed `docs-canonical/` and asked afterwards. A project keeping the
193
+ * same documents in `docs/canonical/` therefore looked EMPTY: `init` reported
194
+ * "no canonical docs", offered to reverse-engineer them from code, and would
195
+ * scaffold a second canonical directory beside the real one. The documents were
196
+ * there the whole time; nothing ever looked.
197
+ *
198
+ * Detection is by role BASENAME, because the filenames are the convention that
199
+ * survives relocation — the directory is the part people change.
200
+ *
201
+ * Returns candidates ranked by how many roles each directory holds, so a caller
202
+ * can confirm the strongest one rather than guess. Never throws: an unreadable
203
+ * subtree simply contributes nothing.
204
+ *
205
+ * @param {string} projectDir
206
+ * @param {{maxDepth?: number, skip?: Set<string>}} [opts]
207
+ * @returns {Array<{dir: string, roles: Record<string,string>, count: number}>}
208
+ */
209
+ export function detectCanonicalLayout(projectDir, opts = {}) {
210
+ const maxDepth = opts.maxDepth ?? 4;
211
+ const skip = opts.skip ?? new Set([
212
+ 'node_modules', '.git', '.local', 'dist', 'build', 'coverage',
213
+ 'vendor', '__pycache__', '.venv', 'venv', '.next', 'target', '.testguard',
214
+ ]);
215
+
216
+ const byBasename = roleForFilename;
217
+
218
+ const found = new Map(); // dir -> { role -> relative path }
219
+
220
+ const walk = (absDir, relDir, depth) => {
221
+ if (depth > maxDepth) return;
222
+ let entries;
223
+ try { entries = readdirSync(absDir, { withFileTypes: true }); } catch { return; }
224
+ for (const entry of entries) {
225
+ const name = entry.name;
226
+ if (entry.isDirectory()) {
227
+ if (skip.has(name) || name.startsWith('.')) continue;
228
+ walk(join(absDir, name), relDir ? `${relDir}/${name}` : name, depth + 1);
229
+ continue;
230
+ }
231
+ const role = byBasename(name);
232
+ if (!role) continue;
233
+ const key = relDir || '.';
234
+ if (!found.has(key)) found.set(key, {});
235
+ found.get(key)[role] = relDir ? `${relDir}/${name}` : name;
236
+ }
237
+ };
238
+ walk(resolve(projectDir), '', 0);
239
+
240
+ return [...found.entries()]
241
+ .map(([dir, roles]) => ({ dir, roles, count: Object.keys(roles).length }))
242
+ // Strongest first; the conventional directory wins an exact tie so an
243
+ // already-conventional project is never told to "relocate" to itself.
244
+ .sort((a, b) => b.count - a.count
245
+ || (a.dir === 'docs-canonical' ? -1 : b.dir === 'docs-canonical' ? 1 : a.dir.localeCompare(b.dir)));
246
+ }
@@ -226,10 +226,20 @@ export function validateTestSpec(projectDir, config) {
226
226
  // somewhere — that rendered a confident green ✅ for a doc that mapped nothing.
227
227
  if (total === 0) {
228
228
  // 1. Check top-level test dirs
229
- const commonTestDirs = ['tests', 'test', '__tests__', 'spec'];
230
- const hasTestDir = commonTestDirs.some(d =>
231
- existsSync(resolve(projectDir, d))
232
- );
229
+ // Match by normalised name rather than exact spelling: `Tests/`, `testing/`,
230
+ // `e2e/` and `integration/` are the same signal as `tests/`, and probing for
231
+ // literal names was case-insensitive only by accident (it matched on macOS
232
+ // and not on Linux, so CI and a laptop disagreed).
233
+ const TEST_DIR_NAMES = new Set([
234
+ 'tests', 'test', 'spec', 'specs', 'testing',
235
+ 'e2e', 'integration', 'unit', 'acceptance',
236
+ ]);
237
+ const normaliseDir = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, '');
238
+ let hasTestDir = false;
239
+ try {
240
+ hasTestDir = readdirSync(projectDir, { withFileTypes: true })
241
+ .some(e => e.isDirectory() && TEST_DIR_NAMES.has(normaliseDir(e.name)));
242
+ } catch { /* unreadable root: fall through to the other signals */ }
233
243
 
234
244
  // 2. Check co-located tests (honors config.sourceRoot + workspaces)
235
245
  let hasColocated = false;
@@ -20,6 +20,7 @@ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
20
20
  import { resolve, join, relative, extname } from 'node:path';
21
21
  import { shouldIgnore, walkFiles as sharedWalkFiles } from '../shared-ignore.mjs';
22
22
  import { mkFinding, resultFromFindings } from '../findings.mjs';
23
+ import { findDocsByName } from '../shared-doc-roles.mjs';
23
24
  import { parseJsTs, walk } from '../scanners/js-ast.mjs';
24
25
 
25
26
  const IGNORE_DIRS = new Set([
@@ -391,13 +392,22 @@ function checkUntrackedTodos(projectDir, config) {
391
392
  */
392
393
  function loadTrackingDocs(projectDir, config) {
393
394
  const docs = [];
395
+ // Where a project tracks work, by name rather than by exact path. Probing for
396
+ // literal paths missed `docs/ROADMAP.md`, `PLAN.md` and `TASKS.md`, and was
397
+ // case-insensitive only by accident — `existsSync('ROADMAP.md')` matches
398
+ // `roadmap.md` on macOS but not on Linux, so CI and a laptop disagreed about
399
+ // whether the same TODO was tracked.
400
+ const TRACKING_ALIASES = [
401
+ 'roadmap', 'currentstate', 'todo', 'todos', 'backlog',
402
+ 'plan', 'plans', 'tasks', 'milestones', 'worklog', 'changelog',
403
+ ];
404
+ const TRACKING_DIRS = ['', 'docs', 'doc', 'documentation', 'docs-canonical', 'docs-implementation'];
405
+
394
406
  const trackingFiles = [
395
- 'ROADMAP.md', 'CURRENT-STATE.md', 'TODO.md', 'BACKLOG.md',
396
- 'docs-canonical/ARCHITECTURE.md', 'CHANGELOG.md',
397
- // v0.27 (field report #6): many projects keep the roadmap/backlog under
398
- // docs-canonical/ — a TODO tracked there was wrongly read as "untracked".
399
- 'docs-canonical/ROADMAP.md', 'docs-canonical/CURRENT-STATE.md',
400
- 'docs-canonical/BACKLOG.md', 'docs-canonical/TODO.md',
407
+ ...findDocsByName(projectDir, TRACKING_ALIASES, TRACKING_DIRS),
408
+ // ARCHITECTURE is a tracking home only in the canonical sense; it is not a
409
+ // work list, so it stays an explicit entry rather than joining the aliases.
410
+ 'docs-canonical/ARCHITECTURE.md',
401
411
  ...(config.todoTracking?.trackingFiles || []),
402
412
  ];
403
413
 
@@ -3,7 +3,7 @@ schema_version: "1.0"
3
3
  extension:
4
4
  id: "docguard"
5
5
  name: "DocGuard — CDD Enforcement"
6
- version: "0.41.6"
6
+ version: "0.41.7"
7
7
  description: "Documentation integrity for AI-assisted repositories: lifecycle registry, drift validation, traceability, safe archival, SARIF/JUnit, MCP, GitHub Actions, and Spec Kit hooks."
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.41.6
9
+ version: 0.41.7
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.41.6 -->
12
+ <!-- docguard:version: 0.41.7 -->
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.41.6
10
+ version: 0.41.7
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.41.6 -->
13
+ <!-- docguard:version: 0.41.7 -->
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.41.6
9
+ version: 0.41.7
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.41.6 -->
12
+ <!-- docguard:version: 0.41.7 -->
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.41.6
9
+ version: 0.41.7
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.41.6 -->
12
+ <!-- docguard:version: 0.41.7 -->
13
13
 
14
14
  # DocGuard Score Skill
15
15
 
@@ -4,10 +4,10 @@ description: Keep canonical documentation ALWAYS UP TO DATE. Refreshes code-trut
4
4
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
5
5
  metadata:
6
6
  author: docguard
7
- version: 0.41.6
7
+ version: 0.41.7
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
- <!-- docguard:version: 0.41.6 -->
10
+ <!-- docguard:version: 0.41.7 -->
11
11
 
12
12
  # DocGuard Sync Skill
13
13
 
@@ -44,7 +44,7 @@ jobs:
44
44
  fetch-depth: 0
45
45
 
46
46
  - name: Run DocGuard fix --write + auto-commit + PR comment
47
- uses: raccioly/docguard@v0.41.6
47
+ uses: raccioly/docguard@v0.41.7
48
48
  with:
49
49
  command: fix
50
50
  auto-commit: 'true'