Improve primary verification experience
### Problem Statement This will provide immediate visibly into verification errors on the primary site without needing to resort to the rails console. We've noticed an increasing need for this visibility amongst new Geo customers. This will also help improve the first time experience. ### Goal The vision of this effort is to move the start of a Geo migration and setup "to the left". What we mean by that is that we want to begin this process from the Primary and provide an experience that allows customers to better manage and prune their data on the Primary site before beginning any Geo related actions. This will have impacts down the line of multiple magnitude as if we have a better process to "setting up" a site for Replication, the amount of errors we will see through the process should be reduced significantly. ### Proposed UI | Details | Screenshot | |---------|------------| | Base View | ![Screenshot_2025-04-23_at_10.38.59_AM](/uploads/e3440066395bbd4351a1fdcbb4349779/Screenshot_2025-04-23_at_10.38.59_AM.png) | | Verification Error Details (Geo) | ![Screenshot_2025-04-23_at_10.39.06_AM](/uploads/aff42f5ee01c759106360ac3d8474f07/Screenshot_2025-04-23_at_10.39.06_AM.png) | | Bulk Actions (Geo) | ![Screenshot_2025-04-23_at_10.39.13_AM](/uploads/2e27c8c54ab79c352b2d1067dbc91a6d/Screenshot_2025-04-23_at_10.39.13_AM.png) | | Details View | ![Screenshot_2025-04-28_at_12.54.01_PM](/uploads/6b2847b19facfc1ef84663df07893673/Screenshot_2025-04-28_at_12.54.01_PM.png) | | Details View (Error) | ![Screenshot_2025-04-28_at_1.04.25_PM](/uploads/8ad7c9457607839cc96bfa00d4cf9399/Screenshot_2025-04-28_at_1.04.25_PM.png) | ### Data Structure | Replicator Class | Model Class | Registry Class | Model Separate Verification State Class | Model Table Name | Verification State Table Name | |------------------|-------------|----------------|-----------------------------------------|------------------|-------------------------------| | Geo::CiSecureFileReplicator | Ci::SecureFile | Geo::CiSecureFileRegistry | Geo::CiSecureFileState | ci_secure_files | ci_secure_file_states | | Geo::ContainerRepositoryReplicator | ContainerRepository | Geo::ContainerRepositoryRegistry | Geo::ContainerRepositoryState | container_repositories | container_repository_states | | Geo::DependencyProxyBlobReplicator | DependencyProxy::Blob | Geo::DependencyProxyBlobRegistry | Geo::DependencyProxyBlobState | dependency_proxy_blobs | dependency_proxy_blob_states | | Geo::DependencyProxyManifestReplicator | DependencyProxy::Manifest | Geo::DependencyProxyManifestRegistry | Geo::DependencyProxyManifestState | dependency_proxy_manifests | dependency_proxy_manifest_states | | Geo::DesignManagementRepositoryReplicator | DesignManagement::Repository | Geo::DesignManagementRepositoryRegistry | Geo::DesignManagementRepositoryState | design_management_repositories | design_management_repository_states | | Geo::GroupWikiRepositoryReplicator | GroupWikiRepository | Geo::GroupWikiRepositoryRegistry | Geo::GroupWikiRepositoryState | group_wiki_repositories | group_wiki_repository_states | | Geo::JobArtifactReplicator | Ci::JobArtifact | Geo::JobArtifactRegistry | Geo::JobArtifactState | p_ci_job_artifacts | ci_job_artifact_states | | Geo::LfsObjectReplicator | LfsObject | Geo::LfsObjectRegistry | Geo::LfsObjectState | lfs_objects | lfs_object_states | | Geo::MergeRequestDiffReplicator | MergeRequestDiff | Geo::MergeRequestDiffRegistry | MergeRequestDiffDetail | merge_request_diffs | merge_request_diff_details | | Geo::PackageFileReplicator | Packages::PackageFile | Geo::PackageFileRegistry | No | packages_package_files | Same as Model Table | | Geo::PagesDeploymentReplicator | PagesDeployment | Geo::PagesDeploymentRegistry | Geo::PagesDeploymentState | pages_deployments | pages_deployment_states | | Geo::PipelineArtifactReplicator | Ci::PipelineArtifact | Geo::PipelineArtifactRegistry | No | ci_pipeline_artifacts | Same as Model Table | | Geo::ProjectRepositoryReplicator | Project | Geo::ProjectRepositoryRegistry | Geo::ProjectState | projects | project_states | | Geo::ProjectWikiRepositoryReplicator | Projects::WikiRepository | Geo::ProjectWikiRepositoryRegistry | Geo::WikiRepositoryState | project_wiki_repositories | wiki_repository_states | | Geo::SnippetRepositoryReplicator | SnippetRepository | Geo::SnippetRepositoryRegistry | No | snippet_repositories | Same as Model Table | | Geo::TerraformStateVersionReplicator | Terraform::StateVersion | Geo::TerraformStateVersionRegistry | No | terraform_state_versions | Same as Model Table | | Geo::UploadReplicator | Upload | Geo::UploadRegistry | Geo::UploadState | uploads | upload_states | ### The End Result 1. Better ability to accurately to predict downtime and time requirements for a Geo setup or migration 2. Less support and service hours needed to help customers through a Geo setup or migration 3. A cleaner and smoother process for customers who go through a Geo setup or migration 4. A general place for all customers (not just Geo) to better manage the data that is stored on their GitLab Instance. ### The Plan 1. Expose a new list view (Possibly under **Admin \> Monitor**) in a similar fashion to the Geo Replication list views that represents the various **Models** * This data isn't specific to Geo but rather represents the various data models that are stored on a GitLab Instance * This view would also resolve some long term customer asks like https://gitlab.com/gitlab-org/gitlab/-/issues/16229+ 2. When Geo (or verification) is enabled for a model we expose the Checksum table information in this list view (state, error messages, etc) * This is the main **Geo win** and will be the MVC solution to the goal above * We will need to explore a way to enable Verification on the Primary side without any Geo Secondaries. This is currently done by individual feature flags. 3. Expose a details view for each model record for Admin context * This can expose any granular detail that is too bulky for the list view that would aid in both Instance Admins and/or Geo Admins depending on their needs. 4. Provide any in-app functionality, actions, links, etc for each model record * From an instance admin's perspective this would be actions like Edit/Delete/Permissions/etc. * From a Geo admin's perspective this would be like triggering a All site Re-Checksum/All site Re-sync/etc. ## Exit Criteria * All issues this epic completed This means these features are implemented: - Admins can access `/admin/data_management` to get an overview of the state of their data. See the `Base View` screenshot above; - Admins can drill down this view to access more information about individual objects. See the `Detail View` screenshots above; - Admins are able to get information and act on errors relating to the objects shown. See the `Bulk Actions` and `Error` screenshots. ### Participants * @zcuddy * @c_fons <!-- STATUS NOTE START --> ## Status 2026-02-19 The last UI improvements were merged on the ~frontend, and the feature flag was removed, making this feature ready for release and the epic ready to be closed :tada: :clock1: **total hours spent this week by all contributors**: 8 :tada: **achievements**: - https://gitlab.com/gitlab-org/gitlab/-/issues/587189+ :issue-blocked: **blockers**: - none :arrow_forward: **next**: - Close this epic :tada: _Copied from https://gitlab.com/groups/gitlab-org/-/epics/16554#note_3095948085_ <!-- STATUS NOTE END -->
epic