A v0.1.0 é quando o Aether começa a acompanhar a própria versão. O mestre pode experimentar outro motor em um só mundo, e o servidor passa a impedir uma reversão insegura.
Canais do motor
O mestre pode colocar um mundo em um motor de acesso antecipado enquanto os demais continuam no atual. A troca para esse mundo, salva uma cópia, confere a cópia e muda o motor.
A volta é a parte delicada. Um motor mais novo pode salvar dados que o atual não lê. Nesse caso, continue no novo motor ou restaure a cópia feita antes da troca. Ela não contém as sessões jogadas depois disso. O aplicativo web, o gateway e o aplicativo Aether continuam na versão mais recente.
O mundo também passa a ter uma versão de dados. Mundos anteriores à v0.1.0 são aceitos ao abrir. Se um motor antigo encontrar uma versão mais nova, ele se recusa a abrir o mundo e informa as duas versões. Ainda não há migração para a frente; ela será criada quando os dados realmente mudarem.
Mundos existentes e verificações da versão
Antes, um mundo mantinha a configuração com que foi criado. Agora, ao despertar, o servidor identifica configurações desatualizadas. Uma mesa em andamento não é interrompida. Para mundos sempre ativos, recreate-worlds mostra o que mudará antes de agir. Como a aplicação derruba as conexões da mesa, o comando começa em modo de simulação.
O gate da tag e o teste de fumaça completam a proteção. A CI precisa ter sucesso no commit exato. Depois, o teste cria um mundo, desperta esse mundo, abre um WebSocket pelo Caddy e pelo gateway, confere a versão e apaga o mundo. Isso teria detectado a v0.0.10, que respondia HTTP 200 mesmo com a criação de mundos quebrada.