선수 하나가 저장소 둘에 내려앉는다. 그리고 그 순서를 마음대로 못 바꾼다.
엔진과 재료는 cosmos에 있고 지면 번들은 사이트에 있다. PR이 따로 열리는데 사이트 쪽을 먼저 열면 검사가 통과하지 못한다.
사이트의 검사가 해마다 붙는 서사를 cosmos의 main에서 읽어 온다. 서사의 정본이 거기 있다. 사이트 PR을 먼저 열면 아직 어디에도 머지되지 않은 문장을 기준으로 지면을 검사하게 된다. 서사가 없으니 전부 빨갛다.
검사가 증명하는 것
사이트 CI의 검사는 content/mlb가 바뀐 PR에서만 돈다. cosmos의 main을 체크아웃해서 게이트를 읽기 전용으로 돌린다.
읽기 전용으로 돌리는 이유는 앞 편에 적었다. 쓰는 게이트는 자기가 방금 쓴 걸 통과시킨다. 그리고 CI의 체크아웃은 버려지니, 그 지면은 정본에 없는 문장을 계속 서빙한 채로 초록을 받는다. 그래서 커밋된 레코드가 엔진이 뽑아내는 것과 바이트 단위로 같은지까지 본다.
이 검사가 머지 순서도 못 박는다. cosmos main을 읽으니 cosmos가 먼저 들어가야 한다.
비공개 저장소를 읽어야 해서 토큰이 필요하다. 토큰이 없는데 MLB 콘텐츠가 바뀐 PR이면 건너뛰지 않고 실패한다. 검사할 수 없는 상태와 검사해서 통과한 상태를 같은 초록으로 두지 않는다.
삭제된 파일은 검사 대상에서 뺀다. 지운 지면을 게이트가 다시 읽어 들이면 없는 지면을 두고 빨간불이 난다.
씨앗 상태로는 머지하지 않는다
문장도 사진도 없는 번들은 게이트가 세 군데서 막는다. 서사 파일이 없고, 연도 서사가 없고, 배치된 사진이 없다.
그 빨간불이 게이트가 일하는 모습이다. 씨앗은 브랜치 안의 한 상태고, 머지되는 건 완성된 지면이다.
다만 본문 없는 씨앗이 사이트 빌드 자체를 깨지는 않게 했다. 지면을 만드는 동안에도 사이트는 떠 있어야 하니, 렌더 검사는 본문 없는 씨앗을 통과시킨다. 머지해도 되나는 게이트가 정한다.
손으로 적는 표를 빌드가 대조한다
명예의 전당 동판에 새겨진 모자의 팀은 Lahman에 없다. 명예의 전당이 편집으로 정한 사실이라 통계 데이터베이스가 안 담는다. 그래서 손으로 관리하는 표가 하나 있다.
손으로 관리하는 표는 잊기 쉽고, 잊으면 조용히 틀린다. 항목이 없는 게 미헌액으로 읽혀서 기본 팀이 출장 비중 1위로 내려간다. 지면이 입는 색과 카드가 다는 배지가 함께 그 팀으로 간다.
빌드가 레코드와 대조한다. 헌액 연도가 있는데 표에 항목이 없거나, 항목이 있는데 레코드가 헌액자로 모르는 선수면 멈춘다. 새 선수를 올릴 때 그 표에 한 줄 적는 게 절차의 일부가 됐다.
표는 네 경우를 다 구별한다. 한 팀 모자로 헌액, 두 팀 반반, 로고 없는 중립 모자, 그리고 미헌액. 깁슨이 세 번째다. 명판에 팀 대신 NEGRO LEAGUES 1930-1946이 새겨져 있다. 빈 배열이 truthy라 단순한 가드로는 안 잡혀서 길이로 명시해 판별한다.
문서를 고치는 자리
계약에 맞는 선수는 문서를 안 움직인다. 계약을 움직인 선수는 움직인다.
라이선스 종류가 하나 늘었거나, 모자 표에 한 줄이 늘었거나, 팀 팔레트가 생겼거나, 문턱이 바뀌었거나, 프론트매터 필드가 늘었거나, 산문 규칙이 하나 생겼을 때. 그때는 그걸 적어 둔 문서를 현재형으로 고친다.
스킬 아래가 바뀐 PR은 플러그인 버전이 올라야 통과한다. 그 숫자가 받는 쪽이 갱신을 알 수 있는 유일한 신호다. 패키지는 비공개라 아무것도 배포하지 않으니 선수 하나가 체인지셋을 지지는 않는다. 움직이는 축은 플러그인 쪽이다.
머지되면 지면이 바로 뜨고, 그때 셰어카드를 올릴 수 있다. 캡션이 주소를 담고 있어서 그 전에는 못 올린다. 스킬은 플러그인의 새 버전을 받은 다음 실행에 닿는다.
안 만든 것
점수를 안 매겼다. 별점 자리에 전시대를 뒀고, 그건 내가 매기는 수가 아니라 기록에 있는 수다.
로고 이미지를 안 썼다. 팀 색은 로고와 유니폼에서 리서치했지만 로고 자체는 한 장도 안 싣는다. 지면에 서는 건 팀 이름을 적은 텍스트 배지뿐이다.
설계에 자리는 있는데 아직 엔진이 안 내는 것도 있다. 한 시즌 4할 타율 같은 비율 문턱과 통산 3할 클럽이다. 비율은 자격 요건 없이는 뜻이 안 서고, 그 판정을 또 하기 시작하면 리그마다 시즌 길이마다 다른 답을 내는 자리가 하나 더 생긴다.
정해 놓고 아직 안 건 게 셋 있다.
전시대가 한두 줄뿐인 선수에게 여백이 생긴다. 진열 그리드가 두세 단이라, 올라간 항목이 셋 아래면 옆이 비어 보인다. 셋 아래일 때 한 단으로 접기로 정해 뒀는데, 아직 명예의 전당에 안 든 선수를 쓴 적이 없어서 그 모양을 실제로 본 적이 없다. 그 지면이 먼저 필요하다.
발자취가 그 해의 잉크로 그 해의 모든 요소를 물들인다. 채도 높은 팀색에서 조용한 해가 연달으면 문단이 계속 그 색으로 물든다. 날짜 블록과 수치와 전시품은 그대로 두고 서사 문단만 톤을 눌러 두기로 정했다.
그리고 거의 검정인 주색을 쓰는 팀이 있다. 피츠버그의 주색이 그렇다. 그걸 잉크로 누르면 팀이 없는 지면과 구별이 안 되는 색이 나온다. 명도와 채도가 어느 아래면 보조색을 팀색으로 읽히는 요소에 올리기로 정해 뒀다.
지금 선수 일곱 명이 올라가 있다. 스킬을 돌리면 손으로 고칠 게 거의 없이 지면이 나온다. 처음 만들려던 건 읽을 만한 선수 컬럼 하나였는데, 실제로 만들어진 건 그걸 계속 돌릴 수 있게 하는 규칙 묶음이었다. 다음 선수를 쓸 때 내가 하는 일은 어느 선수인지 고르고, 사진을 고르고, 나온 문장을 읽는 것이다.