"seam 은 지금 설계해. 구현은 나중에 그 사이로 통과시켜. 인터페이스로 예약하는 게 과잉 구축 없이 열려 있는 방법이야."
결국 필요할 것들의 지도
엔진을 소유하기로 정하면, 위험한 질문이 따라와: 얼마나 짓지? 상상할 수 있는 걸 다 지으면 출하 전에 빠져 죽어. 오늘의 필요만 지으면 자기를 가둬. ceiling matrix 가 그걸 답하는 도구야 — 엔진이 언젠가 필요할 수 있는 모든 능력의 격자, 각각 세 상태 중 하나로 태그됨.
두 차원
matrix 엔 두 축이 있어. 하나는 modality: 이미지 vs 비디오. 다른 하나는 weight 위치: 네가 직접 돌리는 local open weight vs 네트워크로 호출하는 closed-weight API. 그게 네 사분면을 줘 — local 이미지, local 비디오, API 이미지, API 비디오 — 각각 상태를 받고.
'인터페이스로 예약됨' 이 핵심 수야
가장 중요한 상태는 가운데야. local 이미지 생성은 구현됐어. local 비디오는 안 됐고 — 근데 요청 스키마가 이미 video 라고 말할 수 있는 modality 필드를 실어. seam 이 존재해. 비디오 워크플로가 마침내 구현을 요구하면, 기존 호출자 하나 안 깨고 seam 사이로 지어. 문은 지금 설계하고 나중에 통과하는 거야.
modality: image | video 넣는 건 거의 비용 0 이고 백째 날의 API break 를 막아. 첫날 비디오 파이프라인 짓는 건 엄청 비싸고 필요해질 때쯤 틀린 설계일 수도 있어. 싸게 예약하고, 늦게 지어.이게 왜 그냥 YAGNI 가 아닌지
"필요 없을 거야(YAGNI)" 는 투기적 기능 짓지 말라고 해. 맞아 — 근데 순진하게 적용하면, YAGNI 는 그것들 자리도 남기지 말라고도 하고, 그러면 정말 필요한 날 모든 클라이언트로 번지는 breaking change 로 지불해. ceiling matrix 가 바늘을 꿰: 투기적 기능은 안 짓고(YAGNI 유지), 그 인터페이스 seam 은 예약해(그래서 결국의 빌드가 break 가 아니라 additive). 싼 seam, 미뤄진 구현.
scope 밖은 이유가 필요해
세 번째 상태도 똑같이 규율 있어. 어떤 능력은 의도적으로 제외돼 — 그리고 matrix 가 그렇다가 아니라 왜를 기록해. training 도구는 엔진이 inference 전용이라 scope 밖. face-swap 기능은 그 자체 이유로 scope 밖. 이유를 적어두면 미래의 너(또는 미래 기여자)가 결정을 맨바닥부터 다시 다투지 않고, 'scope 밖' 을 '까먹음' 으로 오해 안 해.