docs/e2e2-full-cycle-acceptance.pt-BR.md
Rama main · réplica de lectura del repositorio original.
# Pórtico Community: aceite do segundo E2E, do zero à desinstalação final
**Situação:** roteiro de homologação. Nenhuma etapa destrutiva autorizada por este documento.
**Escopo:** Community Linux + um cliente MCP compatível, VPS compartilhada com
Traefik e aplicações de terceiros. Cloud comercial, Windows/macOS e Full fora do
aceite. A edição Community utiliza autoridade Scoped, deny-by-default.
## Gate 0: código e pacote testados (sem alteração da VPS)
- [ ] Fixar o SHA exato aprovado da `main` e registrar origem do desinstalador
(run/artifact GitHub, `SOURCE_COMMIT`, SHA-256 do ZIP e do TAR).
- [ ] Todos os workflows aplicáveis concluídos com sucesso **no mesmo SHA**.
- [ ] Revisão independente de Broker, ownership, symlinks, TOCTOU, OAuth,
Login V2 e credenciais; registrar ressalvas não resolvidas.
- [ ] Testes descartáveis com Docker real comprovam `--purge --dry-run`,
`operator-portal`, `operator-run`, limpeza repetida e preservação de edge.
- [ ] Licença, assinatura de release e critérios de divulgação tratados como
gate separado. Aprovação de CI sozinha não libera publicação.
## Gate 1: inventário e backup na VPS (somente leitura)
- [ ] Registrar `hostname`, Docker/Compose, diretório real do checkout,
`git rev-parse HEAD`, versão **efetivamente executada** do ZITADEL,
modo Scoped e auditoria de permissões.
- [ ] Inventariar contêineres, volumes, redes, Traefik, serviços e projetos
de terceiros. Fotografar/salvar lista de recursos antes/depois.
- [ ] Backup fora da árvore a remover: `.env`, policy, auditoria, journals
necessários e volumes OAuth/PostgreSQL. Permissões 0700/0600, sem segredos
em logs/chat; validar integridade e capacidade de restauração.
- [ ] Conferir que backups e dados de terceiros não integram alvos de purge.
- [ ] Examinar riscos do patch de segurança do Login V2; se a VPS utilizar
versão vulnerável, decidir explicitamente qualquer medida emergencial.
## Gate 2: primeira desinstalação real (supervisionada)
- [ ] Instalar **somente** o script hash-verificado no checkout original,
preservando a versão anterior e os logs.
- [ ] Executar `bash scripts/remove.sh --purge --dry-run` e conferir a prévia.
- [ ] Aprovação explícita do operador após verificar **cada alvo**.
- [ ] Executar `--purge` com confirmação e **sem** `--remove-source` nesta fase.
- [ ] Confirmar ausência de recursos do projeto, ausência de volumes órfãos,
serviço MCP offline e manutenção de Traefik, redes externas, sites e volumes
de terceiros. Bloquear em caso de ownership incerto.
- [ ] Invocação idempotente repetida apenas em condições conhecidas.
- [ ] Nenhum `docker * prune`, exclusão aproximada de `/opt`, ou limpeza global.
## Gate 3: instalação do zero pelo fluxo público
- [ ] Nova instalação a partir do SHA/artefato aprovado; reproduzir escolha de
idioma, verificações de Docker/Compose e reutilização segura de Traefik.
- [ ] Validar Gateway não-root, Broker local, socket, healthchecks, policy Scoped,
teto físico /opt e sem acesso inesperado a outras aplicações.
- [ ] Provisionar OAuth integrado com Login V2 corrigido, segredo privado
persistente e owner único. Simular interrupção no POST e retomar sem duplicar.
- [ ] Validar descoberta OIDC, DCR, PKCE S256, introspecção HTTPS, issuer,
audience, TLS, bloqueio de tokens inválidos/expirados/revogados.
- [ ] Conferir tutorial multicliente e preenchimento do cadastro MCP no ChatGPT.
## Gate 4: uso operacional e autorizações no ChatGPT
- [ ] Conexão OAuth real no ChatGPT Web; repetir em Android, se aplicável.
Registrar imagens das telas de login, consentimento e erros de UI, **sem
capturar credenciais nem tokens**.
- [ ] Distinguir consentimento nativo da chamada da ferramenta de autorização
de pasta feita pelo operador na Central/CLI.
- [ ] Raiz experimental dentro de /opt: leitura autorizada; escrita inicialmente
negada; concessão work temporária; criação, leitura e edição; verificar no
Linux UID/GID do operador e modo 0600 do arquivo.
- [ ] Testar travessia de diretórios, escapes por symlink, paths fora de escopo,
leitura após revogação e expiração; todos devem retornar negativas rastreáveis.
- [ ] Revogar grants; confirmar `permissions.list_root_access` sem delegações
dinâmicas. Testar cancelamento/negação sem criar novos grants.
- [ ] Exercitar operações de uso permitidas pela policy (filesystem, shell
sandboxed, Docker tipado somente se habilitado) e auditoria íntegra.
- [ ] Verificar apresentação de `permission_denied` no cliente, inclusive
envelope `INVALID_ARGUMENT`, separando possível diferença do host ChatGPT.
- [ ] Conferir saudação do primeiro login e comportamento do botão Voltar no
ZITADEL; sem prova visual não marcar PASS.
## Gate 5: segunda desinstalação e encerramento
- [ ] Repetir backup/inventário; confirmar não haver grants persistentes.
- [ ] Executar prévia da remoção, nova autorização humana e purge supervisionado.
- [ ] Comprovar ausência de runtime/estado MCP, volumes órfãos, rotas do MCP
e manutenção intacta de workloads/Traefik/Cloud externos.
- [ ] Registrar idempotência, inventário diferencial, integridade dos serviços
não envolvidos e resíduos justificados.
- [ ] Consolidar matriz: PASS / FAIL / BLOCKED / NOT_TESTED, timestamp,
SHA, responsável e evidência por teste. **Não tratar BLOCKED como PASS.**
- [ ] Se FAIL, abrir issue reproduzível com correção mínima e novo ciclo.
Se tudo PASS e gates independentes de licença/segurança/release completos,
considerar divulgação controlada da Community.
- [ ] Reativação de instância de serviço após o teste exige decisão operacional
separada, já que o E2E encerra com a segunda desinstalação.
## Formato mínimo do registro
| Gate | Caso | Esperado | Obtido | Status | Evidência/issue |
| --- | --- | --- | --- | --- | --- |
| 0–5 | ID do teste | Condição verificável | Resultado observado | NOT_TESTED | URL ou log redigido |
**STOP imediato:** divergência de SHA/assinatura, backup não verificado,
grant inesperado, vulnerabilidade sem mitigação, operação fora de escopo,
resultado de teste falso-positivo, perda de dado, alteração de terceiros,
falha de auditoria ou recurso ambiguamente associado ao projeto.
Referências: issues #153, #154, #157, #159, #161, #162, #165, #166, #167, #173;
PRs #172, #174, #175, #176, #177.