docguard-cli 0.30.1__tar.gz → 0.31.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {docguard_cli-0.30.1/extensions/spec-kit-docguard → docguard_cli-0.31.0/.agent}/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.30.1/extensions/spec-kit-docguard → docguard_cli-0.31.0/.agent}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.30.1/extensions/spec-kit-docguard → docguard_cli-0.31.0/.agent}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/docguard-sync/SKILL.md +2 -2
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/buglog.json +20 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/cerebrum.md +2 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/AGENTS.md +1 -1
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CHANGELOG.md +55 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/PKG-INFO +10 -7
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/README.md +9 -6
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/explain.mjs +34 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/guard.mjs +8 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/impact.mjs +93 -12
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/verify.mjs +63 -1
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/config.mjs +7 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/findings.mjs +26 -0
- docguard_cli-0.31.0/cli/shared-diff.mjs +209 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-git.mjs +93 -0
- docguard_cli-0.31.0/cli/shared-ir.mjs +81 -0
- docguard_cli-0.31.0/cli/validators/api-doc-smells.mjs +143 -0
- docguard_cli-0.31.0/cli/validators/diff-suspicion.mjs +178 -0
- docguard_cli-0.31.0/cli/validators/reference-existence.mjs +157 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/traceability.mjs +44 -4
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/quickstart.md +1 -1
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/ARCHITECTURE.md +1 -1
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/CI-RECIPES.md +2 -2
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/extension.yml +1 -1
- {docguard_cli-0.30.1/.agent → docguard_cli-0.31.0/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.30.1/.agent → docguard_cli-0.31.0/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.30.1/.agent → docguard_cli-0.31.0/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/llms-full.txt +167 -144
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/package.json +1 -1
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/pyproject.toml +1 -1
- docguard_cli-0.31.0/tests/api-doc-smells.test.mjs +62 -0
- docguard_cli-0.31.0/tests/diff-suspicion.test.mjs +76 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/impact.test.mjs +56 -0
- docguard_cli-0.31.0/tests/reference-existence.test.mjs +54 -0
- docguard_cli-0.31.0/tests/shared-diff.test.mjs +118 -0
- docguard_cli-0.31.0/tests/shared-ir.test.mjs +50 -0
- docguard_cli-0.31.0/tests/traceability-ir.test.mjs +38 -0
- docguard_cli-0.31.0/tests/verify-change-context.test.mjs +51 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.fix.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.guard.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.review.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/docguard.score.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.analyze.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.checklist.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.clarify.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.constitution.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.implement.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.plan.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.specify.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.tasks.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/commands/speckit.taskstoissues.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-analyze/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-checklist/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-clarify/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-constitution/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-implement/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-plan/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-specify/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-tasks/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.claude/rules/openwolf.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.claude/settings.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.docguard.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.docguardignore +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/dependabot.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/scripts/speckit-submission.py +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/ci.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/jules-triage.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/release.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/supply-chain.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.github/workflows/sync-speckit-catalog.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.gitignore +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules/bolt.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules/palette.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules/sentinel.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.jules-setup.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.npmignore +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.npmrc +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.pre-commit-hooks.yaml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog-metadata.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/extensions/.cache/catalog.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/init-options.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/memory/constitution.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/common.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/setup-plan.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/agent-file-template.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/checklist-template.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/constitution-template.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/plan-template.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/spec-template.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.specify/templates/tasks-template.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/OPENWOLF.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/anatomy.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/config.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/cron-manifest.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/cron-state.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/daemon.log +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/designqc-report.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/_session.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/_wrap_up_nudged +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/package.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/post-read.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/post-write.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/pre-read.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/pre-write.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/session-start.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/shared.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/hooks/stop.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/identity.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/memory.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/reframe-frameworks.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/suggestions.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/.wolf/token-ledger.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CLAUDE.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CODE_OF_CONDUCT.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/COMPARISONS.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/CONTRIBUTING.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/DRIFT-LOG.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/Dockerfile +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/LICENSE +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/PHILOSOPHY.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/README.es.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/README.pt-BR.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/ROADMAP.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/SECURITY.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/STANDARD.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/SUPPLY-CHAIN-AUDIT.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/SUPPORT.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/action.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/bin/docguard +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/demo.gif +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/demo.tape +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/assets/docguard-logo.png +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/agent.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/agents.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/badge.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/ci.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/demo.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/diagnose.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/diff.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/feedback.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/fix.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/generate.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/hooks.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/init.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/llms.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/mcp.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/memory.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/publish.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/score.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/setup.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/sync-tests.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/sync.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/trace.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/upgrade.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/commands/watch.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/docguard.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/ensure-skills.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/agent-readability.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/api-doc.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/cdk.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/doc-tools.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/frontend.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/iac.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/instruction-audit.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/integrations.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/inventory.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/js-ast.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/memory-plan.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/project-type.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/py-ast.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/routes.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/schemas.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/semantic-claims.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/scanners/speckit.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-ignore.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-source.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared-trace-patterns.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/shared.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validator-markers.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/api-surface.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/architecture.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/canonical-sync.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/changelog.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/cross-reference.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/doc-quality.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/docs-coverage.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/docs-diff.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/docs-sync.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/drift.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/environment.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/freshness.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/generated-staleness.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/metadata-sync.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/metrics-consistency.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/schema-sync.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/security.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/spec-kit.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/structure.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/surface-sync.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/test-spec.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/validators/todo-tracking.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/api-reference.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/doc-generators.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/fix-memory.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/generate-io.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/mechanical.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/sarif.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/cli/writers/sections.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.fix.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.guard.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.review.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/commands/docguard.score.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/fastify.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/generic.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/nextjs.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/configs/python.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docguard_cli/__init__.py +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docguard_cli/wrapper.py +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/ai-integration.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/commands.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/configuration.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/doc-sections.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/faq.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/installation.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs/profiles.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/REQUIREMENTS.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/SURFACE-AUDIT.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/docs-implementation/MIGRATION-v0.20.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/01-express-api/README.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/01-express-api/package.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/01-express-api/server.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/README.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/app.py +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/02-python-flask/requirements.txt +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/README.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/package.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/src/index.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/tasks.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/examples/README.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/LICENSE +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/README.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/fix.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/generate.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/guard.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/init.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/score.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/sync.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/commands/trace.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/glama.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/llms.txt +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/package-lock.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/packaging/homebrew/docguard.rb +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/packaging/submissions.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/schemas/docguard-config.schema.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/server.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/smithery.yaml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/001-fix-ignore-validators/plan.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/001-fix-ignore-validators/spec.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/001-fix-ignore-validators/tasks.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/002-fix-test-discovery/plan.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/002-fix-test-discovery/spec.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/002-fix-test-discovery/tasks.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/003-v011-false-positives/plan.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/003-v011-false-positives/spec.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/003-v011-false-positives/tasks.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/004-v020-env-var-false-negative/spec.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/specs/005-hugocross-next-bugs/spec.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ADR.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/AGENTS.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ARCHITECTURE.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/CHANGELOG.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/CURRENT-STATE.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/DATA-MODEL.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/DEPLOYMENT.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/DRIFT-LOG.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ENVIRONMENT.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/KNOWN-GOTCHAS.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/REQUIREMENTS.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ROADMAP.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/RUNBOOKS.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/SECURITY.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/TEST-SPEC.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/TROUBLESHOOTING.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/VENDOR-BUGS.md.template +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ci/github-actions.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/ci/gitlab-component.yml +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.fix.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.guard.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.init.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.review.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/commands/docguard.update.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/.docguard.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/.env.example +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/AGENTS.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/CHANGELOG.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/DRIFT-LOG.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/README.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/package.json +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/api.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/notifier.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/scheduler.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/templates/demo-fixture/src/worker.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/agent-readability.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/agent.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/agents-sync.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/anchor-autofix.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/api-doc.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/api-surface.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/api-write.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/architecture.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/b7-node-env-symmetry.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/backup-failure.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/canonical-sync.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/cdk-detection.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/changed-only-scoping.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/changed-only.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/changelog.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/commands.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/cross-reference.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/demo-command.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/doc-quality.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/doc-section-synonyms.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docguardignore.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docs-coverage.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docs-diff.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/docs-sync.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/drift.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/ensure-skills-idempotent.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/env-schema-detection.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/environment.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/explain-coverage.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/field-report-2-cli.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/field-report-3-deferred.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/field-report-3.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/fix-memory.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/fix-suppression.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/fixture-projects.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/freshness.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/frontend-deep.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/frontend.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/generated-staleness.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/guard-classify.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/guard-no-throw.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/hooks.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/i18n.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/init-smart-detection.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/instruction-audit.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/integrations.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/inventory.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/js-ast.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/llms-full-pack.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/mcp.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/mechanical.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/memory-plan.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/metadata-sync.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/metrics-consistency.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/metrics-dedup.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/monorepo-scanning.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/multi-spec.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/npm-pack-smoke.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/openapi-parse-honesty.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/patch-0.11.2.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/plan-disk-cache.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/profile-flag.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/project-type.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/py-ast.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/regenerate-section.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-express-mounts.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-fastify.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-multilang.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/routes-nextjs-app-router.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sarif.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/schema-sync.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/schemas-multilang.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/schemas.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/scoping-extended.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/score-suggestions.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/section-na-markers.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sections.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/security-init-injection.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/security.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/severity.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/shared-git.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/shared-source.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/speckit-bugfix.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/speckit-phantom.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/starter-scaffold.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/stress-test.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/structure.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/surface-sync.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sweep-nudge.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sync-since.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/sync.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/test-spec.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/todo-tracking.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/trace-features.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/trace-multilang.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/trace-reverse.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/traceability.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/upgrade-pr-e2e.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/upgrade-pr.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/upgrade.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/v020-consolidation.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/validator-markers.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/validator-naming.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/tests/version-pin.test.mjs +0 -0
- {docguard_cli-0.30.1 → docguard_cli-0.31.0}/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.
|
|
9
|
+
version: 0.31.0
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.
|
|
12
|
+
<!-- docguard:version: 0.31.0 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Fix Skill
|
|
15
15
|
|
|
@@ -7,10 +7,10 @@ description: Run DocGuard guard validation against Canonical-Driven Development
|
|
|
7
7
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
8
8
|
metadata:
|
|
9
9
|
author: docguard
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.31.0
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.
|
|
13
|
+
<!-- docguard:version: 0.31.0 -->
|
|
14
14
|
|
|
15
15
|
# DocGuard Guard Skill
|
|
16
16
|
|
|
@@ -6,10 +6,10 @@ description: Cross-document consistency analysis and quality assessment. Perform
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.
|
|
9
|
+
version: 0.31.0
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.
|
|
12
|
+
<!-- docguard:version: 0.31.0 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Review Skill
|
|
15
15
|
|
|
@@ -6,10 +6,10 @@ description: CDD maturity assessment with category-aware improvement roadmap. Ru
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.
|
|
9
|
+
version: 0.31.0
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.
|
|
12
|
+
<!-- docguard:version: 0.31.0 -->
|
|
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.
|
|
7
|
+
version: 0.31.0
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
|
-
<!-- docguard:version: 0.
|
|
10
|
+
<!-- docguard:version: 0.31.0 -->
|
|
11
11
|
|
|
12
12
|
# DocGuard Sync Skill
|
|
13
13
|
|
|
@@ -3294,6 +3294,26 @@
|
|
|
3294
3294
|
"related_bugs": [],
|
|
3295
3295
|
"occurrences": 1,
|
|
3296
3296
|
"last_seen": "2026-07-06T14:40:55.317Z"
|
|
3297
|
+
},
|
|
3298
|
+
{
|
|
3299
|
+
"id": "bug-201",
|
|
3300
|
+
"timestamp": "2026-07-07T00:00:00Z",
|
|
3301
|
+
"error_message": "reference-existence (REF001) fabricated 3 false positives in DocGuard AGENTS.md (after_implement, before_tasks, after_tasks flagged as removed) — symbols actually still present in .github/scripts/",
|
|
3302
|
+
"file": "cli/validators/reference-existence.mjs",
|
|
3303
|
+
"root_cause": "Asymmetry between two presence checks: the fast in-memory HEAD set was built with walkFiles() which SKIPS dot-directories (.github, .specify) by default (skipDotEntries), while the historical presence check used `git grep` which does NOT skip dot-dirs. So a symbol living only in a dot-dir read as absent-at-HEAD (walk missed it) but present-at-doc-rev (git grep found it) → false removed finding.",
|
|
3304
|
+
"fix": "Confirm every walk-miss with an authoritative `git grep HEAD` before flagging (symbolExistsAtRev at HEAD). Only symbols absent from BOTH the walk AND git grep proceed to the historical check. Reduced docguard-self FPs 3→0.",
|
|
3305
|
+
"tags": [
|
|
3306
|
+
"reference-existence",
|
|
3307
|
+
"walkFiles",
|
|
3308
|
+
"git-grep",
|
|
3309
|
+
"dot-dir",
|
|
3310
|
+
"false-positive",
|
|
3311
|
+
"dogfooding",
|
|
3312
|
+
"v0.31.0"
|
|
3313
|
+
],
|
|
3314
|
+
"related_bugs": [],
|
|
3315
|
+
"occurrences": 1,
|
|
3316
|
+
"last_seen": "2026-07-07T00:00:00Z"
|
|
3297
3317
|
}
|
|
3298
3318
|
]
|
|
3299
3319
|
}
|
|
@@ -67,6 +67,8 @@
|
|
|
67
67
|
|
|
68
68
|
## Decision Log
|
|
69
69
|
|
|
70
|
+
- **2026-07-07 (v0.31.0 accuracy release — 6 research-backed detectors, empirical keep/cut)** — Implemented the verified deep-research roadmap as one batched release (PR #311, 9 commits, validator count 24→27). Built on TWO zero-dep foundations reused across features: `cli/shared-diff.mjs` (unified-diff parser + identifier-aware tokenizer + activity-labeled diff) and `cli/shared-ir.mjs` (TF-IDF + cosine). Features: (1) `impact` doc→doc BLAST RADIUS incl. agent files — the flagship, unclaimed by competitors; (2) `reference-existence` REF001 two-revision check; (3) `diff-suspicion` DSP001 diff-overlap; (4) `api-doc-smells` APS001/2 Bloated/Lazy; (5) IR soft-link recovery folded into traceability TRC004; (6) `verify --since` structured-diff staging. **METHOD THE USER MANDATED (durable preference): don't pick validator defaults abstractly — build each, run it READ-ONLY against their real active repos (temp/no-writes), measure signal-vs-noise, KEEP/CUT/tune empirically, remove if no value.** Corpus: hugocross_revamp, taxes_helper, stablecoin-strategy-lab, Agent Ops Platform, globalshares_revamp (~/Repo_claude), Whatsapp_Inbox (~/GitHub). All 6 KEEP; all default-ON, all soft (`confidence:'low'`, never break CI). Precision levers that mattered: DSP001 needed path/module-only refs (drop basename) + generic/HTTP/CSS token filter + per-doc cap (globalshares route-inventory doc flooded 45→capped). Validation log lived in scratchpad/validation-log.md.
|
|
71
|
+
- **2026-07-07 (Do-Not-Repeat: adding a default-OFF validator SPLITS DocGuard's self-count)** — `metrics-consistency` counts guard results where `status !== 'skipped'` (excludes a config-disabled validator), but `canonical-sync` counts the full validatorMap (includes it). So a validator added default-OFF makes the two self-counters disagree by 1 (26 vs 27), and DocGuard's own guard flags CSY003 + MET001 forever. Resolution chosen: default the validator ON (it was zero-FP + soft anyway) so both counters agree — cleaner than special-casing the count logic. If a future validator MUST be default-off, reconcile the two counters first. Also: `canonical-sync` CSY003 false-positives on a validators-TABLE row whose number collides with the word "validators" in its description (row `| 24 | Surface-Sync | …validators… |` read as "24 validators") — reword such descriptions (used "checks"). And `metrics-consistency` MET001 can't tell HISTORICAL counts ("v0.22 had 24 validators" in a changelog row) from current claims — reword historical rows to drop the bare number. `docguard fix --write` will wrongly rewrite those historical counts.
|
|
70
72
|
- **2026-07-06 (Jules PR triage policy — established)** — How to handle the Google Jules bot's auto-PRs, applied to a batch of 5 (#299 #300 #305 #306 #307). Rule: judge each on merit against the persona's own evidence bar, adopt real fixes CLEANLY (re-apply in our own commit without Jules's auto-generated `.agent/skills` churn), close the rest with a specific technical reason so the bot/human learns the bar. Verdicts recorded: (a) **#307 hooks /dev/null fix = genuinely correct** (one-line getHooksDir guard + a reproducing test) → adopted cleanly in #308, closed as superseded. (b) **#300 "CRITICAL command injection" = FALSE positive** — every flagged `execSync` target is a static string literal (`which specify`, `git log --since=...`) with no user-input interpolation, so no injection surface; also on a stale base (setup.mjs isCliAvailable already removed in #296). Closed — but harvested the ONE real nugget (score.mjs `git log | wc -l` shell pipe → `execFileSync`, Windows-portable). (c) **#299 Bolt regex hoisting = no benchmark, negative-value** — `new RegExp()` runs once per file (O(files)), never inside the match loop, so the claimed "O(N·M) bottleneck" is fiction; hoisting to a shared stateful `g`-regex + manual `.lastIndex=0` is a footgun for zero measured gain. Closed per Bolt's own ">20% measured benchmark" rule. (d) **#305/#306 = +0/-0 status reports** ("babel up to date", "no flaky tests") — well-behaved (no spurious diff) but shouldn't be PRs; closed with thanks. Meta-lesson: the persona files (.jules/*.md) + AGENTS.md bot rules + the jules-triage.yml workflow set the bar; enforcing it consistently in close-comments is what actually trains the bot down from duplicate-PR floods. Two of five carried real value — Jules is worth keeping, not silencing.
|
|
71
73
|
- **2026-07-05 (distribution flywheel — v0.30.0)** — Executed the full external-distribution push. Durable facts: (1) **Official MCP Registry** publish needs THREE things aligned: `server.json` at repo root (2025-12-11 camelCase schema, name `io.github.raccioly/docguard`), `mcpName` in the PUBLISHED npm package (registry validates the referenced package carries it — so a release must SHIP after adding mcpName; adding it to main isn't enough), and `mcp-publisher login github && mcp-publisher publish` run FROM THE REPO ROLE on the user's Mac (I can't run it — sandbox ≠ their terminal; their GitHub device-auth token is local). Registry is IMMUTABLE per version → "400 duplicate version" means it ALREADY published (success, not failure). Verify via `curl https://registry.modelcontextprotocol.io/v0/servers?search=docguard`. (2) **Glama** listing: submitted via their web form (browser); the quality Score has code-fixable items — `glama.json` (root, `{$schema, maintainers:[gh-user]}`) fixes "No glama.json"; read-only MCP tool `annotations` (readOnlyHint/openWorldHint:false) + `title` serve the tool-def-quality/safety scans; a `Dockerfile` running `docguard mcp` enables their build-based "Glama release" (the big score driver, but the Make-Release clicks are the user's). (3) **awesome-mcp-servers** requires the server live on Glama first (bot label missing-glama→has-glama on re-check after a `synchronize`/force-push); entry format = `[owner/repo](url) [](glama url) 📇 🏠 🍎 🪟 🐧 - desc \`npx cmd\`` (badge AFTER repo link per file convention, NOT after description as the bot template says). (4) **Homebrew tap**: separate public repo `raccioly/homebrew-tap` with `Formula/docguard.rb`; formula url = npm tarball, sha256 must be recomputed per version (`curl -sL <tgz>|shasum -a256`). Bump the tap formula each release. (5) **spec-kit catalog**: one OPEN submission issue at a time (latest version), close superseded ones — established pattern. (6) **PATH shadowing gotcha**: a stale `npm i -g docguard-cli` shadows Homebrew's copy; `docguard --version` shows the FIRST-in-PATH one → `npm i -g docguard-cli@latest` to reconcile.
|
|
72
74
|
|
|
@@ -68,7 +68,7 @@ returns `status` (PASS/WARN/FAIL, matches exit code 0/2/1), `findings[]`
|
|
|
68
68
|
(Markdown tier map incl. `unclassified[]`), and `semanticClaims.count`
|
|
69
69
|
(documented numbers not yet verified against code).
|
|
70
70
|
|
|
71
|
-
- Every finding has a stable code (`STR001`, `ENV003`, `XRF002`, …) — all
|
|
71
|
+
- Every finding has a stable code (`STR001`, `ENV003`, `XRF002`, …) — all 27
|
|
72
72
|
validators emit them. `docguard explain <CODE>` gives the contract and fix.
|
|
73
73
|
- Mechanical fixes go through `docguard fix --write` (provenance-checked,
|
|
74
74
|
fail-closed) — never hand-apply what the tool fixes deterministically.
|
|
@@ -7,6 +7,61 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.31.0] - 2026-07-07
|
|
11
|
+
|
|
12
|
+
Accuracy release — six research-backed detectors that make drift detection
|
|
13
|
+
change-aware and language-agnostic, built on one shared diff foundation. Every
|
|
14
|
+
new check was empirically tuned read-only against six real production repos
|
|
15
|
+
(TypeScript + Python) before shipping; all are deterministic (no LLM at
|
|
16
|
+
validation time) and soft (`confidence: low`, never break CI). Validator count
|
|
17
|
+
24 → 27.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- **`docguard impact` — doc→doc blast radius + agent-instruction files** (feat 1).
|
|
21
|
+
Agent-instruction files (AGENTS.md/CLAUDE.md/GEMINI.md) are now indexed, so a
|
|
22
|
+
changed code file they reference is surfaced. New: when a canonical/agent doc
|
|
23
|
+
changes, the docs that reference it — including agent-instruction files — are
|
|
24
|
+
flagged as a "blast radius" (`{ changedDocs, blastRadius }` in JSON). No
|
|
25
|
+
verified competitor propagates doc staleness across the doc graph. Proven on a
|
|
26
|
+
real repo: an ARCHITECTURE.md change flags the AGENTS.md/CLAUDE.md that cite it.
|
|
27
|
+
- **Diff-Suspicion validator (DSP001)** (feat 3) — change-driven. A doc that BOTH
|
|
28
|
+
references a code file changed since the ref AND shares domain tokens removed
|
|
29
|
+
in that diff is flagged for review. Deterministic diff-overlap rule
|
|
30
|
+
(arXiv 2010.01625, F1 74.7); path/module refs + domain-token filtering +
|
|
31
|
+
per-doc cap keep it quiet at PR granularity.
|
|
32
|
+
- **Reference-Existence validator (REF001)** (feat 2) — two-revision check. A
|
|
33
|
+
compound code identifier backticked in a doc that existed when the doc was last
|
|
34
|
+
updated but has ZERO matches at HEAD is flagged as outdated (arXiv 2212.01479).
|
|
35
|
+
In-memory HEAD identifier set + authoritative git-grep confirmation; zero false
|
|
36
|
+
positives across the corpus.
|
|
37
|
+
- **API-Doc-Smells validator (APS001 Bloated / APS002 Lazy)** (feat 4) —
|
|
38
|
+
deterministic length signals on signature-headed doc units (F1 0.90 / 0.95).
|
|
39
|
+
- **IR-based traceability soft-matching** (feat 5) — `cli/shared-ir.mjs`
|
|
40
|
+
(zero-dep TF-IDF + cosine). An untraced requirement now surfaces the
|
|
41
|
+
TF-IDF-closest test file ("X may already cover it — add @req there"),
|
|
42
|
+
reducing false "no coverage" for tests that lack the annotation.
|
|
43
|
+
- **`docguard verify --since <ref>` — change-aware staging** (feat 6). Attaches
|
|
44
|
+
an activity-labeled (ordered replace/delete/add) structured diff to the staged
|
|
45
|
+
agent-judgment tasks and flags which claims are about just-changed code —
|
|
46
|
+
CARL-CCI showed the structured-diff representation drives judgment accuracy
|
|
47
|
+
(arXiv 2512.19883).
|
|
48
|
+
- **`cli/shared-diff.mjs`** — zero-dependency unified-diff parser + identifier-
|
|
49
|
+
aware tokenizer + activity-labeled diff, the shared foundation for feats 1/2/3/6.
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- `hooks` crash from a `core.hooksPath` edge and other pre-ship bugs caught by
|
|
53
|
+
dogfooding DocGuard on itself (a `walkFiles`-vs-`git grep` dot-directory
|
|
54
|
+
asymmetry that fabricated reference-existence false positives; a `.map(basename)`
|
|
55
|
+
index-as-suffix crash in verify).
|
|
56
|
+
- **Self-counting consistency** — `canonical-sync` and `metrics-consistency` now
|
|
57
|
+
agree on the validator count (both 27); a default-off validator previously made
|
|
58
|
+
them disagree.
|
|
59
|
+
|
|
60
|
+
### Changed
|
|
61
|
+
- New validators default ON except where noted; all are soft warnings.
|
|
62
|
+
- README, ARCHITECTURE.md, quickstart, CI-RECIPES, AGENTS.md updated to 27
|
|
63
|
+
validators (historical version-log counts preserved).
|
|
64
|
+
|
|
10
65
|
## [0.30.1] - 2026-07-06
|
|
11
66
|
|
|
12
67
|
Patch release: a hooks crash fix that unblocks sandboxed CI/agent environments,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docguard-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.31.0
|
|
4
4
|
Summary: The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. No Python dependencies (requires Node.js 18+).
|
|
5
5
|
Project-URL: Homepage, https://github.com/raccioly/docguard
|
|
6
6
|
Project-URL: Documentation, https://github.com/raccioly/docguard#readme
|
|
@@ -100,7 +100,7 @@ graph TD
|
|
|
100
100
|
Commands --> setup["setup wizard"]
|
|
101
101
|
Commands --> other["diff · init · fix · trace · impact · sync<br/>explain · memory · upgrade · agents · hooks · badge · ci · watch"]
|
|
102
102
|
|
|
103
|
-
guard --> Validators["Validators (
|
|
103
|
+
guard --> Validators["Validators (27)"]
|
|
104
104
|
generate --> Scanners["Scanners (4)<br/>routes · schemas · doc-tools · speckit"]
|
|
105
105
|
score --> Scoring["Weighted Scoring<br/>8 categories"]
|
|
106
106
|
diagnose --> Validators
|
|
@@ -278,7 +278,7 @@ DocGuard ships **18 commands** (the "Daily 5" + 13 situational tools, including
|
|
|
278
278
|
| Command | What It Does |
|
|
279
279
|
|:--------|:-------------|
|
|
280
280
|
| `init` | Bootstrap a project (`--wizard` for interactive · `--with <name>` for scaffolders) |
|
|
281
|
-
| `guard` | Validate against canonical docs —
|
|
281
|
+
| `guard` | Validate against canonical docs — 27 validators |
|
|
282
282
|
| `diff` | Show gaps between docs and code (`--since <ref>` for impact mode) |
|
|
283
283
|
| `sync` | Refresh code-truth doc sections — keeps memory always up to date |
|
|
284
284
|
| `score` | CDD maturity score (0-100; `--diff` for delta between refs) |
|
|
@@ -384,7 +384,7 @@ $ npx docguard-cli generate
|
|
|
384
384
|
|
|
385
385
|
## 🔍 Validators
|
|
386
386
|
|
|
387
|
-
DocGuard runs **
|
|
387
|
+
DocGuard runs **27 automated validators** on every `guard` check. Every one is **language-aware** as of v0.16 — patterns for Python (`test_*.py`), Rust (`tests/*.rs`), Go (`*_test.go`), Java (`*Test.java`), Ruby (`*_spec.rb`), PHP, and JS/TS all match.
|
|
388
388
|
|
|
389
389
|
| # | Validator | What It Checks | Default |
|
|
390
390
|
|:--|:----------|:--------------|:--------|
|
|
@@ -411,7 +411,10 @@ DocGuard runs **24 automated validators** on every `guard` check. Every one is *
|
|
|
411
411
|
| 21 | **Generated-Staleness** | `source=code` sections match scanner output; `status: draft` doc age | ✅ On |
|
|
412
412
|
| 22 | **Canonical-Sync** | DocGuard's own README count claims match code-truth (DocGuard repo only — N/A elsewhere) | ✅ On |
|
|
413
413
|
| 23 | **Metrics-Consistency** | Hardcoded numbers match actual counts | ✅ On |
|
|
414
|
-
| 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands,
|
|
414
|
+
| 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands, checks, etc.) match code-truth (opt-in via `surfaceSync.surfaces`; N/A unless configured) | ✅ On |
|
|
415
|
+
| 25 | **Diff-Suspicion** | Change-driven: a doc/agent-instruction file that references code changed since the ref AND shares removed domain symbols is flagged for review (arXiv 2010.01625, F1 74.7) | ✅ On |
|
|
416
|
+
| 26 | **Reference-Existence** | Two-revision check: a backticked code symbol present when the doc was last updated but gone at HEAD is flagged as outdated (arXiv 2212.01479) | ✅ On |
|
|
417
|
+
| 27 | **API-Doc-Smells** | Bloated (≥300 words) / Lazy (≤6 prose words) API documentation units, keyed on signature-headed sections (F1 0.90/0.95) | ✅ On |
|
|
415
418
|
|
|
416
419
|
**Per-validator controls** (in `.docguard.json`):
|
|
417
420
|
```json
|
|
@@ -480,7 +483,7 @@ DocGuard provides AI agent slash commands for integrated workflows. Installed au
|
|
|
480
483
|
| Command | What It Does |
|
|
481
484
|
|:--------|:-------------|
|
|
482
485
|
| `/docguard.init` | Initialize Canonical-Driven Development in a new or existing project |
|
|
483
|
-
| `/docguard.guard` | Run quality validation — check all
|
|
486
|
+
| `/docguard.guard` | Run quality validation — check all 27 validators |
|
|
484
487
|
| `/docguard.review` | Analyze doc quality and suggest improvements |
|
|
485
488
|
| `/docguard.fix` | Generate targeted fix prompts for specific issues |
|
|
486
489
|
| `/docguard.update` | Update canonical docs after code changes — detect drift and sync documentation |
|
|
@@ -639,7 +642,7 @@ Two ready-to-use templates ship with the Spec Kit extension and as standalone fi
|
|
|
639
642
|
Recent highlights across the v0.16 → v0.19 line:
|
|
640
643
|
|
|
641
644
|
- **`docguard explain <validator>`** — `docguard explain freshness` prints purpose, rules, common
|
|
642
|
-
failures, and fix recipes for any of the
|
|
645
|
+
failures, and fix recipes for any of the 27 validators. No need to dig into source.
|
|
643
646
|
- **`docguard memory --diff`** — surface what changed in your canonical docs between two refs
|
|
644
647
|
(`HEAD~10..HEAD` by default). Great for code review and changelog drafting.
|
|
645
648
|
- **`docguard score --diff`** — see exactly which validators moved the score up or down between
|
|
@@ -76,7 +76,7 @@ graph TD
|
|
|
76
76
|
Commands --> setup["setup wizard"]
|
|
77
77
|
Commands --> other["diff · init · fix · trace · impact · sync<br/>explain · memory · upgrade · agents · hooks · badge · ci · watch"]
|
|
78
78
|
|
|
79
|
-
guard --> Validators["Validators (
|
|
79
|
+
guard --> Validators["Validators (27)"]
|
|
80
80
|
generate --> Scanners["Scanners (4)<br/>routes · schemas · doc-tools · speckit"]
|
|
81
81
|
score --> Scoring["Weighted Scoring<br/>8 categories"]
|
|
82
82
|
diagnose --> Validators
|
|
@@ -254,7 +254,7 @@ DocGuard ships **18 commands** (the "Daily 5" + 13 situational tools, including
|
|
|
254
254
|
| Command | What It Does |
|
|
255
255
|
|:--------|:-------------|
|
|
256
256
|
| `init` | Bootstrap a project (`--wizard` for interactive · `--with <name>` for scaffolders) |
|
|
257
|
-
| `guard` | Validate against canonical docs —
|
|
257
|
+
| `guard` | Validate against canonical docs — 27 validators |
|
|
258
258
|
| `diff` | Show gaps between docs and code (`--since <ref>` for impact mode) |
|
|
259
259
|
| `sync` | Refresh code-truth doc sections — keeps memory always up to date |
|
|
260
260
|
| `score` | CDD maturity score (0-100; `--diff` for delta between refs) |
|
|
@@ -360,7 +360,7 @@ $ npx docguard-cli generate
|
|
|
360
360
|
|
|
361
361
|
## 🔍 Validators
|
|
362
362
|
|
|
363
|
-
DocGuard runs **
|
|
363
|
+
DocGuard runs **27 automated validators** on every `guard` check. Every one is **language-aware** as of v0.16 — patterns for Python (`test_*.py`), Rust (`tests/*.rs`), Go (`*_test.go`), Java (`*Test.java`), Ruby (`*_spec.rb`), PHP, and JS/TS all match.
|
|
364
364
|
|
|
365
365
|
| # | Validator | What It Checks | Default |
|
|
366
366
|
|:--|:----------|:--------------|:--------|
|
|
@@ -387,7 +387,10 @@ DocGuard runs **24 automated validators** on every `guard` check. Every one is *
|
|
|
387
387
|
| 21 | **Generated-Staleness** | `source=code` sections match scanner output; `status: draft` doc age | ✅ On |
|
|
388
388
|
| 22 | **Canonical-Sync** | DocGuard's own README count claims match code-truth (DocGuard repo only — N/A elsewhere) | ✅ On |
|
|
389
389
|
| 23 | **Metrics-Consistency** | Hardcoded numbers match actual counts | ✅ On |
|
|
390
|
-
| 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands,
|
|
390
|
+
| 24 | **Surface-Sync** | Item-level enumerable drift — names in doc tables/lists (commands, checks, etc.) match code-truth (opt-in via `surfaceSync.surfaces`; N/A unless configured) | ✅ On |
|
|
391
|
+
| 25 | **Diff-Suspicion** | Change-driven: a doc/agent-instruction file that references code changed since the ref AND shares removed domain symbols is flagged for review (arXiv 2010.01625, F1 74.7) | ✅ On |
|
|
392
|
+
| 26 | **Reference-Existence** | Two-revision check: a backticked code symbol present when the doc was last updated but gone at HEAD is flagged as outdated (arXiv 2212.01479) | ✅ On |
|
|
393
|
+
| 27 | **API-Doc-Smells** | Bloated (≥300 words) / Lazy (≤6 prose words) API documentation units, keyed on signature-headed sections (F1 0.90/0.95) | ✅ On |
|
|
391
394
|
|
|
392
395
|
**Per-validator controls** (in `.docguard.json`):
|
|
393
396
|
```json
|
|
@@ -456,7 +459,7 @@ DocGuard provides AI agent slash commands for integrated workflows. Installed au
|
|
|
456
459
|
| Command | What It Does |
|
|
457
460
|
|:--------|:-------------|
|
|
458
461
|
| `/docguard.init` | Initialize Canonical-Driven Development in a new or existing project |
|
|
459
|
-
| `/docguard.guard` | Run quality validation — check all
|
|
462
|
+
| `/docguard.guard` | Run quality validation — check all 27 validators |
|
|
460
463
|
| `/docguard.review` | Analyze doc quality and suggest improvements |
|
|
461
464
|
| `/docguard.fix` | Generate targeted fix prompts for specific issues |
|
|
462
465
|
| `/docguard.update` | Update canonical docs after code changes — detect drift and sync documentation |
|
|
@@ -615,7 +618,7 @@ Two ready-to-use templates ship with the Spec Kit extension and as standalone fi
|
|
|
615
618
|
Recent highlights across the v0.16 → v0.19 line:
|
|
616
619
|
|
|
617
620
|
- **`docguard explain <validator>`** — `docguard explain freshness` prints purpose, rules, common
|
|
618
|
-
failures, and fix recipes for any of the
|
|
621
|
+
failures, and fix recipes for any of the 27 validators. No need to dig into source.
|
|
619
622
|
- **`docguard memory --diff`** — surface what changed in your canonical docs between two refs
|
|
620
623
|
(`HEAD~10..HEAD` by default). Great for code review and changelog drafting.
|
|
621
624
|
- **`docguard score --diff`** — see exactly which validators moved the score up or down between
|
|
@@ -178,6 +178,37 @@ const EXPLAINERS = {
|
|
|
178
178
|
example: '`cli/commands/demo.mjs` exists and `| `demo` | Zero-install preview |` appears in README.md\'s commands table',
|
|
179
179
|
standard: 'CDD principle: documented surfaces match implemented surfaces',
|
|
180
180
|
},
|
|
181
|
+
diffSuspicion: {
|
|
182
|
+
title: 'Diff-Suspicion — docs describing code that just changed (DSP001)',
|
|
183
|
+
what: 'Change-driven. For each code file changed since the ref (`config.changedSinceRef`, else HEAD~1), flags a canonical doc or agent-instruction file that BOTH references the file (path/`module`) AND shares domain tokens that were removed/replaced in the diff. Deterministic diff-overlap rule (arXiv 2010.01625, F1 74.7); confidence:low.',
|
|
184
|
+
why: 'A doc that talks about a symbol the code just deleted is the highest-signal, lowest-cost drift class — and it is exactly what whole-repo scans miss but a diff makes obvious.',
|
|
185
|
+
triggers: [
|
|
186
|
+
['describes X, which just had … removed/changed', 'Re-read the doc against the current file; the removed symbols may now be wrong. Suppress the pairing if it is a false positive.'],
|
|
187
|
+
],
|
|
188
|
+
example: 'AUTH.md references `src/auth.ts` and `validateToken` was renamed away in the last commit',
|
|
189
|
+
standard: 'Just-in-time comment-code inconsistency detection (AAAI 2021)',
|
|
190
|
+
},
|
|
191
|
+
referenceExistence: {
|
|
192
|
+
title: 'Reference-Existence — doc names a code symbol that no longer exists (REF001)',
|
|
193
|
+
what: 'Two-revision check. A compound code identifier backticked in a doc that existed in the source when the doc was last updated but has ZERO whole-word matches at HEAD is flagged as outdated. Deterministic (arXiv 2212.01479); confidence:low.',
|
|
194
|
+
why: 'References go stale silently for years; the two-revision gate distinguishes "renamed away" from "never existed", keeping false positives near zero.',
|
|
195
|
+
triggers: [
|
|
196
|
+
['references `X`, which existed … but has ZERO matches at HEAD', 'Update or remove the reference. Suppress with `<!-- docguard:ignore REF001 -->` if it is a still-relevant user-facing name.'],
|
|
197
|
+
],
|
|
198
|
+
example: 'API-REFERENCE.md backticks `getUserById` which was deleted three commits ago',
|
|
199
|
+
standard: 'Outdated code-element reference detection (EMSE 2022)',
|
|
200
|
+
},
|
|
201
|
+
apiDocSmells: {
|
|
202
|
+
title: 'API-Doc-Smells — Bloated / Lazy API documentation (APS001/APS002)',
|
|
203
|
+
what: 'Length signals on doc units whose heading is a code signature (HTTP endpoint / function / backticked symbol). Lazy = ≤6 prose words (documented in name only); Bloated = ≥300 words for one unit. Deterministic (F1 0.90/0.95); confidence:low. OFF by default — enable with `validators.apiDocSmells: true`.',
|
|
204
|
+
why: 'An endpoint documented in name only, or buried in 400 words, both fail the reader — and both are detectable without understanding the prose.',
|
|
205
|
+
triggers: [
|
|
206
|
+
['documented in name only', 'Describe what it does, its params, return, and errors — not just the signature.'],
|
|
207
|
+
['is N words for one unit — Bloated', 'Trim to the essential contract; move examples/edge-cases elsewhere.'],
|
|
208
|
+
],
|
|
209
|
+
example: '`#### GET /api/health` with an empty body → Lazy',
|
|
210
|
+
standard: 'API documentation smell taxonomy',
|
|
211
|
+
},
|
|
181
212
|
crossReference: {
|
|
182
213
|
title: 'Cross-Reference — internal markdown links resolve',
|
|
183
214
|
what: 'Scans canonical docs for `[text](./OTHER.md#anchor)` and `#anchor` links. Verifies the target file exists and the anchor matches a heading.',
|
|
@@ -351,6 +382,9 @@ const DISPLAY_NAMES = {
|
|
|
351
382
|
surfaceSync: 'Surface-Sync',
|
|
352
383
|
canonicalSync: 'Canonical-Sync',
|
|
353
384
|
metricsConsistency: 'Metrics-Consistency',
|
|
385
|
+
diffSuspicion: 'Diff-Suspicion',
|
|
386
|
+
referenceExistence: 'Reference-Existence',
|
|
387
|
+
apiDocSmells: 'API-Doc-Smells',
|
|
354
388
|
};
|
|
355
389
|
|
|
356
390
|
/** Collapse a key / display name to a comparable form: lowercase, alnum only. */
|
|
@@ -147,6 +147,10 @@ import { validateSchemaSync } from '../validators/schema-sync.mjs';
|
|
|
147
147
|
import { validateSpecKitIntegration } from '../validators/spec-kit.mjs';
|
|
148
148
|
import { validateCanonicalSync } from '../validators/canonical-sync.mjs';
|
|
149
149
|
import { validateSurfaceSync } from '../validators/surface-sync.mjs';
|
|
150
|
+
// v0.31.0 change-driven + smell detectors
|
|
151
|
+
import { validateDiffSuspicion } from '../validators/diff-suspicion.mjs';
|
|
152
|
+
import { validateReferenceExistence } from '../validators/reference-existence.mjs';
|
|
153
|
+
import { validateApiDocSmells } from '../validators/api-doc-smells.mjs';
|
|
150
154
|
|
|
151
155
|
/**
|
|
152
156
|
* Internal guard — returns structured data, no console output, no process.exit.
|
|
@@ -313,6 +317,10 @@ export function runGuardInternal(projectDir, config) {
|
|
|
313
317
|
{ key: 'crossReference', name: 'Cross-Reference', fn: () => validateCrossReferences(projectDir, config) },
|
|
314
318
|
{ key: 'generatedStaleness', name: 'Generated-Staleness', fn: () => validateGeneratedStaleness(projectDir, config) },
|
|
315
319
|
{ key: 'surfaceSync', name: 'Surface-Sync', fn: () => validateSurfaceSync(projectDir, config) },
|
|
320
|
+
// v0.31.0 — change-driven + smell detectors (all confidence:low / soft).
|
|
321
|
+
{ key: 'diffSuspicion', name: 'Diff-Suspicion', fn: () => validateDiffSuspicion(projectDir, config) },
|
|
322
|
+
{ key: 'referenceExistence', name: 'Reference-Existence', fn: () => validateReferenceExistence(projectDir, config) },
|
|
323
|
+
{ key: 'apiDocSmells', name: 'API-Doc-Smells', fn: () => validateApiDocSmells(projectDir, config) },
|
|
316
324
|
// Metrics-Consistency runs post-loop (needs guard results)
|
|
317
325
|
];
|
|
318
326
|
|
|
@@ -15,10 +15,21 @@
|
|
|
15
15
|
* JSON mode emits a structured `{ changedFiles, affectedDocs }` payload
|
|
16
16
|
* for CI integrations and PR-comment bots.
|
|
17
17
|
*
|
|
18
|
+
* v0.31.0 — blast radius (feat 1):
|
|
19
|
+
* - Agent-instruction files (AGENTS.md/CLAUDE.md/GEMINI.md) are indexed
|
|
20
|
+
* alongside canonical docs, so a changed code file they reference is
|
|
21
|
+
* surfaced too (agent instructions drift when the code they describe moves).
|
|
22
|
+
* - Doc→doc graph: when a DOC changes, the docs that reference it — INCLUDING
|
|
23
|
+
* agent-instruction files — are flagged as suspect ("blast radius"). This is
|
|
24
|
+
* the unclaimed slice: a change in ARCHITECTURE.md marks the AGENTS.md that
|
|
25
|
+
* points at it for review.
|
|
26
|
+
*
|
|
18
27
|
* @req SC-S11-001 — impact reports per-file → doc mappings
|
|
19
28
|
* @req SC-S11-002 — files with no doc references are listed as "no impact"
|
|
20
29
|
* @req SC-S11-003 — --format json emits parseable structured output
|
|
21
30
|
* @req SC-S11-004 — non-code files (.md, .json, etc.) are skipped from impact analysis
|
|
31
|
+
* @req SC-S11-007 — agent-instruction files participate in impact analysis
|
|
32
|
+
* @req SC-S11-008 — a changed doc flags the docs that reference it (blast radius)
|
|
22
33
|
*/
|
|
23
34
|
|
|
24
35
|
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
@@ -33,10 +44,28 @@ import { changedFilesSince, isGitRepo } from '../shared-git.mjs';
|
|
|
33
44
|
*/
|
|
34
45
|
const CODE_EXTENSIONS = /\.(ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|rb|php|cs|swift)$/;
|
|
35
46
|
|
|
47
|
+
// Root agent-instruction files — documentation that names code and other docs.
|
|
48
|
+
const AGENT_FILES = ['AGENTS.md', 'CLAUDE.md', 'GEMINI.md'];
|
|
49
|
+
|
|
36
50
|
function escapeRegex(s) {
|
|
37
51
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
38
52
|
}
|
|
39
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Doc→doc references: which indexed docs reference `changedDocPath` (by its
|
|
56
|
+
* basename — the form used in prose "see ARCHITECTURE.md" and markdown links
|
|
57
|
+
* `](ARCHITECTURE.md)`). Skips self. This is the blast-radius edge set.
|
|
58
|
+
*/
|
|
59
|
+
function docsReferencing(changedDocPath, index) {
|
|
60
|
+
const cbase = basename(changedDocPath);
|
|
61
|
+
const dependents = [];
|
|
62
|
+
for (const [docName, lines] of index) {
|
|
63
|
+
if (docName === cbase || docName === changedDocPath) continue; // not self
|
|
64
|
+
if (lines.some(l => l.includes(cbase))) dependents.push(docName);
|
|
65
|
+
}
|
|
66
|
+
return dependents;
|
|
67
|
+
}
|
|
68
|
+
|
|
40
69
|
/**
|
|
41
70
|
* Find canonical doc references for a single file. Reuses the same three
|
|
42
71
|
* match strategies as trace --reverse for consistency: direct path,
|
|
@@ -81,9 +110,11 @@ export function runImpact(projectDir, _config, flags) {
|
|
|
81
110
|
// impact" in the same sense; they ARE the docs (or config).
|
|
82
111
|
const codeChanged = changed.filter(f => CODE_EXTENSIONS.test(f));
|
|
83
112
|
|
|
84
|
-
// Index canonical docs once
|
|
113
|
+
// Index canonical docs once, PLUS root agent-instruction files (they name
|
|
114
|
+
// code and other docs, so they belong in both code→doc and doc→doc analysis).
|
|
85
115
|
const docsDir = resolve(projectDir, 'docs-canonical');
|
|
86
116
|
const docsIndex = new Map(); // docName → lines[]
|
|
117
|
+
const agentDocs = new Set(); // which indexed docs are agent-instruction files
|
|
87
118
|
if (existsSync(docsDir)) {
|
|
88
119
|
try {
|
|
89
120
|
for (const f of readdirSync(docsDir)) {
|
|
@@ -95,6 +126,11 @@ export function runImpact(projectDir, _config, flags) {
|
|
|
95
126
|
}
|
|
96
127
|
} catch { /* skip if dir unreadable */ }
|
|
97
128
|
}
|
|
129
|
+
for (const a of AGENT_FILES) {
|
|
130
|
+
const p = resolve(projectDir, a);
|
|
131
|
+
if (!existsSync(p)) continue;
|
|
132
|
+
try { docsIndex.set(a, readFileSync(p, 'utf-8').split('\n')); agentDocs.add(a); } catch { /* skip */ }
|
|
133
|
+
}
|
|
98
134
|
|
|
99
135
|
// Compute per-file references
|
|
100
136
|
const fileImpact = []; // { file, references: [{doc, line, kind}] }
|
|
@@ -113,15 +149,38 @@ export function runImpact(projectDir, _config, flags) {
|
|
|
113
149
|
const affectedDocs = Array.from(docMap.entries()).map(([doc, files]) => ({
|
|
114
150
|
doc,
|
|
115
151
|
files: Array.from(files),
|
|
152
|
+
isAgentFile: agentDocs.has(doc),
|
|
116
153
|
}));
|
|
117
154
|
|
|
155
|
+
// ── Doc→doc blast radius: a changed DOC flags the docs that reference it ──
|
|
156
|
+
// (including agent-instruction files that point at it). Only meaningful edges
|
|
157
|
+
// are emitted (changed doc with ≥1 dependent).
|
|
158
|
+
//
|
|
159
|
+
// A source must be an INDEXED canonical/agent doc — not any changed `.md`.
|
|
160
|
+
// Otherwise a CHANGELOG.md / README.md / .wolf/*.md change flags every doc
|
|
161
|
+
// that merely mentions it in passing (dogfooding false positives).
|
|
162
|
+
const indexBasenames = new Set(docsIndex.keys());
|
|
163
|
+
const changedDocs = changed.filter(f => f.endsWith('.md') && indexBasenames.has(basename(f)));
|
|
164
|
+
const blastRadius = [];
|
|
165
|
+
for (const cd of changedDocs) {
|
|
166
|
+
const dependents = docsReferencing(cd, docsIndex);
|
|
167
|
+
if (dependents.length > 0) {
|
|
168
|
+
blastRadius.push({
|
|
169
|
+
changedDoc: cd,
|
|
170
|
+
dependents: dependents.map(d => ({ doc: d, isAgentFile: agentDocs.has(d) })),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
118
175
|
// ── JSON output ──
|
|
119
176
|
if (isJson) {
|
|
120
177
|
console.log(JSON.stringify({
|
|
121
178
|
since,
|
|
122
179
|
changedFiles: codeChanged,
|
|
123
|
-
|
|
180
|
+
changedDocs,
|
|
181
|
+
ignoredFiles: changed.filter(f => !CODE_EXTENSIONS.test(f) && !f.endsWith('.md')),
|
|
124
182
|
affectedDocs,
|
|
183
|
+
blastRadius,
|
|
125
184
|
timestamp: new Date().toISOString(),
|
|
126
185
|
}, null, 2));
|
|
127
186
|
return;
|
|
@@ -134,8 +193,28 @@ export function runImpact(projectDir, _config, flags) {
|
|
|
134
193
|
console.log(` ${c.green}✅ No file changes since ${since}.${c.reset}`);
|
|
135
194
|
return;
|
|
136
195
|
}
|
|
196
|
+
|
|
197
|
+
// Doc→doc blast radius — shown whether or not code changed (a doc-only change
|
|
198
|
+
// can still ripple to the docs / agent files that reference it).
|
|
199
|
+
const printBlast = () => {
|
|
200
|
+
if (blastRadius.length === 0) return;
|
|
201
|
+
console.log(`\n ${c.bold}🌐 Doc blast radius${c.reset} ${c.dim}(${changedDocs.length} doc(s) changed)${c.reset}`);
|
|
202
|
+
for (const { changedDoc, dependents } of blastRadius) {
|
|
203
|
+
console.log(` ${c.cyan}${changedDoc}${c.reset} ${c.dim}changed → review ${dependents.length} dependent doc(s):${c.reset}`);
|
|
204
|
+
for (const dep of dependents.slice(0, 8)) {
|
|
205
|
+
const tag = dep.isAgentFile ? ` ${c.yellow}[agent-instruction]${c.reset}` : '';
|
|
206
|
+
console.log(` ${c.dim}↳${c.reset} ${dep.doc}${tag}`);
|
|
207
|
+
}
|
|
208
|
+
if (dependents.length > 8) console.log(` ${c.dim}... ${dependents.length - 8} more${c.reset}`);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
|
|
137
212
|
if (codeChanged.length === 0) {
|
|
138
|
-
console.log(` ${c.dim}No code files changed (${
|
|
213
|
+
console.log(` ${c.dim}No code files changed (${changedDocs.length} doc(s) + ${changed.length - changedDocs.length} other non-code file(s)).${c.reset}`);
|
|
214
|
+
if (blastRadius.length === 0 && changedDocs.length > 0) {
|
|
215
|
+
console.log(` ${c.green}✅ No other docs reference the changed doc(s).${c.reset}`);
|
|
216
|
+
}
|
|
217
|
+
printBlast();
|
|
139
218
|
return;
|
|
140
219
|
}
|
|
141
220
|
|
|
@@ -146,16 +225,16 @@ export function runImpact(projectDir, _config, flags) {
|
|
|
146
225
|
console.log(` ${c.dim}This often means the changed code is undocumented. Consider:${c.reset}`);
|
|
147
226
|
console.log(` ${c.dim} - Running ${c.cyan}docguard generate --plan${c.dim} to add doc skeletons${c.reset}`);
|
|
148
227
|
console.log(` ${c.dim} - Reviewing whether the change belongs in an existing doc${c.reset}`);
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
228
|
+
} else {
|
|
229
|
+
console.log(` ${c.green}${affectedDocs.length}${c.reset} canonical doc(s) reference the changed files:\n`);
|
|
230
|
+
for (const { doc, files, isAgentFile } of affectedDocs) {
|
|
231
|
+
const tag = isAgentFile ? ` ${c.yellow}[agent-instruction]${c.reset}` : '';
|
|
232
|
+
console.log(` ${c.cyan}${doc}${c.reset}${tag} ${c.dim}(${files.length} file${files.length > 1 ? 's' : ''})${c.reset}`);
|
|
233
|
+
for (const f of files.slice(0, 5)) {
|
|
234
|
+
console.log(` ${c.dim}via${c.reset} ${f}`);
|
|
235
|
+
}
|
|
236
|
+
if (files.length > 5) console.log(` ${c.dim}... ${files.length - 5} more${c.reset}`);
|
|
157
237
|
}
|
|
158
|
-
if (files.length > 5) console.log(` ${c.dim}... ${files.length - 5} more${c.reset}`);
|
|
159
238
|
}
|
|
160
239
|
|
|
161
240
|
// List code files with NO doc references — these may need new docs
|
|
@@ -166,4 +245,6 @@ export function runImpact(projectDir, _config, flags) {
|
|
|
166
245
|
if (orphaned.length > 5) console.log(` ${c.dim}... ${orphaned.length - 5} more${c.reset}`);
|
|
167
246
|
console.log(` ${c.dim}These may be undocumented — review whether they belong in an existing doc.${c.reset}`);
|
|
168
247
|
}
|
|
248
|
+
|
|
249
|
+
printBlast();
|
|
169
250
|
}
|