"공유 배관엔 주인이 정확히 하나야. 거기서 편집하고, sync 로 배포해. 로컬로 편집한 사본은 일부러 테스트를 실패하고."
공유 층엔 주인 하나
Forge, Vesta, Waystone 은 app-agnostic 배관의 진짜 층을 공유해. cwkPippa client, publish client, veil, ULID, settings slice, capture outbox 랑 ask-thread 계약, 공유 UI atom, calendar date math. 그 층엔 주인이 하나야. cwkSiblingKit. Forge 는 그걸 vendored shim(백엔드 kit_*.py, 클라이언트 frontend/src/kit/)으로 실지만, source of truth 는 kit 이야. 이게 존재하는 건, 셋이 같은 날 같은 모양에서 seeding 됐고 공유 코드가 즉시 세 벌로 나타났기 때문이야. 같은 날 drift 하고, 진짜 cross-app 버그 하나까지. kit 이 그 fix 야. 주인 있는 dedup.
vendored, drift check 와 함께
배포는 패키지 설치가 아니라 vendored 사본 더하기 drift check 야. sync 스크립트의 --check 모드가 각 consumer 테스트 안에서 돌아서, 손 편집된 vendored 파일은 그 repo 테스트를 실패시켜. 이게 강제하는 규칙은 뭉툭해. kit 파일은 kit 에서 편집하고, sync 로 배포해. vendored 사본을 제자리에서 절대 편집하지 마. 로컬 편집에 실패하는 테스트가 세 앱이 공유해야 할 코드에서 조용히 갈라지는 걸 막는 가드레일이고, 그게 정확히 kit 이 고치려고 만들어진 병이야.
kit 은 절대 domain shape 를 흡수 안 해
kit 이 소유할 수 있는 것엔 단단한 선이 있어. app-agnostic 배관만 가져가고 그 외엔 없어. journey 는 Waystone 에, journal 은 Vesta 에, 건강 도메인 전체는 Forge 에 남고. kit 은 절대 health 필드, symptom type, analysis 규칙을 키우면 안 돼. 이게 '엔진은 뭘 소유하느냐로 정의된다' 를 공유 층에 적용한 같은 규칙이야. 배관이 공통인 건 정확히 누구의 도메인도 아니라서고. domain shape 가 kit 에 새는 순간, 공유를 안전하게 만드는 경계가 사라져.