Parallels Discord Roundtrip
Use quando o teste de fumaça no macOS Parallels precisar comprovar a entrega bidirecional completa no Discord.
Objetivo
Cobrir:
- instalação em snapshot limpo do macOS
- inicialização + verificação do gateway
- envio de mensagem do guest para o Discord
- host vê essa mensagem no Discord
- host publica uma nova mensagem no Discord
- leitura dessa nova mensagem pelo guest via
message read
Entradas
- variável de ambiente do host com o token de um bot de QA dedicado e aprovado pelo operador
- IDs de guild e canal QA aprovados pelo operador
OPENAI_API_KEY
Execução preferida
Carregue OPENCLAW_PARALLELS_DISCORD_TOKEN através da fonte de segredo aprovada.
Defina OPENCLAW_PARALLELS_DISCORD_GUILD_ID e OPENCLAW_PARALLELS_DISCORD_CHANNEL_ID
para o destino QA aprovado. O harness configura esse bot dentro do guest selecionado.
pnpm test:parallels:macos \
--discord-token-env OPENCLAW_PARALLELS_DISCORD_TOKEN \
--discord-guild-id "$OPENCLAW_PARALLELS_DISCORD_GUILD_ID" \
--discord-channel-id "$OPENCLAW_PARALLELS_DISCORD_CHANNEL_ID" \
--json
Notas
- Snapshot alvo: o mais próximo de
macOS 26.3.1 fresh. - O resolvedor de snapshots agora prefere clones que correspondam a
*-poweroff*quando a dica base também corresponde. Isso permite que o harness reutilize snapshots de recuperação somente de disco sem precisar passar uma dica mais longa. - Se os logs de restauração de snapshot do Windows/Linux mostrarem
PET_QUESTION_SNAPSHOT_STATE_INCOMPATIBLE_CPU, descarte o estado suspenso uma vez, crie um snapshot substituto*-poweroff*e execute novamente. Os scripts de fumaça agora iniciam automaticamente snapshots restaurados com power-off. - O harness configura o Discord dentro do guest; nenhum token/config salvo no repositório.
- Use o wrapper
openclawparamessage send/readdo guest;node openclaw.mjs message ...não expõe os subcomandos de mensagem lazy da mesma forma. - Escreva
channels.discord.guildsem um único objeto JSON (--strict-json), não em caminhos pontilhadosconfig set channels.discord.guilds.<snowflake>...; snowflakes numéricos são tratados como índices de array. - Evite
prlctl enter/ expect para scripts longos de configuração do Discord; ele quebra/corrompe linhas longas. Useprlctl exec --current-user /bin/sh -lc ...para a fase de configuração do Discord. - Varreduras completas de 3 SOs: o bloqueio de build compartilhado é seguro em paralelo, mas a restauração de snapshot ainda é um gargalo do Parallels. Prefira reexecuções serializadas do Windows/Linux com restauração pesada se o host já estiver sob carga.
- A limpeza do harness exclui as mensagens temporárias do smoke do Discord ao final.
- O harness tenta parar o guest selecionado após a prova bem-sucedida do Discord e avisa se a parada falhar. Para verificações ad-hoc do Discord, pare apenas o guest de propriedade da tarefa antes da entrega. Não deixe o guest de teste configurado com o Discord em execução após a prova.
- Logs por fase:
/tmp/openclaw-parallels-smoke.* - Resumo da máquina: passe
--json - Se o roundtrip apresentar falhas intermitentes, inspecione primeiro
fresh.discord-roundtrip.logediscord-last-readback.jsonno diretório de execução.
Critérios de aprovação
- A lane solicitada (fresh ou upgrade) passou
- O relatório mostra
discord=passpara essa lane - O nonce de saída do guest aparece no histórico do canal
- O nonce de entrada do host aparece na saída de
openclaw message read