"제품, 번들 빌드, 상태 스키마, URL 프로토콜, libmpv 빌드, golden-corpus 리비전은 각자 자기 호환성 이유로 전진해."
한-숫자의 오류
앱이 '버전 하나' 를 가진다고 상상하면 깔끔하지. 안 그래. Ashen Reel 은 버전을 지닌 게 최소 여섯 개고, 각각 완전히 다른 이유로 바뀌어. 걜 다 한 숫자에 욱여넣으면 두 실패 중 하나를 얻어. dylib repin 할 때마다 제품 버전을 올리거나. 사용자한텐 아무 뜻 없는 거짓 churn 이지. 아니면 아무도 호환성 깨짐을 못 알아채게 딥링크 문법을 조용히 바꾸거나. 모든 걸 뜻하는 숨은 깨짐이고. 한 숫자는 여섯 종류의 독립적 변화에 대해 정직할 수가 없어.
여섯 도메인, 여섯 이유
고침은 각 도메인에 이름을 붙이고 자기 시계로 전진하게 두는 거야.
- 제품 버전. 보이는 릴리스야.
cwk-product.json이 소유하고 Firelink 로 전진해. 사람이 '무슨 버전' 하면 뜻하는 그 숫자. - 번들 빌드 번호. 출시 가능한 아무 빌드에 째깍하는 배포 카운터. 이야기가 아니라 집계고.
- 상태 스키마 리비전. 로컬 SQLite 모양이 바뀌고 마이그레이션이 필요할 때만 올라.
- URL 프로토콜 버전.
cwkashenreel://handoff 문법이 바뀔 때만 올라. - libmpv 빌드. embed 된 엔진이 새 빌드로 repin 될 때 전진해.
- golden-corpus 리비전. 필수 미디어 매트릭스가 바뀔 때 전진하고.
전체 체계가 카드 한 장에 들어가고, 그 카드를 지키는 게 conflation 을 막아.
cwk-product.json 이 보이는 제품 릴리스를 지니고, 표시 표면이 'v' 를 붙여. 패키지 버전, 번들 빌드 번호, 스키마 리비전, Git 커밋은 경쟁하는 제품 버전이 아니야. 그중 뭐든 '그 버전' 으로 취급하는 게 빌드 번호가 마케팅 페이지에 오르는 방식이고. canonical 제품 번호 하나, 사적 호환성 카운터 여럿이야.왜 분리가 미래의 너한테 친절인가
독립 버전 도메인은 1년 뒤 이걸 디버깅하는 사람한테 주는 선물이야. 뭔가 깨지면, 버전들이 정확한 이야기를 해줘. '스키마는 rev 4 인데 이 데이터베이스는 rev 3 이니까 마이그레이션.' '딥링크는 프로토콜 2 라는데 이 빌드는 1 만 말하니까 거절.' 여섯이 다 한 숫자로 뭉개졌으면, 그 진단 하나하나가 추측이야. 도메인에 이름을 붙이는 게 '버전 1.0.0 인데 왜 안 돼?' 를 구체적이고 답할 수 있는 호환성 질문 세트로 바꿔주고. 그게 트랙 전체의 교훈을 축소한 거야. 실제로 독립인 것에 대한 정직이, 시스템을 읽을 수 있게 만들어.