MBSRS 1.0.10 - preparação e validação (2026-10-16)

- 64 testes locais passaram: regressão do arquivo e novos cenários de monitorização, fila offline, isolamento de credenciais, falhas anteriores ao relatório, registo retomável e SHA256 periódico.
- Bootstrap HTTPS assinado, update, rollback e rejeição de manifesto adulterado passaram com fixtures descartáveis.
- Agente e API PHP ensaiados juntos por HTTPS real com base SQLite temporária; contrato do backend testado para permissões por organização, expiração, replay, revogação e renderização.
- Backend app 0.1.11-dev.1 publicado em desenvolvimento, com backup e migrações aditivas. Registo e relatórios ensaiados no endpoint HTTPS dev com MySQL; apenas os registos QA criados pelo ensaio foram removidos.
- Painel de consulta validado a 1440, 390 e 320 px, com dados fictícios e sem erros JavaScript ou overflow da página.
- Distribuição 1.0.10 ainda não publicada. Não houve instalação em contas CP1/SV01, ligação às Storage Boxes, cópia de mailboxes reais ou alteração de cron real por esta operação.
- Quota/alertas externos, plugin cPanel/WHM e restauro Dovecot real continuam pendentes. O código reutilizável não depende de inventário prévio dos servidores.

MBSRS 1.0.8 - validação de desenvolvimento (2026-10-03)

- 53 testes passaram, incluindo protocolo SFTP real via /usr/libexec/openssh/sftp-server local.
- Cópia, SHA256, histórico deleted/replaced, isolamento parcial e recuperação de uploads/publicações interrompidos.
- Origem mutável com retry limitado; mensagens instáveis após três tentativas e alterações durante SHA256 mantêm falha explícita.
- Importação 5.x preserva identidade, destino, seleção e credenciais privadas.
- Setup local completo com cópia/verificação e restauro de uma fixture Maildir.
- Cron em mock: preservação de jobs, adoção de caminho exato, verificação após escrita.
- Assinaturas inválidas, pacotes alterados, caminhos perigosos, credenciais no ZIP, symlinks, downgrade de HTTPS e replay de release são recusados.
- Ensaio separado com HTTPS local real: bootstrap assinado, update entre duas versões consecutivas, validação do novo código, rollback, novo update e rejeição de manifesto alterado.
- Lock ocupado não é aceite como validação de setup; endereço de releases é autocorrigido a partir dos metadados assinados.
- Estrutura escolhida pelo sysadmin: raiz SFTP . ou /, subpastas livres, uso direto da raiz, recusa de traversal e conservação de destinos existentes.
- Artefactos auditados contra a configuração e lista de mailboxes privadas do workspace, sem imprimir esses valores.
- Código Python formatado com Black (AST preservada), shell com shfmt e assets de documentação com Prettier.
- Não houve cópia de mailboxes reais, alteração de cron real nem ligação a destinos de clientes.

- Interrupção real do processo SFTP local durante upload e após rename: reconexão, lock contínuo, recuperação, histórico sem duplicação e cópia final verificada.
- Limite de tentativas e recusa de retries em autenticação/permissões; captura de stderr e código SSH.
- Setup recupera um lote pendente antes do dry-run, conservando a configuração existente.
- Novo setup usa o username real da conta para ORG, sem pergunta nem dependência de USER.

- Migração da pasta antiga por rename local e SFTP real, preservando inode/conteúdo, histórico e transação pendente.
- Retoma após rename com configuração ainda antiga; recusa de colisão, lock ocupado e identidade alheia; preservação de caminhos personalizados.

- Maildir com índice a mudar em cada leitura: cópia, retoma de transação parcial e SHA256 passam em backend local e protocolo SFTP real.
- Mensagens e UID/keywords/subscriptions preservados, incluindo mensagem com nome de índice; índices antigos no destino não são removidos e mensagem previamente copiada mantém inode.
- Política include e árvores sem Maildir mantêm os índices; configuração inválida recusada. Relatório da política antiga não autoriza cron com a política nova.

- UID de Maildir muda durante SHA256: reparação individual local/SFTP real, histórico preservado e lock contínuo; mensagens já verificadas não são relidas.
- Hash diferente com tamanho/mtime iguais provoca substituição do controlo e nova verificação.
- Controlo continuamente mutável esgota três tentativas, gera relatório failed e conserva transação recuperável.
- verify estrito não escreve e mensagem chamada dovecot-uidlist dentro de cur/ não recebe reparação automática. Setup integra cópia e SHA256 no mesmo lock.

- Aviso CageFS real reproduzido no fim da listagem e parser validado em leitura na conta de desenvolvimento, sem imprimir ou alterar jobs reais.
- Avisos conhecidos no início/fim/em stderr; jobs, comentários, comandos com texto semelhante e variáveis preservados; erros reais recusados.
- Instalação/readback de cron em mock utiliza o parser real com aviso final; segunda instalação é idempotente e o aviso não entra no crontab escrito.

- Flags Maildir renomeadas durante leitura, movimento para Trash, alteração de conteúdo e crescimento no meio do stream: lote parcial não publicado, nova seleção e SHA256 final corretos; testado em backend local e SFTP real.
- Mensagem continuamente alterada falha após três tentativas, preserva a cópia atual e permite recuperar na execução seguinte.
- Mensagem reaparece antes de arquivo: retoma sem arquivar como deleted. Desaparecimento acima do limite continua bloqueado após retry.
- Mensagem desaparece entre readdir/stat: inventário parcial descartado, scanner fechado e nova seleção inclui o nome atualizado.

Ainda requer validação operacional: piloto na conta cPanel de origem, autenticação SFTP remota, carga/quota CloudLinux, primeiro cron real e restauro/importação Dovecot num ambiente de teste.

- Assistente CP opcional/gratuito com predefinição não, opt-out sem rede, opt-in por convite privado, identidade existente/pendente preservada, non-interactive sem pergunta e falha de registo sem bloquear primeira cópia. Tokens não aparecem na saída de erro.

- Código copiável: endpoints oficiais exatos, entrada getpass sem eco em pseudo-terminal mesmo com stdin redirecionado, ausência de TTY sem fallback e comando explícito com falha não zero. Parser e ficheiro transitório privados; contrato PHP/Python por HTTPS, convite expirado e replay mantêm as regras existentes.
- Reconstrução de arquivo ausente em fixtures locais e SFTP real, com referência remota externa ao arquivo, cópia e SHA256 obrigatório.
- Bloqueio sem referência, com endpoint alterado, arquivo compatível sobrevivente ou dados não geridos; reconstrução explícita legada exige relatório bem-sucedido correspondente.
- Retoma após falha SHA256 e após interrupção entre registo remoto verificado e persistência local. Incidente de histórico não recuperado permanece registado.
