die andere Hälfte
Dinge, die ich gebaut habe, weil ich wollte, dass es sie gibt.
PANTHEON ist die Arbeit. Das hier entsteht aus denselben Instinkten, wenn niemand für das Ergebnis bezahlt: ein echter Himmel auf einem Desktop, eine Ephemeride ohne Abhängigkeiten und ein Terminal, das zeichnen kann. Die Disziplin ist identisch, nur der Einsatz ändert sich.
GNOME Shell · GPL-2.0 · ★3
TerraFirma: ein echter Himmel über Ihrem Hintergrundbild.
Keine Animation eines Himmels. Der tatsächliche, berechnet aus einer Ephemeride für Ihren Breitengrad, Ihren Längengrad und Ihre Uhrzeit.
Der Hot Loop ist bewusst messbar
Die Projektion und die Atmosphäre liegen in skymath.js, das nichts aus GNOME Shell importiert. Bei einer Datei, die nur innerhalb einer Session laufen kann, lässt sich nur raten; eine, die eigenständig läuft, lässt sich messen. Diese Grenze folgt derselben Überlegung wie der Purity-Lint, der den Kern von PANTHEON aus seiner App-Schicht heraushält.
Sternkatalog und Ephemeriden stammen von Dritten und sind in NOTICE.md genannt. Geben Sie ein Datum vor und schauen Sie dann nach oben: Für diese Art von Software ist das der einzige Test, der zählt.
Warum die Hot Loop ausgelagert werden musste → · TerraFirma auf GitHub ↗
extrahiert und veröffentlicht
Drei Pakete, die daraus entstanden sind.
Dasselbe Muster wie bei den sechs von PANTHEON: das Ding bauen, das Teil finden, das wirklich wiederverwendbar ist, es herauslösen und eigenständig veröffentlichen. Alle drei stehen unter MIT und sind sofort installierbar.
braillecanvas v0.4.0 · MIT
Braille adressiert 2×4 Punkte pro Zeichenzelle, ein 80×24-Terminal ist also eigentlich eine 160×96-Leinwand. Das ist der Unterschied zwischen einem Rendering und ASCII-Art.
Der interessante Teil ist die Farbe. Jede Zelle trägt zwei Farben, eine für die leuchtenden Punkte, eine für die Lücken, sodass eine Zelle, die über einer Kante liegt, Haut gegen Himmel, die Kante behält, statt sie zu Matsch zu mitteln. Der mittlere Farbfehler pro Punkt sinkt bei diesem Bild von 45.7 auf 21.3.
Pro Zelle auszuwählen, welche Punkte aufleuchten, statt das Muster aus einem festen Dither-Raster zu übernehmen, senkt den Anteil texturloser Zellen von 35.1% auf 1.6%.
Zwei Grenzen, die im eigenen README genannt werden: Unter etwa 90 Spalten funktionieren Fotos nicht mehr, und Monochrom kann dieses Bild überhaupt nicht darstellen: Ihr Gesicht misst 159 Luminanz gegenüber 192 für den Himmel hinter ihr, daher ist ein 1-Bit-Rendering konstruktionsbedingt eine Silhouette.
npm i braillecanvas · npm ↗ · Quellcode ↗
skymaths v0.1.2 · MIT
Positionsastronomie ohne Abhängigkeiten: Sonne, Mond, Planeten, Dämmerung, Auf- und Untergang. Aus der Ephemeride von TerraFirma extrahiert und dann korrigiert: Das dort verwendete Espenak–Meeus-Polynom ist nur für 1900–1920 veröffentlicht und wurde auf 1986 angewendet, was für 1950 −534 Sekunden ergab, gegenüber gemessenen +29. Gefunden durch Abgleich mit einem veröffentlichten Almanach statt mit sich selbst.
Es läuft auf dieser Website: Im Dunkelmodus ist der Hintergrund der Himmel über Cardiff in der Nacht der Perseiden, am 13. August 2026, berechnet in Ihrem Browser: 5,044 Sterne in ihren echten Farben, die Mondphase und die Planeten dort, wo sie standen. Scrollen Sie, um sich umzudrehen.
npm i skymaths · npm ↗ · Quellcode ↗
starwheel v0.2.3 · MIT · ★4
Ein Live-Planisphär in Ihrem Terminal: echte Sternpositionen für Ihren Standort und Ihre Minute, gezeichnet auf braillecanvas. Mein Repository mit den meisten Sternen, und das, an dem ich gelernt habe, dass ein Fix, der veröffentlichte Pixel verschiebt, nicht zweimal derselbe Fix ist: Er begrenzt Iterationen, wo sein Geschwisterprojekt clippt, und zwar bewusst.
npx starwheel · npm ↗ · Quellcode ↗
/proc-Daten plottet: CPU, Arbeitsspeicher und Load Average über ein gleitendes Zeitfenster. Diagramme funktionieren weit unterhalb der Untergrenze von 90 Spalten, die Fotos benötigen, weil sie bereits kontrastreich sind.auf dieser Seite, jetzt gerade
Die Grafik ist generiert, und der Seed kann nicht entkommen.
Jedes Kunstwerk auf dieser Website: das Hero-Bild oben, das Favicon, die Social Cards, die Avatare, stammt aus PANTHEONs eigenem Generator. Deterministisch und mit Seed: Derselbe Seed ergibt jedes Mal dasselbe Bild.
Derselbe Vertrag auf beiden Seiten
Eine serverseitige Engine rendert die Social Cards und Mandanten-Websites; eine Browser-Engine zeichnet die animierte Version, die Sie gerade sehen. Dieselbe Regel: Seed rein, reproduzierbare Kunst raus.
Konstruktionsbedingt sicher gegen Injection
Der Seed speist den PRNG und nichts anderes. Er wird nie in Markup oder einen Style interpoliert. Ein Mandantenname, der in Wahrheit eine Payload ist, zeichnet ein anderes Bild; er zeichnet kein Script-Tag. Derselbe Instinkt wie im Rest des Systems, angewendet auf Dekoration.
installierbar, nicht nur lesbar
Sechs Garantien, herausgelöst und veröffentlicht.
Jedes davon entstand in PANTHEON als ein einzelnes überprüfbares Versprechen und ging dann auf PyPI, damit es für sich allein steht. Adversariale KI-Agenten, selbst betrieben, nicht unabhängig, gingen sie Zeile für Zeile durch und fanden echte Fehler. Die unten aufgeführten Versionen sind die nach diesen Korrekturen, jeweils verifiziert durch Installation aus der Registry in eine saubere Umgebung und erneutes Ausführen der Reproduktion des Reviewers selbst, nicht durch Vertrauen in das Build-Log.
pantheon-guardrails v0.3.2 · Apache-2.0
Ein Verfassungs-Scorer, der einen LLM-Judge nur für Antworten mit hoher Tragweite einsetzt und verlangt, dass dieser Judge ein anderes Modell als der Generator ist, damit die beiden keine blinden Flecken teilen. Früher hat er einen Score außerhalb des Wertebereichs nach oben geklemmt: Ein Judge, der {"clarity": 99} zurückgab, erzielte perfekte 1.0 und bestand jede Schwelle: eine Guardrail, die offen versagt. Jetzt ist ein Judge, der eine Exception wirft, hängt oder Unsinn zurückgibt, eine explizit fehlgeschlagene Bewertung, die standardmäßig blockiert.
pip install pantheon-guardrails · PyPI ↗ · Quellcode ↗
pantheon-ssrf-guard v0.2.1 · Apache-2.0
Ein zweischichtiger SSRF-Egress-Schutz, der DNS-Rebinding übersteht: Er prüft beim Verbindungsaufbau erneut die IP, die der Socket tatsächlich erreicht hat, sodass ein Host, der zunächst öffentlich auflöst und dann auf Loopback oder Cloud-Metadaten umgebunden wird, abgewiesen wird. Das Review ergab, dass der Opener weiterhin file://-URLs lesen würde, weil Python standardmäßig Handler für andere Schemata installiert; jetzt gibt es an der Grenze eine explizite http/https-Allowlist, Weiterleitungen eingeschlossen, und Umgebungs-Proxys sind deaktiviert, sofern Sie sie nicht ausdrücklich anfordern.
pip install pantheon-ssrf-guard · PyPI ↗ · Quellcode ↗
pantheon-tool-sanitizer v0.3.0 · Apache-2.0
Entfernt Tool-Protokoll-Markup und Unicode-Schmuggel aus nicht vertrauenswürdigem MCP-Tool-Text, bevor er den Prompt eines Agenten erreicht. Ehrlich abgegrenzt: Es erhebt nicht den Anspruch, Injection in reiner Prosa zu stoppen, denn das ist ein Architekturproblem und kein String-Problem. Zwei Fixes aus dem Review: Eine adversariale Eingabe von 256 kB kostete 26 Sekunden CPU-Zeit und wird jetzt direkt abgewiesen, und "Read\nthe\tfile" wird nicht mehr zu "Readthefile", weil ein Zeilenumbruch eine Wortgrenze ist.
pip install pantheon-tool-sanitizer · PyPI ↗ · Quellcode ↗
credit-ledger v0.3.0 · Apache-2.0
Überziehungssichere Verbrauchsmessung über Postgres in etwa 150 Zeilen: 100 parallele Belastungen gegen ein Guthaben von 50, und genau 50 gelingen, Abrechnung genau einmal auch bei wiederholt zugestellten Webhooks, Isolation durch Row-Level Security durchgesetzt. Der veröffentlichte Build akzeptierte früher eine negative Belastung, die dem Kunden Geld auszahlte, sowie Beträge unterhalb der Genauigkeit der Spalte, die 0.0000 abrechneten und trotzdem Erfolg meldeten. Eine einzige Betragsregel deckt jetzt jeden Pfad ab, und es gibt eine getestete Migration für bereits bestehende Datenbanken.
pip install credit-ledger · PyPI ↗ · Quellcode ↗
pantheon-ical v0.3.1 · Apache-2.0
Round-Trip-iCal (RFC 5545) für Buchungskalender in unter 200 Zeilen. Ein verlorener Belegt-Zeitraum liest sich als frei, daher ist Stille der gefährliche Fehler: Ein übergroßer Kalender wird abgelehnt statt abgeschnitten, und eine Wiederholungsregel, die überläuft, sagt das, statt eine verkürzte Liste zurückzugeben. Der letzte Fix hat neben dem Ergebnis auch die Arbeit begrenzt: Eine einzeilige feindselige Regel erzeugte früher 34 Millionen Vorkommen über 76 Sekunden, bevor sie abgelehnt wurde; jetzt stoppt sie bei 401.
pip install pantheon-ical · PyPI ↗ · Quellcode ↗
pantheon-rls v0.1.1 · Apache-2.0
Tenant-Isolation als Postgres-Garantie statt als Gewohnheit der Anwendung: Force-RLS plus Least-Privilege-Grants, sodass die Datenbank selbst Tenant-übergreifende Lese- und Schreibzugriffe verweigert. Konstruktionsbedingt fail-closed: Ohne Tenant-Kontext kommen null Zeilen zurück, nie alle Zeilen, und genau dieser Fehlermodus zählt, wenn ein Bug um 3 Uhr morgens die Produktion erreicht.
pip install pantheon-rls · PyPI ↗ · Quellcode ↗
Jeder Fix oben kam auf dieselbe Weise zustande: zuerst den Defekt reproduzieren, die Grenze statt des Symptoms beheben, dann beweisen, dass der neue Test fehlschlägt, wenn der Bug wieder eingebaut wird. Ein Test, der nicht fehlschlagen kann, ist kein Beleg.
worauf es läuft
Der Stack ist langweilig. Die Grenze nicht.
Python 3.12, FastAPI, Postgres, Redis, React mit Vite, ein Dockerfile hinter nginx. Nichts davon ist eine bewundernswerte Entscheidung. Das sind die Teile, die man wählt, damit die Aufmerksamkeit dorthin gehen kann, wo es darauf ankommt.
146 Dateien · 14,002 Zeilen
pantheon-core: das Substrat. Per Vertrag domänenunabhängig: Es darf nicht aus residents oder bundles importieren, und zwei unabhängige Prüfungen lassen die CI fehlschlagen, wenn es das tut.
210 Dateien · 24,216 Zeilen
Tests, gegen 38,816 Zeilen Python. Ich schreibe die Implementierung nicht von Hand, also ist die Suite kein Sicherheitsnetz. Sie ist die Spezifikation, und sie ist das Artefakt, das ich tatsächlich verfasse.
Fünf Schichten, ein Weg
architect · runtime · guardrails · substrate · primitives, wobei providers bewusst außerhalb des Stacks liegt, weil es unter zwei Schichten zugleich sitzt und der Vertrag das offen ausspricht, statt sich zu verbiegen.
Diese Grenze ist der Grund, warum sechs Komponenten herausgelöst und als eigenständige Bibliotheken veröffentlicht werden konnten; die Extraktion bestand größtenteils darin, Dateien zu verschieben, die nie nach unten greifen durften. Die ausführliche Version, einschließlich des Teils, bei dem ich falschlag →
Dieselbe Person, dieselben Regeln, weniger auf dem Spiel.
Niemand auditiert ein Hintergrundbild. Diese sind so gebaut, wie sie sind, weil es die einzige Art ist, wie ich zu bauen weiß: messen, den wiederverwendbaren Teil extrahieren, die Grenzen mitveröffentlichen und die Zahlen gegen etwas außerhalb des Programms prüfen.
Fragen Sie zu jeder dieser Arbeiten.
- Welche Rolle sucht Isaac?
- Was davon läuft in Produktion?
- Zeigen Sie mir einen echten Bug, den er gefunden und behoben hat