Loading
Enable the incremental checkpoint flags by default
What does this MR do and why?
Turns on the seven incremental checkpoint flags by default: the six that read Duo Agent Platform session checkpoints from the incremental store (headers and blobs), and duo_workflow_write_incremental_only, which stops writing the legacy full checkpoint row. Self-managed gets the configuration GitLab.com runs at 100%. It is the small, revertible first step before the code removal in !255620 (closed). A wip flag can't be default-enabled, so the type changes to beta and the files move to ee/config/feature_flags/beta/.
Why default-on before deleting the code
- The full removal touches 35 files, mostly spec churn. This change is twelve lines and keeps every kill switch: an admin can disable any of the six flags to fall back to the legacy read.
- It gives self-managed a release of soak before the code is deleted.
- The write-only flag ships in the same MR as the read gates, so no reader is left on the legacy table when the legacy writes stop. On GitLab.com it has been on since 2026-09-15, so its soak is short; disabling it alone restores the dual write.
- Since #629085 every new workflow has
incremental_checkpoints_enabledset, so every new workflow writes headers and blobs. - Ordering: the code removal of the write-only flag, #629089, follows this MR, like the read-gate removal does.
- The AI Gateway already gates its own
by_thread_tsread on the column alone (gitlab-org/modelops/applied-ml/code-suggestions/ai-assist!6941 (merged), merged), so Rails pushing these flags as enabled changes nothing there.
References
- Issue: #629088
- Follow-up code removal: !255620 (closed)
- Write-only flag removal (follows): #629089, rollout #607029
- Column always set since: #629085
- AI Gateway read change: gitlab-org/modelops/applied-ml/code-suggestions/ai-assist!6941 (merged)
- Rollout issues: #604687, #606987, #606988, #606989, #606990, #614021, #612821
Screenshots or screen recordings
No UI change.
How to set up and validate locally
- In a Rails console, run
Feature::Definition.get(:dw_read_blobs_graphql).default_enabledand.type. Expect:trueand"beta". - Run
Feature.enabled?(:dw_read_blobs_graphql, Project.first)with no Flipper override set. Expect:true. - Start a Duo Agentic Chat session in a project with Duo Agent Platform enabled and send any prompt.
- Query GraphQL:
duoWorkflowWorkflows(projectPath:) { nodes { id latestCheckpoint { threadTs duoMessages { content threadTs } } } }. Expect: messages come back withthreadTsset, which only the blob read path fills. - Run
Feature.disable(:dw_read_blobs_graphql)and repeat the query. Expect:threadTsisnull(legacy read). - Run
Feature.enable(:dw_read_blobs_graphql)to restore the default. Expect:threadTsis set again. - In a Rails console, run
Ai::DuoWorkflows::Workflow.last.checkpoints.countfor the session from step 3. Expect:0, becauseduo_workflow_write_incremental_onlyis on and only headers and blobs were written;checkpoint_headers.countis positive.
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.
Edited by Eduardo Bonet