Tradução automática. O texto em inglês é a versão de referência. English

a outra metade

Coisas que construí porque queria que existissem.

O PANTHEON é o trabalho. Isto é o que os mesmos instintos produzem quando ninguém está pagando pelo resultado: um céu real na área de trabalho, uma efeméride sem dependências e um terminal que sabe desenhar. A disciplina é idêntica; só muda o que está em jogo.

GNOME Shell · GPL-2.0 · ★3

TerraFirma: um céu real sobre o seu papel de parede.

Não é uma animação de um céu. É o céu real, calculado a partir de uma efeméride para sua latitude, longitude e relógio.

Uma área de trabalho GNOME cujo papel de parede é o céu noturno calculado: figuras das constelações de Pégaso, Aquário, Áries e Touro com seus nomes, a Via Láctea atravessando em faixa, Saturno identificado e brilhando, e o arco do horizonte marcado SE e SW. O dock e os ícones Home e Trash aparecem na imagem.
A área de trabalho, sem retoques. O dock e os ícones aparecem de propósito: este é o papel de parede, não uma janela fingindo ser um. Cada figura, a Via Láctea e o horizonte são calculados para aquele local e aquele minuto.
Saturno representado como um pequeno disco laranja com a elipse do anel desenhada ao redor, rotulado Saturno, sobre linhas de constelações.
Saturno a dezenove segundos de arco, anéis abertos e inclinados a partir da geometria real dos anéis. Eles se fecham numa linha a cada quinze anos; aqui aparecem parcialmente abertos, porque é onde estão.

O loop crítico é mensurável de propósito

A projeção e a atmosfera ficam em skymath.js, que não importa nada do GNOME Shell. Um arquivo que só roda dentro de uma sessão só pode ser adivinhado; um que roda de forma isolada pode ser cronometrado. Essa fronteira segue o mesmo raciocínio do lint de pureza que mantém o núcleo do PANTHEON fora da sua camada de aplicação.

O catálogo de estrelas e as efemérides são de terceiros e têm os créditos em NOTICE.md. Aponte para uma data e depois olhe para cima: para esse tipo de software, esse é o único teste que conta.

Uma faixa larga e fina do horizonte mostrando o rumo de bússola SE marcado no arco do horizonte, com a constelação Piscis Austrinus e sua estrela Fomalhaut identificadas logo acima.
O horizonte, com as direções da bússola, para você poder se virar e conferir.

Por que o loop crítico teve que sair → · TerraFirma no GitHub ↗

extraídos e publicados

Três pacotes que saíram disso.

O mesmo padrão dos seis do PANTHEON: construir a coisa, encontrar a parte que é genuinamente reutilizável, extraí-la e publicá-la de forma independente. Os três são MIT e podem ser instalados agora mesmo.

A Mona Lisa renderizada num terminal como caracteres braille Unicode coloridos. Cada célula de caractere contém uma grade de pontos 2x4; o rosto, as mãos e a paisagem enevoada atrás dela são todos reconhecíveis, e a textura de pontos braille é visível dentro de cada célula.
A Mona Lisa, desenhada com braille Unicode num terminal, com 93 colunas de largura. Cada célula é uma grade de pontos 2×4 com sua própria cor de primeiro plano e de fundo.

braillecanvas v0.4.0 · MIT

O Braille endereça 2×4 pontos por célula de caractere, então um terminal de 80×24 é na verdade uma tela de 160×96. Essa é a diferença entre uma renderização e arte ASCII.

A parte interessante é a cor. Cada célula carrega duas cores, uma para os pontos acesos, outra para os vãos, de modo que uma célula sobre uma borda, pele contra céu, mantém a borda em vez de tirar a média até virar lama. O erro médio de cor por ponto nesta imagem cai de 45.7 para 21.3.

Escolher quais pontos acendem em cada célula, em vez de tirar o padrão de uma grade de dither fixa, reduz as células sem textura de 35.1% para 1.6%.

Dois limites declarados no próprio README: abaixo de cerca de 90 colunas as fotografias deixam de funcionar, e o monocromático não consegue renderizar esta imagem de jeito nenhum, o rosto dela mede 159 de luminância contra 192 do céu atrás dela, então uma renderização de 1 bit é uma silhueta por construção.

npm i braillecanvas · npm ↗ · código-fonte ↗

skymaths v0.1.2 · MIT

