# Perbaikan percobaan ulang logout akun Launch SDK

Tanggal: 2026-10-24. AUTH-07 telah diperbaiki, dan titik masuk siklus hidup akun Go, JavaScript, Python, C#, Java, Ruby, Rust, C, C++ telah disinkronkan. **SDK tidak di-deploy, tidak dirilis, dan Git tidak dikomit atau di-push.** Tugas ini tidak mengubah kode bisnis server Launch atau Licentivo.

## Perilaku

Logout eksplisit terlebih dahulu menandai catatan akun dalam penyimpanan aman sebagai ‘hanya menunggu pencabutan’, lalu memanggil logout SDK resmi dan mengirim pencabutan sesi akun ke Launch. Apa pun status jaringan atau pembatalan, runtime lokal berhenti dan tidak boleh terus menjalankan fitur terlindungi.

Ketika Launch belum mengonfirmasi pencabutan, SDK mempertahankan tugas tertunda dan kredensial akun asli yang diperlukan untuk percobaan ulang, tetapi tidak lagi menganggapnya sebagai akun yang masuk. `Logout`, `Login`, atau `Restore` berikutnya memulihkan permintaan pencabutan; `Restore` tidak menggunakan tugas tertunda untuk meminta identitas atau memulai runtime otorisasi. Tugas akun baru dihapus setelah menerima respons berhasil atau HTTP 401 yang menunjukkan sesi asli tidak lagi dapat diautentikasi. Dengan demikian respons yang hilang juga dapat dipulihkan, tanpa keadaan ‘logout kedua berhasil tetapi pencabutan tidak pernah dikirim ulang’.

Catatan login normal tetap kompatibel dengan v2. Catatan pencabutan tertunda menggunakan format privat v3; Java dan Rust juga menghapus bentuk bidang kredensial yang diperlukan untuk login normal agar SDK lama tidak salah menganggap tugas tertunda sebagai login normal. Tugas tertunda tidak menyimpan assertion identitas jangka pendek, kunci lisensi, atau grant bertanda tangan.

Tugas akun tertunda menggunakan `Store` aman yang dikonfigurasi sebelumnya. **Pemulihan lintas proses memerlukan penyimpanan aman persisten**, misalnya Windows DPAPI atau penyimpanan terenkripsi yang didukung SDK; `MemoryStore` default hanya menyimpan data dalam proses ini. Percobaan ulang dipicu oleh operasi login, pemulihan, atau logout berikutnya, tanpa tugas latar belakang independen baru. Penyimpanan atau pencabutan yang belum selesai mengembalikan kesalahan atau hasil tertunda, bukan melaporkan keberhasilan.

Tiket logout perangkat Licentivo SDK dan `.logout.json` tetap dikelola olehnya; Launch tidak menghapus direktori cache-nya dan tidak menentukan izin perangkat, fitur, atau offline. Contoh native dan dokumentasi SDK setiap bahasa juga diperbarui.

## Verifikasi

| Cakupan | Hasil |
| --- | --- |
| Paket sumber Launch Go | 185 catatan pengujian lulus, termasuk subkasus; tanpa kegagalan; `go vet` lulus |
| Launch HTTP nyata dan MySQL | Setelah permintaan logout terputus, tugas aman tertunda dipertahankan; setelah SDK dibuat ulang login tidak dapat dipulihkan; setelah jaringan pulih pencabutan dikirim ulang, dan autentikasi serta endpoint identitas token lama sama-sama menolak |
| JavaScript | 10 lulus, termasuk kegagalan logout, pemulihan setelah pembuatan ulang, dan konfirmasi 401 |
| Python | 8 lulus, termasuk pembersihan akun lokal setelah logout, pemulihan setelah pembuatan ulang, dan Windows DPAPI |
| C# | Pemeriksaan siklus hidup, pemulihan tugas tertunda, pemeliharaan log logout SDK, dan DPAPI lulus |
| Java | 7 kelompok pengujian siklus hidup dan keamanan lulus, termasuk percobaan ulang logout offline |
| Ruby | Regresi siklus hidup akun, pemulihan tugas tertunda, dan penyimpanan terenkripsi lulus |
| Rust | Semua pengujian lokal lulus, termasuk pemulihan tugas tertunda setelah pembuatan ulang dan operasi SDK nyata |
| C / C++ | SDK bertanda tangan nyata, pemulihan setelah pembuatan ulang saat jaringan terputus, konfirmasi 401, DPAPI, dan titik masuk runtime C++ lulus |
| Perbaikan otorisasi Licentivo saat ini | 45 catatan pengujian lulus, tanpa kegagalan atau pelewatan; termasuk pemberitahuan negatif saat drift kebijakan, koordinasi perangkat berkapasitas rendah, batas perangkat manual, dan regresi otorisasi yang ada |
| SDK resmi yang disematkan | Hash semua 115 file dalam manifest cocok; implementasi otorisasi atau enkripsinya tidak diubah |

