{
  "repo": "dataflow-service",
  "full_name": "tidbcloud/dataflow-service",
  "status": "scan_complete",
  "scan_started_at": "2026-03-27T09:05:00+08:00",
  "scan_completed_at": "2026-03-28T17:10:00+08:00",
  "review_status": "pending_review",
  "codex_rescan_at": "2026-03-30T22:20:50+08:00",
  "codex_rescan_verdict": "approved",
  "expected_binaries": [
    {
      "name": "dataflow",
      "path": "cmd/dataflow/main.go",
      "status": "completed",
      "role": "primary_service"
    },
    {
      "name": "agent",
      "path": "cmd/agent/main.go",
      "status": "completed",
      "role": "worker"
    },
    {
      "name": "dataflow-ng",
      "path": "dataflow-service-ng/cmd/dataflow/main.go",
      "status": "completed",
      "role": "primary_service"
    },
    {
      "name": "dataflow-agent-ng",
      "path": "dataflow-agent-ng/cmd/main.go",
      "status": "completed",
      "role": "worker"
    }
  ],
  "scanned_binaries": [
    {
      "name": "dataflow-ng",
      "output_file": "cmd-dataflow-ng"
    },
    {
      "name": "dataflow",
      "output_file": "cmd-dataflow"
    },
    {
      "name": "agent",
      "output_file": "cmd-agent"
    },
    {
      "name": "dataflow-agent-ng",
      "output_file": "dataflow-agent-ng-cmd-main"
    }
  ],
  "skipped_binaries": [],
  "files_generated": [
    "interfaces/cmd-dataflow.json",
    "interfaces/cmd-dataflow-ng.json",
    "interfaces/cmd-agent.json",
    "interfaces/dataflow-agent-ng-cmd-main.json",
    "service-mapping/cmd-dataflow.json",
    "service-mapping/cmd-dataflow-ng.json",
    "service-mapping/cmd-agent.json",
    "service-mapping/dataflow-agent-ng-cmd-main.json"
  ],
  "current_binary": null,
  "scan_progress": "4/4",
  "notes": [
    "The previous repo-level approved status was stale: both service-mapping files used a legacy aggregate format, and the repo is being re-scanned from source instead of trusting that approval marker.",
    "A later meta-validation pass confirmed that cmd/agent and dataflow-agent-ng/cmd/main.go are both long-running worker runtimes rather than CLI-only tools: each starts a gRPC server and an HTTP gateway concurrently, so they are now included in repo-level runtime scope.",
    "Fresh codex rescan has completed for dataflow-ng: the binary exposes 36 implemented gRPC methods across ChangefeedService, ChangefeedSpecService, OpsInternalService, and SinkEndpointService.",
    "dataflow-ng also has a generated grpc-gateway route for DPFeatureService.GetEnabledDPFeaturesForCluster, but the binary never registers RegisterDPFeatureServiceServer; that route is treated as proto-only and excluded from the fresh interface set.",
    "The dataflow-ng refresh also tightened dependency conditions: Only straight-line getter paths still use Always; stateful or branchy calls now record concrete prerequisites such as status checks, config-center reads, or workflow boundaries.",
    "cmd/dataflow has now been fully rebuilt to the fresh method-level schema: all 192 runtime methods are covered across ConnectorService, SinkEndpointService, OpsInternalService, ImportInnerService, BackupInternalService, BackupConsoleService, AdminBackupService, ConsoleBackupService, ConsoleImportService, DMService, ReplayService, openapi Import, ChangefeedService, DumplingService, and the other registered surfaces in service-mapping/cmd-dataflow.json.",
    "That cmd/dataflow rebuild also records a real runtime edge case: ConnectorService.CreatePrivateLink/GetPrivateLink/GetPrivateLinkAuthInfo/GeneratePrivateLinkAdvertisedPatternGroup/GetPrivateLinkAvailableZones are still registered by proto, but cmd/dataflow only serves the embedded UnimplementedConnectorServiceServer stubs for them.",
    "The completed cmd/dataflow rebuild also follows wrapper-heavy OpenAPI methods through their delegated in-binary controllers, so openapi Import and ChangefeedService now record the real downstream services, storage operations, and branch conditions instead of stopping at forwarding helpers.",
    "Early cmd/dataflow verification has already found interface drift: the old KB listed ServerlessBackupInternalService and OPSService even though this binary does not register them, while the actual HTTP binary also exposes additional openapi/admin surfaces such as Restore, Import, and PremiumMigration via grpc-gateway.",
    "The fresh cmd/dataflow rebuild also fixed a canonical-schema trap: this binary registers both console and admin proto packages with overlapping service names (for example BackupService and ImportService), so the interface now qualifies those runtime surfaces as ConsoleBackupService, ConsoleImportService, AdminBackupService, and AdminImportService to eliminate method-key collisions.",
    "Final cmd/dataflow coverage is now 192 mapped methods out of 192 interface methods with zero dangling keys. This pass also confirmed a second runtime-surface trap: registering one concrete server does not imply all proto methods are implemented. In cmd/dataflow, ConsoleBackupService.ModifyBackupSetting/GetBackupSetting/GetAutoSetting, ConsoleImportService.ApplyTableFilters, and BackupInternalService.ListRestoreOfProject are still proto-visible but fall through to generated unimplemented handlers because the concrete server never overrides them.",
    "A follow-up outward-expansion review for tidb-management-service root-call-graph traversal tightened BackupInternalService.GetBackup into two explicit local MySQL leaves: backupRepo.Load for the backup row itself and bucketRepo.Load for each bucket referenced by BucketSettingSnapshot, confirming that this remote node currently terminates inside dataflow-service rather than fanning out into another repo."
  ]
}
