Skip to content

docs(plugin-chatbot): compile the README's snippets against the shipped surface - #8228

Merged
baozhoutao merged 2 commits into
mainfrom
claude/issue-5174-doc-snippets-batch30-plugin-chatbot
Sep 7, 2026
Merged

docs(plugin-chatbot): compile the README's snippets against the shipped surface#8228
baozhoutao merged 2 commits into
mainfrom
claude/issue-5174-doc-snippets-batch30-plugin-chatbot

Conversation

@baozhoutao

Copy link
Copy Markdown
Contributor

Part of #5174 (batch 30: packages/plugin-chatbot/README.md)

Base sha 590158122 (batch 29, PR #8206). origin/main advanced to 580b0fdf4 mid-task; merged in with a merge commit (never rebased) and every reading below is re-taken on the merged head b1a383c75.

Spelling note: generic type arguments are written as WORDS below, and element names bare, because GitHub's body sanitizer eats tag-shaped fragments — backticks and fenced code blocks included — and half of this page's story is about a generic.

Census — two readings, both with the gate's own analyzer

Both readings use analyze / compileSnippets / scanFences exported from scripts/check-doc-snippet-types.mjs, with the target's row removed from UNGATED_DOCS and every other row left in place. No hand-written regex. Controls healthy on every run: @object-ui/types resolved to packages/types/dist/index.d.ts, sentinel 1, positive 0, undeclared 1, root-declared 1, 0 findings, 0 src leaks.

Eleven tsx fences on the base at lines 24, 61, 82, 145, 202, 271, 292, 316, 347, 377, 396.

Reading 1 — ledger-literal, on the base

9 diagnostics, not the 8 the row claims. By code: TS2304 x3, TS2552 x2, TS2353 x1, TS2345 x1, TS2322 x1, TS17000 x1.

fence n diagnostics
24 1 TS2304 useState
61 0
82 0
145 0
202 0
271 0
292 0
316 0
347 4 TS2353 api not in UseChatOptions; TS2345 mapper parameter; TS2322 onSend; TS17000 empty expression
377 2 TS2304 ChatbotEnhanced; TS2552 messages
396 2 TS2304 ChatbotEnhanced; TS2552 messages

Against the row's own wording:

  • 5 undefined-nameexact. TS2304 x3 plus TS2552 x2 (Did you mean 'onmessage' is the same class, just with a suggestion).
  • 1 unresolved-modulefalsified, it is zero. See the next section.
  • TS17000 x1, TS2322 x1 — present, but the TS2322 is not the one the brief predicted, and the count is a lower bound. See "Blind spot".
  • Two diagnostics the row never names: TS2353 x1 and TS2345 x1, both in fence 347.

Reading 2 — after adding only the missing imports and declare stand-ins, in memory

5 diagnostics. By code: TS2322 x2, TS2353 x1, TS2345 x1, TS17000 x1. This is the real debt, and the decisions below are made on it.

fence n diagnostics
24 1 TS2322 role widens to string (new — was hidden)
61, 82, 145, 202, 271, 292, 316 0
347 4 unchanged from reading 1
377 0 clean once imported and bound
396 0 clean once imported and bound

What was added: import { useState } from 'react' to fence 24; import type ChatMessage plus import ChatbotEnhanced plus declare const messages: ChatMessage[] to fences 377 and 396. Nothing else — no prop touched, no type widened.

Blind spot: 1

Batch 27's mechanism fired once, in a form neither batch 27 nor 28 had seen. Fence 24's Chatbot tag name was bound, so the element's prop check ran — but messages came from an unresolved useState(...) call, so its binding carried an error type and the check found nothing to complain about. Import useState and the element's real TS2322 appears.

⇒ A mixed ledger row understates type debt not only when a JSX tag name is unresolved (batch 27) but whenever an errored binding FEEDS a checked element. Real TS2322 count was 2, the row said 1.

Also note the row is an upper bound in the total direction and a lower bound in the type-code direction at the same time: 9 diagnostics collapsed to 5 real ones, and one type code went up.

The unresolved module: the mechanism, measured

There is no TS2307 on this page, and the gate can see the package's third-party dependency types. Nothing to widen, no gate gap, nothing filed on this axis.

Measured with derivePackageTypePaths / deriveDeclaredDependencyPaths on the merged head:

  • @object-ui/plugin-chatbot resolves from packages/plugin-chatbot/dist/index.d.ts (built, not source-typed).
  • Because a compiled block imports it, it enters neededPackages, so deriveDeclaredDependencyPaths reads its manifest and probes each declared specifier from packages/plugin-chatbot/.
  • @ai-sdk/react maps to node_modules/.pnpm/@ai-sdk+react@4.0.68_react@19.2.8_zod@4.4.3/node_modules/@ai-sdk/react/dist/index.d.ts, declaredBy: @object-ui/plugin-chatbot. It is not hoisted to the root node_modules (ls node_modules/@ai-sdk/react fails) and it does not need to be: pnpm links it under packages/plugin-chatbot/node_modules/, which is exactly where the probe file sits.
  • boundFailures for this document: 0. @ai-sdk/react is in paths, so resolvesOnlyThroughRootManifest returns false for it.
  • Same for ai (7.0.65), added by this PR to fence 347's imports: declared by @object-ui/plugin-chatbot, mapped, not bounded.

PM mechanism assumption A2 is falsified in its second half. A workspace package's third-party dependency types resolve whether or not they are hoisted, because the resolution probe runs from inside the owning package's directory. The whole run maps 91 specifiers from the declared dependencies of 34 imported packages; only 3 declared specifiers ship no types and stay unresolvable, and none of them is on this page.

Where the ledger's 1 unresolved-module came from is not recoverable from this tree — it predates the current dependency-path derivation. What replaced it is real: the two diagnostics the row never named.

TS17000 and TS2322, decided against the shipped surface

TS2322 in fence 347 — onSend is a phantom prop. README defect, repaired.

Declarations read:

  • ChatbotEnhancedProps at packages/plugin-chatbot/src/ChatbotEnhanced.tsx:450 extends React.HTMLAttributes of HTMLDivElement. It declares onSendMessage?: (message: string, files?: File[]) = a void return at :457. No onSend.
  • ChatbotEnhanced.tsx never READS onSend either — a grep for onSend not followed by Message in that file returns nothing.
  • onSend is real, but somewhere else: it is UseObjectChatOptions['onSend'] (useObjectChat.ts:335, (content: string, messages: ObjectChatMessage[]) = void) and an SDUI schema key the three renderers forward (renderer.tsx:92, :281, :419).

So this is not batch 28's other branch: the component does not read at runtime a prop the type omits. The type refuses a key nothing implements. README defect ⇒ repaired to onSendMessage, the prop that exists.

The page's own prose one section up already said onSend(content, messages) is "the callback fed from" useObjectChat's messages — correct there, and the fence had promoted it to a component prop.

TS17000 in fence 347 — elided body. Typed binding, no marker.

onSend={/* … */} is an empty JSX expression container. The brief's prescription was declare const onSend: ChatbotEnhancedProps['onSend']; that member does not exist, so the binding is spelled against the member that does:

declare const handleSend: ChatbotEnhancedProps['onSendMessage'];

One edit removes both the TS17000 and the TS2322: the attribute becomes onSendMessage={handleSend}. Typed binding, not a fragment marker, per the brief's ordering.

TS2322 in fence 24 — the Quick Start's untyped state. README defect, repaired.

This is the one the brief predicted, and it was invisible on the base (see "Blind spot"):

TS2322: Type '{ id: string; role: string; content: string; }[]' is not assignable to
type 'ChatMessage[]'. Types of property 'role' are incompatible.
Type 'string' is not assignable to type '"user" | "system" | "assistant"'.

ChatbotProps.messages is ChatMessage[] (src/index.tsx:21), and that ChatMessage is the runtime one re-exported from ./ChatbotEnhanced, whose role is the closed union 'user' | 'assistant' | 'system' (ChatbotEnhanced.tsx:23).

What the page used to teach: that an unannotated useState([{ id, role: 'assistant', content }]) is a fine backing store for a typed prop. It is not — the array literal's role widens to string, and the element seven lines down refuses it. A reader copying the Quick Start whole got a red squiggle at the very first Chatbot element, which is the flagship example of the package. The same trap sat in handleSend's newMessage literal.

Repaired with useState of ChatMessage[] plus a ChatMessage annotation on newMessage, and the imports both needed (useState from react, type ChatMessage from the package). Two sentences of prose above the fence now say why the annotation is there.

TS2353 in fence 347 — a retired call shape. README defect, repaired.

useChat({ api: '/api/chat' }) is refused: the installed @ai-sdk/react@4.0.68 types UseChatOptions as a chat or ChatInit union intersected with throttle/resume options, and ChatInit (from ai@7.0.65) carries transport, not api. The package itself already writes the current shape — useObjectChat.ts:12 imports DefaultChatTransport from ai and :539 constructs one. Repaired to match, which is also what makes ai an import of this fence.

TS2345 in fence 347 — package type defect. Not repairable here; filed as #8214.

uiMessagesToChatMessages declares its parameter as the package's own AnyUIMessage[]. mapMessages.ts:19 writes AnyPart to be permissive but types one member tightly, state?: ChatToolInvocation['state'] — the TOOL-invocation state set. A text part in the AI SDK's UIMessagePart union carries state of 'streaming' | 'done', which is not in that set, so the whole assignment fails. The interface written to be loose is, on that one property, stricter than the union it absorbs.

This is batch 28's second branch and it points at src/, which this batch may not touch:

  • The export exists FOR this call — mapMessages.ts's docblock says it is "Shared between useObjectChat … and apps that drive useChat themselves (e.g. Studio …)", and this README section documents the same use.
  • Nothing caught it because the package's own call site is not type-checked: useObjectChat.ts:683 destructures chatResult as any, and __tests__/mapMessages.test.ts:135 calls the mapper with msgs as never. This README block is the first uncast caller in the repository.
  • Runtime is fine — the mapper duck-types on p.type === 'text'.

Filed as #8214 with the mechanism, the three options and a recommendation. ⛔ Not repaired here, and no cast added to the page: a documented cast is the tolerant fallback AGENTS.md #0.1 refuses.

Key-surface bound (objectui#7927)

Verified rather than assumed, per fence:

  • ChatbotProps (src/index.tsx:20) extends React.HTMLAttributes of HTMLDivElement, no index signature, not BaseSchema-derived ⇒ the compiler judges keys itself. Fence 29 (Quick Start): messages, onSendMessage, placeholder all declared; zero after repair.
  • ChatbotEnhancedProps (ChatbotEnhanced.tsx:450) same shape, same verdict ⇒ this is exactly how the onSend phantom was caught (JSX excess-property checking). Fences 363, 399, 422: messages, surface, hideClearBar, processVisibility, onSendMessage all declared; zero after repair.
  • The runtime ChatMessage (ChatbotEnhanced.tsx:21) is a plain interface, no index signature, not BaseSchema-derived — so the role union is really enforced, which is why fence 29's TS2322 is a true positive rather than an artefact.
  • The authoring ChatMessage from @object-ui/types (complex.d.ts:785) is likewise a plain interface with no index signature. A5 confirmed: two distinct types by design — the authoring one adds a 'tool' role and allows a Date timestamp; fence 322 imports it under the alias the page already used.
  • Schema-literal fences (67, 208) bind to no props type at all: they are const object literals with no annotation, so nothing is judged about their keys. Stated so the green is not read as more than it is.

A4 — phantom exports

check:readme-exports is green on the base and on the head (exit 0 both times, package built). Both names the brief flagged are real exports of packages/plugin-chatbot/dist/index.d.ts: uiMessagesToChatMessages at :98, toRuntimeMessages at :100. So are the two type imports this PR adds, ChatbotEnhancedProps (:63) and ChatMessage (:89). No phantom, nothing to repair on this axis.

The unlabeled fence at 251 (now 257)

It is an ASCII box-drawing architecture diagram. Both gates read it and both correctly decline it, for stated reasons:

  • check-doc-snippet-types collects only ts / tsx / typescript info strings, so it never enters the compiled set.
  • check-doc-fence-languages DOES read it: scanFences there filters nothing, its language is the empty string which is in UNHIGHLIGHTED_SPELLINGS, and classifiesAsTypeScript reads line 1 of the body literally — a box-drawing character, so it returns false and classifyFence returns null: "the block is nothing to this gate". packages/plugin-chatbot/README.md is not in that gate's KNOWN_UNHIGHLIGHTED_TS_FENCES ledger and does not belong there.

⛔ Not relabelled. The two bash fences (16, 183) are likewise correctly out of scope.

Per-fence decision

base fence head fence decision
24 29 repair — useState import, useState of ChatMessage[], ChatMessage on the new-message literal, prose
61 67 untouched — compiled clean on the base
82 88 untouched — compiled clean
145 151 untouched — compiled clean
202 208 untouched — compiled clean
271 277 untouched — compiled clean
292 298 untouched — compiled clean
316 322 untouched — compiled clean
347 363 repair (api ⇒ transport, onSend ⇒ onSendMessage, typed binding) and declared fragment for the residual #8214
377 399 repair — own imports plus declare const messages
396 422 repair — own imports plus declare const messages

Ten fences compile in the covered tier. One is a declared fragment.

Ledger decision

UNGATED_DOCS row deleted — the file reads zero, by the two honest routes the gate's own header names ("a block that should compile was made self-contained … and a block that genuinely cannot compile got a FRAGMENT_MARKER declaration with a written reason").

⚠️ A judgment call the reviewer should see. The brief's ruling 5 anticipated a residual and prescribed rewriting the row with the measured remainder. I did not, and here is why, with the alternative stated so it can be overruled cheaply:

  • The debt is block-granular, not page-granular. A page-level row would describe 11 fences by the state of 1, and would leave the other 10 — including the Quick Start, the most-copied block in the package — permanently uncompiled and free to rot, which is the status quo this series exists to end.
  • Ruling 7's positive control is only possible under this shape: an ungated page cannot be named by the gate at all.
  • Every marker in this corpus today is about the reader's own code being absent or an excerpt being elided; this is the first one parked on a cross-package type incompatibility, and it is written to be removable in one line the day finding(plugin-chatbot): uiMessagesToChatMessages' parameter type refuses @ai-sdk/react's UIMessage — the exact input it is exported for #8214 lands. The prose above the fence tells the reader the same thing in words, so nobody copies it without warning.

If you would rather keep the page in the ledger with 1 TS2345, say so and it is a two-line change back.

Gate diff is exactly the two lines of the row, deletions only. Counters: 229 documents both ways; covered 221 ⇒ 222; ungated 8 ⇒ 7; blocks to compile 601 ⇒ 611 (this page's ten); declared fragments 158 ⇒ 159 (this page's one).

No pin enumerates this row: scripts/__tests__/check-doc-snippet-types.test.ts:600 pins only the root README.md row and its objectui#7417 reason, so no test file needed editing (batches 28 and 29 measured the same).

Strictness region

The region from the Fence scanning banner to EOF, 83711 bytes:

  • base 590158122: 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b
  • head b1a383c75: 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b

Identical. The deleted row sits above the banner. Nothing about this gate's strictness moved.

Positive control

Run twice — on a3cc79575 and again on the merged head b1a383c75 — against a committed tree, under a trap ... EXIT INT TERM with absolute paths.

  • Injection: placeholder="Type your message..." becomes placeholder={42} in the repaired Quick Start Chatbot element.
  • Landing proven by observation, not by an editor's exit code: anchor grep count 1 ⇒ 0, injected grep count 0 ⇒ 1, and the blob moved.
  • HEAD blob 0b607af3508916004f1d68cab40b8db81624e92c; mutated blob 74a0f4fdba6c47689099c11b3047d48bc8c2d896.
  • Gate exit under injection: 1, naming the page and the line: [semantic] packages/plugin-chatbot/README.md:55:7 TS2322: Type 'number' is not assignable to type 'string'. (611 of 611 judged, 1 failed)
  • Restore proven by STATE: disk blob back to 0b607af3508916004f1d68cab40b8db81624e92c, git diff HEAD on the path 0 bytes, git status --porcelain empty.

Gates — all pinned to b1a383c75

gate exit
pnpm check:doc-snippets 0
pnpm exec vitest run scripts/__tests__/check-doc-snippet-types.test.ts scripts/__tests__/check-doc-fence-languages.test.ts (123 tests) 0
pnpm exec vitest run scripts/__tests__/ (115 files, 3415 tests) 0
pnpm check:doc-types 0
pnpm check:readme-exports (package built) 0
pnpm check:doc-fences 0
pnpm type-check:scripts 0
pnpm lint:root 0 (32 pre-existing warnings, 0 errors)
pnpm check:control-bytes 0
grep -naP control-byte self-scan of both changed paths 1 (no match — clean)
node scripts/check-changeset-presence.mjs 0 — none owed
node scripts/check-governed-queue-guard.mjs --test on both paths 0, NOT GOVERNED
pnpm check:entry-guard 0
turbo run build $(node scripts/check-doc-snippet-types.mjs --build-filter) --concurrency=2 0 (35/35)

Re-derived beyond the dispatched list, all 0: check:doc-example-readers, lint:coverage, type-check:coverage, check:self-import, check:unreferenced-sources, check:esm-specifiers, check:shell-escape-residue, check:governed-queue-guard self-test.

check:node-esm-load first exited 1 for the environmental reason the brief predicted — turbo shares one cache across worktrees and replayed 12 packages built in the sibling objectui-issue-5174-b29 tree, which the provenance leg correctly refuses to grade. Re-run with --force-build as its own message instructs: exit 0, 34 of 39 published ESM entries evaluated.

Changeset: check-changeset-presence.mjs reports 2 files changed, 0 of them published source of a released package and 0 a manifest whose contract moved ⇒ none owed. No label applied, and no label written at all.

Live E2E (informational) is red on every branch today for the upstream reason tracked in #7990 / objectstack#16186 — not this branch's.


Generated by Claude Code

…ed surface

Burns down `packages/plugin-chatbot/README.md`'s `UNGATED_DOCS` row in
`scripts/check-doc-snippet-types.mjs` (objectui#5174 batch 30). Ten of the
page's eleven `tsx` fences now compile in the gate's covered tier; the
eleventh is a declared fragment naming objectui#8214.

Two real defects the census found, both decided against the shipped surface:

- The Quick Start taught an unannotated `useState([{ role: 'assistant' }])`
  for a typed prop, so `role` widened to `string` and `Chatbot` refused the
  array. Annotated `useState` with `ChatMessage[]`, and the new-message
  literal with `ChatMessage`.
- The mapper example passed `onSend`, which `ChatbotEnhancedProps` does not
  declare and `ChatbotEnhanced.tsx` never reads — `onSend` is a
  `useObjectChat` option and an SDUI schema key, not a component prop. It
  also called `useChat({ api })`, a spelling `@ai-sdk/react@4.0.68` retired
  in favour of a transport. Both repaired to what the package itself writes.

The residual is objectui#8214: `uiMessagesToChatMessages` declares its
parameter as the package's own `AnyUIMessage[]`, whose `AnyPart.state` is
the tool-invocation state union, so `@ai-sdk/react`'s `UIMessage` is refused
at the call that export exists for. `src/**` is out of this batch's scope,
so the block carries a fragment marker with the measured reason instead.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
…30-plugin-chatbot

No overlap with either path in this branch's diff; merged rather than rebased
per the repo's no-force-push rule.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
@github-actions github-actions Bot added documentation Improvements or additions to documentation plugin labels Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3189.7 KB 3191.4 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-B3vw1vMF.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 498.00KB 113.91KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 189.11KB 52.55KB
fields (index.js) 243.04KB 61.36KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 6.57KB 2.76KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.84KB 10.94KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.16KB 3.68KB
plugin-calendar (index.js) 47.67KB 13.25KB
plugin-charts (index.js) 70.62KB 19.71KB
plugin-chatbot (index.js) 193.54KB 46.04KB
plugin-dashboard (index.js) 131.41KB 34.43KB
plugin-designer (index.js) 213.21KB 43.63KB
plugin-detail (index.js) 247.68KB 63.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 131.01KB 32.32KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 208.58KB 56.63KB
plugin-kanban (index.js) 52.83KB 14.63KB
plugin-list (index.js) 113.35KB 27.73KB
plugin-map (index.js) 20.49KB 6.83KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 30.10KB 8.74KB
plugin-tree (index.js) 9.33KB 3.25KB
plugin-view (index.js) 84.46KB 20.80KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.55KB 2.45KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 13.64KB 4.59KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Copy link
Copy Markdown
Contributor Author

Standing down on Live E2E (informational) for this PR — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, 2026-09-07T02:15Z.

That check is informational (not in the main ruleset's required contexts) and is red on the base branch for an upstream reason anchored on objectui#7990 / objectstack#16186; this PR touches one package README and one ledger row in a gate script, neither of which the Live E2E suite exercises. No re-run is requested. Every required check is judged on its own conclusion; this PR flips to ready only when all of them read completed / success on b1a383c75.


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

Armed — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

  • CI on b1a383c75 converged all green at 02:25:09Z (29 checks; Live E2E (informational) excluded per the standing-down note above).
  • Ready for review at 02:25:18Z; post-flip Governed Surface Queue Guard completed/success at 02:25:33Z.
  • Auto-merge SQUASH enabled; added_to_merge_queue on the REST timeline at 02:25:42Z (read 02:25:48Z).

Landing stroke follows the merge: content probe on re-fetched origin/main (useState<ChatMessage[]> in packages/plugin-chatbot/README.md, the one fragment marker naming objectui#8214, and the ledger row's absence, with a control), LANDED here and on objectui#5174 (which stays open, Part of), then the batch-31 claim (packages/plugin-charts/README.md).


Generated by Claude Code

Merged via the queue into main with commit f10c6c5 Sep 7, 2026
31 of 32 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-5174-doc-snippets-batch30-plugin-chatbot branch September 7, 2026 02:41
@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

LANDED — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

Merged at 2026-09-07T02:41:36Z as f10c6c559 (squash). Content probe on re-fetched origin/main at 02:42Z: useState<ChatMessage[]> at packages/plugin-chatbot/README.md:34; exactly one doc-snippet: fragment marker naming objectui#8214; the 'packages/plugin-chatbot/README.md' row is absent from UNGATED_DOCS (0 hits) while the control row 'packages/plugin-charts/README.md' is present (1 hit); the ledger reads 7 rows; the strictness region still hashes to 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b.

Batch 31 (packages/plugin-charts/README.md) is claimed on objectui#5174 next; the card stays open (Part of). (Posted through the seat's REST channel: the MCP write channel is rate-limited on the user identity at 02:41Z.)


Generated by Claude Code

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

Labels

documentation Improvements or additions to documentation plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants