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.
Changelog
Every release, straight from the changesets. Newest first.
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.durationreports 0, spec/reportgeneratedAtderives 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
== 1for errors should check>= 1or== 2. - MCP parity:
drift mcpgainsdrift_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/DriftConfignow match the CLI's real config shape (entry,coverage,lint,docs.remote); JSON Schema ships at@driftdev/cli/schemas/drift.config.schema.json;drift initstamps$schema;$schemakey allowed (and ignored) indrift.config.json. - New skills
drift-fixanddrift-enrich(previously dangling references fromscan/lintnexthints).
Bump @openpkg-ts/sdk to ^0.40.0: extraction now flattens mapped/conditional type aliases into members (with @deprecated recovered from conditional arm aliases), gives function-type aliases real signatures, and defaults to strict so T | undefined unions survive. Combined with 1.8's instance typing, prose-deprecated-reference now works on wasm/proxy surfaces — e.g. drift lint <clarinet-sdk> --docs guides/ deterministically flags simnet.runSnippet with "use simnet.execute(command) instead".
Instance typing for prose-deprecated-reference. The registry now maps callable exports to their named return types (Promise unwrapped), so const simnet = await initSimnet() types simnet as Simnet — deprecated members are judged against the actual type instead of being suppressed when an identically-named non-deprecated member exists elsewhere (the proxy-over-raw-class pattern: clarinet's runSnippet). Deprecation notes also flow from deprecationReason fields, not just @deprecated tags.
New prose drift type: prose-deprecated-reference (17 drift types total). Docs code blocks that import or call an API the spec marks deprecated are flagged — with the spec's deprecation note surfaced as the suggestion — unless the surrounding prose (±5 lines) already acknowledges the deprecation. Deterministic version of a finding class previously only agents caught (e.g. clarinet's runSnippet promoted while its types say @deprecated use execute). Registry now indexes deprecated exports/members; MarkdownDocFile carries raw content for prose-context checks.