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ços — caminho de arquivo, nome de função, parâmetro de URI. Um
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;
- as decisões ainda abertas — 0029, 0030, 0031 e 0032 projetavam trabalho
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ítulo | Status | Decisão em aberto que fecha |
|---|---|---|---|
| 0001 | Serialização com postcard | aceito por default | 02 — serialização |
| 0002 | Regra de dependência mais estrita que a spec | aceito por default · o seele-enlace comum ao core e ao servidor, pelo 0063 | — (divergência encontrada em M0) |
| 0003 | TOFU como padrão de certificado | aceito por default · emendado no navegador pelo 0057 | 01, 08 — certificados |
| 0004 | Autenticação por chave pública Ed25519 | aceito por default | 08 — autenticação |
| 0005 | Porta padrão 8383/UDP | proposto | 01 — porta |
| 0006 | Esquema de URI seele:// | aceito · emendado no navegador pelo 0057 | — (lacuna encontrada no design) |
| 0007 | Sem DSP externo em v1 | aceito por default · emendado no navegador pelo 0057 | 03 — AEC, AGC, supressão |
| 0008 | shiguredo_opus como binding do codec | aceito | 03 — binding do codec |
| 0009 | Orçamento de latência boca-a-ouvido | aceito | — (contradição 00 × 03) |
| 0010 | FEC in-band do Opus desligado em v1 | aceito · emendado no navegador pelo 0057 | 02 — FEC |
| 0011 | Toolchain fixado, MSRV igual ao toolchain | aceito por default | 01 — MSRV |
| 0012 | i18n desde M0, sem milestone próprio | aceito por default | — (lacuna G4) |
| 0013 | Manifestos e CI em inglês | aceito por default | — (lacuna em 10) |
| 0014 | Palheta v2 como canônica | aceito por default | 07 — tokens de cor |
| 0015 | VAD por energia, sem webrtc-vad | aceito por default | 03 — ativação por voz |
| 0016 | Push-to-talk vira trava onde o terminal não reporta soltura | aceito | 03 — push-to-talk |
| 0017 | Identidade e pins gravados em disco, sem senha | aceito · emendado no navegador pelo 0057 · a identidade por máquina, pelo 0061 | 08 — guarda da identidade |
| 0018 | seele-ffi com a forma que o uniffi exige, sem a dependência | aceito · emendado pelo 0057: o uniffi não entra em M6 | 01 — ponte para o app |
| 0019 | Frontend do desktop sem framework e sem npm | aceito · emendado no navegador pelo 0057 | 05 — frontend desktop |
| 0020 | O que o Tauri traz junto, e por que aceitamos | aceito | 01 — dependências do app |
| 0021 | Quem entra num servidor: convite de uso único, senha como alternativa | aceito | 08 — admissão |
| 0022 | Alcançar um servidor pela internet | aceito · degrau 5 emendado pelo 0045 e pelo 0063 (sem TURN na linha 2, desde 26/10/2026) | 01 — alcance fora da rede local |
| 0023 | Idioma dentro do seele-core | aceito | 10 — idioma |
| 0024 | Faixas do sinal em três, e a média da sala no core | aceito | 03 — sincronia |
| 0025 | Limitação de taxa: dois baldes, e um aviso antes da porta | aceito | 08 — limitação de taxa |
| 0026 | Duas assinaturas, e um botão de atualizar | aceito · o botão foi substituído pelo 0046 · exceção no navegador pelo 0057 | 01 — distribuição |
| 0027 | Anexos com teto total, e o mais velho sai | aceito | 02 — política de anexos (D14) |
| 0028 | A reserva do anel de reprodução, e o que ela custa de latência | aceito | — (pendência 2, e revisão do 0009) |
| 0029 | MODs: declaram valores, e o produto mede antes de aplicar | substituído pelo 0045 · nada construído | — (pedido do dono; desfaz metade do não-objetivo de 00) |
| 0030 | Quem bate à porta: TOFU aplicado a gente, e a portaria de quem hospeda | aceito · construído 18/08 | — (pedido do dono; estende o 0021) |
| 0031 | Vários servidores ao mesmo tempo: a sessão é do servidor, o microfone é da máquina | proposto · nada construído | — (pedido do dono; o + da trilha) |
| 0032 | Personalização de um servidor: nome, cor e ícone | aceito · nome e ícone construídos; a cor foi absorvida pelo 0045 | — (pedido do dono; reusa a resolução do 0029) |
| 0033 | O vocabulário de Evangelion sai da interface; a estética fica | aceito | 07 — o vocabulário na tela |
| 0034 | A marca abandona as duas citações do anime | aceito | 07 — a marca na imagem |
| 0035 | O código deixa de falar Evangelion | aceito | 07 — o vocabulário no código |
| 0036 | Bitrate adaptativo em faixas, sobre perda de subida medida no servidor | aceito | 03 — o bitrate adaptativo que a spec pede |
| 0037 | Um Endpoint, muitas conexões: os candidatos do convite correm juntos | aceito | 02 — alcançar um servidor pela internet |
| 0038 | O teto da sala é contado, e quem hospeda é avisado | aceito | 04 — o dimensionamento da sala |
| 0039 | O produto passa a ter uma casca só | aceito · emendado no navegador pelo 0057 | 05 e 06 — as cascas |
| 0040 | Sessenta quadros entram, por medida | aceito | design da tela, §6 item 10 |
| 0041 | O codec por hardware, e a exceção nomeada ao unsafe | aceito | — (reverte a recusa registrada no Cargo.toml do seele-video) |
| 0042 | Nomes repetidos, e a chave que distingue | proposto | — (pedido do dono; revisa o 0017) |
| 0043 | O instalador do Windows é nosso | aceito | — (o NSIS não desenha a moldura, os botões nem a fonte) |
| 0044 | O portão divide a subida medida, e a medida sobrevive ao reinício | aceito | — (revisa a perna do hospedeiro do 0038) |
| 0045 | MODs: o produto base tem regras, e um MOD não | proposto | — (pedido do dono; substitui o 0029) |
| 0046 | Toda versão continua de pé: o app vira launcher | aceito 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) |
| 0047 | O link que volta a funcionar amanhã: permanência, multiconexão e chamada privada | rascunho · o §2.4 (o registro assinado) revisto pelo 0062 | — (pedido do dono; confere o 0022 e o 0031 contra o código) |
| 0048 | MODs ganham o caminho de volume que os anexos já têm | aceito | — (relato de campo: imagem de 1 MB levando 28 s; estende o 0027 aos MODs do 0045) |
| 0049 | Um MOD deixa de rodar na janela do produto | aceito | — (revisa o 0045; etapa 5 do plano de isolamento, e depende de protótipo em macOS e Windows) |
| 0052 | Um MOD ganha superfícies próprias e pontos de integração | aceito | — (auditoria de UX/UI de 20/09/2026, U01–U03 e U27; estende o 0049 sem mexer no executor) |
| 0053 | Uma prévia não é um clique | aceito | — (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ê) |
| 0054 | Uma transmissão tem identidade | aceito | — (revisão da v15, R16–R21: tudo de compartilhamento passa a ser por ScreenId) |
| 0055 | O filtro é o que torna o limiar baixo defensável | aceito | — (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) |
| 0056 | MODs na tela inteira | aceito · 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) |
| 0057 | No celular, o SEELE é uma página: web app instalável, sem app nativo | aceito · 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 0063 | 06 — plataforma mobile (M6) |
| 0058 | 1.x nunca quebra o fio: a definição da versão de servidor | aceito · a linha 2 sem recusador seele/1, pelo 0063 | 02 e 10 — versionamento (substitui a janela N−1) |
| 0059 | A sala pessoal segura a conexão enquanto toca | aceito | — (decisão do dono de 23/09: o toque instantâneo; restringe o 0030 aos servidores guardados) |
| 0060 | O código de uma pessoa | aceito | — (decisão do dono de 23/09: o código de usuário; forma, marcas e o DER da sala congelados) |
| 0061 | A identidade é uma por máquina, e não por linha nem por versão | aceito | — (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) |
| 0062 | SEELE-ENC/2: o registro assinado no ponto de encontro | aceito · 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) |
| 0063 | A linha 2 fala WebRTC: um transporte só, o Servidor 2.0 e o fio 10 | aceito · não medido entre duas casas · emendado em 25/10/2026: o DTLS (dimpl) passa ao aws-lc-rs pelo RUSTSEC-2026-0387 | 02, 08 e 10 — transporte e versionamento (emenda 0002, 0022, 0057, 0058 e 0062) |
| 0064 | Cargos e permissões: a soma do Discord, a restrição que já existia e um dono que não nasce da rede | aceito · conformidade de ponta a ponta pendente do transporte novo | 04 e 08 — PERMISSIONS (substitui os quatro papéis fixos; usa a API 7 de MODs) |
| 0065 | O app testa os comandos de verdade: dev-dependencies nominais, produção intacta | aceito | — (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
- 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:
proposto— descrita e recomendada, mas ainda não vale. Usado quando não
existe default seguro.
aceito por default— em vigor sem confirmação humana explícita, para não
bloquear o milestone. Revisável; o custo de reverter está no próprio ADR.