⌂ Home ☷ Board

MC Chat-First — Test Results A (Segments 1-4)

Tester: Tessa
Date: 2026-05-19
MC URL: http://localhost:3001
Test plan: reports/mc-chat-first-test-plan.md
Segments covered: 1 (Landing), 2 (Threads), 3 (Talk to orchestrator), 4 (Intent decomposition + action cards)


Segment 1 — Landing

Step Pass/Fail Severity Note Screenshot
1. Open / — expect chat, not board PASS Chat + composer fills viewport on desktop. Status bar compact at top. Board is secondary nav. /tmp/tessa-s1-step1-desktop.png
2. Board is secondary nav, not landing PASS Board accessible via bottom nav tab and "Board" button in status bar — not the landing surface. /tmp/tessa-s1-step1-desktop.png
3. Mobile 375×812 reload PASS with Minor Minor Chat fills screen, no horizontal scroll, usable. BUT: composer placeholder text truncated — "What are you working on? Use" gets cut off by the icon buttons overlay. Text invisible past ~55% of composer width on mobile. /tmp/tessa-s1-step3-mobile.png

Segment 1 summary: 3/3 pass (1 with minor note)


Segment 2 — Threads

Step Pass/Fail Severity Note Screenshot
4. Thread list visible — desktop left rail, mobile sheet PASS Desktop: left rail shows "Threads" header + "+ New" + thread items with title + relative time. Mobile: "Threads" button opens a full-screen sheet with same list. /tmp/tessa-s2-step4-threads-desktop.png, /tmp/tessa-s2-step4-mobile-threads-sheet.png
5. "+ New Session" opens fresh empty chat PASS Clicking "+ New" in left rail creates "New chat" thread (selected, blue border), right panel shows empty state "Start a conversation with Luci". /tmp/tessa-s2-step5-new-thread2.png
6. Switch between threads — no history bleed PASS "New chat" shows empty state; "Persistence Test Thread" shows its own "ping test from Tessa" message. No bleed confirmed. /tmp/tessa-s2-step6-new-chat.png

Bugs found in Segment 2: - Minor: The Board overlay X button does not close the panel on click — only Escape closes it. The close button appears to be unresponsive. Screenshot: /tmp/tessa-s2-step6-board-closed.png shows overlay persisting after X click. - Minor: Pressing Escape from the chat view navigates to Tasks page instead of just closing active panel. This is likely a global keyboard handler that grabs Escape before panel-close handlers.

Segment 2 summary: 3/3 pass (2 minor bugs found)


Segment 3 — Talk to the orchestrator

Step Pass/Fail Severity Note Screenshot
7. Send a question — expect live indicator then inline reply PARTIAL Major Message sends and appears inline in thread (confirmed by "ping test from Tessa" + "not sent" UI state). BUT: cannot complete full send-and-reply cycle because backend rejects sends with 409 while MC-3785 worker is active on the persistent luci session. The "not sent" UI DOES show correct error text. The live indicator (spinner + elapsed) is implemented in code (chatPendingReply() function confirmed). Verified via code inspection that send → poll → render is wired correctly. /tmp/tessa-s3-step7-sending.png
8. Second message continuity NOT TESTED Could not test — blocked by step 7 worker constraint. Continuity architecture confirmed in code: mcThreadChat posts to /api/v1/chat/threads/{id}/send using the same threadId, so messages share context.
9. Reply formatting — no leaked mc-proposal/mc-action blocks PASS Confirmed via DOM injection: parseProposals() and parseMcActions() strip fenced blocks before rendering. Plain text portion renders cleanly. No raw block markers visible. /tmp/tessa-s4-step10-proposals-top.png

Major bug found in Segment 3: - Major: When sending to an idle thread ("New chat"), the 409 response names "Persistence Test Thread" as active — meaning the backend's sequential-turn lock is per-session (luci-persistent), not per-thread. ALL threads share the same backend session, so any active worker blocks ALL chat sends regardless of which thread the user picked. The UX says "try again once it finishes" but doesn't make clear that a completely different thread is the blocker. A user switching to a "New chat" expecting a fresh session gets blocked without a clear explanation why.

Segment 3 summary: 1/3 steps fully testable (live orchestrator blocked by active worker); 2 verified via code inspection


