Add discussions to the replacement MR overview
Adds the Conversations card from the Decluttered Overview v2 design, below the MR description. It shows every comment thread in the order it was started, with the opening note, a state pill, and replies inline. This MR is display only; filters, roles and file links come in !257879 (merged), replying and resolving come in !257871 (merged), and code snippets come in !257872 (merged).
Next in the stack: !257879 (merged).
The card in the overview, under the description:
The card: each thread with its state, replies inline, the resolved thread dimmed:
Detailed context for AI agents
Why this changed
The new overview hides the classic thread list. This MR replaces it with the thread-list part of the "Conversations" card from the "Decluttered Overview v2" concept in the MR Experience Redesign design, the concept the whole chain is building. Issue #606674 lists a "Conversations list with filters (All / Needs action / People / Agents)". This MR shows the threads and their state only. Filters, role pills and file links follow in !257879 (merged). Reply, resolve and reopen are in !257871 (merged). Code snippets are in !257872 (merged).
Chain
Merged:
- !252481 (merged) - flag, toggle, empty container
- !255057 (merged) - data layer
- !252997 (merged) - merge readiness
- !252998 (merged) - reviewers and recommended reviewers
- !252999 (merged) - description
- !257511 (merged) - labels and milestone, merged 2026-09-25
- !257492 (merged) - risk assessment, merged 2026-09-29
Open:
- !257832 (merged) - conversations card: the thread list (this MR, targets master)
- !257879 (merged) - filters, roles and file links, next in the stack
- !257871 (merged) - thread actions
- !257872 (merged) - code snippets and suggestions, last in the stack
The conversations work was split into four MRs on request, to keep each one reviewable. Each is stacked on the one before it.
What the card shows now
- Heading "Conversations" with a red "N open" badge: a count of resolvable, unresolved threads among those loaded. Hidden when that count is zero.
- Threads are listed in the order they were started.
- Each thread's opening note shows an avatar and name linking to the profile (
js-user-link). Agents are shown with the design's purple tanuki tile instead of the bot user's own avatar. Names use the heading text colour. - Each note shows how long ago it was posted, a state pill ("Unresolved" with a red dot, "Resolved", or "Comment" for threads that cannot be resolved), and a one-line preview of its body (
bodyFirstLineHtml, usingTODO_NOTE_PREVIEW_SAFE_HTML_CONFIG). The full rendered body turned suggestions into big grey code blocks, so this MR shows a short preview instead. - Replies show inline under the opening note, indented and compact.
- Resolved threads are dimmed (
gl-opacity-7). - Loading, empty and error states: a loading icon, "No conversations to show.", "Could not load conversations." on query error (reported to Sentry), and "Load more" for the next page, 100 threads per page.
- Not live: there is no GraphQL subscription for merge request notes, so the panel loads once.
Code shape
discussions_panel.vueis the panel. It renders the GraphQL shape as returned: the opening note isnotes.nodes[0]and the replies are the rest.conversation_note.vuerenders one note's header: the author or agent tile, the time, and abadgesslot for the state pill, plus the body preview. Used for the opening note and, with acompactprop, for replies. No role pill yet - that comes with !257879 (merged).- The query
mr_ai_overview_discussions.query.graphqlasks fordiscussionsWithActivitywithONLY_COMMENTS: each thread'sid,resolvableandresolved, and every note'sid,bodyFirstLineHtml,createdAtandauthor(the sharedUserfragment plusbot). No positions, merge request web path, author, reviewers or diff refs yet - those come with !257879 (merged).
Left out of this MR
- Filters, legend, left border, role pills and file chips - !257879 (merged).
- Reply, resolve, reopen and "Add a comment" - !257871 (merged).
- Code snippets and Apply - !257872 (merged).
The design also has these, left as later follow-ups:
- Per-thread Ask Duo actions ("Ask Duo to fix", "Ask Duo to draft reply") and the bulk bar ("Select all open (N)", "Ask Duo to resolve").
- "Resolved by Duo" vs "Resolved by you".
- The design's three-way legend of Human / Agent to you / Agent to agent. This needs routing data that does not exist yet (#606672).
- Opening a thread in a side panel.
- Flow status notes (such as "Duo Code Review has started") belonging in a separate flows panel. Until that panel exists, they still show here as ordinary agent comments.
Strings
Four new strings, unnamespaced like the reviewers panel: %{count} open, Conversations, Could not load conversations., No conversations to show..
Reused: Unresolved, Resolved, Comment, Load more.
locale/gitlab.pot regenerated.
Files changed (10)
ee/app/assets/javascripts/merge_requests/ai_overview/components/app.vue- mounts the panel below the description.ee/app/assets/javascripts/merge_requests/ai_overview/components/discussions_panel.vue- new.ee/app/assets/javascripts/merge_requests/ai_overview/components/conversation_note.vue- new.ee/app/assets/javascripts/merge_requests/ai_overview/queries/mr_ai_overview_discussions.query.graphql- new.ee/spec/features/merge_request/user_toggles_ai_overview_spec.rb- one example: a diff note and a discussion note each get a row, a system note does not.ee/spec/frontend/merge_requests/ai_overview/components/app_spec.js- the panel renders.ee/spec/frontend/merge_requests/ai_overview/components/discussions_panel_spec.js- new, 14 examples.ee/spec/frontend/merge_requests/ai_overview/components/conversation_note_spec.js- new, 5 examples.ee/spec/frontend/merge_requests/ai_overview/mock_data.js-makeNote,makeDiscussion,discussionsResponse.locale/gitlab.pot.
Verification performed
- Jest
ee/spec/frontend/merge_requests/ai_overview: 9 suites, 133 examples, all pass, re-run after the rebase onto master on 2026-09-29. - ESLint, Prettier and Rubocop clean.
- The query was checked from inside a signed-in GDK page, at a complexity of 139 of 300.
- The screenshots above were retaken on 2026-09-29 on GDK with this MR's files after the rebase onto master, no JavaScript console errors.
- The feature spec has not run locally, because GDK's Vite serves the main checkout, not this branch's worktree. CI is its first run.

