docguard-cli 0.30.0__tar.gz → 0.30.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/workflows/ci.yml +8 -3
- docguard_cli-0.30.1/.github/workflows/jules-triage.yml +85 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/workflows/release.yml +10 -8
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/workflows/sync-speckit-catalog.yml +1 -1
- docguard_cli-0.30.1/.jules/bolt.md +24 -0
- docguard_cli-0.30.1/.jules/palette.md +11 -0
- docguard_cli-0.30.1/.jules/sentinel.md +24 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.jules-setup.sh +18 -5
- docguard_cli-0.30.1/.npmrc +13 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/anatomy.md +20 -9
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/buglog.json +91 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/cerebrum.md +5 -0
- docguard_cli-0.30.1/.wolf/hooks/_session.json +137 -0
- docguard_cli-0.30.1/.wolf/hooks/_wrap_up_nudged +1 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/memory.md +71 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/token-ledger.json +395 -8
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/AGENTS.md +14 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/CHANGELOG.md +25 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/PKG-INFO +3 -1
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/README.md +2 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/mcp.mjs +20 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/score.mjs +9 -4
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/setup.mjs +0 -13
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/shared-git.mjs +8 -1
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/ARCHITECTURE.md +2 -0
- docguard_cli-0.30.1/glama.json +6 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/package.json +1 -1
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/pyproject.toml +1 -1
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/field-report-3.test.mjs +26 -1
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/hooks.test.mjs +40 -0
- docguard_cli-0.30.0/.jules/bolt.md +0 -10
- docguard_cli-0.30.0/.jules/palette.md +0 -11
- docguard_cli-0.30.0/.jules/sentinel.md +0 -4
- docguard_cli-0.30.0/.npmrc +0 -7
- docguard_cli-0.30.0/.wolf/hooks/_session.json +0 -27
- docguard_cli-0.30.0/.wolf/hooks/_wrap_up_nudged +0 -1
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/docguard.fix.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/docguard.guard.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/docguard.review.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/docguard.score.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.analyze.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.checklist.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.clarify.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.constitution.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.implement.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.plan.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.specify.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.tasks.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/commands/speckit.taskstoissues.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/docguard-fix/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/docguard-guard/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/docguard-review/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/docguard-score/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/docguard-sync/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-analyze/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-checklist/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-clarify/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-constitution/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-implement/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-plan/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-specify/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-tasks/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.claude/rules/openwolf.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.claude/settings.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.docguard.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.docguardignore +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/dependabot.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/scripts/speckit-submission.py +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.github/workflows/supply-chain.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.gitignore +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.npmignore +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.pre-commit-hooks.yaml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/extensions/.cache/catalog-metadata.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/extensions/.cache/catalog.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/init-options.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/memory/constitution.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/scripts/bash/common.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/scripts/bash/setup-plan.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/templates/agent-file-template.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/templates/checklist-template.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/templates/constitution-template.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/templates/plan-template.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/templates/spec-template.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.specify/templates/tasks-template.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/OPENWOLF.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/config.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/cron-manifest.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/cron-state.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/daemon.log +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/designqc-report.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/package.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/post-read.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/post-write.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/pre-read.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/pre-write.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/session-start.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/shared.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/hooks/stop.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/identity.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/reframe-frameworks.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/.wolf/suggestions.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/CLAUDE.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/CODE_OF_CONDUCT.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/COMPARISONS.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/CONTRIBUTING.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/DRIFT-LOG.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/Dockerfile +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/LICENSE +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/PHILOSOPHY.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/README.es.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/README.pt-BR.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/ROADMAP.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/SECURITY.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/STANDARD.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/SUPPLY-CHAIN-AUDIT.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/SUPPORT.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/action.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/assets/bin/docguard +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/assets/demo.gif +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/assets/demo.tape +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/assets/docguard-logo.png +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/agent.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/agents.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/badge.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/ci.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/demo.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/diagnose.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/diff.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/explain.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/feedback.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/fix.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/generate.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/guard.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/hooks.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/impact.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/init.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/llms.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/memory.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/publish.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/sync-tests.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/sync.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/trace.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/upgrade.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/verify.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/commands/watch.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/config.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/docguard.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/ensure-skills.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/findings.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/agent-readability.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/api-doc.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/cdk.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/doc-tools.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/frontend.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/iac.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/instruction-audit.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/integrations.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/inventory.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/js-ast.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/memory-plan.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/project-type.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/py-ast.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/routes.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/schemas.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/semantic-claims.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/scanners/speckit.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/shared-ignore.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/shared-source.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/shared-trace-patterns.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/shared.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validator-markers.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/api-surface.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/architecture.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/canonical-sync.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/changelog.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/cross-reference.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/doc-quality.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/docs-coverage.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/docs-diff.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/docs-sync.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/drift.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/environment.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/freshness.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/generated-staleness.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/metadata-sync.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/metrics-consistency.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/schema-sync.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/security.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/spec-kit.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/structure.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/surface-sync.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/test-spec.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/todo-tracking.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/validators/traceability.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/writers/api-reference.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/writers/doc-generators.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/writers/fix-memory.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/writers/generate-io.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/writers/mechanical.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/writers/sarif.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/cli/writers/sections.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/commands/docguard.fix.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/commands/docguard.guard.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/commands/docguard.review.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/commands/docguard.score.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/configs/fastify.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/configs/generic.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/configs/nextjs.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/configs/python.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docguard_cli/__init__.py +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docguard_cli/wrapper.py +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/ai-integration.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/commands.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/configuration.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/doc-sections.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/faq.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/installation.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/profiles.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs/quickstart.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/CI-RECIPES.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/REQUIREMENTS.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/SURFACE-AUDIT.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/docs-implementation/MIGRATION-v0.20.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/01-express-api/README.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/01-express-api/package.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/01-express-api/server.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/02-python-flask/README.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/02-python-flask/app.py +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/02-python-flask/requirements.txt +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/README.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/package.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/src/index.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/tasks.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/examples/README.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/LICENSE +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/README.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/fix.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/generate.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/guard.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/init.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/score.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/sync.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/commands/trace.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/extension.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/skills/docguard-fix/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/skills/docguard-guard/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/skills/docguard-review/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/skills/docguard-score/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/llms-full.txt +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/llms.txt +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/package-lock.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/packaging/homebrew/docguard.rb +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/packaging/submissions.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/schemas/docguard-config.schema.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/server.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/smithery.yaml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/001-fix-ignore-validators/plan.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/001-fix-ignore-validators/spec.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/001-fix-ignore-validators/tasks.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/002-fix-test-discovery/plan.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/002-fix-test-discovery/spec.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/002-fix-test-discovery/tasks.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/003-v011-false-positives/plan.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/003-v011-false-positives/spec.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/003-v011-false-positives/tasks.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/004-v020-env-var-false-negative/spec.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/specs/005-hugocross-next-bugs/spec.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/ADR.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/AGENTS.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/ARCHITECTURE.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/CHANGELOG.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/CURRENT-STATE.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/DATA-MODEL.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/DEPLOYMENT.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/DRIFT-LOG.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/ENVIRONMENT.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/KNOWN-GOTCHAS.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/REQUIREMENTS.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/ROADMAP.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/RUNBOOKS.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/SECURITY.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/TEST-SPEC.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/TROUBLESHOOTING.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/VENDOR-BUGS.md.template +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/ci/github-actions.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/ci/gitlab-component.yml +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/commands/docguard.fix.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/commands/docguard.guard.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/commands/docguard.init.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/commands/docguard.review.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/commands/docguard.update.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/.docguard.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/.env.example +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/AGENTS.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/CHANGELOG.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/DRIFT-LOG.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/README.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/package.json +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/src/api.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/src/notifier.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/src/scheduler.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/templates/demo-fixture/src/worker.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/agent-readability.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/agent.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/agents-sync.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/anchor-autofix.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/api-doc.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/api-surface.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/api-write.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/architecture.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/b7-node-env-symmetry.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/backup-failure.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/canonical-sync.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/cdk-detection.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/changed-only-scoping.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/changed-only.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/changelog.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/commands.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/cross-reference.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/demo-command.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/doc-quality.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/doc-section-synonyms.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/docguardignore.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/docs-coverage.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/docs-diff.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/docs-sync.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/drift.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/ensure-skills-idempotent.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/env-schema-detection.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/environment.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/explain-coverage.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/field-report-2-cli.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/field-report-3-deferred.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/fix-memory.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/fix-suppression.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/fixture-projects.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/freshness.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/frontend-deep.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/frontend.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/generated-staleness.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/guard-classify.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/guard-no-throw.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/i18n.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/impact.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/init-smart-detection.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/instruction-audit.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/integrations.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/inventory.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/js-ast.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/llms-full-pack.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/mcp.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/mechanical.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/memory-plan.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/metadata-sync.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/metrics-consistency.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/metrics-dedup.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/monorepo-scanning.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/multi-spec.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/npm-pack-smoke.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/openapi-parse-honesty.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/patch-0.11.2.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/plan-disk-cache.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/profile-flag.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/project-type.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/py-ast.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/regenerate-section.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/routes-express-mounts.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/routes-fastify.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/routes-multilang.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/routes-nextjs-app-router.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/sarif.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/schema-sync.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/schemas-multilang.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/schemas.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/scoping-extended.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/score-suggestions.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/section-na-markers.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/sections.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/security-init-injection.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/security.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/severity.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/shared-git.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/shared-source.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/speckit-bugfix.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/speckit-phantom.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/starter-scaffold.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/stress-test.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/structure.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/surface-sync.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/sweep-nudge.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/sync-since.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/sync.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/test-spec.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/todo-tracking.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/trace-features.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/trace-multilang.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/trace-reverse.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/traceability.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/upgrade-pr-e2e.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/upgrade-pr.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/upgrade.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/v020-consolidation.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/validator-markers.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/validator-naming.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/version-pin.test.mjs +0 -0
- {docguard_cli-0.30.0 → docguard_cli-0.30.1}/tests/whats-new.test.mjs +0 -0
|
@@ -12,10 +12,15 @@ jobs:
|
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
strategy:
|
|
14
14
|
matrix:
|
|
15
|
-
|
|
15
|
+
# 24 ships npm 11 — keep it in the matrix so `npm ci` exercises the newer
|
|
16
|
+
# npm that older Nodes (18/20/22 → npm 10) do NOT. This is what catches
|
|
17
|
+
# config/install incompatibilities that npm 10 silently accepts but npm 11
|
|
18
|
+
# treats as fatal (e.g. bug-198: `.npmrc` min-release-age broke the Glama
|
|
19
|
+
# build on npm 11 while all local/CI installs passed). Do not drop 24.
|
|
20
|
+
node-version: [18, 20, 22, 24]
|
|
16
21
|
|
|
17
22
|
steps:
|
|
18
|
-
- uses: actions/checkout@
|
|
23
|
+
- uses: actions/checkout@v7
|
|
19
24
|
with:
|
|
20
25
|
fetch-depth: 0 # Full git history for freshness validator
|
|
21
26
|
|
|
@@ -97,7 +102,7 @@ jobs:
|
|
|
97
102
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
98
103
|
needs: test
|
|
99
104
|
steps:
|
|
100
|
-
- uses: actions/checkout@
|
|
105
|
+
- uses: actions/checkout@v7
|
|
101
106
|
- uses: actions/setup-node@v6
|
|
102
107
|
with:
|
|
103
108
|
node-version: 20
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
name: Jules PR Triage
|
|
2
|
+
|
|
3
|
+
# Auto-triage PRs opened by the Google Jules agents (Sentinel/Bolt/Palette).
|
|
4
|
+
# Keeps Jules ON (it stays useful for genuinely-new work) while automatically
|
|
5
|
+
# clearing the duplicate/already-resolved noise it tends to produce, and giving
|
|
6
|
+
# it per-PR feedback (a comment mentioning @jules) so it learns.
|
|
7
|
+
#
|
|
8
|
+
# SECURITY: uses pull_request_target (needs write to comment/close/label on the
|
|
9
|
+
# PR), but reads only PR METADATA (title, author) via the API and NEVER checks
|
|
10
|
+
# out or runs the PR's code — so the elevated token is never exposed to
|
|
11
|
+
# PR-controlled content. (Matches the AGENTS.md CI rule.)
|
|
12
|
+
|
|
13
|
+
on:
|
|
14
|
+
pull_request_target:
|
|
15
|
+
types: [opened, reopened]
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
pull-requests: write
|
|
19
|
+
issues: write
|
|
20
|
+
contents: read
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
triage:
|
|
24
|
+
# Only act on the Jules bot's PRs; everything else is untouched.
|
|
25
|
+
if: github.event.pull_request.user.login == 'google-labs-jules[bot]'
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- name: Triage the Jules PR
|
|
29
|
+
uses: actions/github-script@v9
|
|
30
|
+
with:
|
|
31
|
+
script: |
|
|
32
|
+
const pr = context.payload.pull_request;
|
|
33
|
+
const num = pr.number;
|
|
34
|
+
const title = pr.title || '';
|
|
35
|
+
const owner = context.repo.owner;
|
|
36
|
+
const repo = context.repo.repo;
|
|
37
|
+
|
|
38
|
+
// Known-noise classes for THIS repo (see .jules/*.md RESOLVED markers).
|
|
39
|
+
const NOISE = [
|
|
40
|
+
/command injection|exec(File)?Sync/i, // Sentinel — fixed v0.21.1 + #296
|
|
41
|
+
/performance|optimi[sz]e|precompute|pre-?compile|O\(N|single-pass|\bset\b.*comparison|tolowercase|basenames?/i, // Bolt — applied + refactored
|
|
42
|
+
/no (web )?ui|no changes? (needed|required)|no ux|no-op/i, // Palette — no UI in this repo
|
|
43
|
+
];
|
|
44
|
+
const isNoise = NOISE.some((re) => re.test(title));
|
|
45
|
+
|
|
46
|
+
// Duplicate detection: another OPEN Jules PR with an equivalent title.
|
|
47
|
+
const norm = (s) => (s || '')
|
|
48
|
+
.toLowerCase()
|
|
49
|
+
.replace(/[^a-z0-9]+/g, ' ')
|
|
50
|
+
.replace(/\b(sentinel|bolt|palette|critical|high|medium|low|fix|the|a|an|via|in|of|for|to|and)\b/g, ' ')
|
|
51
|
+
.replace(/\s+/g, ' ')
|
|
52
|
+
.trim();
|
|
53
|
+
const mine = norm(title);
|
|
54
|
+
const { data: open } = await github.rest.pulls.list({ owner, repo, state: 'open', per_page: 100 });
|
|
55
|
+
const dup = mine && open.find((p) => p.number !== num && norm(p.title) === mine);
|
|
56
|
+
|
|
57
|
+
const addLabel = async (name) => {
|
|
58
|
+
try {
|
|
59
|
+
await github.rest.issues.addLabels({ owner, repo, issue_number: num, labels: [name] });
|
|
60
|
+
} catch (e) { core.info(`label "${name}" skipped: ${e.message}`); }
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
if (isNoise || dup) {
|
|
64
|
+
const reason = dup
|
|
65
|
+
? `a duplicate of #${dup.number}`
|
|
66
|
+
: 'a class already resolved or not applicable in this repo';
|
|
67
|
+
await github.rest.issues.createComment({
|
|
68
|
+
owner, repo, issue_number: num,
|
|
69
|
+
body:
|
|
70
|
+
`🤖 **Auto-triaged as stale** — ${reason}.\n\n` +
|
|
71
|
+
`@jules please stop opening PRs for this topic: it is covered by the RESOLVED markers in \`.jules/sentinel.md\` / \`.jules/bolt.md\` / \`.jules/palette.md\` and the **Automated agents** rule in \`AGENTS.md\` (search open **and** closed PRs first; never duplicate; only open a new PR for a genuinely-new finding with evidence — an exploit/failing test for security, or a >20% real-workload benchmark for performance). Closing to keep the queue clean.`,
|
|
72
|
+
});
|
|
73
|
+
await addLabel('jules-autoclosed');
|
|
74
|
+
await github.rest.pulls.update({ owner, repo, pull_number: num, state: 'closed' });
|
|
75
|
+
core.notice(`Closed #${num} (${reason}).`);
|
|
76
|
+
} else {
|
|
77
|
+
await addLabel('jules-review');
|
|
78
|
+
await github.rest.issues.createComment({
|
|
79
|
+
owner, repo, issue_number: num,
|
|
80
|
+
body:
|
|
81
|
+
`🔎 **Flagged for human review** — this looks like a *new, non-duplicate* change from @jules. ` +
|
|
82
|
+
`A maintainer should verify it against \`docguard guard\` + the test suite before merge.`,
|
|
83
|
+
});
|
|
84
|
+
core.notice(`#${num} flagged for human review.`);
|
|
85
|
+
}
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
version: ${{ steps.check.outputs.version }}
|
|
20
20
|
changed: ${{ steps.check.outputs.changed }}
|
|
21
21
|
steps:
|
|
22
|
-
- uses: actions/checkout@
|
|
22
|
+
- uses: actions/checkout@v7
|
|
23
23
|
with:
|
|
24
24
|
fetch-depth: 1 # only need HEAD's package.json; the tag check hits the remote
|
|
25
25
|
|
|
@@ -52,9 +52,11 @@ jobs:
|
|
|
52
52
|
runs-on: ubuntu-latest
|
|
53
53
|
strategy:
|
|
54
54
|
matrix:
|
|
55
|
-
|
|
55
|
+
# 24 = npm 11 coverage (18/20/22 ship npm 10). Gates releases on the
|
|
56
|
+
# newer npm so a version-incompatible .npmrc / install can't ship (bug-198).
|
|
57
|
+
node-version: [18, 20, 22, 24]
|
|
56
58
|
steps:
|
|
57
|
-
- uses: actions/checkout@
|
|
59
|
+
- uses: actions/checkout@v7
|
|
58
60
|
with:
|
|
59
61
|
fetch-depth: 0
|
|
60
62
|
- uses: actions/setup-node@v6
|
|
@@ -75,7 +77,7 @@ jobs:
|
|
|
75
77
|
outputs:
|
|
76
78
|
tag: v${{ needs.detect-version.outputs.version }}
|
|
77
79
|
steps:
|
|
78
|
-
- uses: actions/checkout@
|
|
80
|
+
- uses: actions/checkout@v7
|
|
79
81
|
with:
|
|
80
82
|
fetch-depth: 0 # Fetch all history + tags for reliable tag detection
|
|
81
83
|
|
|
@@ -132,7 +134,7 @@ jobs:
|
|
|
132
134
|
needs: [detect-version, create-release]
|
|
133
135
|
runs-on: ubuntu-latest
|
|
134
136
|
steps:
|
|
135
|
-
- uses: actions/checkout@
|
|
137
|
+
- uses: actions/checkout@v7
|
|
136
138
|
|
|
137
139
|
- name: Build extension ZIP
|
|
138
140
|
run: |
|
|
@@ -157,7 +159,7 @@ jobs:
|
|
|
157
159
|
needs: [detect-version, test, create-release]
|
|
158
160
|
runs-on: ubuntu-latest
|
|
159
161
|
steps:
|
|
160
|
-
- uses: actions/checkout@
|
|
162
|
+
- uses: actions/checkout@v7
|
|
161
163
|
- uses: actions/setup-node@v6
|
|
162
164
|
with:
|
|
163
165
|
node-version: 20
|
|
@@ -173,7 +175,7 @@ jobs:
|
|
|
173
175
|
needs: [detect-version, test, create-release]
|
|
174
176
|
runs-on: ubuntu-latest
|
|
175
177
|
steps:
|
|
176
|
-
- uses: actions/checkout@
|
|
178
|
+
- uses: actions/checkout@v7
|
|
177
179
|
- uses: actions/setup-python@v6
|
|
178
180
|
with:
|
|
179
181
|
python-version: '3.12'
|
|
@@ -215,7 +217,7 @@ jobs:
|
|
|
215
217
|
issues: write # reminder issue in THIS repo only — never github/spec-kit
|
|
216
218
|
steps:
|
|
217
219
|
- name: Checkout docguard repo
|
|
218
|
-
uses: actions/checkout@
|
|
220
|
+
uses: actions/checkout@v7
|
|
219
221
|
|
|
220
222
|
- name: Get version and metadata
|
|
221
223
|
id: meta
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Bolt — performance learnings
|
|
2
|
+
|
|
3
|
+
> ⛔ **STOP / DO-NOT-DUPLICATE.** Before opening ANY PR, search existing **open
|
|
4
|
+
> AND closed** PRs. Dozens of duplicate "optimize diffTests / Set cross-compare
|
|
5
|
+
> / precompute toLowerCase / pre-compile RegExp" PRs were closed as noise.
|
|
6
|
+
> **Do NOT open another micro-optimization PR** unless you include a **benchmark
|
|
7
|
+
> showing >20% wall-clock improvement on a realistic workload** (a real repo,
|
|
8
|
+
> not a synthetic loop). A theoretical Big-O note is NOT sufficient justification.
|
|
9
|
+
|
|
10
|
+
## ✅ APPLIED / EVALUATED — the recurring diff & scan optimizations (do NOT re-open)
|
|
11
|
+
|
|
12
|
+
The learnings below have already been applied where they helped, and the
|
|
13
|
+
affected code (`cli/commands/diff.mjs`, `cli/validators/*`, the scanners) was
|
|
14
|
+
substantially **refactored in v0.29–v0.30** — PRs written against the old shape
|
|
15
|
+
no longer apply and just create merge noise.
|
|
16
|
+
|
|
17
|
+
- **Early-return in `checkUntrackedTodos`** — already in place.
|
|
18
|
+
- **Precompute `.toLowerCase()` / `.substring()` outside loops** — applied where
|
|
19
|
+
it mattered; the remaining cases are not hot paths.
|
|
20
|
+
- **Pre-compile `RegExp` outside nested loops** — applied in the scanners.
|
|
21
|
+
|
|
22
|
+
These are recorded as historical context, **not** as standing mandates to
|
|
23
|
+
re-scan for on every run. The DocGuard test suite (898 tests) and CI already
|
|
24
|
+
guard against regressions here.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Palette — UX learnings
|
|
2
|
+
|
|
3
|
+
> ⛔ **STOP.** This repository has **no user-facing UI**: it is a Node.js CLI
|
|
4
|
+
> plus config/docs. There is **no web frontend** (no HTML/CSS/React/Vue) and
|
|
5
|
+
> **no VS Code extension** (it was removed). Palette therefore has nothing to
|
|
6
|
+
> act on here. **Do NOT open UX PRs** — the past "No web UI components" /
|
|
7
|
+
> "No changes required" no-op PRs were closed as noise. Skip this repo.
|
|
8
|
+
|
|
9
|
+
Historical note: earlier learnings referenced a VS Code extension (status-bar
|
|
10
|
+
tooltips, loading spinners). That extension no longer exists in this repo, so
|
|
11
|
+
those notes are obsolete and must not be acted on.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Sentinel — security learnings
|
|
2
|
+
|
|
3
|
+
> ⛔ **STOP / DO-NOT-DUPLICATE.** Before opening ANY PR, search existing **open
|
|
4
|
+
> AND closed** PRs and issues. If the topic below is already covered, do NOT
|
|
5
|
+
> open another PR — dozens of duplicate command-injection PRs were closed as
|
|
6
|
+
> noise. Only open a PR for a **new, unaddressed** finding, with a concrete
|
|
7
|
+
> exploit path or failing test as evidence.
|
|
8
|
+
|
|
9
|
+
## ✅ RESOLVED — Command Injection via execSync (do NOT re-open)
|
|
10
|
+
|
|
11
|
+
**Status: FIXED and CLOSED. Do not open further PRs about `execSync` / command injection.**
|
|
12
|
+
|
|
13
|
+
- The real vulnerability (issue #190) was fixed in **v0.21.1** by switching the
|
|
14
|
+
`specify`-spawning path to `execFileSync` (arguments as an array — no shell
|
|
15
|
+
interpolation).
|
|
16
|
+
- The last shell-interpolated `execSync` (dead code in `setup.mjs`'s unused
|
|
17
|
+
`isCliAvailable`) was removed in **PR #296**.
|
|
18
|
+
- Every remaining `execSync` in `cli/` uses a **static string literal**
|
|
19
|
+
(`git rev-parse …`, `git rev-list --count HEAD`, `git log … | wc -l`) with
|
|
20
|
+
**no variable interpolation** — not injectable. Leave them as-is; do not "fix" them.
|
|
21
|
+
|
|
22
|
+
Historical note (kept for context, not for re-application): interpolating
|
|
23
|
+
`projectDir`/`filePath` into a shell string allowed `;`/`&&`/`||` injection;
|
|
24
|
+
`execFileSync` with an args array prevents it. Lesson recorded — already applied.
|
|
@@ -19,9 +19,12 @@ export OPENAI_API_KEY="dummy-openai-key"
|
|
|
19
19
|
# 2. Ecosystem-Specific Dependency Installation
|
|
20
20
|
# ------------------------------------------
|
|
21
21
|
echo "📦 === Installing Dependencies ==="
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
npm install
|
|
22
|
+
# DocGuard has one exact-pinned runtime dep (@babel/parser). Use `npm ci`, NOT
|
|
23
|
+
# `npm install`: `npm ci` installs strictly from package-lock.json and never
|
|
24
|
+
# rewrites it, so it leaves the working tree clean. `npm install` can re-resolve
|
|
25
|
+
# and rewrite package-lock.json, which dirties the tree and makes Jules abort
|
|
26
|
+
# with "Working tree is dirty" after setup.
|
|
27
|
+
npm ci
|
|
25
28
|
|
|
26
29
|
# ------------------------------------------
|
|
27
30
|
# 3. Ecosystem-Specific Tests & Build Checks
|
|
@@ -31,11 +34,21 @@ echo "🧪 === Running Initial Test & Validation ==="
|
|
|
31
34
|
npm test || echo "⚠️ Tests failed, but continuing..."
|
|
32
35
|
|
|
33
36
|
echo "🏗️ === Verifying Build Integrity ==="
|
|
34
|
-
# Test the primary CLI entrypoint to ensure it is executable
|
|
37
|
+
# Test the primary CLI entrypoint to ensure it is executable.
|
|
38
|
+
# Note: `--version` triggers ensureSkills, which regenerates the tracked
|
|
39
|
+
# `.agent/skills/*.md` files (their `version:` frontmatter tracks the release),
|
|
40
|
+
# so the tree is expected to be dirty right after this — the reset below
|
|
41
|
+
# discards that regeneration.
|
|
35
42
|
node cli/docguard.mjs --version
|
|
36
43
|
|
|
37
44
|
echo "🧹 === Enforcing Git Tree Integrity ==="
|
|
38
|
-
# Jules requires the working directory to be clean after this script runs
|
|
45
|
+
# Jules requires the working directory to be clean after this script runs, and
|
|
46
|
+
# ignores any changes setup makes. `git clean -fd` alone is INSUFFICIENT — it
|
|
47
|
+
# only removes UNTRACKED files, but our churn is in TRACKED files (regenerated
|
|
48
|
+
# .agent/skills). Hard-reset discards tracked modifications; clean -fd sweeps
|
|
49
|
+
# any stray untracked files. `-fd` respects .gitignore, so node_modules (which
|
|
50
|
+
# we just installed) is preserved.
|
|
51
|
+
git reset --hard HEAD
|
|
39
52
|
git clean -fd || true
|
|
40
53
|
|
|
41
54
|
echo "✅ Jules VM Local Environment is Ready!"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Supply-Chain Security Hardening
|
|
2
|
+
# Applied: 2026-05-14T14:19:27Z
|
|
3
|
+
# ignore-scripts: never run a dependency's install/postinstall scripts (the main
|
|
4
|
+
# supply-chain attack vector). Universally supported across npm versions.
|
|
5
|
+
# audit-level: surface moderate-and-above advisories.
|
|
6
|
+
#
|
|
7
|
+
# NOTE: `min-release-age=7d` was removed 2026-07-06 — newer npm (Node 22+/npm 11+,
|
|
8
|
+
# as used by the Glama MCP build image) rejects the "7d" value ("must be numeric")
|
|
9
|
+
# and HARD-FAILS `npm install` in clean environments (Glama, CI, fresh clones).
|
|
10
|
+
# DocGuard's single runtime dependency is exact-pinned, so the maturity window
|
|
11
|
+
# added little; the exact pin + ignore-scripts + audit-level remain the controls.
|
|
12
|
+
ignore-scripts=true
|
|
13
|
+
audit-level=moderate
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# anatomy.md
|
|
2
2
|
|
|
3
|
-
> Auto-maintained by OpenWolf. Last scanned: 2026-07-
|
|
4
|
-
> Files:
|
|
3
|
+
> Auto-maintained by OpenWolf. Last scanned: 2026-07-06T14:46:58.012Z
|
|
4
|
+
> Files: 670 tracked | Anatomy hits: 0 | Misses: 0
|
|
5
5
|
|
|
6
6
|
## ../../../../../../../tmp/
|
|
7
7
|
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
- `.docguardignore` — # Python distribution artifacts (~199 tok)
|
|
18
18
|
- `.DS_Store` (~3818 tok)
|
|
19
19
|
- `.gitignore` — Git ignore rules (~167 tok)
|
|
20
|
-
- `.jules-setup.sh` —
|
|
20
|
+
- `.jules-setup.sh` — ========================================== (~631 tok)
|
|
21
21
|
- `.npmignore` — Development (~76 tok)
|
|
22
22
|
- `.npmrc` — Supply-Chain Security Hardening (~59 tok)
|
|
23
23
|
- `.pre-commit-hooks.yaml` — DocGuard hooks for the pre-commit framework (https://pre-commit.com). (~490 tok)
|
|
24
24
|
- `action.yml` — Declares fs (~7591 tok)
|
|
25
|
-
- `AGENTS.md` — AI Agent Instructions — DocGuard (~
|
|
25
|
+
- `AGENTS.md` — AI Agent Instructions — DocGuard (~1827 tok)
|
|
26
26
|
- `CHANGELOG.md` — Changelog (~45081 tok)
|
|
27
27
|
- `CLAUDE.md` — OpenWolf (~57 tok)
|
|
28
28
|
- `CODE_OF_CONDUCT.md` — Contributor Covenant Code of Conduct (~532 tok)
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
- `docguard-cli-0.23.0.tgz` (~81238 tok)
|
|
33
33
|
- `Dockerfile` — Docker container definition (~204 tok)
|
|
34
34
|
- `DRIFT-LOG.md` — Drift Log (~802 tok)
|
|
35
|
+
- `glama.json` (~29 tok)
|
|
35
36
|
- `LICENSE` — Project license (~286 tok)
|
|
36
37
|
- `package-lock.json` — npm lock file (~617 tok)
|
|
37
38
|
- `package.json` — Node.js package manifest (~459 tok)
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
- `pr_description.md` (~260 tok)
|
|
40
41
|
- `pyproject.toml` — The enforcement tool for Canonical-Driven Development (CDD). Audit, generate, and guard your project (~358 tok)
|
|
41
42
|
- `README.es.md` — 🛡️ DocGuard (~1098 tok)
|
|
42
|
-
- `README.md` — Project documentation (~
|
|
43
|
+
- `README.md` — Project documentation (~8436 tok)
|
|
43
44
|
- `README.pt-BR.md` — 🛡️ DocGuard (~1075 tok)
|
|
44
45
|
- `ROADMAP.md` — DocGuard Roadmap (~2432 tok)
|
|
45
46
|
- `SECURITY.md` — Security Policy (~357 tok)
|
|
@@ -950,14 +951,22 @@
|
|
|
950
951
|
|
|
951
952
|
## .github/workflows/
|
|
952
953
|
|
|
953
|
-
- `
|
|
954
|
+
- `ci.yml` — CI: DocGuard CI (~1041 tok)
|
|
955
|
+
- `release.yml` — CI: Auto Release — Tag, GitHub Release, npm, PyPI (~3434 tok)
|
|
954
956
|
- `sync-speckit-catalog.yml` — CI: Prepare Spec Kit Catalog Submission (Manual) (~1385 tok)
|
|
955
957
|
|
|
958
|
+
## .jules/
|
|
959
|
+
|
|
960
|
+
- `bolt.md` — Bolt — performance learnings (~333 tok)
|
|
961
|
+
- `palette.md` — Palette — UX learnings (~153 tok)
|
|
962
|
+
- `sentinel.md` — Sentinel — security learnings (~329 tok)
|
|
963
|
+
|
|
956
964
|
## cli/
|
|
957
965
|
|
|
958
966
|
- `config.mjs` — DocGuard — configuration loading. (~3265 tok)
|
|
959
967
|
- `docguard.mjs` — DocGuard CLI — The enforcement tool for Canonical-Driven Development (CDD) (~9606 tok)
|
|
960
968
|
- `findings.mjs` — Findings — the structured, LLM-addressable result unit (v0.27). (~9698 tok)
|
|
969
|
+
- `shared-git.mjs` — Shared Git Utilities — single source of truth for `git log` plumbing (~1851 tok)
|
|
961
970
|
- `shared-ignore.mjs` — Shared Ignore Utility — Unified file filtering for all validators. (~4132 tok)
|
|
962
971
|
- `shared-source.mjs` — Shared Source Resolution — Monorepo-aware source discovery. (~4655 tok)
|
|
963
972
|
- `shared.mjs` — Shared constants for DocGuard CLI — colors, profiles, version. (~3496 tok)
|
|
@@ -973,9 +982,10 @@
|
|
|
973
982
|
- `guard.mjs` — Guard Command — Validate project against its canonical documentation (~11608 tok)
|
|
974
983
|
- `init.mjs` — Init Command — Initialize CDD documentation from templates (~7278 tok)
|
|
975
984
|
- `llms.mjs` — llms Command — Generate llms.txt from canonical documentation (~2137 tok)
|
|
976
|
-
- `mcp.mjs` — MCP Command — DocGuard as a Model Context Protocol server (stdio). (~
|
|
985
|
+
- `mcp.mjs` — MCP Command — DocGuard as a Model Context Protocol server (stdio). (~3098 tok)
|
|
977
986
|
- `memory.mjs` — Memory Command — v0.17-P2. (~2957 tok)
|
|
978
|
-
- `score.mjs` — Score Command — Calculate CDD maturity score (0-100) (~
|
|
987
|
+
- `score.mjs` — Score Command — Calculate CDD maturity score (0-100) (~12221 tok)
|
|
988
|
+
- `setup.mjs` — Setup Command — Interactive onboarding wizard for DocGuard (~5280 tok)
|
|
979
989
|
- `sync-tests.mjs` — `docguard sync --tests` — reconcile the TEST-SPEC Source-to-Test Map from disk. (~3191 tok)
|
|
980
990
|
- `sync.mjs` — Sync Command — keep the documentation memory ALWAYS UP TO DATE. (~2371 tok)
|
|
981
991
|
- `trace.mjs` — Trace Command — Generate a requirements traceability matrix (~7746 tok)
|
|
@@ -1025,7 +1035,7 @@
|
|
|
1025
1035
|
|
|
1026
1036
|
## docs-canonical/
|
|
1027
1037
|
|
|
1028
|
-
- `ARCHITECTURE.md` — Architecture (~
|
|
1038
|
+
- `ARCHITECTURE.md` — Architecture (~3029 tok)
|
|
1029
1039
|
- `DATA-MODEL.md` — Data Model (~1668 tok)
|
|
1030
1040
|
- `REQUIREMENTS.md` — Requirements (~673 tok)
|
|
1031
1041
|
- `SURFACE-AUDIT.md` — DocGuard Surface Audit (~5703 tok)
|
|
@@ -1083,6 +1093,7 @@
|
|
|
1083
1093
|
- `field-report-3-deferred.test.mjs` — v0.28 — the detection-gap items deferred from LLM field report #3. (~3122 tok)
|
|
1084
1094
|
- `field-report-3.test.mjs` — v0.27 — LLM field report #3. (~3315 tok)
|
|
1085
1095
|
- `freshness.test.mjs` — runGit: commitOldCode (~3536 tok)
|
|
1096
|
+
- `hooks.test.mjs` — Declares afterFirst (~2420 tok)
|
|
1086
1097
|
- `instruction-audit.test.mjs` — Instruction Audit scanner tests (field report #11 — MemoryLint-inspired). (~2387 tok)
|
|
1087
1098
|
- `inventory.test.mjs` — Declares make (~1048 tok)
|
|
1088
1099
|
- `llms-full-pack.test.mjs` — CLI: run (~1304 tok)
|
|
@@ -3203,6 +3203,97 @@
|
|
|
3203
3203
|
"related_bugs": [],
|
|
3204
3204
|
"occurrences": 2,
|
|
3205
3205
|
"last_seen": "2026-07-03T21:55:57.551Z"
|
|
3206
|
+
},
|
|
3207
|
+
{
|
|
3208
|
+
"id": "bug-196",
|
|
3209
|
+
"timestamp": "2026-07-05T00:00:00.000Z",
|
|
3210
|
+
"error_message": "awesome-mcp-servers PR #9185 added a line containing the literal word 'undefined' to README instead of the DocGuard entry; bot flagged missing-glama, gh pr diff showed '+undefined', grep found no 'docguard'",
|
|
3211
|
+
"file": "(scratchpad node -e insertion script; result pushed to raccioly/awesome-mcp-servers add-docguard)",
|
|
3212
|
+
"root_cause": "Shell env-var vs argv error: `node -e \"...process.env.LINE...\" LINE=\"$LINE\"` passes LINE as a positional ARGV to node, NOT as an environment variable (env assignments must precede the command: `LINE=\"$LINE\" node -e`). So process.env.LINE was undefined and the script inserted the literal string 'undefined'. The invocation exited 0, so the `|| fallback` never ran, and it was committed+pushed unverified.",
|
|
3213
|
+
"fix": "Rebuilt the branch: gh repo sync the fork to upstream, fresh clone, wrote the entry to a FILE (/tmp/dg-entry.txt) and inserted via a python heredoc (no shell-var interpolation), VERIFIED with grep for both the entry and the badge before committing, then force-pushed to the same PR branch (repairs the PR in place — keeps #9185, its thread, history). Lesson: for env→node, put the assignment before the command; and ALWAYS grep-verify a generated file insertion before commit+push.",
|
|
3214
|
+
"tags": [
|
|
3215
|
+
"shell",
|
|
3216
|
+
"env-var",
|
|
3217
|
+
"node",
|
|
3218
|
+
"awesome-mcp-servers",
|
|
3219
|
+
"distribution",
|
|
3220
|
+
"verify-before-push"
|
|
3221
|
+
],
|
|
3222
|
+
"related_bugs": [],
|
|
3223
|
+
"occurrences": 1,
|
|
3224
|
+
"last_seen": "2026-07-05T00:00:00.000Z"
|
|
3225
|
+
},
|
|
3226
|
+
{
|
|
3227
|
+
"id": "bug-197",
|
|
3228
|
+
"timestamp": "2026-07-06T00:51:03.784Z",
|
|
3229
|
+
"error_message": "Incorrect value in code",
|
|
3230
|
+
"file": "cli/commands/setup.mjs",
|
|
3231
|
+
"root_cause": "Had 'node:child_process'",
|
|
3232
|
+
"fix": "Changed to '../shared.mjs'",
|
|
3233
|
+
"tags": [
|
|
3234
|
+
"auto-detected",
|
|
3235
|
+
"wrong-value",
|
|
3236
|
+
"mjs"
|
|
3237
|
+
],
|
|
3238
|
+
"related_bugs": [],
|
|
3239
|
+
"occurrences": 1,
|
|
3240
|
+
"last_seen": "2026-07-06T00:51:03.784Z"
|
|
3241
|
+
},
|
|
3242
|
+
{
|
|
3243
|
+
"id": "bug-198",
|
|
3244
|
+
"timestamp": "2026-07-06T01:30:00.000Z",
|
|
3245
|
+
"error_message": "npm install fails on newer npm (Node 22+/npm 11, Glama MCP build image): 'invalid config min-release-age=\"7d\" ... Must be one of: null, numeric value' -> exit 1. Glama Docker build for the MCP server listing failed at RUN npm install.",
|
|
3246
|
+
"file": ".npmrc",
|
|
3247
|
+
"root_cause": "The committed .npmrc set min-release-age=7d (supply-chain hardening). npm 10.x (local dev) accepts the '7d' duration string, but npm 11+ requires a NUMERIC value and treats the invalid config as fatal, so npm install exits 1 in any clean environment on modern npm (Glama build, CI, fresh contributor clones).",
|
|
3248
|
+
"fix": "Removed min-release-age from .npmrc; kept ignore-scripts=true + audit-level=moderate (universally valid). The one runtime dep is exact-pinned so the maturity window added little. Verified a fresh `git archive | npm install` exits 0. Glama re-Build now succeeds against latest main.",
|
|
3249
|
+
"tags": [
|
|
3250
|
+
"npmrc",
|
|
3251
|
+
"npm",
|
|
3252
|
+
"supply-chain",
|
|
3253
|
+
"build",
|
|
3254
|
+
"glama",
|
|
3255
|
+
"docker",
|
|
3256
|
+
"cross-version"
|
|
3257
|
+
],
|
|
3258
|
+
"related_bugs": [],
|
|
3259
|
+
"occurrences": 1,
|
|
3260
|
+
"last_seen": "2026-07-06T01:30:00.000Z"
|
|
3261
|
+
},
|
|
3262
|
+
{
|
|
3263
|
+
"id": "bug-199",
|
|
3264
|
+
"timestamp": "2026-07-06T01:44:39.966Z",
|
|
3265
|
+
"error_message": "Missing error handling in unknown",
|
|
3266
|
+
"file": ".github/workflows/ci.yml",
|
|
3267
|
+
"root_cause": "Code path had no error handling — exceptions would propagate uncaught",
|
|
3268
|
+
"fix": "Added try/catch block",
|
|
3269
|
+
"tags": [
|
|
3270
|
+
"auto-detected",
|
|
3271
|
+
"error-handling",
|
|
3272
|
+
"yml"
|
|
3273
|
+
],
|
|
3274
|
+
"related_bugs": [],
|
|
3275
|
+
"occurrences": 1,
|
|
3276
|
+
"last_seen": "2026-07-06T01:44:39.966Z"
|
|
3277
|
+
},
|
|
3278
|
+
{
|
|
3279
|
+
"id": "bug-200",
|
|
3280
|
+
"timestamp": "2026-07-06T14:40:55.317Z",
|
|
3281
|
+
"error_message": "ENOTDIR: not a directory, open '/dev/null/pre-commit' — docguard hooks / init --with hooks crashes when git core.hooksPath is /dev/null (Google Jules sandbox VM sets this; also any user who disables hooks that way)",
|
|
3282
|
+
"file": "cli/shared-git.mjs",
|
|
3283
|
+
"root_cause": "getHooksDir() ran `git rev-parse --git-path hooks`, which returns the literal '/dev/null' when core.hooksPath=/dev/null. The code did `if (out) return resolve(dir, out)` — resolving '/dev/null' verbatim as the hooks dir. Callers then wrote `<hooksDir>/pre-commit` = '/dev/null/pre-commit', which is ENOTDIR because /dev/null is a device file, not a directory.",
|
|
3284
|
+
"fix": "Guard the /dev/null pseudo-path: `if (out && out !== '/dev/null') return resolve(dir, out)`. When core.hooksPath is /dev/null we fall through to the existing `.git/hooks` directory check, so hook install/list works normally. Added a regression test in tests/hooks.test.mjs (real git repo + `git config core.hooksPath /dev/null`) asserting getHooksDir falls back to .git/hooks and runHooks writes the hook without ENOTDIR. Independently found by Google Jules (PR #307) — adopted the fix cleanly without the PR's auto-generated .agent/skills noise.",
|
|
3285
|
+
"tags": [
|
|
3286
|
+
"hooks",
|
|
3287
|
+
"git",
|
|
3288
|
+
"dev-null",
|
|
3289
|
+
"core.hooksPath",
|
|
3290
|
+
"ENOTDIR",
|
|
3291
|
+
"jules",
|
|
3292
|
+
"shared-git"
|
|
3293
|
+
],
|
|
3294
|
+
"related_bugs": [],
|
|
3295
|
+
"occurrences": 1,
|
|
3296
|
+
"last_seen": "2026-07-06T14:40:55.317Z"
|
|
3206
3297
|
}
|
|
3207
3298
|
]
|
|
3208
3299
|
}
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
- **Findings migration 24/24 COMPLETE + generate split (2026-07-03, "nothing left behind" batch):** CODES registry = 91 codes / 21 prefixes (STR,CHG,MET,FRS,ENV,TSP,DRF,DSY,DDF,DCV,MDS,TRC,TDO,SCH,ARC,CSY,SPK,XRF,GST,SSY,API,DQ + SEC). Executed via 4 parallel subagents on DISJOINT validator files with findings.mjs (the shared CODES file) reserved to the orchestrator — zero edit collisions; each agent returned code definitions as JSON for central append. Gotchas encoded: (1) several tests strict-deepEqual whole result objects on N/A/early-return paths — those paths must keep the LITERAL legacy shape (no findings/fixes keys); real validation paths return via resultFromFindings. (2) spec-kit's validator file is a re-export SHIM — the implementation (and migration) lives in cli/scanners/speckit.mjs. (3) `generateFromSpecKit` in speckit.mjs has a `results.errors.push` that is NOT a validator contract (generator result {generated,skipped,errors}) — do not "migrate" it. (4) api-surface/doc-quality were fully legacy despite the "partial" label in the review. (5) freshness keeps its array-of-{status,code,doc,message} contract; guard's adapter builds the findings (FRS001–005). generate.mjs split: 1530→559 + writers/generate-io.mjs (142) + writers/doc-generators.mjs (853), pure code motion, generateERDiagram import moved with generateDataModel. Watch-test flake root cause was a fixed 2s poll cap vs CLI startup — fixed with a 15s waitFor deadline, NOT retries. Full suite 835/835 after everything.
|
|
37
37
|
- **v0.29 consolidation executed (2026-07-03):** the review's P0/P1 items are DONE, not pending. `shared-ignore.mjs` now owns the ONE recursive walker (`walkFiles(dir, cb, {ignoreDirs, keepDot, skipDotEntries, onError})` — returns a completeness boolean) and the ONE anchored glob compiler (`compileGlob`: `**\/`, `**`, `*`, `?`, `{a,b}`; `globMatch` and `countGlobFiles` build on it). 16 call sites migrated as thin wrappers preserving exact semantics (13 validators + guard coverage + diff + generate); ignore-side `globToRegex` deliberately left separate (unanchored substring contract, own bug history). `countGlobFiles` returns -1 on incomplete walks (fail-safe; bug-147). Findings tranche 2: structure/doc-sections (STR001–003), changelog (CHG001–003), metrics-consistency (MET001–002) → 7 of 24 validators on findings; messages kept byte-identical so tests pass unchanged (one strict deepEqual updated to expect the additive `findings: []`). CONTRIBUTING now carries the surface rule + findings rule. Full suite 835/835 including the 20 AST tests.
|
|
38
38
|
- **Project-review findings (2026-07-02 sweep — durable facts for future work):** (1) DUPLICATION MAP: three glob→regex implementations exist (`shared-ignore.mjs:155` globToRegex, `shared-ignore.mjs:224` globToMatchRegex, `metrics-consistency.mjs` globToRegExp/countGlob — the third added 2026-06-23 for collections; consolidation candidate) and ~13 validators each carry their own recursive dir-walker + local IGNORE_DIRS copy — a shared `walkFiles` in shared-ignore.mjs is the fix. (2) FINDINGS MIGRATION: only security.mjs fully emits `Finding[]`; api-surface + doc-quality partial; ~20 validators still legacy strings — guard's rich rendering (suggestions/codes/confidence) only benefits 3 validators. (3) `docs-canonical/SURFACE-AUDIT.md` is a HISTORICAL point-in-time audit (2026-05-26, v0.18.1); its recommendations SHIPPED (canonical-sync in v0.19, consolidation in v0.20) — do NOT treat its counts as current truth; README counts are machine-governed by Canonical-Sync since v0.19. It needs a "historical — resolved" banner. (4) STANDARD.md §8 lists 8 validators vs 24 actually run — stale spec section. (5) Size hotspots: generate.mjs 1551 lines, score.mjs 1063, fix.mjs 835, guard.mjs 829 (guard's separation judged reasonable; generate is the split candidate). (6) Packaging/CI is clean: 1 pinned dep (@babel/parser, graceful regex fallback via astTierAvailable), clean tarball, node 18/20/22 matrix, versions auto-synced npm→PyPI; only blemishes are pyproject.toml:8 "Zero dependencies" wording and tracked scratch files test-draft.js/test-metrics.js at root.
|
|
39
|
+
- **Google Jules sandbox VM specifics (2026-07-06, bug-200).** (1) The Jules VM sets `git config core.hooksPath /dev/null` to disable hooks. Any code that resolves the git hooks dir via `git rev-parse --git-path hooks` gets back the literal `/dev/null`; `resolve(dir,'/dev/null')` + `<hooksDir>/pre-commit` = `ENOTDIR`. `getHooksDir` (shared-git.mjs) now guards `out !== '/dev/null'` and falls through to the `.git/hooks` check. Regression test lives in tests/hooks.test.mjs (real repo + `git config core.hooksPath /dev/null`). (2) `.jules-setup.sh` (pasted into Jules dashboard → Repo → Configuration → Initial Setup) MUST leave the working tree clean or Jules aborts "Working tree is dirty" AFTER setup. Two traps: `npm install` re-resolves and rewrites package-lock.json → use `npm ci`; and `docguard --version` runs ensureSkills which regenerates the **tracked** `.agent/skills/*.md` (version-frontmatter churn), so `git clean -fd` (untracked-only) is INSUFFICIENT — end the script with `git reset --hard HEAD && git clean -fd` (`-fd` respects .gitignore so node_modules survives). (3) `.agent/skills/*.md` being tracked-yet-regenerated is the root cause of BOTH the dirty-tree failures and the recurring Jules-PR `.agent` noise — a future option is to gitignore + `git rm --cached` them, but the setup-script reset handles the symptom robustly.
|
|
39
40
|
- **Doc-home resolution is now ONE source of truth: `resolveDocDirs(projectDir, config)` in shared.mjs (Unreleased).** Both the claim scanner (`metrics-consistency.findMarkdownFiles`) and guard's coverage map call it, so "tracked" provably means "actually scanned" — previously the two used different hardcoded dir lists and could disagree (a `docs-implementation/` file showed "tracked" but wasn't scanned). It auto-detects conventional doc-home NAMES that exist (`DEFAULT_DOC_DIRS`: docs/doc/documentation/guides/guide/handbook/manual/wiki/docs-canonical/docs-implementation/extensions + Docusaurus `website/docs`); `config.docs.dirs` EXTENDS (never replaces) that set; `.docguardignore` is how you EXCLUDE a conventional dir. KEY DISTINCTION (reconciles with the wu-whatsappinbox scoping fix): auto-tracking a folder literally named `documentation/` is NOT the same as the arbitrary-subdir walk that was removed — `security/wolf-archive/**/memory.md` is still never scanned. The existing test only asserted arbitrary-subdir exclusion + CONFIGURED-doc inclusion; nothing asserted an unconfigured `documentation/` must be ignored, so auto-detection is consistent with intent, not a reversal.
|
|
40
41
|
|
|
41
42
|
## Do-Not-Repeat
|
|
@@ -66,6 +67,10 @@
|
|
|
66
67
|
|
|
67
68
|
## Decision Log
|
|
68
69
|
|
|
70
|
+
- **2026-07-06 (Jules PR triage policy — established)** — How to handle the Google Jules bot's auto-PRs, applied to a batch of 5 (#299 #300 #305 #306 #307). Rule: judge each on merit against the persona's own evidence bar, adopt real fixes CLEANLY (re-apply in our own commit without Jules's auto-generated `.agent/skills` churn), close the rest with a specific technical reason so the bot/human learns the bar. Verdicts recorded: (a) **#307 hooks /dev/null fix = genuinely correct** (one-line getHooksDir guard + a reproducing test) → adopted cleanly in #308, closed as superseded. (b) **#300 "CRITICAL command injection" = FALSE positive** — every flagged `execSync` target is a static string literal (`which specify`, `git log --since=...`) with no user-input interpolation, so no injection surface; also on a stale base (setup.mjs isCliAvailable already removed in #296). Closed — but harvested the ONE real nugget (score.mjs `git log | wc -l` shell pipe → `execFileSync`, Windows-portable). (c) **#299 Bolt regex hoisting = no benchmark, negative-value** — `new RegExp()` runs once per file (O(files)), never inside the match loop, so the claimed "O(N·M) bottleneck" is fiction; hoisting to a shared stateful `g`-regex + manual `.lastIndex=0` is a footgun for zero measured gain. Closed per Bolt's own ">20% measured benchmark" rule. (d) **#305/#306 = +0/-0 status reports** ("babel up to date", "no flaky tests") — well-behaved (no spurious diff) but shouldn't be PRs; closed with thanks. Meta-lesson: the persona files (.jules/*.md) + AGENTS.md bot rules + the jules-triage.yml workflow set the bar; enforcing it consistently in close-comments is what actually trains the bot down from duplicate-PR floods. Two of five carried real value — Jules is worth keeping, not silencing.
|
|
71
|
+
- **2026-07-05 (distribution flywheel — v0.30.0)** — Executed the full external-distribution push. Durable facts: (1) **Official MCP Registry** publish needs THREE things aligned: `server.json` at repo root (2025-12-11 camelCase schema, name `io.github.raccioly/docguard`), `mcpName` in the PUBLISHED npm package (registry validates the referenced package carries it — so a release must SHIP after adding mcpName; adding it to main isn't enough), and `mcp-publisher login github && mcp-publisher publish` run FROM THE REPO ROLE on the user's Mac (I can't run it — sandbox ≠ their terminal; their GitHub device-auth token is local). Registry is IMMUTABLE per version → "400 duplicate version" means it ALREADY published (success, not failure). Verify via `curl https://registry.modelcontextprotocol.io/v0/servers?search=docguard`. (2) **Glama** listing: submitted via their web form (browser); the quality Score has code-fixable items — `glama.json` (root, `{$schema, maintainers:[gh-user]}`) fixes "No glama.json"; read-only MCP tool `annotations` (readOnlyHint/openWorldHint:false) + `title` serve the tool-def-quality/safety scans; a `Dockerfile` running `docguard mcp` enables their build-based "Glama release" (the big score driver, but the Make-Release clicks are the user's). (3) **awesome-mcp-servers** requires the server live on Glama first (bot label missing-glama→has-glama on re-check after a `synchronize`/force-push); entry format = `[owner/repo](url) [](glama url) 📇 🏠 🍎 🪟 🐧 - desc \`npx cmd\`` (badge AFTER repo link per file convention, NOT after description as the bot template says). (4) **Homebrew tap**: separate public repo `raccioly/homebrew-tap` with `Formula/docguard.rb`; formula url = npm tarball, sha256 must be recomputed per version (`curl -sL <tgz>|shasum -a256`). Bump the tap formula each release. (5) **spec-kit catalog**: one OPEN submission issue at a time (latest version), close superseded ones — established pattern. (6) **PATH shadowing gotcha**: a stale `npm i -g docguard-cli` shadows Homebrew's copy; `docguard --version` shows the FIRST-in-PATH one → `npm i -g docguard-cli@latest` to reconcile.
|
|
72
|
+
|
|
73
|
+
|
|
69
74
|
- **2026-07-03 (competitive scan, post-v0.29)** — Spec-kit catalog now 200+ extensions, ~45 doc/validation-adjacent; presentation is alphabetical with NO ranking — the description field + linked README are the only differentiation. Most entries are thin prompt-packs (SKILL.md workflows); DocGuard is one of few with a real engine (CLI, tests, npm/PyPI, MCP, SARIF, Action). Direct drift-competitors in-catalog: Spec Sync (bgervin), Reconcile (stn1slv), CI Guard (Quratulain-bilal), Coding Standards Drift Control, Golden Demo (behavioral drift), Retrospective (per-feature adherence scoring). IDEAS WORTH ADOPTING: (1) phantom-completion detection à la Verify Tasks ([X] in tasks.md with no implementation evidence — deterministic, fits spec-kit validator); (2) MemoryLint-style agent-instruction drift audit (contradictory/redundant rules WITHIN AGENTS.md/CLAUDE.md — fits extractor+LLM-judgment pattern); (3) per-feature spec-adherence scoring (Retrospective); (4) reviewer TLDR briefing (partially covered by Action pr-comment); (5) we already HAVE Mermaid ER generation (generateERDiagram) but never market it — surface in README. Outside competition unchanged: Mintlify llms.txt-at-scale and Swimm MCP matched by v0.29; hackathon-stage "DriftGuard" clones validate the direction. Catalog description should lead with MCP+SARIF+standalone engine — edit release.yml sync-catalog prefill for future releases; user can edit #286's description field in-form before submitting.
|
|
70
75
|
|
|
71
76
|
- **2026-07-03 (integration roadmap approved — "do it all")** — After the production-readiness batch, user asked "what's missing vs competition (Swimm/Mintlify/Context7/DeepWiki)?" Analysis: detection core is the moat ("green = docs verifiably match code"); the gap is INTEGRATION SURFACE — the tool assumes a human terminal or an agent that shells out. User approved all six: (1) **MCP server** `docguard mcp` — JSON-RPC 2.0 over stdio, pure Node, tools = guard/diagnose/explain/verify_claims/score, MUST be in READ_ONLY_COMMANDS (no ensureSkills side effects); (2) **SARIF 2.1.0** `guard --format sarif` — 1:1 from findings[] codes/locations → GitHub Code Scanning; (3) **Action PR annotations** — ::warning per finding + sticky doc-impact comment via diff --since; (4) **agent-file sync** `docguard agents --sync` — AGENTS.md canonical → CLAUDE.md/.cursor/rules/copilot-instructions/GEMINI.md generated variants with markers (drift-proofing the agent-file family); (5) **llms-full.txt + context pack** (`llms --full`, `memory --pack`); (6) **agent-readability score axis** — display-only (grades stay stable), deterministic metrics (token budget, anchor addressability, marker density). Explicitly REJECTED: LLM calls in core (trust anchor), hosted docs platform, auto-generated wikis. Execution: 6 parallel agents on disjoint files; README/AGENTS/CHANGELOG + docguard.mjs flag wiring reserved to orchestrator (same pattern as the 24-validator migration).
|