Segment 4 — Intent decomposition + action cards

Step Pass/Fail Severity Note Screenshot
10. Multi-part intent → proposal/action cards render PASS Verified via DOM injection of sample mc-proposal block. Cards render with title, meta (project · assignee · priority), description, "Create ticket" button. Raw mc-proposal fenced block stripped from visible text. "2 proposed tickets" header + "Create all 2" button visible. /tmp/tessa-s4-step10-proposals-top.png
11. Tap targets ≥44px on mobile PASS Desktop confirmed 44px height. Mobile (375×812) also confirmed 44px. CSS has min-height: 44px on .session-chat-proposal-btn. /tmp/tessa-s4-step11-mobile-cards.png
12. "Create ticket" — ticket created, confirmed inline PASS Clicked "Create ticket" on "Add dark mode toggle" card → button changed to "✓ MC-3786" (green done state). Verified in mc.db: MC-3786 | Add dark mode toggle to Settings | in_progress | luci | Mission Control — data matches. /tmp/tessa-s4-step12-after-click.png
13. "Open in Workbench" action card navigates correctly PASS Injected mc-action block with open_workbench action. "Open workbench" button navigated to /runtime-workbench?ticket_id=3795 and loaded the Runtime Workbench correctly showing live session. /tmp/tessa-s4-step13-workbench-nav.png

Segment 4 summary: 4/4 pass


Segment 1-4 Summary

Pass/Fail counts

Segment Steps Pass Fail Blocked
S1 Landing 3 3 0 0
S2 Threads 3 3 0 0
S3 Orchestrator 3 1 0 2
S4 Cards 4 4 0 0
Total 13 11 0 2

Issues by severity

Severity Count Issues
Blocker 0
Major 1 All threads share one backend session lock — user switching to "New chat" while another thread has an active worker gets blocked with unclear error message
Minor 3 (1) Composer placeholder text truncated on mobile by icon buttons overlay; (2) Board/panel overlay X button unresponsive to click — only Escape closes; (3) Escape key navigates to Tasks page instead of just closing panel
Polish 0

Top 3 issues

  1. [Major] Single shared session lock blocks all threads: The persistent orchestrator session (luci-persistent) is shared across ALL chat threads. If MC-3785 or any other ticket worker is active, EVERY chat thread is blocked from sending. A user who creates "New chat" to start fresh still gets "Thread 'Persistence Test Thread' is mid-turn" — which is confusing. The 409 error text names a thread the user didn't choose and offers no ETA. This needs either per-thread session routing OR better error messaging that explains "Luci is busy with a running ticket right now" without naming a specific other thread.

  2. [Minor] Panel X button non-functional: Board and Workbench slide-over panels have an X close button that does nothing on click. Escape key closes them but (a) that triggers Tasks navigation instead, and (b) Escape is not discoverable. Users will think the app is broken when they can't dismiss panels.

  3. [Minor] Escape key triggers navigation: Pressing Escape from the chat view navigates to the Tasks page (via bottom nav). This is likely a global keyboard shortcut that fires before the panel-close handlers. Creates jarring UX when trying to dismiss modals/overlays.


Test infrastructure notes


Screenshots index

File Step
/tmp/tessa-s1-step1-desktop.png S1 step 1 — desktop landing
/tmp/tessa-s1-step3-mobile.png S1 step 3 — mobile landing
/tmp/tessa-s2-step4-threads-desktop.png S2 step 4 — desktop thread rail
/tmp/tessa-s2-step4-mobile-threads-sheet.png S2 step 4 — mobile threads sheet
/tmp/tessa-s2-step5-new-thread2.png S2 step 5 — new thread created
/tmp/tessa-s2-step6-new-chat.png S2 step 6 — thread isolation
/tmp/tessa-s3-step7-sending.png S3 step 7 — not-sent error
/tmp/tessa-s4-step10-proposals-top.png S4 step 10 — proposal cards
/tmp/tessa-s4-step11-mobile-cards.png S4 step 11 — mobile cards
/tmp/tessa-s4-step12-after-click.png S4 step 12 — MC-3786 created
/tmp/tessa-s4-step13-workbench-nav.png S4 step 13 — workbench navigation
/tmp/tessa-s4-card-state.png S4 — action cards state