docguard-cli 0.34.3__tar.gz → 0.34.5__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 (469) hide show
  1. {docguard_cli-0.34.3/extensions/spec-kit-docguard → docguard_cli-0.34.5/.agent}/skills/docguard-fix/SKILL.md +2 -2
  2. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/docguard-guard/SKILL.md +2 -2
  3. {docguard_cli-0.34.3/extensions/spec-kit-docguard → docguard_cli-0.34.5/.agent}/skills/docguard-review/SKILL.md +2 -2
  4. {docguard_cli-0.34.3/extensions/spec-kit-docguard → docguard_cli-0.34.5/.agent}/skills/docguard-score/SKILL.md +2 -2
  5. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/docguard-sync/SKILL.md +2 -2
  6. docguard_cli-0.34.5/.github/workflows/auto-merge.yml +152 -0
  7. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/ci.yml +24 -2
  8. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/jules-triage.yml +26 -1
  9. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/release.yml +52 -9
  10. docguard_cli-0.34.5/.github/workflows/scheduled-release.yml +171 -0
  11. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/anatomy.md +9 -6
  12. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/buglog.json +203 -1
  13. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/cerebrum.md +1 -0
  14. docguard_cli-0.34.5/.wolf/hooks/_session.json +193 -0
  15. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/memory.md +27 -0
  16. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/token-ledger.json +1097 -7
  17. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CHANGELOG.md +32 -3
  18. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/PKG-INFO +1 -1
  19. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/extension.yml +1 -1
  20. {docguard_cli-0.34.3/.agent → docguard_cli-0.34.5/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
  21. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/skills/docguard-guard/SKILL.md +2 -2
  22. {docguard_cli-0.34.3/.agent → docguard_cli-0.34.5/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
  23. {docguard_cli-0.34.3/.agent → docguard_cli-0.34.5/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
  24. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
  25. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/package-lock.json +2 -2
  26. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/package.json +1 -1
  27. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/pyproject.toml +1 -1
  28. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/commands.test.mjs +20 -3
  29. docguard_cli-0.34.3/.wolf/hooks/_session.json +0 -81
  30. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.fix.md +0 -0
  31. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.guard.md +0 -0
  32. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.review.md +0 -0
  33. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.score.md +0 -0
  34. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.analyze.md +0 -0
  35. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.checklist.md +0 -0
  36. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.clarify.md +0 -0
  37. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.constitution.md +0 -0
  38. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.implement.md +0 -0
  39. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.plan.md +0 -0
  40. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.specify.md +0 -0
  41. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.tasks.md +0 -0
  42. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.taskstoissues.md +0 -0
  43. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-analyze/SKILL.md +0 -0
  44. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-checklist/SKILL.md +0 -0
  45. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-clarify/SKILL.md +0 -0
  46. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-constitution/SKILL.md +0 -0
  47. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-implement/SKILL.md +0 -0
  48. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-plan/SKILL.md +0 -0
  49. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-specify/SKILL.md +0 -0
  50. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-tasks/SKILL.md +0 -0
  51. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
  52. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.claude/rules/openwolf.md +0 -0
  53. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.claude/settings.json +0 -0
  54. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.docguard.json +0 -0
  55. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.docguardignore +0 -0
  56. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  57. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
  58. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  59. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  60. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/dependabot.yml +0 -0
  61. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/scripts/speckit-submission.py +0 -0
  62. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/supply-chain.yml +0 -0
  63. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/sync-speckit-catalog.yml +0 -0
  64. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.gitignore +0 -0
  65. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules/bolt.md +0 -0
  66. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules/palette.md +0 -0
  67. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules/sentinel.md +0 -0
  68. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules-setup.sh +0 -0
  69. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.npmignore +0 -0
  70. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.npmrc +0 -0
  71. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.pre-commit-hooks.yaml +0 -0
  72. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
  73. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
  74. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog-metadata.json +0 -0
  75. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog.json +0 -0
  76. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/init-options.json +0 -0
  77. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/memory/constitution.md +0 -0
  78. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  79. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/common.sh +0 -0
  80. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/create-new-feature.sh +0 -0
  81. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/setup-plan.sh +0 -0
  82. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/update-agent-context.sh +0 -0
  83. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/agent-file-template.md +0 -0
  84. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/checklist-template.md +0 -0
  85. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/constitution-template.md +0 -0
  86. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/plan-template.md +0 -0
  87. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/spec-template.md +0 -0
  88. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/tasks-template.md +0 -0
  89. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/OPENWOLF.md +0 -0
  90. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/config.json +0 -0
  91. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/cron-manifest.json +0 -0
  92. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/cron-state.json +0 -0
  93. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/daemon.log +0 -0
  94. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/designqc-report.json +0 -0
  95. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/_wrap_up_nudged +0 -0
  96. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/package.json +0 -0
  97. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/post-read.js +0 -0
  98. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/post-write.js +0 -0
  99. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/pre-read.js +0 -0
  100. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/pre-write.js +0 -0
  101. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/session-start.js +0 -0
  102. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/shared.js +0 -0
  103. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/stop.js +0 -0
  104. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/identity.md +0 -0
  105. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/reframe-frameworks.md +0 -0
  106. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/suggestions.json +0 -0
  107. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/AGENTS.md +0 -0
  108. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CLAUDE.md +0 -0
  109. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CODE_OF_CONDUCT.md +0 -0
  110. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/COMPARISONS.md +0 -0
  111. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CONTRIBUTING.md +0 -0
  112. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/DRIFT-LOG.md +0 -0
  113. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/Dockerfile +0 -0
  114. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/LICENSE +0 -0
  115. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/PHILOSOPHY.md +0 -0
  116. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/PRIVACY.md +0 -0
  117. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/README.es.md +0 -0
  118. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/README.md +0 -0
  119. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/README.pt-BR.md +0 -0
  120. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/ROADMAP.md +0 -0
  121. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/SECURITY.md +0 -0
  122. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/STANDARD.md +0 -0
  123. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/SUPPLY-CHAIN-AUDIT.md +0 -0
  124. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/SUPPORT.md +0 -0
  125. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/VALIDATION.md +0 -0
  126. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/action.yml +0 -0
  127. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/bin/docguard +0 -0
  128. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/demo.gif +0 -0
  129. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/demo.tape +0 -0
  130. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/docguard-logo.png +0 -0
  131. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/agent.mjs +0 -0
  132. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/agents.mjs +0 -0
  133. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/badge.mjs +0 -0
  134. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/ci.mjs +0 -0
  135. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/demo.mjs +0 -0
  136. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/diagnose.mjs +0 -0
  137. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/diff.mjs +0 -0
  138. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/explain.mjs +0 -0
  139. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/feedback.mjs +0 -0
  140. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/fix.mjs +0 -0
  141. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/generate.mjs +0 -0
  142. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/guard.mjs +0 -0
  143. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/hooks.mjs +0 -0
  144. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/impact.mjs +0 -0
  145. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/init.mjs +0 -0
  146. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/llms.mjs +0 -0
  147. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/mcp.mjs +0 -0
  148. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/memory.mjs +0 -0
  149. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/publish.mjs +0 -0
  150. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/report.mjs +0 -0
  151. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/score.mjs +0 -0
  152. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/setup.mjs +0 -0
  153. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/sync-tests.mjs +0 -0
  154. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/sync.mjs +0 -0
  155. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/trace.mjs +0 -0
  156. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/upgrade.mjs +0 -0
  157. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/verify.mjs +0 -0
  158. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/watch.mjs +0 -0
  159. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/config.mjs +0 -0
  160. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/docguard.mjs +0 -0
  161. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/ensure-skills.mjs +0 -0
  162. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/findings.mjs +0 -0
  163. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/agent-readability.mjs +0 -0
  164. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/api-doc.mjs +0 -0
  165. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/cdk.mjs +0 -0
  166. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/doc-tools.mjs +0 -0
  167. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/frontend.mjs +0 -0
  168. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/iac.mjs +0 -0
  169. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/instruction-audit.mjs +0 -0
  170. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/integrations.mjs +0 -0
  171. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/inventory.mjs +0 -0
  172. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/js-ast.mjs +0 -0
  173. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/memory-plan.mjs +0 -0
  174. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/project-type.mjs +0 -0
  175. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/py-ast.mjs +0 -0
  176. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/routes.mjs +0 -0
  177. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/schemas.mjs +0 -0
  178. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/semantic-claims.mjs +0 -0
  179. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/speckit.mjs +0 -0
  180. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-diff.mjs +0 -0
  181. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-git.mjs +0 -0
  182. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-ignore.mjs +0 -0
  183. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-ir.mjs +0 -0
  184. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-source.mjs +0 -0
  185. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-trace-patterns.mjs +0 -0
  186. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared.mjs +0 -0
  187. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validator-markers.mjs +0 -0
  188. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/api-doc-smells.mjs +0 -0
  189. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/api-surface.mjs +0 -0
  190. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/architecture.mjs +0 -0
  191. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/canonical-sync.mjs +0 -0
  192. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/changelog.mjs +0 -0
  193. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/cross-reference.mjs +0 -0
  194. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/diff-suspicion.mjs +0 -0
  195. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/doc-quality.mjs +0 -0
  196. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/docs-coverage.mjs +0 -0
  197. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/docs-diff.mjs +0 -0
  198. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/docs-sync.mjs +0 -0
  199. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/drift.mjs +0 -0
  200. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/environment.mjs +0 -0
  201. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/freshness.mjs +0 -0
  202. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/generated-staleness.mjs +0 -0
  203. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/metadata-sync.mjs +0 -0
  204. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/metrics-consistency.mjs +0 -0
  205. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/reference-existence.mjs +0 -0
  206. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/schema-sync.mjs +0 -0
  207. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/security.mjs +0 -0
  208. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/spec-kit.mjs +0 -0
  209. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/structure.mjs +0 -0
  210. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/surface-sync.mjs +0 -0
  211. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/test-spec.mjs +0 -0
  212. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/todo-tracking.mjs +0 -0
  213. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/traceability.mjs +0 -0
  214. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/api-reference.mjs +0 -0
  215. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/baseline.mjs +0 -0
  216. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/doc-generators.mjs +0 -0
  217. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/fix-memory.mjs +0 -0
  218. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/generate-io.mjs +0 -0
  219. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/history.mjs +0 -0
  220. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/junit.mjs +0 -0
  221. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/mechanical.mjs +0 -0
  222. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/sarif.mjs +0 -0
  223. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/sections.mjs +0 -0
  224. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.fix.md +0 -0
  225. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.guard.md +0 -0
  226. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.review.md +0 -0
  227. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.score.md +0 -0
  228. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/fastify.json +0 -0
  229. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/generic.json +0 -0
  230. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/nextjs.json +0 -0
  231. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/python.json +0 -0
  232. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docguard_cli/__init__.py +0 -0
  233. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docguard_cli/wrapper.py +0 -0
  234. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/ai-integration.md +0 -0
  235. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/commands.md +0 -0
  236. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/configuration.md +0 -0
  237. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/doc-sections.md +0 -0
  238. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/faq.md +0 -0
  239. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/installation.md +0 -0
  240. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/profiles.md +0 -0
  241. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/quickstart.md +0 -0
  242. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/ARCHITECTURE.md +0 -0
  243. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/CI-RECIPES.md +0 -0
  244. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/DATA-MODEL.md +0 -0
  245. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/ENVIRONMENT.md +0 -0
  246. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/REQUIREMENTS.md +0 -0
  247. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/SECURITY.md +0 -0
  248. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/SURFACE-AUDIT.md +0 -0
  249. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/TEST-SPEC.md +0 -0
  250. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-implementation/MIGRATION-v0.20.md +0 -0
  251. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/01-express-api/README.md +0 -0
  252. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/01-express-api/package.json +0 -0
  253. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/01-express-api/server.js +0 -0
  254. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/README.md +0 -0
  255. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/app.py +0 -0
  256. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
  257. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/requirements.txt +0 -0
  258. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
  259. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/README.md +0 -0
  260. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
  261. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
  262. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/package.json +0 -0
  263. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/src/index.js +0 -0
  264. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/tasks.json +0 -0
  265. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
  266. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/README.md +0 -0
  267. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/LICENSE +0 -0
  268. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/README.md +0 -0
  269. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
  270. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/fix.md +0 -0
  271. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/generate.md +0 -0
  272. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/guard.md +0 -0
  273. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/init.md +0 -0
  274. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/score.md +0 -0
  275. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/sync.md +0 -0
  276. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/trace.md +0 -0
  277. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
  278. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
  279. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
  280. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
  281. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
  282. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
  283. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +0 -0
  284. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/glama.json +0 -0
  285. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/llms-full.txt +0 -0
  286. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/llms.txt +0 -0
  287. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/mcpb/README.md +0 -0
  288. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/mcpb/manifest.template.json +0 -0
  289. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/packaging/homebrew/docguard.rb +0 -0
  290. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/packaging/submissions.md +0 -0
  291. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/schemas/docguard-config.schema.json +0 -0
  292. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/server.json +0 -0
  293. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/smithery.yaml +0 -0
  294. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/001-fix-ignore-validators/plan.md +0 -0
  295. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/001-fix-ignore-validators/spec.md +0 -0
  296. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/001-fix-ignore-validators/tasks.md +0 -0
  297. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/002-fix-test-discovery/plan.md +0 -0
  298. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/002-fix-test-discovery/spec.md +0 -0
  299. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/002-fix-test-discovery/tasks.md +0 -0
  300. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/003-v011-false-positives/plan.md +0 -0
  301. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/003-v011-false-positives/spec.md +0 -0
  302. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/003-v011-false-positives/tasks.md +0 -0
  303. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/004-v020-env-var-false-negative/spec.md +0 -0
  304. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/005-hugocross-next-bugs/spec.md +0 -0
  305. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ADR.md.template +0 -0
  306. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/AGENTS.md.template +0 -0
  307. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ARCHITECTURE.md.template +0 -0
  308. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/CHANGELOG.md.template +0 -0
  309. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/CURRENT-STATE.md.template +0 -0
  310. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/DATA-MODEL.md.template +0 -0
  311. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/DEPLOYMENT.md.template +0 -0
  312. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/DRIFT-LOG.md.template +0 -0
  313. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ENVIRONMENT.md.template +0 -0
  314. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/KNOWN-GOTCHAS.md.template +0 -0
  315. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/REQUIREMENTS.md.template +0 -0
  316. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ROADMAP.md.template +0 -0
  317. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/RUNBOOKS.md.template +0 -0
  318. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/SECURITY.md.template +0 -0
  319. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/TEST-SPEC.md.template +0 -0
  320. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/TROUBLESHOOTING.md.template +0 -0
  321. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/VENDOR-BUGS.md.template +0 -0
  322. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ci/github-actions.yml +0 -0
  323. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ci/gitlab-component.yml +0 -0
  324. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.fix.md +0 -0
  325. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.guard.md +0 -0
  326. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.init.md +0 -0
  327. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.review.md +0 -0
  328. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.update.md +0 -0
  329. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/.docguard.json +0 -0
  330. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/.env.example +0 -0
  331. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/AGENTS.md +0 -0
  332. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/CHANGELOG.md +0 -0
  333. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/DRIFT-LOG.md +0 -0
  334. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/README.md +0 -0
  335. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
  336. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
  337. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
  338. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
  339. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
  340. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
  341. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/package.json +0 -0
  342. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/api.mjs +0 -0
  343. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/notifier.mjs +0 -0
  344. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/scheduler.mjs +0 -0
  345. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/worker.mjs +0 -0
  346. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agent-readability.test.mjs +0 -0
  347. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agent.test.mjs +0 -0
  348. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agents-command.test.mjs +0 -0
  349. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agents-sync.test.mjs +0 -0
  350. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/anchor-autofix.test.mjs +0 -0
  351. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-doc-smells.test.mjs +0 -0
  352. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-doc.test.mjs +0 -0
  353. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-surface.test.mjs +0 -0
  354. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-write.test.mjs +0 -0
  355. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/architecture.test.mjs +0 -0
  356. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/b7-node-env-symmetry.test.mjs +0 -0
  357. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/backup-failure.test.mjs +0 -0
  358. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/badge.test.mjs +0 -0
  359. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/baseline.test.mjs +0 -0
  360. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/canonical-docs-nested-phase2.test.mjs +0 -0
  361. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/canonical-docs-nested.test.mjs +0 -0
  362. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/canonical-sync.test.mjs +0 -0
  363. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/cdk-detection.test.mjs +0 -0
  364. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/changed-only-scoping.test.mjs +0 -0
  365. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/changed-only.test.mjs +0 -0
  366. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/changelog.test.mjs +0 -0
  367. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/cross-reference.test.mjs +0 -0
  368. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/demo-command.test.mjs +0 -0
  369. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/diff-suspicion.test.mjs +0 -0
  370. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/doc-quality.test.mjs +0 -0
  371. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/doc-section-synonyms.test.mjs +0 -0
  372. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docguardignore.test.mjs +0 -0
  373. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docs-coverage.test.mjs +0 -0
  374. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docs-diff.test.mjs +0 -0
  375. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docs-sync.test.mjs +0 -0
  376. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/drift.test.mjs +0 -0
  377. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/ensure-skills-idempotent.test.mjs +0 -0
  378. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/env-schema-detection.test.mjs +0 -0
  379. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/environment.test.mjs +0 -0
  380. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/explain-coverage.test.mjs +0 -0
  381. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/field-report-2-cli.test.mjs +0 -0
  382. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/field-report-3-deferred.test.mjs +0 -0
  383. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/field-report-3.test.mjs +0 -0
  384. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/fix-memory.test.mjs +0 -0
  385. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/fix-suppression.test.mjs +0 -0
  386. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/fixture-projects.test.mjs +0 -0
  387. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/freshness.test.mjs +0 -0
  388. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/frontend-deep.test.mjs +0 -0
  389. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/frontend.test.mjs +0 -0
  390. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/generate-io.test.mjs +0 -0
  391. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/generated-staleness.test.mjs +0 -0
  392. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/guard-classify.test.mjs +0 -0
  393. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/guard-no-throw.test.mjs +0 -0
  394. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/history.test.mjs +0 -0
  395. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/hooks.test.mjs +0 -0
  396. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/i18n.test.mjs +0 -0
  397. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/impact.test.mjs +0 -0
  398. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/init-smart-detection.test.mjs +0 -0
  399. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/instruction-audit.test.mjs +0 -0
  400. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/integrations.test.mjs +0 -0
  401. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/inventory.test.mjs +0 -0
  402. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/js-ast.test.mjs +0 -0
  403. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/junit.test.mjs +0 -0
  404. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/llms-full-pack.test.mjs +0 -0
  405. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/mcp-http.test.mjs +0 -0
  406. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/mcp.test.mjs +0 -0
  407. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/mechanical.test.mjs +0 -0
  408. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/memory-plan.test.mjs +0 -0
  409. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/metadata-sync.test.mjs +0 -0
  410. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/metrics-consistency.test.mjs +0 -0
  411. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/metrics-dedup.test.mjs +0 -0
  412. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/monorepo-scanning.test.mjs +0 -0
  413. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/multi-spec.test.mjs +0 -0
  414. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/npm-pack-smoke.test.mjs +0 -0
  415. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/nudge-hook.test.mjs +0 -0
  416. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/openapi-parse-honesty.test.mjs +0 -0
  417. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/patch-0.11.2.test.mjs +0 -0
  418. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/plan-disk-cache.test.mjs +0 -0
  419. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/profile-flag.test.mjs +0 -0
  420. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/project-type.test.mjs +0 -0
  421. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/py-ast.test.mjs +0 -0
  422. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/reference-existence.test.mjs +0 -0
  423. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/regenerate-section.test.mjs +0 -0
  424. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/report.test.mjs +0 -0
  425. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-express-mounts.test.mjs +0 -0
  426. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-fastify.test.mjs +0 -0
  427. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-multilang.test.mjs +0 -0
  428. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-nextjs-app-router.test.mjs +0 -0
  429. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sarif.test.mjs +0 -0
  430. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/schema-sync.test.mjs +0 -0
  431. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/schemas-multilang.test.mjs +0 -0
  432. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/schemas.test.mjs +0 -0
  433. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/scoping-extended.test.mjs +0 -0
  434. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/score-suggestions.test.mjs +0 -0
  435. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/section-na-markers.test.mjs +0 -0
  436. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sections.test.mjs +0 -0
  437. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/security-init-injection.test.mjs +0 -0
  438. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/security.test.mjs +0 -0
  439. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/severity.test.mjs +0 -0
  440. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-diff.test.mjs +0 -0
  441. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-git.test.mjs +0 -0
  442. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-ignore-functions.test.mjs +0 -0
  443. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-ir.test.mjs +0 -0
  444. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-source.test.mjs +0 -0
  445. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/speckit-bugfix.test.mjs +0 -0
  446. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/speckit-phantom.test.mjs +0 -0
  447. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/starter-scaffold.test.mjs +0 -0
  448. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/stress-test.test.mjs +0 -0
  449. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/structure.test.mjs +0 -0
  450. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/surface-sync.test.mjs +0 -0
  451. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sweep-nudge.test.mjs +0 -0
  452. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sync-since.test.mjs +0 -0
  453. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sync.test.mjs +0 -0
  454. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/test-spec.test.mjs +0 -0
  455. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/todo-tracking.test.mjs +0 -0
  456. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/trace-features.test.mjs +0 -0
  457. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/trace-multilang.test.mjs +0 -0
  458. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/trace-reverse.test.mjs +0 -0
  459. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/traceability-ir.test.mjs +0 -0
  460. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/traceability.test.mjs +0 -0
  461. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/upgrade-pr-e2e.test.mjs +0 -0
  462. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/upgrade-pr.test.mjs +0 -0
  463. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/upgrade.test.mjs +0 -0
  464. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/v020-consolidation.test.mjs +0 -0
  465. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/validator-markers.test.mjs +0 -0
  466. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/validator-naming.test.mjs +0 -0
  467. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/verify-change-context.test.mjs +0 -0
  468. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/version-pin.test.mjs +0 -0
  469. {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/whats-new.test.mjs +0 -0
@@ -6,10 +6,10 @@ description: AI-driven documentation repair with structured research workflow, t
6
6
  compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
7
7
  metadata:
8
8
  author: docguard
9
- version: 0.34.3
9
+ version: 0.34.5
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.34.3 -->
12
+ <!-- docguard:version: 0.34.5 -->
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.34.2
10
+ version: 0.34.5
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.34.2 -->
13
+ <!-- docguard:version: 0.34.5 -->
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.34.3
9
+ version: 0.34.5
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.34.3 -->
12
+ <!-- docguard:version: 0.34.5 -->
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.34.3
9
+ version: 0.34.5
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.34.3 -->
12
+ <!-- docguard:version: 0.34.5 -->
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.34.2
7
+ version: 0.34.5
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
- <!-- docguard:version: 0.34.2 -->
10
+ <!-- docguard:version: 0.34.5 -->
11
11
 
12
12
  # DocGuard Sync Skill
13
13
 
@@ -0,0 +1,152 @@
1
+ name: Auto-merge (green bot PRs)
2
+
3
+ # Hands-off merging for bot PRs that have ALREADY passed the full CI matrix.
4
+ #
5
+ # WHY workflow_run AND NOT `gh pr merge --auto`: GitHub's native auto-merge
6
+ # requires the repo-level `allow_auto_merge` setting plus REQUIRED status
7
+ # checks in branch protection. Without required checks configured, `--auto`
8
+ # merges IMMEDIATELY without waiting for CI — worse than merging by hand.
9
+ # This workflow instead fires only after "DocGuard CI" reports success for
10
+ # the head SHA, re-verifies every matrix leg via the API, and merges itself.
11
+ # No repo settings required, and it is fail-closed: anything unexpected → skip.
12
+ #
13
+ # SECURITY: workflow_run runs in the BASE repo context with write scope, so it
14
+ # NEVER checks out or executes PR code. It reads PR metadata + check results
15
+ # via the API only. (Same rule as jules-triage.yml / AGENTS.md CI rule.)
16
+ #
17
+ # WHAT AUTO-MERGES:
18
+ # - dependabot: patch + minor only. Majors NEVER (v0.34.1 shipped a Node-18
19
+ # break from an auto-accepted @babel/parser major; bug-255).
20
+ # - jules: test-only and docs-only changes. Anything touching cli/ logic,
21
+ # .github/, or package.json is labeled and left for a human.
22
+
23
+ on:
24
+ workflow_run:
25
+ workflows: ["DocGuard CI"]
26
+ types: [completed]
27
+
28
+ permissions:
29
+ contents: write
30
+ pull-requests: write
31
+ checks: read
32
+ actions: read
33
+
34
+ jobs:
35
+ auto-merge:
36
+ if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request'
37
+ runs-on: ubuntu-latest
38
+ steps:
39
+ - name: Evaluate and merge if safe
40
+ uses: actions/github-script@v9
41
+ with:
42
+ script: |
43
+ const owner = context.repo.owner;
44
+ const repo = context.repo.repo;
45
+ const run = context.payload.workflow_run;
46
+ const headSha = run.head_sha;
47
+
48
+ // ── Locate the PR for this CI run ────────────────────────────
49
+ const { data: prs } = await github.rest.repos.listPullRequestsAssociatedWithCommit({
50
+ owner, repo, commit_sha: headSha,
51
+ });
52
+ const pr = prs.find((p) => p.state === 'open');
53
+ if (!pr) { core.info('No open PR for this SHA — nothing to do.'); return; }
54
+ const num = pr.number;
55
+ const author = pr.user.login;
56
+
57
+ const BOT_DEPENDABOT = 'dependabot[bot]';
58
+ const BOT_JULES = 'google-labs-jules[bot]';
59
+ const BOT_ACTIONS = 'github-actions[bot]';
60
+ if (![BOT_DEPENDABOT, BOT_JULES, BOT_ACTIONS].includes(author)) {
61
+ core.info(`#${num} authored by ${author} (not a handled bot) — leaving alone.`);
62
+ return;
63
+ }
64
+
65
+ const hold = async (label, why) => {
66
+ try {
67
+ await github.rest.issues.addLabels({ owner, repo, issue_number: num, labels: [label] });
68
+ } catch (e) { core.info(`label skipped: ${e.message}`); }
69
+ await github.rest.issues.createComment({
70
+ owner, repo, issue_number: num,
71
+ body: `⏸️ **Held for human review** — ${why}\n\nCI is green, but this falls outside the auto-merge policy in \`.github/workflows/auto-merge.yml\`.`,
72
+ });
73
+ core.notice(`#${num} held: ${why}`);
74
+ };
75
+
76
+ // ── Re-verify EVERY matrix leg independently ─────────────────
77
+ // workflow_run.conclusion=success covers this run, but be explicit:
78
+ // all four Node legs must be present AND successful. Fail closed.
79
+ const { data: checks } = await github.rest.checks.listForRef({
80
+ owner, repo, ref: headSha, per_page: 100,
81
+ });
82
+ const REQUIRED = ['test (18)', 'test (20)', 'test (22)', 'test (24)'];
83
+ const bad = [];
84
+ for (const name of REQUIRED) {
85
+ const c = checks.check_runs.find((r) => r.name === name);
86
+ if (!c) bad.push(`${name}: missing`);
87
+ else if (c.conclusion !== 'success') bad.push(`${name}: ${c.conclusion}`);
88
+ }
89
+ if (bad.length) {
90
+ core.info(`#${num} not merging — checks not all green: ${bad.join(', ')}`);
91
+ return;
92
+ }
93
+
94
+ // ── Scope gate: what files does this PR touch? ───────────────
95
+ const { data: files } = await github.rest.pulls.listFiles({
96
+ owner, repo, pull_number: num, per_page: 300,
97
+ });
98
+ const paths = files.map((f) => f.filename);
99
+
100
+ if (author === BOT_ACTIONS) {
101
+ // Release PRs cut by scheduled-release.yml. Tightly constrained:
102
+ // must come from a release/ branch and touch ONLY the version +
103
+ // changelog + generated extension metadata. Anything else under
104
+ // this bot's name is not something we cut, so hold it.
105
+ if (!pr.head.ref.startsWith('release/')) {
106
+ await hold('needs-review', `an automated PR from a non-\`release/\` branch (\`${pr.head.ref}\`).`);
107
+ return;
108
+ }
109
+ const ALLOWED = /^(package(-lock)?\.json|CHANGELOG\.md|extensions\/|\.agent\/)/;
110
+ const unexpected = paths.filter((p) => !ALLOWED.test(p));
111
+ if (unexpected.length) {
112
+ await hold('needs-review', `a release PR touching unexpected files:\n${unexpected.map((p) => `- \`${p}\``).join('\n')}`);
113
+ return;
114
+ }
115
+ core.info(`#${num} automated release PR (${pr.head.ref}) — eligible.`);
116
+ } else if (author === BOT_DEPENDABOT) {
117
+ // Version delta from the title: "bump X from 1.2.3 to 1.2.4"
118
+ const m = /from (\d+)\.(\d+)\.(\d+)\S* to (\d+)\.(\d+)\.(\d+)/.exec(pr.title || '');
119
+ if (!m) { await hold('needs-review', 'could not parse the version delta from the PR title.'); return; }
120
+ const [fromMaj, fromMin] = [Number(m[1]), Number(m[2])];
121
+ const [toMaj, toMin] = [Number(m[4]), Number(m[5])];
122
+ if (toMaj !== fromMaj) {
123
+ await hold('needs-review', `this is a **major** bump (${m[1]}.${m[2]}.${m[3]} → ${m[4]}.${m[5]}.${m[6]}). Majors are never auto-merged — a @babel/parser major silently dropped Node 18 support and broke a release (bug-255).`);
124
+ return;
125
+ }
126
+ core.info(`#${num} dependabot ${toMin !== fromMin ? 'minor' : 'patch'} bump — eligible.`);
127
+ } else {
128
+ // Jules: only test-only / docs-only changes auto-merge.
129
+ const risky = paths.filter((p) =>
130
+ !(p.startsWith('tests/') || p.startsWith('docs/') || p.endsWith('.md'))
131
+ );
132
+ if (risky.length) {
133
+ await hold('jules-review', `it changes non-test/non-doc files:\n${risky.map((p) => `- \`${p}\``).join('\n')}\n\nProduction-logic changes from an agent get a human read before they ship to npm.`);
134
+ return;
135
+ }
136
+ core.info(`#${num} jules test/docs-only (${paths.length} files) — eligible.`);
137
+ }
138
+
139
+ // ── Merge ────────────────────────────────────────────────────
140
+ try {
141
+ await github.rest.pulls.merge({
142
+ owner, repo, pull_number: num, merge_method: 'squash',
143
+ });
144
+ await github.rest.issues.createComment({
145
+ owner, repo, issue_number: num,
146
+ body: `🤖 **Auto-merged** — all four Node legs (18/20/22/24) green, within the test-runtime budget, and inside the auto-merge policy in \`.github/workflows/auto-merge.yml\`.`,
147
+ });
148
+ core.notice(`Merged #${num}.`);
149
+ } catch (e) {
150
+ core.warning(`Merge of #${num} failed: ${e.message}`);
151
+ await hold('needs-review', `auto-merge failed: \`${e.message}\``);
152
+ }
@@ -45,8 +45,30 @@ jobs:
45
45
  run: python3 -c "import docguard_cli.wrapper; print('docguard_cli.wrapper OK')"
46
46
 
47
47
  # ── Automated Test Suite ──
48
- - name: Run Tests
49
- run: npm test
48
+ # Also enforces a RUNTIME BUDGET. A test that walks an unintended tree
49
+ # (e.g. passing '/' as a project dir) still PASSES — it just takes
50
+ # forever. PR #328 did exactly that: tests/schemas.test.mjs went from
51
+ # 118ms to >10s and the whole suite from ~25s to 190s, green the entire
52
+ # time. Only a duration check catches that class, so auto-merge depends
53
+ # on this gate existing. Normal: ~33s (node 24) to ~51s (node 18) on CI.
54
+ # Budget is deliberately loose — it catches catastrophes, not jitter.
55
+ - name: Run Tests (with runtime budget)
56
+ env:
57
+ TEST_BUDGET_MS: 120000
58
+ run: |
59
+ set -o pipefail
60
+ npm test 2>&1 | tee /tmp/test-output.txt
61
+ DURATION=$(grep -oE 'duration_ms [0-9]+' /tmp/test-output.txt | tail -1 | grep -oE '[0-9]+' | cut -d. -f1)
62
+ if [ -z "$DURATION" ]; then
63
+ echo "::warning::Could not parse test duration — skipping budget check"
64
+ exit 0
65
+ fi
66
+ echo "Test suite duration: ${DURATION}ms (budget: ${TEST_BUDGET_MS}ms)"
67
+ if [ "$DURATION" -gt "$TEST_BUDGET_MS" ]; then
68
+ echo "::error::Test suite took ${DURATION}ms, over the ${TEST_BUDGET_MS}ms budget."
69
+ echo "::error::Something is scanning far more than it should (see PR #328 / bug-254)."
70
+ exit 1
71
+ fi
50
72
 
51
73
  # ── Self-validation (dogfooding) ──
52
74
  - name: CLI Version
@@ -52,7 +52,32 @@ jobs:
52
52
  .trim();
53
53
  const mine = norm(title);
54
54
  const { data: open } = await github.rest.pulls.list({ owner, repo, state: 'open', per_page: 100 });
55
- const dup = mine && open.find((p) => p.number !== num && norm(p.title) === mine);
55
+ let dup = mine && open.find((p) => p.number !== num && norm(p.title) === mine);
56
+
57
+ // Title-equality alone is too strict: #324 "add tests for untested
58
+ // shared-ignore utilities", #325 "add missing tests for
59
+ // shared-ignore functions" and #329 "Add unit tests for
60
+ // shared-ignore detection utilities" were the SAME work, all three
61
+ // sat open, and two of them would have collided on the same import
62
+ // block if merged together. So also treat a PR as a duplicate when
63
+ // it touches an identical file set to another open Jules PR.
64
+ // Still metadata-only (listFiles) — never checks out PR code.
65
+ if (!dup) {
66
+ const fileSet = async (n) => {
67
+ const { data } = await github.rest.pulls.listFiles({ owner, repo, pull_number: n, per_page: 300 });
68
+ return data.map((f) => f.filename).sort().join('|');
69
+ };
70
+ try {
71
+ const mineFiles = await fileSet(num);
72
+ if (mineFiles) {
73
+ for (const p of open) {
74
+ if (p.number === num) continue;
75
+ if (p.user.login !== 'google-labs-jules[bot]') continue;
76
+ if (await fileSet(p.number) === mineFiles) { dup = p; break; }
77
+ }
78
+ }
79
+ } catch (e) { core.info(`file-overlap dup check skipped: ${e.message}`); }
80
+ }
56
81
 
57
82
  const addLabel = async (name) => {
58
83
  try {
@@ -204,17 +204,60 @@ jobs:
204
204
  - uses: actions/setup-node@v7
205
205
  with:
206
206
  node-version: 20
207
- registry-url: 'https://registry.npmjs.org'
207
+ # DELIBERATELY NO `registry-url`. setup-node's registry-url writes an
208
+ # .npmrc containing:
209
+ # //registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
210
+ # With NODE_AUTH_TOKEN removed (Trusted Publishing), that expands to
211
+ # an EMPTY token. npm then takes the token-auth path holding no token
212
+ # and 404s, never attempting the OIDC exchange at all. v0.34.4 failed
213
+ # exactly this way: npm@11 installed fine, provenance signed fine, no
214
+ # OIDC notice in the log, then "404 ... could not be found or you do
215
+ # not have permission". npm defaults to registry.npmjs.org anyway, so
216
+ # dropping this loses nothing.
208
217
 
209
218
  # Trusted Publishing (OIDC) needs npm CLI >= 11.5.0; Node 20's bundled
210
- # npm predates that, so self-update first. No NODE_AUTH_TOKEN needed —
211
- # npm exchanges the id-token (permissions, above) directly with the
212
- # registry via the trusted-publisher connection configured on
213
- # npmjs.com (raccioly/docguard, release.yml). This replaces the
214
- # NPM_TOKEN-based auth that silently broke for 2 releases (v0.34.1,
215
- # v0.34.2 never reached npm) when the token expired — nothing here
216
- # can expire the same way; a short-lived token is minted per run.
217
- - run: npm install -g npm@latest
219
+ # npm predates that, so self-update first. Pinned to the 11.x line
220
+ # (NOT `npm@latest`) because npm 12 requires Node ^22.22.2 || ^24.15.0
221
+ # || >=26.0.0 -- newer than the Node 20 this job runs on. Learned this
222
+ # the hard way: the first cut of this fix used `npm@latest` and broke
223
+ # the same way the @babel/parser major bump did earlier (bug-255) --
224
+ # an unpinned "latest" floated past what this job's Node version
225
+ # supports. npm 11.x itself supports Node ^20.17.0 || >=22.9.0, so it
226
+ # installs cleanly here. No NODE_AUTH_TOKEN needed — npm exchanges the
227
+ # id-token (permissions, above) directly with the registry via the
228
+ # trusted-publisher connection configured on npmjs.com
229
+ # (raccioly/docguard, release.yml). This replaces the NPM_TOKEN-based
230
+ # auth that silently broke for 2 releases (v0.34.1, v0.34.2 never
231
+ # reached npm) when the token expired — nothing here can expire the
232
+ # same way; a short-lived token is minted per run.
233
+ - run: npm install -g npm@11
234
+
235
+ # Fail LOUDLY if anything put an auth token back in the npm config.
236
+ # A stray (even empty) _authToken silently routes npm away from OIDC and
237
+ # the only symptom is a generic 404 that reads like a missing package --
238
+ # it cost four releases (v0.34.1 through v0.34.4) to identify. Better to
239
+ # break here with a clear message than to publish-fail cryptically again.
240
+ - name: Assert no npm auth token is configured (OIDC must be the path)
241
+ run: |
242
+ npm --version
243
+ # NOTE: `npm config get <key>` refuses on auth keys ("protected") and
244
+ # `npm config list --json` omits them entirely, so neither can be used
245
+ # to detect this. Grep the actual .npmrc files instead.
246
+ USERCONFIG=$(npm config list | sed -n 's/^userconfig = "\(.*\)"$/\1/p')
247
+ HITS=""
248
+ for f in "$USERCONFIG" ".npmrc" "$HOME/.npmrc"; do
249
+ if [ -n "$f" ] && [ -f "$f" ] && grep -qE '_authToken|_auth[[:space:]]*=' "$f"; then
250
+ HITS="$HITS $f"
251
+ fi
252
+ done
253
+ if [ -n "$HITS" ]; then
254
+ echo "::error::npm auth token found in:$HITS"
255
+ echo "::error::Even an EMPTY _authToken routes npm to token auth and skips OIDC/Trusted Publishing —"
256
+ echo "::error::the only symptom is a generic 404 that reads like a missing package."
257
+ echo "::error::Remove registry-url from setup-node and any NODE_AUTH_TOKEN from this job."
258
+ exit 1
259
+ fi
260
+ echo "No auth token configured — npm will use OIDC (Trusted Publishing)."
218
261
 
219
262
  - name: Publish (with provenance)
220
263
  run: npm publish --provenance
@@ -0,0 +1,171 @@
1
+ name: Scheduled Release
2
+
3
+ # Self-sustaining releases: batches whatever has landed on main since the last
4
+ # tag into a weekly patch release, instead of cutting a version per merge.
5
+ #
6
+ # WHY BATCHED AND NOT PER-MERGE: every release publishes to npm AND PyPI
7
+ # publicly. Per-merge releases would burn a version number per dependabot
8
+ # patch and publish constantly. Weekly batching keeps releases hands-off
9
+ # without turning the registry into a changelog.
10
+ #
11
+ # HOW IT TRIGGERS THE ACTUAL RELEASE: this workflow only bumps package.json
12
+ # and pushes. release.yml is triggered by pushes that touch package.json, so
13
+ # it picks up from there and does tag → GitHub Release → npm → PyPI → catalog
14
+ # reminder. Keeping the publish logic in one place (release.yml) on purpose.
15
+ #
16
+ # NO-OP WHEN NOTHING CHANGED: if there are no commits since the last release
17
+ # tag, this exits without bumping — no empty releases.
18
+
19
+ on:
20
+ schedule:
21
+ - cron: '0 9 * * 1' # Mondays 09:00 UTC
22
+ workflow_dispatch:
23
+ inputs:
24
+ bump:
25
+ description: 'Version bump type'
26
+ required: false
27
+ default: 'patch'
28
+ type: choice
29
+ options: [patch, minor]
30
+
31
+ permissions:
32
+ contents: write
33
+
34
+ jobs:
35
+ cut-release:
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: actions/checkout@v7
39
+ with:
40
+ fetch-depth: 0
41
+
42
+ - uses: actions/setup-node@v7
43
+ with:
44
+ node-version: 20
45
+
46
+ - name: Check for unreleased changes
47
+ id: check
48
+ run: |
49
+ CURRENT=$(node -p "require('./package.json').version")
50
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
51
+ echo "current=$CURRENT" >> "$GITHUB_OUTPUT"
52
+
53
+ if [ -z "$LAST_TAG" ]; then
54
+ echo "No tags yet — nothing to compare against, skipping."
55
+ echo "changed=false" >> "$GITHUB_OUTPUT"
56
+ exit 0
57
+ fi
58
+
59
+ # Commits since the last tag, excluding the release commits themselves
60
+ # and the OpenWolf bookkeeping noise (.wolf/ is auto-written by hooks
61
+ # every session and must never on its own justify a release).
62
+ COMMITS=$(git log "${LAST_TAG}..HEAD" --oneline -- . ':!.wolf' | grep -viE '^[0-9a-f]+ (release|chore\(release\)):' || true)
63
+ COUNT=$(echo "$COMMITS" | grep -c . || true)
64
+
65
+ echo "Last tag: $LAST_TAG"
66
+ echo "Releasable commits since: $COUNT"
67
+ echo "$COMMITS"
68
+
69
+ if [ "$COUNT" -eq 0 ]; then
70
+ echo "changed=false" >> "$GITHUB_OUTPUT"
71
+ else
72
+ echo "changed=true" >> "$GITHUB_OUTPUT"
73
+ echo "last_tag=$LAST_TAG" >> "$GITHUB_OUTPUT"
74
+ # Stash the log for the changelog entry
75
+ echo "$COMMITS" > /tmp/commits.txt
76
+ fi
77
+
78
+ - name: Bump version and write changelog
79
+ if: steps.check.outputs.changed == 'true'
80
+ run: |
81
+ BUMP="${{ inputs.bump || 'patch' }}"
82
+ OLD="${{ steps.check.outputs.current }}"
83
+ NEW=$(node -e "
84
+ const [maj,min,pat] = '$OLD'.split('.').map(Number);
85
+ console.log('$BUMP' === 'minor' ? \`\${maj}.\${min+1}.0\` : \`\${maj}.\${min}.\${pat+1}\`);
86
+ ")
87
+ echo "Bumping $OLD → $NEW"
88
+
89
+ node -e "
90
+ const fs = require('fs');
91
+ const p = JSON.parse(fs.readFileSync('package.json','utf8'));
92
+ p.version = '$NEW';
93
+ fs.writeFileSync('package.json', JSON.stringify(p,null,2) + '\n');
94
+ "
95
+ npm install --package-lock-only --ignore-scripts
96
+
97
+ # Changelog entry from the commit subjects, so release.yml's notes
98
+ # extractor (which reads the '## [VERSION]' section) has real content.
99
+ {
100
+ echo "## [$NEW] - $(date -u +%Y-%m-%d)"
101
+ echo
102
+ echo "Automated weekly release — batches everything merged since \`${{ steps.check.outputs.last_tag }}\`."
103
+ echo
104
+ echo "### Changed"
105
+ echo
106
+ sed -E 's/^[0-9a-f]+ /- /' /tmp/commits.txt
107
+ echo
108
+ } > /tmp/entry.md
109
+
110
+ # Splice in directly under '## [Unreleased]'
111
+ awk '/^## \[Unreleased\]/ { print; print ""; while ((getline line < "/tmp/entry.md") > 0) print line; next } { print }' \
112
+ CHANGELOG.md > /tmp/CHANGELOG.new && mv /tmp/CHANGELOG.new CHANGELOG.md
113
+
114
+ # Keep the spec-kit extension metadata in lockstep (same thing
115
+ # `docguard fix --write` does locally before a manual release).
116
+ node cli/docguard.mjs fix --write || true
117
+
118
+ echo "NEW_VERSION=$NEW" >> "$GITHUB_ENV"
119
+
120
+ - name: Verify the tree is still green before releasing
121
+ if: steps.check.outputs.changed == 'true'
122
+ run: |
123
+ npm ci
124
+ npm test
125
+ node cli/docguard.mjs guard || [ $? -eq 2 ]
126
+
127
+ # Two stacked constraints make a direct `git push origin HEAD:main`
128
+ # impossible here, so this opens a PR instead:
129
+ #
130
+ # 1. main requires a pull request. github-actions[bot] is not an admin
131
+ # and has no bypass, so a direct push is rejected outright.
132
+ # 2. A PR opened with GITHUB_TOKEN does NOT trigger further workflow
133
+ # runs (GitHub's loop guard). So ci.yml would never fire on it, the
134
+ # required test (18/20/22/24) checks would never report, and the PR
135
+ # would sit forever on "Expected — waiting for status to be
136
+ # reported" — unmergeable.
137
+ #
138
+ # So: push a branch (unprotected), open the PR, then explicitly dispatch
139
+ # ci.yml against that branch so the checks DO report on its head SHA.
140
+ # auto-merge.yml then merges it once all four legs are green, and the
141
+ # resulting package.json change on main triggers release.yml to publish.
142
+ - name: Open release PR and kick off its CI
143
+ if: steps.check.outputs.changed == 'true'
144
+ env:
145
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
146
+ run: |
147
+ BRANCH="release/v${NEW_VERSION}"
148
+ git config user.name "github-actions[bot]"
149
+ git config user.email "github-actions[bot]@users.noreply.github.com"
150
+ git checkout -b "$BRANCH"
151
+ git add package.json package-lock.json CHANGELOG.md extensions/ .agent/ 2>/dev/null || true
152
+ git commit -m "release: v${NEW_VERSION} — automated weekly batch
153
+
154
+ Cut by .github/workflows/scheduled-release.yml. Publishing itself is
155
+ handled by release.yml, which triggers once this lands on main."
156
+ git push origin "$BRANCH"
157
+
158
+ gh pr create \
159
+ --base main \
160
+ --head "$BRANCH" \
161
+ --title "release: v${NEW_VERSION} — automated weekly batch" \
162
+ --body "Automated weekly release cut by \`scheduled-release.yml\`.
163
+
164
+ Batches everything merged since \`${{ steps.check.outputs.last_tag }}\`. Tests and \`guard\` already passed on this tree before the PR was opened; CI is dispatched separately below so the required checks report (a GITHUB_TOKEN-opened PR does not trigger workflows on its own).
165
+
166
+ Once green, \`auto-merge.yml\` merges this, and the \`package.json\` change triggers \`release.yml\` to tag and publish."
167
+
168
+ # Required checks must actually report on this SHA or the PR can
169
+ # never merge -- see constraint 2 above.
170
+ gh workflow run ci.yml --ref "$BRANCH"
171
+ echo "Opened $BRANCH and dispatched CI."
@@ -1,7 +1,7 @@
1
1
  # anatomy.md
2
2
 
3
- > Auto-maintained by OpenWolf. Last scanned: 2026-09-11T15:17:16.962Z
4
- > Files: 704 tracked | Anatomy hits: 0 | Misses: 0
3
+ > Auto-maintained by OpenWolf. Last scanned: 2026-09-11T15:50:08.916Z
4
+ > Files: 707 tracked | Anatomy hits: 0 | Misses: 0
5
5
 
6
6
  ## ../../../../../../../tmp/
7
7
 
@@ -29,7 +29,7 @@
29
29
  - `.pre-commit-hooks.yaml` — DocGuard hooks for the pre-commit framework (https://pre-commit.com). (~490 tok)
30
30
  - `action.yml` — Declares fs (~7591 tok)
31
31
  - `AGENTS.md` — AI Agent Instructions — DocGuard (~1827 tok)
32
- - `CHANGELOG.md` — Changelog (~51752 tok)
32
+ - `CHANGELOG.md` — Changelog (~53296 tok)
33
33
  - `CLAUDE.md` — OpenWolf (~57 tok)
34
34
  - `CODE_OF_CONDUCT.md` — Contributor Covenant Code of Conduct (~532 tok)
35
35
  - `COMPARISONS.md` — Comparisons & Honest Limitations (~3382 tok)
@@ -959,8 +959,11 @@
959
959
 
960
960
  ## .github/workflows/
961
961
 
962
- - `ci.yml` — CI: DocGuard CI (~1468 tok)
963
- - `release.yml` — CI: Auto Release — Tag, GitHub Release, npm, PyPI (~4114 tok)
962
+ - `auto-merge.yml` — CI: Auto-merge (green bot PRs) (~2234 tok)
963
+ - `ci.yml` — CI: DocGuard CI (~1843 tok)
964
+ - `jules-triage.yml` — CI: Jules PR Triage (~1635 tok)
965
+ - `release.yml` — CI: Auto Release — Tag, GitHub Release, npm, PyPI (~4892 tok)
966
+ - `scheduled-release.yml` — CI: Scheduled Release (~2099 tok)
964
967
  - `sync-speckit-catalog.yml` — CI: Prepare Spec Kit Catalog Submission (Manual) (~1385 tok)
965
968
 
966
969
  ## .jules/
@@ -1113,7 +1116,7 @@
1113
1116
  - `canonical-docs-nested-phase2.test.mjs` — Phase 2 of the nested-canonical-docs fix: the remaining 14 sites found (~1482 tok)
1114
1117
  - `canonical-docs-nested.test.mjs` — Regression: canonical docs in SUBFOLDERS must be seen by every consumer. (~2028 tok)
1115
1118
  - `changelog.test.mjs` — Exports x, x (~1315 tok)
1116
- - `commands.test.mjs` — DocGuard CLI Tests — Tests all commands and flags (~10442 tok)
1119
+ - `commands.test.mjs` — DocGuard CLI Tests — Tests all commands and flags (~10729 tok)
1117
1120
  - `cross-reference.test.mjs` — Cross-Reference Validator — K-7 / S-8 (~4060 tok)
1118
1121
  - `ensure-skills-idempotent.test.mjs` — v0.24 — Skill install is idempotent (field report, Issue D). (~1133 tok)
1119
1122
  - `field-report-3-deferred.test.mjs` — v0.28 — the detection-gap items deferred from LLM field report #3. (~3325 tok)