docguard-cli 0.11.1__tar.gz → 0.11.2__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.11.1/extensions/spec-kit-docguard → docguard_cli-0.11.2/.agent}/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.11.1/extensions/spec-kit-docguard → docguard_cli-0.11.2/.agent}/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.11.1/extensions/spec-kit-docguard → docguard_cli-0.11.2/.agent}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/docguard-sync/SKILL.md +1 -1
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/CHANGELOG.md +23 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/PKG-INFO +1 -1
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/diff.mjs +15 -17
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/guard.mjs +12 -2
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/docguard.mjs +2 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/ensure-skills.mjs +8 -1
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/shared-source.mjs +17 -6
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/docs-coverage.mjs +4 -1
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/environment.mjs +9 -3
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/extension.yml +1 -1
- {docguard_cli-0.11.1/.agent → docguard_cli-0.11.2/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.11.1/.agent → docguard_cli-0.11.2/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.11.1/.agent → docguard_cli-0.11.2/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +1 -1
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/package.json +1 -1
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/pyproject.toml +1 -1
- docguard_cli-0.11.2/tests/patch-0.11.2.test.mjs +103 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.analyze.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.checklist.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.clarify.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.constitution.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.implement.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.plan.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.specify.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.tasks.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/commands/speckit.taskstoissues.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-analyze/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-checklist/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-clarify/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-constitution/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-implement/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-plan/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-specify/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-tasks/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.docguard.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.docguardignore +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/dependabot.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/scripts/patch-catalog.py +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/ci.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/release.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/supply-chain.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.github/workflows/sync-speckit-catalog.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.gitignore +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.jules/bolt.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.jules/palette.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.jules/sentinel.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.npmignore +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.npmrc +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-metadata.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/init-options.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/memory/constitution.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/common.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/setup-plan.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/agent-file-template.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/checklist-template.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/constitution-template.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/plan-template.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/spec-template.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/templates/tasks-template.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/AGENTS.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/CODE_OF_CONDUCT.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/COMPARISONS.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/CONTRIBUTING.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/DRIFT-LOG.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/LICENSE +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/PHILOSOPHY.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/README.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/ROADMAP.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/SECURITY.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/STANDARD.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/SUPPLY-CHAIN-AUDIT.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/SUPPORT.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/action.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/agents.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/badge.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/ci.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/diagnose.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/fix.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/generate.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/hooks.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/init.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/llms.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/publish.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/score.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/setup.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/sync.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/trace.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/commands/watch.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/api-doc.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/cdk.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/doc-tools.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/frontend.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/iac.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/integrations.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/memory-plan.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/project-type.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/routes.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/schemas.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/scanners/speckit.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/shared-ignore.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/shared.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/api-surface.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/architecture.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/changelog.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/doc-quality.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/docs-diff.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/docs-sync.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/drift.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/freshness.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/metadata-sync.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/metrics-consistency.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/schema-sync.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/security.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/structure.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/test-spec.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/todo-tracking.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/validators/traceability.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/writers/api-reference.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/writers/mechanical.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/cli/writers/sections.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.fix.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.guard.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.review.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/commands/docguard.score.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/fastify.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/generic.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/nextjs.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/configs/python.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docguard_cli/__init__.py +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docguard_cli/wrapper.py +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/ai-integration.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/commands.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/configuration.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/doc-sections.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/faq.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/installation.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/profiles.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs/quickstart.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/01-express-api/README.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/01-express-api/package.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/01-express-api/server.js +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/README.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/app.py +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/02-python-flask/requirements.txt +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/README.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/package.json +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/src/index.js +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/examples/README.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/LICENSE +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/README.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/fix.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/generate.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/guard.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/init.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/score.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/sync.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/commands/trace.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/pr_description.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/001-fix-ignore-validators/plan.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/001-fix-ignore-validators/spec.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/001-fix-ignore-validators/tasks.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/002-fix-test-discovery/plan.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/002-fix-test-discovery/spec.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/002-fix-test-discovery/tasks.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/003-v011-false-positives/plan.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/003-v011-false-positives/spec.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/specs/003-v011-false-positives/tasks.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ADR.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/AGENTS.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ARCHITECTURE.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/CHANGELOG.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/CURRENT-STATE.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/DATA-MODEL.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/DEPLOYMENT.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/DRIFT-LOG.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ENVIRONMENT.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/KNOWN-GOTCHAS.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/REQUIREMENTS.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ROADMAP.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/RUNBOOKS.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/SECURITY.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/TEST-SPEC.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/TROUBLESHOOTING.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/VENDOR-BUGS.md.template +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/ci/github-actions.yml +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.fix.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.guard.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.init.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.review.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/templates/commands/docguard.update.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/test-draft.js +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/test-metrics.js +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/api-doc.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/api-surface.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/api-write.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/architecture.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/backup-failure.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/cdk-detection.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/changelog.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/commands.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/doc-quality.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/docs-coverage.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/docs-diff.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/docs-sync.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/drift.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/environment.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/freshness.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/frontend-deep.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/frontend.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/guard-classify.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/hooks.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/i18n.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/integrations.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/mechanical.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/memory-plan.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/metadata-sync.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/metrics-consistency.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/monorepo-scanning.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/multi-spec.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/project-type.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/routes-multilang.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/schema-sync.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/schemas-multilang.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/schemas.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/sections.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/security.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/shared-source.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/structure.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/sync.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/test-spec.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/todo-tracking.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/tests/traceability.test.mjs +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/vscode-extension/.vscodeignore +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/vscode-extension/README.md +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/vscode-extension/extension.js +0 -0
- {docguard_cli-0.11.1 → docguard_cli-0.11.2}/vscode-extension/package.json +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.11.
|
|
9
|
+
version: 0.11.2
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.11.
|
|
12
|
+
<!-- docguard:version: 0.11.2 -->
|
|
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.11.
|
|
10
|
+
version: 0.11.2
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.11.
|
|
13
|
+
<!-- docguard:version: 0.11.2 -->
|
|
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.11.
|
|
9
|
+
version: 0.11.2
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.11.
|
|
12
|
+
<!-- docguard:version: 0.11.2 -->
|
|
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.11.
|
|
9
|
+
version: 0.11.2
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.11.
|
|
12
|
+
<!-- docguard:version: 0.11.2 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Score Skill
|
|
15
15
|
|
|
@@ -4,7 +4,7 @@ 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.11.
|
|
7
|
+
version: 0.11.2
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.11.2] - 2026-05-25
|
|
11
|
+
|
|
12
|
+
Patch release addressing the four bugs (B-1..B-4) reported from the v0.11.1 audit of `wu-whatsappinbox` (score 98/100, 572/575 passed, 1 warning), plus Antigravity/Kiro/Windsurf agent-routing aliases and a Docs-Coverage silent-fail fix that the new B-4 nudge itself exposed.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- **B-1: Vite intrinsics no longer reported as user env vars.** `grepEnvUsage` in `cli/shared-source.mjs` now skips `DEV`, `PROD`, `MODE`, `BASE_URL`, and `SSR` on `import.meta.env.*` — these are injected by Vite at build time, not user-configured. Real user vars like `VITE_API_URL` are still captured. (Reported by wu-whatsappinbox v0.11.1 audit.)
|
|
16
|
+
- **B-2: `docguard diff` Data Entities now uses real exported names, not file basenames.** Previously the entity diff walked filenames and reported the stem (e.g. `models.py` → "models"), missing all the actual classes inside. Now uses `scanSchemasDeep` — the same code-side scanner the rest of DocGuard uses — which extracts real Pydantic/Dataclass/Mongoose/Prisma/Zod/Sequelize/Sqlx/SQLAlchemy/JPA entity names. (Reported by wu-whatsappinbox v0.11.1 audit.)
|
|
17
|
+
- **B-3: Literal `` `VITE_` `` prefix in prose no longer captured as an env var name.** Tightened the env-var name regex across `shared-source.mjs`, `validators/environment.mjs`, and `commands/diff.mjs` from `[A-Z][A-Z0-9_]*` to `[A-Z][A-Z0-9_]*[A-Z0-9]` (must end with letter/digit, not underscore). Documentation like ``All vars start with `VITE_` (Vite convention)`` no longer triggers a "missing `VITE_`" warning. (Reported by wu-whatsappinbox v0.11.1 audit.)
|
|
18
|
+
- **B-4 nudge surfaced: Docs-Coverage Check 5 (`checkReadmeSections`) silent-fail fixed.** The "recommended sections" loop bumped `total` without emitting a message when missing — exactly the anti-pattern B-4 flags. Recommended sections are now a true bonus: present = +1 to both passed/total, missing = no-op. Restores honest scoring on the README checker. (Found by the B-4 nudge running on the wu-whatsappinbox fixture.)
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- **B-4: `--show-failing` flag and validator-bug nudge.** `docguard guard --show-failing` shows warnings/errors for every non-passing validator even if the overall status would have suppressed them. New nudge fires when a validator has `passed < total` but emits no warning or error messages — points at a likely silent-fail validator bug for the user to file an issue. (Reported by wu-whatsappinbox v0.11.1 audit.)
|
|
22
|
+
- **Antigravity / Kiro / Windsurf / GEMINI agent signals.** `cli/ensure-skills.mjs` now detects these agent ecosystems via additional signal files (`.agents`, `.antigravity`, `ANTIGRAVITY.md`, `.kiro`, `.windsurf`, `GEMINI.md`) so the right skills are installed for each. Antigravity was already wired via `.agents → agy`; this expands the alias surface so neither side-by-side IDEs nor Spec Kit's `.agents` convention break detection.
|
|
23
|
+
|
|
24
|
+
### Internal
|
|
25
|
+
- New test file: `tests/patch-0.11.2.test.mjs` with regression coverage for B-1 (Vite intrinsics skip), B-2 (Pydantic class names, not file basename), and B-3 (literal `VITE_` not captured). **Total: 339 tests passing (was 336, +3 new).**
|
|
26
|
+
- No new NPM dependencies. Zero schema or config-file changes. Bumped `pyproject.toml` from `0.11.0 → 0.11.2` to re-sync the PyPI publish (the previous patch released to npm but skipped PyPI version bump).
|
|
27
|
+
|
|
28
|
+
### Out of scope (deferred to v0.12)
|
|
29
|
+
- S-1 (`sync --since` surgical refresh), S-2 (sweep-needed nudge from freshness counters), S-3 (`trace --reverse` code→doc map), S-4 (rename detection via `git log --follow`), S-5 (`.docguardignore` template at init), S-6 (per-validator severity in `.docguard.json`), S-7 (generated-doc-in-draft staleness validator), S-8 (cross-reference validator for broken `§X` anchors), S-9 (pre-commit lite on changed files only), S-10 (`.docguard/fixed.json` memory of past fixes).
|
|
30
|
+
|
|
31
|
+
Credit: feedback from running v0.11.1 on the `wu-whatsappinbox` enterprise monorepo (audit score 98/100, 572/575 passed).
|
|
32
|
+
|
|
10
33
|
## [0.11.1] - 2026-05-25
|
|
11
34
|
|
|
12
35
|
Patch release addressing false positives surfaced by the v0.11.0 audit of the `wu-whatsappinbox` enterprise monorepo, generalized into a multi-tool IaC detector, plus several DocGuard self-audit improvements. Spec: `specs/003-v011-false-positives/`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docguard-cli
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.2
|
|
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
|
|
@@ -10,6 +10,8 @@ import { collectPackageJsons, detectDocker, grepEnvUsage, resolveSourceRoots } f
|
|
|
10
10
|
import { parseApiReferenceDoc, compareEndpoints } from '../scanners/api-doc.mjs';
|
|
11
11
|
import { resolveApiSurface } from '../validators/api-surface.mjs';
|
|
12
12
|
import { collectCodeTests } from '../validators/docs-diff.mjs';
|
|
13
|
+
import { scanSchemasDeep } from '../scanners/schemas.mjs';
|
|
14
|
+
import { detectDocTools } from '../scanners/doc-tools.mjs';
|
|
13
15
|
|
|
14
16
|
const IGNORE_DIRS = new Set([
|
|
15
17
|
'node_modules', '.git', '.next', 'dist', 'build',
|
|
@@ -163,22 +165,17 @@ function diffEntities(dir, config = {}) {
|
|
|
163
165
|
docEntities.add(name.toLowerCase());
|
|
164
166
|
}
|
|
165
167
|
|
|
166
|
-
//
|
|
168
|
+
// Use the REAL exported entity names from scanSchemasDeep, not file basenames
|
|
169
|
+
// (a file `dynamoModels.ts` exports `User`/`Order`/etc. — its basename is not
|
|
170
|
+
// an entity). scanSchemasDeep covers JS ORMs, SQLAlchemy/Pydantic, Diesel,
|
|
171
|
+
// Go structs, JPA, Rails, and OpenAPI schemas.
|
|
172
|
+
const docTools = detectDocTools(dir);
|
|
173
|
+
const schemas = scanSchemasDeep(dir, {}, docTools);
|
|
167
174
|
const codeEntities = new Set();
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const modelDir = join(root, sub);
|
|
173
|
-
if (!existsSync(modelDir)) continue;
|
|
174
|
-
const files = getFilesRecursive(modelDir);
|
|
175
|
-
for (const f of files) {
|
|
176
|
-
const name = basename(f, extname(f)).toLowerCase();
|
|
177
|
-
// Skip non-entity infrastructure/aggregation filenames.
|
|
178
|
-
if (CODE_ENTITY_NOISE.has(name)) continue;
|
|
179
|
-
codeEntities.add(name);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
175
|
+
for (const e of (schemas.entities || [])) {
|
|
176
|
+
const n = String(e.name || '').toLowerCase();
|
|
177
|
+
if (!n || CODE_ENTITY_NOISE.has(n)) continue;
|
|
178
|
+
codeEntities.add(n);
|
|
182
179
|
}
|
|
183
180
|
|
|
184
181
|
// No code-side entity source (e.g. DynamoDB single-table design with no model
|
|
@@ -207,7 +204,8 @@ function diffEnvVars(dir, config = {}) {
|
|
|
207
204
|
|
|
208
205
|
// Extract env var names from ENVIRONMENT.md
|
|
209
206
|
const docVars = new Set();
|
|
210
|
-
|
|
207
|
+
// Reject names ending in `_` (e.g. the literal prefix `VITE_` in prose).
|
|
208
|
+
const varRegex = /`([A-Z][A-Z0-9_]*[A-Z0-9])`/g;
|
|
211
209
|
let match;
|
|
212
210
|
while ((match = varRegex.exec(content)) !== null) {
|
|
213
211
|
docVars.add(match[1]);
|
|
@@ -220,7 +218,7 @@ function diffEnvVars(dir, config = {}) {
|
|
|
220
218
|
const envExamplePath = resolve(dir, envFile);
|
|
221
219
|
if (existsSync(envExamplePath)) {
|
|
222
220
|
const envContent = readFileSync(envExamplePath, 'utf-8');
|
|
223
|
-
const envRegex = /^([A-Z][A-Z0-9_]
|
|
221
|
+
const envRegex = /^([A-Z][A-Z0-9_]*[A-Z0-9])\s*=/gm;
|
|
224
222
|
while ((match = envRegex.exec(envContent)) !== null) {
|
|
225
223
|
codeVars.add(match[1]);
|
|
226
224
|
}
|
|
@@ -194,16 +194,26 @@ export function runGuard(projectDir, config, flags) {
|
|
|
194
194
|
console.log(` ${c.yellow}⚠️ ${v.name}${c.reset} ${qBadge}${c.dim} ${v.passed}/${v.total} checks passed${c.reset}`);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
// --show-failing forces enumeration of every error/warning regardless of
|
|
198
|
+
// overall validator status — useful when a validator passes overall
|
|
199
|
+
// (passed < total) without surfacing the specific failing checks.
|
|
200
|
+
const show = flags.verbose || flags.showFailing;
|
|
201
|
+
if (show || v.status === 'fail') {
|
|
198
202
|
for (const err of v.errors) {
|
|
199
203
|
console.log(` ${c.red}✗ ${err}${c.reset}`);
|
|
200
204
|
}
|
|
201
205
|
}
|
|
202
|
-
if (
|
|
206
|
+
if (show || v.status === 'warn') {
|
|
203
207
|
for (const warn of v.warnings) {
|
|
204
208
|
console.log(` ${c.yellow}⚠ ${warn}${c.reset}`);
|
|
205
209
|
}
|
|
206
210
|
}
|
|
211
|
+
// If a validator reports passed < total but has no errors/warnings, surface
|
|
212
|
+
// the gap honestly so users aren't left wondering where the deficit went.
|
|
213
|
+
if (v.status === 'pass' && v.total > v.passed && v.errors.length === 0 && v.warnings.length === 0) {
|
|
214
|
+
const gap = v.total - v.passed;
|
|
215
|
+
console.log(` ${c.yellow}⚠ ${gap} check(s) did not pass but emitted no message — likely a validator bug. Please file an issue.${c.reset}`);
|
|
216
|
+
}
|
|
207
217
|
}
|
|
208
218
|
|
|
209
219
|
// Summary
|
|
@@ -365,6 +365,8 @@ async function main() {
|
|
|
365
365
|
} else if (args[i] === '--since' && args[i + 1]) {
|
|
366
366
|
flags.since = args[i + 1];
|
|
367
367
|
i++;
|
|
368
|
+
} else if (args[i] === '--show-failing') {
|
|
369
|
+
flags.showFailing = true;
|
|
368
370
|
} else if (args[i] === '--doc' && args[i + 1]) {
|
|
369
371
|
flags.doc = args[i + 1];
|
|
370
372
|
i++;
|
|
@@ -54,8 +54,13 @@ export function detectAgentMode(projectDir) {
|
|
|
54
54
|
'.specify',
|
|
55
55
|
'.github/copilot-instructions.md',
|
|
56
56
|
'CLAUDE.md',
|
|
57
|
+
'GEMINI.md',
|
|
57
58
|
'.gemini',
|
|
58
59
|
'.agents',
|
|
60
|
+
'.antigravity',
|
|
61
|
+
'ANTIGRAVITY.md',
|
|
62
|
+
'.kiro',
|
|
63
|
+
'.windsurf',
|
|
59
64
|
];
|
|
60
65
|
|
|
61
66
|
for (const signal of llmSignals) {
|
|
@@ -105,7 +110,9 @@ export function detectAIAgent(projectDir) {
|
|
|
105
110
|
{ signal: '.claude', agent: 'claude' },
|
|
106
111
|
{ signal: 'CLAUDE.md', agent: 'claude' },
|
|
107
112
|
{ signal: '.gemini', agent: 'gemini' },
|
|
108
|
-
{ signal: '.agents', agent: 'agy' }, // Antigravity
|
|
113
|
+
{ signal: '.agents', agent: 'agy' }, // Antigravity (Spec Kit convention)
|
|
114
|
+
{ signal: '.antigravity', agent: 'agy' }, // Antigravity (alt convention)
|
|
115
|
+
{ signal: 'ANTIGRAVITY.md', agent: 'agy' }, // Antigravity rules file
|
|
109
116
|
{ signal: '.github/copilot-instructions.md', agent: 'copilot' },
|
|
110
117
|
{ signal: '.windsurf', agent: 'windsurf' },
|
|
111
118
|
{ signal: '.codex', agent: 'codex' },
|
|
@@ -210,11 +210,16 @@ export function grepEnvUsage(projectDir, config = {}) {
|
|
|
210
210
|
const roots = resolveSourceRoots(projectDir, config);
|
|
211
211
|
const seen = new Set();
|
|
212
212
|
|
|
213
|
+
// Require names to start with a letter and END with a letter/digit (NOT an
|
|
214
|
+
// underscore) — fixes "VITE_" being captured as a literal env var name.
|
|
215
|
+
const NAME = '([A-Z][A-Z0-9_]*[A-Z0-9])';
|
|
213
216
|
const patterns = [
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
+
new RegExp(`process\\.env\\.${NAME}`, 'g'),
|
|
218
|
+
new RegExp(`process\\.env\\[\\s*['"]${NAME}['"]\\s*\\]`, 'g'),
|
|
219
|
+
new RegExp(`import\\.meta\\.env\\.${NAME}`, 'g'),
|
|
217
220
|
];
|
|
221
|
+
// Vite injects these at build time; they are not user-set env vars.
|
|
222
|
+
const VITE_INTRINSICS = new Set(['DEV', 'PROD', 'MODE', 'BASE_URL', 'SSR']);
|
|
218
223
|
|
|
219
224
|
const visit = (filePath) => {
|
|
220
225
|
if (seen.has(filePath)) return;
|
|
@@ -225,10 +230,16 @@ export function grepEnvUsage(projectDir, config = {}) {
|
|
|
225
230
|
let content;
|
|
226
231
|
try { content = readFileSync(filePath, 'utf-8'); } catch { return; }
|
|
227
232
|
if (!content.includes('env')) return;
|
|
228
|
-
|
|
233
|
+
// patterns[2] is the import.meta.env one — its matches are Vite-injected
|
|
234
|
+
// when the name is an intrinsic, and must not be reported as user env vars.
|
|
235
|
+
for (let i = 0; i < patterns.length; i++) {
|
|
229
236
|
let m;
|
|
230
|
-
const rx = new RegExp(
|
|
231
|
-
|
|
237
|
+
const rx = new RegExp(patterns[i].source, 'g');
|
|
238
|
+
const isViteSource = i === 2;
|
|
239
|
+
while ((m = rx.exec(content)) !== null) {
|
|
240
|
+
if (isViteSource && VITE_INTRINSICS.has(m[1])) continue;
|
|
241
|
+
names.add(m[1]);
|
|
242
|
+
}
|
|
232
243
|
}
|
|
233
244
|
};
|
|
234
245
|
|
|
@@ -422,9 +422,12 @@ function checkReadmeSections(projectDir) {
|
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
424
|
|
|
425
|
+
// Recommended sections are a BONUS — present = +1 to both passed and total,
|
|
426
|
+
// missing = no-op. Counting missing recommended toward `total` without a
|
|
427
|
+
// corresponding warning would be a silent fail (caught by B-4 nudge).
|
|
425
428
|
for (const section of recommendedSections) {
|
|
426
|
-
total++;
|
|
427
429
|
if (section.patterns.some(p => lowerContent.includes(p))) {
|
|
430
|
+
total++;
|
|
428
431
|
passed++;
|
|
429
432
|
}
|
|
430
433
|
}
|
|
@@ -41,13 +41,19 @@ export function validateEnvironment(projectDir, config) {
|
|
|
41
41
|
// CLI/library projects that declare no env vars skip this.)
|
|
42
42
|
if (ptc.needsEnvVars !== false) {
|
|
43
43
|
const documented = new Set();
|
|
44
|
-
|
|
44
|
+
// Require the matched name to end with a letter/digit — prevents prose-only
|
|
45
|
+
// tokens like `VITE_` (the convention prefix) from being treated as a real
|
|
46
|
+
// variable name.
|
|
47
|
+
const varRe = /`([A-Z][A-Z0-9_]*[A-Z0-9])`/g;
|
|
45
48
|
let m;
|
|
46
|
-
while ((m = varRe.exec(content)) !== null)
|
|
49
|
+
while ((m = varRe.exec(content)) !== null) {
|
|
50
|
+
if (m[1].length < 3) continue; // 'OK' / 'ID' etc. are too short to be env var refs
|
|
51
|
+
documented.add(m[1]);
|
|
52
|
+
}
|
|
47
53
|
for (const envFile of ['.env.example', '.env.template']) {
|
|
48
54
|
const p = resolve(projectDir, envFile);
|
|
49
55
|
if (!existsSync(p)) continue;
|
|
50
|
-
const re = /^([A-Z][A-Z0-9_]
|
|
56
|
+
const re = /^([A-Z][A-Z0-9_]*[A-Z0-9])\s*=/gm;
|
|
51
57
|
const ex = readFileSync(p, 'utf-8');
|
|
52
58
|
let em;
|
|
53
59
|
while ((em = re.exec(ex)) !== null) documented.add(em[1]);
|
|
@@ -3,7 +3,7 @@ schema_version: "1.0"
|
|
|
3
3
|
extension:
|
|
4
4
|
id: "docguard"
|
|
5
5
|
name: "DocGuard — CDD Enforcement"
|
|
6
|
-
version: "0.11.
|
|
6
|
+
version: "0.11.2"
|
|
7
7
|
description: "Canonical-Driven Development enforcement as a true spec-kit extension. LLM-first design with 19 automated validators, 4 AI behavior skills, spec-kit skill chaining, and workflow hooks. Zero NPM runtime dependencies."
|
|
8
8
|
author: "Ricardo Accioly"
|
|
9
9
|
repository: "https://github.com/raccioly/docguard"
|
|
@@ -6,10 +6,10 @@ description: AI-driven documentation repair with structured research workflow, t
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.11.
|
|
9
|
+
version: 0.11.2
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.11.
|
|
12
|
+
<!-- docguard:version: 0.11.2 -->
|
|
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.11.
|
|
10
|
+
version: 0.11.2
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.11.
|
|
13
|
+
<!-- docguard:version: 0.11.2 -->
|
|
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.11.
|
|
9
|
+
version: 0.11.2
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.11.
|
|
12
|
+
<!-- docguard:version: 0.11.2 -->
|
|
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.11.
|
|
9
|
+
version: 0.11.2
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.11.
|
|
12
|
+
<!-- docguard:version: 0.11.2 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Score Skill
|
|
15
15
|
|
|
@@ -4,7 +4,7 @@ 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.11.
|
|
7
|
+
version: 0.11.2
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "docguard-cli"
|
|
7
|
-
version = "0.11.
|
|
7
|
+
version = "0.11.2"
|
|
8
8
|
description = "The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. Zero dependencies."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.11.2 patch coverage — locks in the bug fixes from the wu-whatsappinbox feedback.
|
|
3
|
+
*
|
|
4
|
+
* B-1: Vite intrinsics (DEV/PROD/MODE/BASE_URL/SSR) on `import.meta.env.*`
|
|
5
|
+
* must NOT be reported as user env vars.
|
|
6
|
+
* B-2: diff Data Entities uses real exported names (not file basenames).
|
|
7
|
+
* B-3: literal env-var-prefix tokens like `VITE_` must not be captured.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
11
|
+
import { strict as assert } from 'node:assert';
|
|
12
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { tmpdir } from 'node:os';
|
|
15
|
+
|
|
16
|
+
import { grepEnvUsage } from '../cli/shared-source.mjs';
|
|
17
|
+
import { validateEnvironment } from '../cli/validators/environment.mjs';
|
|
18
|
+
|
|
19
|
+
function make(files) {
|
|
20
|
+
const dir = mkdtempSync(join(tmpdir(), 'docguard-patch-'));
|
|
21
|
+
for (const [rel, content] of Object.entries(files)) {
|
|
22
|
+
const full = join(dir, rel);
|
|
23
|
+
mkdirSync(join(full, '..'), { recursive: true });
|
|
24
|
+
writeFileSync(full, content);
|
|
25
|
+
}
|
|
26
|
+
return dir;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe('v0.11.2 — bug fixes from wu-whatsappinbox feedback', () => {
|
|
30
|
+
let dir;
|
|
31
|
+
afterEach(() => { if (dir) rmSync(dir, { recursive: true, force: true }); });
|
|
32
|
+
|
|
33
|
+
it('B-1: skips Vite intrinsics on import.meta.env (DEV / PROD / MODE / BASE_URL / SSR)', () => {
|
|
34
|
+
dir = make({
|
|
35
|
+
'package.json': JSON.stringify({ dependencies: { vite: '^7', react: '^19' } }),
|
|
36
|
+
'src/config.ts': `
|
|
37
|
+
const dev = import.meta.env.DEV;
|
|
38
|
+
const prod = import.meta.env.PROD;
|
|
39
|
+
const mode = import.meta.env.MODE;
|
|
40
|
+
const base = import.meta.env.BASE_URL;
|
|
41
|
+
const ssr = import.meta.env.SSR;
|
|
42
|
+
const apiUrl = import.meta.env.VITE_API_URL; // user-set → keep
|
|
43
|
+
const dynaTable = process.env.DYNAMO_TABLE_NAME; // user-set → keep
|
|
44
|
+
`,
|
|
45
|
+
});
|
|
46
|
+
const names = grepEnvUsage(dir, { sourceRoot: 'src' });
|
|
47
|
+
for (const intrinsic of ['DEV', 'PROD', 'MODE', 'BASE_URL', 'SSR']) {
|
|
48
|
+
assert.ok(!names.has(intrinsic), `${intrinsic} must not be reported`);
|
|
49
|
+
}
|
|
50
|
+
assert.ok(names.has('VITE_API_URL'), 'real user env var still captured');
|
|
51
|
+
assert.ok(names.has('DYNAMO_TABLE_NAME'));
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('B-3: literal `VITE_` (convention prefix in prose) is NOT captured as a var name', () => {
|
|
55
|
+
// process.env.VITE_ is syntactically illegal in real code, so test the env-doc
|
|
56
|
+
// parser which the user actually saw flag `VITE_` from prose `` `VITE_` ``.
|
|
57
|
+
dir = make({
|
|
58
|
+
'package.json': JSON.stringify({ dependencies: { vite: '^7' } }),
|
|
59
|
+
'docs-canonical/ENVIRONMENT.md': [
|
|
60
|
+
'# Environment',
|
|
61
|
+
'## Prerequisites',
|
|
62
|
+
'## Environment Variables',
|
|
63
|
+
'All frontend variables MUST start with `VITE_` (Vite convention).',
|
|
64
|
+
'The backend reads `DYNAMO_TABLE_NAME` from the environment.',
|
|
65
|
+
].join('\n'),
|
|
66
|
+
});
|
|
67
|
+
const result = validateEnvironment(dir, { projectTypeConfig: { needsEnvVars: true } });
|
|
68
|
+
// Only the real var should be tracked; the `VITE_` literal prefix must be ignored.
|
|
69
|
+
// The validator's warning text would mention it by name — assert it does NOT.
|
|
70
|
+
assert.ok(!result.warnings.some(w => /\bVITE_\b/.test(w)),
|
|
71
|
+
'VITE_ prefix should never appear as a flagged variable name');
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('B-2: diff Data Entities uses real exported names (Pydantic), not file basenames', async () => {
|
|
75
|
+
// Construct a project whose model FILE is named in a way that would mislead
|
|
76
|
+
// the old filename-stem heuristic. Pydantic class names inside the file are
|
|
77
|
+
// the real entities.
|
|
78
|
+
dir = make({
|
|
79
|
+
'package.json': JSON.stringify({ name: 'svc' }),
|
|
80
|
+
'pyproject.toml': '[project]\nname="svc"\ndependencies = ["pydantic"]\n',
|
|
81
|
+
// Misleading filename: "models.py" basename would naively read "models".
|
|
82
|
+
'api/models.py': `
|
|
83
|
+
from pydantic import BaseModel
|
|
84
|
+
|
|
85
|
+
class User(BaseModel):
|
|
86
|
+
id: int
|
|
87
|
+
email: str
|
|
88
|
+
|
|
89
|
+
class Order(BaseModel):
|
|
90
|
+
id: int
|
|
91
|
+
user_id: int
|
|
92
|
+
`,
|
|
93
|
+
'docs-canonical/DATA-MODEL.md': '# Data Model\n### User\n### Order\n',
|
|
94
|
+
});
|
|
95
|
+
// Drive the same code-side scan diff.mjs uses (scanSchemasDeep).
|
|
96
|
+
const { scanSchemasDeep } = await import('../cli/scanners/schemas.mjs');
|
|
97
|
+
const r = scanSchemasDeep(dir, {}, { openapi: { found: false } });
|
|
98
|
+
const names = r.entities.map(e => e.name).sort();
|
|
99
|
+
assert.ok(names.includes('User'));
|
|
100
|
+
assert.ok(names.includes('Order'));
|
|
101
|
+
assert.ok(!names.includes('models'), 'file basename must NOT be reported as an entity');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-ebf165086500aab1.json
RENAMED
|
File without changes
|
{docguard_cli-0.11.1 → docguard_cli-0.11.2}/.specify/extensions/.cache/catalog-metadata.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|