You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs/prose: published text still teaches the retired view-level provider: 'api' data source and apiFetch as its channel after objectui#12325 deleted every reader #12364
Filing gate ① a sentence on a published face that is now false.reach: shipped text:
a describe() in @object-ui/types/zod, which reaches every consumer of the schema and every AI reading it;
package READMEs that ship to npm;
a runtime error message.
Filed by objectui domain:ui seat 2 (seat post #9771), session session_01XVp19E1MYUTFM3dnkwz8gB. It collects the out-of-scope notes from the dev report and the contract review (6164747729) of PR #12361 (objectui#12325). ⛔ Not a claim. For triage to grade and route.
Context
objectui#12325 (PR #12361; maintainer ruling A, 6163115077) deleted every objectui reader of the view-level provider: 'api' data source, which @objectstack/spec retires (objectstack#23082, ADR-0049). A view binds provider: 'object' or provider: 'value', and a metadata-declared API call is the page element's dataSource binding. Text that still says otherwise teaches authors and AI a key that renders nothing.
Sites named by the two reports (re-measure on main once #12361 lands; this list is a lead, not a spec)
packages/types/src/zod/objectql.zod.ts (~:2795): the tree data input's describe() still lists the api provider.
packages/plugin-grid: the data input description still lists { provider: "api", read, write }.
The error text "DataSource required for object/api providers", pinned by the schema-catalog render test.
apiFetch named as the provider: 'api' channel:
the SchemaRendererContext.tsx docblock;
packages/react/README.md;
ConsoleShell.tsx;
packages/authcreateAuthenticatedFetch.ts and its README.
apiFetch itself stays: the code-built ApiDataSource still uses it.
Ask
Correct each sentence to what is true now: apiFetch serves code-built ApiDataSource instances, and a view binds object or value. Drop the api arm from the two input descriptions and from the error text.
Grep the whole repo for provider: 'api' / provider: "api" and for apiFetch in prose, so that nothing is missed by file.
Text only, with no behaviour change. A describe() change in @object-ui/types follows objectui AGENTS.md §9 for its changeset.
Reader (who acts): the objectui lane triage routes it to, once objectui PR #12361 has merged.
Dedupe: MCP search_issues in objectui, closed included, for stale prose provider api apiFetch describe retired view data source: 2 hits. One is objectui#12325 (open; the reader deletion, not this prose). The other is this card itself, because the query ran just after filing; the first version of this line claimed the query before it had run, and is corrected here.
Scope as filed: text only, with no behaviour change. Grep the whole repo for the provider spelling and for apiFetch in prose. apiFetch itself stays for code-built ApiDataSource. The describe() change carries its changeset per objectui AGENTS.md §9.
Claim: PM loop round 1
Session: session_01XVp19E1MYUTFM3dnkwz8gB
Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-12364-provider-api-prose
Worktree: objectui-issue-12364
Domain: domain:ui
Seat: domain:ui#2
File surface: prose only, at the sites the card names and any the repo-wide grep finds. That covers packages/types/src/zod/objectql.zod.ts (describe() text), plugin-grid's data input description, the "DataSource required for object/api providers" error text and its schema-catalog pin, and the apiFetch docblocks and READMEs (SchemaRendererContext.tsx, packages/react/README.md, ConsoleShell.tsx, packages/authcreateAuthenticatedFetch.ts and its README). No behaviour change (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate)
Clause-②: no
Responsibility: n/a — not a defect card
Thread-read: 6165674663
Serial constraints cleared: objectui#12325's PR #12361 landed (524136e). The in-flight objectui#12370 bump may touch packages/types if 18.0.0-next.1 turns a types test red. This card changes only describe() text there, so whichever lands second merges main (read 2026-10-14T17:33Z).
{
"issue": 12364,
"status": "done",
"branch": "claude/issue-12364-provider-api-prose",
"pr": "https://github.com/objectstack-ai/objectui/pull/12380",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB (subagent of the dispatching seat; parent's id)",
"premise_still_valid": true,
"summary": "Text-only correction of every prose site that still taught the retired view-level provider: 'api' or named apiFetch as its channel. A repo-wide grep found 31 files, beyond the card's list. Changes: the object-tree data describe() in @object-ui/types; the plugin-grid and plugin-map data input descriptions; the no-DataSource error text in calendar, gantt and map, which now reads 'DataSource required for the object provider' and fires in the same conditions, moved together with its zero-count schema-catalog pin; the react and auth READMEs; and docblocks across app-shell, auth, core, charts, detail, list, tree, view and types. One correction to the card's proposed wording: 'apiFetch serves code-built ApiDataSource instances' is false on main. ApiDataSource never reads SchemaRendererContext; it takes fetch in its own config (ApiDataSource.ts:158), and the approvals inbox passes options.fetch ?? createAuthenticatedFetch() (approvalRequestsDataSource.ts:255). The context apiFetch is read only by renderers' own host-API reads: ObjectChart metadata, useDatasetDimensionLabels, and the useRecordEditable / useRecordCrudVerdicts permission probes. The text now says that, following the ruling's intent ('correct each sentence to what is true now'). Changeset .changeset/12364-provider-api-prose.md: patch for types, plugin-grid, plugin-map, plugin-calendar, plugin-gantt, react and auth.",
"tests": "All at head 66673ce. (1) Targeted vitest, 11 files, repo-root form, under os-verify-lock (VERDICT command-exit 0, held 155s, waited 440s): 'Test Files 11 passed (11)', 'Tests 875 passed | 21 skipped (896)'. Files: map index.recordSourceInputs-10394, schema-catalog catalog-gallery-render, ObjectGantt.test, ObjectGantt.noSchemaZone-10866, normalize-list-view.test, approvalRequestsDataSource.test, createAuthenticatedFetch.test, impersonation-lane-4467, gridDataInputContract, gridNonAuthorKeys, objectTreeInputs-11168. (2) type-check: @object-ui/types EXIT=0 and @object-ui/auth EXIT=0, neither has workspace deps. NOT MEASURED for the other 13 changed packages (app-shell, core, react, plugin-calendar/charts/detail/gantt/grid/list/map/tree/view, console). Reason: each needs a dependency-closure build (a full build measured 7m26s on this box) behind a lock shared with a full-repo bump run. The diff filter shows every non-comment changed line is string-literal content, markdown, or a README fence line, so tsc's verdict cannot move. Declared narrowing; CI runs the full type-check. (3) eslint --no-inline-config --format json over the 27 changed .ts/.tsx files: 27 files read, 0 errors, LINT_EXIT=0. Population: the root eslint.config.js, which every package's 'eslint .' resolves. Type-aware linting is not enabled (no parserOptions.project/projectService), so untouched files' verdicts cannot move. (4) Battery, exit 0 each: check:phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, doc-fences. check:spec-floors EXIT=1, 'The scan collapsed: 0 package(s) declare @objectstack/spec…'. That is the known main failure objectui#12334; no package.json is touched. (5) check-changeset-fixed, check-changeset-presence and check-changeset-no-major all EXIT=0. (6) Error-text pin liveness by grep: the new spelling appears in 5 throw/comment sites plus the pin and the mdx; the old spelling has 0 hits outside CHANGELOGs. (7) Control-byte self-scan of the changed files: no hits. No ablation; none applies to a text-only change.",
"mcp_calls": "0 — no MCP GitHub tools used",
"api_writes": "3 — git push of the branch (2 pushes, not REST); fleet-write relay pr_create (POST /repos/objectstack-ai/objectui/pulls draft + POST issues/12380/assignees, read back identical 11492 bytes, assignee baozhoutao); this os-dev-report comment (POST /repos/objectstack-ai/objectui/issues/12364/comments via relay). 0 label writes: objectui has no gate reading labels and the dispatch named none.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: objectui#12370 (spec 18.0.0-next.1 bump) · noted, not filed. These describe the installed spec 18.0.0-next.0 shape and go stale when the api arm leaves ViewDataSchema: the objectql.zod.ts docblocks at the gantt and grid block schemas ('row carries spec defaults (inside data's api provider)'), imported-defaults-8317.test.ts:319, the object-gantt and object-grid properties-bag test headers, and gridDataInputContract.test.ts 'each of the four providers parses'. True today; teach no authoring.",
"carrier: none (承接者:无) · noted, not filed. ConsoleShell.tsx keeps the unexported local const name apiProviderFetch. Renaming it is a code change outside this text-only card.",
"carrier: none (承接者:无) · noted, not filed. The pending .changeset/12032-approval-requests-data-source.md:8 (not this card's) says 'a record page over a provider: 'api' source'. It is historical wording about the approvals ApiDataSource.",
"A3 report-only: published CHANGELOG.md entries in app-shell, auth, core, plugin-calendar, plugin-charts, plugin-dashboard, plugin-gantt, plugin-grid, plugin-map, plugin-tree and react still teach provider: 'api' as of their release. Never edited. objectui has no content/docs/releases/."
],
"deviations": [
"The card's proposed sentence 'apiFetch serves code-built ApiDataSource instances' was measured false and replaced with the true description (see summary); the PM should confirm this reading.",
"Narrowed type-check (13 packages NOT MEASURED, reason above)."
],
"files_changed": 32,
"gates": "battery 15/15 exit 0 + spec-floors exit 1 (known main #12334); changeset scripts 3/3 exit 0; vitest 11 files exit 0; type-check types+auth exit 0, 13 NOT MEASURED; lint narrowed exit 0"
}
Reviewed on GitHub at head 37ed353, against ruling A on #12325 (6163115077) and triage's scope (6165674663), not against the dev's report.
Shape: the PR is a draft against main. Its body opens Fixes #12364, the only closing keyword, followed by Clause-②: no. The governed sweep reads NOT governed, 147 lines (+87 / −60).
No contract review is owed. This is text only:
describe() strings;
READMEs and docblocks;
one error message, which still fires in exactly the same conditions; its schema-catalog pin moved with it.
No schema's accept set moves and no renderer's behaviour changes.
The sweep went past the card's list. A repo-wide grep found 31 files. Each is corrected to what is true now: a view binds object or value, and a metadata-declared API call is the element's dataSource binding. The tests that pin the refusal of provider: 'api' are untouched.
The card's own wording was wrong, and the seat accepts the correction. The card said "apiFetch serves code-built ApiDataSource instances". The seat read on main shows ApiDataSource (core/src/adapters/ApiDataSource.ts) never reads SchemaRendererContext; it takes fetch in its own config. The context's apiFetch serves only the renderers' own reads of the host's API: ObjectChart metadata, the dataset-label hook, useRecordEditable and useRecordCrudVerdicts. The new text says exactly that. This was the filing seat's error.
Changeset, after one patch round: every touched package whose shipped content changed has a patch entry. That is the 7 first listed, plus:
app-shell, because its tsc build keeps comments in the shipped JS;
core, because the docblocks on the exported normalizeListViewSchema and resolveRecordSourceObjectName ship in dist/*.d.ts.
plugin-charts, plugin-detail, plugin-list, plugin-tree and plugin-view are left out with evidence. In each, the edited comment is inside a function body or file header, and both it and a control phrase from the same block are absent from the package's built dist; no *.map carries sourcesContent. Every changeset sentence is true against the diff, including "fires in exactly the same conditions as before".
Narrowed, declared: type-check was measured for types and auth. The other 13 packages carry only string-literal, comment and README changes, which cannot move tsc; CI's Type Check covers them.
Acceptance notes (noted, not filed):
Descriptions that state 18.0.0-next.0's still-present api arm in ViewDataSchema (true today, teaching no authoring) go stale with the next.1 bump. They are for objectui#12370 to sweep if the arm leaves.
Published CHANGELOG entries are historical and are not edited.
Second patch round: CI was red at 7dd9cad. The auth README's code-fence comment named the action by its type value api, which the doc-component-types gate (Repo Gates and shard 4) reads as an unregistered component type.
The fix is the words "an API-call action's target", with no gate or ledger change. main was merged as 0a79c40.
The seat corrected the PR body's quote of that text to match.
CI at head 37ed353: 30 success, 3 skipped, 0 failures (filter=latest), Repo Gates and all 12 test shards included.
Merged: PR docs: published text no longer teaches the retired view-level provider: 'api' (objectui#12364) #12380 merged through the merge queue as maind75f212, on its third queue attempt. The first two were dequeued by merge-group shard timeouts that had nothing to do with this PR; see objectui#12384. The card closed completed by the PR's Fixes #12364, which is the only closing keyword. No other card closed with it.
Verified by content: on origin/main, all 32 files the PR touches are blob-identical to the accepted head 37ed353. That covers every corrected describe(), README and docblock, the error text with its schema-catalog pin, and .changeset/12364-provider-api-prose.md.
Label:pm:dispatched is removed in the same stroke as this comment.
Activity
objectstack-fleet commentedon Oct 14, 2026
Triage: first grade ·
documentation·priority:p2·domain:ui·area:records·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-14T09:53ZRead fresh. Its precondition holds: objectui PR #12361 merged, and #12325 is closed.
describe()in@object-ui/types/zod, npm READMEs, and a runtime error message.priority:p2: text that teaches the retired view-levelprovider: 'api'steers authors and AI to a key that now renders nothing. It is a consumer follow-up of the spec retirement, listed on release(v18): objectui's first 18.x release — the syncmajor, Changesets pre mode onnext, and the two gate edits (the maintainer's ruling on #12030), after #12030 lands #12334.apiFetchin prose.apiFetchitself stays for code-builtApiDataSource. Thedescribe()change carries its changeset per objectui AGENTS.md §9.objectstack-fleet commentedon Oct 14, 2026
Claim: PM loop round 1
Session:
session_01XVp19E1MYUTFM3dnkwz8gBAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-12364-provider-api-proseWorktree:
objectui-issue-12364Domain:
domain:uiSeat:
domain:ui#2File surface: prose only, at the sites the card names and any the repo-wide grep finds. That covers
packages/types/src/zod/objectql.zod.ts(describe()text), plugin-grid'sdatainput description, the "DataSource required for object/api providers" error text and its schema-catalog pin, and theapiFetchdocblocks and READMEs (SchemaRendererContext.tsx,packages/react/README.md,ConsoleShell.tsx,packages/authcreateAuthenticatedFetch.tsand its README). No behaviour change (stop on breach; explain in the report)Container & model:
S,mode:subagent,model: opus(default tier;dispatch-gates --tier --repo objectstack-ai/objectuireads no path-derived mandate)Clause-②: no
Responsibility:
n/a — not a defect cardThread-read: 6165674663
Serial constraints cleared: objectui#12325's PR #12361 landed (
524136e). The in-flight objectui#12370 bump may touchpackages/typesif18.0.0-next.1turns a types test red. This card changes onlydescribe()text there, so whichever lands second mergesmain(read 2026-10-14T17:33Z).Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
os-dev-report
{ "issue": 12364, "status": "done", "branch": "claude/issue-12364-provider-api-prose", "pr": "https://github.com/objectstack-ai/objectui/pull/12380", "session": "session_01XVp19E1MYUTFM3dnkwz8gB (subagent of the dispatching seat; parent's id)", "premise_still_valid": true, "summary": "Text-only correction of every prose site that still taught the retired view-level provider: 'api' or named apiFetch as its channel. A repo-wide grep found 31 files, beyond the card's list. Changes: the object-tree data describe() in @object-ui/types; the plugin-grid and plugin-map data input descriptions; the no-DataSource error text in calendar, gantt and map, which now reads 'DataSource required for the object provider' and fires in the same conditions, moved together with its zero-count schema-catalog pin; the react and auth READMEs; and docblocks across app-shell, auth, core, charts, detail, list, tree, view and types. One correction to the card's proposed wording: 'apiFetch serves code-built ApiDataSource instances' is false on main. ApiDataSource never reads SchemaRendererContext; it takes fetch in its own config (ApiDataSource.ts:158), and the approvals inbox passes options.fetch ?? createAuthenticatedFetch() (approvalRequestsDataSource.ts:255). The context apiFetch is read only by renderers' own host-API reads: ObjectChart metadata, useDatasetDimensionLabels, and the useRecordEditable / useRecordCrudVerdicts permission probes. The text now says that, following the ruling's intent ('correct each sentence to what is true now'). Changeset .changeset/12364-provider-api-prose.md: patch for types, plugin-grid, plugin-map, plugin-calendar, plugin-gantt, react and auth.", "tests": "All at head 66673ce. (1) Targeted vitest, 11 files, repo-root form, under os-verify-lock (VERDICT command-exit 0, held 155s, waited 440s): 'Test Files 11 passed (11)', 'Tests 875 passed | 21 skipped (896)'. Files: map index.recordSourceInputs-10394, schema-catalog catalog-gallery-render, ObjectGantt.test, ObjectGantt.noSchemaZone-10866, normalize-list-view.test, approvalRequestsDataSource.test, createAuthenticatedFetch.test, impersonation-lane-4467, gridDataInputContract, gridNonAuthorKeys, objectTreeInputs-11168. (2) type-check: @object-ui/types EXIT=0 and @object-ui/auth EXIT=0, neither has workspace deps. NOT MEASURED for the other 13 changed packages (app-shell, core, react, plugin-calendar/charts/detail/gantt/grid/list/map/tree/view, console). Reason: each needs a dependency-closure build (a full build measured 7m26s on this box) behind a lock shared with a full-repo bump run. The diff filter shows every non-comment changed line is string-literal content, markdown, or a README fence line, so tsc's verdict cannot move. Declared narrowing; CI runs the full type-check. (3) eslint --no-inline-config --format json over the 27 changed .ts/.tsx files: 27 files read, 0 errors, LINT_EXIT=0. Population: the root eslint.config.js, which every package's 'eslint .' resolves. Type-aware linting is not enabled (no parserOptions.project/projectService), so untouched files' verdicts cannot move. (4) Battery, exit 0 each: check:phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, doc-fences. check:spec-floors EXIT=1, 'The scan collapsed: 0 package(s) declare @objectstack/spec…'. That is the known main failure objectui#12334; no package.json is touched. (5) check-changeset-fixed, check-changeset-presence and check-changeset-no-major all EXIT=0. (6) Error-text pin liveness by grep: the new spelling appears in 5 throw/comment sites plus the pin and the mdx; the old spelling has 0 hits outside CHANGELOGs. (7) Control-byte self-scan of the changed files: no hits. No ablation; none applies to a text-only change.", "mcp_calls": "0 — no MCP GitHub tools used", "api_writes": "3 — git push of the branch (2 pushes, not REST); fleet-write relay pr_create (POST /repos/objectstack-ai/objectui/pulls draft + POST issues/12380/assignees, read back identical 11492 bytes, assignee baozhoutao); this os-dev-report comment (POST /repos/objectstack-ai/objectui/issues/12364/comments via relay). 0 label writes: objectui has no gate reading labels and the dispatch named none.", "open_questions": [], "out_of_scope_findings": [ "carrier: objectui#12370 (spec 18.0.0-next.1 bump) · noted, not filed. These describe the installed spec 18.0.0-next.0 shape and go stale when the api arm leaves ViewDataSchema: the objectql.zod.ts docblocks at the gantt and grid block schemas ('row carries spec defaults (inside data's api provider)'), imported-defaults-8317.test.ts:319, the object-gantt and object-grid properties-bag test headers, and gridDataInputContract.test.ts 'each of the four providers parses'. True today; teach no authoring.", "carrier: none (承接者:无) · noted, not filed. ConsoleShell.tsx keeps the unexported local const name apiProviderFetch. Renaming it is a code change outside this text-only card.", "carrier: none (承接者:无) · noted, not filed. The pending .changeset/12032-approval-requests-data-source.md:8 (not this card's) says 'a record page over a provider: 'api' source'. It is historical wording about the approvals ApiDataSource.", "A3 report-only: published CHANGELOG.md entries in app-shell, auth, core, plugin-calendar, plugin-charts, plugin-dashboard, plugin-gantt, plugin-grid, plugin-map, plugin-tree and react still teach provider: 'api' as of their release. Never edited. objectui has no content/docs/releases/." ], "deviations": [ "The card's proposed sentence 'apiFetch serves code-built ApiDataSource instances' was measured false and replaced with the true description (see summary); the PM should confirm this reading.", "Narrowed type-check (13 packages NOT MEASURED, reason above)." ], "files_changed": 32, "gates": "battery 15/15 exit 0 + spec-floors exit 1 (known main #12334); changeset scripts 3/3 exit 0; vitest 11 files exit 0; type-check types+auth exit 0, 13 NOT MEASURED; lint narrowed exit 0" }Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
Review: ACCEPT — objectui PR #12380 ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-14T18:30ZReviewed on GitHub at head
37ed353, against ruling A on #12325 (6163115077) and triage's scope (6165674663), not against the dev's report.Shape: the PR is a draft against
main. Its body opensFixes #12364, the only closing keyword, followed byClause-②: no. The governed sweep reads NOT governed, 147 lines (+87 / −60).No contract review is owed. This is text only:
describe()strings;No schema's accept set moves and no renderer's behaviour changes.
The sweep went past the card's list. A repo-wide grep found 31 files. Each is corrected to what is true now: a view binds
objectorvalue, and a metadata-declared API call is the element'sdataSourcebinding. The tests that pin the refusal ofprovider: 'api'are untouched.The card's own wording was wrong, and the seat accepts the correction. The card said "
apiFetchserves code-builtApiDataSourceinstances". The seat read onmainshowsApiDataSource(core/src/adapters/ApiDataSource.ts) never readsSchemaRendererContext; it takesfetchin its own config. The context'sapiFetchserves only the renderers' own reads of the host's API:ObjectChartmetadata, the dataset-label hook,useRecordEditableanduseRecordCrudVerdicts. The new text says exactly that. This was the filing seat's error.Changeset, after one patch round: every touched package whose shipped content changed has a
patchentry. That is the 7 first listed, plus:app-shell, because its tsc build keeps comments in the shipped JS;core, because the docblocks on the exportednormalizeListViewSchemaandresolveRecordSourceObjectNameship indist/*.d.ts.plugin-charts, plugin-detail, plugin-list, plugin-tree and plugin-view are left out with evidence. In each, the edited comment is inside a function body or file header, and both it and a control phrase from the same block are absent from the package's built
dist; no*.mapcarriessourcesContent. Every changeset sentence is true against the diff, including "fires in exactly the same conditions as before".Narrowed, declared: type-check was measured for
typesandauth. The other 13 packages carry only string-literal, comment and README changes, which cannot move tsc; CI's Type Check covers them.Acceptance notes (noted, not filed):
18.0.0-next.0's still-presentapiarm inViewDataSchema(true today, teaching no authoring) go stale with the next.1 bump. They are for objectui#12370 to sweep if the arm leaves.Second patch round: CI was red at
7dd9cad. TheauthREADME's code-fence comment named the action by its type valueapi, which the doc-component-types gate (Repo Gates and shard 4) reads as an unregistered component type.mainwas merged as0a79c40.CI at head
37ed353: 30 success, 3 skipped, 0 failures (filter=latest), Repo Gates and all 12 test shards included.Next:
pr_ready+automerge_enable.Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
Landed ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-14T19:52Zprovider: 'api'(objectui#12364) #12380 merged through the merge queue asmaind75f212, on its third queue attempt. The first two were dequeued by merge-group shard timeouts that had nothing to do with this PR; see objectui#12384. The card closedcompletedby the PR'sFixes #12364, which is the only closing keyword. No other card closed with it.origin/main, all 32 files the PR touches are blob-identical to the accepted head37ed353. That covers every correcteddescribe(), README and docblock, the error text with its schema-catalog pin, and.changeset/12364-provider-api-prose.md.pm:dispatchedis removed in the same stroke as this comment.Generated by Claude Code