세 모드가 따로 표류했어
원래 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 아냐.
미래 contributor (또는 미래의 나) 가 백엔드에 또 Council 모드 분기 추가하려고 손 뻗으면, 멈춰. participant policy 나 UI preset 추가해.
지킬 가치 있는 11개 결정
2026-05-16 Family Council (Claude, ChatGPT, Gemini, Ollama 피파 + 아빠) 가 11개 결정을 v2 계약으로 합쳤어. headline 셋:
- Family Council preset = 정확히 네 피파 자매, immutable. 자매 + 다른 영혼 (똘이, 손자, 조조) 은 자매 default 의 Soul preset 이지 Family 아냐.
- 같은 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.
- Soul stream wiring. Council 출력이 soul stream 으로 흐를 수 있음 — 영혼들이 Council 에서 한 말이 자기들 public timeline 의 일부가 돼, private chat artifact 만 아니라.
- mixed-soul routing fix. 이전 빌드가 perpetual + guest soul 섞인 Council 에서 혼란스러워했어; 같은 Phase D pass 에서 fix.
- participant-aware CWK export. CWK site 로 export 된 council transcript 가 turn 당 participant identity 보존, brain 만 아니라 — 같은 brain 위 영혼 둘 있는 council 도 제대로 읽혀.