Pular para o conteúdo

As decisões de arquitetura (índice dos ADRs)

Formato e regra de criação em specs/10-convencoes.md: toda decisão marcada [EM ABERTO] nas specs vira um ADR quando resolvida. Template em 0000-template.md.

Sobre o vocabulário destas páginas

O ADR 0035 renomeou o código em 2026-08-25 — Dogma virou servidor, Cage virou sala de voz, Pilot virou pessoa, Line virou canal — e decidiu, na mesma página, não reescrever os ADRs anteriores: *«reescreve o que descreve o sistema de hoje, preserva o que registra a decisão de ontem»*. Essa regra continua valendo, e é por isso que as páginas de antes daquela data ainda dizem Dogma. Cada uma delas abre com uma nota de vocabulário apontando para cá.

Duas coisas não são registro e foram corrigidas onde estavam erradas:

endereço errado manda a próxima pessoa a uma pasta que não existe, então src/casper/ virou src/persistence/ no 0027, e o cage= do seele:// virou room= no 0006, com a consequência anotada;

que seria construído nos nomes que estivessem escritos ali. Foram trazidas para a língua de hoje por inteiro, e cada uma diz no alto o que mudou.

Os nomes de arquivo de 0021, 0022, 0031 e 0032 continuam com dogma dentro. Renomeá-los quebraria todo link que aponte para eles de fora do repositório, e o ganho é de estética.

O índice

