Changelog

Every release, straight from the changesets. Newest first.

v1.16.9
patch

PageDocument claim attribution. A destructured element is bound to the closed spec type of its own property or tuple position, never to the callee's return type (else unbound). Fence inventory claims are located inside their own fence, one per (fence, export), on the call or import token. Bare words match an export only as camelCase, multi-hump PascalCase or snake_case (a digit alone does not qualify: base64, utf8); the word default never names the default export, which answers to OpenPkg's localName instead (useSWR resolves to specRef.export: 'default' in prose, headings, table keys and fence calls with no visible import; registry.localNames). A backticked .name() is Type.name (heading, sole owner, or the one ancestor every owner inherits it from) or no claim, never a top-level export. A JS/TS builtin name (number, string, Map, ...) is the language's unless written as a call, qualified (z.number), a code heading, or in a fence; ns.name is the export name, never a member of ns. prose-deprecated-reference judges the resolved reference: z.url() is the export url, not the deprecated ZodString.url; a member counts only through a binding or a chain of spec return types, and an unbound receiver is silent. prose-unresolved-member has specRef: null and suggests only the receiver type's own members. Promise<T> as OpenPkg emits it (x-ts-type: 'Promise') is unwrapped. New optional alsoSpecs on buildPageDocument(s) / detectProseDrift: secondary entries of the same package (zod/mini); a name only a secondary has is not a broken reference, a fence importing a secondary's specifier is checked against that spec, and a fence importing neither is not judged through names the entries type differently. A type $ref resolves by spec id first, then by an unambiguous name (same-named types with distinct ids are never merged; no id match and several names = open shape, no claim); @param {Options} matches a #/types/react.Options parameter.

patch

Bump @openpkg-ts/sdk and @openpkg-ts/spec to ^0.54.9. Same-named types in one package get their own ids (react.Options), so a parameter no longer resolves to an unrelated namesake (valtio devtools options); expression default exports are extracted; const classes carry construct signatures, and a class merged with an interface carries its members.

v1.16.8
patch

PageDocument precision and locators. A default import binds to the spec's default export (call-site rules on every overload, candidate claims with specRef.export: 'default'; silent when the spec has none, never matched by name). A rest parameter is never required and lifts the arity bound (rest: true, ...args, or an untyped trailing args / rest). A zero-argument call that is a whole expression statement (z.map();) is a mention, not prose-missing-required. import { a: b } is reported as invalid import syntax on that specifier instead of a missing export. A bare callee the fence declares itself is not the export of the same name. Fixes: a # line inside a fenced code block is never a heading (one shared fence test for every line scanner); every fence claim is located inside its own fence at the exact line and column, never on the first occurrence of the text on the page.

patch

Bump @openpkg-ts/sdk and @openpkg-ts/spec to ^0.54.8. A value and an interface under one name carry the interface's members (zod: 80 of 81 schema classes now have parse, optional, email...), exports bound by destructuring are kept (SWR mutate, unload), an annotated const function takes its signature from the annotation, rest parameters are rest: true and never required, default exports carry localName, and a tsconfig that sets module alone resolves imports on TypeScript 5 as well as 6.

v1.16.7
patch

Bump @openpkg-ts/sdk to ^0.54.7. A tsconfig that sets module without moduleResolution no longer breaks relative imports during extraction, so exports typed through them stop coming out as any (immer's bound methods such as setAutoFreeze now have signatures). Spec stays ^0.54.4.

patch

PageDocument: new prose-param-mismatch rule checks parameter tables and ## Parameters lists against the signatures of the export their heading names (exact or silent). Fixes: buildPageDocuments forwards importSpecifier; an aliased import is checked (and bound at call sites) by its imported name, default imports are never a missing export; prose-deprecated-reference is silent when the enclosing section notes the deprecation or names the replacement, and is located on the import; a self-named external type no longer overflows the closed-shape walk.

v1.16.6
patch

PageDocument precision: import * as ns is a namespace alias (never a missing export; ns.member is checked as the export); receivers and bare callees bind only through a visible import or construction, not a coincidental name; foreign-import and Before/Previous fences are silent.

patch

Bump @openpkg-ts/sdk to ^0.54.6. Utilities over type params stay written form (Readonly<T>), and param defaults land on parameter.default. Spec stays ^0.54.4.

v1.16.5
patch

PageDocument precision: printed signatures are not calls; intersection/extends keys union (open if any arm is external); generic wrappers are not closed receivers; comment-only arg lists are elisions; heading-scoped .member() counts; importSpecifier scopes prose-broken-reference to the entry export path.