{
  "repo": "pingcap/tidb-operator",
  "binary": "operator",
  "binary_path": "cmd/operator/main.go",
  "dependencies": {
    "Runtime OperatorLifecycle.ParseFlagsAndLogger": {
      "infrastructure": {
        "runtime_flags": [
          {
            "operation": "PARSE FLAGS",
            "target": "metrics-bind-address, health-probe-bind-address, leader-elect, max-concurrent-reconciles, and zap logging flags",
            "conditions": [
              "Always at process start"
            ],
            "implementation": "cmd/operator/main.go:60-94"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.InitFeatureGatesAndPanicMetric": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "READ REST CONFIG",
            "target": "in-cluster or external kubeconfig used by controller-runtime",
            "conditions": [
              "Always after flag parsing"
            ],
            "implementation": "cmd/operator/main.go:96-101"
          }
        ],
        "metrics": [
          {
            "operation": "REGISTER PANIC HOOK",
            "target": "metrics.ControllerPanic",
            "conditions": [
              "Always before manager creation"
            ],
            "implementation": "cmd/operator/main.go:96-101"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.CreateManager": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "BUILD MANAGER",
            "target": "controller-runtime manager with custom client and filtered cache",
            "conditions": [
              "Always after feature gate initialization"
            ],
            "implementation": "cmd/operator/main.go:103-127"
          },
          {
            "operation": "LEADER ELECTION",
            "target": "leader-election lock c6a50700.pingcap.com",
            "conditions": [
              "--leader-elect=true"
            ],
            "implementation": "cmd/operator/main.go:121-123"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.AddFieldIndexers": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER FIELD INDEXERS",
            "target": "spec.cluster.name on PDGroup, TiKVGroup, TiDBGroup, and TiFlashGroup",
            "conditions": [
              "Always before controller registration"
            ],
            "implementation": "cmd/operator/main.go:179-208"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.CreatePDClientManager": {
      "infrastructure": {
        "background_runtime": [
          {
            "operation": "BUILD POLLER MANAGER",
            "target": "member and store poller manager keyed by PDGroup primary key",
            "conditions": [
              "Always during setup"
            ],
            "implementation": "cmd/operator/main.go:146-147 -> pkg/timanager/pd/pd.go:151-159"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.CreateVolumeModifier": {
      "infrastructure": {
        "cloud_config": [
          {
            "operation": "LOAD AWS DEFAULT CONFIG",
            "target": "aws-sdk-go-v2 default credential and region chain",
            "conditions": [
              "Always during setup"
            ],
            "implementation": "cmd/operator/main.go:149-153 -> pkg/volumes/utils.go:213-222"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.RegisterControllers": {
      "infrastructure": {
        "background_runtime": [
          {
            "operation": "REGISTER CONTROLLERS",
            "target": "Cluster, PDGroup, PD, TiDBGroup, TiDB, TiKVGroup, TiKV, TiFlashGroup, and TiFlash controllers",
            "conditions": [
              "Always after manager, PD client manager, and volume modifier exist"
            ],
            "implementation": "cmd/operator/main.go:155-159,211-240"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.RegisterHealthChecks": {
      "infrastructure": {
        "http_listeners": [
          {
            "operation": "REGISTER PROBE HANDLERS",
            "target": "/healthz and /readyz on the health probe listener",
            "conditions": [
              "Always before manager start"
            ],
            "implementation": "cmd/operator/main.go:164-169"
          }
        ]
      },
      "services": []
    },
    "Runtime OperatorLifecycle.StartRuntimes": {
      "infrastructure": {
        "background_runtime": [
          {
            "operation": "START PD CLIENT MANAGER",
            "target": "PD member and store informer pollers",
            "conditions": [
              "Always before controller-runtime manager start",
              "Actual PD pollers become active only after a PDGroup reconcile registers a client"
            ],
            "implementation": "cmd/operator/main.go:161-172 -> pkg/timanager/manager.go:255-258 -> pkg/timanager/pd/member.go:51-57 -> pkg/timanager/pd/store.go:42-48"
          },
          {
            "operation": "START MANAGER",
            "target": "controller-runtime reconcile loops and HTTP listeners",
            "conditions": [
              "Always unless startup returns an error"
            ],
            "implementation": "cmd/operator/main.go:171-173"
          }
        ]
      },
      "services": [
        {
          "name": "pd-api",
          "target_interface": "GET /pd/api/v1/members, GET /pd/api/v1/health, and GET /pd/api/v1/stores",
          "operation_type": "background_poller",
          "target_repo": "pingcap/pd",
          "conditions": [
            "Only after a PDGroup reconcile registers a PD client",
            "Only while the PD client manager context is running"
          ],
          "operations": [
            {
              "operation": "POLL MEMBERS AND HEALTH",
              "trigger": "Maintain cached PD member informer state for PD and PDGroup controllers",
              "conditions": [
                "PDGroup reconcile registered a client and caches have started"
              ],
              "implementation": "pkg/timanager/pd/member.go:68-107"
            },
            {
              "operation": "POLL STORES",
              "trigger": "Maintain cached PD store informer state for TiKV and TiFlash controllers",
              "conditions": [
                "PDGroup reconcile registered a client and caches have started"
              ],
              "implementation": "pkg/timanager/pd/store.go:59-76"
            }
          ]
        }
      ]
    },
    "HTTP GET /metrics": {
      "infrastructure": {},
      "services": []
    },
    "HTTP GET /healthz": {
      "infrastructure": {},
      "services": []
    },
    "HTTP GET /readyz": {
      "infrastructure": {},
      "services": []
    },
    "Runtime ClusterController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "Cluster primary watch plus PDGroup, TiKVGroup, TiDBGroup, and TiFlashGroup fan-in watches",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/cluster/controller.go:40-49"
          }
        ]
      },
      "services": []
    },
    "Runtime ClusterController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET AND LIST CRS",
            "target": "Cluster plus related PDGroup, TiKVGroup, TiFlashGroup, and TiDBGroup objects",
            "conditions": [
              "Triggered by cluster or child-group watch events",
              "Breaks early when the Cluster is missing or paused"
            ],
            "implementation": "pkg/controllers/cluster/controller.go:66-88 -> pkg/controllers/cluster/tasks/ctx.go:61-107"
          },
          {
            "operation": "UPDATE FINALIZERS AND STATUS",
            "target": "Cluster metadata and status conditions",
            "conditions": [
              "Runs after context loading succeeds"
            ],
            "implementation": "pkg/controllers/cluster/controller.go:80-88 -> pkg/controllers/cluster/tasks/finalizer.go -> pkg/controllers/cluster/tasks/status.go"
          }
        ]
      },
      "services": []
    },
    "Runtime PDGroupController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "PDGroup primary watch, owned PD peers, and Cluster generation-change watch",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/pdgroup/controller.go:48-60"
          }
        ]
      },
      "services": []
    },
    "Runtime PDGroupController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/LIST/APPLY",
            "target": "PDGroup, Cluster, PD peers, headless service, internal service, updater, and status objects",
            "conditions": [
              "Triggered by PDGroup or Cluster generation-change events",
              "Breaks early when the PDGroup is deleted or the Cluster is paused"
            ],
            "implementation": "pkg/controllers/pdgroup/controller.go:91-120 -> pkg/controllers/pdgroup/tasks/ctx.go:87-159 -> pkg/controllers/pdgroup/tasks/svc.go:41-72 -> pkg/controllers/pdgroup/tasks/boot.go:35-49 -> pkg/controllers/pdgroup/tasks/finalizer.go:41-87"
          }
        ]
      },
      "services": [
        {
          "name": "pd-api",
          "target_interface": "cached member and store state via PD client manager registration",
          "operation_type": "cache_access",
          "target_repo": "pingcap/pd",
          "conditions": [
            "Only when the PDGroup already has peers",
            "Only when the PD client manager can register or retrieve a synced client"
          ],
          "operations": [
            {
              "operation": "REGISTER OR DEREGISTER PD CLIENT",
              "trigger": "Track the PD cluster backing this group and tear it down on deletion",
              "conditions": [
                "Register on non-deleting PDGroup with peers",
                "Deregister after all peers are deleted and finalizer removal succeeds"
              ],
              "implementation": "pkg/controllers/pdgroup/tasks/ctx.go:130-159 -> pkg/controllers/pdgroup/tasks/finalizer.go:79-87"
            }
          ]
        }
      ]
    },
    "Runtime PDController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "PD primary watch, owned pods/configmaps/pvcs, and Cluster generation-change watch",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/pd/controller.go:46-62"
          }
        ]
      },
      "services": []
    },
    "Runtime PDController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/LIST/APPLY/DELETE",
            "target": "PD CR, Cluster, Pod, ConfigMap, PVC, and finalizers",
            "conditions": [
              "Triggered by PD, Cluster, or PD member-cache events",
              "Deletion branch blocks if PD cluster is unavailable",
              "Suspend branch runs when Cluster.ShouldSuspendCompute()"
            ],
            "implementation": "pkg/controllers/pd/controller.go:65-84 -> pkg/controllers/pd/builder.go:23-64 -> pkg/controllers/pd/tasks/finalizer.go:25-74"
          }
        ]
      },
      "services": [
        {
          "name": "pd-api",
          "target_interface": "member cache, DELETE /pd/api/v1/members, and POST /pd/api/v1/leader/transfer/{name}",
          "operation_type": "http_client",
          "target_repo": "pingcap/pd",
          "conditions": [
            "Only after PDGroup registered a synced PD client",
            "Transfer leader only when the deleting PD instance is current leader",
            "Delete member only during finalizer deletion when member still exists"
          ],
          "operations": [
            {
              "operation": "TRANSFER PD LEADER",
              "trigger": "Move leadership away from the PD pod before deletion",
              "conditions": [
                "The deleting PD member is leader and a healthy transferee exists"
              ],
              "implementation": "pkg/controllers/pd/tasks/pod.go:106-123"
            },
            {
              "operation": "DELETE MEMBER",
              "trigger": "Remove PD member from the PD cluster during finalization",
              "conditions": [
                "ctx.IsAvailable=true and ctx.MemberID is still present"
              ],
              "implementation": "pkg/controllers/pd/tasks/finalizer.go:27-44"
            }
          ]
        },
        {
          "name": "aws-ec2",
          "target_interface": "ModifyVolume through AWS EBS modifier",
          "operation_type": "cloud_api",
          "target_repo": "aws/ec2",
          "conditions": [
            "Only when CreateVolumeModifier selected the raw AWS modifier",
            "Only when PD PVC storage class, size, or volume attributes drift requires modification"
          ],
          "operations": [
            {
              "operation": "MODIFY VOLUME",
              "trigger": "Resize or mutate backing volumes during TaskPVC",
              "conditions": [
                "raw modifier active and PVC phase indicates Prepare/Modify"
              ],
              "implementation": "pkg/volumes/raw_modifier.go:87-106 -> pkg/volumes/cloud/aws/ebs_modifier.go:134-176"
            }
          ]
        }
      ]
    },
    "Runtime TiDBGroupController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "TiDBGroup primary watch, owned TiDB peers, and Cluster generation-change watch",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/tidbgroup/controller.go:46-58"
          }
        ]
      },
      "services": []
    },
    "Runtime TiDBGroupController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/LIST/APPLY/UPDATE",
            "target": "TiDBGroup, Cluster, TiDB peers, headless service, public service, updater, and status",
            "conditions": [
              "Triggered by TiDBGroup or Cluster generation-change events",
              "Breaks early when the TiDBGroup is deleted or the Cluster is paused"
            ],
            "implementation": "pkg/controllers/tidbgroup/controller.go:88-113 -> pkg/controllers/tidbgroup/tasks/svc.go:41-63 -> pkg/controllers/tidbgroup/tasks/updater.go -> pkg/controllers/tidbgroup/tasks/status.go"
          }
        ]
      },
      "services": []
    },
    "Runtime TiDBController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "TiDB primary watch, owned pods/configmaps/pvcs, and Cluster watch",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/tidb/controller.go:41-52"
          }
        ]
      },
      "services": []
    },
    "Runtime TiDBController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/APPLY/UPDATE",
            "target": "TiDB CR, Cluster, Pod, ConfigMap, PVC, finalizers, and status",
            "conditions": [
              "Triggered by TiDB or Cluster watch events",
              "Breaks early when Cluster.Status.PD is empty, the TiDB is deleting, or the Cluster is paused"
            ],
            "implementation": "pkg/controllers/tidb/controller.go:56-74 -> pkg/controllers/tidb/builder.go:22-56 -> pkg/controllers/tidb/tasks/ctx.go:65-171"
          }
        ]
      },
      "services": [
        {
          "name": "tidb-status-api",
          "target_interface": "GET /status via tidbapi client health probe",
          "operation_type": "http_client",
          "target_repo": "pingcap/tidb",
          "conditions": [
            "Only after Cluster.Status.PD is initialized",
            "Only when the TiDB endpoint is reachable"
          ],
          "operations": [
            {
              "operation": "GET HEALTH",
              "trigger": "Populate TiDB health into reconcile context",
              "conditions": [
                "TaskContextInfoFromPDAndTiDB runs after the Cluster is not paused or suspending"
              ],
              "implementation": "pkg/controllers/tidb/tasks/ctx.go:114-145"
            }
          ]
        },
        {
          "name": "pd-api",
          "target_interface": "PD client construction from Cluster.Status.PD",
          "operation_type": "http_client",
          "target_repo": "pingcap/pd",
          "conditions": [
            "Only after Cluster.Status.PD is initialized"
          ],
          "operations": [
            {
              "operation": "BUILD PD CLIENT",
              "trigger": "Provide PD access to later TiDB tasks",
              "conditions": [
                "TaskContextInfoFromPDAndTiDB reached after PD URL exists"
              ],
              "implementation": "pkg/controllers/tidb/tasks/ctx.go:120-145"
            }
          ]
        },
        {
          "name": "aws-ec2",
          "target_interface": "ModifyVolume through AWS EBS modifier",
          "operation_type": "cloud_api",
          "target_repo": "aws/ec2",
          "conditions": [
            "Only when CreateVolumeModifier selected the raw AWS modifier",
            "Only when TiDB PVC drift requires modification"
          ],
          "operations": [
            {
              "operation": "MODIFY VOLUME",
              "trigger": "Resize or mutate TiDB backing volumes during TaskPVC",
              "conditions": [
                "raw modifier active and PVC phase indicates Prepare/Modify"
              ],
              "implementation": "pkg/volumes/raw_modifier.go:87-106 -> pkg/volumes/cloud/aws/ebs_modifier.go:134-176"
            }
          ]
        }
      ]
    },
    "Runtime TiKVGroupController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "TiKVGroup primary watch, owned TiKV peers, and Cluster generation-change watch",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/tikvgroup/controller.go:46-58"
          }
        ]
      },
      "services": []
    },
    "Runtime TiKVGroupController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/LIST/APPLY/UPDATE",
            "target": "TiKVGroup, Cluster, TiKV peers, headless service, updater, and status",
            "conditions": [
              "Triggered by TiKVGroup or Cluster generation-change events",
              "Breaks early when the TiKVGroup is deleted or the Cluster is paused"
            ],
            "implementation": "pkg/controllers/tikvgroup/controller.go:88-113 -> pkg/controllers/tikvgroup/tasks/svc.go:41-55 -> pkg/controllers/tikvgroup/tasks/updater.go -> pkg/controllers/tikvgroup/tasks/status.go"
          }
        ]
      },
      "services": []
    },
    "Runtime TiKVController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "TiKV primary watch, owned pods/configmaps/pvcs, Cluster watch, and PD store event source",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/tikv/controller.go:44-59"
          }
        ]
      },
      "services": []
    },
    "Runtime TiKVController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/APPLY/UPDATE",
            "target": "TiKV CR, Cluster, Pod, ConfigMap, PVC, store labels, finalizers, and status",
            "conditions": [
              "Triggered by TiKV, Cluster, or PD store-cache events",
              "Deletion branch runs when TiKV has deletion timestamp",
              "Suspend branch runs when Cluster.ShouldSuspendCompute()"
            ],
            "implementation": "pkg/controllers/tikv/controller.go:62-80 -> pkg/controllers/tikv/builder.go:22-60 -> pkg/controllers/tikv/tasks/ctx.go:85-168"
          }
        ]
      },
      "services": [
        {
          "name": "pd-api",
          "target_interface": "GET evict leader scheduler, POST schedulers, DELETE schedulers, DELETE store, and cached store state",
          "operation_type": "http_client",
          "target_repo": "pingcap/pd",
          "conditions": [
            "Only after the PD client manager has a synced client for the owning cluster"
          ],
          "operations": [
            {
              "operation": "READ STORE AND EVICT SCHEDULER STATE",
              "trigger": "Populate store ID, node state, and leader-eviction status in reconcile context",
              "conditions": [
                "Store exists in PD cache and Cluster.ShouldSuspendCompute() is false for scheduler lookup"
              ],
              "implementation": "pkg/controllers/tikv/tasks/ctx.go:85-120"
            },
            {
              "operation": "BEGIN OR END EVICT LEADER",
              "trigger": "Keep PD leader-eviction scheduler aligned with pod termination state",
              "conditions": [
                "PodIsTerminating=true begins eviction when it is not already active",
                "PodIsTerminating=false ends eviction when it is still active"
              ],
              "implementation": "pkg/controllers/tikv/tasks/evict_leader.go:40-60"
            },
            {
              "operation": "DELETE STORE",
              "trigger": "Remove the store from PD during TiKV finalization",
              "conditions": [
                "TiKV is deleting and StoreID is still present in PD"
              ],
              "implementation": "pkg/controllers/tikv/tasks/finalizer.go"
            }
          ]
        },
        {
          "name": "aws-ec2",
          "target_interface": "ModifyVolume through AWS EBS modifier",
          "operation_type": "cloud_api",
          "target_repo": "aws/ec2",
          "conditions": [
            "Only when CreateVolumeModifier selected the raw AWS modifier",
            "Only when TiKV PVC drift requires modification"
          ],
          "operations": [
            {
              "operation": "MODIFY VOLUME",
              "trigger": "Resize or mutate TiKV backing volumes during TaskPVC",
              "conditions": [
                "raw modifier active and PVC phase indicates Prepare/Modify"
              ],
              "implementation": "pkg/volumes/raw_modifier.go:87-106 -> pkg/volumes/cloud/aws/ebs_modifier.go:134-176"
            }
          ]
        }
      ]
    },
    "Runtime TiFlashGroupController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "TiFlashGroup primary watch, owned TiFlash peers, and Cluster generation-change watch",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/tiflashgroup/controller.go:46-58"
          }
        ]
      },
      "services": []
    },
    "Runtime TiFlashGroupController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/LIST/APPLY/UPDATE",
            "target": "TiFlashGroup, Cluster, TiFlash peers, headless service, updater, and status",
            "conditions": [
              "Triggered by TiFlashGroup or Cluster generation-change events",
              "Breaks early when the TiFlashGroup is deleted or the Cluster is paused"
            ],
            "implementation": "pkg/controllers/tiflashgroup/controller.go:88-113 -> pkg/controllers/tiflashgroup/tasks/svc.go:41-55 -> pkg/controllers/tiflashgroup/tasks/updater.go -> pkg/controllers/tiflashgroup/tasks/status.go"
          }
        ]
      },
      "services": []
    },
    "Runtime TiFlashController.Setup": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "REGISTER WATCHES",
            "target": "TiFlash primary watch, owned pods/configmaps/pvcs, Cluster watch, and PD store event source",
            "conditions": [
              "Always during controller registration"
            ],
            "implementation": "pkg/controllers/tiflash/controller.go:44-57"
          }
        ]
      },
      "services": []
    },
    "Runtime TiFlashController.Reconcile": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/APPLY/UPDATE",
            "target": "TiFlash CR, Cluster, Pod, ConfigMap, PVC, finalizers, and status",
            "conditions": [
              "Triggered by TiFlash, Cluster, or PD store-cache events",
              "Deletion branch distinguishes whole-cluster deletion, store-removing, and store-removed cases",
              "Suspend branch runs when Cluster.ShouldSuspendCompute()"
            ],
            "implementation": "pkg/controllers/tiflash/controller.go:61-79 -> pkg/controllers/tiflash/builder.go:22-55 -> pkg/controllers/tiflash/tasks/ctx.go:95-167 -> pkg/controllers/tiflash/tasks/finalizer.go:34-80"
          }
        ]
      },
      "services": [
        {
          "name": "pd-api",
          "target_interface": "cached store state and DELETE /pd/api/v1/store/{id}",
          "operation_type": "http_client",
          "target_repo": "pingcap/pd",
          "conditions": [
            "Only after the PD client manager has a synced client for the owning cluster"
          ],
          "operations": [
            {
              "operation": "READ STORE STATE",
              "trigger": "Populate store ID, node state, and labels in reconcile context",
              "conditions": [
                "Store exists in PD cache"
              ],
              "implementation": "pkg/controllers/tiflash/tasks/ctx.go:141-167"
            },
            {
              "operation": "DELETE STORE",
              "trigger": "Remove TiFlash store from PD during finalization",
              "conditions": [
                "Cluster itself is not deleting",
                "StoreState is neither Removing nor Removed",
                "StoreID is present"
              ],
              "implementation": "pkg/controllers/tiflash/tasks/finalizer.go:71-77"
            }
          ]
        },
        {
          "name": "aws-ec2",
          "target_interface": "ModifyVolume through AWS EBS modifier",
          "operation_type": "cloud_api",
          "target_repo": "aws/ec2",
          "conditions": [
            "Only when CreateVolumeModifier selected the raw AWS modifier",
            "Only when TiFlash PVC drift requires modification"
          ],
          "operations": [
            {
              "operation": "MODIFY VOLUME",
              "trigger": "Resize or mutate TiFlash backing volumes during TaskPVC",
              "conditions": [
                "raw modifier active and PVC phase indicates Prepare/Modify"
              ],
              "implementation": "pkg/volumes/raw_modifier.go:87-106 -> pkg/volumes/cloud/aws/ebs_modifier.go:134-176"
            }
          ]
        }
      ]
    }
  },
  "notes": [
    "The old approved output only captured aggregate controller summaries. This rebuild models startup lifecycle, probe surfaces, and all nine controller Setup/Reconcile methods explicitly.",
    "PD-driven watch events come from the PD client manager's pollers after PDGroup registration; they are not Kubernetes-native watches and should not be collapsed into generic controller-runtime setup."
  ]
}
