Traduzione automatica. Il testo inglese è la versione di riferimento. English

l'altra metà

Cose che ho costruito perché volevo che esistessero.

PANTHEON è il lavoro. Questo è ciò che producono gli stessi istinti quando nessuno paga per il risultato: un cielo reale su un desktop, un'effemeride senza dipendenze e un terminale che sa disegnare. La disciplina è identica; cambia solo la posta in gioco.

GNOME Shell · GPL-2.0 · ★3

TerraFirma: un cielo reale sopra il tuo sfondo.

Non un'animazione di un cielo. Quello vero, calcolato da un'effemeride per la tua latitudine, longitudine e ora.

Un desktop GNOME con uno sfondo che è il cielo notturno calcolato: le figure delle costellazioni di Pegaso, Acquario, Ariete e Toro con i loro nomi, la Via Lattea che lo attraversa, Saturno etichettato e luminoso, e l'arco dell'orizzonte segnato SE e SW. Nell'inquadratura si vedono la dock e le icone Home e Cestino.
Il desktop, senza ritocchi. Il dock e le icone sono inquadrati di proposito: questo è lo sfondo, non una finestra che finge di esserlo. Ogni figura, la Via Lattea e l'orizzonte sono calcolati per quel luogo e quel minuto.
Saturno reso come un piccolo disco arancione con l'ellisse degli anelli disegnata attorno, con l'etichetta Saturno, su linee di costellazioni.
Saturno a diciannove secondi d'arco, anelli aperti e inclinati secondo la reale geometria degli anelli. Si chiudono in una linea ogni quindici anni; qui sono parzialmente aperti, perché è lì che si trovano ora.

L'hot loop è misurabile di proposito

La proiezione e l'atmosfera risiedono in skymath.js, che non importa nulla da GNOME Shell. Un file che può girare solo dentro una sessione si può solo indovinare; uno che gira in modo autonomo si può cronometrare. Quel confine segue lo stesso ragionamento del purity lint che tiene il core di PANTHEON fuori dal suo livello applicativo.

Il catalogo stellare e le effemeridi sono di terze parti e citati in NOTICE.md. Imposta una data, poi guarda in alto: per questo tipo di software è l'unico test che conta.

Una striscia larga e sottile dell'orizzonte che mostra il rilevamento di bussola SE segnato sull'arco dell'orizzonte, con la costellazione Piscis Austrinus e la sua stella Fomalhaut etichettate appena sopra.
L'orizzonte, con i punti della bussola, così puoi girarti e verificare.

Perché il ciclo critico ha dovuto spostarsi fuori → · TerraFirma su GitHub ↗

estratti e pubblicati

Tre pacchetti nati da questo lavoro.

Lo stesso schema dei sei di PANTHEON: costruire la cosa, trovare il pezzo davvero riutilizzabile, estrarlo e pubblicarlo alle sue condizioni. Tutti e tre sono MIT e installabili già ora.

La Gioconda resa in un terminale con caratteri braille Unicode colorati. Ogni cella di carattere contiene una griglia di punti 2x4; il volto, le mani e il paesaggio sfumato alle sue spalle sono tutti riconoscibili, e la texture dei punti braille è visibile in ogni cella.
La Gioconda, disegnata con il braille Unicode in un terminale, larga 93 colonne. Ogni cella è una griglia di punti 2×4 con i propri colori di primo piano e di sfondo.

braillecanvas v0.4.0 · MIT

Il Braille indirizza 2×4 punti per cella di carattere, quindi un terminale 80×24 è in realtà una tela 160×96. È questa la differenza tra un rendering e l'ASCII art.

La parte interessante è il colore. Ogni cella porta due colori, uno per i punti accesi e uno per gli spazi, così una cella a cavallo di un bordo, pelle contro cielo, conserva il bordo invece di mediarlo in una poltiglia. L'errore medio di colore per punto su questa immagine scende da 45.7 a 21.3.

Scegliere quali punti accendere per ogni cella, invece di prendere lo schema da una griglia di dithering fissa, riduce le celle prive di texture da 35.1% a 1.6%.

Due limiti dichiarati nel suo stesso README: sotto circa 90 colonne le fotografie smettono di funzionare, e il monocromatico non può affatto rendere questa immagine, il suo volto misura 159 di luminanza contro 192 del cielo dietro di lei, quindi un render a 1 bit è per costruzione una silhouette.

npm i braillecanvas · npm ↗ · sorgente ↗

skymaths v0.1.2 · MIT

