docguard-cli 0.41.6__tar.gz → 0.41.7__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.41.6 → docguard_cli-0.41.7}/.agent/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.41.6/extensions/spec-kit-docguard → docguard_cli-0.41.7/.agent}/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.41.6/extensions/spec-kit-docguard → docguard_cli-0.41.7/.agent}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.41.6/extensions/spec-kit-docguard → docguard_cli-0.41.7/.agent}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/docguard-sync/SKILL.md +2 -2
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CHANGELOG.md +44 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/PKG-INFO +1 -1
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/init.mjs +83 -1
- docguard_cli-0.41.7/cli/shared-doc-roles.mjs +246 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/test-spec.mjs +14 -4
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/todo-tracking.mjs +16 -6
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/extension.yml +1 -1
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.41.6/.agent → docguard_cli-0.41.7/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.41.6/.agent → docguard_cli-0.41.7/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.41.6/.agent → docguard_cli-0.41.7/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +1 -1
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +1 -1
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/package-lock.json +2 -2
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/package.json +1 -1
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/pyproject.toml +1 -1
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/server.json +2 -2
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ci/github-actions.yml +1 -1
- docguard_cli-0.41.7/tests/canonical-layout-detection.test.mjs +93 -0
- docguard_cli-0.41.7/tests/doc-name-detection.test.mjs +87 -0
- docguard_cli-0.41.6/cli/shared-doc-roles.mjs +0 -102
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/architect.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.fix.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.guard.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.review.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/docguard.score.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.analyze.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.checklist.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.clarify.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.constitution.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.implement.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.plan.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.specify.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.tasks.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/commands/speckit.taskstoissues.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-analyze/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-checklist/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-clarify/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-constitution/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-implement/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-plan/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-specify/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-tasks/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.claude/rules/openwolf.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.claude/settings.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguard-archive.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguard-specs.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguard.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.docguardignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/dependabot.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/speckit-submission.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/sync-release-version.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/upsert-catalog-reminder.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/scripts/validate-release-candidate.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/auto-merge.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/ci.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/jules-triage.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/release.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/scheduled-release.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/supply-chain.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.github/workflows/sync-speckit-catalog.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.gitignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules/bolt.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules/palette.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules/sentinel.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.jules-setup.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.npmignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.npmrc +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.pre-commit-hooks.yaml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog-metadata.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/extensions/.cache/catalog.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/init-options.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/memory/constitution.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/common.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/setup-plan.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/agent-file-template.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/checklist-template.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/constitution-template.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/plan-template.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/spec-template.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/.specify/templates/tasks-template.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/AGENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CLAUDE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CODE_OF_CONDUCT.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/COMPARISONS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/CONTRIBUTING.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/DRIFT-LOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/Dockerfile +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/LICENSE +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/PHILOSOPHY.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/PRIVACY.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/README.es.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/README.pt-BR.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/ROADMAP.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/SECURITY.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/STANDARD.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/SUPPLY-CHAIN-AUDIT.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/SUPPORT.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/VALIDATION.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/action.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/bin/docguard +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/demo.gif +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/demo.tape +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/assets/docguard-logo.png +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/.docguard-specs.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/.docguard.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/AGENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/CHANGELOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/DRIFT-LOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/docs-canonical/REQUIREMENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/specs/001-retired-timeout/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/specs/002-timeout-options/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/src/options.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/option-migration/tests/options.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/.docguard-specs.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/.docguard.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/AGENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/CHANGELOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/DRIFT-LOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/config_loader.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/pyproject.toml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/specs/001-safe-config/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/python-config/tests/test_config_loader.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/.docguard-specs.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/.docguard.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/AGENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/CHANGELOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/DRIFT-LOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/docs-canonical/REQUIREMENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/specs/001-status-aliases/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/src/status.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/fixtures/status-alias/tests/status.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/hidden/option-migration/evaluate.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/hidden/python-config/evaluate.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/hidden/status-alias/evaluate.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/manifest.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/reference/option-migration/options.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/reference/python-config/config_loader.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/reference/status-alias/status.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/results/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/results/observed-v1.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/agent-context/run.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/baseline.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/corpus.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/.docguardignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/.gitignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/generated-security-control/src/generated-client/config.js +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/go-todo-control/ROADMAP.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/go-todo-control/app.go +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/go-todo-control/go.mod +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/js-security-control/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/js-security-control/src/config.js +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/.gitignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/packages/auth/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/monorepo-security-control/packages/auth/src/config.ts +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-security-control/.gitignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-security-control/app.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-security-control/pyproject.toml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-unsupported/app.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/python-unsupported/pyproject.toml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/sparse-doc-control/DRIFT-LOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/sparse-doc-control/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/sparse-doc-control/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/ts-security-control/.gitignore +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/ts-security-control/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/fixtures/ts-security-control/src/config.ts +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/compare.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/manifest.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/metrics.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/lib/runner.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/benchmarks/run.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/assessment.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/agent.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/agents.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/badge.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/ci.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/demo.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/diagnose.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/diff.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/explain.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/feedback.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/fix.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/generate.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/guard.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/hooks.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/impact.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/llms.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/mcp.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/memory.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/publish.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/reconcile.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/report.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/retire.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/score.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/setup.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/specs.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/sync-tests.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/sync.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/trace.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/upgrade.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/verify.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/commands/watch.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/config.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/docguard.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/ensure-skills.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/adapters.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/evaluate.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/manifest.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/markdown.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/evidence/python-literal.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/feedback-fixture.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/findings.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/release-pr-policy.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/repository-root.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/agent-readability.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/api-doc.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/cdk.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/doc-tools.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/document-lifecycle.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/frontend.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/iac.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/instruction-audit.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/integrations.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/inventory.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/js-ast.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/lifecycle-context.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/memory-plan.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/project-type.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/py-ast.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/reconciliation.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/requirement-evidence.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/retirement-manifest.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/routes.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/schemas.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/semantic-claims.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/spec-registry.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/speckit.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/scanners/task-context.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-diff.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-git.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-ignore.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-ir.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-requirements.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-source.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-sync-scope.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-trace-patterns.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared-validator-surface.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/shared.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validator-coverage.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validator-markers.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/api-doc-smells.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/api-surface.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/architecture.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/canonical-sync.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/changelog.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/cross-reference.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/diff-suspicion.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/doc-quality.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/docs-coverage.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/docs-diff.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/docs-sync.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/document-lifecycle.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/drift.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/environment.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/evidence.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/freshness.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/generated-staleness.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/metadata-sync.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/metrics-consistency.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/reference-existence.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/schema-sync.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/security.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/spec-kit.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/spec-registry.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/structure.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/surface-sync.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/validators/traceability.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/api-reference.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/baseline.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/doc-generators.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/file-transaction.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/fix-memory.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/generate-io.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/history.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/junit.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/mechanical.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/sarif.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/sections.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/cli/writers/spec-outcomes.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.fix.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.guard.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.review.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/commands/docguard.score.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/fastify.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/generic.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/nextjs.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/configs/python.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docguard_cli/__init__.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docguard_cli/wrapper.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/ai-integration.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/commands.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/configuration.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/doc-sections.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/faq.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/installation.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/profiles.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs/quickstart.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/CI-RECIPES.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/REQUIREMENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/01-express-api/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/01-express-api/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/01-express-api/server.js +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/app.py +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/02-python-flask/requirements.txt +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/src/index.js +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/tasks.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/examples/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/LICENSE +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/brief.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/complete.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/fix.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/generate.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/guard.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/init.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/preflight.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/review.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/score.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/sync.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/commands/trace.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/glama.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/llms-full.txt +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/llms.txt +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/mcpb/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/mcpb/manifest.template.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/packaging/homebrew/docguard.rb +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/packaging/submissions.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-agent-context-benchmark.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-agent-context-result.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-benchmark.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-config.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-evidence.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-feedback-fixture.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-specs.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/schemas/docguard-task-context.schema.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/smithery.yaml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/006-document-lifecycle/plan.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/006-document-lifecycle/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/006-document-lifecycle/tasks.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/007-precision-evidence-loop/plan.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/007-precision-evidence-loop/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/007-precision-evidence-loop/tasks.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/plan.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/research.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/008-evidence-scoped-verification/tasks.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/plan.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/research.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/009-language-repository-coverage/tasks.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/plan.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/research.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/010-task-specific-agent-context/tasks.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/011-tokenless-scheduled-releases/plan.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/011-tokenless-scheduled-releases/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/011-tokenless-scheduled-releases/tasks.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/specs/012-adoption-workflow-integrity/spec.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ADR.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/AGENTS.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ARCHITECTURE.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/CHANGELOG.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/CURRENT-STATE.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/DATA-MODEL.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/DEPLOYMENT.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/DRIFT-LOG.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ENVIRONMENT.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/KNOWN-GOTCHAS.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/REQUIREMENTS.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ROADMAP.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/RUNBOOKS.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/SECURITY.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/TEST-SPEC.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/TROUBLESHOOTING.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/VENDOR-BUGS.md.template +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/ci/gitlab-component.yml +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.fix.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.guard.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.init.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.review.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/commands/docguard.update.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/.docguard.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/.env.example +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/AGENTS.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/CHANGELOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/DRIFT-LOG.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/README.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/package.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/api.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/notifier.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/scheduler.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/demo-fixture/src/worker.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/evidence-manifest.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/templates/feedback-fixture.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/testguard.claims.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/adoption-workflow.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent-context-benchmark.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent-evidence.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent-readability.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agent.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agents-check-readonly.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agents-command.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/agents-sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/anchor-autofix.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-authority-precision.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-doc-smells.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-doc.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-surface.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/api-write.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/architecture.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/archive.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/assessment.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/b7-node-env-symmetry.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/backup-failure.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/badge.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/baseline.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/benchmark-manifest.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/benchmark-metrics.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/benchmark-runner.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/canonical-docs-nested-phase2.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/canonical-docs-nested.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/canonical-sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/catalog-submission.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/cdk-detection.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/changed-only-scoping.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/changed-only.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/changelog.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/check-coverage.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/ci-reproducibility.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/ci-scaffolder.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/commands.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/cross-reference.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/demo-command.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/diagnose-review-guidance.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/diff-suspicion.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-quality.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-role-boundaries.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-role-mapping.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/doc-section-synonyms.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docguard-config-schema.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docguardignore.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-coverage-reference-evidence.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-coverage-scope.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-coverage.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-diff.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/docs-sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/document-lifecycle.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/drift.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/ensure-skills-idempotent.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/env-schema-detection.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/environment.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-adapters.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-integration.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-manifest.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/evidence-python-literal.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/explain-coverage.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/feedback-contributions.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/feedback-fixture.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-context-precision.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-diff-precision.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-0415.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-2-cli.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-3-deferred.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-report-3.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/field-review-clarity.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/file-transaction.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/finding-severity-config.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fix-memory.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fix-suppression.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fixture-projects.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/fixtures/release-workflow-probe.json +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/freshness.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/frontend-deep.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/frontend.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/generate-io.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/generated-staleness.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/guard-classify.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/guard-no-throw.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/history.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/hook-fail-open.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/hooks-contract.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/hooks.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/i18n.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/impact.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/init-smart-detection.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/instruction-audit.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/integrations.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/inventory.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/js-ast.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/junit.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/llms-full-pack.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mapped-writers.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mcp-http.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mcp.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/mechanical.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/memory-plan.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/metadata-sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/metrics-consistency.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/metrics-dedup.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/monorepo-scanning.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/multi-spec.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/npm-pack-smoke.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/nudge-hook.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/openapi-parse-honesty.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/patch-0.11.2.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/plan-disk-cache.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/profile-flag.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/project-type.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/py-ast.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/python-import-graph.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/reconcile.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/reference-existence.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/regenerate-section.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/release-version-sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/report.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/repository-root.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/requirement-scope.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/route-field-precision.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-express-mounts.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-fastify.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-multilang.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/routes-nextjs-app-router.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sarif.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/scheduled-release.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schema-sync-scope.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schema-sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schemas-multilang.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/schemas.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/scoping-extended.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/score-assurance.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/score-suggestions.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/section-na-markers.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sections.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/security-init-injection.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/security.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/severity.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-diff.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-git.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-ignore-functions.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-ir.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/shared-source.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/spec-completion.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/spec-kit-helper-json.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/spec-registry.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/speckit-bugfix.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/speckit-phantom.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/starter-scaffold.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/stress-test.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/structure.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/surface-sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sweep-nudge.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sync-since.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/sync.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/task-context.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/test-spec.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/todo-tracking.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/trace-features.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/trace-multilang.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/trace-reverse.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability-fixtures.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability-ir.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability-lifecycle.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/traceability.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/upgrade-pr-e2e.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/upgrade-pr.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/upgrade.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/v020-consolidation.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/validator-markers.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/validator-naming.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/validator-surface-invariant.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/verify-change-context.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/version-pin.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/watch-reliability.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/whats-new.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/worker-python-capability.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tests/workflow-action-pins.test.mjs +0 -0
- {docguard_cli-0.41.6 → docguard_cli-0.41.7}/tools/node-test-json-reporter.mjs +0 -0
|
@@ -6,10 +6,10 @@ description: AI-driven documentation repair with structured research workflow, t
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.41.
|
|
9
|
+
version: 0.41.7
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.7 -->
|
|
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.41.
|
|
10
|
+
version: 0.41.7
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.41.
|
|
13
|
+
<!-- docguard:version: 0.41.7 -->
|
|
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.41.
|
|
9
|
+
version: 0.41.7
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.7 -->
|
|
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.41.
|
|
9
|
+
version: 0.41.7
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.7 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Score Skill
|
|
15
15
|
|
|
@@ -4,10 +4,10 @@ description: Keep canonical documentation ALWAYS UP TO DATE. Refreshes code-trut
|
|
|
4
4
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
5
5
|
metadata:
|
|
6
6
|
author: docguard
|
|
7
|
-
version: 0.41.
|
|
7
|
+
version: 0.41.7
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
|
-
<!-- docguard:version: 0.41.
|
|
10
|
+
<!-- docguard:version: 0.41.7 -->
|
|
11
11
|
|
|
12
12
|
# DocGuard Sync Skill
|
|
13
13
|
|
|
@@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.41.7] - 2026-09-18
|
|
11
|
+
|
|
12
|
+
Automated weekly release — batches everything merged since `v0.41.6`.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- feat: detect documents by name across the codebase, not by exact path (#418)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Find the documents a project already has, instead of assuming where they are.
|
|
22
|
+
`init` now looks for canonical role filenames across the repository before
|
|
23
|
+
creating anything, reports what it found, and offers to adopt that location —
|
|
24
|
+
writing both `docs.roles` and a matching `requiredFiles.canonical`. Detection
|
|
25
|
+
recognises real-world spellings rather than one exact filename: separators and
|
|
26
|
+
case are ignored (`data_model.md`, `Data Model.md`), `.markdown` and `.mdx`
|
|
27
|
+
count, and each role has known aliases (`system-design.md`, `testing.md`,
|
|
28
|
+
`env.md`, `api.md`, `PRD.md`). A directory must hold at least two roles before
|
|
29
|
+
it qualifies, so a lone root `SECURITY.md` — GitHub's policy file — never
|
|
30
|
+
triggers relocation, and the conventional directory wins any tie.
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
|
|
34
|
+
- Judge the same repository the same way on every platform. Three detectors
|
|
35
|
+
probed for literal filenames — `existsSync(resolve(dir, 'ROADMAP.md'))` — which
|
|
36
|
+
matches `roadmap.md` on a case-insensitive filesystem (macOS) and not on a
|
|
37
|
+
case-sensitive one (Linux). CI and a laptop could therefore disagree about
|
|
38
|
+
whether the same TODO was tracked. Matching is now explicitly case- and
|
|
39
|
+
separator-insensitive, decided by DocGuard rather than by the filesystem.
|
|
40
|
+
- Recognise work-tracking documents by name rather than by exact path. A TODO
|
|
41
|
+
recorded in `docs/ROADMAP.md`, `PLAN.md` or `TASKS.md` was reported as
|
|
42
|
+
untracked because only ten literal paths were consulted. Tracking documents
|
|
43
|
+
are now found by alias across the conventional documentation directories;
|
|
44
|
+
`README.md` and `NOTES.md` still do not count as work lists.
|
|
45
|
+
- Recognise test directories beyond four exact names. `testing/`, `e2e/`,
|
|
46
|
+
`integration/`, `specs/` and `Tests/` now satisfy the same signal as `tests/`.
|
|
47
|
+
- Stop scaffolding a second canonical directory next to an existing one.
|
|
48
|
+
A project keeping its documents in `docs/canonical/` read as empty, because
|
|
49
|
+
the first-run check only walked `docs-canonical/`. `init` then reported "no
|
|
50
|
+
canonical docs", offered to reverse-engineer them from code, and created a
|
|
51
|
+
duplicate set beside the real documents. Reported as #326.
|
|
52
|
+
|
|
53
|
+
|
|
10
54
|
## [0.41.6] - 2026-09-18
|
|
11
55
|
|
|
12
56
|
Automated weekly release — batches everything merged since `v0.41.5`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: docguard-cli
|
|
3
|
-
Version: 0.41.
|
|
3
|
+
Version: 0.41.7
|
|
4
4
|
Summary: The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project documentation. No Python dependencies (requires Node.js 18+).
|
|
5
5
|
Project-URL: Homepage, https://github.com/raccioly/docguard
|
|
6
6
|
Project-URL: Documentation, https://github.com/raccioly/docguard#readme
|
|
@@ -17,6 +17,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
17
17
|
import { createInterface } from 'node:readline';
|
|
18
18
|
import { execSync } from 'node:child_process';
|
|
19
19
|
import { c, PROFILES, CURRENT_SCHEMA_VERSION } from '../shared.mjs';
|
|
20
|
+
import { detectCanonicalLayout, applyDocRoles } from '../shared-doc-roles.mjs';
|
|
20
21
|
import { ensureSkills, detectAgentMode, detectAIAgent, isSpecKitAvailable, isSpecKitInitialized, getDetectedAgent, safeSpawnSpecify } from '../ensure-skills.mjs';
|
|
21
22
|
import { safeWrite } from '../writers/generate-io.mjs';
|
|
22
23
|
|
|
@@ -144,8 +145,68 @@ function askQuestion(prompt) {
|
|
|
144
145
|
});
|
|
145
146
|
}
|
|
146
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Confirm where a project actually keeps its canonical documents.
|
|
150
|
+
*
|
|
151
|
+
* Runs before init creates anything. If the role filenames already exist
|
|
152
|
+
* somewhere other than the directory the config points at, say so and offer to
|
|
153
|
+
* adopt that location, instead of reporting "no canonical docs" and scaffolding
|
|
154
|
+
* a second copy next to the real one.
|
|
155
|
+
*
|
|
156
|
+
* Writes `docs.roles` (the mechanism every validator already resolves through)
|
|
157
|
+
* plus a matching `requiredFiles.canonical`. Declaring only the latter leaves
|
|
158
|
+
* the content validators walking the conventional directory, where they find
|
|
159
|
+
* nothing and report "no matches" — checks disappear without anyone saying so.
|
|
160
|
+
*
|
|
161
|
+
* @returns {Promise<Record<string,string>|null>} adopted roles, or null
|
|
162
|
+
*/
|
|
163
|
+
async function confirmCanonicalLocation(projectDir, flags) {
|
|
164
|
+
const configPath = resolve(projectDir, '.docguard.json');
|
|
165
|
+
let existing = {};
|
|
166
|
+
if (existsSync(configPath)) {
|
|
167
|
+
try { existing = JSON.parse(readFileSync(configPath, 'utf-8')); } catch { return false; }
|
|
168
|
+
}
|
|
169
|
+
// An explicit mapping is the user's answer already; do not second-guess it.
|
|
170
|
+
if (existing.docs?.roles) return null;
|
|
171
|
+
|
|
172
|
+
const hits = detectCanonicalLayout(projectDir).filter(h => h.count >= 2);
|
|
173
|
+
if (hits.length === 0) return null;
|
|
174
|
+
const best = hits[0];
|
|
175
|
+
if (best.dir === 'docs-canonical') return null; // already conventional
|
|
176
|
+
|
|
177
|
+
console.log(`\n${c.bold}📁 Found existing canonical documents${c.reset}`);
|
|
178
|
+
console.log(`${c.dim} DocGuard defaults to docs-canonical/, but ${Object.keys(best.roles).length} of its documents${c.reset}`);
|
|
179
|
+
console.log(`${c.dim} already live in ${c.reset}${c.cyan}${best.dir}/${c.reset}${c.dim}:${c.reset}`);
|
|
180
|
+
for (const [role, path] of Object.entries(best.roles)) {
|
|
181
|
+
console.log(` ${c.green}•${c.reset} ${path} ${c.dim}(${role})${c.reset}`);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (!flags.skipPrompts && !flags.force) {
|
|
185
|
+
const answer = (await askQuestion(`\n Use ${best.dir}/ as the canonical location? [Y/n] `)).trim().toLowerCase();
|
|
186
|
+
if (answer === 'n' || answer === 'no') {
|
|
187
|
+
console.log(`${c.dim} Keeping docs-canonical/. Map them later with docs.roles in .docguard.json.${c.reset}\n`);
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
// Non-interactive: adopting what is on disk is the safe default, because
|
|
192
|
+
// the alternative is scaffolding a duplicate the user never asked for.
|
|
193
|
+
console.log(`${c.dim} Adopting ${best.dir}/ (non-interactive).${c.reset}`);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const next = { ...existing };
|
|
197
|
+
next.docs = { ...(next.docs || {}), roles: { ...best.roles } };
|
|
198
|
+
next.requiredFiles = {
|
|
199
|
+
...(next.requiredFiles || {}),
|
|
200
|
+
canonical: Object.values(best.roles).sort(),
|
|
201
|
+
};
|
|
202
|
+
writeFileSync(configPath, JSON.stringify(next, null, 2) + '\n');
|
|
203
|
+
console.log(` ${c.green}✅${c.reset} .docguard.json now points at ${c.cyan}${best.dir}/${c.reset}\n`);
|
|
204
|
+
return best.roles;
|
|
205
|
+
}
|
|
206
|
+
|
|
147
207
|
// ── Init Command ─────────────────────────────────────────────────────────
|
|
148
208
|
|
|
209
|
+
|
|
149
210
|
/**
|
|
150
211
|
* v0.21 — Smart first-run detection.
|
|
151
212
|
*
|
|
@@ -179,6 +240,13 @@ function shouldRunGenerate(projectDir, flags) {
|
|
|
179
240
|
// detected as already-initialized, or the wizard re-triggers on every run.
|
|
180
241
|
if (listCanonicalDocs(projectDir).length > 0) return false;
|
|
181
242
|
|
|
243
|
+
// listCanonicalDocs only walks the directories the config points at, so a
|
|
244
|
+
// project keeping the same documents somewhere else (docs/canonical/) read as
|
|
245
|
+
// EMPTY. Init then offered to reverse-engineer docs from code and would
|
|
246
|
+
// scaffold a second canonical directory beside the real one. Look for the
|
|
247
|
+
// role filenames anywhere before concluding a project has no documentation.
|
|
248
|
+
if (detectCanonicalLayout(projectDir).some(hit => hit.count >= 2)) return false;
|
|
249
|
+
|
|
182
250
|
// Existing-code signals: any of cli/, src/, lib/, app/ as a directory.
|
|
183
251
|
const codeDirs = ['cli', 'src', 'lib', 'app'];
|
|
184
252
|
for (const d of codeDirs) {
|
|
@@ -198,7 +266,8 @@ function shouldRunGenerate(projectDir, flags) {
|
|
|
198
266
|
return false;
|
|
199
267
|
}
|
|
200
268
|
|
|
201
|
-
export async function runInit(projectDir,
|
|
269
|
+
export async function runInit(projectDir, configArg, flags) {
|
|
270
|
+
let config = configArg;
|
|
202
271
|
// `--list` is read-only inventory owned by the hooks scaffolder. Routing it
|
|
203
272
|
// through normal init can start prompts or create documentation before the
|
|
204
273
|
// requested inventory is shown, which violates the command's read-only intent.
|
|
@@ -211,6 +280,19 @@ export async function runInit(projectDir, config, flags) {
|
|
|
211
280
|
const { runHooks } = await import('./hooks.mjs');
|
|
212
281
|
return runHooks(projectDir, config, flags);
|
|
213
282
|
}
|
|
283
|
+
// Ask where the documents live before creating any. The adopted mapping has
|
|
284
|
+
// to reach the in-memory config as well: the skeleton path below reads it,
|
|
285
|
+
// and would otherwise create a second canonical directory it was just told
|
|
286
|
+
// not to use.
|
|
287
|
+
const adoptedRoles = await confirmCanonicalLocation(projectDir, flags);
|
|
288
|
+
if (adoptedRoles) {
|
|
289
|
+
config.docs = { ...(config.docs || {}), roles: { ...adoptedRoles } };
|
|
290
|
+
config.requiredFiles = {
|
|
291
|
+
...(config.requiredFiles || {}),
|
|
292
|
+
canonical: Object.values(adoptedRoles).sort(),
|
|
293
|
+
};
|
|
294
|
+
config = applyDocRoles(projectDir, config);
|
|
295
|
+
}
|
|
214
296
|
if (true) assertDefaultDocWrites(config);
|
|
215
297
|
// v0.20: `--wizard` dispatches to the full interactive onboarding (formerly
|
|
216
298
|
// `docguard setup`). Done before profile validation so the wizard can ask
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/** Explicit document roles let existing repository layouts serve as canonical input. */
|
|
2
|
+
import { existsSync, lstatSync, readFileSync, readdirSync } from 'node:fs';
|
|
3
|
+
import { resolve, isAbsolute, join } from 'node:path';
|
|
4
|
+
export const DOC_ROLES = Object.freeze({
|
|
5
|
+
architecture: 'docs-canonical/ARCHITECTURE.md', dataModel: 'docs-canonical/DATA-MODEL.md',
|
|
6
|
+
security: 'docs-canonical/SECURITY.md', testSpec: 'docs-canonical/TEST-SPEC.md',
|
|
7
|
+
environment: 'docs-canonical/ENVIRONMENT.md', apiReference: 'docs-canonical/API-REFERENCE.md',
|
|
8
|
+
requirements: 'docs-canonical/REQUIREMENTS.md',
|
|
9
|
+
});
|
|
10
|
+
export function docRolePath(config = {}, role) {
|
|
11
|
+
if (!Object.hasOwn(DOC_ROLES, role)) throw new Error('Unknown document role: ' + role);
|
|
12
|
+
const value = config.docs?.roles?.[role] ?? DOC_ROLES[role];
|
|
13
|
+
if (typeof value !== 'string' || !value.trim() || value.includes('\0')) throw new Error('Invalid document path for role: ' + role);
|
|
14
|
+
const path = value.replace(/\\/g, '/');
|
|
15
|
+
if (config.docs?.roles?.[role] !== undefined && !path.toLowerCase().endsWith('.md')) throw new Error('Mapped document roles currently require Markdown (.md): ' + role);
|
|
16
|
+
if (isAbsolute(path) || /^[A-Za-z]:/.test(path) || path.split('/').some(p => p === '..' || p.toLowerCase() === '.local' || p.toLowerCase() === '.git')) throw new Error('Document role path must stay within the project: ' + role);
|
|
17
|
+
return path.startsWith('./') ? path.slice(2) : path;
|
|
18
|
+
}
|
|
19
|
+
export function resolveDocRole(projectDir, config, role) {
|
|
20
|
+
const rel = docRolePath(config, role);
|
|
21
|
+
// Opt-in mappings must not follow links into another repository/private data.
|
|
22
|
+
if (config.docs?.roles?.[role] !== undefined) {
|
|
23
|
+
let current = resolve(projectDir);
|
|
24
|
+
for (const part of rel.split('/')) {
|
|
25
|
+
current = join(current, part);
|
|
26
|
+
try { if (lstatSync(current).isSymbolicLink()) throw new Error('Document role path contains a symlink: ' + role); }
|
|
27
|
+
catch (e) { if (e.code !== 'ENOENT') throw e; }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return resolve(projectDir, rel);
|
|
31
|
+
}
|
|
32
|
+
export function applyDocRoles(projectDir, config) {
|
|
33
|
+
const roles = config.docs?.roles;
|
|
34
|
+
if (roles === undefined) return config;
|
|
35
|
+
if (!roles || typeof roles !== 'object' || Array.isArray(roles)) throw new Error('docs.roles must be an object');
|
|
36
|
+
const replacements = new Map();
|
|
37
|
+
for (const role of Object.keys(roles)) {
|
|
38
|
+
resolveDocRole(projectDir, config, role);
|
|
39
|
+
replacements.set(DOC_ROLES[role], docRolePath(config, role));
|
|
40
|
+
}
|
|
41
|
+
const requiredFiles = { ...config.requiredFiles, canonical: [...new Set([...(config.requiredFiles?.canonical || []).map(p => replacements.get(p) || p), ...replacements.values()])] };
|
|
42
|
+
const documentTypes = { ...config.documentTypes };
|
|
43
|
+
for (const [oldPath, newPath] of replacements) {
|
|
44
|
+
const old = documentTypes[oldPath] || {};
|
|
45
|
+
if (oldPath !== newPath) delete documentTypes[oldPath];
|
|
46
|
+
documentTypes[newPath] = { ...old, ...documentTypes[newPath], required: true, category: 'canonical' };
|
|
47
|
+
}
|
|
48
|
+
return { ...config, requiredFiles, documentTypes };
|
|
49
|
+
}
|
|
50
|
+
export function remapDocPath(config, path) {
|
|
51
|
+
const role = Object.keys(DOC_ROLES).find(key => DOC_ROLES[key] === path);
|
|
52
|
+
return role ? docRolePath(config, role) : path;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function mappedRolesForPath(config = {}, path) {
|
|
56
|
+
const target = String(path).replace(/\\/g, '/').replace(/^\.\//, '');
|
|
57
|
+
return Object.keys(DOC_ROLES).filter(role => {
|
|
58
|
+
const configured = config.docs?.roles?.[role];
|
|
59
|
+
return configured !== undefined && docRolePath(config, role) === target && target !== DOC_ROLES[role];
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function isMappedDocPath(config = {}, path) {
|
|
64
|
+
return mappedRolesForPath(config, path).length > 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Authorize a whole-document write to custom role targets. New files are safe;
|
|
69
|
+
* existing files must explicitly grant full ownership and one file cannot be
|
|
70
|
+
* the whole-document target of several roles.
|
|
71
|
+
* @implements docguard.language-repository-coverage#FR-010
|
|
72
|
+
* @implements docguard.language-repository-coverage#FR-011
|
|
73
|
+
*/
|
|
74
|
+
export function assertMappedFullDocumentWrites(projectDir, config = {}, roles = Object.keys(DOC_ROLES)) {
|
|
75
|
+
const selected = roles.filter(role => Object.hasOwn(DOC_ROLES, role) && config.docs?.roles?.[role] !== undefined
|
|
76
|
+
&& docRolePath(config, role) !== DOC_ROLES[role]);
|
|
77
|
+
const paths = new Map();
|
|
78
|
+
for (const role of selected) {
|
|
79
|
+
const rel = docRolePath(config, role);
|
|
80
|
+
if (!paths.has(rel)) paths.set(rel, []);
|
|
81
|
+
paths.get(rel).push(role);
|
|
82
|
+
}
|
|
83
|
+
for (const [rel, owners] of paths) {
|
|
84
|
+
const allOwners = mappedRolesForPath(config, rel);
|
|
85
|
+
if (allOwners.length > 1) {
|
|
86
|
+
throw new Error(`Mapped document ${rel} serves multiple roles (${allOwners.join(', ')}); whole-document generation is unavailable. Use unique source=code sections instead.`);
|
|
87
|
+
}
|
|
88
|
+
const role = owners[0];
|
|
89
|
+
const full = resolveDocRole(projectDir, config, role);
|
|
90
|
+
if (!existsSync(full)) continue;
|
|
91
|
+
const content = readFileSync(full, 'utf8');
|
|
92
|
+
if (!/^[ \t]*<!--\s*docguard:generated\s+true\s*-->[ \t]*$/mi.test(content)) {
|
|
93
|
+
throw new Error(`Mapped document ${rel} is not fully owned by DocGuard. Add unique source=code sections for bounded writes; --force cannot overwrite its prose.`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function assertDefaultDocWrites(config) {
|
|
99
|
+
if (Object.entries(config.docs?.roles || {}).some(([role, path]) => path !== DOC_ROLES[role])) {
|
|
100
|
+
throw new Error('Custom docs.roles currently support validation and read-only planning. Automatic document generation/repair is unavailable for mapped layouts; review and edit the existing documents directly.');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Markdown extensions a canonical document realistically uses. */
|
|
105
|
+
const DOC_EXTENSIONS = new Set(['.md', '.markdown', '.mdx']);
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Names a role is known by in the wild, normalised.
|
|
109
|
+
*
|
|
110
|
+
* Matching the exact default filename only (`DATA-MODEL.md`) missed every real
|
|
111
|
+
* project: the same document ships as `data_model.md`, `datamodel.md`,
|
|
112
|
+
* `Data Model.md`, or `API.md` instead of `API-REFERENCE.md`. Separators, case
|
|
113
|
+
* and extension are all noise, so names are normalised to letters and digits
|
|
114
|
+
* before comparison and every plausible spelling collapses to one key.
|
|
115
|
+
*
|
|
116
|
+
* Kept deliberately tight. A directory has to hold at least two roles before it
|
|
117
|
+
* counts as canonical, so a lone root-level `SECURITY.md` — GitHub's security
|
|
118
|
+
* policy, not a design document — never triggers a match on its own.
|
|
119
|
+
*/
|
|
120
|
+
const ROLE_SYNONYMS = Object.freeze({
|
|
121
|
+
architecture: ['architecture', 'arch', 'systemdesign', 'design', 'systemarchitecture', 'technicaldesign', 'hld'],
|
|
122
|
+
dataModel: ['datamodel', 'data', 'schema', 'dataschema', 'entities', 'erd', 'domainmodel', 'database'],
|
|
123
|
+
security: ['security', 'threatmodel', 'securitymodel', 'securitydesign'],
|
|
124
|
+
testSpec: ['testspec', 'tests', 'testing', 'testplan', 'teststrategy', 'qa', 'testcases'],
|
|
125
|
+
environment: ['environment', 'env', 'setup', 'configuration', 'config', 'installation', 'install'],
|
|
126
|
+
apiReference: ['apireference', 'api', 'apidocs', 'apispec', 'endpoints', 'rest', 'openapi'],
|
|
127
|
+
requirements: ['requirements', 'reqs', 'prd', 'spec', 'functionalrequirements', 'userstories'],
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const NORMALISED_ROLE = new Map();
|
|
131
|
+
for (const [role, names] of Object.entries(ROLE_SYNONYMS)) {
|
|
132
|
+
for (const name of names) {
|
|
133
|
+
// First writer wins, so an earlier role keeps an ambiguous name.
|
|
134
|
+
if (!NORMALISED_ROLE.has(name)) NORMALISED_ROLE.set(name, role);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Normalise a filename to comparable letters and digits, or null if not a doc. */
|
|
139
|
+
export function normaliseDocName(filename) {
|
|
140
|
+
const dot = filename.lastIndexOf('.');
|
|
141
|
+
if (dot <= 0) return null;
|
|
142
|
+
if (!DOC_EXTENSIONS.has(filename.slice(dot).toLowerCase())) return null;
|
|
143
|
+
const stem = filename.slice(0, dot).toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
144
|
+
return stem || null;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** The canonical role a filename denotes, or null. */
|
|
148
|
+
export function roleForFilename(filename) {
|
|
149
|
+
const stem = normaliseDocName(filename);
|
|
150
|
+
return stem ? (NORMALISED_ROLE.get(stem) ?? null) : null;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Resolve a set of known document names to the files that actually exist.
|
|
155
|
+
*
|
|
156
|
+
* The literal-path approach — `existsSync(resolve(dir, 'ROADMAP.md'))` for each
|
|
157
|
+
* name — fails two ways. It misses every spelling not in the list (`PLAN.md`,
|
|
158
|
+
* `TASKS.md`, `docs/ROADMAP.md`), and it is only case-insensitive by accident:
|
|
159
|
+
* on macOS the probe matches `roadmap.md`, on Linux it does not, so the same
|
|
160
|
+
* repository is judged differently by platform.
|
|
161
|
+
*
|
|
162
|
+
* Reading each directory and normalising what is there fixes both: matching is
|
|
163
|
+
* explicitly case- and separator-insensitive everywhere, and one alias table
|
|
164
|
+
* covers the spellings people use.
|
|
165
|
+
*
|
|
166
|
+
* @param {string} projectDir
|
|
167
|
+
* @param {string[]} aliases normalised names to accept (see normaliseDocName)
|
|
168
|
+
* @param {string[]} dirs project-relative directories to search ('' = root)
|
|
169
|
+
* @returns {string[]} project-relative POSIX paths, de-duplicated, existing
|
|
170
|
+
*/
|
|
171
|
+
export function findDocsByName(projectDir, aliases, dirs) {
|
|
172
|
+
const want = new Set(aliases);
|
|
173
|
+
const out = [];
|
|
174
|
+
for (const dir of dirs) {
|
|
175
|
+
const abs = dir ? resolve(projectDir, dir) : resolve(projectDir);
|
|
176
|
+
let entries;
|
|
177
|
+
try { entries = readdirSync(abs, { withFileTypes: true }); } catch { continue; }
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
if (!entry.isFile()) continue;
|
|
180
|
+
const stem = normaliseDocName(entry.name);
|
|
181
|
+
if (!stem || !want.has(stem)) continue;
|
|
182
|
+
const rel = dir ? `${dir}/${entry.name}` : entry.name;
|
|
183
|
+
if (!out.includes(rel)) out.push(rel);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return out;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Find directories that already hold canonical documents.
|
|
191
|
+
*
|
|
192
|
+
* DocGuard assumed `docs-canonical/` and asked afterwards. A project keeping the
|
|
193
|
+
* same documents in `docs/canonical/` therefore looked EMPTY: `init` reported
|
|
194
|
+
* "no canonical docs", offered to reverse-engineer them from code, and would
|
|
195
|
+
* scaffold a second canonical directory beside the real one. The documents were
|
|
196
|
+
* there the whole time; nothing ever looked.
|
|
197
|
+
*
|
|
198
|
+
* Detection is by role BASENAME, because the filenames are the convention that
|
|
199
|
+
* survives relocation — the directory is the part people change.
|
|
200
|
+
*
|
|
201
|
+
* Returns candidates ranked by how many roles each directory holds, so a caller
|
|
202
|
+
* can confirm the strongest one rather than guess. Never throws: an unreadable
|
|
203
|
+
* subtree simply contributes nothing.
|
|
204
|
+
*
|
|
205
|
+
* @param {string} projectDir
|
|
206
|
+
* @param {{maxDepth?: number, skip?: Set<string>}} [opts]
|
|
207
|
+
* @returns {Array<{dir: string, roles: Record<string,string>, count: number}>}
|
|
208
|
+
*/
|
|
209
|
+
export function detectCanonicalLayout(projectDir, opts = {}) {
|
|
210
|
+
const maxDepth = opts.maxDepth ?? 4;
|
|
211
|
+
const skip = opts.skip ?? new Set([
|
|
212
|
+
'node_modules', '.git', '.local', 'dist', 'build', 'coverage',
|
|
213
|
+
'vendor', '__pycache__', '.venv', 'venv', '.next', 'target', '.testguard',
|
|
214
|
+
]);
|
|
215
|
+
|
|
216
|
+
const byBasename = roleForFilename;
|
|
217
|
+
|
|
218
|
+
const found = new Map(); // dir -> { role -> relative path }
|
|
219
|
+
|
|
220
|
+
const walk = (absDir, relDir, depth) => {
|
|
221
|
+
if (depth > maxDepth) return;
|
|
222
|
+
let entries;
|
|
223
|
+
try { entries = readdirSync(absDir, { withFileTypes: true }); } catch { return; }
|
|
224
|
+
for (const entry of entries) {
|
|
225
|
+
const name = entry.name;
|
|
226
|
+
if (entry.isDirectory()) {
|
|
227
|
+
if (skip.has(name) || name.startsWith('.')) continue;
|
|
228
|
+
walk(join(absDir, name), relDir ? `${relDir}/${name}` : name, depth + 1);
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const role = byBasename(name);
|
|
232
|
+
if (!role) continue;
|
|
233
|
+
const key = relDir || '.';
|
|
234
|
+
if (!found.has(key)) found.set(key, {});
|
|
235
|
+
found.get(key)[role] = relDir ? `${relDir}/${name}` : name;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
walk(resolve(projectDir), '', 0);
|
|
239
|
+
|
|
240
|
+
return [...found.entries()]
|
|
241
|
+
.map(([dir, roles]) => ({ dir, roles, count: Object.keys(roles).length }))
|
|
242
|
+
// Strongest first; the conventional directory wins an exact tie so an
|
|
243
|
+
// already-conventional project is never told to "relocate" to itself.
|
|
244
|
+
.sort((a, b) => b.count - a.count
|
|
245
|
+
|| (a.dir === 'docs-canonical' ? -1 : b.dir === 'docs-canonical' ? 1 : a.dir.localeCompare(b.dir)));
|
|
246
|
+
}
|
|
@@ -226,10 +226,20 @@ export function validateTestSpec(projectDir, config) {
|
|
|
226
226
|
// somewhere — that rendered a confident green ✅ for a doc that mapped nothing.
|
|
227
227
|
if (total === 0) {
|
|
228
228
|
// 1. Check top-level test dirs
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
)
|
|
229
|
+
// Match by normalised name rather than exact spelling: `Tests/`, `testing/`,
|
|
230
|
+
// `e2e/` and `integration/` are the same signal as `tests/`, and probing for
|
|
231
|
+
// literal names was case-insensitive only by accident (it matched on macOS
|
|
232
|
+
// and not on Linux, so CI and a laptop disagreed).
|
|
233
|
+
const TEST_DIR_NAMES = new Set([
|
|
234
|
+
'tests', 'test', 'spec', 'specs', 'testing',
|
|
235
|
+
'e2e', 'integration', 'unit', 'acceptance',
|
|
236
|
+
]);
|
|
237
|
+
const normaliseDir = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
238
|
+
let hasTestDir = false;
|
|
239
|
+
try {
|
|
240
|
+
hasTestDir = readdirSync(projectDir, { withFileTypes: true })
|
|
241
|
+
.some(e => e.isDirectory() && TEST_DIR_NAMES.has(normaliseDir(e.name)));
|
|
242
|
+
} catch { /* unreadable root: fall through to the other signals */ }
|
|
233
243
|
|
|
234
244
|
// 2. Check co-located tests (honors config.sourceRoot + workspaces)
|
|
235
245
|
let hasColocated = false;
|
|
@@ -20,6 +20,7 @@ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
|
20
20
|
import { resolve, join, relative, extname } from 'node:path';
|
|
21
21
|
import { shouldIgnore, walkFiles as sharedWalkFiles } from '../shared-ignore.mjs';
|
|
22
22
|
import { mkFinding, resultFromFindings } from '../findings.mjs';
|
|
23
|
+
import { findDocsByName } from '../shared-doc-roles.mjs';
|
|
23
24
|
import { parseJsTs, walk } from '../scanners/js-ast.mjs';
|
|
24
25
|
|
|
25
26
|
const IGNORE_DIRS = new Set([
|
|
@@ -391,13 +392,22 @@ function checkUntrackedTodos(projectDir, config) {
|
|
|
391
392
|
*/
|
|
392
393
|
function loadTrackingDocs(projectDir, config) {
|
|
393
394
|
const docs = [];
|
|
395
|
+
// Where a project tracks work, by name rather than by exact path. Probing for
|
|
396
|
+
// literal paths missed `docs/ROADMAP.md`, `PLAN.md` and `TASKS.md`, and was
|
|
397
|
+
// case-insensitive only by accident — `existsSync('ROADMAP.md')` matches
|
|
398
|
+
// `roadmap.md` on macOS but not on Linux, so CI and a laptop disagreed about
|
|
399
|
+
// whether the same TODO was tracked.
|
|
400
|
+
const TRACKING_ALIASES = [
|
|
401
|
+
'roadmap', 'currentstate', 'todo', 'todos', 'backlog',
|
|
402
|
+
'plan', 'plans', 'tasks', 'milestones', 'worklog', 'changelog',
|
|
403
|
+
];
|
|
404
|
+
const TRACKING_DIRS = ['', 'docs', 'doc', 'documentation', 'docs-canonical', 'docs-implementation'];
|
|
405
|
+
|
|
394
406
|
const trackingFiles = [
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
//
|
|
398
|
-
|
|
399
|
-
'docs-canonical/ROADMAP.md', 'docs-canonical/CURRENT-STATE.md',
|
|
400
|
-
'docs-canonical/BACKLOG.md', 'docs-canonical/TODO.md',
|
|
407
|
+
...findDocsByName(projectDir, TRACKING_ALIASES, TRACKING_DIRS),
|
|
408
|
+
// ARCHITECTURE is a tracking home only in the canonical sense; it is not a
|
|
409
|
+
// work list, so it stays an explicit entry rather than joining the aliases.
|
|
410
|
+
'docs-canonical/ARCHITECTURE.md',
|
|
401
411
|
...(config.todoTracking?.trackingFiles || []),
|
|
402
412
|
];
|
|
403
413
|
|
|
@@ -3,7 +3,7 @@ schema_version: "1.0"
|
|
|
3
3
|
extension:
|
|
4
4
|
id: "docguard"
|
|
5
5
|
name: "DocGuard — CDD Enforcement"
|
|
6
|
-
version: "0.41.
|
|
6
|
+
version: "0.41.7"
|
|
7
7
|
description: "Documentation integrity for AI-assisted repositories: lifecycle registry, drift validation, traceability, safe archival, SARIF/JUnit, MCP, GitHub Actions, and Spec Kit hooks."
|
|
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.41.
|
|
9
|
+
version: 0.41.7
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.7 -->
|
|
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.41.
|
|
10
|
+
version: 0.41.7
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.41.
|
|
13
|
+
<!-- docguard:version: 0.41.7 -->
|
|
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.41.
|
|
9
|
+
version: 0.41.7
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.7 -->
|
|
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.41.
|
|
9
|
+
version: 0.41.7
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.7 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Score Skill
|
|
15
15
|
|
|
@@ -4,10 +4,10 @@ description: Keep canonical documentation ALWAYS UP TO DATE. Refreshes code-trut
|
|
|
4
4
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
5
5
|
metadata:
|
|
6
6
|
author: docguard
|
|
7
|
-
version: 0.41.
|
|
7
|
+
version: 0.41.7
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
|
-
<!-- docguard:version: 0.41.
|
|
10
|
+
<!-- docguard:version: 0.41.7 -->
|
|
11
11
|
|
|
12
12
|
# DocGuard Sync Skill
|
|
13
13
|
|