# Correções de logout de conta e múltiplas instâncias do Launch SDK e teste conjunto dos dois lados

Data: 2026-10-24. Foram concluídas as correções sob responsabilidade do Launch SDK nos itens 1 e 3 autorizados pelo usuário, correspondentes à parte de persistência de conta de AUTH-08 e a AUTH-10. As atualizações fornecidas pelo Licentivo foram sincronizadas e o teste conjunto local concluído. **Não houve implantação, publicação SDK, commit ou push Git neste trabalho.**

## Resultado da correção

A pendência de logout de conta e o login atual recuperável usam chaves diferentes no armazenamento seguro. Se a gravação do marcador de logout falhar, apenas o login antigo dessa instância é limpo, sem excluir outras sessões. Uma intenção local adicional de logout registra resumo do escopo e credencial da sessão; ela é verificada antes de restaurar a conta, incluindo reinício após falha de gravação/exclusão do armazenamento seguro ou timeout do mutex. Não armazena bearer, asserção de identidade ou licença, nem decide direitos de recursos.

Operações de ciclo de vida de conta no mesmo usuário do OS e dispositivo usam coordenação entre instâncias e processos. Logout atrasado de instância antiga, limpeza HTTP 401, reenvio após falha e novo logout após sucesso não podem sobrescrever ou excluir login mais novo salvo. A pendência da sessão antiga pode reenviar a revogação de conta independentemente, sem reconstruir o runtime de autorização de outra sessão atual.

Pontos Application de ciclo de vida, exemplos nativos e instruções de integração foram sincronizados para Go, JavaScript, Python, C#, Java, Ruby, Rust e C/C++. As assinaturas públicas do Store seguro permanecem inalteradas e devem suportar corretamente várias chaves opacas e salvamento atômico. MemoryStore padrão ainda mantém credenciais de conta apenas em memória. Se nem o Store seguro nem o marcador local de logout puderem persistir, o SDK informa erro explícito e interrompe esta instância, sem alegar logout concluído que sobreviva ao reinício.

## Atualizações Licentivo

Os testes reais desta rodada usaram SDK oficial 0.11.1, com identificador fixo de snapshot `local-20261024-5d74ba5ea131`. Sincronizado pelo script de importação existente do repositório: manifesto com 115 arquivos, **23 realmente alterados, 92 inalterados, nenhum novo**. As alterações correspondem a 17 fontes upstream; o núcleo C é empacotado novamente nos pacotes nativo, Ruby e Rust. Ao final dos testes, os hashes dos arquivos de destino e do snapshot upstream dessa importação testada foram verificados.

O código-fonte do servidor Licentivo não foi alterado por este trabalho; a implementação de autorização SDK usa a versão fornecida pelo outro responsável. Testes locais foram ajustados ao contrato atualizado: logout preserva credenciais e arquivos de licença compartilhados da máquina, e o registro de logout do SDK bloqueia a sessão antiga; o segundo recibo de desvinculação repetida pode ser stale. A recusa real de execução, recuperação de nova vinculação e franquia de autoatendimento continuam verificadas, sem afrouxar requisitos comerciais.


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

Ao final, o workspace foi atualizado separadamente para Licentivo SDK **0.11.2** (`licentivo-sdk-v0.11.2-release-20261024`). Os hashes dos 115 arquivos de destino atuais coincidem com o manifesto e as fontes upstream. Em comparação ao snapshot testado nesta rodada, apenas VERSION, constante Ruby VERSION e número de versão CMake mudaram nas fontes upstream; a implementação de autorização é igual. O script atual de importação também adiciona busca da biblioteca nativa no diretório de extensão da gem Ruby. Os registros de testes acima correspondem ao snapshot fixo 0.11.1; este relatório não é aceitação do pacote de release 0.11.2.

## Verificação

| Escopo | Resultado |
| --- | --- |
| Launch Go: HTTP de conta, DPAPI, falha de armazenamento de logout e bloqueio entre processos | 26 registros aprovados, incluindo subtestes; nenhuma falha ou teste ignorado |
| Regressão de conta Go e SDK assinado após sincronizar SDK oficial | 21 aprovados; dois testes HTTP que exigem bancos isolados foram ignorados e verificados na linha anterior e no teste conjunto real |
| Regressão atual de autorização HTTP Licentivo e controles específicos | Duas execuções combinadas por caso, 62 registros finais aprovados; inclui nova verificação após correção da asserção de recibo duplicado |
| SDK oficial Go atual | 67 registros aprovados, nenhuma falha |
| JavaScript / Python | 14 / 12 aprovados, incluindo runtime assinado real |
| C# / Java | Ciclo de vida e runtime oficial aprovados; 9 grupos de testes Java de conta/segurança aprovados |
| Ruby / Rust | 17 testes Ruby de wrapper e SDK nativo real aprovados; 16 testes Rust aprovados |
| C / C++ | Ambos os drivers de ciclo de vida do SDK assinado real aprovados, cobrindo DPAPI, desconexão, falha de armazenamento e logout de instância antiga |

O teste conjunto real usou Launch real, Licentivo atual, MySQL, Go Launch SDK, SDK oficial de autorização e DPAPI, obtendo **18 registros de etapas aprovadas (17 etapas de verificação e registro de conclusão)**. Inclui sincronização de prazo de compra, recurso protegido real, recuperação após fechamento comum, falha de gravação de logout/falha de gravação e exclusão junto com interrupção de rede dos dois lados, recusa de restaurar conta antiga após reinício, reenvio da revogação após retorno da rede, novo login, resposta perdida, desvinculação remota, reembolso de renovação e negação de autorização após chargeback.

Verificação específica com serviços reais também confirmou: números de operação diferentes na mesma geração de vinculação consomem a franquia própria uma vez; logout antigo não exclui credenciais e licença da nova vinculação, que pode ser recuperada offline; novo JWT do mesmo sid antigo não restaura vinculação encerrada, mas novo login real pode ativar; ticket de logout antigo não afeta nova vinculação; execução offline não ultrapassa prazo assinado conhecido.

Nenhum novo problema comercial bloqueante foi encontrado nesta rodada. Testes de execução ocorreram no Windows; a cadeia comercial real dos dois lados usou Go e outras linguagens concluíram testes locais do SDK assinado. Serviços de pagamento e tradução foram simulados e isolados, sem cobrança, reembolso ou implantação reais; 192.168.2.177 não foi acessado. O serviço temporário Licentivo e MySQL foram confirmados encerrados, preservando serviços existentes e outras alterações do workspace.

Logs originais, snapshot da fonte testada e probes estão no diretório ignorado `.local/account-store-fix-20261024/`. Resumo compartilhável em [evidências de verificação](https://github.com/spf86/licentivo-launch/blob/main/docs/account-store-fix-evidence-2026-10-24.json).
