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

🎨 Identidade Visual — Livro de Estilo (UX)

A membrana estética do PAEBIRU: o conjunto de regras que garante que toda superfície — CLI, TUI, dashboards, site de documentação, identidade impressa, arte em mídias sociais — fale a mesma língua biológica, fractal e antropofágica do projeto.

Este documento é vinculante para qualquer artefato visual ou textual produzido em nome do PAEBIRU (documentação, screenshots, slides, posts, capas, ícones, mensagens de UI). Em caso de conflito com preferências pessoais, o livro de estilo vence. Em caso de conflito com outro documento, vence a hierarquia canônica do AGENTS.md: dictionary.md > este livro de estilo

RFCs Standards Track.


1. Filosofia & Princípios

1.1 Os três eixos estéticos

Toda decisão de UX no PAEBIRU é atravessada por três eixos co-derivados da Realidade fractal:

EixoManifestação em UX
BiológicoA interface imita membranas, metabolismo, sinais de dor/prazer (algedonia), homeostasia. Exemplo: um sensor que vibra verde quando saudável, esmaece para tons frios sob estresse, e pisca vermelho sob Veto Algedônico.
FractalO mesmo padrão ingerir → metabolizar → excretar aparece em todas as escalas: do pixel ao log de auditoria. Exemplo: o mesmo ícone de plasmídeo aparece em CLI (1 linha), TUI (caixa) e dashboard (página inteira) — apenas o nível de zoom muda.
AntropofágicoDevoramos referências (CLI Unix, dashboards Grafana, design system Iosevka) e devolvemos o que sobrou em forma de receipt rastreável. Exemplo: se copiamos uma convenção do cargo, registramos a fonte no AGENTS.md e a datamos.

1.2 Conexão com os 4 Dogmas

Os dogmas da RFC 050 têm tradução direta em UX. Tratar como restrição arquitetural (recusa automática em revisão):

  1. Isolamento Absoluto (Hexagonal) → Cada Bounded Context tem sua própria área visual (TUI tem painéis próprios; dashboard separa Kernel, Biologia, Economia, C.A.P.I.B.A.). Nada cruza a membrana sem um receipt visível (timestamp + assinatura).
  2. GALS & Actor-like State → Toda tela tem estado local observável (loading, idle, error) e nunca compartilha estado mutável com outra tela via canal implícito. Use eventos assíncronos, publique-os.
  3. Pragmatismo de Hardware (no_std First) → A CLI deve rodar em terminais de 80×24 (TTY legado, terminais seriais de MuleNode). Tabelas, cores e layouts que não cabem em 80×24 são rejeição automática. Prompts devem ser ASCII-puro quando possível (sem glifos Unicode exóticos em entradas de comando).
  4. Interoperabilidade Blindada → Logs binários opacos (CBOR) e saída humana (texto) e TUI rica são tratados como três vistas do mesmo receipt. Nada de “modo debug” escondido — é cidadão de primeira classe.

1.3 Soberania visual

  • Zero-Trust também é visual: nenhuma fonte externa (CDN de fontes, Google Analytics, tracker de marketing) deve vazar dados do operador. O site paebiru.org é self-hosted, sem CDN de telemetria.
  • A textura de fundo da documentação (papiro antropofágico) é asset versionado, não CDN externa.
  • Fontes canônicas (Iosevka Nerd Font) carregam via jsDelivr com fallback local documentado em docs/theme/paebiru.css.

2. Identidade Visual

2.1 Paleta de cores (Papiro Antropofágico)

A paleta é biológica-semântica: cada cor carrega um significado operacional, não é decorativa. Reutilize-a em CLI (256-color / 24-bit truecolor), TUI (ratatui), dashboards (Grafana) e site (CSS).

TokenHexRGBSignificado operacional
--membrana#1A6F5C26, 111, 92Verde-tucano profundo. Membrana saudável — barreira Bounded Context íntegra, nó conectado à malha.
--correnteza#3FA79663, 167, 150Verde-água claro. Fluxo de CausalBlock na Correnteza (WAL, Prolly Tree). Movimento contínuo, sem atrito.
--algedonia-dor#C0392B192, 57, 43Vermelho-terra. Sinal de dor algedônica: XDP saturado, temperatura alta, saturação de memória, PoW falho.
--algedonia-prazer#D4A017212, 160, 23Dourado-mel. Sinal de prazer algedônico: receipt validado, lote liquidado, peer autenticado.
--manguezal#5D4E8F93, 78, 143Roxo-cripta. Quarentena / MacrophageVM — pacote suspeito em análise, dado em apoptose.
--oceano#1B3A5C27, 58, 92Azul-profundeza. Cold storage / Oceano — dado em Maturidade Causal alta, $\Delta C \to 0$.
--nascente#E8F4F0232, 244, 240Verde-claro quase branco. Nascente / ingestão hot-path — dado chegando, ainda em ring buffer.
--ceu#F4F1E8244, 241, 232Off-white papiro. Fundo canônico da documentação e do background do CLI em modo claro.
--tinta#2B2A2843, 42, 40Carvão. Texto primário sobre --ceu. Nunca use #000 puro.
--sombra#8C8478140, 132, 120Argila. Texto secundário / bordas / divisores sobre --ceu.

