Arch — Casos de Borda
Gerado pelo Writer (Reversa) em 2026-05-11
EC-01 — Duas chamadas simultâneas a Banco.instance() na inicialização
Descrição: Dois repositórios chamam Banco.execute() antes de database estar definido.
Comportamento esperado: 🟢 initializingPromise deduplication garante que apenas uma abertura ocorre; ambas as chamadas aguardam a mesma Promise.
EC-02 — Migration falha no meio da sequência
Descrição: SQL de migration v11 falha — user_version permanece em v10.
Comportamento esperado: 🟡 Próximo lançamento tentará v11 novamente. Sem rollback automático — tabela pode estar em estado parcial.
Risco: 🔴 Migrações não transacionais podem deixar schema inconsistente.
EC-03 — Asset database com schema mais antigo que o esperado
Descrição: cantaIgreja.db do bundle tem user_version = 7 mas o app espera executar a partir de v8.
Comportamento esperado: 🟢 runMigrations executa v8, v9, ..., v15 em sequência até atingir versão atual.
EC-04 — ATTACH com alias contendo caracteres inválidos (web)
Descrição: Código malicioso tenta usar '; DROP TABLE-- como alias.
Comportamento esperado: 🟢 assertSafeSqliteIdentifier lança Error: alias inválido — ATTACH bloqueado.
Rastreabilidade: Banco.ts — WebBancoHooks.assertSafeSqliteIdentifier
EC-05 — DETACH não chamado após erro no import
Descrição: Erro dentro do bloco try de importarSugestoes ou BibliotecaRepository.
Comportamento esperado: 🟢 Ambos os repositórios usam finally para garantir detach — alias removido mesmo em caso de erro.
EC-06 — Web OPFS indisponível no browser
Descrição: Browser antigo sem suporte a OPFS (Origin Private File System).
Comportamento esperado: 🔴 openAsync falha silenciosamente ou lança erro não tratado — app não inicializa banco.
Rastreabilidade: Workaround em /memories/repo/op-sqlite-web-attach-workaround.md