Skip to content

Commit Tanpa Diff: Menghapus Integrasi Pihak Ketiga

Adityo Guni Waluyo

Commit penghapusan integrasi berakhir tanpa satu baris kode berubah. Di sinilah letak asimetri antara memasang dan membongkar layanan pihak ketiga.

Ringkasan

Commit hapus integrasi Plane tuh unik banget, nggak ada satu baris kode pun yang diubah. Soalnya bersihin integration tuh bukan cuma urusan kode: kredensial dicabut di dasbor vendor, cache mcp-remote dibersihin, entitlement billing dicek, sisa config dibenerin biar circuit breaker nggak error mulu. Jadi mulai sekarang, rencana copot integration harus disiapin sejak mau pasang, ya.

Commit dengan pesan "remove plane-gate integration (Plane no longer used)" muncul di repositori sebuah proyek portal bernama KotaPortal. Statistik diff-nya menunjukkan angka yang tidak biasa: 0 additions, 0 deletions, 0 files changed. Tidak ada satu baris pun kode yang disentuh, tetapi integrasinya dinyatakan sudah tidak dipakai. Pembersihan yang sesungguhnya ternyata tidak terjadi di dalam commit itu.

Asumsi yang keliru

Asumsi paling umum saat membaca commit seperti ini: menghapus integrasi pihak ketiga cukup dengan membuang modul atau paket terkait dari basis kode. Begitu modulnya hilang, sistem dianggap bersih dan pekerjaan selesai.

Kenyataannya, kredensial, cache, dasbor, dan dokumentasi sering bertahan lebih lama daripada kode itu sendiri. Memutus integrasi secara bersih adalah proses instalasi terbalik dengan daftar periksa yang berbeda. Kode hanya ujung dari ekosistem yang lebih luas, sementara jejak operasionalnya tersebar di beberapa lapisan infrastruktur.

Mekanisme di balik layar

Doktrin backing-services dari 12-Factor menjelaskan mengapa hal ini bisa terjadi [1]. Kode seharusnya tidak membedakan layanan lokal dan layanan pihak ketiga; keduanya diperlakukan sebagai sumber daya terlampir yang diakses lewat URL atau kredensial yang disimpan di konfigurasi. Konsekuensinya, sumber daya itu memang dirancang bisa dilepas kapan saja. Hanya saja bagian yang dilepas bukan cuma kode: locator dan kredensialnya tertinggal di konfigurasi, dan penyedia layanan menyimpan status akses di sisinya.

Di sisi vendor Plane, pelepasan akses punya mekanisme sendiri. Autentikasi API memakai header X-API-Key untuk personal access token, dan kunci yang tidak valid atau kedaluwarsa langsung mengembalikan kegagalan autentikasi [2]. Permukaan alat Plane MCP juga sering berubah: versi 0.2.x punya 177 alat per operasi, versi 0.3.0 menyusut menjadi 28 alat sumber daya (169 di antaranya dipertahankan sebagai alias tersembunyi, 7 lainnya mengembalikan pesan pengganti), sampai versi 0.3.3 menjadi 30 alat dengan 207 tindakan. Panduan header-nya pun berganti dari x-api-key menjadi header Authorization dengan skema Bearer [3]. Dokumen yang sama menuliskan sisi offboarding: cabut akses dengan memutus konektor di klien, hapus PAT di pengaturan Plane, atau bersihkan cache mcp-remote. Kode 401 berarti token salah atau sudah dicabut; 402 berarti fiturnya tidak termasuk paket langganan.

Di tingkat runtime, konfigurasi lama yang tertinggal bisa memicu mekanisme pertahanan milik sendiri. Circuit breaker bekerja sebagai state machine dengan tiga keadaan utama: CLOSED, OPEN, dan HALF_OPEN. Saat tingkat kegagalan menyentuh ambang, misalnya 50 persen, breaker berpindah ke keadaan OPEN dan menolak panggilan berikutnya dengan CallNotPermittedException [4]. Integrasi yang sudah dihapus tetapi masih dipanggil oleh sisa konfigurasi akan membusukkan jendela kegagalan itu terus-menerus; penjaga yang semula melindungi sistem berubah menjadi sumber error rutin.

Cache klien adalah residu yang paling mudah terlewat karena tidak pernah muncul di repositori mana pun. Dokumentasi Plane MCP mencatat satu kasus konkret: kredensial OAuth yang tersimpan di cache mcp-remote bertahan meski sisi server sudah berubah, dan menghapusnya berarti menghapus satu direktori cache yang dipakai bersama semua server mcp-remote kecuali dipisah lewat variabel khusus [3]. Halaman yang sama juga menyarankan memeriksa audit log ruang kerja untuk peristiwa terkait token API. Dua lokasi ini sama sekali tidak tersentuh oleh commit mana pun di repositori.

Diagnosis saat pembongkaran pun punya kamusnya sendiri. 401 dengan token yang semula valid biasanya berarti token sudah dicabut, sedangkan 402 menunjukkan fitur yang dicari tidak termasuk paket langganan saat itu [3]. Kedua kode ini justru berguna sebagai alat verifikasi: setelah semua kredensial dicabut, panggilan tersisa dari sistem yang lupa dibersihkan akan berhenti dengan 401, bukan dengan error yang mengarah ke bug lain.

Lapisan penagihan pun punya residunya masing-masing. Sebuah entitlement merepresentasikan akses pelanggan terhadap sebuah fitur, dan penyedia seperti Stripe mengirim notifikasi untuk provisioning maupun de-provisioning akses mengikuti status langganan [5]. Status yang tidak disinkronkan berarti akses yang masih terbuka tanpa pengawasan, atau fitur yang masih dihitung pada paket yang sebenarnya sudah ditinggalkan.

Asimetri pemasangan dan pembongkaran

Arah pemasangan dan pembongkaran tidak simetris. Tabel berikut meringkas di mana letak perbedaannya.

AspekSaat pemasanganSaat pembongkaran
KredensialDibuat lalu disimpan di konfigurasiDicabut secara manual di dasbor vendor
KonfigurasiDitambahkan ke variabel lingkunganDihapus dari repositori dan lingkungan
Penjaga runtimeDiatur untuk mengizinkan lalu lintasHarus dinonaktifkan agar tidak memicu error
CacheTerisi untuk mempercepat responsHarus dibersihkan secara paksa
DokumentasiDiperbarui dengan endpoint baruHarus diarsipkan atau dihapus

Pola yang terlihat jelas: pekerjaan pembongkaran justru menumpuk di luar repositori. Kredensial dicabut di dasbor vendor, cache dibersihkan di sisi klien, entitlement diverifikasi di sisi penagihan, dan commit tanpa diff itu hanya penanda bahwa semuanya sudah selesai. Keputusan yang diambil dari kasus ini sederhana pada penulisan tetapi mahal pada pelaksanaan: sebuah integrasi baru hanya dianggap terpasang jika rencana pembongkarannya sudah tertulis sejak awal, lengkap dengan daftar sisi vendor yang harus disentuh saat tiba waktunya melepas.

Sumber

  1. The Twelve-Factor App: Backing Services
  2. Plane API Documentation
  3. Plane MCP Server Documentation
  4. Resilience4j CircuitBreaker
  5. Stripe Entitlements

Artikel terkait