Convenção de uso: use uma cor algedônica por tela. Misturar --algedonia-dor e --algedonia-prazer no mesmo componente é sintoma de falsa dicotomia — o operador precisa saber se está saudável ou não, não ambos ao mesmo tempo.

2.2 Tipografia

CamadaFonte canônicaPor quê
Mono (código, CLI, logs)Iosevka Nerd Font Extended (Light 300, Regular 400, Medium 500)Largura expandida, glifos Nerd Font para ícones inline, distingue 0/O e 1/l/I sem ambiguidade. Carrega via docs/theme/paebiru.css.
Sans (UI de documentação)Open Sans (fallback da Iosevka no site)Legibilidade em parágrafos longos. Iosevka no peso 300 (Light) assume o papel de corpo no site.
Display (capas, slides, wallpaper)Iosevka Slab ou tipografia serifada antropofágica customizadaPara títulos de capítulo, capas de RFCs, wallpaper. Sob licença compatível com AGPL-3.0.

Regras:

  • Tamanho base: 16 px no site (font-size: 1rem), 14 px no CLI (-C document.body.font_size=14 no helix ou similar).
  • Peso: use Regular (400) para corpo; Medium (500) para destaques; Light (300) para citações longas. Bold (700+) é proibido em texto corrido — reserve para cabeçalhos de tabela e labels de campo.
  • Glifos Nerd Font ( , , , ) só aparecem em TUI e em logs estruturados, nunca em mensagens de erro humanizadas (onde podem quebrar em terminais sem a fonte).
  • Sem itálico decorativo: itálico é reservado para termos em inglês, citations e nomes científicos (ex: Maturidade Causal).

2.3 Iconografia

Os ícones do PAEBIRU seguem três famílias com papéis fixos — não misture:

  1. Membrana (Bounded Contexts) — ícone quadrado com borda dupla representando permeabilidade seletiva. Cor base: --membrana.
  2. Fluxo (CausalBlock, plasmídeo) — seta orgânica com curvatura fractal. Cor base: --correnteza.
  3. Algedonia (sensor) — bulbo cromático com saturação variável (verde → âmbar → vermelho). Animação: pulsa 1 Hz em --correnteza, 4 Hz em --algedonia-dor.

Em ambientes onde ícones não são possíveis (TTY 80×24, terminais seriais LoRa), use glifos Unicode 24-BIT bem definidos como fallback: (membrana), (fluxo), (algedonia-dor), (algedonia-prazer), (manguezal), (oceano), (nascente). Veja tabela em §4.

2.4 Logomarca

A logomarca canônica é paebiru-logo-1024.png. Respeite a zona de respiro mínima de 1× a altura do glifo “p” ao redor. Não distorça proporções, não troque cores, não sobreponha fundos de baixo contraste. Para variantes em theme-color HTML (<meta name="theme-color">), use #ffffff no modo claro e #1a1c22 no modo escuro (já configurado em docs/theme/index.hbs).


3. Tom de Voz & Linguagem

3.1 Princípios editoriais

A voz do PAEBIRU é técnica, calorosa e direta. Cada palavra deve servir a um dos três objetivos:

  1. Orientar o operador na próxima ação concreta.
  2. Contextualizar a mensagem dentro da metáfora biológica.
  3. Honrar o vocabulário do Dicionário.
❌ Evite✅ Prefira
Jargão genérico (“erro interno”, “falha”)Nome do componente + causa + caminho de remediação (link ao runbook).
Hedging (“talvez”, “pode ser que”)Estado observável: “XDP saturado em 92 %” (não “talvez a rede esteja ruim”).
Pessoa em 3ª pessoa (“o usuário deve…”)2ª pessoa ou voz passiva: “Execute paebiru peer list” / “Espera-se receipt em ≤ 200 ms”.
Emoji decorativo em logsEmoji só em mensagens humanizadas (CLI interativa, docs) — nunca em logs estruturados.
Tom apologético (“desculpe”, “infelizmente”)Reconheça o estado e siga em frente: “Receipt mal-assinado; pacote descartado.”

