docguard-cli 0.9.8__tar.gz → 0.9.9__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.9.8/extensions/spec-kit-docguard → docguard_cli-0.9.9/.agent}/skills/docguard-fix/SKILL.md +2 -1
- {docguard_cli-0.9.8/extensions/spec-kit-docguard → docguard_cli-0.9.9/.agent}/skills/docguard-guard/SKILL.md +9 -4
- {docguard_cli-0.9.8/extensions/spec-kit-docguard → docguard_cli-0.9.9/.agent}/skills/docguard-review/SKILL.md +5 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/docguard-score/SKILL.md +2 -1
- docguard_cli-0.9.9/.specify/memory/constitution.md +76 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/CHANGELOG.md +38 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/PKG-INFO +1 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/diagnose.mjs +64 -24
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/fix.mjs +1 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/guard.mjs +12 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/hooks.mjs +2 -2
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/init.mjs +94 -73
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/setup.mjs +60 -30
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/docguard.mjs +5 -5
- docguard_cli-0.9.9/cli/ensure-skills.mjs +314 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/scanners/speckit.mjs +1 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/doc-quality.mjs +1 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/schema-sync.mjs +1 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/todo-tracking.mjs +1 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/extension.yml +6 -2
- {docguard_cli-0.9.8/.agent → docguard_cli-0.9.9/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -1
- {docguard_cli-0.9.8/.agent → docguard_cli-0.9.9/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +9 -4
- {docguard_cli-0.9.8/.agent → docguard_cli-0.9.9/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +5 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/skills/docguard-score/SKILL.md +2 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/package.json +1 -1
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/pyproject.toml +1 -1
- docguard_cli-0.9.8/.specify/memory/constitution.md +0 -50
- docguard_cli-0.9.8/cli/ensure-skills.mjs +0 -96
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.analyze.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.checklist.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.clarify.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.constitution.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.implement.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.plan.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.specify.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.tasks.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/commands/speckit.taskstoissues.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-analyze/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-checklist/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-clarify/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-constitution/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-implement/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-plan/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-specify/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-tasks/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.docguard.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.docguardignore +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.github/workflows/ci.yml +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.github/workflows/release.yml +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.github/workflows/spec-kit-extension.yml +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.gitignore +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.npmignore +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/init-options.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/scripts/bash/common.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/scripts/bash/setup-plan.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/templates/agent-file-template.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/templates/checklist-template.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/templates/constitution-template.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/templates/plan-template.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/templates/spec-template.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/.specify/templates/tasks-template.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/AGENTS.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/CODE_OF_CONDUCT.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/COMPARISONS.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/CONTRIBUTING.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/DRIFT-LOG.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/LICENSE +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/PHILOSOPHY.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/README.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/ROADMAP.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/SECURITY.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/STANDARD.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/SUPPORT.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/action.yml +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/agents.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/badge.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/ci.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/diff.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/generate.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/llms.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/publish.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/score.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/trace.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/commands/watch.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/scanners/doc-tools.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/scanners/routes.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/scanners/schemas.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/shared.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/architecture.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/changelog.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/docs-coverage.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/docs-diff.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/docs-sync.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/drift.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/environment.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/freshness.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/metadata-sync.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/metrics-consistency.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/security.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/structure.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/test-spec.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/cli/validators/traceability.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/commands/docguard.fix.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/commands/docguard.guard.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/commands/docguard.review.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/commands/docguard.score.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/configs/fastify.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/configs/generic.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/configs/nextjs.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/configs/python.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docguard_cli/__init__.py +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docguard_cli/wrapper.py +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs/ai-integration.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs/commands.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs/configuration.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs/faq.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs/installation.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs/profiles.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs/quickstart.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/01-express-api/README.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/01-express-api/package.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/01-express-api/server.js +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/02-python-flask/README.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/02-python-flask/app.py +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/02-python-flask/requirements.txt +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/03-spec-kit-project/README.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/03-spec-kit-project/package.json +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/03-spec-kit-project/src/index.js +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/examples/README.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/LICENSE +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/README.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/commands/generate.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/commands/guard.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/commands/init.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/commands/score.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/commands/trace.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/ADR.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/AGENTS.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/ARCHITECTURE.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/CHANGELOG.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/CURRENT-STATE.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/DATA-MODEL.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/DEPLOYMENT.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/DRIFT-LOG.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/ENVIRONMENT.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/KNOWN-GOTCHAS.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/REQUIREMENTS.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/ROADMAP.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/RUNBOOKS.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/SECURITY.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/TEST-SPEC.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/TROUBLESHOOTING.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/VENDOR-BUGS.md.template +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/ci/github-actions.yml +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/commands/docguard.fix.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/commands/docguard.guard.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/commands/docguard.init.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/commands/docguard.review.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/templates/commands/docguard.update.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/tests/commands.test.mjs +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/vscode-extension/.vscodeignore +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/vscode-extension/README.md +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/vscode-extension/extension.js +0 -0
- {docguard_cli-0.9.8 → docguard_cli-0.9.9}/vscode-extension/package.json +0 -0
|
@@ -6,9 +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.
|
|
9
|
+
version: 0.9.9
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
+
<!-- docguard:version: 0.9.9 -->
|
|
12
13
|
|
|
13
14
|
# DocGuard Fix Skill
|
|
14
15
|
|
|
@@ -7,9 +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.9.
|
|
10
|
+
version: 0.9.9
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
+
<!-- docguard:version: 0.9.9 -->
|
|
13
14
|
|
|
14
15
|
# DocGuard Guard Skill
|
|
15
16
|
|
|
@@ -155,12 +156,16 @@ Present the user with options:
|
|
|
155
156
|
- **Track progress** — if user runs guard multiple times, compare before/after
|
|
156
157
|
- If user provides `$ARGUMENTS` like "just structure" or "only security", filter report to those validators
|
|
157
158
|
|
|
158
|
-
## Integration with Spec Kit
|
|
159
|
+
## Integration with Spec Kit (Extension-First)
|
|
159
160
|
|
|
160
|
-
|
|
161
|
+
DocGuard is a spec-kit extension. When this project has a `.specify/` directory:
|
|
162
|
+
- Read `.specify/memory/constitution.md` for project principles that constrain documentation
|
|
161
163
|
- Include Spec-Kit validator results in the triage
|
|
162
164
|
- Cross-reference spec quality issues with `specs/*/spec.md` file paths
|
|
163
|
-
-
|
|
165
|
+
- When specification issues found → suggest `/speckit.specify` or `/speckit.clarify`
|
|
166
|
+
- When architecture gaps found → suggest `/speckit.plan`
|
|
167
|
+
- When cross-artifact inconsistencies exceed 3 → suggest `/speckit.analyze`
|
|
168
|
+
- When no constitution exists → suggest `/speckit.constitution` as first step
|
|
164
169
|
|
|
165
170
|
## Context
|
|
166
171
|
|
|
@@ -6,9 +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.
|
|
9
|
+
version: 0.9.9
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
+
<!-- docguard:version: 0.9.9 -->
|
|
12
13
|
|
|
13
14
|
# DocGuard Review Skill
|
|
14
15
|
|
|
@@ -163,7 +164,10 @@ Output a structured markdown report (do NOT write to disk):
|
|
|
163
164
|
|
|
164
165
|
Based on findings:
|
|
165
166
|
- **If CRITICAL issues**: "Run `/docguard.fix --doc [name]` to resolve blocking issues"
|
|
167
|
+
- **If spec-related gaps**: "Run `/speckit.specify` to update specifications" or "/speckit.clarify to resolve ambiguities"
|
|
168
|
+
- **If architecture drift**: "Run `/speckit.plan` to realign implementation plan with codebase"
|
|
166
169
|
- **If only LOW/MEDIUM**: "Documentation is healthy. Consider `/docguard.fix` for polish"
|
|
170
|
+
- **If constitution missing**: "Run `/speckit.constitution` to establish project principles"
|
|
167
171
|
- **If all clean**: "Documentation is excellent. No action needed."
|
|
168
172
|
|
|
169
173
|
Ask: "Would you like me to fix the top N issues? (I'll show you what I plan to change before applying)"
|
|
@@ -6,9 +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.
|
|
9
|
+
version: 0.9.9
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
+
<!-- docguard:version: 0.9.9 -->
|
|
12
13
|
|
|
13
14
|
# DocGuard Score Skill
|
|
14
15
|
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<!-- Sync Impact Report
|
|
2
|
+
Version change: 0.0.0 → 1.0.0
|
|
3
|
+
Modified principles: N/A (initial creation)
|
|
4
|
+
Added sections: Core Principles (7), Technology Constraints, Extension & Spec Kit Compliance, Governance
|
|
5
|
+
Removed sections: N/A
|
|
6
|
+
Templates requiring updates: ✅ constitution-template.md (reference only, not modified)
|
|
7
|
+
Follow-up TODOs: None
|
|
8
|
+
-->
|
|
9
|
+
|
|
10
|
+
# DocGuard Constitution
|
|
11
|
+
|
|
12
|
+
## Core Principles
|
|
13
|
+
|
|
14
|
+
### I. LLM-First, CLI-Second
|
|
15
|
+
|
|
16
|
+
DocGuard is built for AI coding agents. Every feature MUST be designed for LLM consumption first, with CLI as a secondary interface. Skills (behavior protocols) take priority over CLI commands (step-lists). When DocGuard detects an AI agent environment, it MUST surface skill-based instructions. CLI output MUST be machine-parseable (JSON mode) alongside human-readable text.
|
|
17
|
+
|
|
18
|
+
### II. Zero NPM Runtime Dependencies (NON-NEGOTIABLE)
|
|
19
|
+
|
|
20
|
+
DocGuard has zero `node_modules` at runtime. All Node.js functionality uses built-in modules only (`node:fs`, `node:path`, `node:child_process`, `node:test`, `node:url`, `node:readline`, `node:os`, `node:assert`). This maximizes portability, eliminates supply chain risk, and ensures instant `npx` usage. Dev dependencies are also zero — tests use `node:test`. DocGuard depends on spec-kit as a **framework convention** (`.specify/` directory structure, skill architecture, constitution pattern). This is an integration, not a code dependency. When the `specify` CLI is available, DocGuard MUST leverage it for initialization and skill management.
|
|
21
|
+
|
|
22
|
+
### III. Documentation as Source of Truth
|
|
23
|
+
|
|
24
|
+
Canonical-Driven Development means documentation drives code, not the other way around. DocGuard enforces this by validating code against `docs-canonical/` and detecting drift. Any deviation from canonical docs MUST be logged in `DRIFT-LOG.md` with `// DRIFT: reason` inline comments. The `docguard guard` command is the enforcement gate.
|
|
25
|
+
|
|
26
|
+
### IV. Validator Isolation
|
|
27
|
+
|
|
28
|
+
Each of the 19 validators is a pure, self-contained function. Validators receive `projectDir` and `config`, then return results. No validator may import another validator or depend on command-level logic. This ensures adding or modifying validators never breaks existing ones.
|
|
29
|
+
|
|
30
|
+
### V. AI as Author, CLI as Orchestrator
|
|
31
|
+
|
|
32
|
+
The CLI detects problems and generates structured prompts. The AI agent writes the actual documentation. DocGuard MUST NOT generate final documentation content itself — it provides research instructions, templates, and validation. The `fix`, `diagnose`, and `generate` commands produce AI-actionable output, not finished documents.
|
|
33
|
+
|
|
34
|
+
### VI. Safe Writes
|
|
35
|
+
|
|
36
|
+
All file write operations MUST use defensive patterns. Before overwriting any file, DocGuard creates backups. The `--force` flag is required to overwrite existing files. Init and setup commands skip files that already exist unless explicitly forced.
|
|
37
|
+
|
|
38
|
+
### VII. Spec Kit Extension Compliance
|
|
39
|
+
|
|
40
|
+
DocGuard is a community extension of GitHub Spec Kit. It MUST follow spec-kit conventions: `extension.yml` schema, skill architecture (`SKILL.md` files with YAML frontmatter), workflow hooks (`after_implement`, `before_tasks`, `after_tasks`), and the `.specify/` directory structure. DocGuard MUST always install spec-kit core skills alongside its own skills so users get the complete spec-driven development workflow.
|
|
41
|
+
|
|
42
|
+
## Technology Constraints
|
|
43
|
+
|
|
44
|
+
- **Language**: JavaScript (ES Modules only, no CommonJS)
|
|
45
|
+
- **Runtime**: Node.js ≥ 18 (for native `node:test` and ES module support)
|
|
46
|
+
- **Dependencies**: None. Zero. Ever. This is a hard constraint.
|
|
47
|
+
- **Distribution**: npm (`docguard-cli`) + PyPI (`docguard`)
|
|
48
|
+
- **Testing**: `node:test` + `node:assert` (built-in, no framework)
|
|
49
|
+
- **Extension**: VS Code Extension API for editor integration
|
|
50
|
+
- **Config**: `.docguard.json` for project-level customization
|
|
51
|
+
- **Profiles**: starter, standard, enterprise compliance levels
|
|
52
|
+
- **Output**: Text (human) + JSON (machine) dual output for all commands
|
|
53
|
+
|
|
54
|
+
## Extension & Spec Kit Compliance
|
|
55
|
+
|
|
56
|
+
- DocGuard MUST declare all skills, scripts, hooks, and commands in `extension.yml`
|
|
57
|
+
- DocGuard MUST bundle spec-kit core skills so users don't need a separate install
|
|
58
|
+
- All 4 DocGuard skills (`docguard-guard`, `docguard-fix`, `docguard-review`, `docguard-score`) MUST follow spec-kit skill architecture: YAML frontmatter with `name`, `description`, `compatibility`, `metadata`
|
|
59
|
+
- Workflow hooks MUST be optional (never force execution)
|
|
60
|
+
- The `ensureSkills()` function MUST auto-detect and install both DocGuard skills AND spec-kit core skills
|
|
61
|
+
- DocGuard MUST detect agent environment (LLM vs CLI) and adapt its output accordingly
|
|
62
|
+
|
|
63
|
+
## Governance
|
|
64
|
+
|
|
65
|
+
This constitution supersedes all ad-hoc practices. Amendments require:
|
|
66
|
+
1. Documentation of the change in `DRIFT-LOG.md` if deviating
|
|
67
|
+
2. Update this constitution with a version bump
|
|
68
|
+
3. Update `CHANGELOG.md` with the change
|
|
69
|
+
4. All PRs MUST pass `docguard guard` before merge
|
|
70
|
+
|
|
71
|
+
Versioning follows semantic versioning:
|
|
72
|
+
- **MAJOR**: Principle removal or backward-incompatible redefinition
|
|
73
|
+
- **MINOR**: New principle added or materially expanded guidance
|
|
74
|
+
- **PATCH**: Clarification, wording, typo fix
|
|
75
|
+
|
|
76
|
+
**Version**: 1.0.0 | **Ratified**: 2026-03-17 | **Last Amended**: 2026-03-17
|
|
@@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.9.9] - 2026-03-17
|
|
11
|
+
|
|
12
|
+
### Added — Extension-First Architecture & Spec-Kit Integration Gate
|
|
13
|
+
|
|
14
|
+
#### Spec-Kit Integration Gate
|
|
15
|
+
- **`ensureSpecKit()`** — Runs on every command. Auto-initializes spec-kit when `specify` CLI is available. Shows a prominent yellow-box reminder every time when spec-kit is not installed (persistent, no dismiss).
|
|
16
|
+
- **`detectAIAgent(projectDir)`** — Maps 12 filesystem signals to spec-kit `--ai` flag values: `.cursor/` → `cursor-agent`, `.claude/` or `CLAUDE.md` → `claude`, `.gemini/` → `gemini`, `.agents/` → `agy` (Antigravity), `.github/copilot-instructions.md` → `copilot`, `.windsurf/` → `windsurf`, `.codex/` → `codex`, `.roo/` → `roo`, `.amp/` → `amp`, `.kiro/` → `kiro-cli`, `.tabnine/` → `tabnine`. Falls back to `--ai generic` when no agent detected.
|
|
17
|
+
- **Strong init push** — `docguard init` now shows a prominent red-bordered box when spec-kit is missing, listing exactly what users miss: 9 AI skills, constitution, SDD workflow, agent detection. Provides both `uv` and `pip` install commands.
|
|
18
|
+
- **Guard footer reminder** — `docguard guard` shows a 1-line spec-kit install nudge after results when not initialized.
|
|
19
|
+
- **Skill auto-update** — `ensureSkills()` now compares installed SKILL.md `docguard:version` against package version. Automatically overwrites stale skills on DocGuard update.
|
|
20
|
+
|
|
21
|
+
#### LLM-First Output
|
|
22
|
+
- **`detectAgentMode(projectDir)`** — Returns `'llm'` or `'cli'` based on filesystem signals and `.specify/init-options.json`. All adaptive commands check this.
|
|
23
|
+
- **`diagnose.mjs`** — All `FIX_INSTRUCTIONS` now include `llmCommand` fields (e.g., `/docguard.fix --doc architecture`). Issue collection propagates `llmCommand` to output. Remediation plan, verification checklist, and debate prompts all adapt to agent mode.
|
|
24
|
+
- **`guard.mjs`** — "Next step" hint now shows `/docguard.diagnose` in LLM mode.
|
|
25
|
+
- **`init.mjs`** — Next steps show skill commands (`/docguard.guard`, `/docguard.fix`) in LLM mode, CLI commands (`docguard diagnose`) in CLI mode.
|
|
26
|
+
- **`setup.mjs`** — Next steps adapt to agent mode.
|
|
27
|
+
|
|
28
|
+
#### Spec-Kit Skill Chaining
|
|
29
|
+
- **`docguard-guard` SKILL.md** — Now chains to `/speckit.specify`, `/speckit.plan`, `/speckit.clarify`, and checks `constitution.md`.
|
|
30
|
+
- **`docguard-review` SKILL.md** — Offers spec-kit skills for specification-level issues.
|
|
31
|
+
- **`extension.yml`** — Declares `framework: spec-kit` and `specify` as optional tool.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
- **`npx docguard guard`** → `npx docguard-cli guard` — The npm package name is `docguard-cli`, not `docguard`. Fixed in `hooks.mjs`, `setup.mjs`, `fix.mjs`, `docguard.mjs` (pre-existing bug).
|
|
35
|
+
- **Hardcoded `--ai agy`** → Dynamic `detectAIAgent()` — `init.mjs` and `setup.mjs` no longer hardcode Antigravity as the agent.
|
|
36
|
+
- **`llmCommand` never propagated** — `collectIssues()` in `diagnose.mjs` was not copying `llmCommand` from `FIX_INSTRUCTIONS` to issue objects, so LLM-first fix hints silently fell back to CLI commands.
|
|
37
|
+
- **Debate prompt not LLM-aware** — `outputDebatePrompt()` now receives `agentMode` and adapts verification commands.
|
|
38
|
+
- **Basic-tier checklist hardcoded** — Verification checklist for basic-tier agents now adapts to LLM/CLI mode.
|
|
39
|
+
- **Stale "Zero dependencies" doc comments** — Updated 6 files to "Zero NPM runtime dependencies" matching the constitution.
|
|
40
|
+
- **Platform-aware `--script`** — `specify init` now uses `--script ps` on Windows, `--script sh` on Unix.
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
- **Constitution** — Principle II amended from "Zero Dependencies" to "Zero NPM Runtime Dependencies" (spec-kit is a framework convention, not a code dependency).
|
|
44
|
+
- **SKILL.md metadata** — All 4 skills updated from `0.9.5`/`0.9.8` to `0.9.9`. Added `docguard:version` comment for auto-update mechanism.
|
|
45
|
+
- **`ensure-skills.mjs`** — Full rewrite: 6 exports (`ensureSkills`, `ensureSpecKit`, `detectAgentMode`, `detectAIAgent`, `getDetectedAgent`, `isSpecKitAvailable`, `isSpecKitInitialized`).
|
|
46
|
+
- **22 files changed**, +567/−203 lines.
|
|
47
|
+
|
|
10
48
|
## [0.9.6] - 2026-03-14
|
|
11
49
|
|
|
12
50
|
### Added — Enterprise AI Skills Architecture
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docguard-cli
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.9
|
|
4
4
|
Summary: The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. Zero dependencies.
|
|
5
5
|
Project-URL: Homepage, https://github.com/raccioly/docguard
|
|
6
6
|
Project-URL: Documentation, https://github.com/raccioly/docguard#readme
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import { c } from '../shared.mjs';
|
|
17
17
|
import { runGuardInternal } from './guard.mjs';
|
|
18
18
|
import { runScoreInternal } from './score.mjs';
|
|
19
|
+
import { detectAgentMode, isSpecKitInitialized } from '../ensure-skills.mjs';
|
|
19
20
|
import { existsSync, readFileSync } from 'node:fs';
|
|
20
21
|
import { resolve, dirname } from 'node:path';
|
|
21
22
|
import { fileURLToPath } from 'node:url';
|
|
@@ -35,23 +36,26 @@ const VALIDATOR_TO_DOC = {
|
|
|
35
36
|
'Freshness': null, // freshness — maps to stale doc
|
|
36
37
|
};
|
|
37
38
|
|
|
38
|
-
// Actionable fix instructions per validator
|
|
39
|
+
// Actionable fix instructions per validator (LLM-first: includes both skill and CLI commands)
|
|
39
40
|
const FIX_INSTRUCTIONS = {
|
|
40
41
|
'Structure': {
|
|
41
42
|
action: 'Create missing files',
|
|
42
43
|
command: 'docguard init',
|
|
44
|
+
llmCommand: '/docguard.init',
|
|
43
45
|
description: 'Run init to create missing documentation templates.',
|
|
44
46
|
autoFixable: true,
|
|
45
47
|
},
|
|
46
48
|
'Doc Sections': {
|
|
47
49
|
action: 'Fill document sections',
|
|
48
50
|
command: 'docguard fix --doc',
|
|
49
|
-
|
|
51
|
+
llmCommand: '/docguard.fix --doc',
|
|
52
|
+
description: 'Documents exist but have missing or placeholder sections. Use the docguard-fix skill to generate content.',
|
|
50
53
|
autoFixable: false,
|
|
51
54
|
},
|
|
52
55
|
'Docs-Sync': {
|
|
53
56
|
action: 'Sync documentation references',
|
|
54
57
|
command: 'docguard fix --doc architecture',
|
|
58
|
+
llmCommand: '/docguard.fix --doc architecture',
|
|
55
59
|
description: 'Documentation references are out of sync with code. Review and update component maps.',
|
|
56
60
|
autoFixable: false,
|
|
57
61
|
},
|
|
@@ -68,35 +72,44 @@ const FIX_INSTRUCTIONS = {
|
|
|
68
72
|
'Test-Spec': {
|
|
69
73
|
action: 'Update TEST-SPEC.md',
|
|
70
74
|
command: 'docguard fix --doc test-spec',
|
|
75
|
+
llmCommand: '/docguard.fix --doc test-spec',
|
|
71
76
|
description: 'Test documentation needs updating to match actual test structure.',
|
|
72
77
|
autoFixable: false,
|
|
73
78
|
},
|
|
74
79
|
'Environment': {
|
|
75
80
|
action: 'Update ENVIRONMENT.md',
|
|
76
81
|
command: 'docguard fix --doc environment',
|
|
82
|
+
llmCommand: '/docguard.fix --doc environment',
|
|
77
83
|
description: 'Environment documentation is missing or incomplete.',
|
|
78
84
|
autoFixable: false,
|
|
79
85
|
},
|
|
80
86
|
'Security': {
|
|
81
87
|
action: 'Update SECURITY.md',
|
|
82
88
|
command: 'docguard fix --doc security',
|
|
89
|
+
llmCommand: '/docguard.fix --doc security',
|
|
83
90
|
description: 'Security documentation needs updating.',
|
|
84
91
|
autoFixable: false,
|
|
85
92
|
},
|
|
86
93
|
'Architecture': {
|
|
87
94
|
action: 'Update ARCHITECTURE.md',
|
|
88
95
|
command: 'docguard fix --doc architecture',
|
|
96
|
+
llmCommand: '/docguard.fix --doc architecture',
|
|
89
97
|
description: 'Architecture documentation doesn\'t match the codebase.',
|
|
90
98
|
autoFixable: false,
|
|
91
99
|
},
|
|
92
100
|
'Freshness': {
|
|
93
101
|
action: 'Review stale documents',
|
|
102
|
+
command: 'docguard fix --doc',
|
|
103
|
+
llmCommand: '/docguard.fix --doc',
|
|
94
104
|
description: 'Documents haven\'t been reviewed since recent code changes. Re-run fix --doc for each stale doc.',
|
|
95
105
|
autoFixable: false,
|
|
96
106
|
},
|
|
97
107
|
};
|
|
98
108
|
|
|
99
109
|
export function runDiagnose(projectDir, config, flags) {
|
|
110
|
+
// ── Step 0: Detect agent mode (LLM-first) ──
|
|
111
|
+
const agentMode = detectAgentMode(projectDir);
|
|
112
|
+
|
|
100
113
|
// ── Step 1: Run guard internally ──
|
|
101
114
|
let guardData = runGuardInternal(projectDir, config);
|
|
102
115
|
const scoreData = runScoreInternal(projectDir, config);
|
|
@@ -140,10 +153,15 @@ export function runDiagnose(projectDir, config, flags) {
|
|
|
140
153
|
}
|
|
141
154
|
}
|
|
142
155
|
} else if (!shouldAutoFix && (hasStructural || autoFixable.length > 0) && (!flags.format || flags.format === 'text')) {
|
|
143
|
-
// Suggest-only mode: tell user what they can do
|
|
156
|
+
// Suggest-only mode: tell user what they can do (LLM-first)
|
|
144
157
|
console.log(` ${c.yellow}💡 ${autoFixable.length + (hasStructural ? 1 : 0)} issue(s) can be auto-fixed.${c.reset} Run with ${c.cyan}--auto${c.reset} to create/regenerate docs, or manually:`);
|
|
145
|
-
if (
|
|
146
|
-
|
|
158
|
+
if (agentMode === 'llm') {
|
|
159
|
+
if (hasStructural) console.log(` ${c.dim}/docguard.init${c.reset}`);
|
|
160
|
+
if (autoFixable.length > 0) console.log(` ${c.dim}/docguard.fix${c.reset}`);
|
|
161
|
+
} else {
|
|
162
|
+
if (hasStructural) console.log(` ${c.dim}docguard init --dir .${c.reset}`);
|
|
163
|
+
if (autoFixable.length > 0) console.log(` ${c.dim}docguard generate --dir . --force${c.reset}`);
|
|
164
|
+
}
|
|
147
165
|
console.log('');
|
|
148
166
|
}
|
|
149
167
|
}
|
|
@@ -157,7 +175,9 @@ export function runDiagnose(projectDir, config, flags) {
|
|
|
157
175
|
const docMap = { 'architecture': 'architecture', 'data-model': 'data-model', 'security': 'security', 'test-spec': 'test-spec', 'environment': 'environment' };
|
|
158
176
|
issue.docTarget = docMap[docName] || null;
|
|
159
177
|
if (issue.docTarget) {
|
|
160
|
-
issue.command =
|
|
178
|
+
issue.command = agentMode === 'llm'
|
|
179
|
+
? `/docguard.fix --doc ${issue.docTarget}`
|
|
180
|
+
: `docguard fix --doc ${issue.docTarget}`;
|
|
161
181
|
}
|
|
162
182
|
}
|
|
163
183
|
}
|
|
@@ -167,9 +187,9 @@ export function runDiagnose(projectDir, config, flags) {
|
|
|
167
187
|
if (flags.format === 'json') {
|
|
168
188
|
outputJSON(guardData, scoreData, issues);
|
|
169
189
|
} else if (flags.format === 'prompt') {
|
|
170
|
-
outputPrompt(projectDir, guardData, scoreData, issues, flags);
|
|
190
|
+
outputPrompt(projectDir, guardData, scoreData, issues, flags, agentMode);
|
|
171
191
|
} else {
|
|
172
|
-
outputText(projectDir, guardData, scoreData, issues, flags);
|
|
192
|
+
outputText(projectDir, guardData, scoreData, issues, flags, agentMode);
|
|
173
193
|
}
|
|
174
194
|
}
|
|
175
195
|
|
|
@@ -191,6 +211,7 @@ function collectIssues(guardData) {
|
|
|
191
211
|
message: err,
|
|
192
212
|
action: fixInfo.action,
|
|
193
213
|
command: fixInfo.command || null,
|
|
214
|
+
llmCommand: fixInfo.llmCommand || null,
|
|
194
215
|
docTarget,
|
|
195
216
|
autoFixable: fixInfo.autoFixable || false,
|
|
196
217
|
});
|
|
@@ -202,6 +223,7 @@ function collectIssues(guardData) {
|
|
|
202
223
|
message: warn,
|
|
203
224
|
action: fixInfo.action,
|
|
204
225
|
command: fixInfo.command || null,
|
|
226
|
+
llmCommand: fixInfo.llmCommand || null,
|
|
205
227
|
docTarget,
|
|
206
228
|
autoFixable: fixInfo.autoFixable || false,
|
|
207
229
|
});
|
|
@@ -233,14 +255,18 @@ function outputJSON(guardData, scoreData, issues) {
|
|
|
233
255
|
console.log(JSON.stringify(result, null, 2));
|
|
234
256
|
}
|
|
235
257
|
|
|
236
|
-
function outputText(projectDir, guardData, scoreData, issues, flags) {
|
|
258
|
+
function outputText(projectDir, guardData, scoreData, issues, flags, agentMode = 'llm') {
|
|
237
259
|
console.log(`${c.bold}🔍 DocGuard Diagnose — ${guardData.project}${c.reset}`);
|
|
238
|
-
console.log(`${c.dim} Profile: ${guardData.profile} | Score: ${scoreData.score}/100 (${scoreData.grade})${c.reset}`);
|
|
260
|
+
console.log(`${c.dim} Profile: ${guardData.profile} | Score: ${scoreData.score}/100 (${scoreData.grade}) | Mode: ${agentMode.toUpperCase()}${c.reset}`);
|
|
239
261
|
console.log(`${c.dim} Guard: ${guardData.passed}/${guardData.total} passed | Status: ${guardData.status}${c.reset}\n`);
|
|
240
262
|
|
|
241
263
|
if (issues.length === 0) {
|
|
242
264
|
console.log(` ${c.green}${c.bold}✅ All clear!${c.reset} No issues found.\n`);
|
|
243
|
-
|
|
265
|
+
if (agentMode === 'llm') {
|
|
266
|
+
console.log(` ${c.dim}Your documentation is healthy. Use ${c.cyan}/docguard.guard${c.dim} to re-validate after changes.${c.reset}\n`);
|
|
267
|
+
} else {
|
|
268
|
+
console.log(` ${c.dim}Your documentation is healthy. Run \`docguard score --tax\` to see maintenance estimate.${c.reset}\n`);
|
|
269
|
+
}
|
|
244
270
|
return;
|
|
245
271
|
}
|
|
246
272
|
|
|
@@ -252,7 +278,8 @@ function outputText(projectDir, guardData, scoreData, issues, flags) {
|
|
|
252
278
|
console.log(` ${c.red}${c.bold}Errors (${errors.length}):${c.reset}`);
|
|
253
279
|
for (const e of errors) {
|
|
254
280
|
console.log(` ${c.red}✗${c.reset} [${e.validator}] ${e.message}`);
|
|
255
|
-
|
|
281
|
+
const cmd = agentMode === 'llm' && e.llmCommand ? e.llmCommand : e.command;
|
|
282
|
+
if (cmd) console.log(` ${c.dim}Fix: ${cmd}${c.reset}`);
|
|
256
283
|
}
|
|
257
284
|
console.log('');
|
|
258
285
|
}
|
|
@@ -261,19 +288,21 @@ function outputText(projectDir, guardData, scoreData, issues, flags) {
|
|
|
261
288
|
console.log(` ${c.yellow}${c.bold}Warnings (${warnings.length}):${c.reset}`);
|
|
262
289
|
for (const w of warnings) {
|
|
263
290
|
console.log(` ${c.yellow}⚠${c.reset} [${w.validator}] ${w.message}`);
|
|
264
|
-
|
|
291
|
+
const cmd = agentMode === 'llm' && w.llmCommand ? w.llmCommand : w.command;
|
|
292
|
+
if (cmd) console.log(` ${c.dim}Fix: ${cmd}${c.reset}`);
|
|
265
293
|
}
|
|
266
294
|
console.log('');
|
|
267
295
|
}
|
|
268
296
|
|
|
269
|
-
// ── Remediation Plan ──
|
|
297
|
+
// ── Remediation Plan (LLM-first) ──
|
|
270
298
|
const commands = [...new Set(issues.filter(i => i.command).map(i => i.command))];
|
|
271
299
|
if (commands.length > 0) {
|
|
272
300
|
console.log(` ${c.bold}📋 Remediation Plan:${c.reset}`);
|
|
273
301
|
for (let i = 0; i < commands.length; i++) {
|
|
274
302
|
console.log(` ${c.cyan}${i + 1}. ${commands[i]}${c.reset}`);
|
|
275
303
|
}
|
|
276
|
-
|
|
304
|
+
const verifyCmd = agentMode === 'llm' ? '/docguard.guard' : 'docguard guard';
|
|
305
|
+
console.log(` ${c.cyan}${commands.length + 1}. ${verifyCmd}${c.reset} ${c.dim}← verify fixes${c.reset}`);
|
|
277
306
|
console.log('');
|
|
278
307
|
}
|
|
279
308
|
|
|
@@ -282,15 +311,15 @@ function outputText(projectDir, guardData, scoreData, issues, flags) {
|
|
|
282
311
|
// Multi-perspective debate prompts (AITPG/TRACE-inspired)
|
|
283
312
|
console.log(` ${c.bold}🤖 Multi-Perspective AI Debate Prompt:${c.reset}`);
|
|
284
313
|
console.log(` ${c.dim}Copy everything below and paste to your AI agent:${c.reset}\n`);
|
|
285
|
-
outputDebatePrompt(projectDir, guardData, scoreData, issues);
|
|
314
|
+
outputDebatePrompt(projectDir, guardData, scoreData, issues, agentMode);
|
|
286
315
|
} else {
|
|
287
316
|
console.log(` ${c.bold}🤖 AI-Ready Prompt:${c.reset}`);
|
|
288
317
|
console.log(` ${c.dim}Copy everything below and paste to your AI agent:${c.reset}\n`);
|
|
289
|
-
outputPrompt(undefined, guardData, scoreData, issues, flags);
|
|
318
|
+
outputPrompt(undefined, guardData, scoreData, issues, flags, agentMode);
|
|
290
319
|
}
|
|
291
320
|
}
|
|
292
321
|
|
|
293
|
-
function outputPrompt(projectDir, guardData, scoreData, issues, flags) {
|
|
322
|
+
function outputPrompt(projectDir, guardData, scoreData, issues, flags, agentMode = 'llm') {
|
|
294
323
|
if (issues.length === 0) {
|
|
295
324
|
console.log('No issues to fix. Documentation is healthy.');
|
|
296
325
|
return;
|
|
@@ -345,7 +374,11 @@ function outputPrompt(projectDir, guardData, scoreData, issues, flags) {
|
|
|
345
374
|
|
|
346
375
|
lines.push('');
|
|
347
376
|
lines.push('VALIDATION:');
|
|
348
|
-
|
|
377
|
+
if (agentMode === 'llm') {
|
|
378
|
+
lines.push('After making all fixes, use the /docguard.guard skill to verify');
|
|
379
|
+
} else {
|
|
380
|
+
lines.push('After making all fixes, run: docguard guard');
|
|
381
|
+
}
|
|
349
382
|
lines.push('Expected result: All checks pass (0 errors, 0 warnings)');
|
|
350
383
|
lines.push(`Target score: ≥${Math.min(scoreData.score + 5, 100)}/100`);
|
|
351
384
|
|
|
@@ -354,9 +387,15 @@ function outputPrompt(projectDir, guardData, scoreData, issues, flags) {
|
|
|
354
387
|
lines.push('');
|
|
355
388
|
lines.push('VERIFICATION CHECKLIST (complete each step):');
|
|
356
389
|
lines.push('□ Read each file in docs-canonical/ before editing');
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
390
|
+
if (agentMode === 'llm') {
|
|
391
|
+
lines.push('□ Run /docguard.guard after each file change');
|
|
392
|
+
lines.push('□ Confirm 0 errors before moving to next issue');
|
|
393
|
+
lines.push('□ Run /docguard.score to confirm improvement');
|
|
394
|
+
} else {
|
|
395
|
+
lines.push('□ Run `docguard guard` after each file change');
|
|
396
|
+
lines.push('□ Confirm 0 errors before moving to next issue');
|
|
397
|
+
lines.push('□ Run `docguard score` to confirm improvement');
|
|
398
|
+
}
|
|
360
399
|
}
|
|
361
400
|
|
|
362
401
|
console.log(lines.join('\n'));
|
|
@@ -368,7 +407,7 @@ function outputPrompt(projectDir, guardData, scoreData, issues, flags) {
|
|
|
368
407
|
* and TRACE adversarial debate (Advocate/Challenger/Mediator/Explainer).
|
|
369
408
|
* Lopez et al., IEEE TSE/TMLCN 2026.
|
|
370
409
|
*/
|
|
371
|
-
function outputDebatePrompt(projectDir, guardData, scoreData, issues) {
|
|
410
|
+
function outputDebatePrompt(projectDir, guardData, scoreData, issues, agentMode = 'llm') {
|
|
372
411
|
const lines = [];
|
|
373
412
|
|
|
374
413
|
lines.push('═══════════════════════════════════════════════════════');
|
|
@@ -427,7 +466,8 @@ function outputDebatePrompt(projectDir, guardData, scoreData, issues) {
|
|
|
427
466
|
lines.push(' a. Which file to edit');
|
|
428
467
|
lines.push(' b. What section to add or modify');
|
|
429
468
|
lines.push(' c. What content to write (be specific, not vague)');
|
|
430
|
-
|
|
469
|
+
const verifyCmd = agentMode === 'llm' ? '/docguard.guard' : 'docguard guard';
|
|
470
|
+
lines.push(`4. After all fixes, verify with: ${verifyCmd}`);
|
|
431
471
|
lines.push(`5. Target score: ≥${Math.min(scoreData.score + 10, 100)}/100`);
|
|
432
472
|
lines.push('');
|
|
433
473
|
lines.push('═══════════════════════════════════════════════════════');
|
|
@@ -453,7 +453,7 @@ function generateDocPrompt(projectDir, config, docName) {
|
|
|
453
453
|
|
|
454
454
|
console.log(expectations.aiResearchInstructions.trim());
|
|
455
455
|
|
|
456
|
-
console.log(`\nVALIDATION: After writing, run \`npx docguard guard\` to verify the document passes all checks.`);
|
|
456
|
+
console.log(`\nVALIDATION: After writing, run \`npx docguard-cli guard\` to verify the document passes all checks.`);
|
|
457
457
|
console.log(`The document should have NO <!-- TODO --> or <!-- e.g. --> placeholders.`);
|
|
458
458
|
console.log(`Set the docguard:status header to 'active' (not 'draft').`);
|
|
459
459
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { c } from '../shared.mjs';
|
|
11
|
+
import { detectAgentMode, isSpecKitInitialized } from '../ensure-skills.mjs';
|
|
11
12
|
import { validateStructure, validateDocSections } from '../validators/structure.mjs';
|
|
12
13
|
import { validateDrift } from '../validators/drift.mjs';
|
|
13
14
|
import { validateChangelog } from '../validators/changelog.mjs';
|
|
@@ -197,7 +198,12 @@ export function runGuard(projectDir, config, flags) {
|
|
|
197
198
|
|
|
198
199
|
// Next step hint — always point to diagnose when issues exist
|
|
199
200
|
if (data.status !== 'PASS') {
|
|
200
|
-
|
|
201
|
+
const agentMode = detectAgentMode(projectDir);
|
|
202
|
+
if (agentMode === 'llm') {
|
|
203
|
+
console.log(` ${c.dim}Use ${c.cyan}/docguard.diagnose${c.dim} to get AI fix prompts.${c.reset}`);
|
|
204
|
+
} else {
|
|
205
|
+
console.log(` ${c.dim}Run ${c.cyan}docguard diagnose${c.dim} to get AI fix prompts.${c.reset}`);
|
|
206
|
+
}
|
|
201
207
|
}
|
|
202
208
|
|
|
203
209
|
// Badge snippet
|
|
@@ -206,6 +212,11 @@ export function runGuard(projectDir, config, flags) {
|
|
|
206
212
|
const badgeUrl = `https://img.shields.io/badge/CDD_Guard-${data.passed}%2F${data.total}_passed-${bColor}`;
|
|
207
213
|
console.log(`\n ${c.dim}📎 Badge: ${c.reset}`);
|
|
208
214
|
|
|
215
|
+
// Spec-kit reminder — persistent nudge if not initialized
|
|
216
|
+
if (!isSpecKitInitialized(projectDir)) {
|
|
217
|
+
console.log(`\n ${c.yellow}💡${c.reset} ${c.dim}Enhance DocGuard with Spec Kit: ${c.cyan}uv tool install specify-cli --from git+https://github.com/github/spec-kit.git${c.reset}`);
|
|
218
|
+
}
|
|
219
|
+
|
|
209
220
|
console.log('');
|
|
210
221
|
|
|
211
222
|
if (data.errors > 0) process.exit(1);
|
|
@@ -20,7 +20,7 @@ echo "🛡️ Running DocGuard guard..."
|
|
|
20
20
|
|
|
21
21
|
# Check if docguard is available
|
|
22
22
|
if command -v npx &> /dev/null; then
|
|
23
|
-
npx docguard guard
|
|
23
|
+
npx docguard-cli guard
|
|
24
24
|
EXIT_CODE=$?
|
|
25
25
|
elif command -v docguard &> /dev/null; then
|
|
26
26
|
docguard guard
|
|
@@ -60,7 +60,7 @@ echo "📊 Running DocGuard score check (minimum: $MIN_SCORE)..."
|
|
|
60
60
|
|
|
61
61
|
# Get score as JSON
|
|
62
62
|
if command -v npx &> /dev/null; then
|
|
63
|
-
RESULT=$(npx docguard score --format json 2>/dev/null)
|
|
63
|
+
RESULT=$(npx docguard-cli score --format json 2>/dev/null)
|
|
64
64
|
elif command -v docguard &> /dev/null; then
|
|
65
65
|
RESULT=$(docguard score --format json 2>/dev/null)
|
|
66
66
|
else
|