summaryrefslogtreecommitdiffstats
path: root/pt-br/news/phase2-replication
diff options
context:
space:
mode:
Diffstat (limited to 'pt-br/news/phase2-replication')
-rw-r--r--pt-br/news/phase2-replication/index.html213
-rw-r--r--pt-br/news/phase2-replication/index.html.gzbin4668 -> 0 bytes
2 files changed, 0 insertions, 213 deletions
diff --git a/pt-br/news/phase2-replication/index.html b/pt-br/news/phase2-replication/index.html
deleted file mode 100644
index 40320b8..0000000
--- a/pt-br/news/phase2-replication/index.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!DOCTYPE html>
-<html lang="pt-br">
-<head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Fase 2: Memórias Sobrevivem — Tesseras</title>
- <meta name="description" content="Tesseras agora fragmenta, distribui e repara dados automaticamente pela rede usando codificação de apagamento Reed-Solomon e um livro-razão de reciprocidade bilateral.">
- <!-- Open Graph -->
- <meta property="og:type" content="article">
- <meta property="og:title" content="Fase 2: Memórias Sobrevivem">
- <meta property="og:description" content="Tesseras agora fragmenta, distribui e repara dados automaticamente pela rede usando codificação de apagamento Reed-Solomon e um livro-razão de reciprocidade bilateral.">
- <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 2: Memórias Sobrevivem">
- <meta name="twitter:description" content="Tesseras agora fragmenta, distribui e repara dados automaticamente pela rede usando codificação de apagamento Reed-Solomon e um livro-razão de reciprocidade bilateral.">
- <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;phase2-replication&#x2F;">English</a> | <strong>Português</strong>
-
- </nav>
- </header>
-
- <main>
-
-<article>
- <h2>Fase 2: Memórias Sobrevivem</h2>
- <p class="news-date">2026-02-14</p>
- <p>Uma tessera não está mais presa a uma única máquina. A Fase 2 entrega a camada
-de replicação: os dados são divididos em fragmentos com codificação de
-apagamento, distribuídos entre múltiplos pares e reparados automaticamente
-quando nós ficam offline. Um livro-razão de reciprocidade bilateral garante
-troca justa de armazenamento — sem blockchain, sem tokens.</p>
-<h2 id="o-que-foi-construido">O que foi construído</h2>
-<p><strong>tesseras-core</strong> (atualizado) — Novos tipos de domínio de replicação:
-<code>FragmentPlan</code> (seleciona a camada de fragmentação baseada no tamanho da
-tessera), <code>FragmentId</code> (hash da tessera + índice + contagem de shards +
-checksum), <code>FragmentEnvelope</code> (fragmento com seus metadados para transporte na
-rede), <code>FragmentationTier</code> (Small/Medium/Large), <code>Attestation</code> (prova de que um
-nó possui um fragmento em um dado momento) e <code>ReplicateAck</code> (confirmação de
-recebimento de fragmento). Três novas traits de porta definem os limites
-hexagonais: <code>DhtPort</code> (encontrar pares, replicar fragmentos, solicitar
-atestações, ping), <code>FragmentStore</code> (armazenar/ler/deletar/listar/verificar
-fragmentos) e <code>ReciprocityLedger</code> (registrar trocas de armazenamento, consultar
-saldos, encontrar melhores pares). O tamanho máximo de uma tessera é 1 GB.</p>
-<p><strong>tesseras-crypto</strong> (atualizado) — O <code>ReedSolomonCoder</code> existente agora alimenta
-a codificação de fragmentos. Os dados são divididos em shards, shards de
-paridade são computados, e qualquer combinação de shards de dados pode
-reconstruir o original — desde que o número de shards ausentes não exceda a
-contagem de paridade.</p>
-<p><strong>tesseras-storage</strong> (atualizado) — Dois novos adaptadores:</p>
-<ul>
-<li><code>FsFragmentStore</code> — armazena dados de fragmentos como arquivos em disco
-(<code>{raiz}/{hash_tessera}/{indice:03}.shard</code>) com um índice de metadados SQLite
-rastreando hash da tessera, índice do shard, contagem de shards, checksum e
-tamanho em bytes. A verificação recalcula o hash BLAKE3 e compara com o
-checksum armazenado.</li>
-<li><code>SqliteReciprocityLedger</code> — contabilidade bilateral de armazenamento em
-SQLite. Cada par tem uma linha rastreando bytes armazenados para eles e bytes
-que eles armazenam para nós. A coluna <code>balance</code> é uma coluna gerada
-(<code>bytes_they_store_for_us - bytes_stored_for_them</code>). UPSERT garante incremento
-atômico dos contadores.</li>
-</ul>
-<p>Nova migração (<code>002_replication.sql</code>) adiciona tabelas para fragmentos, planos
-de fragmentação, detentores, mapeamentos detentor-fragmento e saldos de
-reciprocidade.</p>
-<p><strong>tesseras-dht</strong> (atualizado) — Quatro novas variantes de mensagem: <code>Replicate</code>
-(enviar um envelope de fragmento), <code>ReplicateAck</code> (confirmar recebimento),
-<code>AttestRequest</code> (pedir a um nó que prove que possui os fragmentos de uma
-tessera) e <code>AttestResponse</code> (retornar atestação com checksums e timestamp). O
-engine trata essas mensagens em seu loop de despacho.</p>
-<p><strong>tesseras-replication</strong> — O novo crate, com cinco módulos:</p>
-<ul>
-<li>
-<p><em>Codificação de fragmentos</em> (<code>fragment.rs</code>): <code>encode_tessera()</code> seleciona a
-camada de fragmentação baseada no tamanho e então chama a codificação
-Reed-Solomon para as camadas Medium e Large. Três camadas:</p>
-<ul>
-<li><strong>Small</strong> (&lt; 4 MB): replicação do arquivo inteiro para r=7 pares, sem
-codificação de apagamento</li>
-<li><strong>Medium</strong> (4–256 MB): 16 shards de dados + 8 de paridade, distribuídos
-entre r=7 pares</li>
-<li><strong>Large</strong> (≥ 256 MB): 48 shards de dados + 24 de paridade, distribuídos
-entre r=7 pares</li>
-</ul>
-</li>
-<li>
-<p><em>Distribuição</em> (<code>distributor.rs</code>): filtragem de diversidade de sub-rede limita
-pares por sub-rede /24 IPv4 (ou prefixo /48 IPv6) para evitar falhas
-correlacionadas. Se todos os seus fragmentos caírem no mesmo rack, uma única
-queda de energia os elimina.</p>
-</li>
-<li>
-<p><em>Serviço</em> (<code>service.rs</code>): <code>ReplicationService</code> é o orquestrador.
-<code>replicate_tessera()</code> codifica os dados, encontra os pares mais próximos via
-DHT, aplica diversidade de sub-rede e distribui fragmentos em round-robin.
-<code>receive_fragment()</code> valida o checksum BLAKE3, verifica o saldo de
-reciprocidade (rejeita se o déficit do remetente exceder o limite
-configurado), armazena o fragmento e atualiza o livro-razão.
-<code>handle_attestation_request()</code> lista os fragmentos locais e calcula seus
-checksums como prova de posse.</p>
-</li>
-<li>
-<p><em>Reparo</em> (<code>repair.rs</code>): <code>check_tessera_health()</code> solicita atestações dos
-detentores conhecidos, recorre ao ping para nós não responsivos, verifica a
-integridade local dos fragmentos e retorna uma de três ações: <code>Healthy</code>,
-<code>NeedsReplication { deficit }</code> ou <code>CorruptLocal { fragment_index }</code>. O loop de
-reparo roda a cada 24 horas (com 2 horas de jitter) via <code>tokio::select!</code> com
-integração de desligamento.</p>
-</li>
-<li>
-<p><em>Configuração</em> (<code>config.rs</code>): <code>ReplicationConfig</code> com padrões para intervalo
-de reparo (24h), jitter (2h), transferências simultâneas (4), espaço livre
-mínimo (1 GB), tolerância de déficit (256 MB) e limite de armazenamento por
-par (1 GB).</p>
-</li>
-</ul>
-<p><strong>tesd</strong> (atualizado) — O daemon agora abre um banco de dados SQLite
-(<code>db/tesseras.db</code>), executa migrações, cria instâncias de <code>FsFragmentStore</code>,
-<code>SqliteReciprocityLedger</code> e <code>FsBlobStore</code>, envolve o engine DHT em um
-<code>DhtPortAdapter</code>, constrói um <code>ReplicationService</code> e lança o loop de reparo como
-tarefa em segundo plano com desligamento gracioso.</p>
-<p><strong>Testes</strong> — 193 testes em todo o workspace:</p>
-<ul>
-<li>15 testes unitários em tesseras-replication (camadas de codificação de
-fragmentos, validação de checksum, diversidade de sub-rede, verificações de
-saúde do reparo, fluxos de recebimento/replicação do serviço)</li>
-<li>3 testes de integração com armazenamento real (ciclo completo
-codificar→distribuir→receber para tessera média, replicação de arquivo inteiro
-para tessera pequena, rejeição de fragmento adulterado)</li>
-<li>Testes usam SQLite em memória + diretório temporário para fragmentos com mocks
-mockall para DHT e BlobStore</li>
-<li>Zero avisos do clippy, formatação limpa</li>
-</ul>
-<h2 id="decisoes-de-arquitetura">Decisões de arquitetura</h2>
-<ul>
-<li><strong>Fragmentação em três camadas</strong>: arquivos pequenos não precisam de
-codificação de apagamento — o overhead não compensa. Arquivos médios e grandes
-recebem progressivamente mais shards de paridade. Isso evita desperdiçar
-armazenamento em tesseras pequenas enquanto oferece redundância forte para as
-grandes.</li>
-<li><strong>Distribuição por push do dono</strong>: o dono da tessera codifica os fragmentos e
-os envia aos pares, em vez dos pares puxarem. Isso simplifica o protocolo (sem
-fase de negociação) e garante que os fragmentos são distribuídos
-imediatamente.</li>
-<li><strong>Reciprocidade bilateral sem consenso</strong>: cada nó rastreia seu próprio saldo
-com cada par localmente. Sem livro-razão global, sem token, sem blockchain. Se
-o par A armazena 500 MB para o par B, o par B deveria armazenar
-aproximadamente 500 MB para o par A. Free riders perdem redundância
-gradualmente — seus fragmentos são despriorizados para reparo, mas nunca
-deletados.</li>
-<li><strong>Diversidade de sub-rede</strong>: os fragmentos são espalhados por diferentes
-sub-redes para sobreviver a falhas correlacionadas. Uma queda de datacenter
-não deveria eliminar todas as cópias de uma tessera.</li>
-<li><strong>Verificações de saúde por atestação primeiro</strong>: o loop de reparo pede aos
-detentores que provem posse (atestação com checksums) antes de declarar uma
-tessera degradada. Apenas quando a atestação falha é que ele recorre a um
-simples ping. Isso detecta corrupção silenciosa de dados, não apenas partida
-de nós.</li>
-</ul>
-<h2 id="o-que-vem-a-seguir">O que vem a seguir</h2>
-<ul>
-<li><strong>Fase 3: API e Apps</strong> — App Flutter mobile/desktop via flutter_rust_bridge,
-API GraphQL (async-graphql), nó WASM no navegador</li>
-<li><strong>Fase 4: Resiliência e Escala</strong> — Assinaturas pós-quânticas ML-DSA, travessia
-avançada de NAT, Compartilhamento de Segredo de Shamir para herdeiros,
-empacotamento para Alpine/Arch/Debian/FreeBSD/OpenBSD, CI no SourceHut</li>
-<li><strong>Fase 5: Exploração e Cultura</strong> — navegador público de tesseras, curadoria
-institucional, integração genealógica, exportação para mídia física</li>
-</ul>
-<p>Os nós conseguem se encontrar e manter vivas as memórias uns dos outros. Em
-seguida, damos às pessoas uma forma de segurar suas memórias nas mãos.</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/phase2-replication/index.html.gz b/pt-br/news/phase2-replication/index.html.gz
deleted file mode 100644
index 7658f2c..0000000
--- a/pt-br/news/phase2-replication/index.html.gz
+++ /dev/null
Binary files differ