🛡️ Qualidade — 4 Dogmas + 4 Esteiras
A Muralha da Qualidade do PAEBIRU tem 4 dogmas (o que é inegociável) e 4 esteiras (como o gate é executado em CI). Nenhuma regressão chega a
mainsem passar por todas as 4.
flowchart TB
A[PR aberto] --> E1[Esteira 1<br/>Conformidade]
E1 -->|passa| E2[Esteira 2<br/>GALS & Domínio]
E2 -->|passa| E3[Esteira 3<br/>Verificação Formal]
E3 -->|passa| E4[Esteira 4<br/>Embarcada]
E4 -->|passa| M[main]
E1 -->|falha| X[bloqueado]
E2 -->|falha| X
E3 -->|falha| X
E4 -->|falha| X
Os 4 Dogmas Inquebráveis
Originais do AGENTS.md §4, ratificados como princípio de revisão. Um PR que viola qualquer dogma é rejeitado mesmo que funcione.
🛡️ Dogma 1 — Isolamento Absoluto (Hexagonal)
“A lógica de domínio é o núcleo sagrado. Infraestrutura é detalhe injetado via traits.”
Invariantes:
crates/<bc>/src/domain/não importa deactor/,ports/ouadapters/. Verificado por:grep -rE '^use crate::(actor|ports|adapters)' crates/<bc>/src/domain/ # deve retornar vazio- Toda dependência de I/O passa por trait declarado em
crates/<bc>/src/ports/. - Cruzamento entre BCs é via artefato imutável com receipt — nunca
Arc<Mutex<T>>compartilhado.
Sinais de violação:
use std::net,use std::fs,use std::time::Instantemdomain/.tokio::spawnoumpsc::channelemdomain/.- Estruturas do BC A importadas diretamente em BC B.
🌀 Dogma 2 — Paradigma GALS & Ator
“Localmente síncrono, globalmente assíncrono. Nunca bloqueie dentro do loop do ator.”
Invariantes:
- Loops de ator usam apenas
mpsc::Receiver::recv().await,tokio::select!ou similar. Nenhuma espera bloqueante. - Estado mutável do ator é dentro do
structdo ator; nada deMutex<DomainState>. - Mensagens entre BCs são serializáveis (
Serialize + Deserialize).
Sinais de violação:
std::sync::Mutex,std::sync::RwLockno domínio ou no ator.thread::sleep,std::thread::joinem código de runtime.- Operações de I/O síncronas (
std::fs::read,std::net::TcpStream) sem wrapperasync.
⚙️ Dogma 3 — no_std First
“O código de domínio deve compilar sem a biblioteca padrão, do ATmega ao mainframe.”
Invariantes:
crates/kernel/src/domain/compila parariscv32imc-unknown-none-elfethumbv7em-none-eabihfsem warnings.crates/math/compila para os mesmos alvos.- Coleções dinâmicas usam
heaplessem vez deVec/HashMapno caminho embarcado.
Sinais de violação:
use std::collections::*em códigodomain/.- Alocação dinâmica (
Box,Vec,String) em códigono_std. - Dependências que exigem
stdautomaticamente.
🔌 Dogma 4 — Interoperabilidade Blindada (Opaque Handles & Zero-Copy)
“O FFI expõe apenas ponteiros opacos. Serialização pesada é substituída por vistas diretas da memória.”
Invariantes:
- Tipos públicos do crate expostos a FFI usam
#[repr(C)]+ ponteiro opaco (sem campos públicos). - Buffers compartilhados via FFI são zero-copy (ponteiro + tamanho).
serde_json/protobufproibidos emcrates/bindings/*para caminhos quentes.
Sinais de violação:
- Tipos Rust complexos visíveis no header C.
serde_json::from_strem hot path de binding.Vec<T>retornado através de fronteira FFI (vira cópia).
As 4 Esteiras da Muralha
Cada esteira tem um critério de saída binário (passa/falha). CI enforça em ordem. Uma esteira só é avaliada se a anterior passou.
Esteira 1 — Conformidade (sintática, estática, segurança básica)
Ferramentas:
| Ferramenta | O que verifica | Bloqueia? |
|---|---|---|
cargo fmt --all -- --check | Formatação canônica | Sim |
cargo clippy --all -- -D warnings | Lints oficiais | Sim |
cargo audit | CVEs em dependências | Sim (HIGH/CRITICAL) |
cargo vet | Supply chain (lockfile de imports) | Sim |
rtk make lint (via rtk proxy) | Igual a make lint mas rápido | Sim |
pre-commit (.pre-commit-config.yaml) | Whitespace, EOF, YAML, TOML | Sim |
Saída da esteira: zero erros, zero warnings de clippy, zero CVEs HIGH/CRITICAL.
Esteira 2 — GALS & Domínio (testes + cobertura)
Ferramentas:
| Ferramenta | O que verifica | Bloqueia? |
|---|---|---|
cargo test --all | Suíte unitária + integração | Sim |
cargo test --doc | Doctests | Sim |
cargo llvm-cov --all --fail-under-lines 90 | Cobertura de linhas ≥ 90 % | Sim |
proptest (em crates relevantes) | Invariantes por property-based | Sim em Kernel/crypto/economia |
cargo test --test local_node_integration | Ciclo de vida ponta-a-ponta | Sim |
Saída da esteira: suíte verde, cobertura ≥ 90 %, sem teste flaky.
Esteira 3 — Verificação Formal (TLA+ + Lean 4)
Verificação cirúrgica: aplicada só onde a garantia supera o custo de modelagem. Detalhes em
formal-verification.md.
Ferramentas:
| Ferramenta | Onde | O que prova |
|---|---|---|
| TLA+ | crates/*/formal/tla/ | Concorrência, GALS liveness, soma zero de crédito, soundness de ZK-PoL |
| Lean 4 | crates/paebiru-math/formal/lean/ e formal/lean/ | Pureza algorítmica: Haversine, Reed-Solomon, Ising, Langevin, MutualCredit |
make verify-formal | orquestrador | Roda tudo; pula Lean 4 se lake ausente |
Saída da esteira: modelos compilam, provas não regrediram, contradições detectadas resolvidas.
Esteira 4 — Embarcada (no_std)
Ferramentas:
| Alvo | Comando | Aplicável a |
|---|---|---|
riscv32imc-unknown-none-elf | cargo check --target riscv32imc-unknown-none-elf | Kernel, Math, HAL |
thumbv7em-none-eabihf | cargo check --target thumbv7em-none-eabihf | Kernel, Math, HAL |
wasm32-unknown-unknown | cargo check --target wasm32-unknown-unknown --no-default-features | Plasmids, Kernel (subset) |
Saída da esteira: build limpo para todos os alvos embarcados suportados pela mudança.
Tabela de mapeamento: dogma × esteira
| Dogma | Esteira 1 (Conform.) | Esteira 2 (GALS) | Esteira 3 (Formal) | Esteira 4 (Embarcada) |
|---|---|---|---|---|
| 1. Hexagonal | clippy lints sobre imports | Testes de porta mockada | TLA+ sobre membrana | no_std build |
| 2. GALS & Ator | Lints clippy::async_yields_async | Teste do loop do ator | TLA+ liveness | no_std + heapless |
3. no_std | cargo check --no-default-features | Suíte no_std-only | Lean 4 sobre funções puras | Toda a esteira |
| 4. Opaque FFI | cargo clippy + revisão manual | Testes de binding | — | Compila para wasm32 |
Como aplicar este documento
- Autor do PR: percorra a tabela para o dogma que sua mudança toca. Cada dogma tem testes específicos em cada esteira.
- Reviewer: use a tabela como checklist de revisão.
- Agente de IA: leia a skill
paebiru-architectantes de propor patches que tocam dogmas. Cite o dogma preservado no PR.