Fase 4: Onboarding de Nos Institucionais
-2026-02-15
-Uma rede P2P composta apenas por individuos e fragil. Discos rigidos morrem, -celulares sao perdidos, pessoas perdem interesse. A sobrevivencia a longo prazo -das memorias da humanidade depende de instituicoes — bibliotecas, arquivos, -museus, universidades — que medem seus tempos de vida em seculos. A Fase 4 -continua com o onboarding de nos institucionais: organizacoes verificadas agora -podem prometer armazenamento, manter indices de busca e participar da rede com -uma identidade distinta.
-O design segue um principio de confiar mas verificar: instituicoes se -identificam via registros DNS TXT (o mesmo mecanismo usado por SPF, DKIM e DMARC -para email), prometem um orcamento de armazenamento e recebem isencoes de -reciprocidade para que possam armazenar fragmentos para outros sem esperar nada -em troca. Em contrapartida, a rede trata seus fragmentos como replicas de maior -qualidade e limita a dependencia excessiva de qualquer instituicao individual -atraves de restricoes de diversidade.
-O que foi construido
-Bits de capacidade (tesseras-core/src/network.rs) — Dois novos flags
-adicionados ao bitfield Capabilities: INSTITUTIONAL (bit 7) e SEARCH_INDEX
-(bit 8). Um novo construtor institutional_default() retorna o conjunto
-completo de capacidades da Fase 2 mais esses dois bits e RELAY. Nos normais
-anunciam phase2_default() que nao inclui flags institucionais. Testes de
-roundtrip de serializacao verificam que os novos bits sobrevivem a codificacao
-MessagePack.
Tipos de busca (tesseras-core/src/search.rs) — Tres novos tipos de dominio
-para o subsistema de busca:
-
-
SearchFilters— parametros de consulta:memory_type,visibility, -language,date_range,geo(bounding box),page,page_size
-SearchHit— um resultado individual: hash do conteudo mais um -MetadataExcerpt(titulo, descricao, tipo de memoria, data de criacao, -visibilidade, idioma, tags)
-GeoFilter— bounding box commin_lat,max_lat,min_lon,max_lonpara -consultas espaciais
-
Todos os tipos derivam Serialize/Deserialize para transporte e
-Clone/Debug para diagnostico.
Configuracao institucional do daemon (tesd/src/config.rs) — Uma nova secao
-[institutional] no TOML com domain (o dominio DNS a verificar),
-pledge_bytes (compromisso de armazenamento em bytes) e search_enabled
-(toggle para o indice FTS5). O metodo to_dht_config() agora define
-Capabilities::institutional_default() quando a configuracao institucional esta
-presente, para que nos institucionais anunciem os bits de capacidade corretos em
-respostas Pong.
Verificacao DNS TXT (tesd/src/institutional.rs) — Resolucao DNS assincrona
-usando hickory-resolver para verificar identidade institucional. O daemon
-consulta registros TXT em _tesseras.<dominio> e analisa campos chave-valor:
-v (versao), node (node ID em hexadecimal) e pledge (compromisso de
-armazenamento em bytes). A verificacao checa:
-
-
- Um registro TXT existe em
_tesseras.<dominio>
- - O campo
nodecorresponde ao node ID do proprio daemon
- - O campo
pledgeesta presente e e valido
-
Na inicializacao, o daemon tenta a verificacao DNS. Se bem-sucedida, o no roda -com capacidades institucionais. Se falhar, o no registra um aviso e faz -downgrade para um no completo normal — sem crash, sem intervencao manual.
-Comando CLI de setup (tesseras-cli/src/institutional.rs) — Um novo
-subcomando institutional setup que guia operadores pelo onboarding:
-
-
- Le a identidade do no a partir do diretorio de dados -
- Solicita nome de dominio e tamanho do pledge -
- Gera o registro DNS TXT exato a adicionar:
-
v=tesseras1 node=<hex> pledge=<bytes>
- - Escreve a secao institucional no arquivo de configuracao do daemon -
- Imprime os proximos passos: adicionar o registro TXT, reiniciar o daemon -
Indice de busca SQLite (tesseras-storage) — Uma migracao
-(003_institutional.sql) que cria tres estruturas:
-
-
search_content— uma tabela virtual FTS5 para busca full-text sobre -metadados de tesseras (titulo, descricao, criador, tags, idioma)
-geo_index— uma tabela virtual R-tree para consultas espaciais de bounding -box sobre latitude/longitude
-geo_map— uma tabela de mapeamento ligando IDs de linhas do R-tree a hashes -de conteudo
-
O adaptador SqliteSearchIndex implementa o port trait SearchIndex com
-index_tessera() (inserir/atualizar) e search() (consultar com filtros).
-Consultas FTS5 suportam busca em linguagem natural; consultas geo usam
-INTERSECT do R-tree para lookups de bounding box. Resultados sao ranqueados
-por score de relevancia do FTS5.
A migracao tambem adiciona uma coluna is_institutional a tabela reciprocity,
-tratada de forma idempotente via checagens pragma_table_info (o
-ALTER TABLE ADD COLUMN do SQLite nao tem IF NOT EXISTS).
Bypass de reciprocidade (tesseras-replication/src/service.rs) — Nos
-institucionais sao isentos de checagens de reciprocidade. Quando
-receive_fragment() e chamado, se o node ID do remetente esta marcado como
-institucional no ledger de reciprocidade, a checagem de saldo e ignorada
-completamente. Isso significa que instituicoes podem armazenar fragmentos para
-toda a rede sem precisar "ganhar" creditos primeiro — sua identidade verificada
-por DNS e compromisso de armazenamento servem como credencial.
Restricao de diversidade por tipo de no
-(tesseras-replication/src/distributor.rs) — Uma nova funcao
-apply_institutional_diversity() limita quantas replicas de uma unica tessera
-podem ir para nos institucionais. O limite e ceil(fator_replicacao / 3.5) —
-com o padrao r=7, no maximo 2 de 7 replicas vao para instituicoes. Isso impede
-que a rede se torne dependente de um pequeno numero de grandes instituicoes: se
-os servidores de uma universidade cairem, pelo menos 5 replicas permanecem em
-nos independentes.
Extensoes de mensagens DHT (tesseras-dht/src/message.rs) — Duas novas
-variantes de mensagem:
| Mensagem | Proposito |
|---|---|
Search | Cliente envia string de consulta, filtros e numero da pagina |
SearchResult | No institucional responde com resultados e contagem total |
A funcao encode() foi trocada de serializacao MessagePack posicional para
-nomeada (rmp_serde::to_vec_named) para lidar corretamente com campos opcionais
-de SearchFilters — a codificacao posicional quebra quando
-skip_serializing_if omite campos.
Metricas Prometheus (tesd/src/metrics.rs) — Oito metricas especificas
-institucionais:
-
-
tesseras_institutional_pledge_bytes— compromisso de armazenamento -configurado
-tesseras_institutional_stored_bytes— bytes realmente armazenados
-tesseras_institutional_pledge_utilization_ratio— razao armazenado/prometido
-tesseras_institutional_peers_served— peers unicos que receberam fragmentos
-tesseras_institutional_search_index_total— tesseras no indice de busca
-tesseras_institutional_search_queries_total— consultas de busca recebidas
-tesseras_institutional_dns_verification_status— 1 se verificado por DNS, 0 -caso contrario
-tesseras_institutional_dns_verification_last— timestamp Unix da ultima -verificacao
-
Testes de integracao — Dois testes em
-tesseras-replication/tests/integration.rs:
-
-
institutional_peer_bypasses_reciprocity— verifica que um peer institucional -com deficit massivo (-999.999 de saldo) ainda pode armazenar fragmentos, -enquanto um peer nao institucional com o mesmo deficit e rejeitado
-institutional_node_accepts_fragment_despite_deficit— teste async completo -usandoReplicationServicecom DHT, fragment store, reciprocity ledger e blob -store mockados: envia um fragmento de um remetente institucional e verifica -que e aceito
-
322 testes passam em todo o workspace. Clippy limpo com -D warnings.
Decisoes de arquitetura
--
-
- DNS TXT ao inves de PKI ou blockchain: DNS e universalmente implantado, -universalmente compreendido e ja usado para verificacao de dominio (SPF, DKIM, -Let's Encrypt). Instituicoes ja gerenciam DNS. Nenhuma autoridade -certificadora, nenhum token, nenhuma transacao on-chain — apenas um registro -TXT. Se uma instituicao perder controle de seu dominio, a verificacao -naturalmente falha na proxima checagem. -
- Degradacao graciosa em falha DNS: se a verificacao DNS falha na -inicializacao, o daemon faz downgrade para um no completo normal ao inves de -recusar iniciar. Isso previne incidentes operacionais — uma misconfiguracao -DNS nao deveria tirar um no do ar. -
- Limite de diversidade em
ceil(r / 3.5): comr=7, no maximo 2 replicas -vao para instituicoes. Isso e conservador — garante que a rede nunca dependa -de instituicoes para quorum majoritario, enquanto ainda se beneficia de sua -capacidade de armazenamento e uptime.
- - Codificacao MessagePack nomeada: trocar de codificacao posicional para -nomeada adiciona ~15% de overhead por mensagem mas elimina uma classe de bugs -de serializacao quando campos opcionais estao presentes. O DHT nao e limitado -por largura de banda no nivel de mensagem, entao o tradeoff vale a pena. -
- Isencao de reciprocidade ao inves de concessao de creditos: ao inves de -dar as instituicoes um saldo inicial grande de creditos (que e arbitrario e -precisa de ajuste), isentamos completamente. Sua identidade verificada por DNS -e compromisso publico de armazenamento substituem o mecanismo de reciprocidade -bilateral. -
- FTS5 + R-tree no SQLite: busca full-text e indexacao espacial sao -embutidas no SQLite como extensoes carregaveis. Nenhum motor de busca externo -(Elasticsearch, Meilisearch) necessario. Isso mantem o deploy como um unico -binario com um unico arquivo de banco de dados — critico para operadores -institucionais que podem nao ter uma equipe de DevOps. -
O que vem a seguir
--
-
- Fase 4 continuacao — deduplicacao de armazenamento (armazenamento -enderecavel por conteudo com BLAKE3), auditorias de seguranca, empacotamento -para OS (Alpine, Arch, Debian, OpenBSD, FreeBSD) -
- Fase 5: Exploracao e Cultura — navegador publico de tesseras por -era/localizacao/tema/idioma, curadoria institucional, integracao genealogica -(FamilySearch, Ancestry), exportacao para midia fisica (M-DISC, microfilme, -papel livre de acido com QR), contexto assistido por IA -
O onboarding institucional fecha uma lacuna critica no modelo de preservacao do -Tesseras. Nos individuais fornecem resiliencia de base — milhares de -dispositivos ao redor do globo, cada um armazenando alguns fragmentos. Nos -institucionais fornecem ancoragem — organizacoes com infraestrutura -profissional, armazenamento redundante e horizontes operacionais de multiplas -decadas. Juntos, formam uma rede onde memorias podem sobreviver tanto a -dispositivos individuais quanto a instituicoes individuais.
- -