Refactor ExecuteWorkflowService to accept pre-resolved flow params
What does this MR do and why?
Refactors ExecuteWorkflowService to accept pre-resolved flow routing params
(flow_config_id, flow_config_schema_version, flow_version) from callers
instead of calling FoundationalFlowStartParamsResolver internally.
Key changes
ExecuteWorkflowService— acceptsflow_config_id,flow_config_schema_version,flow_versionas params. No longer callsFoundationalFlowStartParamsResolverinternally.Flows::ExecuteService— calls the resolver itself and passes the resolved routing params toExecuteWorkflowService. Non-foundational flows are unaffected.FoundationalFlowStartParamsResolver— no longer returnsflow_definition. It only returns routing components (flow_config_id,flow_config_schema_version,flow_version), cleanly separating the stable flow identity from engine routing.StartWorkflowService— uses@workflow.workflow_definition(stable identity) forRunWorkloadServicerate limiting, and derives the legacyDUO_WORKFLOW_DEFINITIONenv var from the routing components for backward compatibility with older CLI versions.
This aligns with the four-property model discussed in !235204 (merged) and the direction outlined in #599841.
References
- Related cleanup: #599841
- Original versioning discussion: !235204 (merged)
How to set up and validate locally
- Ensure developer-related feature flags are off (default state):
Feature.disable(:duo_developer_next_unstable) - Trigger Duo Developer on a work item by mentioning
@duo-developer-gitlab-duo - Confirm the flow starts successfully
- Enable the feature flag to override flow routing:
Feature.enable(:duo_developer_next_unstable) - Trigger Duo Developer again and confirm it still starts successfully
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.