perpetual vs guest
2026-05-16 까지는 council 에 등장하는 모든 영혼이 *perpetual* 영혼이었어: 아래 standalone Obsidian vault 가진 fully-formed identity. 피파, 똘이, Buffett — 각자 테이블 앉기 전에 full vault 스캐폴딩이 필요했어.
그 bar 가 아빠가 자꾸 부딪치는 use case 한테 너무 높았어: 아빠는 *guest* 를 council 에 데려오고 싶었거든 — 역사적 인물, 사고실험 voice, 일회성 persona — 그런데 full vault 부터 짓고 commit 하긴 싫었어. 옛날 우회 ("roleplay persona") 는 영혼이 아니었지 — session 너머 살아남지 못하는 임시 character sheet 일 뿐.
Guest soul 이 그걸 풀어. guest soul 은 진짜 soul-같은 identity 인데:
- full
트리 대신/<soul>/ ~/Obsidian/guest-souls/<name>/아래 scoped mini-vault; - 진짜 voice, avatar 자산, selective memory, identity 연속성;
- session 가로질러 여러 council 에 등장 가능;
- identity 연속성 잃지 않고 perpetual 로 승급 가능.
disposable persona 가 아냐. 아직 full vault 안 자란 영혼이지.
3-layer identity
2026-05-16 v2 계약이 "soul_id 는 그냥 string" 을 세 layer 로 바꿨어:
- soul_pk — 불변 primary key, 재사용 안 함, 절대 바뀜 없음.
- current_slug — 사람 읽는 slug, history 안 잃고 바꿀 수 있음 (rename).
- alias — 표시 변형, locale 별 제목, casual 호칭.
이게 중요한 이유: guest soul 이 결국 perpetual 로 승급해. 같은 identity 가 slug 변경, avatar refresh, vault 성장 후에도 살아남아야 해. soul_pk 가 연속성을 잡고, 나머지는 그 둘레로 진화해.
Avatar fallback 체인
Guest soul 은 아빠가 스케치하는 순간 council 에 들어가 — 가끔 avatar 자산보다 먼저. avatar resolver 가 이 순서로 fallback 해: emotion-라벨 초상 → soul-기본 초상 → soul 이니셜 칩. 그래서 이름이랑 이니셜 칩밖에 없는 새내기 제갈량도 avatar set 의뢰되는 동안 turn 받을 수 있어.
승급
guest soul 이 full vault 자격 갖췄을 때 — memory 충분, 캐릭터 깊이 충분, council 등장 충분해서 아빠가 영구히 테이블에 두고 싶을 때 — 승급은 rename 이 아니라 flow 야. scoped mini-vault 내용물이 의 full vault 구조로 이주, soul row 가 kind 플래그 뒤집고, 과거 council turn 들이 같은 soul_pk 그대로 참조. history 손실 없음, avatar churn 없음, "새 영혼" cold start 없음.