Skip to content

docs(plugin-chatbot): document chatbot-floating's seven declared inputs keys - #7656

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-7594-chatbot-floating-properties
Sep 4, 2026
Merged

docs(plugin-chatbot): document chatbot-floating's seven declared inputs keys#7656
os-sam merged 1 commit into
mainfrom
claude/issue-7594-chatbot-floating-properties

Conversation

@claude

@claude claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Fixes #7594

content/docs/plugins/plugin-chatbot.mdx documents three registrations but its ## Properties table was entirely base-chat keys, so chatbot-floating's own configuration surface appeared nowhere in content/docs. This adds a ### chatbot-floating panel and trigger keys section after the existing table, plus one paragraph in the Properties preamble so the flat table stops implying the floating keys are base keys.

The table's structure, the base-chat rows, and the chatbot / chatbot-enhanced sections are untouched, as are #6824's over-claiming fix and #7589's substitution note - the new section is the other side of that note. No file under packages/plugin-chatbot/** is modified.

Every row is derived from the registration, not from the card

Read from packages/plugin-chatbot/src/renderer.tsx:503-510 (the card's :504-510 was one line stale), cross-read against FloatingChatbotConfig in packages/types/src/complex.ts and against what FloatingChatbot / FloatingChatbotPanel / FloatingChatbotTrigger actually consume. The registration's defaultValues, the type's @default tags and the components' destructuring defaults agree on all six floatingConfig keys, so the Default column has one source and three independent confirmations. panelHeight is documented as a px number, default 520.

Two facts a row copied from the card's table would have got wrong, both measured in the components:

  • The three size keys snap. panelWidth, panelHeight and triggerSize are resolved through fixed Tailwind class tables with a closestSize fallback, so an arbitrary number does not render at that size - a panelHeight of 530 renders at 520. The section lists the real steps for each key.
  • displayMode is read by nothing. It is declared on ChatbotSchema, declared in the registration's inputs (so the designer paints a control) and written into defaultProps, but no renderer branches on it: the node's type selects the presentation. The card's body describes it as the key that "selects the floating presentation"; the read-site census says otherwise, so the row documents it as inert in the same style the page already uses for maxToolRoundtrips, rather than repeating the claim. Filed separately as finding(types/plugin-chatbot): chatbot-floating declares two keys nothing reads - displayMode (designer control included) and FloatingChatbotConfig.triggerIcon #7654.

Which gates judge these rows - measured with two-arm controls, not assumed

Predictions were written before each run; all three matched.

control mutation predicted observed
A - is the gate lit on the new json fence? "type": "chatbot-floating" -> "chatbot-floating-panel" check:doc-types exits 1 exit 1, plugin-chatbot.mdx:218 [unregistered-doc-type]
B - does anything hold a table row? the panelHeight row -> | string | '520px' |, the exact falsehood #7589 exists to stop every install-free gate green green: doc-types 0, doc-fences 0
C - is the gate lit on the new tsx fence? panelHeight: 520 -> '520px' check:doc-snippets exits 1 exit 1, plugin-chatbot.mdx:240:3 TS2322: Type 'string' is not assignable to type 'number'

Each mutation was proved on disk by anchored grep counts and git hash-object movement before its gate ran, and each restore leg by an empty git diff HEAD plus blob equality against the HEAD blob, under an EXIT INT TERM trap.

The answer, plainly: the prose table rows are held by nothing. Control B is the load-bearing reading - a deliberately wrong panelHeight row passes every gate green. check:doc-types reads type string literals in code blocks and, since #5106, registration key tables anchored on the \| Namespaced key \| Bare-name fallback \| Renderer behind it \| header; a \| Property \| Type \| Default \| Description \| table is not that surface, and the gate's own header says judging whether a snippet's other keys are read by the renderer is deliberately out of scope. check:doc-snippets reads fenced ts/tsx bodies only. Nothing compares a Default cell, a scope note, or the word "number" to the declaration.

So the two claims that are held were put where a gate can hold them:

The section deliberately references its subsection by name in prose instead of an in-page anchor link, because #7644 measured that check-doc-links never validates in-page anchors - an anchor here would be unheld by construction.

Verification

Union re-run at a6bbed3c, the pushed commit, tree clean:

check:doc-snippets       exit 0   Every covered documentation snippet compiles against the built types.
                                  (453 of 453 blocks judged, 0 failed; sentinel + positive controls lit)
check:doc-types          exit 0   Every documented component type is registered.
check:doc-fences         exit 0   every TypeScript block in 227 document(s) is fenced ts/tsx/typescript ... SHRINK-ONLY
docs:check-links         exit 0   Links are valid across 17 scan roots.
check:docs-route-closure exit 0
check-changeset-presence exit 0   No source or published contract of a released package changed in this
                                  range, so no changeset is owed.

Exit codes were captured by redirect before any pipe. check:doc-snippets ran after building its own --build-filter closure through the shared verify lock (slot issue-7594), so its 0 is a verdict and not the exit-2 "could not run".

No changeset is owed and none is added - the gate's verdict line above is the evidence, not my reading of the diff. The skip-changeset label reads nothing in this repo and is not applied.

Repo-wide lint was narrowed, and the narrowing is measured rather than asserted. pnpm lint is eslint . --no-inline-config; asked about the single changed file, eslint's own config resolution answers File ignored because no matching configuration was supplied (--format json, 1 file, 0 rules applied, errorCount: 0). The diff is one .mdx file under content/docs, changes no eslint config and no source, so no untouched file's verdict can move.

Clause-2 determination: no

My own determination, and it agrees with the dispatching seat's. This documents an already-published, already-declared surface: no schema key, no export, no validator behaviour, nothing that changes what a contract accepts or rejects. The only executable artefacts added are two documentation fences that describe existing declarations. This can land through the merge queue.

Out of scope, filed not fixed

Dedup ran against the repo-scoped open-issue list (381 open issues, PRs excluded) with a lit positive control - chatbot-floating returns #7594 - so the zero-hit readings behind both cards are real and not a dark instrument.


🤖 Generated with Claude Code

https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3


Generated by Claude Code

…ts keys (objectui#7594)

The page documents three registrations but its Properties table was entirely
base-chat keys, so `chatbot-floating`'s own configuration surface appeared
nowhere in content/docs. Every row here is derived from the registration's
`inputs` and its defaultProps, and from what FloatingChatbot / -Panel /
-Trigger actually read - not from the card's table.

Two facts the registration carries that a copied row would have missed:
the three size keys snap to the nearest entry in a fixed Tailwind class
table (a `panelHeight` of 530 renders at 520), and `displayMode` is declared
and offered in the designer but read by nothing - the node's `type` selects
the presentation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

finding(docs): chatbot-floating's entire authorable surface is documented nowhere — seven declared inputs keys, zero mentions in content/docs

1 participant