🎨 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:
| Eixo | Manifestação em UX |
|---|---|
| Biológico | A 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. |
| Fractal | O 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ágico | Devoramos 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):
- 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).
- 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.
- Pragmatismo de Hardware (
no_stdFirst) → 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). - 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).
| Token | Hex | RGB | Significado operacional |
|---|---|---|---|
--membrana | #1A6F5C | 26, 111, 92 | Verde-tucano profundo. Membrana saudável — barreira Bounded Context íntegra, nó conectado à malha. |
--correnteza | #3FA796 | 63, 167, 150 | Verde-água claro. Fluxo de CausalBlock na Correnteza (WAL, Prolly Tree). Movimento contínuo, sem atrito. |
--algedonia-dor | #C0392B | 192, 57, 43 | Vermelho-terra. Sinal de dor algedônica: XDP saturado, temperatura alta, saturação de memória, PoW falho. |
--algedonia-prazer | #D4A017 | 212, 160, 23 | Dourado-mel. Sinal de prazer algedônico: receipt validado, lote liquidado, peer autenticado. |
--manguezal | #5D4E8F | 93, 78, 143 | Roxo-cripta. Quarentena / MacrophageVM — pacote suspeito em análise, dado em apoptose. |
--oceano | #1B3A5C | 27, 58, 92 | Azul-profundeza. Cold storage / Oceano — dado em Maturidade Causal alta, $\Delta C \to 0$. |
--nascente | #E8F4F0 | 232, 244, 240 | Verde-claro quase branco. Nascente / ingestão hot-path — dado chegando, ainda em ring buffer. |
--ceu | #F4F1E8 | 244, 241, 232 | Off-white papiro. Fundo canônico da documentação e do background do CLI em modo claro. |
--tinta | #2B2A28 | 43, 42, 40 | Carvão. Texto primário sobre --ceu. Nunca use #000 puro. |
--sombra | #8C8478 | 140, 132, 120 | Argila. Texto secundário / bordas / divisores sobre --ceu. |
Convenção de uso: use uma cor algedônica por tela. Misturar
--algedonia-dore--algedonia-prazerno 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
| Camada | Fonte canônica | Por 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 customizada | Para 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=14nohelixou 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:
- Membrana (Bounded Contexts) — ícone quadrado com borda dupla
representando permeabilidade seletiva. Cor base:
--membrana. - Fluxo (CausalBlock, plasmídeo) — seta orgânica com curvatura
fractal. Cor base:
--correnteza. - 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:
- Orientar o operador na próxima ação concreta.
- Contextualizar a mensagem dentro da metáfora biológica.
- 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 logs | Emoji 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 emcrates/api/.... - Modo
--cbor(interop binária): receptor de stream opaco para outros nós. Veja WASI-PAEBIRU ABI. - Sem
--quiet/--verbosebinários: use--log-level trace|debug|info|warn|erroralinhado comRUST_LOG.
4.3 Códigos de saída
| Código | Significado | Categoria |
|---|---|---|
0 | Sucesso. Receipt emitido quando aplicável. | OK |
1 | Erro genérico do operador (argumento inválido, permissão negada). | Usage |
2 | Erro de configuração (PAEBIRU_* ausente ou inválida). | Config |
3 | Porta/endpoint em uso. | Network |
4 | Receipt mal-assinado, plasmídeo em quarentena. | Security |
5 | Veto Algedônico disparado — saúde do nó comprometida. | Algedonic |
6 | Falha de Maturidade Causal (DVV não convergiu em janela Langevin). | Causal |
64 | Erro de E/S inesperado. | System |
65 | Bug 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+tabcicla painéis;qquita;?mostra ajuda;rforça refresh;j/krolam 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 --humanse 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:
| Conceito | Glifo Nerd Font | Glifo 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ônico | Tipo | Unidade | Labels obrigatórios |
|---|---|---|---|
paebiru_kernel_pow_nonces_total | counter | 1 | outcome (accept/reject) |
paebiru_xdp_packets_dropped_total | counter | 1 | reason |
paebiru_capiba_block_maturity | gauge | 1 | stage (nascente/correnteza/…) |
paebiru_landauer_ledger_micro_joules | counter | µJ | gate (1-5) |
paebiru_algedonic_signal | gauge | 1 | scale (1-7) |
paebiru_mesh_peers | gauge | 1 | state (healthy/degraded/quarantine) |
paebiru_dvv_convergence_seconds | histogram | s | — |
Regras:
- Unidades SI em minúsculas (
seconds,bytes,joules). - Sem prefixos decimais ambíguos: use
micro_joules, nãomicrojoulesnemuJ(reservado a humanos). - Labels de baixa cardinalidade apenas. PeerID vai em log, não em label (cardinality explosion).
- Nomes com pontos são proibidos —
paebiru.*em vez depaebiru...
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:
- Bit Físico — XDP, NIC, IRQ, jitter de relógio.
- Neurônio LIF — spikes/segundo por camada SNN, energy budget.
- Função WASM — throughput de plasmídeo, falhas de MacrophageVM.
- Plasmídeo — fila, latência de receipt, custo em µJ por gate.
- Nó ABAPORU — BDI, intenções, crenças, desejo, termostato.
LocalSyncDomain— DVV, Maturidade Causal, Pororoca Causal.- 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 comZ),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, nuncahttps://…). - 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.mdpai. - Tabelas têm cabeçalho repetido em
theadpara que o leitor de tela anuncie o contexto. - Imagens têm
alttext descritivo; imagens puramente decorativas usamalt="". - 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-prazersobre--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 emdocs/theme/index.hbs—default_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
--humanaceita--no-color/NO_COLOR=1para 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ão | Por quê é rejeição automática |
|---|---|
| “Wizard” genérico sem contexto biológico | Forç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 crudo | Tela densa + tooltips = decoreba. Em vez disso, gere uma página de docs ancorada (/ref/cli/plasmid-publish.md). |
| Mensagens de erro em stack trace | Expor Rust panic ao operador final é falha de membrana — queime a membrana antes de propagar. |
| Cores de marca sem significado | Verde/vermelho só fazem sentido com algedonia-dor/prazer. Não use verde para “sucesso genérico”. |
| Loading spinner sem timeout visível | O operador precisa saber se vai esperar 50 ms ou 50 s. Mostre ETA ou marque o tempo decorrido. |
| Configuração em 5 formatos diferentes | paebiru.toml (canônico) cobre 100 % dos casos. YAML/INI/.env só com RFC que justifique. |
| CLI em pt-BR com mensagens internas em inglês | Toda mensagem humanizada deve estar em pt-BR (ou seguir i18n). Mistura é falha de membrana i18n. |
| Logs com emoji decorativo | Logs são stream de máquina, não de gente. Use glifos fallback (§4.5) só se forem semanticamente codificados. |
Dashboard sem scale definido | As 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/paebirucom tagdesign/colorsantes de mergir. - A nova fonte está em
docs/theme/paebiru.csscom 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-checke respeita o Dicionário?
9.2 Versionamento
- Mudanças neste livro de estilo são versionadas em
docs/src/brand/style-guide.mde propagadas aoAGENTS.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
- Iconografia — detalhamento das famílias de ícones e glifos.
- Wallpapers — os ativos visuais versionados.
- Dicionário canônico — terminologia usada neste livro de estilo.
- Glossário de UX (internacional) — referência WCAG 2.2 para acessibilidade.
docs/theme/paebiru.css— a implementação CSS canônica da tipografia e da textura de fundo.docs/theme/index.hbs— o template do mdBook comtheme-coloreprefers-color-scheme.- Manifesto — a base filosófica (7 teses) que inspira os três eixos estéticos.
- Realidade fractal — as 7 escalas que organizam dashboards e TUI.
- i18n — hierarquia de idiomas e glossário.
- Escrevendo documentação — convenções vinculantes para a documentação transversal.