docs(guide): annotate objectos-integration's object-grid literal as ObjectGridSchema - #8124
Conversation
…bjectGridSchema
`content/docs/guide/objectos-integration.mdx` declared its `object-grid`
example as a bare `const schema = {`, so `check:doc-snippets` compiled the
block against nothing: the gate read no declared type for the literal and
`ObjectGridSchema` was never consulted. objectui#7713 was exactly a
wrong-shaped `filter` on this very block, and the gate stayed green on it for
the whole interval.
Add `import type { ObjectGridSchema } from '@object-ui/types';` to the block's
existing import group and annotate the literal `const schema: ObjectGridSchema
= {`, the shape `packages/plugin-grid/README.md` already uses for its two
`object-grid` examples. Nothing else in the block changes.
The ceiling, stated so nobody over-reads it: `BaseSchema` closes with
`[key: string]: any` (objectui#7927), so this annotation does NOT catch a
misspelled key. It catches a key whose declared TYPE is wrong.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
|
Standing down on
Every other check on Generated by Claude Code |
|
Armed — squash auto-merge enabled and the PR is in the merge queue,
On MERGED: content probe on re-fetched Generated by Claude Code |
|
LANDED — merged at 2026-09-06T17:44:05Z as Content probe on re-fetched
#7972 closed by the Generated by Claude Code |
Fixes #7972
content/docs/guide/objectos-integration.mdxdeclared itsobject-gridexample as a bareconst schema = {, socheck:doc-snippetscompiled the block against nothing: no declared type, thereforeObjectGridSchemawas never consulted. objectui#7713 was exactly a wrong-shapedfilteron this very block, and the gate was green on it for the whole interval.The diff — one page, two lines
```typescript import { ObjectStackAdapter } from '@object-ui/data-objectstack'; +import type { ObjectGridSchema } from '@object-ui/types'; const dataSource = new ObjectStackAdapter({ baseUrl: 'http://localhost:3000/api' }); // ObjectQL queries are automatically handled -const schema = { +const schema: ObjectGridSchema = { type: 'object-grid', objectName: 'contact', dataSource,That is the whole change: the type import joins the block's existing import group, and the literal is annotated. Nothing else in the block moves. It is the shape
packages/plugin-grid/README.mdalready uses for its twoobject-gridexamples (const schema: ObjectGridSchema = {).BaseSchemaends with an index signature that maps any string key toany(measured by objectui#7927). ⛔ So this annotation does not catch a misspelled key on the example, and this PR must not be read as "the example's keys are now guarded". What the annotation catches is a key whose declared TYPE is wrong — which is the entire content of objectui#7713. That distinction is the point of the card; blurring it would leave the next reader believing the doc examples are held tighter than they are.Both controls, re-taken on this commit (
cb82bdb31)Each control ran under a
trapwith absolute paths; the mutation is proven on disk by anchor counts plus agit hash-objectblob that differs from theHEADblob, and the restore is proven by the blob equalling theHEADblob andgit diff HEADbeing empty. Full logs are in the run's scratchpad.Control 1 — the block IS compiled (so the old green was not "uncovered"). Injected
dataSource: zzzUndefinedIdent,into the block:Control 2 — the annotation is load-bearing. With the annotation committed, the
filtervalue was reverted to the pre-objectui#7713and:-keyed object (the exact seven lines PR objectui#7973 removed), leaving everything else in place:Exactly one diagnostic, on this page, naming the wrongly typed key — the same reading the card reported, reproduced on the post-objectui#7973 tree. That single line is the whole value of the change: the difference between a gate that reads the declared type and one that reads nothing.
The card's second claim also re-measures clean: with the annotation and the canonical array
filterin place the gate is green, sodataSource,objectName,filterandsortare all already assignable and the annotation costs nothing today.ObjectGridSchema.filteris declaredany[](packages/types/src/objectql.ts:679), which is what makes the array form assignable and theand:-keyed object not.Gates (all pinned to
cb82bdb31)pnpm check:doc-snippetsSemantic phase: 567 of 567 block(s) judged, 0 failed.·Root bound: no block imports a specifier that resolves only through this repository's ROOT manifest.· controlresolution Module name '@object-ui/types' was successfully resolved to '.../objectui-issue-7972/packages/types/dist/index.d.ts'pnpm check:doc-fencespnpm check:doc-typesnode scripts/check-doc-links.mjsnode scripts/check-doc-expression-carriage.mjspnpm check:control-bytesnode scripts/check-changeset-presence.mjsnode scripts/check-governed-queue-guard.mjs --test content/docs/guide/objectos-integration.mdxNOT GOVERNED— ordinary review and merge-queue routeThe snippet gate's closure was built first with its own
--build-filter(34 turbo tasks, all cache hits), and the gate'sresolutioncontrol confirms it typed against this worktree'spackages/types/dist.A direct
grep -naPself-scan of the changed path for control bytes found none.npx eslint --print-configon the changed path printsundefined, i.e. eslint's own config resolution gives.mdxno configuration, so the repo-wide lint has no receiving population for this diff. No reader test names the page:git grep -l objectos-integrationoverscripts/__tests__andpackagesis empty; the only script that names it isscripts/check-doc-component-types.mjs's exemption ledger, which is run above and green.Live E2E (informational)is red on every branch today for an upstream reason (objectui#7990 / objectstack#16186), unrelated to this diff.Population re-count (requested by the dispatch, so the seat can decide on a census)
Counted with the triage comment's spelling,
git grepovercontent/docs:083343dffcb82bdb31const schema = {const schema:Triage measured 30 across 15 / 21 across 9 at 05:26Z. The difference from that reading is accounted for: objectui#7778's sweep landed as PR objectui#8040 (
docs(plugin-gantt): annotate the four bare object-gantt literals), movingplugin-gantt.mdxfrom the bare side to the annotated side. So the population is not growing between those two readings — one page was cleared, and this PR clears a second. 28 bare literals across 13 pages remain unswept; whether that becomes a census card is the scheduling seat's call, not this PR's.⛔ Scope held to this one page: no other page is annotated here, no gate, no pin, no new scan population, nothing under
scripts/orpackages/**.Generated by Claude Code