3.2 Vocabulário canônico (pt-BR)

Use sempre a forma canônica do Dicionário. Em caso de dúvida, a forma errada vira anti-padrão:

❌ Forma proscrita✅ Forma canônica (dictionary.md)
“blockchain” / “block chain”Não use — PAEBIRU é protocolo-cérebro, não blockchain.
“consenso”“governança” / “Maturidade Causal” / “DVV”, conforme contexto.
“minerador” / “validador”“agente ABAPORU” / “nó”, conforme contexto.
“smart contract”“plasmídeo” (DSL → WASM).
“transação”“recibo” / “receipt soberano” / “interação” (DRE).
“Island mode” / “modo ilha inglês”“Modo Ilha” / “Ilha de autonomia” (nunca o inglês em pt-BR).
“consensus” misturado com texto pt“consenso” em pt-BR (ou troque pelo termo canônico).
Termo genérico “rede”“malha” (mesh). “rede” só se for rede neural/biológica.
“tempo real” / “real-time”“Maturidade Causal” / “tempo Langevin” / “tempo causal” — NUNCA “tempo real” no sentido cronológico.

3.3 Estrutura de mensagens de erro

Toda mensagem de erro em qualquer superfície (CLI, TUI, API, log) deve seguir a tríade Causa → Consequência → Caminho:

[COMPONENTE] <causa observável em uma linha>.
↳ Consequência: <o que o sistema fez em resposta>.
↳ Caminho:      <próxima ação ou link ao runbook>.

Exemplo bom (TUI do paebiru-node):

[KERNEL]  Backpressure no GossipSub fanout (fila: 9 124 / 8 192).
↳ Consequência: Publicação de plasmídeo enfileirada; receipt atrasado ~3 s.
↳ Caminho:      R007 · Saturação XDP — `paebiru peer prune --stale 30m`.

Exemplo ruim:

Erro: algo deu errado. Tente novamente.

3.4 Mensagens de sucesso

Sucesso também comunica. Use a forma <verbo no particípio> + receipt>:

[CAPIBA]  CausalBlock `b3:9f…2a` indexado no Manguezal.
           Receipt: dr://2026-06-07T11:42Z#7c1f   maturidade=4   µJ=12.4

O receipt sempre carrega: URI do DRE, maturidade causal (numérica inteira ≥ 0), e custo no LandauerLedger (µJ).


4. CLI & TUI

4.1 Estrutura de comando

A paebiru-cli (Forge CLI, em apps/cli) usa clap e segue a convenção <verbo> <substantivo> [--flags].

Regras:

  • Verbos canônicos (use exatamente estes): init, start, stop, status, list, show, add, remove, prune, rotate, quench (Veto Algedônico explícito), migrate (Oceano), flash (HAL).
  • Substantivos canônicos: node, peer, plasmid, receipt, ledger, block, key, attestation, quarantine, mesh.
  • Sub-comandos aninhados apenas quando o substantivo tem ciclo de vida próprio: paebiru plasmid build, paebiru plasmid test, paebiru plasmid publish.

4.2 Saída padrão (stdout)

  • Modo --human (default em TTY, off em pipe): cores, tabelas ASCII, spinner durante ingestão.
  • Modo --json (default em pipe/CI): uma linha JSON por evento, esquema em crates/api/....
  • Modo --cbor (interop binária): receptor de stream opaco para outros nós. Veja WASI-PAEBIRU ABI.
  • Sem --quiet/--verbose binários: use --log-level trace|debug|info|warn|error alinhado com RUST_LOG.

4.3 Códigos de saída

CódigoSignificadoCategoria
0Sucesso. Receipt emitido quando aplicável.OK
1Erro genérico do operador (argumento inválido, permissão negada).Usage
2Erro de configuração (PAEBIRU_* ausente ou inválida).Config
3Porta/endpoint em uso.Network
4Receipt mal-assinado, plasmídeo em quarentena.Security
5Veto Algedônico disparado — saúde do nó comprometida.Algedonic
6Falha de Maturidade Causal (DVV não convergiu em janela Langevin).Causal
64Erro de E/S inesperado.System
65Bug interno do PAEBIRU (reporte em paebiru/paebiru com paebiru bug-report).Internal

Convenção: códigos 1-6 são reservados a causas semanticamente distintas (se uma operação pode falhar por mais de uma razão, o operador precisa de qual é qual). Códigos 64+ seguem o padrão <sysexits.h>.

4.4 TUI (ratatui)

