Skip to content

[Extension]: Update DocGuard — CDD Enforcement (v0.28.0) #3106

Description

@raccioly

Extension ID

docguard

Extension Name

DocGuard — CDD Enforcement

Version

0.28.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.28.0/spec-kit-docguard-v0.28.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

=0.1.0

Required Tools (optional)

- node (>=18.0.0) - required
- npx - required
- specify - optional (auto-initializes the SDD workflow during docguard init)

Number of Commands

6

Number of Hooks (optional)

3

Tags

documentation, validation, quality, cdd, traceability, ai-agents, enforcement, spec-kit

Key Features

  • 19-validator quality gate with severity triage and a remediation plan
  • AI-driven documentation repair with codebase research and validation loops
  • Cross-document semantic consistency analysis (read-only review)
  • CDD maturity score with an ROI-based improvement roadmap
  • Reverse-engineers canonical docs from an existing codebase
  • spec-kit workflow hooks (after_implement, before_tasks, after_tasks)

Testing Checklist

  • Extension installs successfully via download URL
  • All commands execute without errors
  • Documentation is complete and accurate
  • No security vulnerabilities identified
  • Tested on at least one real project

Submission Requirements

  • Valid extension.yml manifest included
  • README.md with installation and usage instructions
  • LICENSE file included
  • GitHub release created with version tag
  • All command files exist and are properly formatted
  • Extension ID follows naming conventions (lowercase-with-hyphens)

Testing Details

Tested on: Linux + macOS with the spec-kit CLI.

Install:

specify extension add docguard --from https://github.com/raccioly/docguard/releases/download/v0.28.0/spec-kit-docguard-v0.28.0.zip

Scenarios verified:

  1. Extension installs from the release ZIP without manifest validation errors.
  2. All six speckit.docguard.* commands resolve and run.
  3. The three workflow hooks register against spec-kit's lifecycle.

Example Usage

# Install the extension
specify extension add docguard --from https://github.com/raccioly/docguard/releases/download/v0.28.0/spec-kit-docguard-v0.28.0.zip

# Run the documentation quality gate
/speckit.docguard.guard

Proposed Catalog Entry

json
{
  "docguard": {
    "name": "DocGuard \u2014 CDD Enforcement",
    "id": "docguard",
    "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",
    "version": "0.28.0",
    "download_url": "https://github.com/raccioly/docguard/releases/download/v0.28.0/spec-kit-docguard-v0.28.0.zip",
    "repository": "https://github.com/raccioly/docguard",
    "homepage": "https://www.npmjs.com/package/docguard-cli",
    "documentation": "https://github.com/raccioly/docguard/blob/main/extensions/spec-kit-docguard/README.md",
    "changelog": "https://github.com/raccioly/docguard/blob/main/CHANGELOG.md",
    "license": "MIT",
    "requires": {
      "speckit_version": ">=0.1.0",
      "tools": [
        {
          "name": "node",
          "version": ">=18.0.0",
          "required": true
        }
      ]
    },
    "provides": {
      "commands": 6,
      "hooks": 3
    },
    "tags": [
      "documentation",
      "validation",
      "quality",
      "cdd",
      "traceability",
      "ai-agents",
      "enforcement",
      "spec-kit"
    ],
    "verified": false,
    "downloads": 0,
    "stars": 0
  }
}

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.28.0):

Closes the detection-gap items deferred from LLM field report #3 — the checks
regex/AST couldn't make before — plus a latent CI-correctness bug surfaced by
dogfooding.

Added

  • docguard verify --semantic (field report feat: implement in Japanese #5) — extracts the semantic
    claims in the canonical docs (documented numbers, limits, and enums: retention
    days, rate limits, GSI/role counts, status enums) as a structured verification
    task list with each claim's doc:line, section, and nearest cited code path. The
    highest-value bug class (a doc value drifted from code) and the one regex/AST
    can't judge — so DocGuard does the deterministic discovery and the agent does
    the comparison (the docguard agent division of labour). Precision-first:
    numbers count only with a recognized unit, enums only as 2+ UPPER_SNAKE values
    in a status/state context; version strings, dates, and code-fenced numbers are
    ignored.
  • docguard sync --tests (field report Include instructions for uvx dependency #10) — reconciles the hand-maintained
    TEST-SPEC Source-to-Test Map from disk: drops ghost-source rows (source file
    deleted), appends newly-covered co-located source↔test pairs, and reports ghost
    test references for the human (never auto-edits a curated status/notes cell).
    Preview by default; --write applies.

Fixed

  • Dynamic import() no longer counted as an import cycle (field report Fix release workflow to work with repository rules #2) —
    the Architecture validator excludes runtime await import() edges from cycle
    detection (a dynamic import is the canonical way to BREAK a load-time cycle).
    Static import/require edges still count, and dynamic edges still count for
    layer-boundary checks.
  • API-Surface diffs the OpenAPI spec against the registered routes (field
    report doco(spec-driven): Fix small typo in spec-driven.md #4) — when a spec is the authoritative surface, the API-REFERENCE doc
    reconciles against the spec, so a spec that declares a phantom endpoint (no
    Express/Fastify route registers it) passed clean. It's now flagged. Conservative:
    only runs when code routes are actually scannable.
  • Freshness markers stamped on init (field report Sample Guidance on how to version control "context" within the repository #11) — the SECURITY,
    ENVIRONMENT, TEST-SPEC, and REQUIREMENTS templates gained the standard
    docguard:last-reviewed header, and init stamps every canonical doc with a
    today-dated marker (belt-and-suspenders for future templates). Freshness is now
    marker-based and consistent from day one — and satisfiable in a pre-commit
    review loop. explain freshness now documents the marker > git-mtime precedence.
  • guard --format json no longer truncates large reports — replaced
    console.log(...) + process.exit() with process.exitCode + a drained write.
    A JSON payload over ~8 KB written to a pipe flushes asynchronously, so the
    immediate process.exit() cut it off mid-string — a CI consumer parsing stdout
    got "Unterminated string in JSON" on exactly the big reports that matter.
    (Surfaced by dogfooding this release.)

Notes

  • Tests 813 → 825 (new tests/field-report-3-deferred.test.mjs, each fix with a
    non-vacuous control). All field-report-3 items are now addressed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions