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_enabled set, 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_ts read 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

Screenshots or screen recordings

No UI change.

How to set up and validate locally

  1. In a Rails console, run Feature::Definition.get(:dw_read_blobs_graphql).default_enabled and .type. Expect: true and "beta".
  2. Run Feature.enabled?(:dw_read_blobs_graphql, Project.first) with no Flipper override set. Expect: true.
  3. Start a Duo Agentic Chat session in a project with Duo Agent Platform enabled and send any prompt.
  4. Query GraphQL: duoWorkflowWorkflows(projectPath:) { nodes { id latestCheckpoint { threadTs duoMessages { content threadTs } } } }. Expect: messages come back with threadTs set, which only the blob read path fills.
  5. Run Feature.disable(:dw_read_blobs_graphql) and repeat the query. Expect: threadTs is null (legacy read).
  6. Run Feature.enable(:dw_read_blobs_graphql) to restore the default. Expect: threadTs is set again.
  7. In a Rails console, run Ai::DuoWorkflows::Workflow.last.checkpoints.count for the session from step 3. Expect: 0, because duo_workflow_write_incremental_only is on and only headers and blobs were written; checkpoint_headers.count is 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

Merge request reports

Loading
Loading