docguard-cli 0.37.0__tar.gz → 0.37.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.37.0 → docguard_cli-0.37.1}/.agent/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.37.0/extensions/spec-kit-docguard → docguard_cli-0.37.1/.agent}/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.37.0/extensions/spec-kit-docguard → docguard_cli-0.37.1/.agent}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.37.0/extensions/spec-kit-docguard → docguard_cli-0.37.1/.agent}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/docguard-sync/SKILL.md +2 -2
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.docguard-specs.json +2 -2
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/scripts/speckit-submission.py +49 -21
- docguard_cli-0.37.1/.github/scripts/sync-release-version.mjs +150 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/workflows/scheduled-release.yml +8 -4
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/buglog.json +84 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/cerebrum.md +4 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/CHANGELOG.md +27 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/PKG-INFO +1 -1
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/ROADMAP.md +19 -10
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/docguard.mjs +10 -7
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/extension.yml +1 -1
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.37.0/.agent → docguard_cli-0.37.1/extensions/spec-kit-docguard}/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.37.0/.agent → docguard_cli-0.37.1/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.37.0/.agent → docguard_cli-0.37.1/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +1 -1
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/package-lock.json +2 -2
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/package.json +1 -1
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/pyproject.toml +1 -1
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/server.json +2 -2
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/specs/006-document-lifecycle/tasks.md +9 -4
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/ci/github-actions.yml +1 -1
- docguard_cli-0.37.1/tests/catalog-submission.test.mjs +58 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/commands.test.mjs +10 -4
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/ensure-skills-idempotent.test.mjs +10 -0
- docguard_cli-0.37.1/tests/release-version-sync.test.mjs +66 -0
- docguard_cli-0.37.0/tests/catalog-submission.test.mjs +0 -21
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/architect.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/docguard.fix.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/docguard.guard.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/docguard.review.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/docguard.score.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.analyze.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.checklist.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.clarify.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.constitution.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.implement.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.plan.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.specify.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.tasks.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/commands/speckit.taskstoissues.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-analyze/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-checklist/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-clarify/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-constitution/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-implement/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-plan/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-specify/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-tasks/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.claude/rules/openwolf.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.claude/settings.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.docguard-archive.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.docguard.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.docguardignore +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/dependabot.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/workflows/auto-merge.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/workflows/ci.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/workflows/jules-triage.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/workflows/release.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/workflows/supply-chain.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.github/workflows/sync-speckit-catalog.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.gitignore +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.jules/bolt.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.jules/palette.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.jules/sentinel.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.jules-setup.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.npmignore +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.npmrc +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.pre-commit-hooks.yaml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/extensions/.cache/catalog-metadata.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/extensions/.cache/catalog.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/init-options.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/memory/constitution.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/scripts/bash/common.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/scripts/bash/setup-plan.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/templates/agent-file-template.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/templates/checklist-template.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/templates/constitution-template.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/templates/plan-template.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/templates/spec-template.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.specify/templates/tasks-template.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/OPENWOLF.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/anatomy.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/config.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/cron-manifest.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/cron-state.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/daemon.log +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/designqc-report.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/_session.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/_wrap_up_nudged +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/package.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/post-read.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/post-write.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/pre-read.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/pre-write.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/session-start.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/shared.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/hooks/stop.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/identity.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/memory.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/reframe-frameworks.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/suggestions.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/.wolf/token-ledger.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/AGENTS.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/CLAUDE.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/CODE_OF_CONDUCT.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/COMPARISONS.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/CONTRIBUTING.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/DRIFT-LOG.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/Dockerfile +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/LICENSE +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/PHILOSOPHY.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/PRIVACY.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/README.es.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/README.pt-BR.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/SECURITY.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/STANDARD.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/SUPPLY-CHAIN-AUDIT.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/SUPPORT.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/VALIDATION.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/action.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/assets/bin/docguard +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/assets/demo.gif +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/assets/demo.tape +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/assets/docguard-logo.png +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/agent.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/agents.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/badge.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/ci.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/demo.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/diagnose.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/diff.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/explain.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/feedback.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/fix.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/generate.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/guard.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/hooks.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/impact.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/init.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/llms.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/mcp.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/memory.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/publish.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/report.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/retire.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/score.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/setup.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/specs.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/sync-tests.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/sync.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/trace.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/upgrade.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/verify.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/commands/watch.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/config.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/ensure-skills.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/findings.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/agent-readability.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/api-doc.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/cdk.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/doc-tools.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/document-lifecycle.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/frontend.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/iac.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/instruction-audit.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/integrations.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/inventory.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/js-ast.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/memory-plan.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/project-type.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/py-ast.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/requirement-evidence.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/routes.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/schemas.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/semantic-claims.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/spec-registry.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/scanners/speckit.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-diff.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-doc-roles.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-git.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-ignore.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-ir.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-requirements.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-source.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared-trace-patterns.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/shared.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validator-coverage.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validator-markers.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/api-doc-smells.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/api-surface.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/architecture.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/canonical-sync.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/changelog.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/cross-reference.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/diff-suspicion.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/doc-quality.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/docs-coverage.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/docs-diff.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/docs-sync.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/document-lifecycle.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/drift.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/environment.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/freshness.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/generated-staleness.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/metadata-sync.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/metrics-consistency.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/reference-existence.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/schema-sync.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/security.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/spec-kit.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/spec-registry.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/structure.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/surface-sync.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/test-spec.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/todo-tracking.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/validators/traceability.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/api-reference.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/baseline.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/doc-generators.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/fix-memory.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/generate-io.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/history.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/junit.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/mechanical.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/sarif.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/cli/writers/sections.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/commands/docguard.fix.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/commands/docguard.guard.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/commands/docguard.review.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/commands/docguard.score.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/configs/fastify.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/configs/generic.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/configs/nextjs.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/configs/python.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docguard_cli/__init__.py +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docguard_cli/wrapper.py +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/ai-integration.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/commands.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/configuration.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/doc-sections.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/faq.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/installation.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/profiles.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs/quickstart.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs-canonical/CI-RECIPES.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs-canonical/REQUIREMENTS.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/01-express-api/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/01-express-api/package.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/01-express-api/server.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/02-python-flask/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/02-python-flask/app.py +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/02-python-flask/requirements.txt +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/package.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/src/index.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/tasks.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/examples/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/LICENSE +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/brief.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/fix.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/generate.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/guard.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/init.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/preflight.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/score.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/sync.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/commands/trace.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/glama.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/llms-full.txt +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/llms.txt +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/mcpb/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/mcpb/manifest.template.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/packaging/homebrew/docguard.rb +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/packaging/submissions.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/schemas/docguard-config.schema.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/schemas/docguard-specs.schema.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/smithery.yaml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/specs/006-document-lifecycle/plan.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/specs/006-document-lifecycle/spec.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/ADR.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/AGENTS.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/ARCHITECTURE.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/CHANGELOG.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/CURRENT-STATE.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/DATA-MODEL.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/DEPLOYMENT.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/DRIFT-LOG.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/ENVIRONMENT.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/KNOWN-GOTCHAS.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/REQUIREMENTS.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/ROADMAP.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/RUNBOOKS.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/SECURITY.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/TEST-SPEC.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/TROUBLESHOOTING.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/VENDOR-BUGS.md.template +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/ci/gitlab-component.yml +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/commands/docguard.fix.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/commands/docguard.guard.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/commands/docguard.init.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/commands/docguard.review.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/commands/docguard.update.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/.docguard.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/.env.example +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/AGENTS.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/CHANGELOG.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/DRIFT-LOG.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/README.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/package.json +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/src/api.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/src/notifier.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/src/scheduler.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/templates/demo-fixture/src/worker.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/agent-evidence.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/agent-readability.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/agent.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/agents-check-readonly.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/agents-command.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/agents-sync.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/anchor-autofix.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/api-authority-precision.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/api-doc-smells.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/api-doc.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/api-surface.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/api-write.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/architecture.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/archive.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/b7-node-env-symmetry.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/backup-failure.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/badge.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/baseline.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/canonical-docs-nested-phase2.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/canonical-docs-nested.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/canonical-sync.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/cdk-detection.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/changed-only-scoping.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/changed-only.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/changelog.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/check-coverage.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/ci-reproducibility.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/ci-scaffolder.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/cross-reference.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/demo-command.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/diagnose-review-guidance.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/diff-suspicion.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/doc-quality.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/doc-role-boundaries.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/doc-role-mapping.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/doc-section-synonyms.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/docguardignore.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/docs-coverage-reference-evidence.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/docs-coverage-scope.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/docs-coverage.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/docs-diff.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/docs-sync.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/document-lifecycle.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/drift.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/env-schema-detection.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/environment.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/explain-coverage.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/feedback-contributions.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/field-context-precision.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/field-diff-precision.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/field-report-2-cli.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/field-report-3-deferred.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/field-report-3.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/field-review-clarity.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/fix-memory.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/fix-suppression.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/fixture-projects.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/freshness.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/frontend-deep.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/frontend.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/generate-io.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/generated-staleness.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/guard-classify.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/guard-no-throw.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/history.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/hooks-contract.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/hooks.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/i18n.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/impact.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/init-smart-detection.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/instruction-audit.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/integrations.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/inventory.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/js-ast.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/junit.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/llms-full-pack.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/mcp-http.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/mcp.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/mechanical.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/memory-plan.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/metadata-sync.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/metrics-consistency.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/metrics-dedup.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/monorepo-scanning.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/multi-spec.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/npm-pack-smoke.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/nudge-hook.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/openapi-parse-honesty.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/patch-0.11.2.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/plan-disk-cache.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/profile-flag.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/project-type.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/py-ast.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/reference-existence.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/regenerate-section.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/report.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/requirement-scope.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/route-field-precision.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/routes-express-mounts.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/routes-fastify.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/routes-multilang.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/routes-nextjs-app-router.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/sarif.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/schema-sync-scope.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/schema-sync.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/schemas-multilang.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/schemas.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/scoping-extended.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/score-assurance.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/score-suggestions.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/section-na-markers.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/sections.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/security-init-injection.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/security.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/severity.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/shared-diff.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/shared-git.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/shared-ignore-functions.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/shared-ir.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/shared-source.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/spec-kit-helper-json.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/spec-registry.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/speckit-bugfix.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/speckit-phantom.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/starter-scaffold.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/stress-test.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/structure.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/surface-sync.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/sweep-nudge.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/sync-since.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/sync.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/test-spec.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/todo-tracking.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/trace-features.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/trace-multilang.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/trace-reverse.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/traceability-fixtures.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/traceability-ir.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/traceability.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/upgrade-pr-e2e.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/upgrade-pr.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/upgrade.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/v020-consolidation.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/validator-markers.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/validator-naming.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/verify-change-context.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/version-pin.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/watch-reliability.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/whats-new.test.mjs +0 -0
- {docguard_cli-0.37.0 → docguard_cli-0.37.1}/tests/worker-python-capability.test.mjs +0 -0
|
@@ -6,10 +6,10 @@ description: AI-driven documentation repair with structured research workflow, t
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.
|
|
9
|
+
version: 0.37.1
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.
|
|
12
|
+
<!-- docguard:version: 0.37.1 -->
|
|
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.37.
|
|
10
|
+
version: 0.37.1
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.37.
|
|
13
|
+
<!-- docguard:version: 0.37.1 -->
|
|
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.37.
|
|
9
|
+
version: 0.37.1
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.37.
|
|
12
|
+
<!-- docguard:version: 0.37.1 -->
|
|
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.37.
|
|
9
|
+
version: 0.37.1
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.37.
|
|
12
|
+
<!-- docguard:version: 0.37.1 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Score Skill
|
|
15
15
|
|
|
@@ -4,10 +4,10 @@ description: Keep canonical documentation ALWAYS UP TO DATE. Refreshes code-trut
|
|
|
4
4
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
5
5
|
metadata:
|
|
6
6
|
author: docguard
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.37.1
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
|
-
<!-- docguard:version: 0.
|
|
10
|
+
<!-- docguard:version: 0.37.1 -->
|
|
11
11
|
|
|
12
12
|
# DocGuard Sync Skill
|
|
13
13
|
|
|
@@ -76,11 +76,11 @@
|
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
"path": "specs/006-document-lifecycle/tasks.md",
|
|
79
|
-
"digest": "sha256:
|
|
79
|
+
"digest": "sha256:f1786145b4bb77eab2bfa9c8593186e890bf50ae56236d22d5c136ca7d5ec3b2"
|
|
80
80
|
}
|
|
81
81
|
],
|
|
82
82
|
"taskCompletion": {
|
|
83
|
-
"checked":
|
|
83
|
+
"checked": 15,
|
|
84
84
|
"total": 23
|
|
85
85
|
},
|
|
86
86
|
"implementationEvidence": [],
|
|
@@ -24,10 +24,48 @@ Usage: speckit-submission.py (--url|--body) <version> <download_url>
|
|
|
24
24
|
"""
|
|
25
25
|
import sys
|
|
26
26
|
import json
|
|
27
|
+
from pathlib import Path
|
|
27
28
|
from urllib.parse import urlencode, quote
|
|
28
29
|
|
|
29
30
|
FORM_URL = "https://github.com/github/spec-kit/issues/new"
|
|
30
31
|
TEMPLATE = "extension_submission.yml"
|
|
32
|
+
MANIFEST = Path(__file__).resolve().parents[2] / "extensions/spec-kit-docguard/extension.yml"
|
|
33
|
+
DESCRIPTION = (
|
|
34
|
+
"Documentation integrity for AI-assisted repositories: lifecycle registry, "
|
|
35
|
+
"drift validation, traceability, safe archival, SARIF/JUnit, MCP, GitHub "
|
|
36
|
+
"Actions, and Spec Kit hooks."
|
|
37
|
+
)
|
|
38
|
+
TAGS = ["documentation", "validation", "traceability", "ai-agents", "spec-kit"]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def manifest_inventory(path: Path = MANIFEST):
|
|
42
|
+
"""Read command and hook names from the extension manifest without PyYAML."""
|
|
43
|
+
commands, hooks = [], []
|
|
44
|
+
section = subsection = None
|
|
45
|
+
for raw in path.read_text(encoding="utf-8").splitlines():
|
|
46
|
+
line = raw.split("#", 1)[0].rstrip()
|
|
47
|
+
if not line.strip():
|
|
48
|
+
continue
|
|
49
|
+
content = line.lstrip()
|
|
50
|
+
indent = len(line) - len(content)
|
|
51
|
+
|
|
52
|
+
if indent == 0:
|
|
53
|
+
section = content[:-1] if content.endswith(":") else None
|
|
54
|
+
subsection = None
|
|
55
|
+
continue
|
|
56
|
+
|
|
57
|
+
if section == "provides":
|
|
58
|
+
if indent == 2:
|
|
59
|
+
subsection = content[:-1] if content.endswith(":") else None
|
|
60
|
+
elif (subsection == "commands" and indent == 4
|
|
61
|
+
and content.startswith("- name:")):
|
|
62
|
+
commands.append(content.split(":", 1)[1].strip().strip("\"'"))
|
|
63
|
+
elif section == "hooks" and indent == 2 and content.endswith(":"):
|
|
64
|
+
hooks.append(content[:-1])
|
|
65
|
+
|
|
66
|
+
if not commands or not hooks:
|
|
67
|
+
raise RuntimeError(f"Could not read commands and hooks from {path}")
|
|
68
|
+
return commands, hooks
|
|
31
69
|
|
|
32
70
|
|
|
33
71
|
def changelog_section(version: str) -> str:
|
|
@@ -56,19 +94,13 @@ def changelog_section(version: str) -> str:
|
|
|
56
94
|
|
|
57
95
|
|
|
58
96
|
def build(version: str, download_url: str):
|
|
97
|
+
commands, hooks = manifest_inventory()
|
|
98
|
+
command_count, hook_count = len(commands), len(hooks)
|
|
59
99
|
catalog_entry = {
|
|
60
100
|
"docguard": {
|
|
61
101
|
"name": "DocGuard — CDD Enforcement",
|
|
62
102
|
"id": "docguard",
|
|
63
|
-
"description":
|
|
64
|
-
"A documentation-integrity engine with an MCP server, "
|
|
65
|
-
"SARIF/JUnit output, and a deterministic zero-LLM core. "
|
|
66
|
-
"Validates, scores, and traces documentation against code — "
|
|
67
|
-
"27 validators, stable finding codes, adoption baseline for "
|
|
68
|
-
"legacy repos, compliance-evidence reports, GitHub Action "
|
|
69
|
-
"with PR annotations, spec-kit hooks. Pure Node.js, one "
|
|
70
|
-
"pinned dep."
|
|
71
|
-
),
|
|
103
|
+
"description": DESCRIPTION,
|
|
72
104
|
"author": "raccioly",
|
|
73
105
|
"version": version,
|
|
74
106
|
"download_url": download_url,
|
|
@@ -88,11 +120,8 @@ def build(version: str, download_url: str):
|
|
|
88
120
|
{"name": "node", "version": ">=18.0.0", "required": True}
|
|
89
121
|
],
|
|
90
122
|
},
|
|
91
|
-
"provides": {"commands":
|
|
92
|
-
"tags":
|
|
93
|
-
"documentation", "validation", "quality", "cdd",
|
|
94
|
-
"traceability", "ai-agents", "enforcement", "spec-kit",
|
|
95
|
-
],
|
|
123
|
+
"provides": {"commands": command_count, "hooks": hook_count},
|
|
124
|
+
"tags": TAGS,
|
|
96
125
|
"verified": False,
|
|
97
126
|
"downloads": 0,
|
|
98
127
|
"stars": 0,
|
|
@@ -120,17 +149,16 @@ def build(version: str, download_url: str):
|
|
|
120
149
|
"- node (>=18.0.0) - required\n"
|
|
121
150
|
"- npx - required\n"
|
|
122
151
|
"- specify - optional (auto-initializes the SDD workflow during docguard init)"),
|
|
123
|
-
("commands-count", "Number of Commands",
|
|
124
|
-
("hooks-count", "Number of Hooks (optional)",
|
|
125
|
-
("tags", "Tags",
|
|
126
|
-
"documentation, validation, quality, cdd, traceability, ai-agents, enforcement, spec-kit"),
|
|
152
|
+
("commands-count", "Number of Commands", str(command_count)),
|
|
153
|
+
("hooks-count", "Number of Hooks (optional)", str(hook_count)),
|
|
154
|
+
("tags", "Tags", ", ".join(TAGS)),
|
|
127
155
|
("features", "Key Features",
|
|
128
156
|
"- Configurable quality gate with severity triage and a remediation plan\n"
|
|
129
157
|
"- AI-driven documentation repair with codebase research and validation loops\n"
|
|
130
158
|
"- Cross-document semantic consistency analysis (read-only review)\n"
|
|
131
159
|
"- CDD maturity score with an ROI-based improvement roadmap\n"
|
|
132
160
|
"- Reverse-engineers canonical docs from an existing codebase\n"
|
|
133
|
-
"- spec-kit workflow hooks (
|
|
161
|
+
f"- spec-kit workflow hooks ({', '.join(hooks)})"),
|
|
134
162
|
("testing", "Testing Checklist", None),
|
|
135
163
|
("requirements", "Submission Requirements", None),
|
|
136
164
|
("testing-details", "Testing Details",
|
|
@@ -139,8 +167,8 @@ def build(version: str, download_url: str):
|
|
|
139
167
|
f"specify extension add docguard --from {download_url}\n```\n\n"
|
|
140
168
|
"**Scenarios to verify for this release:**\n"
|
|
141
169
|
"1. Extension installs from the release ZIP without manifest validation errors.\n"
|
|
142
|
-
"2. All
|
|
143
|
-
"3.
|
|
170
|
+
f"2. All {command_count} declared `speckit.docguard.*` commands resolve and run.\n"
|
|
171
|
+
f"3. All {hook_count} declared workflow hooks register against spec-kit's lifecycle."),
|
|
144
172
|
("example-usage", "Example Usage",
|
|
145
173
|
"```bash\n"
|
|
146
174
|
"# Install the extension\n"
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Synchronize every active release surface with package.json.
|
|
5
|
+
*
|
|
6
|
+
* The allowlist is deliberate: release metadata and copyable install templates
|
|
7
|
+
* must move together, while historical references in changelogs, roadmaps, and
|
|
8
|
+
* completed specifications must remain untouched.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { existsSync, readFileSync, readdirSync, unlinkSync } from 'node:fs';
|
|
12
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
14
|
+
import { safeWrite } from '../../cli/writers/generate-io.mjs';
|
|
15
|
+
|
|
16
|
+
const SCRIPT_PATH = fileURLToPath(import.meta.url);
|
|
17
|
+
const STABLE_VERSION = /^\d+\.\d+\.\d+$/;
|
|
18
|
+
|
|
19
|
+
function replaceRequired(content, pattern, replacement, label, expected = 1) {
|
|
20
|
+
let count = 0;
|
|
21
|
+
const next = content.replace(pattern, (...args) => {
|
|
22
|
+
count++;
|
|
23
|
+
return typeof replacement === 'function' ? replacement(...args) : replacement;
|
|
24
|
+
});
|
|
25
|
+
if (count !== expected) {
|
|
26
|
+
throw new Error(`${label}: expected ${expected} version field${expected === 1 ? '' : 's'}, found ${count}`);
|
|
27
|
+
}
|
|
28
|
+
return next;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function stageText(staged, root, relPath, transform) {
|
|
32
|
+
const fullPath = resolve(root, relPath);
|
|
33
|
+
if (!existsSync(fullPath)) throw new Error(`${relPath}: required release surface is missing`);
|
|
34
|
+
const current = readFileSync(fullPath, 'utf8');
|
|
35
|
+
staged.set(fullPath, transform(current));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function stageJson(staged, root, relPath, transform) {
|
|
39
|
+
stageText(staged, root, relPath, content => {
|
|
40
|
+
let value;
|
|
41
|
+
try { value = JSON.parse(content); } catch (error) {
|
|
42
|
+
throw new Error(`${relPath}: invalid JSON: ${error.message}`);
|
|
43
|
+
}
|
|
44
|
+
transform(value);
|
|
45
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function writeWithoutReleaseBackup(filePath, content) {
|
|
50
|
+
const previous = readFileSync(filePath, 'utf8');
|
|
51
|
+
if (previous === content) return false;
|
|
52
|
+
safeWrite(filePath, content);
|
|
53
|
+
// Git is the durable backup for these tracked release surfaces. Remove the
|
|
54
|
+
// temporary .bak only after safeWrite succeeds so it cannot enter a release.
|
|
55
|
+
const backup = `${filePath}.bak`;
|
|
56
|
+
if (existsSync(backup)) unlinkSync(backup);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function syncReleaseVersion(root = process.cwd()) {
|
|
61
|
+
const packagePath = resolve(root, 'package.json');
|
|
62
|
+
const pkg = JSON.parse(readFileSync(packagePath, 'utf8'));
|
|
63
|
+
const version = pkg.version;
|
|
64
|
+
if (!STABLE_VERSION.test(version || '')) {
|
|
65
|
+
throw new Error(`package.json: expected a stable x.y.z version, got ${JSON.stringify(version)}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const staged = new Map();
|
|
69
|
+
|
|
70
|
+
stageText(staged, root, 'pyproject.toml', content => replaceRequired(
|
|
71
|
+
content,
|
|
72
|
+
/(\[project\][\s\S]*?^version\s*=\s*")[^"\n]+(")/m,
|
|
73
|
+
(_match, before, after) => `${before}${version}${after}`,
|
|
74
|
+
'pyproject.toml [project].version',
|
|
75
|
+
));
|
|
76
|
+
|
|
77
|
+
stageJson(staged, root, 'server.json', server => {
|
|
78
|
+
if (!Array.isArray(server.packages)) throw new Error('server.json: packages must be an array');
|
|
79
|
+
const npmPackages = server.packages.filter(item => item?.registryType === 'npm' && item?.identifier === pkg.name);
|
|
80
|
+
if (npmPackages.length !== 1) {
|
|
81
|
+
throw new Error(`server.json: expected one npm package for ${pkg.name}, found ${npmPackages.length}`);
|
|
82
|
+
}
|
|
83
|
+
server.version = version;
|
|
84
|
+
npmPackages[0].version = version;
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
stageText(staged, root, 'extensions/spec-kit-docguard/extension.yml', content => replaceRequired(
|
|
88
|
+
content,
|
|
89
|
+
/^ version:\s*["'][^"'\n]+["']/m,
|
|
90
|
+
` version: "${version}"`,
|
|
91
|
+
'extensions/spec-kit-docguard/extension.yml extension.version',
|
|
92
|
+
));
|
|
93
|
+
|
|
94
|
+
for (const relPath of [
|
|
95
|
+
'templates/ci/github-actions.yml',
|
|
96
|
+
'extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml',
|
|
97
|
+
]) {
|
|
98
|
+
stageText(staged, root, relPath, content => replaceRequired(
|
|
99
|
+
content,
|
|
100
|
+
/docguard-cli@\d+\.\d+\.\d+/g,
|
|
101
|
+
`docguard-cli@${version}`,
|
|
102
|
+
`${relPath} DocGuard CLI pin`,
|
|
103
|
+
));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const skillsRoot = resolve(root, 'extensions/spec-kit-docguard/skills');
|
|
107
|
+
if (!existsSync(skillsRoot)) throw new Error('extensions/spec-kit-docguard/skills: required release surface is missing');
|
|
108
|
+
const skillFiles = readdirSync(skillsRoot, { withFileTypes: true })
|
|
109
|
+
.filter(entry => entry.isDirectory())
|
|
110
|
+
.map(entry => join(skillsRoot, entry.name, 'SKILL.md'))
|
|
111
|
+
.filter(existsSync)
|
|
112
|
+
.sort();
|
|
113
|
+
if (skillFiles.length === 0) throw new Error('extensions/spec-kit-docguard/skills: no SKILL.md files found');
|
|
114
|
+
|
|
115
|
+
for (const fullPath of skillFiles) {
|
|
116
|
+
const relPath = relative(root, fullPath);
|
|
117
|
+
const current = readFileSync(fullPath, 'utf8');
|
|
118
|
+
let next = replaceRequired(
|
|
119
|
+
current,
|
|
120
|
+
/^ version:\s*\d+\.\d+\.\d+$/m,
|
|
121
|
+
` version: ${version}`,
|
|
122
|
+
`${relPath} metadata.version`,
|
|
123
|
+
);
|
|
124
|
+
next = replaceRequired(
|
|
125
|
+
next,
|
|
126
|
+
/<!-- docguard:version:\s*\d+\.\d+\.\d+ -->/g,
|
|
127
|
+
`<!-- docguard:version: ${version} -->`,
|
|
128
|
+
`${relPath} docguard version marker`,
|
|
129
|
+
);
|
|
130
|
+
staged.set(fullPath, next);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// All parsing and cardinality checks finish before the first write. A missing
|
|
134
|
+
// or duplicated field therefore leaves every release surface untouched.
|
|
135
|
+
const changed = [];
|
|
136
|
+
for (const [filePath, content] of staged) {
|
|
137
|
+
if (writeWithoutReleaseBackup(filePath, content)) changed.push(relative(root, filePath));
|
|
138
|
+
}
|
|
139
|
+
return { version, changed };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (process.argv[1] && resolve(process.argv[1]) === SCRIPT_PATH) {
|
|
143
|
+
try {
|
|
144
|
+
const result = syncReleaseVersion();
|
|
145
|
+
console.log(`Synchronized ${result.changed.length} release surfaces to v${result.version}.`);
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error(`Release version sync failed: ${error.message}`);
|
|
148
|
+
process.exitCode = 1;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -111,9 +111,13 @@ jobs:
|
|
|
111
111
|
awk '/^## \[Unreleased\]/ { print; print ""; while ((getline line < "/tmp/entry.md") > 0) print line; next } { print }' \
|
|
112
112
|
CHANGELOG.md > /tmp/CHANGELOG.new && mv /tmp/CHANGELOG.new CHANGELOG.md
|
|
113
113
|
|
|
114
|
-
#
|
|
115
|
-
#
|
|
116
|
-
|
|
114
|
+
# Synchronize every active publication surface from package.json.
|
|
115
|
+
# This is fail-closed: missing or duplicated fields stop the release
|
|
116
|
+
# before any release metadata is written.
|
|
117
|
+
node .github/scripts/sync-release-version.mjs
|
|
118
|
+
# The extension skills are authoritative. Refresh their checked-in
|
|
119
|
+
# `.agent` copies before the parity test and release commit.
|
|
120
|
+
node --input-type=module -e "import { ensureSkills } from './cli/ensure-skills.mjs'; ensureSkills(process.cwd(), { format: 'json', noSpecKit: true });"
|
|
117
121
|
|
|
118
122
|
echo "NEW_VERSION=$NEW" >> "$GITHUB_ENV"
|
|
119
123
|
|
|
@@ -148,7 +152,7 @@ jobs:
|
|
|
148
152
|
git config user.name "github-actions[bot]"
|
|
149
153
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
150
154
|
git checkout -b "$BRANCH"
|
|
151
|
-
git add package.json package-lock.json CHANGELOG.md extensions/ .agent/ 2>/dev/null || true
|
|
155
|
+
git add package.json package-lock.json pyproject.toml server.json CHANGELOG.md templates/ extensions/ .agent/ 2>/dev/null || true
|
|
152
156
|
git commit -m "release: v${NEW_VERSION} — automated weekly batch
|
|
153
157
|
|
|
154
158
|
Cut by .github/workflows/scheduled-release.yml. Publishing itself is
|
|
@@ -5400,6 +5400,90 @@
|
|
|
5400
5400
|
"related_bugs": [],
|
|
5401
5401
|
"occurrences": 1,
|
|
5402
5402
|
"last_seen": "2026-09-14T17:55:00.000Z"
|
|
5403
|
+
},
|
|
5404
|
+
{
|
|
5405
|
+
"id": "bug-332",
|
|
5406
|
+
"timestamp": "2026-09-14T19:45:00.000Z",
|
|
5407
|
+
"error_message": "The roadmap left the merged v0.37.0 delivery task unchecked and grouped unfinished completion work under R1",
|
|
5408
|
+
"file": "ROADMAP.md; specs/006-document-lifecycle/tasks.md",
|
|
5409
|
+
"root_cause": "The active specification spans several increments, but release completion did not update the task ledger or separate the shipped lifecycle foundation from the next reconciliation milestone",
|
|
5410
|
+
"fix": "Mark the reviewed release task complete, preserve unfinished task identities, and move completion, rollback, and post-hoc reconciliation work under R2",
|
|
5411
|
+
"tags": ["documentation-drift", "roadmap", "release", "lifecycle"],
|
|
5412
|
+
"related_bugs": [],
|
|
5413
|
+
"occurrences": 1,
|
|
5414
|
+
"last_seen": "2026-09-14T19:45:00.000Z"
|
|
5415
|
+
},
|
|
5416
|
+
{
|
|
5417
|
+
"id": "bug-333",
|
|
5418
|
+
"timestamp": "2026-09-14T19:45:00.000Z",
|
|
5419
|
+
"error_message": "OpenWolf bug-log append script failed with TypeError: bugs.some is not a function",
|
|
5420
|
+
"file": ".wolf/buglog.json",
|
|
5421
|
+
"root_cause": "The script assumed the file root was an array, but the repository schema wraps entries in a versioned bugs array",
|
|
5422
|
+
"fix": "Inspect the envelope first and append through the bugs property while preserving the version field and existing formatting",
|
|
5423
|
+
"tags": ["openwolf", "tooling", "operator-error"],
|
|
5424
|
+
"related_bugs": [],
|
|
5425
|
+
"occurrences": 1,
|
|
5426
|
+
"last_seen": "2026-09-14T19:45:00.000Z"
|
|
5427
|
+
},
|
|
5428
|
+
{
|
|
5429
|
+
"id": "bug-334",
|
|
5430
|
+
"timestamp": "2026-09-14T19:45:00.000Z",
|
|
5431
|
+
"error_message": "Guard summary shell failed with zsh: read-only variable: status",
|
|
5432
|
+
"file": "session shell commands",
|
|
5433
|
+
"root_cause": "The shell wrapper reused zsh's reserved status parameter for an exit code",
|
|
5434
|
+
"fix": "Use a task-specific variable such as guard_exit for captured command status",
|
|
5435
|
+
"tags": ["shell", "tooling", "operator-error"],
|
|
5436
|
+
"related_bugs": [],
|
|
5437
|
+
"occurrences": 1,
|
|
5438
|
+
"last_seen": "2026-09-14T19:45:00.000Z"
|
|
5439
|
+
},
|
|
5440
|
+
{
|
|
5441
|
+
"id": "bug-335",
|
|
5442
|
+
"timestamp": "2026-09-14T20:05:00.000Z",
|
|
5443
|
+
"error_message": "A repository search failed with zsh: unmatched quote",
|
|
5444
|
+
"file": "session shell commands",
|
|
5445
|
+
"root_cause": "A compound ripgrep expression mixed shell quotes and a literal backtick in one command string",
|
|
5446
|
+
"fix": "Split the search into simple single-quoted patterns without shell-sensitive tokens",
|
|
5447
|
+
"tags": ["shell", "tooling", "operator-error"],
|
|
5448
|
+
"related_bugs": ["bug-327"],
|
|
5449
|
+
"occurrences": 1,
|
|
5450
|
+
"last_seen": "2026-09-14T20:05:00.000Z"
|
|
5451
|
+
},
|
|
5452
|
+
{
|
|
5453
|
+
"id": "bug-336",
|
|
5454
|
+
"timestamp": "2026-09-14T20:05:00.000Z",
|
|
5455
|
+
"error_message": "A multi-file patch failed because one expected test context did not match",
|
|
5456
|
+
"file": "session apply_patch operation",
|
|
5457
|
+
"root_cause": "The patch coupled independent file edits into one context-sensitive operation",
|
|
5458
|
+
"fix": "Apply independent file changes separately and verify each exact context before continuing",
|
|
5459
|
+
"tags": ["patching", "tooling", "operator-error"],
|
|
5460
|
+
"related_bugs": [],
|
|
5461
|
+
"occurrences": 1,
|
|
5462
|
+
"last_seen": "2026-09-14T20:05:00.000Z"
|
|
5463
|
+
},
|
|
5464
|
+
{
|
|
5465
|
+
"id": "bug-337",
|
|
5466
|
+
"timestamp": "2026-09-14T20:05:00.000Z",
|
|
5467
|
+
"error_message": "The full test suite changed five checked-in agent skills during a documentation-only release correction",
|
|
5468
|
+
"file": "cli/docguard.mjs; .github/workflows/scheduled-release.yml",
|
|
5469
|
+
"root_cause": "Read-only hooks --list and fix invocations could enter setup, while the release workflow updated extension skill versions without refreshing their checked-in agent copies",
|
|
5470
|
+
"fix": "Bypass setup for read-only inventory and fix commands, synchronize managed agent skills during release preparation, and enforce byte-identical copies with regression tests",
|
|
5471
|
+
"tags": ["read-only", "release", "skills", "side-effect", "regression"],
|
|
5472
|
+
"related_bugs": ["bug-317", "bug-318", "bug-331"],
|
|
5473
|
+
"occurrences": 1,
|
|
5474
|
+
"last_seen": "2026-09-14T20:05:00.000Z"
|
|
5475
|
+
},
|
|
5476
|
+
{
|
|
5477
|
+
"id": "bug-338",
|
|
5478
|
+
"timestamp": "2026-09-14T18:09:28.000Z",
|
|
5479
|
+
"error_message": "The scheduled v0.37.1 release stopped because package.json was bumped while CI templates, PyPI metadata, and MCP registry metadata remained on v0.37.0",
|
|
5480
|
+
"file": ".github/workflows/scheduled-release.yml; templates/ci/github-actions.yml; extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml; pyproject.toml; server.json",
|
|
5481
|
+
"root_cause": "Release preparation delegated only Markdown and extension metadata to the general DocGuard fixer, leaving non-Markdown publication surfaces outside a single explicit release transaction",
|
|
5482
|
+
"fix": "Add a fail-closed release synchronizer with an explicit active-surface allowlist, validate field cardinality before the first write, refresh managed agent copies afterward, and regression-test successful and aborted synchronization",
|
|
5483
|
+
"tags": ["release", "automation", "version-sync", "publication", "regression"],
|
|
5484
|
+
"related_bugs": ["bug-331", "bug-337"],
|
|
5485
|
+
"occurrences": 1,
|
|
5486
|
+
"last_seen": "2026-09-14T18:09:28.000Z"
|
|
5403
5487
|
}
|
|
5404
5488
|
]
|
|
5405
5489
|
}
|
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
|
|
11
11
|
- On field/bug reports, Ricardo prefers **"triage & verify first"** over jumping to fixes — confirm each item against current code (reproduce where possible) and explicitly challenge the report's own stated root-cause before writing any fix. (Chosen on the websec-validator field report, 2026-06-02.)
|
|
12
12
|
- **2026-09-14** — Hold lifecycle releases until the authority model, false-positive boundary, and interoperability with current Spec Kit extensions have been independently challenged. The user wants the spec tracker to become the daily source of lifecycle truth, with release only after meaningful, tested improvement.
|
|
13
|
+
- **2026-09-14** — Do not call a release cycle finished while post-tag fixes remain on `main`, and keep roadmap milestones visibly separated into shipped and future work. Feature foundations use a minor release; fixes merged after that tag require a patch release before updating the external catalog submission.
|
|
13
14
|
|
|
14
15
|
## Key Learnings
|
|
15
16
|
|
|
17
|
+
- **2026-09-14 — Release-generated skill parity:** The scheduled release updates extension skill metadata through `fix --write`, whose headless mode correctly skips setup. It must then run an explicit managed-agent sync before tests and staging; otherwise `.agent/skills` remains one release behind. A repository parity test should compare every managed copy byte-for-byte with its extension source.
|
|
16
18
|
- **2026-09-14 — Lifecycle control plane:** Active approved prose owns behavioral intent; `.docguard-specs.json` owns reviewed lifecycle, lineage, scope, and persistence policy while regenerating observed evidence deterministically. Approval, delivery, context, retirement reason, storage, and persistence model are separate dimensions. Use immutable `specId#requirementId` identities and preserve retired tombstones; path-qualified IDs are only a migration format.
|
|
17
19
|
- **2026-09-14 — Retirement is stricter than completion:** Checked tasks and `Status: Completed` are review signals. Verification requires exact-revision implementation/test evidence plus reconciled canonical outcomes. Retirement additionally requires a retained Git ref, clean replacement/evidence docs, no live backreferences, a compatible persistence model, and fresh context. The public verb is `retire` because Spec Kit Archive already means consolidation.
|
|
18
20
|
- **2026-09-14 — Spec Kit ownership:** Core deliberately leaves persistence policy open and hooks are agent-mediated. DocGuard owns deterministic evidence, validation, registry freshness, and context hygiene; community Archive/Reconcile extensions own agent-authored consolidation. Use hooks as prompts and CLI/CI as the enforcement boundary. Prove a generic lifecycle/lineage contract in DocGuard before proposing it upstream on issue #620.
|
|
@@ -144,3 +146,5 @@
|
|
|
144
146
|
- **2026-09-14 — Badge test isolation:** legacy badge aliases run init and may refresh skills even when testing output. Keep their fixtures outside the source checkout; use the current Node executable and prevent global setup tooling from entering tests. Read-only audit/score tests remain separate from mutating alias tests.
|
|
145
147
|
|
|
146
148
|
- **2026-09-14 — Scoped requirement identity:** validator and feature scoring share document-qualified definitions and positive reference resolution. Bare IDs resolve only when unique; an invalid qualifier never falls back. Repeated definitions in one document collapse; cross-document IDs remain separate. Qualified paths are repository-relative with forward slashes.
|
|
149
|
+
|
|
150
|
+
- **2026-09-14 — Release versions are a transaction:** package.json is the source of truth, but a release is not coherent until PyPI, MCP registry, Spec Kit metadata, skill markers, managed agent copies, and copyable CI pins match it. Synchronize only an explicit allowlist of active publication surfaces, validate every expected field before writing, and leave historical version references untouched.
|
|
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.37.1] - 2026-09-14
|
|
11
|
+
|
|
12
|
+
Automated weekly release — batches everything merged since `v0.37.0`.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- fix: synchronize release version surfaces (#354)
|
|
17
|
+
- fix: clarify lifecycle scope and harden patch releases (#353)
|
|
18
|
+
- fix: enforce Spec Kit catalog form bounds (#352)
|
|
19
|
+
- fix: derive Spec Kit catalog inventory from manifest (#351)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Spec Kit catalog submissions now derive command and hook counts from the
|
|
25
|
+
extension manifest, avoid hardcoded validator totals, and enforce the form's
|
|
26
|
+
description and tag bounds, preventing stale or invalid release reminders.
|
|
27
|
+
- Lifecycle planning now marks the merged v0.37.0 delivery complete and separates
|
|
28
|
+
its released registry/retirement contract from the still-planned completion
|
|
29
|
+
transaction and post-hoc reconciliation work.
|
|
30
|
+
- `docguard hooks --list` and non-writing `docguard fix` invocations no longer
|
|
31
|
+
enter setup or refresh agent files. Automated releases now synchronize the
|
|
32
|
+
checked-in `.agent` skills with the released extension before verification.
|
|
33
|
+
- Automated releases now update PyPI metadata, MCP registry metadata, Spec Kit
|
|
34
|
+
metadata, AI skill markers, and both copyable CI pins through one fail-closed
|
|
35
|
+
synchronizer before testing or opening a release pull request.
|
|
36
|
+
|
|
10
37
|
## [0.37.0] - 2026-09-14
|
|
11
38
|
|
|
12
39
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: docguard-cli
|
|
3
|
-
Version: 0.37.
|
|
3
|
+
Version: 0.37.1
|
|
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
|
|
@@ -13,7 +13,7 @@ structural score is useful, but it is not proof that arbitrary prose is true.
|
|
|
13
13
|
|
|
14
14
|
## Current priorities
|
|
15
15
|
|
|
16
|
-
### R1 — Document lifecycle
|
|
16
|
+
### R1 — Document lifecycle foundation (released in v0.37.0)
|
|
17
17
|
|
|
18
18
|
Give specifications and planning documents an explicit end of life.
|
|
19
19
|
|
|
@@ -26,7 +26,6 @@ Give specifications and planning documents an explicit end of life.
|
|
|
26
26
|
- [x] Add lifecycle status validation for `active`, `completed`, `superseded`,
|
|
27
27
|
and `archived`; task completion and `Completed` artifact maturity remain
|
|
28
28
|
review signals rather than proof of retirement.
|
|
29
|
-
- [ ] Add optional Spec Kit hooks that check archive readiness after convergence.
|
|
30
29
|
- [x] Add `.docguard-specs.json`, a committed lifecycle control plane. Reviewed
|
|
31
30
|
approval, delivery, context, storage, persistence policy, lineage, and scope
|
|
32
31
|
are authoritative; requirement references and
|
|
@@ -46,19 +45,29 @@ Give specifications and planning documents an explicit end of life.
|
|
|
46
45
|
- [x] Give every active spec an immutable metadata ID; use
|
|
47
46
|
`specId#requirementId` for completion evidence and preserve retired identities
|
|
48
47
|
as registry tombstones so bare IDs cannot rebind.
|
|
49
|
-
- [ ] Add an `implemented → verified` completion transaction that appends a
|
|
50
|
-
bounded outcome record, refreshes mechanical facts, records reconciliation,
|
|
51
|
-
and regenerates active AI context.
|
|
52
48
|
- [x] Cross-check spec storage state against `.docguard-archive.json`. The
|
|
53
49
|
archive manifest owns document recovery; the spec registry owns governance,
|
|
54
50
|
and disagreement between them blocks a transition.
|
|
51
|
+
- [x] Merge the reviewed implementation in PR #349 and publish the verified
|
|
52
|
+
npm, PyPI, GHCR, MCPB, and Spec Kit extension artifacts as v0.37.0.
|
|
53
|
+
|
|
54
|
+
R1 deliberately shipped the registry and safe-retirement boundary before adding
|
|
55
|
+
completion writes. Transaction rollback, status adapters, monorepo identity,
|
|
56
|
+
restore/re-retire handling, and reviewed completion transitions remain R2 work;
|
|
57
|
+
they are not part of the v0.37.0 contract.
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
implementation evidence, additional status formats, monorepo/workspace identity,
|
|
58
|
-
restore and re-retire event handling, and Spec Kit lifecycle fixtures. Every
|
|
59
|
-
detector change needs a stale example and a neighboring current example.
|
|
59
|
+
### R2 — Completion and post-hoc reconciliation (planned)
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
Close the lifecycle loop without allowing current code to silently redefine
|
|
62
|
+
approved intent.
|
|
63
|
+
|
|
64
|
+
- [ ] Add staged registry/recovery transactions with rollback before any command
|
|
65
|
+
can update both lifecycle ledgers.
|
|
66
|
+
- [ ] Add an `implemented → verified` completion transaction that appends a
|
|
67
|
+
bounded outcome record, refreshes mechanical facts, records the exact
|
|
68
|
+
reconciliation revision, and regenerates active AI context.
|
|
69
|
+
- [ ] Add optional Spec Kit hooks that check archive readiness after convergence
|
|
70
|
+
or verification; CLI and CI remain the enforcement boundary.
|
|
62
71
|
|
|
63
72
|
Detect post-hoc implementation changes without silently redefining approved
|
|
64
73
|
intent. `docguard reconcile --since <ref>` will classify affected material:
|
|
@@ -662,10 +662,11 @@ async function main() {
|
|
|
662
662
|
// same way runGuardInternal sees everything else.
|
|
663
663
|
if (flags.noBaseline) config.baseline = false;
|
|
664
664
|
|
|
665
|
-
// Commands
|
|
666
|
-
//
|
|
667
|
-
//
|
|
668
|
-
//
|
|
665
|
+
// Commands whose normal mode only reads/reports, plus explicit writers whose
|
|
666
|
+
// mutations must stay scoped to their named output. They must never add
|
|
667
|
+
// unrelated setup files. Scaffolding (ensureSkills → .agent/.specify,
|
|
668
|
+
// spawning `specify`) belongs to setup/init/generate and `init --with`, where
|
|
669
|
+
// the user is establishing or expanding setup rather than inspecting it.
|
|
669
670
|
//
|
|
670
671
|
// v0.26 (field report Bug #3): a bare `docguard guard` used to run
|
|
671
672
|
// ensureSkills → auto-init Spec Kit → spawn `specify` and write ~9 files into
|
|
@@ -675,7 +676,7 @@ async function main() {
|
|
|
675
676
|
// `diff`/`impact` only read; `demo` runs against a throwaway fixture.)
|
|
676
677
|
const READ_ONLY_COMMANDS = new Set([
|
|
677
678
|
'guard', 'audit', 'score', 'diff', 'impact',
|
|
678
|
-
'diagnose', 'trace', 'explain', 'memory', 'demo', 'agent', 'retire', 'archive', 'specs',
|
|
679
|
+
'diagnose', 'fix', 'trace', 'explain', 'memory', 'demo', 'agent', 'retire', 'archive', 'specs',
|
|
679
680
|
// feedback only writes its own .docguard/feedback/ — it must NOT scaffold
|
|
680
681
|
// skills or touch source, so it's gated out of ensureSkills like the rest.
|
|
681
682
|
'feedback',
|
|
@@ -703,6 +704,7 @@ async function main() {
|
|
|
703
704
|
command !== 'setup' &&
|
|
704
705
|
command !== 'init' &&
|
|
705
706
|
!READ_ONLY_COMMANDS.has(command) &&
|
|
707
|
+
!(command === 'hooks' && flags.list) &&
|
|
706
708
|
// Agent-family staleness checks must not bootstrap skills or Spec Kit.
|
|
707
709
|
!(command === 'agents' && flags.check) &&
|
|
708
710
|
!headless
|
|
@@ -798,8 +800,9 @@ async function main() {
|
|
|
798
800
|
runAgent(projectDir, config, flags);
|
|
799
801
|
break;
|
|
800
802
|
case 'hooks':
|
|
801
|
-
if (flags.claude) {
|
|
802
|
-
// Agent nudge
|
|
803
|
+
if (flags.claude || flags.list) {
|
|
804
|
+
// Agent nudge and read-only inventory paths bypass the setup wizard.
|
|
805
|
+
// Listing hooks must not refresh unrelated skills in the repository.
|
|
803
806
|
runHooks(projectDir, config, flags);
|
|
804
807
|
break;
|
|
805
808
|
}
|