diff 봐
Family Council ship 됐을 때, pre-council master 대비 diff: 새 backend/council/ 디렉토리, 새 frontend/src/components/council/ 디렉토리, 새 <app-data>/councils/ 영속화 디렉토리. 없음 — backend/adapters/, backend/routes/chat.py, backend/store/conversations.py, 어느 변형 디렉토리에도 변경.
왜 중요
Council 이 Three Rules 의 crown — 완전 새 feature surface 가 canonical 두뇌 endpoint 안 건드리고 빌드 가능 증명. council (multi-party orchestration 이 가장 어려운 case) 에 가능하면, 다른 무엇이든 가능.
Zero touch는 diff 자랑이 아니라 dependency test야. 새 feature가 기존 route와 adapter를 수정해야만 붙는다면, 그 feature가 ancestor의 사정을 너무 많이 알고 있는지 먼저 의심해. Council은 평범한 conversation API를 client처럼 사용하고 자기 orchestration state만 소유했기 때문에 경계를 통과했어.
물론 숫자 0을 지키려고 잘못된 contract를 우회하면 안 돼. 여러 downstream feature가 같은 구멍 때문에 비슷한 hack을 만든다면 ancestor contract가 실제로 빠진 걸 수 있어. 그때는 뿌리를 고치되, 한 variant의 편의를 공통 요구로 위장하지 않았다는 증거를 대.
이 원칙의 수익은 rollback에서도 보여. Council folder와 route를 걷어 내도 1:1 chat, JSONL, brain adapter는 그대로 돌아야 해. additive feature가 실패해도 집 전체가 같이 넘어지지 않는 것, 그게 zero ancestor touch의 실전 의미야.