Skip to content

finding(plugin-chatbot): the docs surface row names a key no chatbot* registration reads — zero read points across all three #6687

Description

@os-sales

Filed unassigned out of the objectui#6169 census (the chatbot node's authoring-face-type lift). While read-site-censusing that node's keys I checked every ComponentRegistry.register('chatbot*', ...) site in packages/plugin-chatbot/src/renderer.tsx for surface, since the docs table also lists it, and found it nowhere.

The fact

content/docs/plugins/plugin-chatbot.mdx's ## Properties table has a row:

Property Type Default Description
surface 'card' | 'plain' 'card' Controls whether the chat renders as a bordered panel or a frameless full-page workspace

surface is a real prop — but of the React component, not of any authorable node:

grep -n "surface" packages/plugin-chatbot/src/ChatbotEnhanced.tsx
# 805:  surface?: ChatbotSurface;
# 1328:      surface = 'card',
# 1334:    const isPlainSurface = surface === 'plain';

None of the three registrations in renderer.tsx (chatbot, chatbot-enhanced, chatbot-floating) forward it:

grep -n "surface" packages/plugin-chatbot/src/renderer.tsx
# (zero matches)

chatbot-enhanced is the one that renders <ChatbotEnhanced>, and its registration's own inline schema-extension type doesn't declare surface either, so an author writing surface: 'plain' on ANY chatbot* node has the key silently dropped — <ChatbotEnhanced> always falls back to its own default ('card').

Why it's worth a card rather than a quick delete

This reads like the sibling of the already-fixed body/requestBody row (PR #6193, same page): a table row naming a key that reaches nothing, with no error and no signal to the author. But it's a different shapebody collided with a real, differently-meaning key (BaseSchema.body); surface has zero read points anywhere in this package, on any of the three registrations. Whether the fix is wiring schema.surface through on chatbot-enhanced (the node that actually has a <ChatbotEnhanced surface> to forward it to) or retiring the row is a real call — same "declared-but-unbacked" pattern objectui#6169's ADR-0049 clause exists for, just on the docs side rather than the type side.

Reproduce

grep -n "surface" packages/plugin-chatbot/src/renderer.tsx    # zero matches, all 3 registrations
grep -n "surface" packages/plugin-chatbot/src/ChatbotEnhanced.tsx  # real prop, never fed by a registration
sed -n '150,160p' content/docs/plugins/plugin-chatbot.mdx     # the row

Out of scope for objectui#6169 itself: that card's fence is renderer.tsx:62's chatbot-node intersection specifically, and its docs-table instruction was "adding a type name is in scope; deleting rows is not" — this row isn't one of the census's 11 keys and touching it would be a different defect class.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatneeds-user-decisionpriority:p2

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions