나머지 절반
존재했으면 해서 만든 것들.
PANTHEON이 본업입니다. 이것은 결과에 아무도 돈을 내지 않을 때 같은 직관이 만들어내는 것들입니다: 데스크톱 위의 실제 하늘, 의존성 없는 천체력(ephemeris), 그리고 그림을 그릴 수 있는 터미널. 원칙은 똑같고, 걸린 것만 달라집니다.
GNOME Shell · GPL-2.0 · ★3
TerraFirma: 배경화면 위에 펼쳐지는 실제 하늘.
하늘을 흉내 낸 애니메이션이 아닙니다. 사용자의 위도, 경도, 시계를 기준으로 천체력에서 계산한 실제 하늘입니다.
핫 루프는 의도적으로 측정 가능하게 만들었습니다
투영과 대기 계산은 skymath.js에 있으며, 이 파일은 GNOME Shell에서 아무것도 가져오지 않습니다. 세션 안에서만 실행되는 파일은 추측만 할 수 있지만, 단독으로 실행되는 파일은 시간을 측정할 수 있습니다. 이 경계는 PANTHEON의 코어를 앱 레이어와 분리해 두는 순수성 린트와 같은 논리입니다.
항성 목록과 천체력은 서드파티 자료이며 NOTICE.md에 출처가 명시되어 있습니다. 날짜를 지정한 다음 하늘을 올려다보세요. 이런 종류의 소프트웨어에서는 그것만이 유일하게 의미 있는 테스트입니다.
추출해서 공개
여기서 나온 패키지 세 개.
PANTHEON의 여섯 개와 같은 패턴입니다: 무언가를 만들고, 정말로 재사용 가능한 부분을 찾아, 떼어내서, 그 자체로 공개합니다. 세 개 모두 MIT이며 지금 바로 설치할 수 있습니다.
braillecanvas v0.4.0 · MIT
점자는 문자 칸 하나당 2×4개의 점을 다루므로, 80×24 터미널은 실제로 160×96 캔버스입니다. 이것이 렌더링과 ASCII 아트의 차이입니다.
흥미로운 부분은 색상입니다. 각 셀은 두 가지 색을 가집니다. 켜진 점의 색과 빈 공간의 색입니다. 그래서 피부와 하늘처럼 경계에 걸친 셀도 색을 평균 내어 탁하게 뭉개지 않고 경계를 유지합니다. 이 이미지에서 점당 평균 색상 오차는 45.7에서 21.3으로 줄어듭니다.
고정된 디더 그리드에서 패턴을 가져오는 대신 셀마다 어떤 점을 켤지 선택하면, 질감 없는 셀이 35.1%에서 1.6%로 줄어듭니다.
자체 README에 명시된 두 가지 한계: 약 90열 미만에서는 사진이 제대로 표현되지 않으며, 흑백으로는 이 사진을 아예 렌더링할 수 없습니다. 그녀의 얼굴은 휘도 159, 뒤의 하늘은 192로 측정되므로, 1비트 렌더는 구조적으로 실루엣이 됩니다.
skymaths v0.1.2 · MIT
의존성 없는 위치 천문학: 태양, 달, 행성, 박명, 출몰. TerraFirma의 천체력에서 추출한 뒤 수정했습니다: 사용하던 Espenak–Meeus 다항식은 1900–1920년에 대해서만 공표된 것인데 1986년에 적용되고 있었고, 그 결과 1950년 값이 실측 +29 대비 −534초로 나왔습니다. 자기 자신이 아니라 공표된 역서와 대조해서 발견했습니다.
이 사이트에서 돌아가고 있습니다. 다크 모드의 배경은 2026년 8월 13일 페르세우스자리 유성우가 뜨는 밤의 카디프 하늘이며, 여러분의 브라우저에서 계산됩니다. 실제 색으로 표현한 별 5,044개, 달의 위상, 그리고 그 시각 행성들의 위치가 담겨 있습니다. 스크롤하면 하늘이 돌아갑니다.
/proc 데이터(CPU, 메모리, 부하 평균)를 롤링 윈도우에 걸쳐 그립니다. 차트는 사진에 필요한 90열 하한보다 훨씬 좁은 폭에서도 동작합니다. 이미 고대비이기 때문입니다.지금 이 페이지에서
아트는 생성되며, 시드는 빠져나갈 수 없습니다.
이 사이트의 모든 아트, 위의 히어로, 파비콘, 소셜 카드, 아바타는 PANTHEON 자체 생성기에서 나옵니다. 결정론적이고 시드 기반입니다: 같은 시드는 매번 같은 이미지를 만듭니다.
양쪽에 동일한 계약
서버 측 엔진이 소셜 카드와 테넌트 사이트를 렌더링하고, 브라우저 엔진이 지금 보고 계신 애니메이션 버전을 그립니다. 규칙은 같습니다: 시드를 넣으면 재현 가능한 아트가 나옵니다.
구조적으로 인젝션에 안전
시드는 PRNG에만 들어가고 다른 곳에는 쓰이지 않습니다. 마크업이나 스타일에 삽입되는 일은 없습니다. 실제로는 페이로드인 테넌트 이름은 다른 그림을 그릴 뿐, script 태그를 그리지는 않습니다. 시스템의 나머지 부분과 같은 본능을 장식에 적용한 것입니다.
읽기만 하는 게 아니라 설치 가능
여섯 가지 보장, 추출하여 공개.
각 패키지는 PANTHEON에서 하나의 검증 가능한 약속으로 떼어 낸 뒤, 독립적으로 설 수 있도록 PyPI에 올렸습니다. 적대적 AI 에이전트(직접 실행, 독립적이지 않음)가 한 줄씩 검토해 실제 결함을 찾아냈습니다. 아래 버전은 그 수정 이후의 것이며, 각각 빌드 로그를 믿는 대신 레지스트리에서 깨끗한 환경에 설치하고 리뷰어의 재현 절차를 다시 실행해 검증했습니다.
pantheon-guardrails v0.3.2 · Apache-2.0
LLM 판정자를 고위험 응답에만 쓰고, 그 판정자가 생성 모델과 다른 모델이어야 하도록 요구해 둘이 같은 맹점을 공유하지 않게 하는 헌법 채점기. 이전에는 범위를 벗어난 점수를 위쪽으로 고정했습니다: {"clarity": 99}를 반환한 판정자는 만점 1.0을 받아 모든 임계값을 통과했습니다. 가드레일이 열린 채로 실패(fail open)한 것입니다. 이제는 예외를 던지거나, 멈추거나, 엉터리 값을 반환하는 판정자는 명시적인 평가 실패로 처리되어 기본적으로 차단됩니다.
pantheon-ssrf-guard v0.2.1 · Apache-2.0
DNS 리바인딩에도 버티는 2계층 SSRF 이그레스 가드: 연결 시점에 소켓이 실제로 도달한 IP를 다시 확인하므로, 공개 주소로 해석된 뒤 루프백이나 클라우드 메타데이터로 리바인딩되는 호스트는 거부됩니다. 리뷰에서 오프너가 여전히 file:// URL을 읽는다는 사실이 발견되었습니다. Python이 기본적으로 다른 스킴에 대한 핸들러를 설치하기 때문입니다. 이제 경계에 리다이렉트를 포함한 명시적인 http/https 허용 목록이 있으며, 환경 프록시는 요청하지 않는 한 꺼져 있습니다.
pantheon-tool-sanitizer v0.3.0 · Apache-2.0
신뢰할 수 없는 MCP 도구 텍스트가 에이전트 프롬프트에 도달하기 전에 도구 프로토콜 마크업과 유니코드 스머글링을 제거합니다. 범위는 솔직하게 한정합니다: 일반 문장 형태의 인젝션을 막는다고 주장하지 않으며, 이는 문자열 문제가 아니라 아키텍처 문제입니다. 리뷰에서 나온 두 가지 수정: 256 kB 적대적 입력이 CPU 시간 26초를 소모했는데 이제는 즉시 거부되며, "Read\nthe\tfile"이 더 이상 "Readthefile"로 바뀌지 않습니다. 줄바꿈은 단어 경계이기 때문입니다.
credit-ledger v0.3.0 · Apache-2.0
Postgres 위에 약 150줄로 구현한 초과 인출 방지 계량: 잔액 50에 대해 100건의 병렬 청구를 하면 정확히 50건이 성공하고, 웹훅 재전송에도 정확히 한 번만 청구되며, 격리는 행 수준 보안으로 강제됩니다. 게시된 빌드는 한때 음수 청구를 받아들여 고객에게 돈을 지급했고, 컬럼 정밀도보다 작은 금액도 받아들여 성공을 보고하면서 0.0000을 청구했습니다. 이제 하나의 금액 규칙이 모든 경로를 다루며, 이미 존재하는 데이터베이스를 위한 테스트된 마이그레이션도 있습니다.
pantheon-ical v0.3.1 · Apache-2.0
예약 캘린더용 왕복(round-trip) iCal (RFC 5545) 처리를 200줄 미만으로 구현했습니다. 누락된 바쁨 구간은 비어 있음으로 읽히므로, 아무 신호 없이 실패하는 것이 위험한 실패입니다: 너무 큰 캘린더는 잘라내지 않고 거부하며, 한도를 넘는 반복 규칙은 짧은 목록을 반환하는 대신 넘었다고 알립니다. 마지막 수정은 결과뿐 아니라 작업량에도 한계를 두었습니다: 악의적인 한 줄짜리 규칙이 거부되기 전까지 76초 동안 34백만 개의 발생 항목을 만들었지만, 이제는 401에서 멈춥니다.
위의 모든 수정은 같은 방식으로 이루어졌습니다: 먼저 결함을 재현하고, 증상이 아니라 경계를 고치고, 버그를 다시 넣으면 새 테스트가 실패한다는 것을 증명합니다. 실패할 수 없는 테스트는 증거가 아닙니다.
기반 기술
스택은 평범합니다. 경계는 그렇지 않습니다.
Python 3.12, FastAPI, Postgres, Redis, Vite 기반 React, nginx 뒤의 Dockerfile 하나. 이 중 어느 것도 감탄할 만한 결정은 아닙니다. 중요한 곳에 주의를 쏟을 수 있도록 고르는 부품들입니다.
146개 파일 · 14,002줄
pantheon-core: 기반 계층입니다. 계약상 도메인 비종속입니다. residents나 bundles에서 import할 수 없으며, 그렇게 하면 독립된 두 검사가 CI를 실패시킵니다.
파일 210개 · 24,216줄
38,816줄의 Python에 대한 테스트. 저는 구현을 직접 작성하지 않으므로, 테스트 스위트는 안전망이 아닙니다. 그것이 명세이며, 제가 실제로 작성하는 산출물입니다.
다섯 계층, 하나의 방식
architect · runtime · guardrails · substrate · primitives. providers는 의도적으로 스택 밖에 두었습니다. 두 계층 아래에 동시에 위치하기 때문이며, 계약은 이를 억지로 맞추지 않고 명시적으로 밝힙니다.
그 경계 덕분에 여섯 개의 구성 요소를 떼어 내 독립 라이브러리로 공개할 수 있었습니다. 추출 작업은 대부분 애초에 아래 계층에 접근하는 것이 허용된 적 없는 파일들을 옮기는 일이었습니다. 제가 잘못 판단했던 부분을 포함한 자세한 이야기 →
이 작업에 대해 무엇이든 물어보세요.
- Isaac은 어떤 역할을 찾고 있나요?
- 이 중 무엇이 프로덕션에서 실행되고 있나요?
- 그가 찾아서 고친 실제 버그를 보여 주세요