Skip to content

bug(operator-queue): markdown in approval/question asks renders as raw text on some surfaces (portal asks, options, resolved history) #3115

Open

Description

@vybe

Summary

Markdown written by agents in approval and question requests (ask_operator asks, approvals, decisions) is not rendered consistently. On some surfaces the reader sees raw syntax like **bold**, `code`, - list markers and [text](url). On others it renders. The same ask looks different depending on where the operator or user answers it.

Context

Reported by the operator with a screenshot of an approval/question chain showing unrendered markdown. Agents naturally write their questions in markdown, so any surface that shows the text verbatim becomes hard to read, especially for multi-line asks with lists or code.

Current state on dev:

  • Operator queue (src/frontend/src/components/operator/QueueCard.vue, QueueItemDetail.vue): the question renders as markdown, but the title, the answer options, and the context/details values show as plain text.
  • Portal asks (src/frontend/src/components/portal/PortalAsks.vue): the question shows as raw text (whitespace-pre-wrap), so markdown syntax is visible.
  • Resolved items (src/frontend/src/components/operator/ResolvedCard.vue): show the title/answer as plain text.

Acceptance Criteria

  • An ask's question renders as markdown on every surface where it can be answered or reviewed: operator queue card, queue item detail, portal asks, and resolved history
  • Markdown in inline fields (title, answer options, the given answer) renders inline formatting only (bold, italic, code, links), with no block elements that would break the layout
  • Rendering goes through the existing sanitized markdown path. Agent-authored text never reaches v-html without sanitization, and it follows the same class allowlist as other agent-authored markdown (see bug(security): Tailwind utility classes in agent-authored chat/report markdown reach the page unfiltered — extend the ent#537 class allowlist beyond the canvas #2567)
  • A multi-line ask with a list, inline code and a link looks the same in the operator queue and in the portal
  • Plain-text asks (no markdown) look the same as they do today

Technical Notes

Related: #2771 (markdown in canvas table cells), #2567 (class allowlist for agent-authored markdown).

Activity

  1. added
    status-readyGreenlit and ready for development (vetted; counterpart to status-incubating)
    on Sep 30, 2026
  2. removed
    status-readyGreenlit and ready for development (vetted; counterpart to status-incubating)
    on Sep 30, 2026
  3. dolho commented on Sep 30, 2026

    @dolho
    Contributor

    /claim

  4. github-actions commented on Sep 30, 2026

    @github-actions

    Claimed by @dolho. Label status-in-progress added.

    Next steps:

    1. Create branch: feature/3115-<short-slug>
    2. Implement the feature
    3. Open a PR with Fixes #3115
  5. vybe commented on Sep 30, 2026

    @vybe
    ContributorAuthor

    @dolho No issue yet. You're right, it's a regression from #3023 (ent#611 PR A): the asks list now includes asks that ended in the last 7 days, and the in-chat strip in PortalConversation.vue doesn't filter them out, so answered tiles stack above the input in every chat with that agent.

    Before you take it into #3115: Andrii's open Inbox PRs touch the same code. #3054 (round 4) already renders portal ask bodies through PortalMarkdown, and #3101 replaces the chat strip with a collapsed, this-chat-only "N asks waiting on you" row. Could you sync with @AndriiPasternak31 so the portal-asks part of #3115 and this fix aren't done twice? If #3101 isn't landing soon, a one-line stopgap is to pass pending-only to PortalAsks in PortalConversation.vue (and gate the wrapper on pending asks). That's easy for Andrii to rebase over.

    Separately, we're settling the longer-term shape on ent#610 (answered asks as a small marker in chat history, the agent's asks tab = Inbox filtered to that agent, asks attached to the chat that raised them rather than always Main). That part isn't for #3115.

  6. added
    status-in-devMerged to dev, awaiting release cut to main
    and removed on Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions