docguard-cli 0.34.2__tar.gz → 0.34.4__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.2/extensions/spec-kit-docguard → docguard_cli-0.34.4/.agent}/skills/docguard-fix/SKILL.md +2 -2
  2. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/docguard-guard/SKILL.md +2 -2
  3. {docguard_cli-0.34.2/extensions/spec-kit-docguard → docguard_cli-0.34.4/.agent}/skills/docguard-review/SKILL.md +2 -2
  4. {docguard_cli-0.34.2/extensions/spec-kit-docguard → docguard_cli-0.34.4/.agent}/skills/docguard-score/SKILL.md +2 -2
  5. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/docguard-sync/SKILL.md +2 -2
  6. docguard_cli-0.34.4/.github/workflows/auto-merge.yml +135 -0
  7. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/workflows/ci.yml +24 -2
  8. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/workflows/jules-triage.yml +26 -1
  9. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/workflows/release.yml +17 -2
  10. docguard_cli-0.34.4/.github/workflows/scheduled-release.yml +137 -0
  11. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/anatomy.md +8 -5
  12. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/buglog.json +174 -0
  13. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/cerebrum.md +3 -0
  14. docguard_cli-0.34.4/.wolf/hooks/_session.json +133 -0
  15. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/memory.md +20 -0
  16. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/token-ledger.json +500 -7
  17. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/CHANGELOG.md +27 -0
  18. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/PKG-INFO +1 -1
  19. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/extension.yml +1 -1
  20. {docguard_cli-0.34.2/.agent → docguard_cli-0.34.4/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
  21. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/skills/docguard-guard/SKILL.md +2 -2
  22. {docguard_cli-0.34.2/.agent → docguard_cli-0.34.4/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
  23. {docguard_cli-0.34.2/.agent → docguard_cli-0.34.4/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
  24. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
  25. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/package-lock.json +2 -2
  26. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/package.json +1 -1
  27. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/pyproject.toml +1 -1
  28. docguard_cli-0.34.2/.wolf/hooks/_session.json +0 -51
  29. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/docguard.fix.md +0 -0
  30. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/docguard.guard.md +0 -0
  31. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/docguard.review.md +0 -0
  32. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/docguard.score.md +0 -0
  33. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.analyze.md +0 -0
  34. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.checklist.md +0 -0
  35. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.clarify.md +0 -0
  36. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.constitution.md +0 -0
  37. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.implement.md +0 -0
  38. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.plan.md +0 -0
  39. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.specify.md +0 -0
  40. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.tasks.md +0 -0
  41. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/commands/speckit.taskstoissues.md +0 -0
  42. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-analyze/SKILL.md +0 -0
  43. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-checklist/SKILL.md +0 -0
  44. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-clarify/SKILL.md +0 -0
  45. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-constitution/SKILL.md +0 -0
  46. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-implement/SKILL.md +0 -0
  47. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-plan/SKILL.md +0 -0
  48. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-specify/SKILL.md +0 -0
  49. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-tasks/SKILL.md +0 -0
  50. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
  51. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.claude/rules/openwolf.md +0 -0
  52. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.claude/settings.json +0 -0
  53. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.docguard.json +0 -0
  54. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.docguardignore +0 -0
  55. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  56. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
  57. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  58. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  59. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/dependabot.yml +0 -0
  60. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/scripts/speckit-submission.py +0 -0
  61. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/workflows/supply-chain.yml +0 -0
  62. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.github/workflows/sync-speckit-catalog.yml +0 -0
  63. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.gitignore +0 -0
  64. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.jules/bolt.md +0 -0
  65. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.jules/palette.md +0 -0
  66. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.jules/sentinel.md +0 -0
  67. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.jules-setup.sh +0 -0
  68. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.npmignore +0 -0
  69. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.npmrc +0 -0
  70. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.pre-commit-hooks.yaml +0 -0
  71. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
  72. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
  73. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/extensions/.cache/catalog-metadata.json +0 -0
  74. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/extensions/.cache/catalog.json +0 -0
  75. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/init-options.json +0 -0
  76. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/memory/constitution.md +0 -0
  77. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  78. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/scripts/bash/common.sh +0 -0
  79. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/scripts/bash/create-new-feature.sh +0 -0
  80. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/scripts/bash/setup-plan.sh +0 -0
  81. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/scripts/bash/update-agent-context.sh +0 -0
  82. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/templates/agent-file-template.md +0 -0
  83. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/templates/checklist-template.md +0 -0
  84. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/templates/constitution-template.md +0 -0
  85. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/templates/plan-template.md +0 -0
  86. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/templates/spec-template.md +0 -0
  87. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.specify/templates/tasks-template.md +0 -0
  88. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/OPENWOLF.md +0 -0
  89. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/config.json +0 -0
  90. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/cron-manifest.json +0 -0
  91. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/cron-state.json +0 -0
  92. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/daemon.log +0 -0
  93. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/designqc-report.json +0 -0
  94. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/_wrap_up_nudged +0 -0
  95. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/package.json +0 -0
  96. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/post-read.js +0 -0
  97. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/post-write.js +0 -0
  98. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/pre-read.js +0 -0
  99. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/pre-write.js +0 -0
  100. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/session-start.js +0 -0
  101. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/shared.js +0 -0
  102. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/hooks/stop.js +0 -0
  103. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/identity.md +0 -0
  104. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/reframe-frameworks.md +0 -0
  105. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/.wolf/suggestions.json +0 -0
  106. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/AGENTS.md +0 -0
  107. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/CLAUDE.md +0 -0
  108. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/CODE_OF_CONDUCT.md +0 -0
  109. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/COMPARISONS.md +0 -0
  110. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/CONTRIBUTING.md +0 -0
  111. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/DRIFT-LOG.md +0 -0
  112. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/Dockerfile +0 -0
  113. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/LICENSE +0 -0
  114. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/PHILOSOPHY.md +0 -0
  115. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/PRIVACY.md +0 -0
  116. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/README.es.md +0 -0
  117. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/README.md +0 -0
  118. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/README.pt-BR.md +0 -0
  119. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/ROADMAP.md +0 -0
  120. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/SECURITY.md +0 -0
  121. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/STANDARD.md +0 -0
  122. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/SUPPLY-CHAIN-AUDIT.md +0 -0
  123. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/SUPPORT.md +0 -0
  124. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/VALIDATION.md +0 -0
  125. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/action.yml +0 -0
  126. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/assets/bin/docguard +0 -0
  127. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/assets/demo.gif +0 -0
  128. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/assets/demo.tape +0 -0
  129. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/assets/docguard-logo.png +0 -0
  130. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/agent.mjs +0 -0
  131. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/agents.mjs +0 -0
  132. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/badge.mjs +0 -0
  133. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/ci.mjs +0 -0
  134. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/demo.mjs +0 -0
  135. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/diagnose.mjs +0 -0
  136. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/diff.mjs +0 -0
  137. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/explain.mjs +0 -0
  138. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/feedback.mjs +0 -0
  139. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/fix.mjs +0 -0
  140. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/generate.mjs +0 -0
  141. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/guard.mjs +0 -0
  142. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/hooks.mjs +0 -0
  143. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/impact.mjs +0 -0
  144. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/init.mjs +0 -0
  145. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/llms.mjs +0 -0
  146. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/mcp.mjs +0 -0
  147. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/memory.mjs +0 -0
  148. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/publish.mjs +0 -0
  149. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/report.mjs +0 -0
  150. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/score.mjs +0 -0
  151. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/setup.mjs +0 -0
  152. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/sync-tests.mjs +0 -0
  153. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/sync.mjs +0 -0
  154. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/trace.mjs +0 -0
  155. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/upgrade.mjs +0 -0
  156. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/verify.mjs +0 -0
  157. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/commands/watch.mjs +0 -0
  158. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/config.mjs +0 -0
  159. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/docguard.mjs +0 -0
  160. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/ensure-skills.mjs +0 -0
  161. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/findings.mjs +0 -0
  162. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/agent-readability.mjs +0 -0
  163. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/api-doc.mjs +0 -0
  164. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/cdk.mjs +0 -0
  165. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/doc-tools.mjs +0 -0
  166. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/frontend.mjs +0 -0
  167. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/iac.mjs +0 -0
  168. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/instruction-audit.mjs +0 -0
  169. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/integrations.mjs +0 -0
  170. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/inventory.mjs +0 -0
  171. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/js-ast.mjs +0 -0
  172. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/memory-plan.mjs +0 -0
  173. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/project-type.mjs +0 -0
  174. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/py-ast.mjs +0 -0
  175. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/routes.mjs +0 -0
  176. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/schemas.mjs +0 -0
  177. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/semantic-claims.mjs +0 -0
  178. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/scanners/speckit.mjs +0 -0
  179. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/shared-diff.mjs +0 -0
  180. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/shared-git.mjs +0 -0
  181. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/shared-ignore.mjs +0 -0
  182. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/shared-ir.mjs +0 -0
  183. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/shared-source.mjs +0 -0
  184. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/shared-trace-patterns.mjs +0 -0
  185. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/shared.mjs +0 -0
  186. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validator-markers.mjs +0 -0
  187. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/api-doc-smells.mjs +0 -0
  188. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/api-surface.mjs +0 -0
  189. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/architecture.mjs +0 -0
  190. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/canonical-sync.mjs +0 -0
  191. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/changelog.mjs +0 -0
  192. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/cross-reference.mjs +0 -0
  193. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/diff-suspicion.mjs +0 -0
  194. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/doc-quality.mjs +0 -0
  195. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/docs-coverage.mjs +0 -0
  196. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/docs-diff.mjs +0 -0
  197. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/docs-sync.mjs +0 -0
  198. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/drift.mjs +0 -0
  199. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/environment.mjs +0 -0
  200. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/freshness.mjs +0 -0
  201. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/generated-staleness.mjs +0 -0
  202. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/metadata-sync.mjs +0 -0
  203. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/metrics-consistency.mjs +0 -0
  204. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/reference-existence.mjs +0 -0
  205. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/schema-sync.mjs +0 -0
  206. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/security.mjs +0 -0
  207. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/spec-kit.mjs +0 -0
  208. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/structure.mjs +0 -0
  209. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/surface-sync.mjs +0 -0
  210. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/test-spec.mjs +0 -0
  211. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/todo-tracking.mjs +0 -0
  212. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/validators/traceability.mjs +0 -0
  213. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/api-reference.mjs +0 -0
  214. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/baseline.mjs +0 -0
  215. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/doc-generators.mjs +0 -0
  216. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/fix-memory.mjs +0 -0
  217. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/generate-io.mjs +0 -0
  218. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/history.mjs +0 -0
  219. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/junit.mjs +0 -0
  220. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/mechanical.mjs +0 -0
  221. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/sarif.mjs +0 -0
  222. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/cli/writers/sections.mjs +0 -0
  223. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/commands/docguard.fix.md +0 -0
  224. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/commands/docguard.guard.md +0 -0
  225. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/commands/docguard.review.md +0 -0
  226. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/commands/docguard.score.md +0 -0
  227. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/configs/fastify.json +0 -0
  228. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/configs/generic.json +0 -0
  229. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/configs/nextjs.json +0 -0
  230. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/configs/python.json +0 -0
  231. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docguard_cli/__init__.py +0 -0
  232. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docguard_cli/wrapper.py +0 -0
  233. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/ai-integration.md +0 -0
  234. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/commands.md +0 -0
  235. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/configuration.md +0 -0
  236. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/doc-sections.md +0 -0
  237. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/faq.md +0 -0
  238. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/installation.md +0 -0
  239. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/profiles.md +0 -0
  240. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs/quickstart.md +0 -0
  241. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/ARCHITECTURE.md +0 -0
  242. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/CI-RECIPES.md +0 -0
  243. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/DATA-MODEL.md +0 -0
  244. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/ENVIRONMENT.md +0 -0
  245. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/REQUIREMENTS.md +0 -0
  246. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/SECURITY.md +0 -0
  247. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/SURFACE-AUDIT.md +0 -0
  248. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-canonical/TEST-SPEC.md +0 -0
  249. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/docs-implementation/MIGRATION-v0.20.md +0 -0
  250. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/01-express-api/README.md +0 -0
  251. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/01-express-api/package.json +0 -0
  252. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/01-express-api/server.js +0 -0
  253. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/02-python-flask/README.md +0 -0
  254. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/02-python-flask/app.py +0 -0
  255. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
  256. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/02-python-flask/requirements.txt +0 -0
  257. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
  258. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/README.md +0 -0
  259. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
  260. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
  261. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/package.json +0 -0
  262. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/src/index.js +0 -0
  263. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/tasks.json +0 -0
  264. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
  265. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/examples/README.md +0 -0
  266. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/LICENSE +0 -0
  267. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/README.md +0 -0
  268. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
  269. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/fix.md +0 -0
  270. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/generate.md +0 -0
  271. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/guard.md +0 -0
  272. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/init.md +0 -0
  273. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/score.md +0 -0
  274. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/sync.md +0 -0
  275. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/commands/trace.md +0 -0
  276. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
  277. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
  278. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
  279. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
  280. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
  281. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
  282. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +0 -0
  283. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/glama.json +0 -0
  284. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/llms-full.txt +0 -0
  285. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/llms.txt +0 -0
  286. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/mcpb/README.md +0 -0
  287. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/mcpb/manifest.template.json +0 -0
  288. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/packaging/homebrew/docguard.rb +0 -0
  289. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/packaging/submissions.md +0 -0
  290. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/schemas/docguard-config.schema.json +0 -0
  291. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/server.json +0 -0
  292. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/smithery.yaml +0 -0
  293. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/001-fix-ignore-validators/plan.md +0 -0
  294. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/001-fix-ignore-validators/spec.md +0 -0
  295. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/001-fix-ignore-validators/tasks.md +0 -0
  296. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/002-fix-test-discovery/plan.md +0 -0
  297. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/002-fix-test-discovery/spec.md +0 -0
  298. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/002-fix-test-discovery/tasks.md +0 -0
  299. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/003-v011-false-positives/plan.md +0 -0
  300. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/003-v011-false-positives/spec.md +0 -0
  301. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/003-v011-false-positives/tasks.md +0 -0
  302. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/004-v020-env-var-false-negative/spec.md +0 -0
  303. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/specs/005-hugocross-next-bugs/spec.md +0 -0
  304. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/ADR.md.template +0 -0
  305. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/AGENTS.md.template +0 -0
  306. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/ARCHITECTURE.md.template +0 -0
  307. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/CHANGELOG.md.template +0 -0
  308. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/CURRENT-STATE.md.template +0 -0
  309. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/DATA-MODEL.md.template +0 -0
  310. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/DEPLOYMENT.md.template +0 -0
  311. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/DRIFT-LOG.md.template +0 -0
  312. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/ENVIRONMENT.md.template +0 -0
  313. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/KNOWN-GOTCHAS.md.template +0 -0
  314. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/REQUIREMENTS.md.template +0 -0
  315. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/ROADMAP.md.template +0 -0
  316. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/RUNBOOKS.md.template +0 -0
  317. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/SECURITY.md.template +0 -0
  318. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/TEST-SPEC.md.template +0 -0
  319. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/TROUBLESHOOTING.md.template +0 -0
  320. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/VENDOR-BUGS.md.template +0 -0
  321. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/ci/github-actions.yml +0 -0
  322. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/ci/gitlab-component.yml +0 -0
  323. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/commands/docguard.fix.md +0 -0
  324. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/commands/docguard.guard.md +0 -0
  325. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/commands/docguard.init.md +0 -0
  326. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/commands/docguard.review.md +0 -0
  327. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/commands/docguard.update.md +0 -0
  328. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/.docguard.json +0 -0
  329. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/.env.example +0 -0
  330. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/AGENTS.md +0 -0
  331. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/CHANGELOG.md +0 -0
  332. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/DRIFT-LOG.md +0 -0
  333. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/README.md +0 -0
  334. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
  335. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
  336. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
  337. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
  338. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
  339. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
  340. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/package.json +0 -0
  341. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/src/api.mjs +0 -0
  342. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/src/notifier.mjs +0 -0
  343. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/src/scheduler.mjs +0 -0
  344. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/templates/demo-fixture/src/worker.mjs +0 -0
  345. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/agent-readability.test.mjs +0 -0
  346. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/agent.test.mjs +0 -0
  347. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/agents-command.test.mjs +0 -0
  348. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/agents-sync.test.mjs +0 -0
  349. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/anchor-autofix.test.mjs +0 -0
  350. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/api-doc-smells.test.mjs +0 -0
  351. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/api-doc.test.mjs +0 -0
  352. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/api-surface.test.mjs +0 -0
  353. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/api-write.test.mjs +0 -0
  354. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/architecture.test.mjs +0 -0
  355. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/b7-node-env-symmetry.test.mjs +0 -0
  356. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/backup-failure.test.mjs +0 -0
  357. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/badge.test.mjs +0 -0
  358. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/baseline.test.mjs +0 -0
  359. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/canonical-docs-nested-phase2.test.mjs +0 -0
  360. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/canonical-docs-nested.test.mjs +0 -0
  361. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/canonical-sync.test.mjs +0 -0
  362. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/cdk-detection.test.mjs +0 -0
  363. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/changed-only-scoping.test.mjs +0 -0
  364. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/changed-only.test.mjs +0 -0
  365. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/changelog.test.mjs +0 -0
  366. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/commands.test.mjs +0 -0
  367. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/cross-reference.test.mjs +0 -0
  368. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/demo-command.test.mjs +0 -0
  369. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/diff-suspicion.test.mjs +0 -0
  370. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/doc-quality.test.mjs +0 -0
  371. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/doc-section-synonyms.test.mjs +0 -0
  372. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/docguardignore.test.mjs +0 -0
  373. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/docs-coverage.test.mjs +0 -0
  374. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/docs-diff.test.mjs +0 -0
  375. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/docs-sync.test.mjs +0 -0
  376. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/drift.test.mjs +0 -0
  377. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/ensure-skills-idempotent.test.mjs +0 -0
  378. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/env-schema-detection.test.mjs +0 -0
  379. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/environment.test.mjs +0 -0
  380. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/explain-coverage.test.mjs +0 -0
  381. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/field-report-2-cli.test.mjs +0 -0
  382. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/field-report-3-deferred.test.mjs +0 -0
  383. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/field-report-3.test.mjs +0 -0
  384. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/fix-memory.test.mjs +0 -0
  385. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/fix-suppression.test.mjs +0 -0
  386. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/fixture-projects.test.mjs +0 -0
  387. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/freshness.test.mjs +0 -0
  388. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/frontend-deep.test.mjs +0 -0
  389. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/frontend.test.mjs +0 -0
  390. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/generate-io.test.mjs +0 -0
  391. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/generated-staleness.test.mjs +0 -0
  392. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/guard-classify.test.mjs +0 -0
  393. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/guard-no-throw.test.mjs +0 -0
  394. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/history.test.mjs +0 -0
  395. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/hooks.test.mjs +0 -0
  396. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/i18n.test.mjs +0 -0
  397. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/impact.test.mjs +0 -0
  398. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/init-smart-detection.test.mjs +0 -0
  399. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/instruction-audit.test.mjs +0 -0
  400. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/integrations.test.mjs +0 -0
  401. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/inventory.test.mjs +0 -0
  402. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/js-ast.test.mjs +0 -0
  403. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/junit.test.mjs +0 -0
  404. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/llms-full-pack.test.mjs +0 -0
  405. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/mcp-http.test.mjs +0 -0
  406. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/mcp.test.mjs +0 -0
  407. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/mechanical.test.mjs +0 -0
  408. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/memory-plan.test.mjs +0 -0
  409. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/metadata-sync.test.mjs +0 -0
  410. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/metrics-consistency.test.mjs +0 -0
  411. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/metrics-dedup.test.mjs +0 -0
  412. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/monorepo-scanning.test.mjs +0 -0
  413. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/multi-spec.test.mjs +0 -0
  414. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/npm-pack-smoke.test.mjs +0 -0
  415. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/nudge-hook.test.mjs +0 -0
  416. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/openapi-parse-honesty.test.mjs +0 -0
  417. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/patch-0.11.2.test.mjs +0 -0
  418. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/plan-disk-cache.test.mjs +0 -0
  419. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/profile-flag.test.mjs +0 -0
  420. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/project-type.test.mjs +0 -0
  421. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/py-ast.test.mjs +0 -0
  422. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/reference-existence.test.mjs +0 -0
  423. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/regenerate-section.test.mjs +0 -0
  424. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/report.test.mjs +0 -0
  425. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/routes-express-mounts.test.mjs +0 -0
  426. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/routes-fastify.test.mjs +0 -0
  427. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/routes-multilang.test.mjs +0 -0
  428. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/routes-nextjs-app-router.test.mjs +0 -0
  429. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/sarif.test.mjs +0 -0
  430. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/schema-sync.test.mjs +0 -0
  431. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/schemas-multilang.test.mjs +0 -0
  432. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/schemas.test.mjs +0 -0
  433. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/scoping-extended.test.mjs +0 -0
  434. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/score-suggestions.test.mjs +0 -0
  435. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/section-na-markers.test.mjs +0 -0
  436. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/sections.test.mjs +0 -0
  437. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/security-init-injection.test.mjs +0 -0
  438. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/security.test.mjs +0 -0
  439. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/severity.test.mjs +0 -0
  440. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/shared-diff.test.mjs +0 -0
  441. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/shared-git.test.mjs +0 -0
  442. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/shared-ignore-functions.test.mjs +0 -0
  443. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/shared-ir.test.mjs +0 -0
  444. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/shared-source.test.mjs +0 -0
  445. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/speckit-bugfix.test.mjs +0 -0
  446. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/speckit-phantom.test.mjs +0 -0
  447. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/starter-scaffold.test.mjs +0 -0
  448. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/stress-test.test.mjs +0 -0
  449. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/structure.test.mjs +0 -0
  450. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/surface-sync.test.mjs +0 -0
  451. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/sweep-nudge.test.mjs +0 -0
  452. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/sync-since.test.mjs +0 -0
  453. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/sync.test.mjs +0 -0
  454. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/test-spec.test.mjs +0 -0
  455. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/todo-tracking.test.mjs +0 -0
  456. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/trace-features.test.mjs +0 -0
  457. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/trace-multilang.test.mjs +0 -0
  458. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/trace-reverse.test.mjs +0 -0
  459. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/traceability-ir.test.mjs +0 -0
  460. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/traceability.test.mjs +0 -0
  461. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/upgrade-pr-e2e.test.mjs +0 -0
  462. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/upgrade-pr.test.mjs +0 -0
  463. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/upgrade.test.mjs +0 -0
  464. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/v020-consolidation.test.mjs +0 -0
  465. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/validator-markers.test.mjs +0 -0
  466. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/validator-naming.test.mjs +0 -0
  467. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/verify-change-context.test.mjs +0 -0
  468. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/tests/version-pin.test.mjs +0 -0
  469. {docguard_cli-0.34.2 → docguard_cli-0.34.4}/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.2
9
+ version: 0.34.4
10
10
  source: extensions/spec-kit-docguard/skills/docguard-fix
11
11
  ---
12
- <!-- docguard:version: 0.34.2 -->
12
+ <!-- docguard:version: 0.34.4 -->
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.4
11
11
  source: extensions/spec-kit-docguard/skills/docguard-guard
12
12
  ---
13
- <!-- docguard:version: 0.34.2 -->
13
+ <!-- docguard:version: 0.34.4 -->
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.2
9
+ version: 0.34.4
10
10
  source: extensions/spec-kit-docguard/skills/docguard-review
11
11
  ---
12
- <!-- docguard:version: 0.34.2 -->
12
+ <!-- docguard:version: 0.34.4 -->
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.2
9
+ version: 0.34.4
10
10
  source: extensions/spec-kit-docguard/skills/docguard-score
11
11
  ---
12
- <!-- docguard:version: 0.34.2 -->
12
+ <!-- docguard:version: 0.34.4 -->
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.4
8
8
  source: extensions/spec-kit-docguard/skills/docguard-sync
9
9
  ---
10
- <!-- docguard:version: 0.34.2 -->
10
+ <!-- docguard:version: 0.34.4 -->
11
11
 
12
12
  # DocGuard Sync Skill
13
13
 
@@ -0,0 +1,135 @@
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
+ if (![BOT_DEPENDABOT, BOT_JULES].includes(author)) {
60
+ core.info(`#${num} authored by ${author} (not a handled bot) — leaving alone.`);
61
+ return;
62
+ }
63
+
64
+ const hold = async (label, why) => {
65
+ try {
66
+ await github.rest.issues.addLabels({ owner, repo, issue_number: num, labels: [label] });
67
+ } catch (e) { core.info(`label skipped: ${e.message}`); }
68
+ await github.rest.issues.createComment({
69
+ owner, repo, issue_number: num,
70
+ body: `⏸️ **Held for human review** — ${why}\n\nCI is green, but this falls outside the auto-merge policy in \`.github/workflows/auto-merge.yml\`.`,
71
+ });
72
+ core.notice(`#${num} held: ${why}`);
73
+ };
74
+
75
+ // ── Re-verify EVERY matrix leg independently ─────────────────
76
+ // workflow_run.conclusion=success covers this run, but be explicit:
77
+ // all four Node legs must be present AND successful. Fail closed.
78
+ const { data: checks } = await github.rest.checks.listForRef({
79
+ owner, repo, ref: headSha, per_page: 100,
80
+ });
81
+ const REQUIRED = ['test (18)', 'test (20)', 'test (22)', 'test (24)'];
82
+ const bad = [];
83
+ for (const name of REQUIRED) {
84
+ const c = checks.check_runs.find((r) => r.name === name);
85
+ if (!c) bad.push(`${name}: missing`);
86
+ else if (c.conclusion !== 'success') bad.push(`${name}: ${c.conclusion}`);
87
+ }
88
+ if (bad.length) {
89
+ core.info(`#${num} not merging — checks not all green: ${bad.join(', ')}`);
90
+ return;
91
+ }
92
+
93
+ // ── Scope gate: what files does this PR touch? ───────────────
94
+ const { data: files } = await github.rest.pulls.listFiles({
95
+ owner, repo, pull_number: num, per_page: 300,
96
+ });
97
+ const paths = files.map((f) => f.filename);
98
+
99
+ if (author === BOT_DEPENDABOT) {
100
+ // Version delta from the title: "bump X from 1.2.3 to 1.2.4"
101
+ const m = /from (\d+)\.(\d+)\.(\d+)\S* to (\d+)\.(\d+)\.(\d+)/.exec(pr.title || '');
102
+ if (!m) { await hold('needs-review', 'could not parse the version delta from the PR title.'); return; }
103
+ const [fromMaj, fromMin] = [Number(m[1]), Number(m[2])];
104
+ const [toMaj, toMin] = [Number(m[4]), Number(m[5])];
105
+ if (toMaj !== fromMaj) {
106
+ 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).`);
107
+ return;
108
+ }
109
+ core.info(`#${num} dependabot ${toMin !== fromMin ? 'minor' : 'patch'} bump — eligible.`);
110
+ } else {
111
+ // Jules: only test-only / docs-only changes auto-merge.
112
+ const risky = paths.filter((p) =>
113
+ !(p.startsWith('tests/') || p.startsWith('docs/') || p.endsWith('.md'))
114
+ );
115
+ if (risky.length) {
116
+ 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.`);
117
+ return;
118
+ }
119
+ core.info(`#${num} jules test/docs-only (${paths.length} files) — eligible.`);
120
+ }
121
+
122
+ // ── Merge ────────────────────────────────────────────────────
123
+ try {
124
+ await github.rest.pulls.merge({
125
+ owner, repo, pull_number: num, merge_method: 'squash',
126
+ });
127
+ await github.rest.issues.createComment({
128
+ owner, repo, issue_number: num,
129
+ 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\`.`,
130
+ });
131
+ core.notice(`Merged #${num}.`);
132
+ } catch (e) {
133
+ core.warning(`Merge of #${num} failed: ${e.message}`);
134
+ await hold('needs-review', `auto-merge failed: \`${e.message}\``);
135
+ }
@@ -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 {
@@ -206,10 +206,25 @@ jobs:
206
206
  node-version: 20
207
207
  registry-url: 'https://registry.npmjs.org'
208
208
 
209
+ # Trusted Publishing (OIDC) needs npm CLI >= 11.5.0; Node 20's bundled
210
+ # npm predates that, so self-update first. Pinned to the 11.x line
211
+ # (NOT `npm@latest`) because npm 12 requires Node ^22.22.2 || ^24.15.0
212
+ # || >=26.0.0 -- newer than the Node 20 this job runs on. Learned this
213
+ # the hard way: the first cut of this fix used `npm@latest` and broke
214
+ # the same way the @babel/parser major bump did earlier (bug-255) --
215
+ # an unpinned "latest" floated past what this job's Node version
216
+ # supports. npm 11.x itself supports Node ^20.17.0 || >=22.9.0, so it
217
+ # installs cleanly here. No NODE_AUTH_TOKEN needed — npm exchanges the
218
+ # id-token (permissions, above) directly with the registry via the
219
+ # trusted-publisher connection configured on npmjs.com
220
+ # (raccioly/docguard, release.yml). This replaces the NPM_TOKEN-based
221
+ # auth that silently broke for 2 releases (v0.34.1, v0.34.2 never
222
+ # reached npm) when the token expired — nothing here can expire the
223
+ # same way; a short-lived token is minted per run.
224
+ - run: npm install -g npm@11
225
+
209
226
  - name: Publish (with provenance)
210
227
  run: npm publish --provenance
211
- env:
212
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
213
228
 
214
229
  # ── Step 6: Publish to PyPI ────────────────────────────────────────────
215
230
  publish-pypi:
@@ -0,0 +1,137 @@
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
+ - name: Commit and push (this triggers release.yml)
128
+ if: steps.check.outputs.changed == 'true'
129
+ run: |
130
+ git config user.name "github-actions[bot]"
131
+ git config user.email "github-actions[bot]@users.noreply.github.com"
132
+ git add package.json package-lock.json CHANGELOG.md extensions/ .agent/ 2>/dev/null || true
133
+ git commit -m "release: v${NEW_VERSION} — automated weekly batch
134
+
135
+ Cut by .github/workflows/scheduled-release.yml. Publishing itself is
136
+ handled by release.yml, which triggers on this package.json change."
137
+ git push origin HEAD:main
@@ -1,7 +1,7 @@
1
1
  # anatomy.md
2
2
 
3
- > Auto-maintained by OpenWolf. Last scanned: 2026-09-11T14:49:52.100Z
4
- > Files: 704 tracked | Anatomy hits: 0 | Misses: 0
3
+ > Auto-maintained by OpenWolf. Last scanned: 2026-09-11T15:34:41.013Z
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 (~51473 tok)
32
+ - `CHANGELOG.md` — Changelog (~52543 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 (~3434 tok)
962
+ - `auto-merge.yml` — CI: Auto-merge (green bot PRs) (~1917 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 (~4258 tok)
966
+ - `scheduled-release.yml` — CI: Scheduled Release (~1539 tok)
964
967
  - `sync-speckit-catalog.yml` — CI: Prepare Spec Kit Catalog Submission (Manual) (~1385 tok)
965
968
 
966
969
  ## .jules/
@@ -4450,6 +4450,180 @@
4450
4450
  "occurrences": 3,
4451
4451
  "last_seen": "2026-09-11T14:34:00Z",
4452
4452
  "notes": "Do NOT keep blindly retrying publish-npm if this recurs after a token rotation looks successful — verify the token's actual publish scope/expiration on npmjs.com first. Also: don't assume '404 on a publish that should be an update' is a transient registry blip just because npm's status page is green and the error text sounds like a missing-package error — check secret rotation dates before concluding 'try again later'."
4453
+ },
4454
+ {
4455
+ "id": "bug-270",
4456
+ "timestamp": "2026-09-11T15:15:53.416Z",
4457
+ "error_message": "Significant refactor of ",
4458
+ "file": ".github/workflows/release.yml",
4459
+ "root_cause": "2 lines replaced/restructured",
4460
+ "fix": "Rewrote 10→18 lines (2 removed)",
4461
+ "tags": [
4462
+ "auto-detected",
4463
+ "refactor",
4464
+ "yml"
4465
+ ],
4466
+ "related_bugs": [],
4467
+ "occurrences": 1,
4468
+ "last_seen": "2026-09-11T15:15:53.416Z"
4469
+ },
4470
+ {
4471
+ "id": "bug-271",
4472
+ "timestamp": "2026-09-11T15:17:16.971Z",
4473
+ "error_message": "Incorrect value in code",
4474
+ "file": "package.json",
4475
+ "root_cause": "Had \"0.34.2\"",
4476
+ "fix": "Changed to \"0.34.3\"",
4477
+ "tags": [
4478
+ "auto-detected",
4479
+ "wrong-value",
4480
+ "json"
4481
+ ],
4482
+ "related_bugs": [],
4483
+ "occurrences": 1,
4484
+ "last_seen": "2026-09-11T15:17:16.971Z"
4485
+ },
4486
+ {
4487
+ "id": "bug-257",
4488
+ "timestamp": "2026-09-11T15:20:00Z",
4489
+ "error_message": "Resolution of bug-256 (expired NPM_TOKEN blocking publish-npm for 2 releases).",
4490
+ "file": ".github/workflows/release.yml",
4491
+ "root_cause": "See bug-256: a stored GitHub secret (NPM_TOKEN) with an ~90-day expiration window, no rotation reminder, silent failure mode (npm returns 404 not 401/403 on the auth-scope failure). Structural problem: ANY stored long-lived publish credential recurs this exact class of outage eventually.",
4492
+ "fix": "Migrated publish-npm from NODE_AUTH_TOKEN (classic token auth) to npm Trusted Publishing (OIDC) — configured a trusted publisher on npmjs.com for docguard-cli (GitHub Actions, raccioly/docguard, release.yml, 'Allow npm publish' enabled since the workflow does a direct publish not stage+publish), then removed NODE_AUTH_TOKEN from the workflow entirely and added `npm install -g npm@latest` before publish (Trusted Publishing needs npm CLI >=11.5.0; Node 20's bundled npm predates that). The existing `id-token: write` permission (already present for provenance signing) is reused for the OIDC exchange itself — no new permissions needed. Nothing in this setup can expire the way a stored token did; npm mints a short-lived token per run. Verified end-to-end with a real v0.34.3 release (no code changes, purely to exercise the new pipeline — a rerun of the OLD failed job would have used the stale pre-fix workflow file, since GitHub Actions reruns pin to the original run's commit).",
4493
+ "tags": [
4494
+ "npm-publish",
4495
+ "trusted-publishing",
4496
+ "oidc",
4497
+ "release-pipeline",
4498
+ "permanent-fix",
4499
+ "browser-automation"
4500
+ ],
4501
+ "related_bugs": [
4502
+ "bug-256"
4503
+ ],
4504
+ "occurrences": 1,
4505
+ "last_seen": "2026-09-11T15:20:00Z",
4506
+ "notes": "The npm-side setup (trusted publisher config) was done via Claude in Chrome browser automation on the user's authenticated session — the user generated nothing themselves manually beyond confirming form field values live, since a different browser extension's autofill overlay blocked automation from reaching two fields directly. Token/credential VALUES never passed through the agent's context at any point — only the trusted-publisher CONFIGURATION (org/repo/workflow name, which are not secrets) did."
4507
+ },
4508
+ {
4509
+ "id": "bug-273",
4510
+ "timestamp": "2026-09-11T15:25:25.069Z",
4511
+ "error_message": "Significant refactor of ",
4512
+ "file": ".github/workflows/release.yml",
4513
+ "root_cause": "8 lines replaced/restructured",
4514
+ "fix": "Rewrote 9→16 lines (8 removed)",
4515
+ "tags": [
4516
+ "auto-detected",
4517
+ "refactor",
4518
+ "yml"
4519
+ ],
4520
+ "related_bugs": [],
4521
+ "occurrences": 1,
4522
+ "last_seen": "2026-09-11T15:25:25.069Z"
4523
+ },
4524
+ {
4525
+ "id": "bug-274",
4526
+ "timestamp": "2026-09-11T15:26:38.465Z",
4527
+ "error_message": "Significant refactor of ",
4528
+ "file": "CHANGELOG.md",
4529
+ "root_cause": "3 lines replaced/restructured",
4530
+ "fix": "Rewrote 10→18 lines (3 removed)",
4531
+ "tags": [
4532
+ "auto-detected",
4533
+ "refactor",
4534
+ "md"
4535
+ ],
4536
+ "related_bugs": [],
4537
+ "occurrences": 1,
4538
+ "last_seen": "2026-09-11T15:26:38.465Z"
4539
+ },
4540
+ {
4541
+ "id": "bug-275",
4542
+ "timestamp": "2026-09-11T15:26:43.072Z",
4543
+ "error_message": "Incorrect value in code",
4544
+ "file": "package.json",
4545
+ "root_cause": "Had \"0.34.3\"",
4546
+ "fix": "Changed to \"0.34.4\"",
4547
+ "tags": [
4548
+ "auto-detected",
4549
+ "wrong-value",
4550
+ "json"
4551
+ ],
4552
+ "related_bugs": [],
4553
+ "occurrences": 1,
4554
+ "last_seen": "2026-09-11T15:26:43.072Z"
4555
+ },
4556
+ {
4557
+ "id": "bug-258",
4558
+ "timestamp": "2026-09-11T15:28:00Z",
4559
+ "error_message": "v0.34.3's own npm-publish fix (Trusted Publishing) failed on its first real test: 'npm install -g npm@latest' errored EBADENGINE, npm@12.0.2 requires node ^22.22.2 || ^24.15.0 || >=26.0.0, actual was npm 10.8.2 / node v20.20.2.",
4560
+ "file": ".github/workflows/release.yml",
4561
+ "root_cause": "Same class of mistake as bug-255 (@babel/parser major bump breaking Node 18): an unpinned `npm@latest` in the publish-npm job's self-update step floated to npm 12, which had bumped ITS OWN Node engine floor past the Node 20 this job runs on. The bug shipped in v0.34.3 because it wasn't (couldn't be) tested locally — GitHub Actions' OIDC token exchange only exists inside an actual Actions run, so the self-update step's own compatibility was the first thing to actually execute in CI, and it failed before publish ever ran.",
4562
+ "fix": "Pinned to `npm install -g npm@11` instead of `npm@latest`. npm 11.x declares engines {node: '^20.17.0 || >=22.9.0'}, compatible with the job's Node 20.20.2, and resolves to 11.19.1 -- well past the 11.5.0 floor Trusted Publishing needs. Verified locally this time: installed npm@11 into an isolated --prefix on Node 20.20.2 (matching the exact runner version from the failure log) and confirmed it resolves cleanly before pushing v0.34.4.",
4563
+ "tags": [
4564
+ "npm-publish",
4565
+ "trusted-publishing",
4566
+ "engines-field",
4567
+ "unpinned-latest",
4568
+ "release-pipeline",
4569
+ "same-mistake-twice"
4570
+ ],
4571
+ "related_bugs": [
4572
+ "bug-256",
4573
+ "bug-257",
4574
+ "bug-255"
4575
+ ],
4576
+ "occurrences": 1,
4577
+ "last_seen": "2026-09-11T15:28:00Z",
4578
+ "notes": "Pattern worth internalizing: 'npm install -g npm@latest' (or any @latest) in a CI step pinned to an older Node version is never safe to assume works, because npm's OWN major versions bump their engines floor over time just like any other package. Always pin to a specific major/range you've checked against the job's actual Node version, and verify by actually installing it (even in an isolated prefix) rather than reasoning from memory about what should be compatible."
4579
+ },
4580
+ {
4581
+ "id": "bug-277",
4582
+ "timestamp": "2026-09-11T15:31:51.639Z",
4583
+ "error_message": "Missing error handling in unknown",
4584
+ "file": ".github/workflows/ci.yml",
4585
+ "root_cause": "Code path had no error handling — exceptions would propagate uncaught",
4586
+ "fix": "Added try/catch block",
4587
+ "tags": [
4588
+ "auto-detected",
4589
+ "error-handling",
4590
+ "yml"
4591
+ ],
4592
+ "related_bugs": [],
4593
+ "occurrences": 1,
4594
+ "last_seen": "2026-09-11T15:31:51.639Z"
4595
+ },
4596
+ {
4597
+ "id": "bug-278",
4598
+ "timestamp": "2026-09-11T15:33:55.369Z",
4599
+ "error_message": "Missing error handling in unknown",
4600
+ "file": ".github/workflows/jules-triage.yml",
4601
+ "root_cause": "Code path had no error handling — exceptions would propagate uncaught",
4602
+ "fix": "Added try/catch block",
4603
+ "tags": [
4604
+ "auto-detected",
4605
+ "error-handling",
4606
+ "yml"
4607
+ ],
4608
+ "related_bugs": [],
4609
+ "occurrences": 1,
4610
+ "last_seen": "2026-09-11T15:33:55.369Z"
4611
+ },
4612
+ {
4613
+ "id": "bug-279",
4614
+ "timestamp": "2026-09-11T15:34:41.023Z",
4615
+ "error_message": "Missing error handling in unknown",
4616
+ "file": "CHANGELOG.md",
4617
+ "root_cause": "Code path had no error handling — exceptions would propagate uncaught",
4618
+ "fix": "Added try/catch block",
4619
+ "tags": [
4620
+ "auto-detected",
4621
+ "error-handling",
4622
+ "md"
4623
+ ],
4624
+ "related_bugs": [],
4625
+ "occurrences": 1,
4626
+ "last_seen": "2026-09-11T15:34:41.023Z"
4453
4627
  }
4454
4628
  ]
4455
4629
  }