docs/uninstall-package.pt-BR.md
Rama main · réplica de lectura del repositorio original.
# Pacote supervisionado de desinstalação do Pórtico Community
> **Estado: candidato em validação efêmera. Não aplicar à VPS de produção
> antes da aprovação da PR e confirmação expressa do operador.**
Este pacote é destinado à instalação Community de projeto Compose
`mcp-vps-agent`, executada a partir do checkout original da própria
instalação. Ele **não** remove outros projetos Docker, sites, bancos de
terceiros, dados mantidos sob `/opt`, nem o Traefik compartilhado.
## Conteúdo e proveniência
O artefato de CI `portico-uninstall-candidate` contém:
- `portico-uninstall-candidate.tar.gz`: script `scripts/remove.sh` aprovado
na PR (não inclui `.env` ou credenciais);
- `portico-uninstall-candidate.tar.gz.sha256`: digest para conferir os bytes.
Na CI de pull requests, `SOURCE_COMMIT` representa o **merge temporário testado**
(`GITHUB_SHA`). O campo `PR_HEAD_SHA` aponta para o commit durável da branch,
e `PR_BASE_SHA` para a base; `SOURCE_SCRIPT_SHA256` identifica os bytes do script.
Todos devem ser conferidos. Não atribuir o merge temporário à revisão da branch.
Para uso real, reconstruir o pacote depois da promoção aprovada à `main`.
A revisão deve fixar ambos os SHAs e verificar os logs do
workflow `uninstall-package-e2e` que gerou o artefato. **Uma PR draft não é
autorização de execução ou de merge.**
## Procedimento planejado com o proprietário
1. Confirmar que a instalação ativa pertence ao checkout original e que há
backup **fora** do checkout do estado, da policy e da identidade OAuth.
A desinstalação em modo purge apaga arquivos/volumes de identidade.
2. Fazer download do artefato do workflow aprovado, comparar o SHA do commit
no GitHub e conferir `sha256sum -c`. Não executar scripts vindos de URLs
mutáveis ou de arquivos não verificados.
3. Extrair em pasta temporária de propriedade do operador. Conferir a lista
de arquivos do tar antes de copiar. Instalar somente o `scripts/remove.sh`
verificado no checkout, preservando cópia local do script anterior.
4. Executar primeiro `bash scripts/remove.sh --purge --dry-run`. Revisar
todas as instâncias, redes/volumes e caminhos exibidos.
5. **Somente após a revisão humana**, iniciar purge com a confirmação
`PURGE` solicitada pelo script. Não usar `--remove-source` nessa
primeira etapa: preservamos código e logs para diagnósticos.
6. Auditar contêineres, volumes e redes rotulados pelo Compose. Conferir
que `traefik-public`, os aplicativos de terceiros e seus dados não foram
afetados. Se restar recurso ambíguo, **parar** sem prune global ou
remoções por aproximação.
7. Conservar o backup até que o próximo E2E de reinstalação e OAuth conclua.
### Contratos de autorização destrutiva e remoção segura
- A confirmação de `--purge` deve ser digitada no prompt, ou fornecida
explicitamente no ambiente do **processo invocador** por operador autorizado.
Uma chave `VPS_AGENT_PURGE_CONFIRM=PURGE` presente **somente no `.env` não vale**.
- `--remove-source` exige segunda confirmação independente
(`VPS_AGENT_REMOVE_SOURCE_CONFIRM=REMOVE_SOURCE` no processo invocador ou
entrada digitada). Valores existentes apenas no `.env` são ignorados.
- `safe` preserva o banco de delegações. Sem Broker/contêineres disponíveis
para confirmar a revogação, e com `.env` ou `state/` presentes, a operação
**interrompe com REMOVE BLOCKED antes de mutar dados**. Recuperar o Broker
para revogação supervisionada, ou executar processo separado de diagnóstico.
- Não contornar um STOP colocando tokens de confirmação no `.env`.
**Não executar** `docker system prune`, `docker volume prune`,
`docker network prune`, `docker compose down` em outros projetos, ou
`rm -rf /opt`.
## Escopo dos testes obrigatórios
- prévia `--dry-run` sem mutação;
- perfis opcionais, incluindo `operator-portal`;
- projeto desconhecido/working_dir diferente bloqueado;
- volumes próprios e `operator-run` removidos;
- redes externas e Traefik preservados;
- falhas parciais não confundidas com sucesso;
- purge repetido sem atingir outro projeto;
- runner Linux descartável com Docker Compose real e um `operator-portal`
simulado;
- revisão humana final antes da operação na VPS real.
Issues: [#154](https://github.com/josemirmoura/mcp-vps-agent-gateway/issues/154)
e [#153](https://github.com/josemirmoura/mcp-vps-agent-gateway/issues/153).