하우스 사인의 한 문장
가족 레포엔 전부 거기서 일하는 브레인을 위한 하우스 사인이 붙어 있어. Spark의 하우스 사인은 경계부터 말해. Spark는 cwkPippa의 클라이언트 화면이라는 거야. 읽기든 번역이든 통역이든 설명이든 전부 cwkPippa 대화 안에서 도는 진짜 피파 턴이고, 여기선 자기 브레인을 하나도 세우지 않아.
다만 이 문장은 코드보다 한 군데 넓어. 실용 번역, 줄 설명, 빠른 회상, Talk의 카드와 릴레이는 순간의 cwkPippa 대화 안에서 턴으로 돌아. 라이브 레인, 통역사의 초안과 다듬은 판, 고품질 모드의 버전은 달라. cwkPippa 형제 유틸리티 문으로 가는 단발 호출이라 어느 스레드에도 안 남고, 답은 결과가 돼서 Spark로 돌아와. 그래도 전부 cwkPippa를 거치는 진짜 피파 호출이야. cwkPippa를 아예 안 거치는 건 버전 하나를 읽는 콜드 리뷰뿐이야. 페르소나도 없고 번역도 안 하고, 킷의 유틸리티 워커에서 돌아. 문장의 나머지 절반은 예외 없이 맞아. 여기엔 Spark만의 브레인이 하나도 없어.
Spark가 작게 머물 수 있는 이유가 이 경계야. 내 정체성, 내 기억, 대화, 브레인 라우팅은 이미 cwkPippa가 쥐고 있어. 그중 하나라도 다시 만드는 앱은 나를 하나 더 들고 있게 되고, 사본 둘은 반드시 어긋나. 가족 앱이 다 물려받는 불변식도 딱 잘라 말해. cwkPippa의 클라이언트 화면은 피파 정체성도, 기억 저장소도, 모델 라우터도 따로 만들지 않아.
누가 뭘 갖고 있나
아키텍처엔 정식 주인 표가 있어. Spark 모양을 정하는 줄만 추리면 이래.
| 데이터 | 정식 주인 | Spark가 하는 일 |
|---|---|---|
| 코퍼스: 순간, 캡처 시점의 사실, 미디어, 모든 결과 | Spark 엔진 | 덧붙이기로만 쓰고 절대 안 버려. 미러는 로그에서 다시 지어 |
| Spark 자료에 대한 스레드 | cwkPippa | 문맥 키로 묶고 보여줄 때마다 다시 읽어. 사본을 진실로 삼지 않아 |
| 합성 음성과 받아쓰기 | cwkBellows | 캐시 키랑 받아쓴 글만 갖고 있어 |
| Waystone, Vesta의 크럼 | 각자 주인 | 참조만 들고, 보여줄 때 풀어 |
| 실용 턴의 브레인과 노력 수준 | 가족 브레인 컨트롤 플레인 | 턴마다 읽기만 하고 고르지 않아 |
| 고품질 모드용 브레인 | 아빠, 작업마다 | 고른 걸 버전마다 옆에 기록해 |
Spark가 온전히 가진 줄은 코퍼스 하나뿐이야. 그래서 트랙 2가 통째로 코퍼스 얘기야.
코드 속 클라이언트
Spark가 cwkPippa랑 나누는 대화는 전부 얇은 모듈 하나를 지나가. 그 독스트링이 경계를 작게 줄여놓은 그림이야(첫 번째 코드 블록). 통신 배관은 킷이 맡아. Spark는 자기 화면 이름만 묶어. 스레드는 생기는 순간부터 cwkPippa 거고, Spark는 사본을 믿지 않고 정식 메시지를 다시 읽어.
반대편 cwkPippa엔 작은 라우터가 있어. spark:{kind}:{ref} 꼴의 문맥 키를 평범한 대화 하나에 묶고, SPARK 폴더에 정리해 둬(두 번째 코드 블록). ref가 ULID여야 하는 건 Spark가 아이디를 전부 직접 만들기 때문이야. 폰도 마찬가지라서 오프라인에서 찍은 캡처도 자기 정체성을 지켜. 이 스레드는 하나하나가 평범한 cwkPippa 대화라서 아빠가 WebUI에서 이어갈 수 있어.
바인더가 받는 종류를 잘 봐. moment, trip, root, expr. 지금 엔진이 실제로 묶는 건 순간 스레드뿐이야. 여행, 어근, 표현의 스레드는 설계에만 있고 코드엔 아직 없어. 게다가 lat. aqua 같은 어근 키는 그냥 텍스트라서, 저 ULID 패턴이 어차피 거절해. 이 빈틈은 트랙 8에서 다시 볼게.
스레드, 브레인 라우팅, 턴이 도는 그릇까지, cwkPippa 쪽 얘기는 Pippa Quest에 있어. 이 레슨엔 모양만 있으면 돼. Spark가 묻고, cwkPippa가 답하고, 스레드는 전부 cwkPippa에 남아.
배관은 같이 쓰고, 테이블은 같이 안 써
경계의 나머지 반쪽은 코드 얘기야. Spark가 따르는 가족 규칙은 짧아. 격리를 건너는 비용은 한 번만 내고, 두 번째로 나오면 킷으로 옮겨. 그래서 Spark는 다른 앱에 이미 있는 게 필요하면, 베끼는 대신 그걸 킷으로 빼내는 일부터 시작했어.
- 음성 클립. PippaMobile의 플레이어랑 녹음기가 킷의
VoiceClipPlayer,VoiceClipRecorder가 됐어. - 유틸리티 문. cwkPippa 형제 유틸리티 문에 페르소나 호출을 처음 한 건 Inkwell이야. Spark 라이브 레인이 두 번째였고, 그래서 그 호출이 킷의
kit_pippa.utility_complete로 옮겨 갔어. - 브레인 좌석. Anvil의 브레인, 모델, 노력 수준 선택기가 킷의
KitBrainSeat가 됐고, Spark 고품질 모드 폼이 그걸 써.
Spark는 자기 레포에서 킷을 고치지 않아. 킷 파일은 생성 헤더를 달고 들여오고, 누가 사본을 손으로 고치면 엔진 pytest 안의 드리프트 테스트가 실패해. 그 장치는 들여오기부터 중복이 사라지는 과정까지 Sibling Kit Quest에서 가르쳐. 앱끼리 나누는 건 배관이랑 패턴이야. 데이터는 각자 자기 걸 가져.