Measured by the domain:ui dev seat while documenting objectui#7594 (branch claude/issue-7594-chatbot-floating-properties). Filed unassigned, ungraded - triage owns routing. Not fixed there: objectui#7594's fence is documentation only and explicitly forbids changing packages/plugin-chatbot/**.
The fact
Two keys on the chatbot-floating surface are declared, offered to authors, and read by nothing.
1. displayMode - declared three times, consumed zero times:
| site |
what it declares |
packages/types/src/complex.ts:865 |
displayMode?: 'inline' | 'floating' on ChatbotSchema, documented as selecting the presentation |
packages/plugin-chatbot/src/renderer.tsx:504 |
chatbot-floating's inputs entry, defaultValue: 'floating', label Display Mode - so the designer paints a control for it |
packages/plugin-chatbot/src/renderer.tsx:526 |
defaultProps.displayMode: 'floating' - so designer-created nodes carry the value |
Read-site census, whole repo, tracked files, dist/ excluded:
git grep -n 'displayMode' -- ':!**/dist/**'
returns only those three declarations, the @object-ui/types doc comment beside them, one CHANGELOG line, the zod-mirror-parity ledger entry, and two unrelated displayMode props on GridField / MasterDetailForm. No renderer branches on it. chatbot-floating renders FloatingChatbot unconditionally; the node's type is what selects the presentation. Authoring displayMode: 'inline' on a chatbot-floating node changes nothing, and authoring displayMode: 'floating' on a chatbot node does not produce a FAB.
2. FloatingChatbotConfig.triggerIcon - packages/types/src/complex.ts:907, declared triggerIcon?: string with @default 'MessageCircle'. FloatingChatbot destructures six of the seven config keys (position, defaultOpen, panelWidth, panelHeight, title, triggerSize) and never reads this one; FloatingChatbotTrigger takes no icon prop. It is also absent from the registration's inputs, so it is reachable only from TypeScript. git grep -n 'triggerIcon' -- ':!**/dist/**' returns the declaration and one CHANGELOG line - nothing else.
Why it is worth a card
displayMode is the sharper of the two: the property panel shows a Display Mode control that cannot change anything, and the published type's own comment tells an author it selects between inline and floating. An AI author reading either surface learns a switch that does not exist. triggerIcon promises a customisable FAB icon and a default that never renders.
Note that objectui#7594's own body describes displayMode as the key that "selects the floating presentation". That was a plausible reading of the declaration and the measurement above contradicts it - the PR for that card documents the key as declared-but-inert rather than repeating the claim.
Not a duplicate
Dedup ran against the repo-scoped open-issue list (381 open issues, PRs excluded) with a lit positive control - chatbot-floating returns objectui#7594, so the zeros below are real readings and not a dark instrument. triggerIcon: 0 hits. FloatingChatbotConfig: 0 hits. displayMode: objectui#7594 and objectui#6152 only.
objectui#6152 is adjacent, not the same axis. It is the declared-but-unmirrored ledger - keys the published TypeScript invites and the published zod validator has never heard of - and it does list displayMode and floatingConfig under complex.zod.ts#ChatbotSchema. This card is the declared-but-unread axis: whether any renderer consumes the key at all. A key can be mirrored and inert, or unmirrored and live; fixing one says nothing about the other.
Suggested route
ADR-0049 enforce-or-remove, one decision per key. For displayMode the third option is real and may be the right one - make it live by having the chatbot registration honour it - but that is a behaviour change with a compatibility question attached (nodes today carry displayMode: 'floating' from defaultProps on a registration where it is inert), so it needs a ruling rather than a dev's judgement.
Generated by Claude Code
Measured by the
domain:uidev seat while documenting objectui#7594 (branchclaude/issue-7594-chatbot-floating-properties). Filed unassigned, ungraded - triage owns routing. Not fixed there: objectui#7594's fence is documentation only and explicitly forbids changingpackages/plugin-chatbot/**.The fact
Two keys on the
chatbot-floatingsurface are declared, offered to authors, and read by nothing.1.
displayMode- declared three times, consumed zero times:packages/types/src/complex.ts:865displayMode?: 'inline' | 'floating'onChatbotSchema, documented as selecting the presentationpackages/plugin-chatbot/src/renderer.tsx:504chatbot-floating'sinputsentry,defaultValue: 'floating', labelDisplay Mode- so the designer paints a control for itpackages/plugin-chatbot/src/renderer.tsx:526defaultProps.displayMode: 'floating'- so designer-created nodes carry the valueRead-site census, whole repo, tracked files,
dist/excluded:returns only those three declarations, the
@object-ui/typesdoc comment beside them, one CHANGELOG line, thezod-mirror-parityledger entry, and two unrelateddisplayModeprops onGridField/MasterDetailForm. No renderer branches on it.chatbot-floatingrendersFloatingChatbotunconditionally; the node'stypeis what selects the presentation. AuthoringdisplayMode: 'inline'on achatbot-floatingnode changes nothing, and authoringdisplayMode: 'floating'on achatbotnode does not produce a FAB.2.
FloatingChatbotConfig.triggerIcon-packages/types/src/complex.ts:907, declaredtriggerIcon?: stringwith@default 'MessageCircle'.FloatingChatbotdestructures six of the seven config keys (position,defaultOpen,panelWidth,panelHeight,title,triggerSize) and never reads this one;FloatingChatbotTriggertakes no icon prop. It is also absent from the registration'sinputs, so it is reachable only from TypeScript.git grep -n 'triggerIcon' -- ':!**/dist/**'returns the declaration and one CHANGELOG line - nothing else.Why it is worth a card
displayModeis the sharper of the two: the property panel shows a Display Mode control that cannot change anything, and the published type's own comment tells an author it selects between inline and floating. An AI author reading either surface learns a switch that does not exist.triggerIconpromises a customisable FAB icon and a default that never renders.Note that objectui#7594's own body describes
displayModeas the key that "selects the floating presentation". That was a plausible reading of the declaration and the measurement above contradicts it - the PR for that card documents the key as declared-but-inert rather than repeating the claim.Not a duplicate
Dedup ran against the repo-scoped open-issue list (381 open issues, PRs excluded) with a lit positive control -
chatbot-floatingreturns objectui#7594, so the zeros below are real readings and not a dark instrument.triggerIcon: 0 hits.FloatingChatbotConfig: 0 hits.displayMode: objectui#7594 and objectui#6152 only.objectui#6152 is adjacent, not the same axis. It is the declared-but-unmirrored ledger - keys the published TypeScript invites and the published zod validator has never heard of - and it does list
displayModeandfloatingConfigundercomplex.zod.ts#ChatbotSchema. This card is the declared-but-unread axis: whether any renderer consumes the key at all. A key can be mirrored and inert, or unmirrored and live; fixing one says nothing about the other.Suggested route
ADR-0049 enforce-or-remove, one decision per key. For
displayModethe third option is real and may be the right one - make it live by having thechatbotregistration honour it - but that is a behaviour change with a compatibility question attached (nodes today carrydisplayMode: 'floating'fromdefaultPropson a registration where it is inert), so it needs a ruling rather than a dev's judgement.Generated by Claude Code