Loading
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 wrappingDuoWorkflowActionwith a Jira-specific goal promptee/config/feature_flags/wip/jira_issues_resolve_with_duo.yml— feature flag definitionee/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#statisticsslot withResolveJiraIssueWithDuoper issue, gated bycanResolveWithDuoinjectee/app/assets/javascripts/external_issues_list/index.js— readscan_resolve_with_duofrom dataset and passes it ascanResolveWithDuoprovideee/app/helpers/ee/integrations_helper.rb— addscan_resolve_jira_issue_with_duo?helper (feature flag + ability check)ee/app/views/projects/integrations/jira/issues/index.html.haml— addscan_resolve_with_duodata attributeee/spec/frontend/external_issues_list/components/external_issues_list_root_spec.js— adds tests for the new slot behavioree/spec/helpers/ee/integrations_helper_spec.rb— adds tests for the new helper methodlocale/gitlab.pot— adds new translatable strings
References
- Work item: https://gitlab.com/gitlab-org/gitlab/-/work_items/601641
- Related work (push/webhook path): #588660
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
- Enable the feature flag in rails console:
Feature.enable(:jira_issues_resolve_with_duo) - Ensure the project has a Jira integration configured with issues enabled.
- Ensure the project has Duo Workflow configured (Developer flow enabled).
- Visit
/<group>/<project>/-/integrations/jira/issues. - Each Jira issue should show a "Resolve with Duo" button.
- Click the button — the Developer/Agentic flow starts with the Jira issue context.
- 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.