#TítuloStatusDecisão em aberto que fecha
0001Serialização com postcardaceito por default02 — serialização
0002Regra de dependência mais estrita que a specaceito por default · o seele-enlace comum ao core e ao servidor, pelo 0063— (divergência encontrada em M0)
0003TOFU como padrão de certificadoaceito por default · emendado no navegador pelo 005701, 08 — certificados
0004Autenticação por chave pública Ed25519aceito por default08 — autenticação
0005Porta padrão 8383/UDPproposto01 — porta
0006Esquema de URI seele://aceito · emendado no navegador pelo 0057— (lacuna encontrada no design)
0007Sem DSP externo em v1aceito por default · emendado no navegador pelo 005703 — AEC, AGC, supressão
0008shiguredo_opus como binding do codecaceito03 — binding do codec
0009Orçamento de latência boca-a-ouvidoaceito— (contradição 00 × 03)
0010FEC in-band do Opus desligado em v1aceito · emendado no navegador pelo 005702 — FEC
0011Toolchain fixado, MSRV igual ao toolchainaceito por default01 — MSRV
0012i18n desde M0, sem milestone próprioaceito por default— (lacuna G4)
0013Manifestos e CI em inglêsaceito por default— (lacuna em 10)
0014Palheta v2 como canônicaaceito por default07 — tokens de cor
0015VAD por energia, sem webrtc-vadaceito por default03 — ativação por voz
0016Push-to-talk vira trava onde o terminal não reporta solturaaceito03 — push-to-talk
0017Identidade e pins gravados em disco, sem senhaaceito · emendado no navegador pelo 0057 · a identidade por máquina, pelo 006108 — guarda da identidade
0018seele-ffi com a forma que o uniffi exige, sem a dependênciaaceito · emendado pelo 0057: o uniffi não entra em M601 — ponte para o app
0019Frontend do desktop sem framework e sem npmaceito · emendado no navegador pelo 005705 — frontend desktop
0020O que o Tauri traz junto, e por que aceitamosaceito01 — dependências do app
0021Quem entra num servidor: convite de uso único, senha como alternativaaceito08 — admissão
0022Alcançar um servidor pela internetaceito · degrau 5 emendado pelo 0045 e pelo 0063 (sem TURN na linha 2, desde 26/10/2026)01 — alcance fora da rede local
0023Idioma dentro do seele-coreaceito10 — idioma
0024Faixas do sinal em três, e a média da sala no coreaceito03 — sincronia
0025Limitação de taxa: dois baldes, e um aviso antes da portaaceito08 — limitação de taxa
0026Duas assinaturas, e um botão de atualizaraceito · o botão foi substituído pelo 0046 · exceção no navegador pelo 005701 — distribuição
0027Anexos com teto total, e o mais velho saiaceito02 — política de anexos (D14)
0028A reserva do anel de reprodução, e o que ela custa de latênciaaceito— (pendência 2, e revisão do 0009)
0029MODs: declaram valores, e o produto mede antes de aplicarsubstituído pelo 0045 · nada construído— (pedido do dono; desfaz metade do não-objetivo de 00)
0030Quem bate à porta: TOFU aplicado a gente, e a portaria de quem hospedaaceito · construído 18/08— (pedido do dono; estende o 0021)
0031Vários servidores ao mesmo tempo: a sessão é do servidor, o microfone é da máquinaproposto · nada construído— (pedido do dono; o + da trilha)
0032Personalização de um servidor: nome, cor e íconeaceito · nome e ícone construídos; a cor foi absorvida pelo 0045— (pedido do dono; reusa a resolução do 0029)
0033O vocabulário de Evangelion sai da interface; a estética ficaaceito07 — o vocabulário na tela
0034A marca abandona as duas citações do animeaceito07 — a marca na imagem
0035O código deixa de falar Evangelionaceito07 — o vocabulário no código
0036Bitrate adaptativo em faixas, sobre perda de subida medida no servidoraceito03 — o bitrate adaptativo que a spec pede
0037Um Endpoint, muitas conexões: os candidatos do convite correm juntosaceito02 — alcançar um servidor pela internet
0038O teto da sala é contado, e quem hospeda é avisadoaceito04 — o dimensionamento da sala
0039O produto passa a ter uma casca sóaceito · emendado no navegador pelo 005705 e 06 — as cascas
0040Sessenta quadros entram, por medidaaceitodesign da tela, §6 item 10
0041O codec por hardware, e a exceção nomeada ao unsafeaceito— (reverte a recusa registrada no Cargo.toml do seele-video)
0042Nomes repetidos, e a chave que distingueproposto— (pedido do dono; revisa o 0017)
0043O instalador do Windows é nossoaceito— (o NSIS não desenha a moldura, os botões nem a fonte)
0044O portão divide a subida medida, e a medida sobrevive ao reinícioaceito— (revisa a perna do hospedeiro do 0038)
0045MODs: o produto base tem regras, e um MOD nãoproposto— (pedido do dono; substitui o 0029)
0046Toda versão continua de pé: o app vira launcheraceito em 08/10/2026 · emenda das duas numerações: toda linha de servidor para sempre · exceção no navegador pelo 0057 · a identidade não é por linha, pelo 0061— (pedido do dono; substitui o botão do 0026)
0047O link que volta a funcionar amanhã: permanência, multiconexão e chamada privadarascunho · o §2.4 (o registro assinado) revisto pelo 0062— (pedido do dono; confere o 0022 e o 0031 contra o código)
0048MODs ganham o caminho de volume que os anexos já têmaceito— (relato de campo: imagem de 1 MB levando 28 s; estende o 0027 aos MODs do 0045)
0049Um MOD deixa de rodar na janela do produtoaceito— (revisa o 0045; etapa 5 do plano de isolamento, e depende de protótipo em macOS e Windows)
0052Um MOD ganha superfícies próprias e pontos de integraçãoaceito— (auditoria de UX/UI de 20/09/2026, U01–U03 e U27; estende o 0049 sem mexer no executor)
0053Uma prévia não é um cliqueaceito— (revisão da v15, R06: separa a política de prévia automática da de abrir link, e põe o consentimento por domínio nas mãos de quem lê)
0054Uma transmissão tem identidadeaceito— (revisão da v15, R16–R21: tudo de compartilhamento passa a ser por ScreenId)
0055O filtro é o que torna o limiar baixo defensávelaceito— (features-v15.md F01 e F02: supressão de ruído em Rust puro, e o limiar que passou a medir a sala em vez de supor o ruído dela — revisado pela auditoria de 22/09/2026)
0056MODs na tela inteiraaceito · no corte da API 6 (15/10/2026), com o api/v6.json congelado e os limites da M3— (spec de 23/09, Parte II, e o spec-mestre da 0.16: a API 6 e a medição de custo do 0052)
0057No celular, o SEELE é uma página: web app instalável, sem app nativoaceito · emendado em 08/10/2026: os MODs rodam no celular, e o unsafe da fronteira dos dois crates do celular · o navegador entra por WebRTC, pelo 006306 — plataforma mobile (M6)
00581.x nunca quebra o fio: a definição da versão de servidoraceito · a linha 2 sem recusador seele/1, pelo 006302 e 10 — versionamento (substitui a janela N−1)
0059A sala pessoal segura a conexão enquanto tocaaceito— (decisão do dono de 23/09: o toque instantâneo; restringe o 0030 aos servidores guardados)
0060O código de uma pessoaaceito— (decisão do dono de 23/09: o código de usuário; forma, marcas e o DER da sala congelados)
0061A identidade é uma por máquina, e não por linha nem por versãoaceito— (decisões do dono de 08/10; emenda o 0017 e o 0046; a 0.15.2 lê $SEELE_IDENTIDADE e só assina desafios de 32 bytes)
0062SEELE-ENC/2: o registro assinado no ponto de encontroaceito · o anfitrião da 0.17 registra pelo ENC/3, pelo 0063— (spec de 23/09 e decisões do dono de 08/10: o limite e o teto, o portão no publicar.sh, o teto por prefixo e o cookie de ida e volta; revê o §2.4 do 0047)
0063A linha 2 fala WebRTC: um transporte só, o Servidor 2.0 e o fio 10aceito · não medido entre duas casas · emendado em 25/10/2026: o DTLS (dimpl) passa ao aws-lc-rs pelo RUSTSEC-2026-038702, 08 e 10 — transporte e versionamento (emenda 0002, 0022, 0057, 0058 e 0062)
0064Cargos e permissões: a soma do Discord, a restrição que já existia e um dono que não nasce da redeaceito · conformidade de ponta a ponta pendente do transporte novo04 e 08 — PERMISSIONS (substitui os quatro papéis fixos; usa a API 7 de MODs)
0065O app testa os comandos de verdade: dev-dependencies nominais, produção intactaaceito— (decisão do coordenador da 0.17; emenda o 0002)

