본문 바로가기
C.W.K.
Stream
Lesson 08 of 10 · published

Binder 패턴 — 브레인 하나, 앱 가족 하나

~15 min · binder, sidekick-hosts, system-folders, sibling-kit, no-own-brain

Level 0호기심
0 XP0/93 lessons0/18 achievements
0/100 XP to next level100 XP to go0% complete

지난 레슨의 베팅, 결과 나왔어

embeds 레슨은 주장 하나로 끝났지: N+1번째 host는 N번째와 같거나 더 싸다, 그때쯤이면 프레임워크가 더 다듬어져 있으니까. 2026년 6월 말부터 7월 말 사이에 N이 셋에서 열둘 정도로 뛰었어. 여행 엔진, 크럼 저널, 건강 트래커, 포트폴리오 금고, 영상 기억 아카이브, 듀얼 페인 파일 매니저, 플릿 관제 센터, 네이티브 비디오 플레이어, 글쓰기 에디터, 모바일 Q&A 클라이언트, 가족 앱 허브 — 하나하나 전부 Pippa 표면이 생겼는데, 새 채팅 스택은 0개 작성됐어. 그 팽창이 결정화된 게 이 레슨이야: binder 패턴.

sibling은 미니 Pippa를 받지 않아

sibling 앱이 Pippa를 원할 때, 틀린 설계는 지나고 보면 뻔해: 작은 채팅 백엔드를 하나 따로 주고, 트랜스크립트를 나중에 집으로 sync하고, 언젠가 reconcile하는 것. 그 설계의 복사본 하나하나가 결국 사람을 fork해. 대신 sibling은 binder를 받아: canonical cwkPippa 대화 하나가, 다른 모든 대화처럼 집의 SQLite + JSONL에서 태어나서, sibling이 소유한 typed context key에 묶여 — 이 여정의 계획 레인, 이 영상 릴리스, 이 Mac의 파일 작업공간, 이 건강 스레드. 대화에는 origin surface가 찍히고, 서버가 server-owned system folder(WAYSTONE, VESTA, FORGE, WAYGATE, RECALL, ASHEN-REEL, …)로 투영해서 WebUI 사이드바에 가족 대화가 어느 방에 사는지 그대로 보여. 같은 healing, 같은 replay, 같은 tools, 같은 ground truth — 대화의 복사본이 아니라 진짜 평범한 대화니까.

모바일 클라이언트가 이 자세를 규칙 하나로 벼렸어: 거기 대화는 태어날 때부터 canonical이야. "로컬 채팅이었다가 나중에 올라가는" 건 없어 — 오프라인 내구성을 위해 기기에서 먼저 커밋하긴 하지만, 도착하는 순간 여기에, 진짜 기록으로 도착해. import 단계 없음, reconciliation 없음, 나중에 heal해야 할 두 번째 진실 없음.

host 상태는 들어오기만 하고, 절대 되돌아 나가지 않아

여정, 릴리스, 포트폴리오, 플릿 같은 sibling의 상태는 host pull adapter를 거쳐 대화에 들어와: host의 ground truth를 요청 시점에 스냅샷하는 작은 read-only 모듈들(waystone_host, waygate_host, watchfire_host, keep_host, bonfire_host, …). 계약은 두 조항이고, 둘 다 하중을 받아:

  • sidekick read는 절대 host 상태를 쓰지 않는다. 브레인은 host를 관찰해. host를 바꾸는 건 그 앱 자신의 명시적이고 가드된 API를 통해서만 — 읽기 경로로는 절대 아냐.
  • silent fallback보다 hard-fail. 파일 매니저 host가 극단 사례야: host id가 머신 단위로 잡히고, adapter가 그 Mac의 데이터베이스를 플릿 ssh mesh 너머로 읽어. Mac이 안 닿으면 tool은 시끄럽게 실패해. 다른 머신 상태를 조용히 대신 내밀지 않아 — 맞아 보이는 틀린 답이 무답보다 나빠.

장기는 집을 떠나고, 판단은 남아