Astronomia di posizione senza dipendenze: Sole, Luna, pianeti, crepuscolo, levata e tramonto. Estratta dalle effemeridi di TerraFirma, poi corretta: il polinomio Espenak–Meeus che usava è pubblicato solo per il 1900–1920 e veniva applicato al 1986, dando −534 secondi per il 1950 contro un valore misurato di +29. Scoperto confrontandolo con un almanacco pubblicato anziché con se stesso.

È attivo su questo sito: in modalità scura lo sfondo è il cielo sopra Cardiff nella notte delle Perseidi, il 13 agosto 2026, calcolato nel tuo browser: 5,044 stelle nei loro colori reali, la fase della Luna e i pianeti dove si trovavano. Scorri per girarti.

npm i skymaths · npm ↗ · sorgente ↗

Cardiff, 12–13 agosto 2026, dalle 22:45 alle 02:15 BST, ogni fotogramma calcolato da skymaths. Le meteore partono dal radiante reale delle Perseidi, alla frequenza reale; il punto in cui cade ciascuna è casuale. Il castello e le colline sono generati da Runway.

starwheel v0.2.3 · MIT · ★4

Un planisfero dal vivo nel tuo terminale, con le posizioni reali delle stelle per il tuo luogo e il tuo minuto, disegnato con braillecanvas. Il mio repository con più stelle, e quello che mi ha insegnato che una correzione che sposta pixel pubblicati non è la stessa correzione due volte: limita le iterazioni dove il suo gemello ritaglia, di proposito.

npx starwheel · npm ↗ · sorgente ↗

Un monitor per server da terminale disegnato in braille: grafici a linee di CPU, memoria e load average su una finestra mobile, con una striscia di barre per core.
Lo stesso canvas che traccia dati reali di /proc, CPU, memoria e load average su una finestra mobile. I grafici funzionano ben al di sotto della soglia minima di 90 colonne richiesta dalle fotografie, perché sono già ad alto contrasto.

su questa pagina, adesso

L'arte è generata, e il seed non può sfuggire.

Ogni opera d'arte su questo sito: l'hero qui sopra, la favicon, le social card, gli avatar, esce dal generatore di PANTHEON stesso. Deterministico e con seed: lo stesso seed dà la stessa immagine, ogni volta.

Lo stesso contratto da entrambe le parti

Un motore lato server genera le card social e i siti dei tenant; un motore nel browser disegna la versione animata che stai guardando. Stessa regola: entra un seed, esce arte riproducibile.

A prova di injection per costruzione

Il seed alimenta il PRNG e nient'altro. Non viene mai interpolato nel markup o in uno stile. Un nome di tenant che in realtà è un payload disegna un'immagine diversa; non disegna un tag script. Lo stesso istinto del resto del sistema, applicato alla decorazione.

installabile, non solo leggibile

Sei garanzie, estratte e pubblicate.

Ognuno è nato in PANTHEON come singola promessa verificabile, poi è finito su PyPI per reggersi da solo. Agenti AI avversariali, eseguiti da me, non indipendenti, li hanno esaminati riga per riga e hanno trovato difetti reali; le versioni qui sotto sono quelle successive a quelle correzioni, ciascuna verificata installandola dal registry in un ambiente pulito e rieseguendo la riproduzione del revisore stesso, non fidandosi del log di build.

pantheon-guardrails v0.3.2 · Apache-2.0

Uno scorer della costituzione che usa un giudice LLM solo sulle risposte ad alto rischio, e richiede che quel giudice sia un modello diverso dal generatore, così i due non condividono gli stessi punti ciechi. Prima limitava un punteggio fuori intervallo verso l'alto: un giudice che restituiva {"clarity": 99} otteneva un 1.0 perfetto e superava ogni soglia: un guardrail che falliva in modo aperto. Ora un giudice che solleva un'eccezione, si blocca o restituisce valori senza senso è una valutazione fallita esplicita che, per impostazione predefinita, blocca.

pip install pantheon-guardrails · PyPI ↗ · sorgente ↗

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

Una protezione SSRF in uscita a due livelli che resiste al DNS rebinding: ricontrolla l'IP che il socket ha effettivamente raggiunto al momento della connessione, quindi un host che si risolve in un indirizzo pubblico e poi fa rebinding verso loopback o metadati cloud viene rifiutato. La revisione ha scoperto che l'opener leggeva ancora URL file://, perché Python installa di default handler per altri schemi; ora c'è una allowlist esplicita http/https al confine, redirect inclusi, e i proxy d'ambiente sono disattivati a meno che tu non li richieda.