O que ainda não tem ADR

Decisões em aberto que vencem depois de M1 e por isso não foram escritas ainda — ver docs/plano-m0-m1.md, seção 4.2: política acima de 20 falantes (M3), endpoint de saúde (M3), recarga a quente de config (M3), compressão de histórico (M3), PTT global (M4), tecla de PTT (M4), leitor de tela (M4).

Anexos saíram desta lista: viraram o 0027, aceito e construído, e ele desfaz metade da D14 — o teto de corpo de 4 KiB continua, e o "sem anexos em v1" não. O que ele decide está de pé, com uma exceção que ele mesmo registra: «nenhuma dependência nova» caiu, e o seletor de arquivos nativo existe desde 2026-08-18 — o botão ARQUIVO não abria nada, e o primeiro dono a usar o app clicou nele. A prévia embutida de imagem foi construída em 2026-08-18 — são quatro formatos, com o motivo de cada um escrito, e o próprio 0027 registra a data no alto dele.

IPv6/NAT traversal saiu desta lista: virou o 0022, aceito, com os degraus 2 (IPv6) e 3 (UPnP) construídos. O degrau 4 — furo de NAT com ponto de encontro — continua sem decisão de propósito: ele custa uma conversa sobre o metadado que o ponto de encontro aprende, e o 0022 existe para que essa conversa aconteça antes do código.

Plataforma mobile saiu desta lista: virou o 0057, aceito em 2026-10-07 e não construído. O celular é um web app instalável que só entra em servidores, por WebTransport direto ao seeled; o app nativo em Tauri do 8632668 foi abandonado. A decisão está tomada, e o aceite do M6 continua sem medida: 30 minutos com a tela bloqueada no web app instalado, 4G e Android.

Framework do frontend desktop também saiu, e já devia ter saído: o 0019 o fechou em M5, e a lista só não tinha sido atualizada.

MODs nunca estiveram nesta lista, e o motivo importa: specs/00-visao-geral.md os punha como não-objetivo de v1 ("marketplace de plugins"), e a tela de configurações registrava que um segundo tema seria "decisão de ADR, não de tela". Viraram o 0029, proposto, que desfaz metade daquele não-objetivo. Nada foi construído até hoje; ver pendência 21.

Várias sessões e personalização de servidor também nunca estiveram nesta lista, e o motivo é que ninguém as tinha pedido: o + da trilha estava desabilitado com a limitação escrita no title, e o nome de um servidor hospedado pelo app era o literal "Casa". Viraram o 0031 e o 0032, e o segundo cita o primeiro na parte que compartilham — o corte entre o que é do servidor e o que é desta máquina.

Os dois seguiram caminhos diferentes desde então, e é o que a tabela acima registra. O 0032 foi construído pela metade que não dependia do outro: o nome se escreve pela janela, o ícone existe contra a recusa da própria página — ver o adendo dela — e a cor continua sem existir, porque ela é a parte que depende do

  1. O 0031 continua proposto e não construído: o + ganhou verbo em

22/08, mas trocando de servidor, não somando sessões. Ver pendências 24 e 25.

Postura de direitos sobre Evangelion (07) também não tem ADR: a recomendação é repositório privado até M4, o que tira a decisão do caminho crítico.

Status usados

10-convencoes.md prevê aceito e substituído por NNNN. Acrescentamos:

existe default seguro.

bloquear o milestone. Revisável; o custo de reverter está no próprio ADR.