T1–T4 shipped the mechanisms; the owner's verdict on the UI:「far from muscle memory」. This page is the evidence base for the redesign: how mobile chat-based game apps put tools in the chat window — where tools live, how results render, how "act now" is signaled, how state stays visible without eating the screen. Method: the deep-research harness, 2026-07-22 — 5 search angles · 20 sources fetched · 25 claims adversarially verified(3-vote)· 24 confirmed, 1 refuted. Confidence pills mark each finding; §4's Chinese-app leads are unverified and labeled as such.
Mid-game, our chat can simultaneously carry: four stacked dock strips(board pin · gate/ballot card · clock pin · the die)+ the hand dock floating above the composer + the gate-mode strip inside it + the T4 tools button — and the stream mixes seven capsule families(roll · clock · envelope · deal ×3 · gate ×2). Each piece is defensible alone; stacked, they can eat a third of a phone screen while the newest message — the thing chat is FOR — scrolls beneath them. Nobody designed them as one room. That is the gap this study addresses.
| app | the mechanic, concretely | confidence |
|---|---|---|
| Telegram dice | The canonical in-stream result: a message-sized animated sticker, value server-authoritative(identical for all viewers); animation plays once then freezes — the frozen frame IS the durable record AND the re-roll affordance(tap → "send another?"); a looping preview sticker before sending is the built-in empty-state hint. | high · primary |
| Discord components | The message card IS the tool surface: up to 40 components(buttons · selects)in action rows, inside ordinary stream messages. The "act now" signal is the tappable component itself — no separate overlay, no notification layer; tapping fires the interaction and the card updates in place. | high · primary |
| DiscordDiceBot("Button Dice Roller") | Typed commands replaced by tappable buttons, stated rationale: touchscreen usability. The load-bearing trick: after every use the bot re-posts the button card to the channel bottom — the control surface follows the newest content instead of scrolling into history or pinning as chrome. | high · primary |
| WhatsApp polls | Creation lives behind the composer's ➕ attachment menu(no persistent chrome); voting happens on the in-stream card: tap → green checkmark(instant confirmation); tap another to change, tap again to remove. | medium · multi-corroborated |
| Foundry VTT | Fullest chat-native model: rolls invoked from the chat field, every roll is a chat message; roll cards are collapsed to the total by default — click to expand the dice breakdown, click to collapse; "deferred rolls" embed a tappable roll button inside a message any user can press. | high · primary |
| Dice So Nice(Foundry's dominant dice module) | The physical-metaphor overlay: every roll renders as a 3D physics throw layered over the chat, settles on the authoritative result, auto-hides — leaving the compact chat card as the durable record. Ceremony on top, record beneath, never both persisting. | high · primary |
| D&D Beyond | Each roll = a structured three-part card(what was rolled · result with modifiers broken out · a visual of the dice used)in a Game Log that is embedded contextually(character sheet, campaign page, encounters)— results live next to where play happens, not in one global feed. | high · primary |
| Among Us | The synchronous grammar: a meeting is a total modal takeover with hard phase-gating(teleport, movement lock, overview→discussion→voting; voting impossible outside its phase); the interruption is attributed(megaphone icon on the caller); votes use select-then-confirm(green ✓); progress mirrors into the chat stream("X has voted, N remaining"); completed state = badges on the actor's avatar; the phase label sits in one consistent corner. | medium · wiki + devlog |
| Jackbox | The onboarding grammar(the codified "Jack Principles"): one task at a time · limited choices · explicitly show the game is waiting for you; zero-install join(room code on a plain web page); the per-player private screen delivers hidden roles while shared content renders communally. | high · primary + white paper |
Refuted in verification(and worth knowing): the widely-cited Discord 25-component/5-row cap — the current Components V2 limit is 40. The harness killed it 0–3 against the live primary doc.
| # | pattern | seen in |
|---|---|---|
| 1 | The in-stream interactive card is the tool surface. Tools are messages; the room's timeline is the tool timeline. | Telegram · Discord · WhatsApp · Foundry · D&D Beyond(universal) |
| 2 | Immediate in-card feedback on action: checkmark, badge, animation settling on the result. The card confirms; nothing else needs to. | near-universal |
| 3 | Progressive disclosure protects the chat: collapsed-total-by-default with tap-to-expand; play-once-then-freeze. | Foundry · Telegram · D&D Beyond |
| 4 | Creation entry points hide in the composer's ➕ menu or a one-time setup — never persistent chrome. | WhatsApp · DiscordDiceBot(our T4 drawer already matches) |
| 5 | Modal takeover is reserved for synchronous, mandatory phases only — and then it is TOTAL and hard-gated. | Among Us · Jackbox(one-task-at-a-time) |
| 6 | Physical-metaphor ceremony resolves into a compact durable record: the throw/flip animates once, on top, then leaves a small card behind. | Telegram · Dice So Nice |
And the anti-pattern, stated by absence: no verified app keeps a permanent pinned HUD strip for tools. The two mechanisms that exist — DiscordDiceBot's follow-the-bottom re-post and Among Us's dismissable overlay — exist precisely to avoid one. The open question the field leaves: how running state(score · phase · countdown)stays visible in a pure stream — the research found no verified winner beyond the re-post trick, which is honestly where our board/clock pins are least indicted.
The harness's honest gap: 狼人杀/剧本杀 sources were found but their claims fell below the verification budget — and two key sources 403'd. These are leads, not findings unverified; the follow-up is hands-on app inspection.
(正在组织语言…) placeholder marks pending turns; the full dialogue stays reviewable next to active state for vote-tracking.Note how the leads rhyme with the verified patterns: ritual animation at peak moments(pattern 6), one visible floor-holder(our floor, T6), private-channel role delivery(Jackbox's split-screen, our face-down deal)— which raises confidence in the direction even where the specifics are unverified.
Read as of v560 — the「where we diverge」column is now history for laws 1–4 and 6(closed by v569's D1–D4); law 5's takeover is still open and rides T5.
| field law | where we already comply | where we diverge |
|---|---|---|
| 1 · in-stream card = tool surface | capsules are records; the ballot card is tappable | the LIVE tool sits in the dock, not the stream — an armed ballot/circle/die is a strip above the chat, exactly the HUD the field avoids |
| 2 · immediate in-card feedback | gate chips tick ✓; ballots highlight my pick; hand die flies to the table | vote confirmation could be more WhatsApp-instant(the ✓ beat) |
| 3 · progressive disclosure | board pin collapses; tumble = play-once-freeze ✓ | the dock strips don't collapse to anything smaller; no expanded/compact duality on cards |
| 4 · ➕-menu entry | T4's tools drawer is exactly this ✓ | — |
| 5 · modal takeover for sync phases only | we never take over(good default) | we have NO takeover grammar for the moments that earn it(the deal flip; a card session's hard gate)— T5/T7 will want one |
| 6 · ceremony → compact record | fly-to-table; reveal cards | peak moments(the deal, the unseal beat)deserve the one-shot overlay treatment; everything else should get LESS motion, not more |
The owner took D1–D4 as the T-UI step contract in toolbox-build.html; they shipped as one client-only change(lib/room-ui.html alone — every projection the redesign needed already rode replay and SSE). D5 stays queued: the earned takeover needs T5's card sessions and lands with them. What the build actually measured is in that page's findings log; the short version is that the stack test's pre-chat chrome went from four strips to 35.5px.
lib/room-ui.html alone, no server change — which is itself a finding: every projection the redesign renders from(rep.board/gate/clock/dice)already rode replay and SSE, so the six mechanisms were placed wrongly, not built wrongly. Measured on a 375×812 viewport with board + open ballot + running clock + armed collect-roll live at once: pre-chat chrome 35.5px(was four stacked strips), the ballot riding the stream and still last after three human messages and two persona replies, a vote tap confirming in-card within 30ms, and zero infinite animations left on any furniture surface. Traps, decisions and the full acceptance run: toolbox-build.html § findings. The study's own §6 questions are untouched by the ship — no measured effectiveness data exists for any of these patterns, and the CN one-screen family still wants a phone-in-hand session.