sequenceDiagram
  actor Admin
  participant UI as Web UI React
  participant TRPC as tRPC Client
  participant API as domainsRouter
  participant DB as PostgreSQL/Drizzle
  participant Checker as domain-check module
  participant DNS as DNS Resolver

  Admin->>UI: Isi form domain dan pilih service
  UI->>TRPC: domains.create({ serviceId, name, expectedServerIp? })
  TRPC->>API: Kirim request create domain
  API->>DB: Validasi service dan server parent
  API->>DB: Insert domain, default expected IP dari server parent jika kosong
  DB-->>API: Domain berhasil dibuat
  API-->>TRPC: Data domain baru
  TRPC-->>UI: Data domain baru
  UI->>TRPC: domains.check({ id: created.id }) otomatis
  TRPC->>API: Kirim request DNS check
  API->>DB: Ambil domain berdasarkan id
  API->>Checker: runAndPersistDomainCheck(...)
  Checker->>DNS: resolve4(domain.name)
  DNS-->>Checker: Daftar IPv4 atau error
  Checker->>DB: Update resolutionStatus dan hasil check
  DB-->>Checker: Domain terbaru
  Checker-->>API: { domain, result }
  API-->>TRPC: { domain, check }
  TRPC-->>UI: Hasil DNS check
  UI->>UI: Invalidate domains.list, navigate detail, tampilkan toast
