Draft: Add 'Resolve with Duo' action to Jira integration issues view

What does this MR do and why?

Adds a "Resolve with Duo" button to each Jira issue in the Jira integration issues list view (/-/integrations/jira/issues). When clicked, the button triggers the existing Developer/Agentic flow (developer/v1) using the Jira issue's key, title, and URL as the prompt/spec.

The generated MR description includes a traceability line:

Resolves Jira: <KEY> - <URL>

This satisfies the link requirement without Jira write-back.

Implements: https://gitlab.com/gitlab-org/gitlab/-/work_items/601641

Design decisions (open questions resolved)

Question Decision
Flow selection Uses the single default developer/v1 flow — no picker needed for MVP; consistent with other "Resolve with Duo" actions in the codebase.
Target project The GitLab project that owns the Jira integration issues view is used as the target. No multi-project ambiguity since the view is already scoped to a single project.
MR reference format Plain Resolves Jira: KEY - URL line embedded in the goal prompt so the agent includes it in the MR description. Plain URL preferred (write-back is out of scope).
Feature flag jira_issues_resolve_with_duo (type: wip, default disabled) gates both the backend helper and the frontend component.
Permission gate create_duo_workflow_for_ci on the project — the same ability used by the Duo Workflow API for web-triggered flows. Developers and above can trigger.
Jira content safety Jira-supplied content (key, title, URL) is treated as UNTRUSTED and embedded as plain text in the JSON API payload, not rendered as HTML in the browser.
Owning group group::agent foundations (per the work item spec).

Changes

New files

  • ee/app/assets/javascripts/integrations/jira/issues_list/components/resolve_jira_issue_with_duo.vue — new Vue component wrapping DuoWorkflowAction with a Jira-specific goal prompt
  • ee/config/feature_flags/wip/jira_issues_resolve_with_duo.yml — feature flag definition
  • ee/spec/frontend/integrations/jira/issues_list/components/resolve_jira_issue_with_duo_spec.js — unit tests for the new component

Modified files

  • ee/app/assets/javascripts/external_issues_list/components/external_issues_list_root.vue — adds #statistics slot with ResolveJiraIssueWithDuo per issue, gated by canResolveWithDuo inject
  • ee/app/assets/javascripts/external_issues_list/index.js — reads can_resolve_with_duo from dataset and passes it as canResolveWithDuo provide
  • ee/app/helpers/ee/integrations_helper.rb — adds can_resolve_jira_issue_with_duo? helper (feature flag + ability check)
  • ee/app/views/projects/integrations/jira/issues/index.html.haml — adds can_resolve_with_duo data attribute
  • ee/spec/frontend/external_issues_list/components/external_issues_list_root_spec.js — adds tests for the new slot behavior
  • ee/spec/helpers/ee/integrations_helper_spec.rb — adds tests for the new helper method
  • locale/gitlab.pot — adds new translatable strings

References

Screenshots or screen recordings

Before After
No action on Jira issues "Resolve with Duo" button appears on each Jira issue (when feature flag enabled and user has Developer+ access)

How to set up and validate locally

  1. Enable the feature flag in rails console:
    Feature.enable(:jira_issues_resolve_with_duo)
  2. Ensure the project has a Jira integration configured with issues enabled.
  3. Ensure the project has Duo Workflow configured (Developer flow enabled).
  4. Visit /<group>/<project>/-/integrations/jira/issues.
  5. Each Jira issue should show a "Resolve with Duo" button.
  6. Click the button — the Developer/Agentic flow starts with the Jira issue context.
  7. The resulting MR description should include Resolves Jira: <KEY> - <URL>.

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Merge request reports

Loading
Loading