Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Problemas conhecidos e lições

Problemas que custaram tempo de verdade, a causa e a regra que saiu de cada um. Os abertos vêm primeiro. Acrescente uma linha quando algo surpreender você. Armadilhas de ferramentas e do fluxo de trabalho (hooks, worktrees, mdBook) ficam em Armadilhas; a evidência técnica de cada uma das regras do produto está em knowledge/gotchas/.

Abertos

ProblemaContorno ou plano
Channels do Claude Code é research preview: a flag e o protocolo podem mudarO papo também funciona no modo pull (wait, inbox); acompanhar a documentação de channels a cada versão do Claude Code
O Claude Code descarta as notificações de channel em silêncio quando channels está desligado, e o servidor não tem como saberMensagens empurradas continuam não lidas até wait/inbox ou uma resposta com reply_to (ADR 0002)
Em organizações Team/Enterprise, Channels vem bloqueado até um Owner habilitarModo pull; ou pedir ao admin para ligar Channels (ou channelsEnabled: true nas configurações gerenciadas)
A flag --dangerously-load-development-channels mostra um diálogo de confirmação a cada sessãoEsperar o empacotamento como plugin (Roadmap)
Em salas com mais de duas pessoas, uma mensagem sem to sai da fila no primeiro ackUsar to para garantir a entrega a alguém específico
Frames não são assinados por membro: um membro pode se passar por outro nome dentro da salaTodos na sala têm o convite e confiam uns nos outros (ADR 0007); assinatura por membro está no roadmap
Não há revogação: quem tem o convite entraCriar uma sala nova (papo new --force) e mandar o convite só para quem fica
Relays públicos da n0 têm limite de usoPAPO_RELAY aponta para um iroh-relay próprio
Binários sem assinatura: Gatekeeper no macOS, SmartScreen no Windowsxattr -d com.apple.quarantine ./papo; no Windows, “Executar assim mesmo”
Só um servidor MCP por perfil: uma segunda sessão do Claude Code no mesmo perfil recebe erroUm perfil por projeto (papo install --profile <nome>)
Travessia de NAT entre redes diferentes ainda não foi testada (o e2e roda na mesma máquina)Parte do M6
A wiki do GitHub não sincroniza até a primeira página ser salva pela interfaceSalvar qualquer página em /wiki/_new e rodar o workflow wiki de novo
Um corpo com menos de 48 KiB mas cheio de caracteres que o JSON escapa (aspas, barras, controles) pode passar de 64 KiB no frame e ser recusado com “frame too large”Resumir ou dividir a mensagem; o erro aparece na hora para o agente, nada fica na fila

Resolvidos (mantenha as regras)

O que aconteceuCausaRegra
papo say e papo status terminavam imprimindo papo: gossip subscription closed mesmo dando certoO laço de eventos avisava o fim da assinatura também no desligamento normal do nóO nó marca que está desligando antes de fechar; teste de CLI garante stderr limpo
Um convite cortado exatamente na fronteira de um endpoint era aceitoO formato não tinha verificação e o tamanho cortado continuava múltiplo de 32 bytesConvite com 4 bytes de verificação BLAKE3; teste de propriedade com cortes arbitrários
PAPO_RELAY vazia impedia o papo de subirString vazia tratada como URLVazia conta como não definida
A sala nunca se formava pela internet: o segundo membro ficava sozinho para sempreNo iroh-gossip 0.101, um par passado como bootstrap cuja primeira discagem falha fica Pending no ator do gossip; join_peers depois disso só enfileira mensagens e nunca disca de novo. O caso comum: discar um colega que abriu a sessão há um segundo e ainda não publicou o endereço (“No addressing information available”)Nunca passar pares ao gossip como bootstrap; o papo disca com o ALPN do gossip e entrega a conexão pronta via Gossip::handle_connection (ADR 0003)
O primeiro contato levava 12 sTentativas a cada 10 s fixos; a primeira sempre perdia a corrida contra a publicação do endereçoBackoff que começa em 1 s e dobra até 10 s; voltou para cerca de 6 s no e2e

Pegos na revisão, antes de acontecer

RiscoCausaRegra
Duplicata se o processo morresse entre gravar o inbox e o logA deduplicação era reconstruída só a partir do logOs ids do inbox também entram no conjunto de vistos ao subir
Registro órfão de cancelamento numa chamada MCP muito rápidaA tarefa podia terminar antes de o handle ser guardado no mapaCriar a tarefa segurando o lock do mapa
Nó “zumbi” em silêncio se a assinatura do gossip morresseNada sinalizava o fim do laço de eventosNode::is_healthy; status e send avisam para reiniciar a sessão
Duas sessões no mesmo perfil disputando a mesma identidade na redeMesmo endpoint id em dois processosTrava exclusiva do perfil (File::try_lock) no papo mcp

Regras que vieram da pesquisa

FatoFonteRegra
O tamanho máximo padrão de mensagem do iroh-gossip é 4096 bytes, pouco para trechos de códigoDEFAULT_MAX_MESSAGE_SIZE no código do iroh-gossipGossip::builder().max_message_size(64 KiB); corpo limitado a 48 KiB
Servidor que negocia a revisão 2026-07-28 do MCP não é registrado como channel pelo Claude Codedocumentação de channelsNegociar no máximo 2025-11-25
Chaves do meta que não são identificadores são descartadas em silênciodocumentação de channelsSó [A-Za-z0-9_]: from, msg_id, sender_kind, reply_to, to

Detalhes e fontes de cada fato: Pesquisa.