Dalam regresi sumber Launch, empat pengujian `TestMySQLBaseline`, `TestProductUploadRoundTrip`, `TestInitialAdministratorMustChangePasswordBeforeAdministration`, dan `TestNewPaymentProvidersAndRegistrationWithoutMail` yang bergantung pada basis data khusus lain dilewati dan tidak dihitung lulus; SDK, HTTP akun, sinkronisasi pembelian, dan alur pemetaan kali ini diverifikasi menggunakan basis data uji terisolasi.

## Pengujian bersama kedua sisi

Menggunakan MySQL 8.0.32 lokal terisolasi, Launch saat ini, layanan Licentivo dan worker-nya, Go Launch SDK nyata dan runtime lisensi resmi, serta penyimpanan akun DPAPI, menyelesaikan **15 tahap bisnis**.

Dua verifikasi kegagalan logout ditambahkan:

1. **Permintaan tidak sampai ke Launch**: endpoint logout akun sementara mengembalikan 503. SDK menghentikan fitur lokal, pengikatan perangkat Licentivo nyata dilepas, dan tugas pencabutan akun tertunda dipertahankan. Setelah SDK dibuat ulang, hanya logout yang dicoba ulang; setelah koneksi pulih, sesi Launch asli dicabut dan Licentivo mengonfirmasi penerimaan pemberitahuan sesi terkait.
2. **Server telah mencabut, tetapi respons hilang**: Launch telah memproses logout, dan proxy pengujian mengganti respons menjadi 503. Tugas tertunda dipertahankan setelah SDK dibuat ulang; setelah koneksi pulih, HTTP 401 mengonfirmasi sesi asli tidak valid dan tugas dihapus. Tidak ada pemulihan login atau aktivasi ulang perangkat selama proses tersebut.

Tahap lainnya mencakup sinkronisasi pembelian dan operasi fitur bertanda tangan nyata, pemulihan penutupan biasa, logout normal, pelepasan jarak jauh dan generasi lama, pengembalian dana perpanjangan, pencabutan akun dan login ulang, penolakan operasi setelah pengembalian penuh, pemulihan pengembalian dana, chargeback, dan regresi terjemahan dokumen besar. Tiga pembaruan Licentivo disediakan oleh pihak yang bertanggung jawab; tugas ini hanya membangun dan memverifikasinya.

Kanal pembayaran dan DeepL menggunakan layanan simulasi terisolasi, tanpa penagihan, pengembalian dana, atau terjemahan berbayar nyata. Verifikasi layanan gabungan nyata menggunakan Go; bahasa lain menyelesaikan regresi SDK lokal, tanpa klaim bahwa masing-masing dari sembilan bahasa menyelesaikan penerimaan deployment layanan nyata.

`192.168.2.177` tidak diakses pada putaran ini. Proses sementara MySQL dan Licentivo telah dihentikan; layanan yang ada dan bukti pengujian dipertahankan. Materi asli ada di `.local/logout-retry-fix-20261024/`; ringkasan dan hash sumber ada di [bukti verifikasi](https://github.com/spf86/licentivo-launch/blob/main/docs/logout-retry-fix-evidence-2026-10-24.json).
