# Launch SDK account exit and multi-instance fixes, end-to-end joint debugging.

Date: 2026-10-24. Completed user-authorized fixes item 1 and 3 for Launch SDK, corresponding to the account persistence part of AUTH-08 and AUTH-10. Synchronized updates provided by Licentivo and completed local joint debugging. **This task did not go live, did not release SDK, did not submit or push Git.**

## Fix results.

Account exit to-do items and current recoverable logins use different keys in secure storage. When writing the exit mark fails, only the old login belonging to this instance is cleared, without deleting other sessions. Additional local account exit intentions use the digest of scopes and session credentials; before recovering the account, it is checked, including scenarios of secure storage write/delete failures and restarts after mutex timeouts. It does not store bearer tokens, identity assertions, or licenses, and does not check feature permissions.

Account lifecycle operations on the same OS user and device use cross-instance and cross-process coordination. Late exits of old instances, HTTP 401 cleanups, retries after failures, and re-exits after success, cannot overwrite or delete newly saved logins. Old session to-dos can independently resubmit account cancellations, without rebuilding the runtime authorization of other current sessions.

The Application lifecycle entry points, native examples, and integration instructions for Go, JavaScript, Python, C#, Java, Ruby, Rust, and C/C++ have been synchronized. The public method signatures of the secure Store remain unchanged and must properly support multiple opaque keys and atomic saving. Account credentials for the default MemoryStore are still only stored in memory. If both the secure Store and native exit markers cannot persist, the SDK explicitly reports an error and stops this instance, without claiming that a cross-restart exit has been completed.

## Licentivo update

This round of actual runtime testing used the official SDK 0.11.1, with the snapshot identifier fixed as `local-20261024-5d74ba5ea131`. Using the original repository import scripts for synchronization, the manifest includes 115 files in total, **23 actually changed, 92 unchanged, no new files**. The changes correspond to 17 upstream source files, with the C core being repackaged in native, Ruby, and Rust packages. At the end of testing, the imported targets' files and upstream snapshot hashes have been verified.

The Licentivo server-side source code was not modified by this task; the SDK’s authorization implementation uses the version provided by the other party. Local tests were adjusted according to the updated agreement: exits retain shared machine credentials and license files, with SDK exit logs preventing old sessions; the second receipt of a duplicate unbind can be stale. Actual rejection execution, new binding recovery, and self-service limits are still checked, with no relaxation of these requirements.


<!-- final-workspace-sdk-version-2026-10-24 -->

By the end, the workspace had been further updated to Licentivo SDK **0.11.2** (`licentivo-sdk-v0.11.2-release-20261024`). The current 115 target files match the manifest and upstream source file hashes. Compared to this round’s tested snapshot, the only upstream source file changes are in VERSION, Ruby VERSION constants, and the CMake version number; the authorization implementation remains consistent. The current import script also adds native library lookup for the Ruby gem extension directory. The above runtime test records correspond to the fixed 0.11.1 snapshot and this report should not be considered an acceptance record for the 0.11.2 release package.

## Verification

| Scope | Results |
| --- | --- |
| Launch Go account HTTP, DPAPI, exit storage failures, and cross-process locks | 26 records passed, including child test cases; no failures, no skips |
| After syncing with the official SDK, Go accounts and signature SDK regression | 21 records passed; two HTTP tests requiring independent databases were skipped, already verified in the previous line and actual two-end joint debugging |
| Current Licentivo HTTP authorization regression and special control | Merged two executions by test cases, 62 records passed in the end; includes review after fixing duplicate receipt assertions |
| Current official Go SDK | 67 records passed, no failures |
| JavaScript / Python | 14 / 12 items passed, including actual signature runtime |
| C# / Java | Lifecycle and official runtime passed; Java 9 group account/security tests passed |
| Ruby / Rust | Ruby 17 items passed both at the wrapper layer and with the actual native SDK; Rust 16 items passed |
| C / C++ | Both actual signature SDK lifecycle-driven tests passed, covering DPAPI, network outages, storage failures, and old instance exits |

Real two-end joint debugging using actual Launch, current Licentivo, MySQL, Go Launch SDK, official authorization SDK, and DPAPI produced **18 stage pass records (17 verification stages plus completion record)**. This included purchase term sync, actual protected features, normal close recovery, exit storage write failures / write-delete failures with two-end network interruptions, restart refusal to recover old account, post-network recovery re-submission and revocation, new login, lost responses, remote unbinding, renewal refunds, and authorization denial after refusal.

Special actual service verification also confirmed: the same bound generation submitting different operation IDs only consumes one self-service quota; old exit does not delete new bound credentials and licenses, can recover new bindings even when offline; same old SID getting a new JWT cannot recover already exited bindings, new real login can activate; old returned tickets don’t affect new bindings; offline execution does not bypass known signature deadlines.

No new blocking business issues were found in this round. The tests ran on Windows; the real end-to-end business chains used Go, while other languages were used for local signature SDK tests. Payment and translation services were simulated in isolation, with no real deductions, refunds, or deployments; 192.168.2.177 was not accessed. The temporary Licentivo service and MySQL have both been confirmed stopped, and existing services along with other workspace changes are retained.

The original logs, tested source snapshots, and probes are in the ignored directory `.local/account-store-fix-20261024/`. A summary can be shared, see [Verification Evidence ](https://github.com/spf86/licentivo-launch/blob/main/docs/account-store-fix-evidence-2026-10-24.json).
