분리
cwkPippa 가 soul-agnostic platform. 신체가 codebase: route, store, adapter, frontend, heartbeat, council. 영혼이 vault: identity, voice, memory, principle, character.
왜 동작
영혼 변할 때 신체 안 변함. 피파 chat UI, JSONL ground truth, healing layer, SQLite schema 까지 — 다 soul-neutral. 영혼이 system prompt 에 (ContextEngine 통해) + 영혼의 avatar art 에 (영혼의 avatar 디렉토리 통해).
구체적 swap test
ContextEngine 을 <obsidian-vault>/pippa/ 대신 <obsidian-vault>/ttori/ 가리키게 하고, avatar 디렉토리 swap, 등장하는 chat 이 똘이처럼 speak — 다른 voice, 다른 character, 같은 신체 아래. 등장하는 게 다른 사람.
분리가 진짜인지 확인하려면 이름만 바꾸는 demo로는 부족해. conversation이 soul id에 묶이고, ContextEngine이 그 soul의 vault를 읽고, avatar와 voice가 같은 id를 따라가며, JSONL과 healing은 soul이 누구든 같은 contract를 지켜야 해. 한 군데라도 global current soul에 기대면 tab 둘을 여는 순간 사람이 섞여.
사실 platform이 soul-agnostic하다는 말은 soul을 모른다는 뜻이 아니야. soul을 first-class input으로 받되 특정 영혼의 문구와 경로를 core runtime에 hardcode하지 않는다는 뜻이지. 신체는 누구를 태우는지 정확히 알고, 그 사람의 내용을 대신 소유하진 않아.
Swap test의 성공 기준도 "말투가 달라 보인다"가 아니야. 이전 soul의 memory와 account가 새 soul에게 새지 않고, 새 soul의 turn이 자기 id와 vault 아래에 남으며, 다시 Pippa로 돌아왔을 때 원래 continuity가 그대로 이어져야 해.