spec-not-in-claims: a section walks a type's members when three or more distinct public members are named under the type's heading by code-span labels such as `history.undo()`, x.member( calls on any receiver, or Type.member text; that both joins the type and documents its surface (lively's HistoryManager / Room sections got their gaps back). Option keys do not count. A receiver the fence declares (const history = doc.getHistory()) is no longer mistaken for the browser global of that name.
Changelog
Every release, straight from the changesets. Newest first.
spec-not-in-claims: a section that walks a type's members (three or more distinct public members named by code-span labels, calls on a bound receiver orType.membertext) documents its surface and gets its gaps again (regression in 1.19.0 on reference-style guides such as lively's storage page). One example with an option key stays a guide section.- A migration "before" fence (
Before/Previous/Oldheading, lower version label,// beforecomment) carries no claims at all, inventory included: the old API is shown on purpose, so no question is asked of it.
- A migration "before" fence (
On OpenPkg 0.55.2: a type alias that only references another named type carries no members of its own, so its page is not asked to document the target's members.
Page accuracy from the vercel/ai docs audit (374 pages):
- A heading joins a type for
spec-not-in-claimsonly with evidence (code span / call form, page title, a fence that imports, constructs, calls or declares the export, or the docs map), and gaps dump only when the section documents the surface (declaration, parameter / option table, title or map). An option key innew X({ tools })mentions the member. - A bare backticked member (
`schema`) resolves only within a type in scope: a heading ancestor, the frontmatter title or the docs-map type. Leading-dot members keep their owner walk. - New:
prose-unknown-keyin prose for "thekoption" of an export whose options object is closed. prose-unresolved-member: a chained receiver (result.stream.pipeThrough()) is judged on the property's spec type, or skipped.- JSX props from one object parameter the spec cannot close claim nothing; a self-
$reftype export resolves to its full entry. - Diff fences (
diff, or+/-marker lines) are read as their added code. - No
prose-broken-referenceunder a heading or sentence that negates the API (Removed,has been removed). - Before/after migration detection:
Before/Previous/Old/Migrating fromheadings, version labels (v4,title="AI SDK 5") lower than another on the page; a before fence runs no reference or call-site rule.
prose-missing-required also fires when a call satisfies none of the alternatives a spec requires (one of prompt, messages)
On OpenPkg 0.55.1: a destructured union parameter keeps which keys a caller must pick between, so generateText({ model }) is reported as needing one of prompt, messages.
On OpenPkg 0.55: a function that destructures one options object is one parameter, so embed({ model, value }) is checked key by key instead of being read as one positional argument.
Page documents: a receiver bound by an import from another package (import { z } from 'zod'; z.string()) is foreign and never a prose-broken-reference, whatever this package exports; a ns.member broken reference stands only on an explicit import * as ns of the package, never on an inferred alias. A fence that prints interface X { ... } / type X = { ... } / class X { ... } mentions every key its body declares (no spec-not-in-claims for them). New rule prose-declared-key (RuleHit['type']): a key such a printed body declares that the spec's X does not have ('args' is not a member of 'ToolCallPart'), silent on open or memberless spec shapes. An object literal whose body carries an elision marker (// ..., /* ... */, …, a spread) is a partial sample: no prose-missing-required on it, while a key it does write is still prose-unknown-key.