AI-Native 시리즈 · 슈퍼 레포
레포 17개를 현관문 하나로 엮었다. 게이트를 통과하지 않으면 아무것도 초록불이 켜지지 않는다.
1분 요약 — 이 글에서 얻어갈 것
펜과 캔버스 앱에서 영감을 얻어, 레포 17개를 하루 만에 슈퍼 레포 하나로 엮었다 — 그 앱을 그대로 베끼는 건 법적으로 금물이다. 이 작업을 굴러가게 한 규칙은 단 하나였다: 자기 게이트를 통과하지 않은 위성 레포는 절대 초록불이 켜지지 않는다는 것. 체인 01: 손으로 그린 스케치가 건축 검사 다섯 가지를 통과한 평면도로 끝나며, exit 0을 받는다.
펜과 캔버스 앱에서 영감을 얻어, 태어날 때부터 초록불인 슈퍼 레포를 하루 만에 지어냈다 — 그 앱을 그대로 베끼는 건 법적으로 금물이다. 전체 설계는 단 하나의 규칙으로 요약된다: 증거 없이는 배지도 없다. 약 6분 분량.
문제: 레포 24개, 그런데 현관문이 없다
나는 어떤 사람들이 강박적으로 메모를 하듯, 강박적으로 레포를 만든다. 디자인 도구, 리서치 도구, 머니 OS, 커리어 OS, 전략 OS. 하나하나는 다 잘 작동한다. 그런데 모아 놓으니 잡동사니 서랍이 됐다 — 나조차 I 어떤 레포가 어떤 질문에 답하는지 늘 기억하지는 못했다. 자기 도구를 쓰는 데 사람이 만든 색인이 필요하다면, 그건 제품군이 아니다. 그냥 무더기다.
해결책은 하루짜리 빌드였고, 이름은 allin-anything이었다: 이 슈퍼 레포의 유일한 산출물은 검증된 표 — 17개 위성 레포의 레지스트리로, 각 레포는 무엇을 할 수 있는지, 그리고 더 중요하게는 그 주장을 기계가 실제로 얼마나 검증했는지에 따라 라벨이 붙는다.
영감의 시작은, 뜻밖에도 펜이었다
계기가 된 것은 penecho — 오픈소스 캔버스 앱으로, 여기서는 손으로 써서 AI에게 건넨다: 방정식, 다이어그램, 공간 스케치까지. 잉크가 들어가면 구조화된 초안이 나오고, 그 초안은 사용자가 수락하기 전까지 확정된 작업과 분리되어 있다. 물리적 제스처가 들어가고 디지털 지능이 나오며, 그 사이에 휴먼 게이트가 있다. 다른 누군가가 만든 앱 하나가 이렇게, 내 레포 패밀리 전체의 테제를 고스란히 담고 있었다.
다만 한 가지 걸림돌이 있었다: penecho는 AGPL 라이선스다. 그 코드를 내 레포에 그대로 가져오는 건 법적으로 위험할 뿐 아니라 설계적으로도 게으른 짓이다. 그래서 오히려 이것이 설계 자체의 첫 시험대가 되었다: 위성은 포인터다. 고정된 커밋 SHA이자 확인된 사실들의 다이제스트다 — 코드를 그대로 복사해 온 것은 결코 아니다. 나는 패턴만 가져오고, 출처를 밝히고, 그들의 코드는 원래 있던 곳, 즉 업스트림에서 그대로 실행한다.
열다섯 살도 따라갈 수 있는 멘탈 모델
엄격한 문지기가 있는 클럽을 떠올려보라. 들어오고 싶은 모든 레포는 세 가지 색 중 하나의 손목띠를 받는다:
- ⚪ 후보(Candidate) — 명단에 이름만 올린 상태다. 이름과 역할은 부여됐지만, 검증된 것은 하나도 없다. 딱 그뿐이다.
- 🟡 다이제스트(Digested) — 누군가 실제로 신분증을 확인해준 상태다: 특정 커밋에 고정된 사실들을 담은 다이제스트 파일이 존재하고, 확인되지 않은 사항은 unconfirmed.
- 🟢 통합 완료(Integrated) — 말이 아니라 실제 실행으로 증명한 상태다: 자체 테스트 게이트가 이 머신에서 돌아가 exit 0을 냈고, 프런트 도어가 이 레포로 라우팅된다.
문지기는 분위기가 아니라 코드다. 검증 규칙은 증거 파일이 디스크에 존재하지 않는 한 어떤 상태 승급도 거부한다. README의 표는 레지스트리로부터 자동 생성되며, 둘 사이에 어긋남이 생기면 CI가 실패한다. 첫날 기준으로 9개 위성 중 7개가 정직하게 흰색이었다 — 그리고 README는 그 사실을 그대로 적는다. 실제보다 좋게 보이는 표는 신뢰할 수 없는 표이기 때문이다.
체인 01: 손그림이 검사를 통과하는 평면도로 끝나기까지
이 프로젝트 전체가 내건 약속은 "디지털그리고 물리적 세계와의 올인원 상호작용"이므로, 마일스톤 3는 그 경계를 가로지르는 체인이어야 했다. 의도는 이렇다: "손으로 방 배치도를 스케치하면, 그것이 실제로 지을 수 있는지 검증한다."
결정론적 라우터 — 라우팅에 관한 모든 주장은 pytest로 검증되는데, penecho를 벤더링거부해야 한다는 주장도 예외가 아니다 — 는 체인을 이렇게 선언한다: 잉크는 penecho, 물리 연산은 design-anything. 그리고 물리적 절반이 실제로 실행됐다:
$ python3 pipeline/construction_gate.py studio.json
PASS C1_topology: 4 rooms, 4 openings, all resolve
PASS C2_clearances: all openings meet table minima
PASS C3_habitability: areas, dimensions, daylight, ceiling OK
PASS C4_egress: all rooms reachable; entry door present
PASS C5_module_grid: 100% of coordinates on the 100mm module
READY: studio-flat (design-sanity gate, not a permit or PE stamp)
종료 코드 0. 방 4개, 28.5㎡짜리 배치도가 토폴로지, 여유 공간, 거주 적합성, 대피 경로, 그리드 검사를 모두 통과했다 — 그 레포가 무언가를 "준비됐다"고 부를 때 쓰는 바로 그 게이트다. 이 실행 덕분에 design-anything은 🟢로 승격됐다. penecho는 일부러 🟡로 남겨뒀다: 스케치 단계는 사람이 하고 업스트림에 속한 일이라서, 기계가 그걸 검증한 척하는 순간 이 표가 파는 유일한 상품인 신뢰가 오염되기 때문이다.
레포는 스스로를 감사한다 — 나까지도
이 레지스트리의 규율은 내 기분에 좌우된다면 일주일 안에 썩어버릴 것이므로, 레포는 자기 운영 자체를 채점한다: 아홉 가지 원칙(스펙은 데이터로, 증거 없으면 인정 안 함, 만든 사람은 검사자가 될 수 없음, 새틀라이트는 절대 벤더링하지 않음…) 각각이 실행 가능한 체크로 뒷받침되며, CI에서 90/100을 기준으로 게이트가 걸린다. 측정되지 않은 원칙은 통과로 치지 않는다 — 그것은 게이트를 막아버린다. 지금은 100/100으로 돌아가고 있고, 어느 날 지름길 하나가 원칙 하나를 후퇴시키면 빌드는 내 앞에서 실패한다.
이 정직함은 양날의 검이었다. 빌드 도중 GitHub의 CI 큐가 말썽을 부렸다: 로그도, 단계도, 어노테이션도 전혀 없이 작업들이 죽어버렸다. 마침 액션 버전 두 개를 막 올린 참이라, 그 증거만으로는 "그쪽 인프라 문제"인지 "내 변경 사항" 때문인지 구분할 수 없었다. 그래서 택한 해결책은 지루하지만 정직한 방법이었다 — 마지막으로 초록불이었던 설정 그대로 되돌리고 다음 실행이 판단하게 두는 것이었고, 변경 로그에는 이를 진단이 아니라 롤백이라고 적었다. "아직 모르겠다"고 글로 남기는 것, 그것도 하나의 기능이다.
굳이 슈퍼 레포까지 만드는 이유
대안이 결국 업계의 기본값, 즉 통합 기능을 그저 주장하는 랜딩 페이지뿐이기 때문이다. 문지기를 둔 레지스트리는 이를 뒤집는다. 기능 하나를 추가하는 비용은 YAML 항목 하나뿐이고, 이 등급 체계는 모든 사용자에게 — 미래의 나를 포함해서 — 각 항목을 얼마나 믿어야 하는지 정확히 알려준다. 지금 이 표는 초록 2개, 노란색 10개, 흰색 5개로 아직 작다. 그리고 발행 다음 날, 레포 자체의 헌장 게이트가 바로 이 문단에서 내가 초록 개수를 과대 집계한 걸 잡아냈다. 게이트가 이긴다. 글은 고쳐진다. 하지만 그 표에 찍힌 색깔 하나하나는 모두 실행으로 얻어낸 것이고, 그것이야말로 누적될 수 있는 유일한 종류의 표다.
일반화되는 규칙은 이렇다: 자신의 시스템이 다른 시스템들을 통합한다면, 그들의 주장을 통합하지 말고 그들의 exit code를 통합해야 한다.
AI-Native 시리즈 더 보기
이 모든 글은 홈페이지 Writing 섹션에 모여 있다.
AI-Native 시리즈의 일부다. goal-10x 루프로 만들었다: 연구 → 습득 → 코칭 → 그린까지 밀어붙이기 → 자기 개선. 믿어야 할 것은 라벨이 아니라 아티팩트다. Publish 버튼을 쥔 건 나 자신이다.