Uh oh!
There was an error while loading. Please reload this page.
docs(utilities): teach the real ObjectStack adapter, not a phantom provider - #5460
Merged
os-support-ai merged 1 commit intoAug 21, 2026
Merged
Conversation
…ovider `content/docs/utilities/index.md`'s "Data Integration" section imported `ObjectStackProvider` from `@object-ui/data-objectstack`, a React context provider on a headless package that exports no such thing. Against the built `dist/index.d.ts` the block read TS2724 — a reader who copied it got a compile error, not a runtime bug. Rewritten on the shape PR #4129 established for the sibling page `content/docs/utilities/data-objectstack.mdx`: `createObjectStackAdapter` returning a plain `DataSource`, injected through `@object-ui/react`'s `SchemaRendererProvider`. The block is self-contained and types its schema literal as the real `ObjectGridSchema`, so it compiles as a reader who copies that one block experiences it. That was the page's only ts/tsx block, so it now produces zero diagnostics and the page LEAVES `check-doc-snippet-types.mjs`'s `UNGATED_DOCS` ledger: no entry on that ledger names a missing export any more. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RV6yuVCxymHYE16PL9vQkE
os-support-ai
marked this pull request as ready for review
August 21, 2026 00:37
Uh oh!
There was an error while loading. Please reload this page.
os-support-ai
deleted the
claude/issue-5360-phantom-objectstackprovider
branch
August 21, 2026 00:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#5360
Docs + gate ledger only. Rewrites the "Data Integration" section of
content/docs/utilities/index.mdagainst the surface@object-ui/data-objectstackactually exports, and takes the page off
check-doc-snippet-types.mjs'sUNGATED_DOCSledger because it now compiles clean.
Premise re-verified on the branch tip
The phantom is genuinely absent from the built package, and the real names are present —
each grep counter-probed with a term known to be there, so a zero is a measured zero and
not a mistyped path:
packages/data-objectstack/dist/index.d.tsObjectStackProviderObjectStackAdapter(counter-probe, known present)createObjectStackAdapteris declared atdist/index.d.ts:2418and named in the exportlist at
:2431.SchemaRendererProvideris declared inpackages/react/dist/context/SchemaRendererContext.d.ts:18and re-exported throughpackages/react/dist/index.d.ts.ObjectGridSchemais declared inpackages/types/dist/objectql.d.ts:484(type: 'object-grid',objectName: string) andexported from that package's index.
Before / after, compiled — not eyeballed
Both readings come from the SAME harness the gate uses:
analyze()+compileSnippets()imported from
scripts/check-doc-snippet-types.mjs, with every other document declaredungated so the program compiles exactly this page's blocks. Its three controls were green
on every run below — resolution landed on
/home/user/objectui-issue-5360/packages/types/dist/index.d.ts(a built artifact, never apackage's
src/), the planted sentinel produced its TS2305, the positive control producedzero, and zero source files under any
packages/*/src/entered the program.Before (
origin/maincontent, against the builtdist/*.d.ts):That is exactly the mix the ledger entry recorded by hand —
TS2724x1plus"2 undefined-name diagnostic(s)".
After:
Counter-probe on that zero. A green run whose harness silently stopped reading the
page looks identical to a green run whose page is correct, so the zero was probed rather
than trusted: re-planting
ObjectStackProviderbeside the real import turned BOTH thetargeted probe and the full gate red, on this file, by name —
— and reverting it restored the green. The mutation was made and reverted on top of the
commit, so the restored file is byte-identical to what is pushed (
git statusclean, andObjectStackProvidergreps 0 whilecreateObjectStackAdaptergreps 3).The PR #4129 precedent this follows
#4124 established the finding and PR #4129 fixed it — on
content/docs/utilities/data-objectstack.mdxonly. Reading that PR rather than inventinga shape, its precedent was:
@object-ui/data-objectstackis headless — no
reactin any dependency field, no React import insrc/— soObjectStackProviderhas no home there. PR docs(data-objectstack): document the real headless surface, not a phantom React API #4129's reverse verification recorded thesame TS2724 / TS2305 pair this card's
TS2724is one half of.createObjectStackAdapterreturning a plainDataSource, withnew ObjectStackAdapter(config)named as the class form of the same thing.@object-ui/react'sSchemaRendererProvider, since React wiring lives in@object-ui/react, not in theadapter package — and note that
SchemaRendereralso takes an explicitdataSourceprop for per-render injection.
apiUrl/apiKeybecamebaseUrl/token,which is what
createObjectStackAdapter's config declares.dataSourcekey distinct from the adapter — the formeris the spec's per-element binding (what to query), the latter is how to reach the
backend. The rewritten section says so and links to the sibling page for the full table.
The rewritten snippet is also self-contained: it imports every name it uses and types
its schema literal as the real
ObjectGridSchema, so it is judged exactly as a reader whocopies that one block experiences it. That is what retires the two
TS2304undefined-namediagnostics the same ledger entry carried — the sibling page still carries 16 of them and
stays ungated for that reason.
The page LEAVES the ledger, with the measurement
content/docs/utilities/index.mdholds exactly ONEts/tsxfenced block (verifiedagainst the fence scan: one
typescript fence at `:162`, nowtsx, and six ```bashfences). With that block at zero diagnostics the page needs no entry, so the entry is
removed rather than re-measured — the ledger's own rule is that it can only shrink.
Full gate, whole corpus, real exit code captured (not read through a pipe):
Covered went 158 -> 159, ungated 64 -> 63. Two header claims in the same script
were true only while the entry existed and are corrected in the same commit: the
"20 of these entries are
.mdpages" count is now 19, and "Exactly one entry still names amissing export" — that one — now records what became of it. No entry on the ledger names a
missing export any more.
Verification
All of the below on
7b289c91b, the branch head and the final commit. Heavy runs wereserialised through the shared
/tmp/os-heavy-verify.lock.pnpm turbo run build $(node scripts/check-doc-snippet-types.mjs --build-filter) --concurrency=232 successful, 32 totalnode scripts/check-doc-snippet-types.mjsnpx vitest run scripts/__tests__/check-doc-snippet-types.test.ts1 passed (1),20 passed (20), exit 0node scripts/check-doc-component-types.mjsEvery documented component type is registered.(object-gridis a registered key)node scripts/check-doc-links.mjsLinks are valid across 13 scan roots.node scripts/check-control-bytes.mjsOK (scanned 4520 tracked text file(s); skipped 85 binary)node scripts/check-changeset-presence.mjs1 changeset(s) added, exit 0node scripts/check-changeset-fixed.mjs/check-changeset-no-major.mjspnpm type-check:scriptsnpx eslint scripts/check-doc-snippet-types.mjsChangeset:
.changeset/utilities-index-phantom-provider-5360.md, empty frontmatter —this publishes nothing, declared explicitly rather than left undeclared. No package
src/is touched.
File surface
Exactly three files,
origin/main...HEAD(three-dot, against merge base77f846a8b):content/docs/guide/react-pages.mdis not addressed here — sibling card #5413 is inflight on that page and it is deliberately untouched.
Generated by Claude Code