Show disabled Implement button when Developer flow is off
What does this MR do and why?
Shows the Implement button as disabled, with a popover, when the Developer flow isn't available. Before this change, the button disappeared. The flow can be turned off either by disabling the specific (or all) foundational flows on group level, or by disabling foundation flows on project level. The UI text does not differentiate. It simply says that it's turned off for this project.
Where the disabled state applies:
This also covers Allow flow execution being off at the top-level group or project. The existing remoteFlowsEnabled response includes inherited restrictions, so no backend changes are needed.
- Workplan row: disabled with popover
- Workplan panel: disabled with popover
- Next to Create merge request (when the
workplanfeature flag is off): still hidden, unchanged. Without the workplan for context, a disabled Duo button would be confusing. See this discussion.
Implementation details
duo_workflow_action.vuegets optionaldisabledFlowMessageanddisabledFlowHelpPathprops. When the flow is unavailable, it renders the newFlowUnavailableButton, which follows the same pattern asRepositoryRequiredButton.FlowUnavailableButtonshows the message and a Learn more link to Implement a workplan with GitLab Duo in a popover.- The disabled button appears only when:
- Duo flows are otherwise available for the user and project.
- Flow execution is explicitly disabled, or the configured flows query has returned and found no matching flow.
- If execution is enabled, a loading or failed configured-flows query keeps the button hidden. If execution is explicitly disabled, the existing popover can explain the unavailable action without waiting for the configured-flows query.
- The button uses
accessible-disabled, so it stays focusable and the popover also opens on keyboard focus. startWorkflowalso returns early when the action is not enabled.- The workplan row and panel supply the message and documentation link from their own constants.
duo_work_item_to_mr_action.vueforwards these through its existing$attrsbinding and contains no workplan-specific presentation logic. - Named boolean computeds select the enabled button, unavailable-flow button, repository-required button, or dropdown item. Render modes use constants; the template contains no string comparisons.
- Other
DuoWorkflowActionusers don't pass the new prop, so they behave the same as before.
References
- Resolves #629904 (closed)
- Related to #629825
- Original discussion: !256009 (comment 3855351131)
Screenshots or screen recordings
| Placement | Before | After |
|---|---|---|
| Workplan row | ![]() |
![]() |
| Workplan panel | ![]() |
![]() |
workplan flag off (next to Create merge request) |
![]() |
No change, Implement stays hidden |
How to set up and validate locally
-
Use a project in a group with Duo Agent Platform and remote flows turned on.
-
Turn off the Developer foundational flow, either for the top-level group or for the project.
-
Open a work item that has a saved workplan.
-
Check that the Implement button in the workplan row is disabled.
-
Hover over or tab to Implement. Check that the popover says implementation isn't turned on for this project and has a Learn more link to the docs.
-
Select View and check the same disabled state in the workplan panel.
-
Enable the Developer flow, then turn off Allow flow execution at the project level. Reload and verify the same disabled state in the row and panel.
-
Restore the project setting, then turn off Allow flow execution at the top-level group. Reload and verify the same disabled state. Restore the group setting afterwards.
-
Optional. In the Rails console, turn off the workplan widget:
Feature.disable(:workplan) -
Reload the work item. Check that Implement is not shown next to Create merge request.
-
Turn the flag back on:
Feature.enable(:workplan) -
Turn on the Developer flow. Check that Implement is enabled and shows its usual tooltip.
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.




