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 shape — body 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.
Filed unassigned out of the objectui#6169 census (the
chatbotnode's authoring-face-type lift). While read-site-censusing that node's keys I checked everyComponentRegistry.register('chatbot*', ...)site inpackages/plugin-chatbot/src/renderer.tsxforsurface, since the docs table also lists it, and found it nowhere.The fact
content/docs/plugins/plugin-chatbot.mdx's## Propertiestable has a row:surface'card' | 'plain''card'surfaceis a real prop — but of the React component, not of any authorable node:None of the three registrations in
renderer.tsx(chatbot,chatbot-enhanced,chatbot-floating) forward it:chatbot-enhancedis the one that renders<ChatbotEnhanced>, and its registration's own inline schema-extension type doesn't declaresurfaceeither, so an author writingsurface: 'plain'on ANYchatbot*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/requestBodyrow (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 shape —bodycollided with a real, differently-meaning key (BaseSchema.body);surfacehas zero read points anywhere in this package, on any of the three registrations. Whether the fix is wiringschema.surfacethrough onchatbot-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
Out of scope for objectui#6169 itself: that card's fence is
renderer.tsx:62'schatbot-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.