Astronomia posicional sem dependências: Sol, Lua, planetas, crepúsculo, nascer e ocaso. Extraída das efemérides do TerraFirma e depois corrigida: o polinômio de Espenak–Meeus que ela usava é publicado apenas para 1900–1920 e estava sendo aplicado a 1986, dando −534 segundos para 1950 contra um valor medido de +29. Encontrado ao conferi-la com um almanaque publicado, e não com ela mesma.

Está rodando neste site: no modo escuro, o fundo é o céu sobre Cardiff na noite das Perseidas, 13 de agosto de 2026, calculado no seu navegador: 5,044 estrelas em suas cores reais, a fase da Lua e os planetas onde estavam. Role a página para girar.

npm i skymaths · npm ↗ · código-fonte ↗

Cardiff, 12–13 de agosto de 2026, das 22:45 às 02:15 BST, cada quadro calculado pelo skymaths. Os meteoros partem do radiante real das Perseidas, na taxa real; onde cada um cai é aleatório. O castelo e as colinas são gerados pelo Runway.

starwheel v0.2.3 · MIT · ★4

Um planisfério ao vivo no seu terminal, com posições reais das estrelas para a sua localização e o seu minuto, desenhado com braillecanvas. Meu repositório com mais estrelas, e o que me ensinou que uma correção que altera pixels publicados não é a mesma correção duas vezes: ela limita iterações onde a sua irmã recorta, deliberadamente.

npx starwheel · npm ↗ · código-fonte ↗

Um monitor de servidor para terminal desenhado em braille: gráficos de linha de CPU, memória e carga média em uma janela móvel, com uma faixa de barras por núcleo.
O mesmo canvas plotando dados reais de /proc, CPU, memória e load average em uma janela deslizante. Os gráficos funcionam muito abaixo do mínimo de 90 colunas que as fotografias exigem, porque já têm alto contraste.

nesta página, agora mesmo

A arte é gerada, e a semente não tem como escapar.

Toda a arte deste site: o hero acima, o favicon, os cards sociais, os avatares, sai do próprio gerador do PANTHEON. Determinística e com seed: a mesma seed gera a mesma imagem, sempre.

O mesmo contrato dos dois lados

Um motor no servidor renderiza os cards sociais e os sites dos tenants; um motor no navegador desenha a versão animada que você está vendo. Mesma regra: entra a seed, sai arte reproduzível.

Seguro contra injeção por construção

A seed alimenta o PRNG e nada mais. ela nunca é interpolada em markup nem em um estilo. Um nome de tenant que na verdade é um payload desenha uma imagem diferente; não desenha uma tag script. O mesmo instinto do resto do sistema, aplicado à decoração.

instalável, não apenas legível

Seis garantias, extraídas e publicadas.

Cada um saiu do PANTHEON como uma única promessa verificável e depois foi para o PyPI, para se sustentar sozinho. Agentes de IA adversariais, executados por mim, não independentes, os revisaram linha por linha e encontraram defeitos reais; as versões abaixo são as posteriores a essas correções, cada uma verificada instalando a partir do registro em um ambiente limpo e reexecutando a própria reprodução do revisor, e não confiando no log de build.

pantheon-guardrails v0.3.2 · Apache-2.0

Um avaliador de constituição que só usa um juiz LLM em respostas de alto risco, e exige que esse juiz seja um modelo diferente do gerador, para que os dois não compartilhem pontos cegos. Ele costumava ajustar uma pontuação fora do intervalo para cima: um juiz que retornasse {"clarity": 99} recebia um 1.0 perfeito e passava em todos os limiares: um guardrail falhando aberto. Agora, um juiz que lança exceção, trava ou retorna algo sem sentido é uma avaliação explicitamente falha, que bloqueia por padrão.

pip install pantheon-guardrails · PyPI ↗ · código-fonte ↗

pantheon-ssrf-guard v0.2.1 · Apache-2.0

Uma proteção de saída contra SSRF em duas camadas que resiste a DNS rebinding: ela verifica novamente o IP que o socket realmente alcançou no momento da conexão, então um host que resolve para um endereço público e depois faz rebinding para loopback ou metadados de nuvem é recusado. A revisão descobriu que o opener ainda leria URLs file://, porque o Python instala handlers para outros esquemas por padrão; agora há uma allowlist explícita de http/https na fronteira, incluindo redirecionamentos, e os proxies de ambiente ficam desativados a menos que você os solicite.