pip install pantheon-ssrf-guard · PyPI ↗ · sorgente ↗

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

Rimuove il markup dei protocolli degli strumenti e il contrabbando Unicode dal testo non attendibile degli strumenti MCP prima che raggiunga il prompt di un agente. Ambito dichiarato onestamente: non pretende di fermare l'injection in prosa semplice, che è un problema di architettura, non di stringhe. Due correzioni dalla revisione: un input avversariale da 256 kB richiedeva 26 secondi di CPU e ora viene rifiutato subito, e "Read\nthe\tfile" non diventa più "Readthefile", perché un a capo è un confine di parola.

pip install pantheon-tool-sanitizer · PyPI ↗ · sorgente ↗

credit-ledger v0.3.0 · Apache-2.0

Metering a prova di scoperto su Postgres in circa 150 righe: 100 addebiti paralleli su un saldo di 50 ed esattamente 50 vanno a buon fine, fatturazione exactly-once in caso di replay dei webhook, isolamento imposto dalla row-level security. La build pubblicata accettava un addebito negativo, che pagava il cliente, e importi sotto la precisione della colonna, che addebitavano 0.0000 segnalando successo. Ora un'unica regola sugli importi copre ogni percorso, e c'è una migrazione testata per i database già esistenti.

pip install credit-ledger · PyPI ↗ · sorgente ↗

pantheon-ical v0.3.1 · Apache-2.0

iCal round-trip (RFC 5545) per i calendari di prenotazione in meno di 200 righe. Un periodo occupato perso viene letto come libero, quindi il silenzio è il guasto pericoloso: un calendario troppo grande viene rifiutato anziché troncato, e una regola ricorrente che trabocca lo dichiara invece di restituire una lista corta. L'ultima correzione ha limitato il lavoro oltre al risultato: una regola ostile di una riga generava 34 milioni di occorrenze in 76 secondi prima di essere rifiutata; ora si ferma a 401.

pip install pantheon-ical · PyPI ↗ · sorgente ↗

pantheon-rls v0.1.1 · Apache-2.0

L'isolamento dei tenant come garanzia di Postgres anziché come abitudine applicativa: force-RLS più grant a privilegio minimo, così è il database stesso a rifiutare letture e scritture tra tenant. Fail-closed per costruzione: senza contesto tenant si ottengono zero righe, mai tutte le righe, che è la modalità di guasto che conta quando un bug arriva in produzione alle 3 di notte.

pip install pantheon-rls · PyPI ↗ · sorgente ↗

Ogni correzione qui sopra è arrivata allo stesso modo: prima riprodurre il difetto, correggere il confine invece del sintomo, poi dimostrare che il nuovo test fallisce quando il bug viene reintrodotto. Un test che non può fallire non è una prova.

su cosa gira

Lo stack è noioso. Il confine no.

Python 3.12, FastAPI, Postgres, Redis, React con Vite, un solo Dockerfile dietro nginx. Niente di tutto ciò è una scelta da ammirare: sono i pezzi che scegli perché la tua attenzione possa andare dove conta davvero.

146 file · 14,002 righe

pantheon-core: il substrato. Agnostico rispetto al dominio per contratto: non può importare da residents o bundles, e due controlli indipendenti fanno fallire la CI quando lo fa.

210 file · 24,216 righe

Test, su 38,816 righe di Python. Non scrivo a mano l'implementazione, quindi la suite non è una rete di sicurezza. È la specifica, ed è l'artefatto che scrivo davvero io.

Cinque livelli, un'unica direzione

architect · runtime · guardrails · substrate · primitives, con providers volutamente fuori dallo stack, perché sta sotto due livelli contemporaneamente e il contratto lo dichiara apertamente invece di piegarsi.

Quel confine è il motivo per cui sei componenti hanno potuto essere estratti e pubblicati come librerie autonome: l'estrazione è consistita soprattutto nello spostare file a cui non era mai stato permesso di dipendere verso il basso. La versione lunga, inclusa la parte che ho sbagliato →

Stessa persona, stesse regole, posta in gioco più bassa.

Nessuno fa l'audit di uno sfondo. Il motivo per cui sono costruiti così è che è l'unico modo in cui so costruire: misurarlo, estrarre la parte riutilizzabile, pubblicarne i limiti insieme e verificare i numeri con qualcosa di esterno al programma.

Cosa sto cercando → Leggi gli scritti →