機械翻訳です。英語の原文が正本です。 English

もう半分

存在してほしいと思ったから作ったもの。

PANTHEON が本業です。これは、誰も成果にお金を払っていないときに同じ感覚が生み出すものです。デスクトップ上の本物の空、依存関係のない天体暦、そして描画できるターミナル。規律は同じで、変わるのは懸かっているものだけです。

GNOME Shell · GPL-2.0 · ★3

TerraFirma: 壁紙の上に本物の空を。

空のアニメーションではありません。あなたの緯度、経度、時計に基づいて天体暦から計算された、実際の空です。

GNOMEデスクトップ。壁紙は計算された夜空です。ペガスス座、みずがめ座、おひつじ座、おうし座の星座絵とその名前、横切る天の川、ラベル付きで輝く土星、そしてSEとSWが記された地平線の弧が描かれています。ドックとHome、Trashのアイコンも写っています。
未加工のデスクトップです。Dock とアイコンは意図的に写しています。これは壁紙であり、壁紙のふりをしたウィンドウではありません。すべての図形、天の川、地平線は、その場所とその分に合わせて計算されています。
土星が小さなオレンジ色の円盤として描かれ、その周りに環の楕円が描かれています。星座線を背景に Saturn とラベルが付いています。
19秒角の土星。環は実際の環の幾何に基づいて開き、傾いています。環は15年ごとに線状に閉じますが、ここでは一部開いた状態で示しています。今まさにそうなっているからです。

ホットループは意図的に計測可能にしています

投影と大気の計算は skymath.js にあり、GNOME Shell からは何もインポートしていません。セッション内でしか動かないファイルは推測するしかありませんが、単体で動くファイルは計測できます。この境界は、PANTHEON のコアをアプリ層から切り離しておく純粋性 lint と同じ考え方です。

星表と天体暦はサードパーティのもので、NOTICE.md にクレジットを記載しています。日付を指定して、空を見上げてください。この種のソフトウェアにとって、意味のあるテストはそれだけです。

水平線を写した横長の細い帯状の画像です。水平線の弧上に方位 SE が示され、そのすぐ上にみなみのうお座と、その恒星フォーマルハウトのラベルがあります。
方位付きの地平線。振り返って確かめられます。

ホットループを外に出さなければならなかった理由 → · GitHub の TerraFirma ↗

抽出し、公開

そこから生まれた 3 つのパッケージ。

PANTHEON の 6 つと同じパターンです。まず作り、本当に再利用できる部分を見つけ、切り出し、独立した形で公開する。3 つとも MIT ライセンスで、今すぐインストールできます。

ターミナルに色付きのUnicode点字文字で描画されたモナ・リザ。各文字セルは2x4のドットグリッドを持ち、顔、手、背後のかすんだ風景がすべて識別でき、すべてのセルの中に点字のドットの質感が見えます。
ターミナルでUnicodeの点字を使って描いたモナ・リザ、幅93列。各セルは2×4のドットグリッドで、それぞれが独自の前景色と背景色を持ちます。

braillecanvas v0.4.0 · MIT

点字は1 文字セルあたり 2×4 ドットを扱えるため、80×24 のターミナルは実質 160×96 のキャンバスになります。これがレンダリングと ASCII アートの違いです。

面白いのは色です。各セルは2つの色を持ちます。点灯したドット用と隙間用です。そのため、肌と空の境目のようにエッジにまたがるセルでも、平均化して濁らせることなくエッジを保てます。この画像でのドットあたりの平均色誤差は45.7から21.3に下がります。

固定のディザグリッドからパターンを取るのではなく、セルごとにどのドットを点灯させるかを選ぶことで、テクスチャのないセルが35.1%から1.6%に減ります。

README 自体に記載されている2つの制限: 約90列未満では写真が機能しなくなり、モノクロではこの画像をまったく描画できません。彼女の顔の輝度は159で、背後の空は192です。そのため1ビットのレンダリングは構造上シルエットになります。

npm i braillecanvas · npm ↗ · ソース ↗

skymaths v0.1.2 · MIT

依存関係のない位置天文学。太陽、月、惑星、薄明、出没。TerraFirma の暦計算から抽出し、その後修正しました: 使われていた Espenak–Meeus の多項式は 1900–1920 年のみを対象に公開されたもので、それが 1986 年に適用されており、1950 年について実測値 +29 秒に対し −534 秒を出していました。自身と照合するのではなく、公開されている天体暦と照合して発見しました。

