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.
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.