Changelog

Every release, straight from the changesets. Newest first.

v1.12.2
patch

drift scan --docs-map now runs standalone in docs-only repos: when every page in the map carries its own spec (or entry), no package entry point is required — previously scan exited 2 with "Could not detect entry point" in repos with no TypeScript package (the exact shape of a docs site gating SDK pages against committed specs). In standalone mode the output contains only docsCoverage; package coverage/lint/health are omitted.

Also: --annotations now emits workspace-relative file= paths (GitHub only anchors annotations to the Files Changed view for relative paths), and the SDK key-coverage analysis accepts types-only specs (no exports array) without crashing.

v1.12.1
patch

Fix version resolution in the published bundle: meta.version reported 0.0.0 from dist (and fed the spec-cache key, neutering version-based invalidation). Name-checked lookup now works from both src and dist layouts.

v1.12.0
minor

Docs-page key-coverage mode: diff a spec type's option keys against what a docs page actually documents

  • SDK analysis/key-coverage: extractDocumentedKeys (table keys — plain/linked/dotted/<br/>-embedded — with heading-scoped sections) + computeKeyCoverage (gaps/ghosts/inversions). Ghosts resolve against ALL spec types (sub-config tables aren't false ghosts); inversion replacements auto-derive from @deprecated Use X instead metadata.
  • CLI drift scan --docs-map <file>: key-coverage gate — FAIL any ghost, FAIL gaps above the committed baselineGaps ratchet, WARN inversions. --annotations on scan emits GitHub Actions ::error/::warning. JSON Schema ships at @driftdev/cli/schemas/drift.docs-map.schema.json.
  • CLI drift docs-map stub (deterministic scaffold: pages ↔ types ranked by key overlap) and drift docs-map baseline (ratchet tightening — never raises).
  • Prose-drift false-positive fix: member calls on receivers provably bound to non-package types (external-derived like const app = express(), untyped callback params like res) are no longer flagged; params annotated with a package type are still validated.
  • Spec cache keys now include the CLI version — an upgraded extractor never serves stale specs.
  • New skill drift-docs-map (agent bootstraps the map, human commits, machine runs it).
v1.11.0
minor

Upgrade extraction pipeline to @openpkg-ts/sdk ^0.43.0 (+spec ^0.43.0): per-property description and @deprecated now survive alias flattening (Omit<Base, K> & {...}), underscore-prefixed members are no longer dropped, and wide types are no longer silently truncated. Restores the metadata needed for deprecation/inversion detection on flattened option types.

v1.10.0
minor

Agent-native hardening: deterministic output, exit-code taxonomy, MCP parity, config schema

  • Reproducible output: SOURCE_DATE_EPOCH (reproducible-builds convention) makes JSON byte-stable — meta.duration reports 0, spec/report generatedAt derives from the epoch. Extracted specs now carry $schema.
  • Exit codes now follow the grep convention: 0 = clean, 1 = findings/threshold missed/not found, 2 = usage or internal error. Previously all failures exited 1; scripts checking == 1 for errors should check >= 1 or == 2.
  • MCP parity: drift mcp gains drift_lint, drift_coverage, drift_health — the documented fix loop now works for MCP-only clients.
  • drift lint --annotations: emit GitHub Actions ::error file=…,line=… annotations for inline PR findings.
  • One config schema: SDK driftConfigSchema/DriftConfig now match the CLI's real config shape (entry, coverage, lint, docs.remote); JSON Schema ships at @driftdev/cli/schemas/drift.config.schema.json; drift init stamps $schema; $schema key allowed (and ignored) in drift.config.json.
  • New skills drift-fix and drift-enrich (previously dangling references from scan/lint next hints).