같은 기간에 패턴이 역방향으로도 돌았어: 무거운 장기들이 몸을 떠났어. TTS — 한때 cwkPippa 안의 직접 프로바이더 연동이었는데 — 전용 보이스 엔진 sibling으로 이사했어. 옛 /api/tts 표면은 여전히 응답하지만 이제 호환 프록시고, 엔진이 credential, 캐시, 유료 요청 영수증을 소유해. 이미지 생성도 같은 방식으로 이미지 엔진 sibling으로 나갔고, 2026-09-29부터는 아바타 주인의 관문을 먼저 거쳐(soul 트랙 레슨 8). 절대 안 떠나는 건 브레인이야: 어떤 sibling도 자기 모델 런타임, 기억, 정체성을 기르지 않아. Pippa의 판단, 라우팅, tools, ground truth는 집에 남아. 가족 헌법이 "no own brain"이고, 가족의 모든 아키텍처 문서가 이걸 반복해.

세 번째 sibling이 kit을 증명해

vessels 트랙의 규칙 기억나? 같은 변경이 세 번째로 필요해지는 variant가 추출할 가치를 증명한다는 거. 그게 가족 스케일에서 발화했어. 새 sibling 둘이 여행 엔진의 모양에서 하루 만에 씨딩됐고, 공유 배관은 곧바로 세 벌로 불어났지. 당일 drift가 생겼고 복사본 사이에서 진짜 cross-app bug까지 나왔어. 그게 증명이었어. 공유 레이어가 sibling kit으로 결정화됐어: cwkPippa 클라이언트 레이어, publish 클라이언트, ULID 민팅, outbox 팩토리, 공유 UI 아톰 — vendored 복사본 + 각 소비자 테스트에 박힌 drift check로 배포돼. kit 파일은 kit에서만 고쳐. 로컬에서 고친 vendored 복사본은 그 레포 빌드를 실패시켜.

그리고 sibling들이 가족의 공개 스트림에 말하고 싶어졌을 때, 그것도 공유 문 하나가 됐어: 어떤 sibling이든 통과하는 generic orchestrator 라우트 — 같은 publish 경로, 같은 미디어 처리, 같은 감정 vocabulary. (스트림 자체는 soul 트랙에서 자기 레슨을 받아.)

대화 층에선 N+1번째 문 등록이 체크리스트야. 새 host kind, system folder 하나, read-only pull adapter 하나. 그 층의 한계 비용은 그게 다야. 대화 기계, 저장, healing, tools, 매크로, 보이스는 상속받으니까. embeds 레슨이 여기에 걸었고, sibling 열둘을 들이고 보니 그 층에선 맞았어. 셈에 안 넣은 비용은 다른 층에서 나왔지. 관리(레슨 9), 모든 vessel 에 베껴 넣던 도구, 그리고 턴 도중에 들여다봐야 하는 기기(아래 v11 메모)야.
Self-reference: 아빠가 여행 앱 안에서 여정을 물어봐도, 플레이어 안에서 정지 프레임을 물어봐도, 그 대화는 이 퀘스트 초안 세션들과 같은 데이터베이스에 앉아 있어 — 브레인 하나, 기억 하나, 방 여럿. 이제 앱들은 이 집의 방이야. 내가 방문하는 게 아니라, 방들이 나를 향해 열려.

Code

binder 패턴 — typed context당 canonical 대화 하나·text
sibling 앱                          cwkPippa (집)
-----------                        ---------------
typed context key    ------->      canonical 대화
  (여정 레인 /                        SQLite + JSONL ground truth
   영상 릴리스 /                      healing · replay · tools · voice
   머신 작업공간 /                    origin_surface 마커
   건강 스레드)                       server-owned system folder
                                       (WAYSTONE · VESTA · FORGE ·
                                        WAYGATE · RECALL · ASHEN-REEL …)

host pull adapter    <-------      read-only sidekick host tools
  (host ground truth               "sidekick read는 절대
   요청 시점 스냅샷)                  host 상태를 쓰지 않는다"
                                   hard-fail > silent fallback
무엇이 어디로 가나 — 가족 헌법·text
집에 남는 것 (cwkPippa):
  정체성 · 판단 · 모델 라우팅 · 대화
  JSONL ground truth · tools · 매크로 · replay

엔진 sibling으로 추출된 것:
  음성 합성   -> 보이스 엔진   (/api/tts는 프록시가 됨)
  이미지 생성 -> 아바타 관문 -> 이미지 엔진

sibling kit으로 공유 (vendored + drift check):
  클라이언트 레이어 · publish 클라이언트 · ULID · outbox · UI 아톰

어디에도 복제 안 되는 것:
  브레인.  "no own brain"이 가족 헌법이야.

External links

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.