summaryrefslogtreecommitdiffstats
path: root/pt-br/news/phase4-institutional-onboarding
diff options
context:
space:
mode:
authormurilo ijanc2026-03-24 21:41:06 -0300
committermurilo ijanc2026-03-24 21:41:06 -0300
commitf186b71ca51e83837db60de13322394bb5e6d348 (patch)
treecd7940eaa16b83d2cde7b18123411bfb161f7ebb /pt-br/news/phase4-institutional-onboarding
downloadwebsite-f186b71ca51e83837db60de13322394bb5e6d348.tar.gz
Initial commit
Import existing tesseras.net website content.
Diffstat (limited to 'pt-br/news/phase4-institutional-onboarding')
-rw-r--r--pt-br/news/phase4-institutional-onboarding/index.html252
-rw-r--r--pt-br/news/phase4-institutional-onboarding/index.html.gzbin0 -> 5866 bytes
2 files changed, 252 insertions, 0 deletions
diff --git a/pt-br/news/phase4-institutional-onboarding/index.html b/pt-br/news/phase4-institutional-onboarding/index.html
new file mode 100644
index 0000000..023892c
--- /dev/null
+++ b/pt-br/news/phase4-institutional-onboarding/index.html
@@ -0,0 +1,252 @@
+<!DOCTYPE html>
+<html lang="pt-br">
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Fase 4: Onboarding de Nos Institucionais — Tesseras</title>
+ <meta name="description" content="Bibliotecas, arquivos e museus agora podem ingressar na rede Tesseras como nos institucionais verificados com identidade baseada em DNS, indices de busca full-text e compromissos configuraveis de armazenamento.">
+ <!-- Open Graph -->
+ <meta property="og:type" content="article">
+ <meta property="og:title" content="Fase 4: Onboarding de Nos Institucionais">
+ <meta property="og:description" content="Bibliotecas, arquivos e museus agora podem ingressar na rede Tesseras como nos institucionais verificados com identidade baseada em DNS, indices de busca full-text e compromissos configuraveis de armazenamento.">
+ <meta property="og:image" content="https://tesseras.net/images/social.jpg">
+ <meta property="og:image:width" content="1200">
+ <meta property="og:image:height" content="630">
+ <meta property="og:site_name" content="Tesseras">
+ <!-- Twitter Card -->
+ <meta name="twitter:card" content="summary_large_image">
+ <meta name="twitter:title" content="Fase 4: Onboarding de Nos Institucionais">
+ <meta name="twitter:description" content="Bibliotecas, arquivos e museus agora podem ingressar na rede Tesseras como nos institucionais verificados com identidade baseada em DNS, indices de busca full-text e compromissos configuraveis de armazenamento.">
+ <meta name="twitter:image" content="https://tesseras.net/images/social.jpg">
+ <link rel="stylesheet" href="https://tesseras.net/style.css?h=21f0f32121928ee5c690">
+
+
+ <link rel="alternate" type="application/atom+xml" title="Tesseras" href="https://tesseras.net/atom.xml">
+
+
+ <link rel="icon" type="image/png" sizes="32x32" href="https://tesseras.net/images/favicon.png?h=be4e123a23393b1a027d">
+
+</head>
+<body>
+ <header>
+ <h1>
+ <a href="https:&#x2F;&#x2F;tesseras.net/pt-br/">
+ <img src="https://tesseras.net/images/logo-64.png?h=c1b8d0c4c5f93b49d40b" alt="Tesseras" width="40" height="40" class="logo">
+ Tesseras
+ </a>
+ </h1>
+ <nav>
+
+ <a href="https://tesseras.net/pt-br/about/">Sobre</a>
+ <a href="https://tesseras.net/pt-br/news/">Notícias</a>
+ <a href="https://tesseras.net/pt-br/releases/">Lançamentos</a>
+ <a href="https://tesseras.net/pt-br/faq/">FAQ</a>
+ <a href="https://tesseras.net/pt-br/subscriptions/">Inscrições</a>
+ <a href="https://tesseras.net/pt-br/contact/">Contato</a>
+
+ </nav>
+ <nav class="lang-switch">
+
+ <a href="https:&#x2F;&#x2F;tesseras.net&#x2F;news&#x2F;phase4-institutional-onboarding&#x2F;">English</a> | <strong>Português</strong>
+
+ </nav>
+ </header>
+
+ <main>
+
+<article>
+ <h2>Fase 4: Onboarding de Nos Institucionais</h2>
+ <p class="news-date">2026-02-15</p>
+ <p>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.</p>
+<p>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.</p>
+<h2 id="o-que-foi-construido">O que foi construido</h2>
+<p><strong>Bits de capacidade</strong> (<code>tesseras-core/src/network.rs</code>) — Dois novos flags
+adicionados ao bitfield <code>Capabilities</code>: <code>INSTITUTIONAL</code> (bit 7) e <code>SEARCH_INDEX</code>
+(bit 8). Um novo construtor <code>institutional_default()</code> retorna o conjunto
+completo de capacidades da Fase 2 mais esses dois bits e <code>RELAY</code>. Nos normais
+anunciam <code>phase2_default()</code> que nao inclui flags institucionais. Testes de
+roundtrip de serializacao verificam que os novos bits sobrevivem a codificacao
+MessagePack.</p>
+<p><strong>Tipos de busca</strong> (<code>tesseras-core/src/search.rs</code>) — Tres novos tipos de dominio
+para o subsistema de busca:</p>
+<ul>
+<li><code>SearchFilters</code> — parametros de consulta: <code>memory_type</code>, <code>visibility</code>,
+<code>language</code>, <code>date_range</code>, <code>geo</code> (bounding box), <code>page</code>, <code>page_size</code></li>
+<li><code>SearchHit</code> — um resultado individual: hash do conteudo mais um
+<code>MetadataExcerpt</code> (titulo, descricao, tipo de memoria, data de criacao,
+visibilidade, idioma, tags)</li>
+<li><code>GeoFilter</code> — bounding box com <code>min_lat</code>, <code>max_lat</code>, <code>min_lon</code>, <code>max_lon</code> para
+consultas espaciais</li>
+</ul>
+<p>Todos os tipos derivam <code>Serialize</code>/<code>Deserialize</code> para transporte e
+<code>Clone</code>/<code>Debug</code> para diagnostico.</p>
+<p><strong>Configuracao institucional do daemon</strong> (<code>tesd/src/config.rs</code>) — Uma nova secao
+<code>[institutional]</code> no TOML com <code>domain</code> (o dominio DNS a verificar),
+<code>pledge_bytes</code> (compromisso de armazenamento em bytes) e <code>search_enabled</code>
+(toggle para o indice FTS5). O metodo <code>to_dht_config()</code> agora define
+<code>Capabilities::institutional_default()</code> quando a configuracao institucional esta
+presente, para que nos institucionais anunciem os bits de capacidade corretos em
+respostas Pong.</p>
+<p><strong>Verificacao DNS TXT</strong> (<code>tesd/src/institutional.rs</code>) — Resolucao DNS assincrona
+usando <code>hickory-resolver</code> para verificar identidade institucional. O daemon
+consulta registros TXT em <code>_tesseras.&lt;dominio&gt;</code> e analisa campos chave-valor:
+<code>v</code> (versao), <code>node</code> (node ID em hexadecimal) e <code>pledge</code> (compromisso de
+armazenamento em bytes). A verificacao checa:</p>
+<ol>
+<li>Um registro TXT existe em <code>_tesseras.&lt;dominio&gt;</code></li>
+<li>O campo <code>node</code> corresponde ao node ID do proprio daemon</li>
+<li>O campo <code>pledge</code> esta presente e e valido</li>
+</ol>
+<p>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.</p>
+<p><strong>Comando CLI de setup</strong> (<code>tesseras-cli/src/institutional.rs</code>) — Um novo
+subcomando <code>institutional setup</code> que guia operadores pelo onboarding:</p>
+<ol>
+<li>Le a identidade do no a partir do diretorio de dados</li>
+<li>Solicita nome de dominio e tamanho do pledge</li>
+<li>Gera o registro DNS TXT exato a adicionar:
+<code>v=tesseras1 node=&lt;hex&gt; pledge=&lt;bytes&gt;</code></li>
+<li>Escreve a secao institucional no arquivo de configuracao do daemon</li>
+<li>Imprime os proximos passos: adicionar o registro TXT, reiniciar o daemon</li>
+</ol>
+<p><strong>Indice de busca SQLite</strong> (<code>tesseras-storage</code>) — Uma migracao
+(<code>003_institutional.sql</code>) que cria tres estruturas:</p>
+<ul>
+<li><code>search_content</code> — uma tabela virtual FTS5 para busca full-text sobre
+metadados de tesseras (titulo, descricao, criador, tags, idioma)</li>
+<li><code>geo_index</code> — uma tabela virtual R-tree para consultas espaciais de bounding
+box sobre latitude/longitude</li>
+<li><code>geo_map</code> — uma tabela de mapeamento ligando IDs de linhas do R-tree a hashes
+de conteudo</li>
+</ul>
+<p>O adaptador <code>SqliteSearchIndex</code> implementa o port trait <code>SearchIndex</code> com
+<code>index_tessera()</code> (inserir/atualizar) e <code>search()</code> (consultar com filtros).
+Consultas FTS5 suportam busca em linguagem natural; consultas geo usam
+<code>INTERSECT</code> do R-tree para lookups de bounding box. Resultados sao ranqueados
+por score de relevancia do FTS5.</p>
+<p>A migracao tambem adiciona uma coluna <code>is_institutional</code> a tabela <code>reciprocity</code>,
+tratada de forma idempotente via checagens <code>pragma_table_info</code> (o
+<code>ALTER TABLE ADD COLUMN</code> do SQLite nao tem <code>IF NOT EXISTS</code>).</p>
+<p><strong>Bypass de reciprocidade</strong> (<code>tesseras-replication/src/service.rs</code>) — Nos
+institucionais sao isentos de checagens de reciprocidade. Quando
+<code>receive_fragment()</code> 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.</p>
+<p><strong>Restricao de diversidade por tipo de no</strong>
+(<code>tesseras-replication/src/distributor.rs</code>) — Uma nova funcao
+<code>apply_institutional_diversity()</code> limita quantas replicas de uma unica tessera
+podem ir para nos institucionais. O limite e <code>ceil(fator_replicacao / 3.5)</code> —
+com o padrao <code>r=7</code>, 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.</p>
+<p><strong>Extensoes de mensagens DHT</strong> (<code>tesseras-dht/src/message.rs</code>) — Duas novas
+variantes de mensagem:</p>
+<table><thead><tr><th>Mensagem</th><th>Proposito</th></tr></thead><tbody>
+<tr><td><code>Search</code></td><td>Cliente envia string de consulta, filtros e numero da pagina</td></tr>
+<tr><td><code>SearchResult</code></td><td>No institucional responde com resultados e contagem total</td></tr>
+</tbody></table>
+<p>A funcao <code>encode()</code> foi trocada de serializacao MessagePack posicional para
+nomeada (<code>rmp_serde::to_vec_named</code>) para lidar corretamente com campos opcionais
+de <code>SearchFilters</code> — a codificacao posicional quebra quando
+<code>skip_serializing_if</code> omite campos.</p>
+<p><strong>Metricas Prometheus</strong> (<code>tesd/src/metrics.rs</code>) — Oito metricas especificas
+institucionais:</p>
+<ul>
+<li><code>tesseras_institutional_pledge_bytes</code> — compromisso de armazenamento
+configurado</li>
+<li><code>tesseras_institutional_stored_bytes</code> — bytes realmente armazenados</li>
+<li><code>tesseras_institutional_pledge_utilization_ratio</code> — razao armazenado/prometido</li>
+<li><code>tesseras_institutional_peers_served</code> — peers unicos que receberam fragmentos</li>
+<li><code>tesseras_institutional_search_index_total</code> — tesseras no indice de busca</li>
+<li><code>tesseras_institutional_search_queries_total</code> — consultas de busca recebidas</li>
+<li><code>tesseras_institutional_dns_verification_status</code> — 1 se verificado por DNS, 0
+caso contrario</li>
+<li><code>tesseras_institutional_dns_verification_last</code> — timestamp Unix da ultima
+verificacao</li>
+</ul>
+<p><strong>Testes de integracao</strong> — Dois testes em
+<code>tesseras-replication/tests/integration.rs</code>:</p>
+<ul>
+<li><code>institutional_peer_bypasses_reciprocity</code> — 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</li>
+<li><code>institutional_node_accepts_fragment_despite_deficit</code> — teste async completo
+usando <code>ReplicationService</code> com DHT, fragment store, reciprocity ledger e blob
+store mockados: envia um fragmento de um remetente institucional e verifica
+que e aceito</li>
+</ul>
+<p>322 testes passam em todo o workspace. Clippy limpo com <code>-D warnings</code>.</p>
+<h2 id="decisoes-de-arquitetura">Decisoes de arquitetura</h2>
+<ul>
+<li><strong>DNS TXT ao inves de PKI ou blockchain</strong>: 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.</li>
+<li><strong>Degradacao graciosa em falha DNS</strong>: 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.</li>
+<li><strong>Limite de diversidade em <code>ceil(r / 3.5)</code></strong>: com <code>r=7</code>, 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.</li>
+<li><strong>Codificacao MessagePack nomeada</strong>: 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.</li>
+<li><strong>Isencao de reciprocidade ao inves de concessao de creditos</strong>: 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.</li>
+<li><strong>FTS5 + R-tree no SQLite</strong>: 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.</li>
+</ul>
+<h2 id="o-que-vem-a-seguir">O que vem a seguir</h2>
+<ul>
+<li><strong>Fase 4 continuacao</strong> — deduplicacao de armazenamento (armazenamento
+enderecavel por conteudo com BLAKE3), auditorias de seguranca, empacotamento
+para OS (Alpine, Arch, Debian, OpenBSD, FreeBSD)</li>
+<li><strong>Fase 5: Exploracao e Cultura</strong> — 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</li>
+</ul>
+<p>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.</p>
+
+</article>
+
+ </main>
+
+ <footer>
+ <p>&copy; 2026 Tesseras Project. <a href="/atom.xml">News Feed</a> · <a href="https://git.sr.ht/~ijanc/tesseras">Source</a></p>
+ </footer>
+</body>
+</html>
diff --git a/pt-br/news/phase4-institutional-onboarding/index.html.gz b/pt-br/news/phase4-institutional-onboarding/index.html.gz
new file mode 100644
index 0000000..8d67e91
--- /dev/null
+++ b/pt-br/news/phase4-institutional-onboarding/index.html.gz
Binary files differ