A TUI do paebiru dashboard (apps/cli) ocupa o terminal inteiro em modo claro/escuro. Princípios:

  • 3 painéis fixos + 1 barra de status algedônica:
    • Esquerda: topologia de malha (nós + arestas, cores por saúde).
    • Centro: fila de plasmídeos + receipts em trânsito.
    • Direita: telemetria do nó local (CPU, memória, termostato, XDP).
    • Rodapé: barra algedônica global (verde → âmbar → vermelho).
  • Navegação: tab/shift+tab cicla painéis; q quita; ? mostra ajuda; r força refresh; j/k rolam listas.
  • Frescor mínimo: 1 Hz (modo fino) ou 0.1 Hz (modo grosso), controlado por PAEBIRU_LAYER9_FINE_RESOLUTION_MS / PAEBIRU_LAYER9_COARSE_RESOLUTION_MS.
  • TTY 80×24 é o piso absoluto: degrade para paebiru status --human se a TUI não couber.

4.5 Fallback de glifos

Quando a fonte Nerd Font não está disponível, sempre degrade para glifos Unicode 24-BIT imprimíveis em qualquer encoding moderno:

ConceitoGlifo Nerd FontGlifo Unicode fallback
Membrana``
Fluxo (correnteza)``
Algedonia-dor``
Algedonia-prazer``
Manguezal (quarentena)``
Oceano``
Nascente``
Plasmídeo``
Receipt (soberano)``
Veto Algedônico``

A ordem das colunas é vinculante: documento e CLI usam o mesmo glifo para o mesmo conceito.


5. Observabilidade & Dashboards

5.1 Métricas Prometheus (canônicas)

Nome canônicoTipoUnidadeLabels obrigatórios
paebiru_kernel_pow_nonces_totalcounter1outcome (accept/reject)
paebiru_xdp_packets_dropped_totalcounter1reason
paebiru_capiba_block_maturitygauge1stage (nascente/correnteza/…)
paebiru_landauer_ledger_micro_joulescounterµJgate (1-5)
paebiru_algedonic_signalgauge1scale (1-7)
paebiru_mesh_peersgauge1state (healthy/degraded/quarantine)
paebiru_dvv_convergence_secondshistograms

Regras:

  • Unidades SI em minúsculas (seconds, bytes, joules).
  • Sem prefixos decimais ambíguos: use micro_joules, não microjoules nem uJ (reservado a humanos).
  • Labels de baixa cardinalidade apenas. PeerID vai em log, não em label (cardinality explosion).
  • Nomes com pontos são proibidospaebiru.* em vez de paebiru...

5.2 Painéis Grafana (canônicos)

A coleção paebiru-dashboards (versionada em observability/grafana/) tem sete dashboards canônicos, um por escala fractal:

  1. Bit Físico — XDP, NIC, IRQ, jitter de relógio.
  2. Neurônio LIF — spikes/segundo por camada SNN, energy budget.
  3. Função WASM — throughput de plasmídeo, falhas de MacrophageVM.
  4. Plasmídeo — fila, latência de receipt, custo em µJ por gate.
  5. Nó ABAPORU — BDI, intenções, crenças, desejo, termostato.
  6. LocalSyncDomain — DVV, Maturidade Causal, Pororoca Causal.
  7. Malha Global — topologia, peer count, island mode, fork risk.

Cada dashboard tem uma cor de cabeçalho mapeada ao token da paleta (§2.1): Malha Global = --membrana, Plasmídeo = --correnteza, etc.