このサイトで実際に動いています。ダークモードの背景は、ペルセウス座流星群の夜、13 August 2026 のカーディフの夜空で、ブラウザ上で計算しています。5,044 個の星を実際の色で表示し、月の満ち欠けと、その時点での惑星の位置も再現しています。スクロールすると向きが変わります。

npm i skymaths · npm ↗ · ソース ↗

カーディフ、2026年8月12–13日、22:45 から 02:15 BST まで。すべてのフレームは skymaths で計算しています。流星は実際のペルセウス座流星群の放射点から実際の出現率で現れますが、それぞれがどこに流れるかはランダムです。城と丘は Runway で生成しています。

starwheel v0.2.3 · MIT · ★4

ターミナル上で動くライブの星座早見盤です。あなたの位置と現在の分に合わせた実際の星の位置を、braillecanvas で描画します。私のリポジトリの中で最もスターが多く、公開済みのピクセルを動かす修正は二度同じ修正にはならない、と教えてくれたものです。姉妹プロジェクトがクリップする箇所で、こちらは意図的に反復回数を制限しています。

npx starwheel · npm ↗ · ソース ↗

点字文字で描画するターミナルのサーバーモニター。CPU、メモリ、ロードアベレージの折れ線グラフをローリングウィンドウで表示し、コアごとのバーも並べます。
同じキャンバスで実際の /proc データ(CPU、メモリ、ロードアベレージ)をローリングウィンドウでプロットします。チャートはもともと高コントラストなので、写真に必要な90列の下限を大きく下回っても機能します。

このページで、今まさに

アートは生成され、シードは外に出られません。

このサイトのすべてのアート: 上のヒーロー、ファビコン、ソーシャルカード、アバターは、PANTHEON 自身のジェネレーターから生成されています。決定的でシード付きです: 同じシードからは毎回同じ画像が得られます。

両側で同じ契約

サーバーサイドのエンジンがソーシャルカードとテナントサイトを描画し、ブラウザのエンジンが今ご覧のアニメーション版を描画します。ルールは同じです: シードを入れると、再現可能なアートが出てきます。

構造的にインジェクション安全

シードは PRNG に渡されるだけで、それ以外には一切使われません。マークアップやスタイルに埋め込まれることはありません。実際にはペイロードであるテナント名は、別の絵を描くだけで、script タグを描くことはありません。システムの他の部分と同じ発想を、装飾に適用したものです。

読むだけでなく、インストール可能

6つの保証を抽出し、公開しました。

それぞれがPANTHEONから単一の検証可能な約束として切り出され、単体で成り立つようPyPIに公開されました。敵対的なAIエージェント(自前で実行したもので、独立したものではありません)が1行ずつ確認し、実際の欠陥を見つけました。以下のバージョンはそれらを修正した後のもので、ビルドログを信用するのではなく、クリーンな環境にレジストリからインストールし、レビュアー自身の再現手順を再実行して検証しています。

pantheon-guardrails v0.3.2 · Apache-2.0

高リスクな返答にだけLLMジャッジを使い、そのジャッジが生成側とは異なるモデルであることを要求するconstitutionスコアラーです。両者が盲点を共有しないようにするためです。以前は範囲外のスコアを上方向に丸めていました。{"clarity": 99} を返すジャッジは満点の1.0となり、すべての閾値を通過していました:フェイルオープンするガードレールです。現在は、例外を投げる、ハングする、無意味な値を返すジャッジは明示的な評価失敗として扱われ、デフォルトでブロックされます。

pip install pantheon-guardrails · PyPI ↗ · ソース ↗

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

DNS リバインディングに耐える 2 層構成の SSRF 送信ガードです。接続時にソケットが実際に到達した IP を再確認するため、パブリックに解決された後にループバックやクラウドメタデータへリバインドされるホストは拒否されます。レビューで、Python がデフォルトで他のスキームのハンドラをインストールするため、オープナーが依然として file:// URL を読み取ってしまうことが判明しました。現在は境界に明示的な http/https 許可リストがあり、リダイレクトにも適用されます。また、環境変数のプロキシは明示的に要求しない限り無効です。

