# Protocolo de recuperação | MkdirAll e desinstalação ## Falha de propriedade ao criar diretórios (Issue #186) Quando o Broker cria uma subpasta em uma raiz autorizada, seu UID/GID deve ser herdado da pasta pai verificada. Uma falha de `fchown` **nunca** pode ser apresentada como sucesso. A rotina `MkdirAll` **não tenta apagar automaticamente o diretório recém-criado** em caso de falha de `fchown`: checar inode e depois remover por nome permitiria uma corrida de substituição entre verificação e exclusão. Mesmo quando o diretório estiver vazio, o Broker retorna erro contendo: - o caminho físico do diretório criado; - a indicação `MANUAL RECOVERY required`; - o erro original de mudança de proprietário. Não remover recursivamente esse caminho por automatismo. Inspecionar `stat -c '%u:%g %a %n' -- ''` e `ls -la -- ''` antes de qualquer mudança. Conferir o caminho real, proprietário, conteúdo, a autorização e a existência de dados de terceiros. Qualquer correção deve ser feita por operador humano, na raiz explicitamente autorizada e após backup quando houver dados. A suíte privilegiada `TestMkdirAllChownFailure*` testa falha induzida, retenção de pasta vazia ou ocupada para revisão humana, troca adversarial de diretório por outro processo sem exclusão de qualquer um deles, nova tentativa após limpeza supervisionada e preservação de caminhos fora de escopo. ## Leitura do arquivo .env (Issue #187) O desinstalador **não executa** o arquivo `.env` como shell. Ele abre arquivo regular com `O_NOFOLLOW`, tamanho máximo de 256 KiB, valida entradas UTF-8 `KEY=VALUE` e só exporta para o processo as variáveis utilizadas no desinstalador. Variáveis de confirmação de `--purge` e `--remove-source` nunca são obtidas desse arquivo. Valores com aspas simples/duplas e UTF-8 são aceitos; comandos, interpolações com cifrão, crases, ponto e vírgula, pipes e redirecionamentos são recusados como inválidos sem imprimir credenciais. O Compose continua lendo seu `.env` em separado. Se valores especiais do ambiente real não satisfizerem o formato seguro, a operação deve **parar**; não desabilitar essa verificação para acelerar o E2E. ## Prévia de mountpoints O comando `bash scripts/remove.sh --purge --dry-run` apresenta os mountpoints encontrados em `state/` e `backups/`, inclusive bind mounts aninhados. Se houver montagem sob esses caminhos, a prévia imprime `BLOCKED / FOREIGN-REVIEW` com o caminho e termina com código de erro, sem remover nada. Falha de `findmnt` também interrompe a prévia. Não desmontar automaticamente recursos compartilhados. ## Gate operacional Mesmo que a CI e a reauditoria aprovem ambas as issues, o purge real exige: identificar checkout e proprietário, conferir hash do script e do pacote operacional da `main`, backup fora do checkout, prévia `--dry-run`, revisão do inventário Docker e autorização explícita no terminal. Nenhum comando prune global. O teste completo somente será aceito após a segunda desinstalação e verificação dos serviços terceiros. Referências: #167, #186, #187 e PR #184.