5.3 Logs estruturados

  • Formato: JSON canônico com tracing-subscriber (campos fixos abaixo).
  • Campos obrigatórios:
    • ts (ISO-8601 com Z),
    • level (trace|debug|info|warn|error),
    • target (caminho do módulo Rust),
    • node_id (BLAKE3 curto, 16 chars),
    • peer_id (opcional, mesmo formato),
    • scale (1-7, escala fractal),
    • receipt_uri (opcional, dr://…).
  • Mensagem humanizada (campo msg) deve respeitar §3.3 (tríade Causa → Consequência → Caminho).

6. Documentação

A documentação segue convenções vinculantes em contributors/writing-docs.md. Resumo das regras de UX documental:

  • Caminhos relativos sempre (./../architecture/kernel.md, nunca https://…).
  • Metadados em comentários HTML (<!-- title: ... -->), nunca YAML frontmatter (mdBook renderiza YAML como texto visível).
  • kebab-case em nomes de arquivo (exceção: rfcNNN_*.md).
  • Emoji no início do capítulo funciona como ícone de seção (🌱 chegando, 🔧 operar, 🛠️ contribuir, 📚 referência, 📜 RFCs, 🎨 visuais). Não introduza emojis novos sem atualizar o SUMMARY.md pai.
  • Tabelas têm cabeçalho repetido em thead para que o leitor de tela anuncie o contexto.
  • Imagens têm alt text descritivo; imagens puramente decorativas usam alt="".
  • Mermaid é a fonte canônica de diagramas (vide §4 de writing-docs.md).

7. Acessibilidade & i18n

7.1 Acessibilidade

  • Contraste mínimo WCAG AA (4.5:1 para corpo, 3:1 para display) para qualquer par cor-texto da paleta. A combinação --algedonia-prazer sobre --ceu é a única abaixo de AA — use-a apenas em destaques de uma palavra sobre fundo branco, nunca em corpo.
  • Modo escuro respeita prefers-color-scheme (já configurado em docs/theme/index.hbsdefault_theme = "rust").
  • Sem informação veiculada apenas por cor: a barra algedônica da TUI tem padrão textual (OK, STRESS, VETO) além da cor. Ícones algedônicos têm glifo distinto ( vs. ).
  • CLI --human aceita --no-color/NO_COLOR=1 para terminais monocromáticos (MuleNode sobre UART).

7.2 Internacionalização

A hierarquia canônica está em contributors/i18n.md. Em adição:

  • Mensagens de UI são extraídas via tr!()/format_message! no crate; chaves em inglês neutro, valores em pt-BR/en-US/es-ES.
  • Termos canônicos do Dicionário NUNCA são traduzidos literalmente — preserva-se a forma de origem (ex: “Plasmídeo” em espanhol segue sendo “Plásmido”, nunca “vector de contrato”).
  • Glifos algedônicos são universais (cores têm mapeamento documentado em cada idioma).

8. Anti-padrões de UX

Sintomas de fronteira mal colocada, análogos ao anti-padrão “Costura” do Dicionário:

❌ Anti-padrãoPor quê é rejeição automática
“Wizard” genérico sem contexto biológicoForça o usuário a aprender um metalinguagem que não reaproveita. Use a metáfora: “Semente → Plântula → Árvore” para setup.
Tooltips em JSON crudoTela densa + tooltips = decoreba. Em vez disso, gere uma página de docs ancorada (/ref/cli/plasmid-publish.md).
Mensagens de erro em stack traceExpor Rust panic ao operador final é falha de membrana — queime a membrana antes de propagar.
Cores de marca sem significadoVerde/vermelho só fazem sentido com algedonia-dor/prazer. Não use verde para “sucesso genérico”.
Loading spinner sem timeout visívelO operador precisa saber se vai esperar 50 ms ou 50 s. Mostre ETA ou marque o tempo decorrido.
Configuração em 5 formatos diferentespaebiru.toml (canônico) cobre 100 % dos casos. YAML/INI/.env só com RFC que justifique.
CLI em pt-BR com mensagens internas em inglêsToda mensagem humanizada deve estar em pt-BR (ou seguir i18n). Mistura é falha de membrana i18n.
Logs com emoji decorativoLogs são stream de máquina, não de gente. Use glifos fallback (§4.5) só se forem semanticamente codificados.
Dashboard sem scale definidoAs 7 escalas fractais são a coluna do nosso sistema de coordenadas. Sem scale, a métrica é anárquica.

9. Processo de contribuição

9.1 Checklist antes de abrir PR de UI

  • A nova cor está na paleta (§2.1)? Se não, abra uma issue em paebiru/paebiru com tag design/colors antes de mergir.
  • A nova fonte está em docs/theme/paebiru.css com fallback local?
  • O novo verbo CLI está em §4.1? Caso contrário, proponha adendo ao livro de estilo junto com o PR de código.
  • As mensagens de erro seguem a tríade Causa → Consequência → Caminho ( §3.3)?
  • O glifo algedônico (se aplicável) tem fallback Unicode (§4.5)?
  • Métricas Prometheus seguem a convenção de nomenclatura (§5.1)?
  • O componente TUI degrada em 80×24 (§4.4)?
  • O texto passa em make i18n-check e respeita o Dicionário?

9.2 Versionamento

  • Mudanças neste livro de estilo são versionadas em docs/src/brand/style-guide.md e propagadas ao AGENTS.md §1.4 quando alteram um dogma.
  • Mudanças vinculantes (paleta, glifos, códigos de saída) exigem uma RFC Standards Track nova, com referência cruzada a este documento. Mudanças editoriais (texto, exemplos) entram direto via PR com label design/editorial.

10. Veja também