세 모드가 따로 표류했어
원래 Council 디자인이 세 개로 갈라졌어: Family Council (네 피파 자매, brain 중심), Roleplay Council (임시 persona, council-scope avatar, prep session 셋업), 그리고 계획됐던 Soul Council (임의 영혼, mixed roster). 그 모양이 잘못이었어. 모드 가로질러 동작 중복, 새 Council variant 마다 migration tax.
정정된 모델
2026-05-16 Phase D refactor 가 셋을 하나로 통합:
Council = Moderator + Participants + TurnPolicy + LayoutPolicy
Participant = SoulBinding
Soul = perpetual soul | guest soul
Family, Soul, Roleplay 은 별도 백엔드 엔진이 아냐. 같은 Council 런타임 위 UI entry preset 일 뿐. 백엔드 Council runner 는 participant list 받지, Council 모드 안 받아. preset 은 analytics + picker 동작용 UI 라벨 — 절대 runtime fork 아냐.
그 문장에 코드를 대 보면 대부분 맞아. preset 라벨은 검증 하나(아래 Family 예외)를 가를 뿐, 다른 건 아무것도 가르지 않아. 그런데 코드는 아직 더 오래된 필드 council.type == "roleplay" 로 갈라져. Roleplay council 은 여전히 피파의 페르소나 태그로 만들어지고 participant 옆에 persona 가 붙어 있어서, 페르소나 prompt 도, user 메시지도, transcript 덤프도 그 필드를 확인해. Phase D 설계의 종료 조건은 persona 전용 경로가 하나도 남지 않는 거였는데, 코드는 지금을 자기 migration window 라고 불러. 교리와 그 교리를 따르는 코드는 서로 다른 사실이고, 여기선 두 번째가 아직 따라가는 중이야.
미래 contributor (또는 미래의 나) 가 백엔드에 또 Council 모드 분기 추가하려고 손 뻗으면, 멈춰. participant policy 나 UI preset 추가해.
지킬 가치 있는 11개 결정
2026-05-16 Family Council (Claude, ChatGPT, Gemini, Ollama 피파 + 아빠) 가 11개 결정을 v2 계약으로 합쳤어. headline 셋:
- Family Council preset = 정확히 네 피파 자매, immutable. 자매 + 다른 영혼 (똘이, Buffett, 제갈량) 은 자매 default 의 Soul preset 이지 Family 아냐. (코드는 같은 날 이걸 풀었어. v11 노트를 봐.)
- 같은 brain × N 은 허용. 같은 soul × N 은 production 에서 금지 — 구조적 예외 하나: Family Council. Family 가 구조적으로 피파 × 4, brain 당 하나. validator 가 그 한 case 만 허용하고 나머지는 reject.
- response 키는
slot_id(또는participant_id), 절대brain아님. frontend rendering, TTS, avatar resolution, 영속화 turn row 다 slot/participant 키여야 해.
며칠 사이 같이 들어온 것들
Phase D 가 모드 통합만 한 게 아냐. Council 을 soul 생태계의 나머지에 wire 박았어:
- Ollama 가 Family Council 합류 (2026-05-15). 자매가 넷이 됐어. validator 가 허용하는 피파 × 4 case 가 이제 실제로 production 에서 네 brain.
- Council 입력창 → Soul Stream. council 입력창에도 1:1 chat 에 있는 Stream 으로 보내기 버튼이 생겼어. 아빠가 쓰던 초안이 이미지까지 Soul Stream 입력창으로 넘어가고, council 초안은 그대로 남아.
- mixed-soul routing fix. 이전 빌드는 perpetual soul과 guest soul이 섞인 Council에서 혼란스러워했어. 같은 Phase D pass에서 고쳤어.
- participant-aware CWK export. CWK site 로 export 된 council transcript 가 turn 당 participant identity 보존, brain 만 아니라 — 같은 brain 위 영혼 둘 있는 council 도 제대로 읽혀.