pip install pantheon-ssrf-guard · PyPI ↗ · código-fonte ↗

pantheon-tool-sanitizer v0.3.0 · Apache-2.0

Remove marcação de protocolo de ferramentas e contrabando de Unicode do texto de ferramentas MCP não confiáveis antes que chegue ao prompt de um agente. Escopo honesto: não afirma impedir injeção em prosa simples, que é um problema de arquitetura e não de strings. Duas correções vindas da revisão: uma entrada adversarial de 256 kB consumia 26 segundos de CPU e agora é recusada de imediato, e "Read\nthe\tfile" não vira mais "Readthefile", porque uma quebra de linha é um limite de palavra.

pip install pantheon-tool-sanitizer · PyPI ↗ · código-fonte ↗

credit-ledger v0.3.0 · Apache-2.0

Medição à prova de saldo negativo sobre Postgres em cerca de 150 linhas: 100 cobranças paralelas contra um saldo de 50 e exatamente 50 são bem-sucedidas, cobrança exatamente uma vez sob reenvios de webhook, isolamento imposto por row-level security. A versão publicada aceitava uma cobrança negativa, que pagava o cliente, e valores abaixo da precisão da coluna, que cobravam 0.0000 enquanto reportavam sucesso. Uma única regra de valor agora cobre todos os caminhos, e há uma migração testada para bancos de dados que já existem.

pip install credit-ledger · PyPI ↗ · código-fonte ↗

pantheon-ical v0.3.1 · Apache-2.0

iCal (RFC 5545) de ida e volta para calendários de reservas em menos de 200 linhas. Um período ocupado descartado é lido como livre, então o silêncio é a falha perigosa: um calendário grande demais é recusado em vez de truncado, e uma regra recorrente que estoura avisa isso em vez de retornar uma lista curta. A última correção limitou o trabalho além do resultado: uma regra hostil de uma linha chegava a gerar 34 milhões de ocorrências ao longo de 76 segundos antes de ser rejeitada; agora para em 401.

pip install pantheon-ical · PyPI ↗ · código-fonte ↗

pantheon-rls v0.1.1 · Apache-2.0

Isolamento de tenants como garantia do Postgres, e não como hábito da aplicação: force-RLS mais concessões de privilégio mínimo, para que o próprio banco de dados recuse leituras e escritas entre tenants. Fail-closed por construção: sem contexto de tenant, retorna zero linhas, nunca todas as linhas, que é o modo de falha que importa quando um bug chega à produção às 3h da manhã.

pip install pantheon-rls · PyPI ↗ · código-fonte ↗

Cada correção acima chegou do mesmo jeito: primeiro reproduzir o defeito, corrigir a fronteira em vez do sintoma e depois provar que o novo teste falha quando o bug é reintroduzido. Um teste que não pode falhar não é evidência.

em que ele roda

A stack é comum. A fronteira não é.

Python 3.12, FastAPI, Postgres, Redis, React com Vite, um Dockerfile atrás do nginx. Nada disso é uma decisão digna de admiração, são as peças que você escolhe para que sua atenção possa ir para onde importa.

146 arquivos · 14,002 linhas

pantheon-core: o substrato. Agnóstico de domínio por contrato: não pode importar de residents nem de bundles, e duas verificações independentes fazem o CI falhar quando isso acontece.

210 arquivos · 24,216 linhas

Testes, contra 38,816 linhas de Python. Eu não escrevo a implementação à mão, então a suíte não é uma rede de segurança. Ela é a especificação, e é o artefato que eu de fato escrevo.

Cinco camadas, um único caminho

architect · runtime · guardrails · substrate · primitives, com providers deliberadamente fora da pilha, porque fica abaixo de duas camadas ao mesmo tempo e o contrato diz isso abertamente em vez de se dobrar.

Essa fronteira é o motivo pelo qual seis componentes puderam ser extraídos e publicados como bibliotecas independentes; a extração foi basicamente mover arquivos que nunca tiveram permissão de alcançar camadas inferiores. A versão longa, incluindo a parte em que errei →

A mesma pessoa, as mesmas regras, menos coisa em jogo.

Ninguém audita um papel de parede. Eles são construídos assim porque é a única forma que conheço de construir: medir, extrair a parte reutilizável, publicar os limites junto e conferir os números contra algo externo ao programa.

O que estou procurando → Leia os textos →