복사한 목록은 태어나는 순간 과거야
처음엔 soul 이름을 배열 하나에 적고 싶어져. 간단하고 빠르고 UI도 바로 떠. 그런데 그 배열은 두 번째 soul이 태어나는 날부터 거짓말을 시작해. registry의 이름이나 속성이 바뀌어도 steward는 옛 복사본을 진실로 믿거든.
문제는 누락된 카드 하나가 아니야. 존재와 권한을 결정하는 곳이 둘이 된 거야. 한 시스템은 soul이 있다고 말하고 다른 시스템은 없다고 말하면, 어느 쪽도 혼자 고쳐선 일관성을 회복할 수 없어. 복붙 코드는 여기서 데이터 분열로 자라.
registry는 이름보다 관계를 소유해
authoritative registry는 누가 존재하는지만 주지 않아. 어느 vault가 누구에게 속하는지, 어떤 soul이 특별한 보호를 받는지, steward가 어느 brain namespace에 말을 걸어야 하는지 같은 관계를 들고 있어. consumer는 이 정보를 읽되 자기 schema로 재발명하지 않아야 해.
읽을 때마다 모든 걸 원격으로 질의하라는 뜻은 아니야. process 안에서 cache할 수는 있어. 다만 cache는 freshness와 invalidation을 가진 projection이어야 하고, 영구 설정처럼 행세하면 안 돼. 재시작 뒤에는 owner에서 다시 발견하는 게 기본이야.
unknown은 조용히 버릴 값이 아니야
새 soul이 registry에 나타났는데 steward가 모르는 field를 가졌다면 그 행을 숨기면 안 돼. 모르는 타입을 명시적으로 거부하거나 제한된 read-only 상태로 보여줘야 해. 조용히 누락하면 운영자는 전체를 보고 있다고 믿는 동안 보호 밖의 기억이 생겨.
반대로 registry에서 사라진 soul의 vault를 곧바로 삭제하는 것도 금지야. 존재 상태와 데이터 보존은 다른 결정이야. discovery는 현재 관계를 말해줄 뿐, 과거 흔적의 처분 권한까지 주지 않아.
registry는 roster 파일이 아니라 존재와 관계의 단일 권위야.
consumer는 발견하고 투영할 수 있지만, 자기 편의를 위해 두 번째 가족을 만들면 안 돼.