docguard-cli 0.34.3__tar.gz → 0.34.5__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.34.3/extensions/spec-kit-docguard → docguard_cli-0.34.5/.agent}/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.34.3/extensions/spec-kit-docguard → docguard_cli-0.34.5/.agent}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.34.3/extensions/spec-kit-docguard → docguard_cli-0.34.5/.agent}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/docguard-sync/SKILL.md +2 -2
- docguard_cli-0.34.5/.github/workflows/auto-merge.yml +152 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/ci.yml +24 -2
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/jules-triage.yml +26 -1
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/release.yml +52 -9
- docguard_cli-0.34.5/.github/workflows/scheduled-release.yml +171 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/anatomy.md +9 -6
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/buglog.json +203 -1
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/cerebrum.md +1 -0
- docguard_cli-0.34.5/.wolf/hooks/_session.json +193 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/memory.md +27 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/token-ledger.json +1097 -7
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CHANGELOG.md +32 -3
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/PKG-INFO +1 -1
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/extension.yml +1 -1
- {docguard_cli-0.34.3/.agent → docguard_cli-0.34.5/extensions/spec-kit-docguard}/skills/docguard-fix/SKILL.md +2 -2
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/skills/docguard-guard/SKILL.md +2 -2
- {docguard_cli-0.34.3/.agent → docguard_cli-0.34.5/extensions/spec-kit-docguard}/skills/docguard-review/SKILL.md +2 -2
- {docguard_cli-0.34.3/.agent → docguard_cli-0.34.5/extensions/spec-kit-docguard}/skills/docguard-score/SKILL.md +2 -2
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/package-lock.json +2 -2
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/package.json +1 -1
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/pyproject.toml +1 -1
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/commands.test.mjs +20 -3
- docguard_cli-0.34.3/.wolf/hooks/_session.json +0 -81
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.fix.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.guard.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.review.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/docguard.score.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.analyze.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.checklist.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.clarify.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.constitution.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.implement.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.plan.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.specify.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.tasks.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/commands/speckit.taskstoissues.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-analyze/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-checklist/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-clarify/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-constitution/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-implement/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-plan/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-specify/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-tasks/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.agent/skills/speckit-taskstoissues/SKILL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.claude/rules/openwolf.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.claude/settings.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.docguard.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.docguardignore +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/ISSUE_TEMPLATE/docguard-feedback.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/dependabot.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/scripts/speckit-submission.py +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/supply-chain.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.github/workflows/sync-speckit-catalog.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.gitignore +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules/bolt.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules/palette.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules/sentinel.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.jules-setup.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.npmignore +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.npmrc +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.pre-commit-hooks.yaml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog-ebf165086500aab1-metadata.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog-ebf165086500aab1.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog-metadata.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/extensions/.cache/catalog.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/init-options.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/memory/constitution.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/common.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/setup-plan.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/agent-file-template.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/checklist-template.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/constitution-template.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/plan-template.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/spec-template.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.specify/templates/tasks-template.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/OPENWOLF.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/config.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/cron-manifest.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/cron-state.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/daemon.log +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/designqc-report.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/_wrap_up_nudged +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/package.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/post-read.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/post-write.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/pre-read.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/pre-write.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/session-start.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/shared.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/hooks/stop.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/identity.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/reframe-frameworks.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/.wolf/suggestions.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/AGENTS.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CLAUDE.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CODE_OF_CONDUCT.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/COMPARISONS.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/CONTRIBUTING.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/DRIFT-LOG.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/Dockerfile +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/LICENSE +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/PHILOSOPHY.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/PRIVACY.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/README.es.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/README.pt-BR.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/ROADMAP.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/SECURITY.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/STANDARD.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/SUPPLY-CHAIN-AUDIT.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/SUPPORT.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/VALIDATION.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/action.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/bin/docguard +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/demo.gif +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/demo.tape +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/assets/docguard-logo.png +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/agent.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/agents.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/badge.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/ci.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/demo.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/diagnose.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/diff.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/explain.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/feedback.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/fix.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/generate.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/guard.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/hooks.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/impact.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/init.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/llms.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/mcp.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/memory.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/publish.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/report.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/score.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/setup.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/sync-tests.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/sync.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/trace.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/upgrade.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/verify.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/commands/watch.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/config.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/docguard.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/ensure-skills.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/findings.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/agent-readability.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/api-doc.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/cdk.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/doc-tools.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/frontend.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/iac.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/instruction-audit.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/integrations.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/inventory.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/js-ast.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/memory-plan.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/project-type.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/py-ast.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/routes.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/schemas.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/semantic-claims.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/scanners/speckit.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-diff.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-git.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-ignore.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-ir.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-source.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared-trace-patterns.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/shared.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validator-markers.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/api-doc-smells.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/api-surface.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/architecture.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/canonical-sync.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/changelog.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/cross-reference.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/diff-suspicion.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/doc-quality.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/docs-coverage.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/docs-diff.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/docs-sync.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/drift.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/environment.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/freshness.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/generated-staleness.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/metadata-sync.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/metrics-consistency.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/reference-existence.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/schema-sync.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/security.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/spec-kit.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/structure.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/surface-sync.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/test-spec.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/todo-tracking.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/validators/traceability.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/api-reference.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/baseline.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/doc-generators.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/fix-memory.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/generate-io.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/history.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/junit.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/mechanical.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/sarif.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/cli/writers/sections.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.fix.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.guard.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.review.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/commands/docguard.score.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/fastify.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/generic.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/nextjs.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/configs/python.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docguard_cli/__init__.py +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docguard_cli/wrapper.py +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/ai-integration.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/commands.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/configuration.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/doc-sections.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/faq.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/installation.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/profiles.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs/quickstart.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/CI-RECIPES.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/REQUIREMENTS.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/SURFACE-AUDIT.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/docs-implementation/MIGRATION-v0.20.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/01-express-api/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/01-express-api/package.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/01-express-api/server.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/app.py +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/02-python-flask/requirements.txt +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/CHANGELOG.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/package.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/src/index.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/tasks.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/03-spec-kit-project/tests/basic.test.js +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/examples/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/LICENSE +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/diagnose.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/fix.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/generate.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/guard.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/init.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/score.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/sync.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/commands/trace.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/common.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/docguard-check-docs.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/docguard-init-doc.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/scripts/bash/docguard-suggest-fix.sh +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/templates/extensions.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/glama.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/llms-full.txt +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/llms.txt +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/mcpb/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/mcpb/manifest.template.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/packaging/homebrew/docguard.rb +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/packaging/submissions.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/schemas/docguard-config.schema.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/server.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/smithery.yaml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/001-fix-ignore-validators/plan.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/001-fix-ignore-validators/spec.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/001-fix-ignore-validators/tasks.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/002-fix-test-discovery/plan.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/002-fix-test-discovery/spec.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/002-fix-test-discovery/tasks.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/003-v011-false-positives/plan.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/003-v011-false-positives/spec.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/003-v011-false-positives/tasks.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/004-v020-env-var-false-negative/spec.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/specs/005-hugocross-next-bugs/spec.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ADR.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/AGENTS.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ARCHITECTURE.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/CHANGELOG.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/CURRENT-STATE.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/DATA-MODEL.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/DEPLOYMENT.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/DRIFT-LOG.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ENVIRONMENT.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/KNOWN-GOTCHAS.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/REQUIREMENTS.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ROADMAP.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/RUNBOOKS.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/SECURITY.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/TEST-SPEC.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/TROUBLESHOOTING.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/VENDOR-BUGS.md.template +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ci/github-actions.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/ci/gitlab-component.yml +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.fix.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.guard.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.init.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.review.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/commands/docguard.update.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/.docguard.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/.env.example +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/AGENTS.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/CHANGELOG.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/DRIFT-LOG.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/README.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/API-REFERENCE.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/ARCHITECTURE.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/DATA-MODEL.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/ENVIRONMENT.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/SECURITY.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/docs-canonical/TEST-SPEC.md +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/package.json +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/api.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/notifier.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/scheduler.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/templates/demo-fixture/src/worker.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agent-readability.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agent.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agents-command.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/agents-sync.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/anchor-autofix.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-doc-smells.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-doc.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-surface.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/api-write.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/architecture.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/b7-node-env-symmetry.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/backup-failure.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/badge.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/baseline.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/canonical-docs-nested-phase2.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/canonical-docs-nested.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/canonical-sync.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/cdk-detection.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/changed-only-scoping.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/changed-only.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/changelog.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/cross-reference.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/demo-command.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/diff-suspicion.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/doc-quality.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/doc-section-synonyms.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docguardignore.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docs-coverage.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docs-diff.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/docs-sync.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/drift.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/ensure-skills-idempotent.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/env-schema-detection.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/environment.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/explain-coverage.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/field-report-2-cli.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/field-report-3-deferred.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/field-report-3.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/fix-memory.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/fix-suppression.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/fixture-projects.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/freshness.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/frontend-deep.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/frontend.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/generate-io.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/generated-staleness.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/guard-classify.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/guard-no-throw.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/history.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/hooks.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/i18n.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/impact.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/init-smart-detection.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/instruction-audit.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/integrations.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/inventory.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/js-ast.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/junit.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/llms-full-pack.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/mcp-http.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/mcp.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/mechanical.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/memory-plan.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/metadata-sync.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/metrics-consistency.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/metrics-dedup.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/monorepo-scanning.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/multi-spec.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/npm-pack-smoke.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/nudge-hook.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/openapi-parse-honesty.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/patch-0.11.2.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/plan-disk-cache.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/profile-flag.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/project-type.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/py-ast.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/reference-existence.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/regenerate-section.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/report.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-express-mounts.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-fastify.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-multilang.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/routes-nextjs-app-router.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sarif.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/schema-sync.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/schemas-multilang.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/schemas.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/scoping-extended.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/score-suggestions.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/section-na-markers.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sections.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/security-init-injection.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/security.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/severity.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-diff.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-git.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-ignore-functions.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-ir.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/shared-source.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/speckit-bugfix.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/speckit-phantom.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/starter-scaffold.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/stress-test.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/structure.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/surface-sync.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sweep-nudge.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sync-since.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/sync.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/test-spec.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/todo-tracking.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/trace-features.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/trace-multilang.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/trace-reverse.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/traceability-ir.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/traceability.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/upgrade-pr-e2e.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/upgrade-pr.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/upgrade.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/v020-consolidation.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/validator-markers.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/validator-naming.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/verify-change-context.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/version-pin.test.mjs +0 -0
- {docguard_cli-0.34.3 → docguard_cli-0.34.5}/tests/whats-new.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.34.
|
|
9
|
+
version: 0.34.5
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.34.
|
|
12
|
+
<!-- docguard:version: 0.34.5 -->
|
|
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.34.
|
|
10
|
+
version: 0.34.5
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.34.
|
|
13
|
+
<!-- docguard:version: 0.34.5 -->
|
|
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.34.
|
|
9
|
+
version: 0.34.5
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.34.
|
|
12
|
+
<!-- docguard:version: 0.34.5 -->
|
|
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.34.
|
|
9
|
+
version: 0.34.5
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.34.
|
|
12
|
+
<!-- docguard:version: 0.34.5 -->
|
|
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.34.
|
|
7
|
+
version: 0.34.5
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
|
-
<!-- docguard:version: 0.34.
|
|
10
|
+
<!-- docguard:version: 0.34.5 -->
|
|
11
11
|
|
|
12
12
|
# DocGuard Sync Skill
|
|
13
13
|
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
name: Auto-merge (green bot PRs)
|
|
2
|
+
|
|
3
|
+
# Hands-off merging for bot PRs that have ALREADY passed the full CI matrix.
|
|
4
|
+
#
|
|
5
|
+
# WHY workflow_run AND NOT `gh pr merge --auto`: GitHub's native auto-merge
|
|
6
|
+
# requires the repo-level `allow_auto_merge` setting plus REQUIRED status
|
|
7
|
+
# checks in branch protection. Without required checks configured, `--auto`
|
|
8
|
+
# merges IMMEDIATELY without waiting for CI — worse than merging by hand.
|
|
9
|
+
# This workflow instead fires only after "DocGuard CI" reports success for
|
|
10
|
+
# the head SHA, re-verifies every matrix leg via the API, and merges itself.
|
|
11
|
+
# No repo settings required, and it is fail-closed: anything unexpected → skip.
|
|
12
|
+
#
|
|
13
|
+
# SECURITY: workflow_run runs in the BASE repo context with write scope, so it
|
|
14
|
+
# NEVER checks out or executes PR code. It reads PR metadata + check results
|
|
15
|
+
# via the API only. (Same rule as jules-triage.yml / AGENTS.md CI rule.)
|
|
16
|
+
#
|
|
17
|
+
# WHAT AUTO-MERGES:
|
|
18
|
+
# - dependabot: patch + minor only. Majors NEVER (v0.34.1 shipped a Node-18
|
|
19
|
+
# break from an auto-accepted @babel/parser major; bug-255).
|
|
20
|
+
# - jules: test-only and docs-only changes. Anything touching cli/ logic,
|
|
21
|
+
# .github/, or package.json is labeled and left for a human.
|
|
22
|
+
|
|
23
|
+
on:
|
|
24
|
+
workflow_run:
|
|
25
|
+
workflows: ["DocGuard CI"]
|
|
26
|
+
types: [completed]
|
|
27
|
+
|
|
28
|
+
permissions:
|
|
29
|
+
contents: write
|
|
30
|
+
pull-requests: write
|
|
31
|
+
checks: read
|
|
32
|
+
actions: read
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
auto-merge:
|
|
36
|
+
if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request'
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- name: Evaluate and merge if safe
|
|
40
|
+
uses: actions/github-script@v9
|
|
41
|
+
with:
|
|
42
|
+
script: |
|
|
43
|
+
const owner = context.repo.owner;
|
|
44
|
+
const repo = context.repo.repo;
|
|
45
|
+
const run = context.payload.workflow_run;
|
|
46
|
+
const headSha = run.head_sha;
|
|
47
|
+
|
|
48
|
+
// ── Locate the PR for this CI run ────────────────────────────
|
|
49
|
+
const { data: prs } = await github.rest.repos.listPullRequestsAssociatedWithCommit({
|
|
50
|
+
owner, repo, commit_sha: headSha,
|
|
51
|
+
});
|
|
52
|
+
const pr = prs.find((p) => p.state === 'open');
|
|
53
|
+
if (!pr) { core.info('No open PR for this SHA — nothing to do.'); return; }
|
|
54
|
+
const num = pr.number;
|
|
55
|
+
const author = pr.user.login;
|
|
56
|
+
|
|
57
|
+
const BOT_DEPENDABOT = 'dependabot[bot]';
|
|
58
|
+
const BOT_JULES = 'google-labs-jules[bot]';
|
|
59
|
+
const BOT_ACTIONS = 'github-actions[bot]';
|
|
60
|
+
if (![BOT_DEPENDABOT, BOT_JULES, BOT_ACTIONS].includes(author)) {
|
|
61
|
+
core.info(`#${num} authored by ${author} (not a handled bot) — leaving alone.`);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const hold = async (label, why) => {
|
|
66
|
+
try {
|
|
67
|
+
await github.rest.issues.addLabels({ owner, repo, issue_number: num, labels: [label] });
|
|
68
|
+
} catch (e) { core.info(`label skipped: ${e.message}`); }
|
|
69
|
+
await github.rest.issues.createComment({
|
|
70
|
+
owner, repo, issue_number: num,
|
|
71
|
+
body: `⏸️ **Held for human review** — ${why}\n\nCI is green, but this falls outside the auto-merge policy in \`.github/workflows/auto-merge.yml\`.`,
|
|
72
|
+
});
|
|
73
|
+
core.notice(`#${num} held: ${why}`);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// ── Re-verify EVERY matrix leg independently ─────────────────
|
|
77
|
+
// workflow_run.conclusion=success covers this run, but be explicit:
|
|
78
|
+
// all four Node legs must be present AND successful. Fail closed.
|
|
79
|
+
const { data: checks } = await github.rest.checks.listForRef({
|
|
80
|
+
owner, repo, ref: headSha, per_page: 100,
|
|
81
|
+
});
|
|
82
|
+
const REQUIRED = ['test (18)', 'test (20)', 'test (22)', 'test (24)'];
|
|
83
|
+
const bad = [];
|
|
84
|
+
for (const name of REQUIRED) {
|
|
85
|
+
const c = checks.check_runs.find((r) => r.name === name);
|
|
86
|
+
if (!c) bad.push(`${name}: missing`);
|
|
87
|
+
else if (c.conclusion !== 'success') bad.push(`${name}: ${c.conclusion}`);
|
|
88
|
+
}
|
|
89
|
+
if (bad.length) {
|
|
90
|
+
core.info(`#${num} not merging — checks not all green: ${bad.join(', ')}`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ── Scope gate: what files does this PR touch? ───────────────
|
|
95
|
+
const { data: files } = await github.rest.pulls.listFiles({
|
|
96
|
+
owner, repo, pull_number: num, per_page: 300,
|
|
97
|
+
});
|
|
98
|
+
const paths = files.map((f) => f.filename);
|
|
99
|
+
|
|
100
|
+
if (author === BOT_ACTIONS) {
|
|
101
|
+
// Release PRs cut by scheduled-release.yml. Tightly constrained:
|
|
102
|
+
// must come from a release/ branch and touch ONLY the version +
|
|
103
|
+
// changelog + generated extension metadata. Anything else under
|
|
104
|
+
// this bot's name is not something we cut, so hold it.
|
|
105
|
+
if (!pr.head.ref.startsWith('release/')) {
|
|
106
|
+
await hold('needs-review', `an automated PR from a non-\`release/\` branch (\`${pr.head.ref}\`).`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const ALLOWED = /^(package(-lock)?\.json|CHANGELOG\.md|extensions\/|\.agent\/)/;
|
|
110
|
+
const unexpected = paths.filter((p) => !ALLOWED.test(p));
|
|
111
|
+
if (unexpected.length) {
|
|
112
|
+
await hold('needs-review', `a release PR touching unexpected files:\n${unexpected.map((p) => `- \`${p}\``).join('\n')}`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
core.info(`#${num} automated release PR (${pr.head.ref}) — eligible.`);
|
|
116
|
+
} else if (author === BOT_DEPENDABOT) {
|
|
117
|
+
// Version delta from the title: "bump X from 1.2.3 to 1.2.4"
|
|
118
|
+
const m = /from (\d+)\.(\d+)\.(\d+)\S* to (\d+)\.(\d+)\.(\d+)/.exec(pr.title || '');
|
|
119
|
+
if (!m) { await hold('needs-review', 'could not parse the version delta from the PR title.'); return; }
|
|
120
|
+
const [fromMaj, fromMin] = [Number(m[1]), Number(m[2])];
|
|
121
|
+
const [toMaj, toMin] = [Number(m[4]), Number(m[5])];
|
|
122
|
+
if (toMaj !== fromMaj) {
|
|
123
|
+
await hold('needs-review', `this is a **major** bump (${m[1]}.${m[2]}.${m[3]} → ${m[4]}.${m[5]}.${m[6]}). Majors are never auto-merged — a @babel/parser major silently dropped Node 18 support and broke a release (bug-255).`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
core.info(`#${num} dependabot ${toMin !== fromMin ? 'minor' : 'patch'} bump — eligible.`);
|
|
127
|
+
} else {
|
|
128
|
+
// Jules: only test-only / docs-only changes auto-merge.
|
|
129
|
+
const risky = paths.filter((p) =>
|
|
130
|
+
!(p.startsWith('tests/') || p.startsWith('docs/') || p.endsWith('.md'))
|
|
131
|
+
);
|
|
132
|
+
if (risky.length) {
|
|
133
|
+
await hold('jules-review', `it changes non-test/non-doc files:\n${risky.map((p) => `- \`${p}\``).join('\n')}\n\nProduction-logic changes from an agent get a human read before they ship to npm.`);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
core.info(`#${num} jules test/docs-only (${paths.length} files) — eligible.`);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ── Merge ────────────────────────────────────────────────────
|
|
140
|
+
try {
|
|
141
|
+
await github.rest.pulls.merge({
|
|
142
|
+
owner, repo, pull_number: num, merge_method: 'squash',
|
|
143
|
+
});
|
|
144
|
+
await github.rest.issues.createComment({
|
|
145
|
+
owner, repo, issue_number: num,
|
|
146
|
+
body: `🤖 **Auto-merged** — all four Node legs (18/20/22/24) green, within the test-runtime budget, and inside the auto-merge policy in \`.github/workflows/auto-merge.yml\`.`,
|
|
147
|
+
});
|
|
148
|
+
core.notice(`Merged #${num}.`);
|
|
149
|
+
} catch (e) {
|
|
150
|
+
core.warning(`Merge of #${num} failed: ${e.message}`);
|
|
151
|
+
await hold('needs-review', `auto-merge failed: \`${e.message}\``);
|
|
152
|
+
}
|
|
@@ -45,8 +45,30 @@ jobs:
|
|
|
45
45
|
run: python3 -c "import docguard_cli.wrapper; print('docguard_cli.wrapper OK')"
|
|
46
46
|
|
|
47
47
|
# ── Automated Test Suite ──
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
# Also enforces a RUNTIME BUDGET. A test that walks an unintended tree
|
|
49
|
+
# (e.g. passing '/' as a project dir) still PASSES — it just takes
|
|
50
|
+
# forever. PR #328 did exactly that: tests/schemas.test.mjs went from
|
|
51
|
+
# 118ms to >10s and the whole suite from ~25s to 190s, green the entire
|
|
52
|
+
# time. Only a duration check catches that class, so auto-merge depends
|
|
53
|
+
# on this gate existing. Normal: ~33s (node 24) to ~51s (node 18) on CI.
|
|
54
|
+
# Budget is deliberately loose — it catches catastrophes, not jitter.
|
|
55
|
+
- name: Run Tests (with runtime budget)
|
|
56
|
+
env:
|
|
57
|
+
TEST_BUDGET_MS: 120000
|
|
58
|
+
run: |
|
|
59
|
+
set -o pipefail
|
|
60
|
+
npm test 2>&1 | tee /tmp/test-output.txt
|
|
61
|
+
DURATION=$(grep -oE 'duration_ms [0-9]+' /tmp/test-output.txt | tail -1 | grep -oE '[0-9]+' | cut -d. -f1)
|
|
62
|
+
if [ -z "$DURATION" ]; then
|
|
63
|
+
echo "::warning::Could not parse test duration — skipping budget check"
|
|
64
|
+
exit 0
|
|
65
|
+
fi
|
|
66
|
+
echo "Test suite duration: ${DURATION}ms (budget: ${TEST_BUDGET_MS}ms)"
|
|
67
|
+
if [ "$DURATION" -gt "$TEST_BUDGET_MS" ]; then
|
|
68
|
+
echo "::error::Test suite took ${DURATION}ms, over the ${TEST_BUDGET_MS}ms budget."
|
|
69
|
+
echo "::error::Something is scanning far more than it should (see PR #328 / bug-254)."
|
|
70
|
+
exit 1
|
|
71
|
+
fi
|
|
50
72
|
|
|
51
73
|
# ── Self-validation (dogfooding) ──
|
|
52
74
|
- name: CLI Version
|
|
@@ -52,7 +52,32 @@ jobs:
|
|
|
52
52
|
.trim();
|
|
53
53
|
const mine = norm(title);
|
|
54
54
|
const { data: open } = await github.rest.pulls.list({ owner, repo, state: 'open', per_page: 100 });
|
|
55
|
-
|
|
55
|
+
let dup = mine && open.find((p) => p.number !== num && norm(p.title) === mine);
|
|
56
|
+
|
|
57
|
+
// Title-equality alone is too strict: #324 "add tests for untested
|
|
58
|
+
// shared-ignore utilities", #325 "add missing tests for
|
|
59
|
+
// shared-ignore functions" and #329 "Add unit tests for
|
|
60
|
+
// shared-ignore detection utilities" were the SAME work, all three
|
|
61
|
+
// sat open, and two of them would have collided on the same import
|
|
62
|
+
// block if merged together. So also treat a PR as a duplicate when
|
|
63
|
+
// it touches an identical file set to another open Jules PR.
|
|
64
|
+
// Still metadata-only (listFiles) — never checks out PR code.
|
|
65
|
+
if (!dup) {
|
|
66
|
+
const fileSet = async (n) => {
|
|
67
|
+
const { data } = await github.rest.pulls.listFiles({ owner, repo, pull_number: n, per_page: 300 });
|
|
68
|
+
return data.map((f) => f.filename).sort().join('|');
|
|
69
|
+
};
|
|
70
|
+
try {
|
|
71
|
+
const mineFiles = await fileSet(num);
|
|
72
|
+
if (mineFiles) {
|
|
73
|
+
for (const p of open) {
|
|
74
|
+
if (p.number === num) continue;
|
|
75
|
+
if (p.user.login !== 'google-labs-jules[bot]') continue;
|
|
76
|
+
if (await fileSet(p.number) === mineFiles) { dup = p; break; }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} catch (e) { core.info(`file-overlap dup check skipped: ${e.message}`); }
|
|
80
|
+
}
|
|
56
81
|
|
|
57
82
|
const addLabel = async (name) => {
|
|
58
83
|
try {
|
|
@@ -204,17 +204,60 @@ jobs:
|
|
|
204
204
|
- uses: actions/setup-node@v7
|
|
205
205
|
with:
|
|
206
206
|
node-version: 20
|
|
207
|
-
registry-url
|
|
207
|
+
# DELIBERATELY NO `registry-url`. setup-node's registry-url writes an
|
|
208
|
+
# .npmrc containing:
|
|
209
|
+
# //registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
|
|
210
|
+
# With NODE_AUTH_TOKEN removed (Trusted Publishing), that expands to
|
|
211
|
+
# an EMPTY token. npm then takes the token-auth path holding no token
|
|
212
|
+
# and 404s, never attempting the OIDC exchange at all. v0.34.4 failed
|
|
213
|
+
# exactly this way: npm@11 installed fine, provenance signed fine, no
|
|
214
|
+
# OIDC notice in the log, then "404 ... could not be found or you do
|
|
215
|
+
# not have permission". npm defaults to registry.npmjs.org anyway, so
|
|
216
|
+
# dropping this loses nothing.
|
|
208
217
|
|
|
209
218
|
# Trusted Publishing (OIDC) needs npm CLI >= 11.5.0; Node 20's bundled
|
|
210
|
-
# npm predates that, so self-update first.
|
|
211
|
-
# npm
|
|
212
|
-
#
|
|
213
|
-
#
|
|
214
|
-
#
|
|
215
|
-
#
|
|
216
|
-
#
|
|
217
|
-
|
|
219
|
+
# npm predates that, so self-update first. Pinned to the 11.x line
|
|
220
|
+
# (NOT `npm@latest`) because npm 12 requires Node ^22.22.2 || ^24.15.0
|
|
221
|
+
# || >=26.0.0 -- newer than the Node 20 this job runs on. Learned this
|
|
222
|
+
# the hard way: the first cut of this fix used `npm@latest` and broke
|
|
223
|
+
# the same way the @babel/parser major bump did earlier (bug-255) --
|
|
224
|
+
# an unpinned "latest" floated past what this job's Node version
|
|
225
|
+
# supports. npm 11.x itself supports Node ^20.17.0 || >=22.9.0, so it
|
|
226
|
+
# installs cleanly here. No NODE_AUTH_TOKEN needed — npm exchanges the
|
|
227
|
+
# id-token (permissions, above) directly with the registry via the
|
|
228
|
+
# trusted-publisher connection configured on npmjs.com
|
|
229
|
+
# (raccioly/docguard, release.yml). This replaces the NPM_TOKEN-based
|
|
230
|
+
# auth that silently broke for 2 releases (v0.34.1, v0.34.2 never
|
|
231
|
+
# reached npm) when the token expired — nothing here can expire the
|
|
232
|
+
# same way; a short-lived token is minted per run.
|
|
233
|
+
- run: npm install -g npm@11
|
|
234
|
+
|
|
235
|
+
# Fail LOUDLY if anything put an auth token back in the npm config.
|
|
236
|
+
# A stray (even empty) _authToken silently routes npm away from OIDC and
|
|
237
|
+
# the only symptom is a generic 404 that reads like a missing package --
|
|
238
|
+
# it cost four releases (v0.34.1 through v0.34.4) to identify. Better to
|
|
239
|
+
# break here with a clear message than to publish-fail cryptically again.
|
|
240
|
+
- name: Assert no npm auth token is configured (OIDC must be the path)
|
|
241
|
+
run: |
|
|
242
|
+
npm --version
|
|
243
|
+
# NOTE: `npm config get <key>` refuses on auth keys ("protected") and
|
|
244
|
+
# `npm config list --json` omits them entirely, so neither can be used
|
|
245
|
+
# to detect this. Grep the actual .npmrc files instead.
|
|
246
|
+
USERCONFIG=$(npm config list | sed -n 's/^userconfig = "\(.*\)"$/\1/p')
|
|
247
|
+
HITS=""
|
|
248
|
+
for f in "$USERCONFIG" ".npmrc" "$HOME/.npmrc"; do
|
|
249
|
+
if [ -n "$f" ] && [ -f "$f" ] && grep -qE '_authToken|_auth[[:space:]]*=' "$f"; then
|
|
250
|
+
HITS="$HITS $f"
|
|
251
|
+
fi
|
|
252
|
+
done
|
|
253
|
+
if [ -n "$HITS" ]; then
|
|
254
|
+
echo "::error::npm auth token found in:$HITS"
|
|
255
|
+
echo "::error::Even an EMPTY _authToken routes npm to token auth and skips OIDC/Trusted Publishing —"
|
|
256
|
+
echo "::error::the only symptom is a generic 404 that reads like a missing package."
|
|
257
|
+
echo "::error::Remove registry-url from setup-node and any NODE_AUTH_TOKEN from this job."
|
|
258
|
+
exit 1
|
|
259
|
+
fi
|
|
260
|
+
echo "No auth token configured — npm will use OIDC (Trusted Publishing)."
|
|
218
261
|
|
|
219
262
|
- name: Publish (with provenance)
|
|
220
263
|
run: npm publish --provenance
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
name: Scheduled Release
|
|
2
|
+
|
|
3
|
+
# Self-sustaining releases: batches whatever has landed on main since the last
|
|
4
|
+
# tag into a weekly patch release, instead of cutting a version per merge.
|
|
5
|
+
#
|
|
6
|
+
# WHY BATCHED AND NOT PER-MERGE: every release publishes to npm AND PyPI
|
|
7
|
+
# publicly. Per-merge releases would burn a version number per dependabot
|
|
8
|
+
# patch and publish constantly. Weekly batching keeps releases hands-off
|
|
9
|
+
# without turning the registry into a changelog.
|
|
10
|
+
#
|
|
11
|
+
# HOW IT TRIGGERS THE ACTUAL RELEASE: this workflow only bumps package.json
|
|
12
|
+
# and pushes. release.yml is triggered by pushes that touch package.json, so
|
|
13
|
+
# it picks up from there and does tag → GitHub Release → npm → PyPI → catalog
|
|
14
|
+
# reminder. Keeping the publish logic in one place (release.yml) on purpose.
|
|
15
|
+
#
|
|
16
|
+
# NO-OP WHEN NOTHING CHANGED: if there are no commits since the last release
|
|
17
|
+
# tag, this exits without bumping — no empty releases.
|
|
18
|
+
|
|
19
|
+
on:
|
|
20
|
+
schedule:
|
|
21
|
+
- cron: '0 9 * * 1' # Mondays 09:00 UTC
|
|
22
|
+
workflow_dispatch:
|
|
23
|
+
inputs:
|
|
24
|
+
bump:
|
|
25
|
+
description: 'Version bump type'
|
|
26
|
+
required: false
|
|
27
|
+
default: 'patch'
|
|
28
|
+
type: choice
|
|
29
|
+
options: [patch, minor]
|
|
30
|
+
|
|
31
|
+
permissions:
|
|
32
|
+
contents: write
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
cut-release:
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v7
|
|
39
|
+
with:
|
|
40
|
+
fetch-depth: 0
|
|
41
|
+
|
|
42
|
+
- uses: actions/setup-node@v7
|
|
43
|
+
with:
|
|
44
|
+
node-version: 20
|
|
45
|
+
|
|
46
|
+
- name: Check for unreleased changes
|
|
47
|
+
id: check
|
|
48
|
+
run: |
|
|
49
|
+
CURRENT=$(node -p "require('./package.json').version")
|
|
50
|
+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
51
|
+
echo "current=$CURRENT" >> "$GITHUB_OUTPUT"
|
|
52
|
+
|
|
53
|
+
if [ -z "$LAST_TAG" ]; then
|
|
54
|
+
echo "No tags yet — nothing to compare against, skipping."
|
|
55
|
+
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
56
|
+
exit 0
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# Commits since the last tag, excluding the release commits themselves
|
|
60
|
+
# and the OpenWolf bookkeeping noise (.wolf/ is auto-written by hooks
|
|
61
|
+
# every session and must never on its own justify a release).
|
|
62
|
+
COMMITS=$(git log "${LAST_TAG}..HEAD" --oneline -- . ':!.wolf' | grep -viE '^[0-9a-f]+ (release|chore\(release\)):' || true)
|
|
63
|
+
COUNT=$(echo "$COMMITS" | grep -c . || true)
|
|
64
|
+
|
|
65
|
+
echo "Last tag: $LAST_TAG"
|
|
66
|
+
echo "Releasable commits since: $COUNT"
|
|
67
|
+
echo "$COMMITS"
|
|
68
|
+
|
|
69
|
+
if [ "$COUNT" -eq 0 ]; then
|
|
70
|
+
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
71
|
+
else
|
|
72
|
+
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
73
|
+
echo "last_tag=$LAST_TAG" >> "$GITHUB_OUTPUT"
|
|
74
|
+
# Stash the log for the changelog entry
|
|
75
|
+
echo "$COMMITS" > /tmp/commits.txt
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
- name: Bump version and write changelog
|
|
79
|
+
if: steps.check.outputs.changed == 'true'
|
|
80
|
+
run: |
|
|
81
|
+
BUMP="${{ inputs.bump || 'patch' }}"
|
|
82
|
+
OLD="${{ steps.check.outputs.current }}"
|
|
83
|
+
NEW=$(node -e "
|
|
84
|
+
const [maj,min,pat] = '$OLD'.split('.').map(Number);
|
|
85
|
+
console.log('$BUMP' === 'minor' ? \`\${maj}.\${min+1}.0\` : \`\${maj}.\${min}.\${pat+1}\`);
|
|
86
|
+
")
|
|
87
|
+
echo "Bumping $OLD → $NEW"
|
|
88
|
+
|
|
89
|
+
node -e "
|
|
90
|
+
const fs = require('fs');
|
|
91
|
+
const p = JSON.parse(fs.readFileSync('package.json','utf8'));
|
|
92
|
+
p.version = '$NEW';
|
|
93
|
+
fs.writeFileSync('package.json', JSON.stringify(p,null,2) + '\n');
|
|
94
|
+
"
|
|
95
|
+
npm install --package-lock-only --ignore-scripts
|
|
96
|
+
|
|
97
|
+
# Changelog entry from the commit subjects, so release.yml's notes
|
|
98
|
+
# extractor (which reads the '## [VERSION]' section) has real content.
|
|
99
|
+
{
|
|
100
|
+
echo "## [$NEW] - $(date -u +%Y-%m-%d)"
|
|
101
|
+
echo
|
|
102
|
+
echo "Automated weekly release — batches everything merged since \`${{ steps.check.outputs.last_tag }}\`."
|
|
103
|
+
echo
|
|
104
|
+
echo "### Changed"
|
|
105
|
+
echo
|
|
106
|
+
sed -E 's/^[0-9a-f]+ /- /' /tmp/commits.txt
|
|
107
|
+
echo
|
|
108
|
+
} > /tmp/entry.md
|
|
109
|
+
|
|
110
|
+
# Splice in directly under '## [Unreleased]'
|
|
111
|
+
awk '/^## \[Unreleased\]/ { print; print ""; while ((getline line < "/tmp/entry.md") > 0) print line; next } { print }' \
|
|
112
|
+
CHANGELOG.md > /tmp/CHANGELOG.new && mv /tmp/CHANGELOG.new CHANGELOG.md
|
|
113
|
+
|
|
114
|
+
# Keep the spec-kit extension metadata in lockstep (same thing
|
|
115
|
+
# `docguard fix --write` does locally before a manual release).
|
|
116
|
+
node cli/docguard.mjs fix --write || true
|
|
117
|
+
|
|
118
|
+
echo "NEW_VERSION=$NEW" >> "$GITHUB_ENV"
|
|
119
|
+
|
|
120
|
+
- name: Verify the tree is still green before releasing
|
|
121
|
+
if: steps.check.outputs.changed == 'true'
|
|
122
|
+
run: |
|
|
123
|
+
npm ci
|
|
124
|
+
npm test
|
|
125
|
+
node cli/docguard.mjs guard || [ $? -eq 2 ]
|
|
126
|
+
|
|
127
|
+
# Two stacked constraints make a direct `git push origin HEAD:main`
|
|
128
|
+
# impossible here, so this opens a PR instead:
|
|
129
|
+
#
|
|
130
|
+
# 1. main requires a pull request. github-actions[bot] is not an admin
|
|
131
|
+
# and has no bypass, so a direct push is rejected outright.
|
|
132
|
+
# 2. A PR opened with GITHUB_TOKEN does NOT trigger further workflow
|
|
133
|
+
# runs (GitHub's loop guard). So ci.yml would never fire on it, the
|
|
134
|
+
# required test (18/20/22/24) checks would never report, and the PR
|
|
135
|
+
# would sit forever on "Expected — waiting for status to be
|
|
136
|
+
# reported" — unmergeable.
|
|
137
|
+
#
|
|
138
|
+
# So: push a branch (unprotected), open the PR, then explicitly dispatch
|
|
139
|
+
# ci.yml against that branch so the checks DO report on its head SHA.
|
|
140
|
+
# auto-merge.yml then merges it once all four legs are green, and the
|
|
141
|
+
# resulting package.json change on main triggers release.yml to publish.
|
|
142
|
+
- name: Open release PR and kick off its CI
|
|
143
|
+
if: steps.check.outputs.changed == 'true'
|
|
144
|
+
env:
|
|
145
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
146
|
+
run: |
|
|
147
|
+
BRANCH="release/v${NEW_VERSION}"
|
|
148
|
+
git config user.name "github-actions[bot]"
|
|
149
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
150
|
+
git checkout -b "$BRANCH"
|
|
151
|
+
git add package.json package-lock.json CHANGELOG.md extensions/ .agent/ 2>/dev/null || true
|
|
152
|
+
git commit -m "release: v${NEW_VERSION} — automated weekly batch
|
|
153
|
+
|
|
154
|
+
Cut by .github/workflows/scheduled-release.yml. Publishing itself is
|
|
155
|
+
handled by release.yml, which triggers once this lands on main."
|
|
156
|
+
git push origin "$BRANCH"
|
|
157
|
+
|
|
158
|
+
gh pr create \
|
|
159
|
+
--base main \
|
|
160
|
+
--head "$BRANCH" \
|
|
161
|
+
--title "release: v${NEW_VERSION} — automated weekly batch" \
|
|
162
|
+
--body "Automated weekly release cut by \`scheduled-release.yml\`.
|
|
163
|
+
|
|
164
|
+
Batches everything merged since \`${{ steps.check.outputs.last_tag }}\`. Tests and \`guard\` already passed on this tree before the PR was opened; CI is dispatched separately below so the required checks report (a GITHUB_TOKEN-opened PR does not trigger workflows on its own).
|
|
165
|
+
|
|
166
|
+
Once green, \`auto-merge.yml\` merges this, and the \`package.json\` change triggers \`release.yml\` to tag and publish."
|
|
167
|
+
|
|
168
|
+
# Required checks must actually report on this SHA or the PR can
|
|
169
|
+
# never merge -- see constraint 2 above.
|
|
170
|
+
gh workflow run ci.yml --ref "$BRANCH"
|
|
171
|
+
echo "Opened $BRANCH and dispatched CI."
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# anatomy.md
|
|
2
2
|
|
|
3
|
-
> Auto-maintained by OpenWolf. Last scanned: 2026-09-11T15:
|
|
4
|
-
> Files:
|
|
3
|
+
> Auto-maintained by OpenWolf. Last scanned: 2026-09-11T15:50:08.916Z
|
|
4
|
+
> Files: 707 tracked | Anatomy hits: 0 | Misses: 0
|
|
5
5
|
|
|
6
6
|
## ../../../../../../../tmp/
|
|
7
7
|
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
- `.pre-commit-hooks.yaml` — DocGuard hooks for the pre-commit framework (https://pre-commit.com). (~490 tok)
|
|
30
30
|
- `action.yml` — Declares fs (~7591 tok)
|
|
31
31
|
- `AGENTS.md` — AI Agent Instructions — DocGuard (~1827 tok)
|
|
32
|
-
- `CHANGELOG.md` — Changelog (~
|
|
32
|
+
- `CHANGELOG.md` — Changelog (~53296 tok)
|
|
33
33
|
- `CLAUDE.md` — OpenWolf (~57 tok)
|
|
34
34
|
- `CODE_OF_CONDUCT.md` — Contributor Covenant Code of Conduct (~532 tok)
|
|
35
35
|
- `COMPARISONS.md` — Comparisons & Honest Limitations (~3382 tok)
|
|
@@ -959,8 +959,11 @@
|
|
|
959
959
|
|
|
960
960
|
## .github/workflows/
|
|
961
961
|
|
|
962
|
-
- `
|
|
963
|
-
- `
|
|
962
|
+
- `auto-merge.yml` — CI: Auto-merge (green bot PRs) (~2234 tok)
|
|
963
|
+
- `ci.yml` — CI: DocGuard CI (~1843 tok)
|
|
964
|
+
- `jules-triage.yml` — CI: Jules PR Triage (~1635 tok)
|
|
965
|
+
- `release.yml` — CI: Auto Release — Tag, GitHub Release, npm, PyPI (~4892 tok)
|
|
966
|
+
- `scheduled-release.yml` — CI: Scheduled Release (~2099 tok)
|
|
964
967
|
- `sync-speckit-catalog.yml` — CI: Prepare Spec Kit Catalog Submission (Manual) (~1385 tok)
|
|
965
968
|
|
|
966
969
|
## .jules/
|
|
@@ -1113,7 +1116,7 @@
|
|
|
1113
1116
|
- `canonical-docs-nested-phase2.test.mjs` — Phase 2 of the nested-canonical-docs fix: the remaining 14 sites found (~1482 tok)
|
|
1114
1117
|
- `canonical-docs-nested.test.mjs` — Regression: canonical docs in SUBFOLDERS must be seen by every consumer. (~2028 tok)
|
|
1115
1118
|
- `changelog.test.mjs` — Exports x, x (~1315 tok)
|
|
1116
|
-
- `commands.test.mjs` — DocGuard CLI Tests — Tests all commands and flags (~
|
|
1119
|
+
- `commands.test.mjs` — DocGuard CLI Tests — Tests all commands and flags (~10729 tok)
|
|
1117
1120
|
- `cross-reference.test.mjs` — Cross-Reference Validator — K-7 / S-8 (~4060 tok)
|
|
1118
1121
|
- `ensure-skills-idempotent.test.mjs` — v0.24 — Skill install is idempotent (field report, Issue D). (~1133 tok)
|
|
1119
1122
|
- `field-report-3-deferred.test.mjs` — v0.28 — the detection-gap items deferred from LLM field report #3. (~3325 tok)
|