pip install pantheon-ssrf-guard · PyPI ↗ · ソース ↗

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

信頼できない MCP ツールのテキストから、エージェントのプロンプトに届く前にツールプロトコルのマークアップと Unicode スマグリングを除去します。スコープは正直に限定しています:平文によるインジェクションを防ぐとは主張しません。それは文字列の問題ではなくアーキテクチャの問題だからです。レビューで 2 つを修正しました:256 kB の敵対的入力が 26 秒の CPU 時間を消費していた問題は現在は即座に拒否され、"Read\nthe\tfile" は "Readthefile" にならなくなりました。改行は単語境界だからです。

pip install pantheon-tool-sanitizer · PyPI ↗ · ソース ↗

credit-ledger v0.3.0 · Apache-2.0

Postgres 上で残高超過を防ぐ計量を約150行で実装:残高50に対して100件の並列課金を行うと、ちょうど50件が成功し、Webhook の再送下でも課金は厳密に1回だけ行われ、分離は行レベルセキュリティで強制されます。公開済みのビルドはかつて負の課金を受け付けており、それは顧客への支払いになっていました。また、カラムの精度を下回る金額も受け付け、成功を報告しながら 0.0000 を課金していました。現在は一つの金額ルールがすべての経路をカバーしており、既存のデータベース向けにはテスト済みのマイグレーションがあります。

pip install credit-ledger · PyPI ↗ · ソース ↗

pantheon-ical v0.3.1 · Apache-2.0

予約カレンダー向けの iCal (RFC 5545) の往復変換を 200 行未満で実装しています。取りこぼした予定ありの期間は空きとして読まれるため、沈黙こそが危険な失敗です。サイズ超過のカレンダーは切り詰めずに拒否し、上限を超える繰り返しルールは短いリストを返すのではなく、超過したことを明示します。直近の修正では、結果だけでなく処理量にも上限を設けました。以前は 1 行の悪意あるルールが、拒否されるまでに 76 秒かけて 3400万件の発生を生成していましたが、現在は 401 件で停止します。

pip install pantheon-ical · PyPI ↗ · ソース ↗

pantheon-rls v0.1.1 · Apache-2.0

テナント分離を、アプリケーションの習慣ではなく Postgres の保証として実現します。force-RLS と最小権限の grant により、データベース自体がテナント間の読み書きを拒否します。構造的にフェイルクローズで、テナントコンテキストがなければ返るのは 0 行であり、全行ではありません。午前 3 時にバグが本番環境に到達したとき重要になるのは、まさにこの故障モードです。

pip install pantheon-rls · PyPI ↗ · ソース ↗

上記の修正はすべて同じ方法で行いました: まず欠陥を再現し、症状ではなく境界を修正し、バグを戻すと新しいテストが失敗することを証明します。失敗しえないテストは証拠になりません。

何の上で動いているか

スタックは退屈です。境界はそうではありません。

Python 3.12、FastAPI、Postgres、Redis、React(Vite)、nginxの背後にDockerfile 1つ。どれも称賛に値する決定ではありません。重要なところに注意を向けられるように選ぶ部品です。

146 ファイル · 14,002 行

pantheon-core: 基盤です。契約上ドメイン非依存で、residents や bundles からインポートしてはならず、インポートすると 2 つの独立したチェックが CI を失敗させます。

210 ファイル · 24,216 行

テスト。対象はPythonの38,816行です。実装は手書きしないので、テストスイートはセーフティネットではありません。それは仕様であり、私が実際に書く成果物です。

5つのレイヤー、1つの方式

architect · runtime · guardrails · substrate · primitives。providersはあえてスタックの外に置いています。2つの層の下に同時に位置するためで、契約は無理に曲げるのではなく、そのことを明示しています。

その境界があったからこそ、6 つのコンポーネントを切り出して独立したライブラリとして公開できました。抽出作業の大半は、下位層への依存を一度も許されていなかったファイルを移動するだけでした。詳しい話(私が間違えた部分も含む)→

同じ人間、同じルール、より低いリスク。

壁紙を監査する人はいません。これらがこのように作られているのは、それが私の知る唯一の作り方だからです。計測し、再利用できる部分を抽出し、限界も合わせて公開し、数値をプログラムの外にある何かと照合する。

私が求めているもの → 記事を読む →