Skip to content

finding(docs): the root README's ts/tsx snippets do not compile — 3 names on no built dist/index.d.ts, incl. createObjectStackAdapter attributed to the wrong package #7417

Description

@os-project-manager

Measured while landing objectui#7115, which puts the root README.md into the scan surface of check-doc-component-types and check-doc-snippet-types for the first time. The component-type half is green in that PR. This card is the OTHER half: what the snippet gate sees now that it reads the file.

The measurement

On branch claude/issue-7115-root-readme-doc-gate-surface, with the gate's own build closure built (pnpm exec turbo run build $(node scripts/check-doc-snippet-types.mjs --build-filter) --concurrency=2), the root README's five ts/tsx blocks produce 9 semantic diagnostics across 4 blocks:

[semantic]  README.md:100:20  TS2305: Module '"@object-ui/app-shell"' has no exported member 'ObjectRenderer'.
[semantic]  README.md:106:39  TS2552: Cannot find name 'myAPI'. Did you mean 'Map'?
[semantic]  README.md:107:29  TS2304: Cannot find name 'MySidebar'.
[semantic]  README.md:209:10  TS2305: Module '"@object-ui/components"' has no exported member 'registerDefaultRenderers'.
[semantic]  README.md:376:10  TS2305: Module '"@object-ui/core"' has no exported member 'createObjectStackAdapter'.
[semantic]  README.md:384:2   TS2304: Cannot find name 'SchemaRenderer'.
[semantic]  README.md:384:25  TS2304: Cannot find name 'schema'.
[semantic]  README.md:394:7   TS2420: Class 'MyCustomDataSource' incorrectly implements interface 'DataSource...': missing findOne, create, update, delete, getObjectSchema
[semantic]  README.md:395:55  TS2355: A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.

Three classes, and they are NOT the same job:

class count what it is
TS2305 missing export 3 candidate real defects — the README teaches an import that does not exist
undefined ambient name 4 myAPI / MySidebar / SchemaRenderer / schema — the blocks are deliberate fragments
elided body 2 MyCustomDataSource is written with a // ... other methods comment

The three names, each measured against the BUILT artifact

  1. ObjectRenderer from @object-ui/app-shellgrep 'Renderer' packages/app-shell/dist/index.d.ts | grep export returns nothing. ⚠️ This is the same phantom as objectui#7095, which recorded it in examples/byo-backend-console/README.md. The root README is a second occurrence of the same name; whoever takes examples/byo-backend-console/README.md teaches ObjectRenderer, an export that exists nowhere in the repo #7095 should take this one in the same stroke.
  2. registerDefaultRenderers from @object-ui/components — the only register* on that package's built dist/index.d.ts is registerPlaceholders. The name appears in NO other authored file: git grep registerDefaultRenderers over content/docs, packages/*/README.md and skills/ is empty. It is taught only in the file no gate read.
  3. createObjectStackAdapter attributed to @object-ui/core — the symbol is real, but it ships from @object-ui/data-objectstack (present in that package's dist/index.d.ts export list; packages/core/dist/index.d.ts has zero occurrences). packages/plugin-dashboard/README.md already imports it from the right package, so the root README contradicts a sibling README. ⭐ This one is a one-specifier fix with the evidence already in the tree — but it was left alone deliberately, because it is a different defect class from finding(docs/gate): the root README's flagship dashboard example teaches stat-card, which nothing registers — and the root README is outside every doc gate's scan surface #7115's (an unregistered node type) and folding it in would have been unruled scope.

Why it is a card and not part of objectui#7115

#7115's ruling (maintainer, 2026-09-01, comment 5494799307) covers the scan surface plus the type content fix. Making these blocks compile means resolving two phantom APIs — deciding what the console-composition example and the renderer-registration example should actually say — which is authoring work with an API question inside it, not a mechanical edit.

So #7115 lands the root README into the scan surface and declares this debt by name in UNGATED_DOCS, which is that gate's own designed mechanism (its header: an unlisted document is "neither covered NOR declared ungated", strictly worse than a named debt; the ledger is re-derived every run and shrink-only). Paying the debt down is this card.

Adjacent, same blind spot, not covered by #7115's ruling either

scripts/check-readme-exports.mjs — the gate whose whole job is "every name a README imports from its own package must be a real export" — states its surface as packages/NAME/README.md. The root README is outside it too, which is why all three names above survived. #7115 widened the two gates its ruling named; this third gate was left alone. Widening it is not free: the root README imports from several packages rather than owning one, so "its own package" has no meaning there and the rule would need restating before the surface can move.

Suggested order

  1. createObjectStackAdapter specifier — mechanical, evidence in tree.
  2. ObjectRenderer — with objectui#7095, one decision for both files.
  3. registerDefaultRenderers — decide what the real registration entry point is, then rewrite the Basic Usage block.
  4. Declare the two genuinely-fragmentary blocks with the gate's fragment marker, and take README.md off UNGATED_DOCS.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repofindingpm:dispatchedpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions