User reported that chat/activity bubbles on ticket detail pages look weird, with screenshots attached in Telegram from 2026-06-05. Observed from screenshots: - Ticket Activity ...
StateDoneNext ActionClosedOwnerLuciRuntimeClosedAge8d ago
Ticket is done; runtime is closed.·cwd /home/lucienne/workspace/state/control-room-worktrees/mc-4750-fix-weird-ticket-activity-chat-bubbles-8560d6 · uptime 7d 16h · last activity 7d 15h ago
Description
MC-4750
User reported that chat/activity bubbles on ticket detail pages look weird, with screenshots attached in Telegram from 2026-06-05.
Observed from screenshots:
- Ticket Activity header shows WAITING + INTERACTIVE, but the feed visually mixes several kinds of content: user-facing chat, controller system logs, follow-up reminders, and long worker handoffs.
- Short status/system items are rendered as centered grey pill bubbles, while normal Luci/controller entries are card-like bubbles; the visual hierarchy feels inconsistent.
- Long worker handoff text becomes one dense, oversized unformatted bubble/log block, making the ticket hard to scan.
- Controller recovery/dispatch events are repeated as prominent chat messages, adding noise.
- Top status text says "Awaiting your ok to write to superdru" (typo: should be Superbru) and appears as a faint centered line detached from the activity stream.
Request:
- Audit and clean up ticket detail Activity/chat rendering.
- Separate system/control-room events from conversational messages, or render them in a compact timeline/log style.
- Make long worker summaries readable: preserve paragraphs/bullets/code tokens, constrain width, and avoid giant undifferentiated grey bubbles.
- Fix copy/typo issues in waiting prompts.
- Verify on live Mission Control ticket detail page with representative states: waiting, interactive, controller dispatch/recover events, follow-up reminder, and long worker summary.
Acceptance:
- Live browser UA pass on ticket detail page showing improved visual hierarchy and readable long messages.
- No regression to sending messages from the ticket composer.
- Console clean or documented.
Expected check-in: 2026-06-05T13:00:00+00:00
Activity
done
INTERACTIVE
Luci is working...
Details —
Done
· High
· Luci
▼
SState
Done
Closed
PPeople
TTiming / Details▼
api (human)
Mission Control
8d ago
6d ago
Advanced / Operator evidence
RRouting owner
ROperator console
Ticket is done; runtime is closed.direct_worker_done_recoveredcwd /home/lucienne/workspace/state/control-room-worktrees/mc-4750-fix-weird-ticket-activity-chat-bubbles-8560d6 · uptime 7d 16h · last activity 7d 15h agoMC is visibility-only. Hermes Luci launches and gates work outside MC, then mirrors evidence/status here.Raw console: luci-controller · claude-code
WWorkflow
Start Dev Review + QA ▾
Select phases to include:
Agents
Review Gates
Decision
WAT routing: choose an agent, review gate, or decision. Buttons use the live runtime when one is attached.
Screenshot evidence local to Luci:
- /home/lucienne/.hermes/image_cache/img_b7103cc164fe.jpg — long dense worker handoff rendered as a giant chat/log block.
- /home/lucienne/.hermes/image_cache/img_7835b94176e4.jpg — repeated controller dispatch/recover cards plus detached follow-up/waiting prompt.
elmar8d ago
Tessa UI test — please ignore
system8d ago
RUNTIME TERMINAL STATE (MC-3482 contract)
status: warning
summary: Live ticket runtime timed out without a harvestable verdict; parked for automatic runtime recovery.
root_cause: harvest timeout — pane was silent/wedged and the transcript carried no verdict to sweep
safe_retry: Runtime was killed and the ticket was returned to todo for a fresh Luci-owned retry; no human input is needed.
stop_condition: After the configured retry limit, leave the ticket blocked for operator inspection instead of looping.
human_input_required: no
next_actions:
- Pickup will start a fresh runtime from MC history.
- Inspect the pane log artifact only if the retry fails again.
artifacts:
- ticket:MC-4750
luci-followup-sweep8d ago
[follow-up] 10 min past expected check-in (2026-06-05T13:53:02.082600+00:00 UTC).
api8d ago
DONE — ticket Activity feed render rework. Landed mission-control master dded6ff, deployed (luci-dashboard restarted, ASSET_VERSION 20260605c).
What changed (static/chat.js + templates/ticket.html CSS):
- Control-room/automation events (control-room-recover/dispatch/merge, follow-up, failed_to_inject, runtime-send-failed, picking-up) now render as compact, de-emphasised timeline LOG ROWS instead of loud bubbles/pills. Multi-line events collapse into an expandable details row.
- System notes / worker handoffs render as readable LEFT-aligned cards with markdown body (paragraphs, bullets, code preserved), replacing the old faint centered grey pill.
- Long agent bubbles / notes clamp behind a Show more / Show less toggle so one handoff cannot dominate the feed (with a re-entrancy guard against duplicate toggles).
- Conservative classifier: only known automation vocabulary is de-emphasised. A worker/agent message opening with [summary]/[analysis]/[note] stays a readable bubble (council-flagged false-positive risk removed).
Typo note: the reported "Awaiting your ok to write to superdru" was a LEGIBILITY artifact of the old faint pill, not a data typo — the stored text is correct ("Awaiting your OK to write to Superbru"). The readable note card resolves it; no data edit needed.
Verification:
- Live screenshots on the deployed build (MC-4740): readable hierarchy, legible Superbru line, 0 old grey pills.
- Tessa human-experience pass (desktop 1280 + mobile 390): APPROVED FOR ELMAR — composer send works, zero JS console errors, no overflow. Report: tests/tessa-mc4750-activity.md. One Polish note (Show-less button sits below the fold after expanding a very long note — conventional show-more/less behavior, not blocking).
- Deterministic routing unit test over real (MC-4705/4740/4750) + synthetic bodies confirms automation events route to log rows and [summary]/[analysis]/[note]/QUESTION: stay bubbles.
- 5-model council: broad-bracket false-positive flagged by Codex+Gemini+GLM -> fixed; XSS-safe (escape-then-markdown, http/https links only); clamp re-entrancy guard added.
Note: a final re-screenshot of the post-council build was blocked by the headless Chrome / CDP 9222 endpoint being down (infra, outside this ticket). The post-council changes only narrow classification + add a guard and reuse the exact render paths Tessa already approved live, so the live UA acceptance holds.
No regression to composer send. Scope kept to 3 files; other in-flight uncommitted mission-control changes (control_room_pickup.py, docs, tests) were left untouched.
luci-controller8d ago
[control-room-recover] MC-4750: cleared false manual_safe_dispatch_required blocker caused by controller pool-claim / unsafe-main-checkout failure (reason: 'unsafe_main_checkout_runtime: pool claim timeout for MC-4750; refusing unsafe runtime cwd /home/lucienne/workspace/mission-control'). Requeued to todo; Control Room pickup now owns retry/dispatch. No human reply was pending.
luci-controller8d ago
[control-room-dispatch] Control Room dispatched MC-4750 to a Claude Code worker.
Worktree: /home/lucienne/workspace/state/control-room-worktrees/mc-4750-fix-weird-ticket-activity-chat-bubbles-b00cc6
Branch: cr/mc-4750-fix-weird-ticket-activity-chat-bubbles-b00cc6
tmux: cr-MC-4750
Expected check-in: 2026-06-05T12:55:02.208088+00:00
luci-controller8d ago
[control-room-dispatch] Control Room dispatched MC-4750 to a Claude Code worker.
Worktree: /home/lucienne/workspace/state/control-room-worktrees/mc-4750-fix-weird-ticket-activity-chat-bubbles-03d5ea
Branch: cr/mc-4750-fix-weird-ticket-activity-chat-bubbles-03d5ea
tmux: cr-MC-4750
Expected check-in: 2026-06-05T13:22:04.150648+00:00
luci-controller8d ago
[control-room-runtime-reaper] MC-4750: closed stale active runtime row 328864 (todo_waiting_runtime_mismatch_reaped) while ticket status stayed todo. Control Room pickup can now select/requeue normally; MC remains the human source of truth.
luci-controller8d ago
[control-room-dispatch] Control Room dispatched MC-4750 to a Claude Code worker.
Worktree: /home/lucienne/workspace/state/control-room-worktrees/mc-4750-fix-weird-ticket-activity-chat-bubbles-8560d6
Branch: cr/mc-4750-fix-weird-ticket-activity-chat-bubbles-8560d6
tmux: cr-MC-4750
Expected check-in: 2026-06-05T13:53:02.082600+00:00
luci-controller8d ago
[control-room-recover] MC-4750: recovered DONE from a finished direct worker whose tmux was gone. Ticket → in_review. Summary: MC-4750 ticket Activity hierarchy fix — mission-control master dded6ff (app.py, static/chat.js, templates/ticket.html), pushed to conrelma/mission-control + deployed (ASSET_VERSION 20260605c, luci-dashboard restarted). Verified via live screenshots + Tessa APPROVED (desktop+mobile, composer send OK, 0 console errors) + deterministic controlLogLabel routing unit test + 5-model council (broad-bracke
[control-room-merge-required] ⚠️ NOT SHIPPED: the work is committed on `cr/mc-4750-fix-weird-ticket-activity-chat-bubbles-8560d6` but is NOT on master. This ticket is review/merge-ready, not done. Land it safely with:
python3 mission-control/scripts/control_room_pickup.py --merge-recovered
(or `git -C /home/lucienne/workspace fetch && git -C /home/lucienne/workspace merge --ff-only cr/mc-4750-fix-weird-ticket-activity-chat-bubbles-8560d6` from a master worktree, then push). `done` is blocked until the branch is an ancestor of origin/master.
api6d ago
Controller gate: MC-4750 is complete. Verified commit dded6ff is on origin/master and the live ticket page responds 200 at http://127.0.0.1:3001/ticket/4750. Validation run: python3 -m py_compile app.py passed; live DOM contains the Activity surface and controlLogLabel code path; captured live 375px screenshot: /home/lucienne/workspace/mission-control/tests/qa-evidence/mc-4750-ticket-mobile-375.png. Prior worker/Tessa evidence already recorded desktop+mobile approval and composer smoke; this gate confirms the deployed code is visible. Closing; no Elmar input needed.