Skip to content

feat: beta-launch SDK lane — Beta pill, paused-chat state, markdown fixes - #44

Merged
Robbertvermeulen merged 5 commits into
mainfrom
feat/beta-launch-sdk
Sep 19, 2026
Merged

Robbertvermeulen merged 5 commits into
mainfrom
feat/beta-launch-sdk

Conversation

@Robbertvermeulen

Copy link
Copy Markdown
Contributor

Beta-launch lane for the WP SDK, verified end-to-end in the browser on the PLLAT dev site.

What's in here

  • Beta pill (ac33de0 + b60fbe0): consumers can pass beta: true in the mount config; the UI renders a "Beta" pill next to the page title and the agent header. b60fbe0 makes the flag reader accept wp_localize_script's stringified booleans (true arrives as "1", so a strict === true check silently failed against a real WordPress payload).
  • Calm paused state (b7ea105): when the hub reports chat_disabled, the panel shows "The community chat is temporarily paused." and disables the composer instead of erroring. Verified against the hub kill switch both ways.
  • Markdown fixes (b410f01): topic-card excerpts strip markdown to plain text (raw ##/** no longer leak into the list), plus tuned bubble markdown styles.
  • Typewriter snap fix (a798988): a non-animating bubble snaps to its full text when the panel swaps its content on a reused component — fixes the "+ New topic" greeting rendering clipped mid-sentence ("…review &").

Tests / gates

composer cs, composer stan, composer test, npm test, npm run build all green; assets/dist rebuilt and committed.

Merge coordination runs via the roundtable-66 session (Robbert's akkoord there). After this lands on main, PLLAT's composer lock needs a re-pin (composer update epicwp/wp-roundtable) so the beta flag activates in the production build.

🤖 Generated with Claude Code

Robbertvermeulen and others added 5 commits August 20, 2026 12:04
The SDK is about to ship inside a consuming plugin's beta programme, and
users need a visual cue that the Community feature itself is still beta.
The consumer opts in via a new Config->beta flag (default false), which
Page localizes into RoundtableConfig; the frontend then renders a small
WP-blue "Beta" pill next to the agent name in the chat header and next
to the Community page heading.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…yles

Topic list cards rendered the case summary raw, so markdown structure
("## Steps to reproduce", **bold**, fences) leaked into the one-line
excerpt. Cards now strip markdown into readable plain text via a new
pure markdownToPlainText helper; TopicRow is the single card renderer,
so the All/Participating/Started/Roadmap lists are all covered. The
detail view keeps rendering the full markdown body (now pinned by a
test).

Chat bubbles rendered headings at browser-default sizes and lists with
default margins inside the compact 13.5px bubble, and numbered lists in
the detail/comment prose had no styles at all (only ul was styled).
Added rt-ab heading/list rules and extended the rt-prose ul rule to ol.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pairs with the hub change that adds "chat_disabled": true to
GET /project/config and refuses message POSTs with a 403 carrying the
chat_disabled code. Previously a vendor pausing their chat surfaced as
a red generic error bubble, which reads as breakage to end users.

Config-driven: Page passes chat_disabled (false on hub failure) into
RoundtableConfig as chatDisabled; the chat panel then shows one calm
agent-styled notice ("The community chat is temporarily paused.") and
disables the composer.

Runtime: HubClient inspects a message 403's body for the chat_disabled
code (top-level `code`, FastAPI `detail` string, or `detail.code` —
the exact hub shape is not final) and throws a dedicated
HubException::chatDisabled, which travels the existing errorKind
mechanism (REST error.kind on the buffered path, SSE error message on
the streaming path, where the refusal body is now captured from the
frame callback). The frontend renders that kind as the same calm
notice, without error styling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
wp_localize_script casts scalars to strings (true => "1", false => ""),
so betaEnabled/chatDisabled's strict === true checks silently failed
against a real WordPress payload — the Beta pill never rendered on the
consuming site. Boolean flags now accept the stringified truthy forms.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…xt swaps

The '+ New topic' reset replaces the greeting text on the same mounted
Bubble (same key), but useTypewriter kept the previous text's shown-length,
clipping the longer topic intro mid-sentence ('…you can review &'). A
non-animating bubble now always snaps to its full text on text change.
Verified in the browser (renderToString tests cannot exercise effects).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Robbertvermeulen
Robbertvermeulen merged commit 4284503 into main Sep 19, 2026
2 checks passed
@Robbertvermeulen
Robbertvermeulen deleted the feat/beta-launch-sdk branch September 19, 2026 08:51
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.

1 participant