Pular para o conteúdo

ADR-0017: Voz DESLIGADA por padrão - política de segurança

  • Status: Accepted
  • Data: 2026-05-27 (retroativo - a voz foi entregue na v2.0.0)
  • Responsáveis pela decisão: Waldemar Szemat

A ADR-0013 adicionou voz (TTS via ElevenLabs eleven_multilingual_v2, STT por WebSocket em tempo real) como uma extensão da SPA da demo. Aquela ADR captura o design, mas não codifica a postura de segurança para o estado padrão da voz nem o portão de consentimento que o governa.

A voz em uma demo próxima a um contexto regulado introduz uma superfície de consentimento e de risco diferente da do texto:

  • Falsificação de identidade / deepfake: uma voz sintetizada pode ser mal interpretada como a gravação de uma pessoa real.
  • Privacidade: o áudio de STT é processado em trânsito mesmo quando a demo não o retém; o ônus do consentimento é maior do que para texto.
  • Autoridade do sinal de áudio: uma voz que soa clínica pode ser ouvida como instrução mesmo quando o texto enquadra uma recusa.

A decisão é: qual é o estado padrão da voz, e como o consentimento a ela é registrado, para um visitante de primeira vez?

  • Postura de consentimento em primeiro lugar: demos próximas a um contexto regulado demonstram consentimento, elas não o presumem.
  • Exposição a deepfake: deixar a voz LIGADA por padrão coloca uma voz sintética nos ouvidos de cada visitante como primeira impressão. Esse é o sinal errado.
  • Paridade de localidade: o padrão deve ser uniforme entre en / es-419 / pt-BR. Uma localidade com um padrão diferente seria difícil de defender.
  • Reversibilidade: o opt-in deve ser revogável a qualquer momento sem perder a experiência de texto.
  • Opção A: Voz LIGADA por padrão; o interruptor é um recurso de “silenciar”.
  • Opção B: Voz DESLIGADA por padrão; opt-in capturado como consentimento explícito registrado no servidor por chave, persistido entre sessões.
  • Opção C: Voz DESLIGADA por padrão; opt-in registrado no lado do cliente em localStorage por dispositivo.
  • Opção D: Voz condicionada a um modal de privacidade explícito a cada sessão (sem persistência).

Opção escolhida: Opção B - Voz DESLIGADA por padrão, desbloqueada apenas por consentimento explícito que o servidor registra por chave e persiste entre sessões. A razão determinante é a postura de consentimento em primeiro lugar: uma demo próxima a um contexto regulado que fala no momento em que um visitante a abre escolheu o padrão errado. Registrar o consentimento no lado do servidor, por chave, respeita a decisão anterior do usuário sem incomodar a cada sessão e mantém o portão passível de imposição, onde um sinalizador no lado do cliente não estaria; o aviso explícito no rodapé “Áudio NÃO retido” é exibido independentemente do estado da voz, de modo que o contexto de consentimento nunca desaparece. A própria voz é um direito pago (ADR-0013), portanto o portão de consentimento só se aplica a chaves que podem usar voz.

  • A voz está desligada por padrão na SPA da demo; nenhum turno de áudio é servido até que o consentimento seja registrado.
  • O consentimento é registrado no lado do servidor por chave. Até que seja concedido, uma requisição de voz é rejeitada com 403 consent_required; o servidor, não o navegador, mantém o estado de consentimento e o persiste entre sessões.
  • Os recursos de voz aparecem apenas para chaves que carregam o direito de voz; uma chave sem o direito nunca recebe voz, independentemente do consentimento.
  • Uma divulgação de voz única é o portão de consentimento que o usuário passa para habilitar o áudio.
  • A nota de governança sobre deepfake e consentimento documenta a política e referencia esta ADR (consulte política de consentimento de voz e deepfake).
  • Paridade de localidade: a voz está DESLIGADA por padrão em en, es-419, pt-BR; a divulgação é totalmente traduzida nas três.
  • A experiência na primeira visita é silenciosa. A decisão de consentimento é do usuário, não da demo.
  • A exposição a deepfake fica limitada aos usuários que habilitaram a voz explicitamente.
  • O aviso de rodapé “Áudio NÃO retido” carrega o contexto de consentimento de forma visível o tempo todo.
  • A paridade de localidade é imposta.
  • Um clique extra para usuários que ativamente querem voz. Pequeno custo de UX.
  • O consentimento é registrado por chave no servidor, de modo que a decisão de um usuário acompanha a chave entre dispositivos e sessões em vez de viver no armazenamento de um único navegador.
  • Boa, porque descoberta sem atrito do recurso de voz.
  • Ruim, porque uma voz sintética toca na primeira visita - o consentimento é retroativo, não prévio.
  • Ruim, por causa da exposição a deepfake para cada visitante.
  • Ruim, porque é difícil de defender diante de um revisor clínico.

Opção B (escolhida): Voz DESLIGADA por padrão + consentimento registrado no servidor

Seção intitulada “Opção B (escolhida): Voz DESLIGADA por padrão + consentimento registrado no servidor”
  • Boa, porque consentimento em primeiro lugar.
  • Boa, porque a exposição a deepfake fica limitada aos usuários que fizeram opt-in.
  • Boa, porque o consentimento é imposto no servidor, onde um sinalizador no lado do cliente poderia ser contornado, e persiste entre sessões e dispositivos.
  • Boa, porque a divulgação carrega o enquadramento explícito de voz + privacidade.
  • Ruim, por causa de um clique extra para usuários que querem voz, mais o registro de consentimento no lado do servidor que um interruptor apenas no cliente não precisaria.

Opção C: Voz DESLIGADA por padrão + opt-in no lado do cliente em localStorage

Seção intitulada “Opção C: Voz DESLIGADA por padrão + opt-in no lado do cliente em localStorage”
  • Boa, porque é simples e não precisa de registro de consentimento no lado do servidor.
  • Ruim, porque o estado de consentimento vive em um único navegador e não acompanha o usuário entre dispositivos ou sessões.
  • Ruim, porque um sinalizador mantido no cliente não pode ser imposto no lado do servidor, então é a ferramenta errada para condicionar uma capacidade paga e sensível a consentimento.
  • Boa, porque o consentimento é reafirmado a cada sessão.
  • Ruim, por causa do padrão de UX que incomoda. Gera fadiga de consentimento.
  • Ruim, porque um usuário que consentiu ontem é perguntado novamente hoje sem ganho operacional algum.