You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. One pinned runtime dependency; pure Node.js otherwise.
This is an update to an existing catalog entry (docguard) for a new release — please bump the version and download URL on the current entry rather than adding a duplicate.
Release notes (v0.27.0):
Acting on a third end-to-end LLM field report (a coding agent ran DocGuard on a
Vite+Vitest WhatsApp-inbox repo). The headline is architectural: DocGuard is a
tool for LLMs, so every run should end with a suggested next action and every
finding it surfaces should be addressable, suppressible, and — when uncertain —
reportable. This release introduces structured findings (stable codes +
confidence + a built-in suggestion), wires them through guard/explain, adds a
local-first feedback loop, and fixes the group-A false positives the report
flagged.
Added
Structured findings with stable codes (cli/findings.mjs) — a validator
can now emit Finding[] (code like SEC001, high/low confidence, and a
machine-readable suggestion) via resultFromFindings(...). Fully
backward-compatible: the legacy {errors,warnings,passed,total} shape is
derived from the same array, so non-migrated validators are unchanged. Security
is the first fully-migrated validator.
Every guard run ends with a suggested next step — issues render with an
inline → suggestion (fix command or suppression pragma); a clean run points
at the next workflow step. guard --format json now carries a stable findings / reportable / nextStep contract for agents in hooks/CI.
docguard feedback — collects the low-confidence findings of a guard run
(likely false positives, and anything DocGuard flagged uncertainly), writes a
full local record under .docguard/feedback/, and prints a 1-click,
prefilled, redacted, length-capped GitHub issue URL (zero typing; no source
code or secret values; capped well under GitHub's ~8 KB URL limit — the failure
mode of commit 3b600fd).
docguard explain <CODE> — explain now resolves a finding code
(docguard explain SEC001) to its meaning, inline-suppression snippet, and the
feedback path, alongside the existing validator/warning lookup.
Inline secret suppression — // docguard:ignore SEC001 — reason (or // docguard:ignore-secret, or docguard:ignore SEC*) on the flagged line or
the line above silences a single finding, instead of blinding the whole file
via securityIgnore. (field report chore: Fix typo #8)
Read-only skills nudge — when an agent has no /docguard.* commands
installed, guardsuggestsdocguard init (it never writes — scaffolding
stays on init).
Fixed
Natural-language values no longer flagged as hardcoded passwords — a password-style key whose value reads like prose (a validation message / UI
copy) is downgraded from a blocking error to a low-confidence, suppressible,
reportable warning. Still surfaced (no false-green); a genuine single-token
secret like "SuperSecretPassword!" stays a blocking error. (field report Add John Lam as contributor and release badge #1)
score recognises modern test-runner config — Vitest configured inside vite.config.* (vitest/config import or a test: block), a scripts.test
that runs a known runner (vitest/jest/mocha/ava/…), and runner configs
in workspace subdirs (backend/, frontend/, …). A fully-tested Vite+Vitest
repo is no longer docked 15 points and told to "add a test runner". (field
report Update README.md #3)
Env validator ignores runner/CI/SDK vars — VITEST, CI, GITHUB_*, RUNNER_*, JEST_*, AWS_SESSION_TOKEN, etc. are no longer reported as
undocumented (they're injected by the runner, not product config). NODE_ENV
is deliberately still treated as app config. (field report adding executable permission to the scripts so they execute when the … #7)
Doc-Quality passive-voice has a per-doc override — parity with
negation-load: <!-- docguard:quality passive-voice off — reason --> (or a
numeric threshold) silences the warning on legitimately passive sequence/flow
docs. (field report Support Cursor CLI #9)
Notes
Tests 794 → 813 (new tests/field-report-3.test.mjs, each fix paired with a
non-vacuous control).
The detection-gap items from the report (semantic number/enum drift verify --semantic, dynamic-import cycle breaks, spec-declares-but-no-route, sync --tests, freshness precedence) are deliberately deferred — each is its own
design and would bloat this release.
Extension ID
docguard
Extension Name
DocGuard — CDD Enforcement
Version
0.27.0
Description
Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. One pinned runtime dependency; pure Node.js otherwise.
Author
raccioly
Repository URL
https://github.com/raccioly/docguard
Download URL
https://github.com/raccioly/docguard/releases/download/v0.27.0/spec-kit-docguard-v0.27.0.zip
License
MIT
Homepage (optional)
https://www.npmjs.com/package/docguard-cli
Documentation URL (optional)
https://github.com/raccioly/docguard/blob/main/extensions/spec-kit-docguard/README.md
Changelog URL (optional)
https://github.com/raccioly/docguard/blob/main/CHANGELOG.md
Required Spec Kit Version
Required Tools (optional)
Number of Commands
6
Number of Hooks (optional)
3
Tags
documentation, validation, quality, cdd, traceability, ai-agents, enforcement, spec-kit
Key Features
Testing Checklist
Submission Requirements
extension.ymlmanifest includedTesting Details
Tested on: Linux + macOS with the spec-kit CLI.
Install:
Scenarios verified:
speckit.docguard.*commands resolve and run.Example Usage
Proposed Catalog Entry
Additional Context
This is an update to an existing catalog entry (
docguard) for a new release — please bump the version and download URL on the current entry rather than adding a duplicate.Release notes (v0.27.0):
Acting on a third end-to-end LLM field report (a coding agent ran DocGuard on a
Vite+Vitest WhatsApp-inbox repo). The headline is architectural: DocGuard is a
tool for LLMs, so every run should end with a suggested next action and every
finding it surfaces should be addressable, suppressible, and — when uncertain —
reportable. This release introduces structured findings (stable codes +
confidence + a built-in suggestion), wires them through
guard/explain, adds alocal-first feedback loop, and fixes the group-A false positives the report
flagged.
Added
cli/findings.mjs) — a validatorcan now emit
Finding[](code likeSEC001,high/lowconfidence, and amachine-readable
suggestion) viaresultFromFindings(...). Fullybackward-compatible: the legacy
{errors,warnings,passed,total}shape isderived from the same array, so non-migrated validators are unchanged. Security
is the first fully-migrated validator.
inline
→ suggestion(fix command or suppression pragma); a clean run pointsat the next workflow step.
guard --format jsonnow carries a stablefindings/reportable/nextStepcontract for agents in hooks/CI.docguard feedback— collects the low-confidence findings of a guard run(likely false positives, and anything DocGuard flagged uncertainly), writes a
full local record under
.docguard/feedback/, and prints a 1-click,prefilled, redacted, length-capped GitHub issue URL (zero typing; no source
code or secret values; capped well under GitHub's ~8 KB URL limit — the failure
mode of commit
3b600fd).docguard explain <CODE>—explainnow resolves a finding code(
docguard explain SEC001) to its meaning, inline-suppression snippet, and thefeedback path, alongside the existing validator/warning lookup.
// docguard:ignore SEC001 — reason(or// docguard:ignore-secret, ordocguard:ignore SEC*) on the flagged line orthe line above silences a single finding, instead of blinding the whole file
via
securityIgnore. (field report chore: Fix typo #8)/docguard.*commandsinstalled,
guardsuggestsdocguard init(it never writes — scaffoldingstays on
init).Fixed
password-style key whose value reads like prose (a validation message / UIcopy) is downgraded from a blocking error to a low-confidence, suppressible,
reportable warning. Still surfaced (no false-green); a genuine single-token
secret like
"SuperSecretPassword!"stays a blocking error. (field report Add John Lam as contributor and release badge #1)scorerecognises modern test-runner config — Vitest configured insidevite.config.*(vitest/configimport or atest:block), ascripts.testthat runs a known runner (
vitest/jest/mocha/ava/…), and runner configsin workspace subdirs (
backend/,frontend/, …). A fully-tested Vite+Vitestrepo is no longer docked 15 points and told to "add a test runner". (field
report Update README.md #3)
docs-canonical/{ROADMAP,CURRENT-STATE,BACKLOG,TODO}.md— a TODO tracked in the canonical roadmap is no longer reported as untracked.
(field report shell scripts in the scripts directory fail to execute #6)
VITEST,CI,GITHUB_*,RUNNER_*,JEST_*,AWS_SESSION_TOKEN, etc. are no longer reported asundocumented (they're injected by the runner, not product config).
NODE_ENVis deliberately still treated as app config. (field report adding executable permission to the scripts so they execute when the … #7)
negation-load:
<!-- docguard:quality passive-voice off — reason -->(or anumeric threshold) silences the warning on legitimately passive sequence/flow
docs. (field report Support Cursor CLI #9)
Notes
tests/field-report-3.test.mjs, each fix paired with anon-vacuous control).
verify --semantic, dynamic-import cycle breaks, spec-declares-but-no-route,sync --tests, freshness precedence) are deliberately deferred — each is its owndesign and would bloat this release.