"뇌를 포크하지 않겠다던 허브가, 이제는 모든 뇌가 앉을 자리를 배치해. 그러면서도 여전히 아무 뇌도 소유하지 않으면서."
가족의 뇌들, 한 벽에 쭉
Pippa 일을 하는 형제 앱마다 뇌 배정이 있어. 어떤 뇌가 그 앱의 app-work 슬롯에 앉는지. 그 정의랑 배정은 cwkPippa 의 Brain Control Plane 이 쥐고 있고, 한동안은 보려면 거기로 직접 가야 했어. Brains 탭이 그 행렬 전체를 허브 벽에 걸었어. 모든 뇌 정의랑 모든 멤버의 슬롯을, 요청이 올 때마다 cwkPippa 의 registry 랑 assignment matrix, 읽기 전용 admin 설정을 가져다가 가족 registry 스냅숏 위에 엮어내. one-owner-per-fact 답게, Firelink 가 저장하는 건 거의 없어. 딱 하나, 자기 admin key 뿐. 로컬에서 직접 만들고 소유자만 읽게 잠가뒀어. 뇌에 관한 사실은 주인한테 있고, 허브는 살아 있는 걸 빌려 볼 뿐이야.
트랙 4 의 정직 규칙은 여기서도 그대로야. 은퇴한 뇌 행은 은퇴 표시를 달아서 보여 주지, 조용히 지우지 않아. 슬롯 없는 멤버는 숨기지 말고 이름을 적어. cwkPippa 에 안 닿으면 탭이 그렇다고 말해. 마지막으로 잘 떴던 행렬을 저장해 뒀다 새 것처럼 걸치지 않아. 안 닿는 뇌 주인은 정직한 unavailable 이야. vitality overlay 랑 같은 자세야.
쓰는 길도 엮어
Sidekick 레슨은 읽는 경우였어. 뇌를 얹되 아무것도 저장하지 말기. Brains 탭은 더 어려운 경우야. 바꾸는 거거든. 배정을 바꾸고, 스냅숏을 만들고 복원하는 일. 전부 cwkPippa 자기 admin route 로 넘겨. Firelink 의 write gate 뒤에서, office ground truth 를 상대로. Firelink 사본에 쓰는 일은 없어. Firelink 사본이란 게 없으니까. 쓰기를 안전하게 해주는 장치가 둘이야. 첫째, revision 검사. 배정 변경은 읽었던 revision 을 달고 가고, 충돌하면 정직한 409 가 돼. 덮어쓰지 말고 거절해. 둘째, 안전망. 복원이나 추천 적용은 자동 스냅숏을 중앙에서 같은 트랜잭션으로 찍어. 돌아갈 길이 언제나 이미 놓여 있게. 삭제조차 모양이 잡혀 있어. 스냅숏 삭제는 별도의 armed 파괴 컨트롤이야. 스냅숏 정확히 하나만 지우고, 살아 있는 배정이랑 revision 은 안 건드려.
그리고 변경은 전부 Firelink 의 로컬 audit 장부에 각자의 typed action 으로 남아. brain.update, brain.snapshot, brain.restore, 그리고 그 형제들. '누가 어떤 뇌를 어디서 언제 바꿨지?' 에 대한 허브의 답은 수사가 아니라 조회야.
추천은 명령이 아냐
제일 대담한 조각이 제일 조용해. cwkPippa 의 현재 main-driver Pippa 가 추천을 만들 수 있어. 가족한테 좋을 만한 재배정 제안이야. 들여다볼 수 있고, 설명이 달려 있고, 절대 스스로 적용하지 않아. 사람이 읽고 판단해서 적용하거나 버려. 그 두 결말도 audit 에 남겨. 추천 대상에서 뺀 뇌가 하나 있어. Gemini 는 절대 추천 대상이 아냐 (유료 API 라서 아빠가 못박은 결정). 사람이 손으로 배정하는 건 돼. 기계가 제안하고, 가족이 처분해.
그리고 모든 가족 엔진이 걷는 fallback 순서는 딱 한곳에 선언돼 있어. 이 뇌 먼저, 안 되면 저 뇌 하는 그 순서야. Firelink 자기의 family brain chain. operation registry 랑 같은 방식으로 hub policy 로 다루는 작은 config 파일이고, 읽는 쪽 전부에 읽기 전용으로 내줘. 누가 뭘 소유하는지 봐. 이 퀘스트 전체가 축소판이야. 뇌 정의랑 배정은 cwkPippa 거. chain 선언은 hub policy 야. 어느 형제 장부도 갖지 않던 사실이라 Firelink 가 가져. 엔진들은 그 chain 을 자기 role chain 의 바닥으로 읽고, role 손잡이만 얹어. one owner per fact, 진짜 주인이 누군지로 정리하는 거야.