Live Preview e laboratórios de execução
Estado: arquitetura aprovada para planejamento, ainda não implementada. Meta: permitir que agente de código edite, veja, interaja e teste o Flowral sem reconstruir uma ISO para cada mudança.
Quatro camadas de teste
| Ambiente | O que valida | Limitação |
|---|---|---|
| Slint Viewer, Live Preview e MCP | componentes, tema, layout, clique, teclado e acessibilidade | não testa o compositor inteiro |
| Swirl aninhado (se suportado) | janelas, Layer Shell, bordas, atalhos, gestos, painéis | precisa de prova de compatibilidade do fork |
| Void Linux glibc em QEMU/KVM + libvirt | serviços, runit, login, boot, ISO, pacotes e Swirl | GPU virtual não reproduz a GPU do ThinkPad |
| ThinkPad Edge E430 | gráficos Intel/NVIDIA da unidade, Wi-Fi, TrackPoint, bateria e RAM | testes supervisionados, sem tocar discos reais automaticamente |
Slint Live Preview
Usar a feature Cargo de desenvolvimento slint/live-preview e a variável SLINT_LIVE_PREVIEW=1. O nome do pacote no exemplo abaixo pressupõe que ele será criado.
SLINT_LIVE_PREVIEW=1 cargo run -p flowral-control --features slint/live-preview
É possível pré-visualizar somente uma interface, sem backend real, utilizando:
slint-viewer --auto-reload apps/flowral-control/ui/main.slint
Hot reload atualiza alterações visuais em arquivos .slint; alterações nas interfaces Rust/Slint podem exigir recompilar e reiniciar. Nunca incluir a feature de live preview no release.
Fonte: https://docs.slint.dev/latest/docs/slint/guide/tooling/live-preview/
Slint MCP — testes executados pelo code agent
Depois de criar um app Rust+Slint, habilitar feature slint/mcp somente em builds de teste e metadados de introspecção:
SLINT_EMIT_DEBUG_INFO=1 SLINT_MCP_PORT=8080 cargo run \
-p flowral-control --features slint/mcp
O servidor oferece inspeção da árvore de UI, screenshots, clique, drag e digitação. Testar backend headless/software conforme suportado pela versão instalada. É servidor de debug sem autenticação, ligado ao localhost na implementação atual; não expor na rede pública nem manter ativo em produção. Usar dados falsos nos módulos de Wi-Fi, áudio, MCPs, providers e disco durante prévia.
Fontes:
- https://docs.slint.dev/latest/docs/rust/i_slint_backend_testing/
- https://github.com/slint-ui/slint/blob/master/docs/development/mcp-server.md
Sessão Swirl aninhada
Antes de anunciar uma receita funcional, validar commit/versão do Swirl, suporte a nested Wayland, wlr-layer-shell, IPC, EGL e gerenciamento de input. Se o nested não funcionar, usar VM e manter o preview Slint isolado. Um compositor secundário deve receber WAYLAND_DISPLAY específico; jamais alterar sessão principal do host.
Máquina virtual
Ferramentas: QEMU/KVM + libvirt com virt-manager/virt-viewer para visualização, virsh e SSH para automação. Boxes pode servir para testes manuais, mas não será o controlador principal.
Config inicial indicativa: 4 vCPUs, 4 GiB de RAM (até 8 GiB para builds internos), 40 GiB QCOW2, NAT e virtio-gpu/virgl se suportados. Guest com Void glibc e Swirl. SSH com chave e usuário sem root; snapshots antes de operações destrutivas. Testar BIOS Legacy e UEFI em VMs separadas.
# A VM flowral-dev já precisa existir
virsh start flowral-dev
virt-viewer flowral-dev
virsh screenshot flowral-dev /tmp/flowral-screen.png
O screenshot do libvirt mostra o console, sujeito ao backend gráfico. Acelerador virgl não emula a GPU real do Edge E430. Snapshots da VM não incluem necessariamente diretórios compartilhados com virtiofs; usar Git/rsync para versionar arquivos externos.
Fluxo
- Code agent lê AGENTS.md, especificação do domínio e objetivo do PR.
- Modifica Rust e Slint; bacon/just executam verificações rápidas.
- Live Preview atualiza tela; MCP inspeciona componentes e captura imagem real.
- Executa testes de teclado, foco, contraste e estados de interface.
- Valida shell Swirl em sessão nested quando disponível.
- Valida SO/serviços/ISO na VM com snapshot e SSH.
- Testa hardware E430 depois de aprovação.
- PR inclui evidências, versões, prints reais, regressões e limitações.
Critério de pronto do ambiente: hot reload demonstrado, botão testado via MCP, screenshot real, VM acessível com Swirl, captura do console e restauração de snapshot. Não afirmar que uma dessas etapas foi executada até existir evidência.