Bundle decrypt failed
Há três sub-cenários. O sintoma determina qual você está vendo.
Sub-cenário A: ckey mismatch (chave errada)
Sintoma:
[FAIL] meu-app Phase 1.4: failed to decrypt .runner/secrets.enc
aead::Errorou
[FAIL] meu-app bundle decrypt failed: invalid macCausa
O bundle .runner/secrets.enc foi encriptado com uma ckey diferente
da que o servidor local tem no state.
Quando isso acontece:
- Migrou repo de servidor A para servidor B, copiou o bundle mas não a ckey.
- Outro operator gerou bundle novo num servidor com ckey diferente.
- ckey local foi corrompida por edição manual do arquivo de state.
Diagnóstico
runner ckeys list # ver ckey local da app
runner secrets show meu-app --json # mostra erro com fingerprintFix — opção 1: importar ckey correta de outro servidor
No servidor que tem a ckey certa:
runner ckeys export meu-app > meu-app.ckey.sealed
scp meu-app.ckey.sealed servidor-novo:/tmp/No servidor que precisa da ckey:
runner ckeys import-sealed --app meu-app < /tmp/meu-app.ckey.sealed
runner secrets pull meu-app # re-popula plaintext local
runner deploy meu-appPré-requisito: ambos os servidores precisam ter a mesma mkey (master key). Veja Restaurar em novo servidor.
Fix — opção 2: regenerar bundle do plaintext local
Se você tem .env/.secrets em plaintext local mas o bundle no repo
está errado:
runner secrets reset-bundle meu-app --yesO comando re-encripta do plaintext local e faz push pro repo.
Sub-cenário B: bundle corrompido
Sintoma:
[FAIL] meu-app failed to parse .runner/secrets.enc: unexpected end of fileCausa
Push parcial, merge conflict não resolvido, ou edição manual do arquivo binário.
Fix
runner secrets reset-bundle meu-app --yesMesmo comando da opção 2 acima — re-encripta do plaintext local.
Sub-cenário C: bundle sumiu
Sintoma:
[WARN] .runner/secrets.enc não encontrado, continuando sem secretsCausa
Primeiro deploy da app, ou .gitignore está capturando .runner/.
Fix
runner env set meu-app KEY=value # primeira chave inicializa o bundleOu, se você já tem plaintext local:
runner secrets push meu-appDepois confirme que .gitignore não está ignorando .runner/:
grep -r '.runner' .gitignoreSe aparecer, remova a entrada e faça commit.
Como prevenir
- Faça backup da mkey:
runner mkey export > /backup/mkey.sealednum servidor seguro. Com a mkey, você consegue decriptar qualquer bundle de qualquer app daquele servidor. - Plaintext local é source of truth: se o servidor pifar, você
recupera o bundle do plaintext via
secrets reset-bundle. - Para apps novas em repos existentes, copie a ckey logo após o
runner add— veja multi-service-shared-repo.
Ver também
- Secrets lifecycle — como a ckey funciona
- Drift detected — bloqueio por hash mismatch
- Multi-service no mesmo repo — colisão de ckeys