검사는 쓰는 일과 따로 돈다. 그리고 일부러 적대적으로 짰다. 틀린 데를 찾는 게 일이고 승인하는 게 일이 아니다.
게이트는 위반을 보고하고 산문은 안 고친다. 그리고 산문과 레코드가 맞는지만 본다. 세상의 사실에 대고 레코드를 고치는 일은 안 한다. 그건 사람이 할 일이다.
산문 두 곳을 서로 다른 범위로 본다
숫자를 보는 게이트가 두 곳을 검사하는데 근거 범위가 다르다.
해마다 붙는 서사는 그 해 노드에 대고 본다. 그 해의 시즌 스탯, 마일스톤 수, 수상 누적 카운트, 연도, 나이, 그리고 그 해 생애 사건의 텍스트에 있는 숫자. 1999년 서사에 2004년의 수가 나오면 이탈이다.
본문은 다르다. 본문은 커리어 전체를 넘나들며 사실을 엮는다. 그래서 커리어 전체의 근거를 합쳐 놓고 본다. 통산 스탯과 수상 연도와 마일스톤, 전 연도의 시즌 블록과 나이, 전 연도 생애 사건의 텍스트, 그리고 전기 재료의 산문까지 모은다.
이탈한 해는 서사를 안 넣는다. 숫자가 틀린 문장을 지면에 안 올리고, 그 해를 빈 채로 두고 보고한다.
같은 수의 여러 표기를 펴 둔다
같은 사실이 표기 때문에 다른 토큰이 되는 일이 꽤 있었다.
레코드의 한 값이 산문에서 여러 모양으로 나타난다. 2062와 2,062. .328과 0.328. 근거 쪽을 미리 펴 둔다. 한국어는 큰 수를 만 단위로 끊고 원문은 million으로 적으니 양쪽을 같은 정수로 편다. 10만은 100000으로, 3만 5000은 35000으로.
반올림 변형은 안 넣었다. .328을 .33으로 적으면 근거로 안 보고 이탈로 본다. 출처를 넘어선 반올림이고, 산문은 정확한 세 자리를 실어야 한다.
한글로 쓴 수
게이트는 ASCII 숫자만 본다. 한글로 적은 수는 같은 주장을 하고도 통과한다. 여기가 사각지대였다.
그중 기록이 판정할 수 있는 건 나이 하나다. 나머지는 야구사의 서수인데 그건 세상의 사실이라 기록에 없다. 그래서 나이는 막고 서수는 목록으로 내놓는다.
나이에서 하나를 배웠다. 한 해 안에서 참인 나이는 둘이다. 생일 전과 후. 레코드의 나이는 6월 30일 기준 시즌 나이인데, 9월에 데뷔한 선수가 스물다섯인 것도 참이다. 한 값만 통과시키지 않고 두 값을 통과시킨다.
열일곱 아래는 표에 안 담았다. 빅리그 선수의 나이로 읽힐 수 없는 값이라, 담으면 열의나 세 번처럼 나이가 아닌 말이 나이로 오독될 자리만 넓힌다. 이 게이트는 막는 쪽으로 끝나니 오검출이 곧 빌드 정지다.
날은 근거로 넣지 않는다
생애 사건에는 날짜가 붙어 있다. 거기서 일을 자동으로 근거에 넣었다가 뺐다.
사건의 날은 이미 본문에 적혀 있다. 출처가 July 19라고 적어 두었으면 19가 거기 있고 그대로 근거가 된다. 날짜에서 또 넣으면 1에서 31까지의 작은 수를 가리지 않고 근거로 받아들이는 관대함만 남는다. 그러면 산문에 아무 두 자리 수를 적어도 통과한다.
월은 남겼다. 한국어 산문은 출처의 영어 월 이름을 숫자로 옮긴다. July가 7월이 된다. 그 7은 영문 본문에 숫자로 없어서 검증된 날짜 필드에서만 근거된다. 실제 사건의 월만 인정한다.
연도에도 걸러야 할 게 있었다. 자유 텍스트의 네 자리 수 중 커리어가 끝난 뒤의 연도는 그 시즌의 사실이 아니다. 출처를 적어 둔 2025년이나 오늘 날짜 같은 것들이다. 커리어 이전이나 중의 역사 비교 연도는 산문이 정당히 엮는 사실이라 남긴다.
닫지 못하는 것
이 게이트가 닫는 건 표기 이탈이다. 산문에 적힌 수가 레코드 어딘가에 있나.
어느 스탯의 수인가는 안 본다. 삼진 372개라고 썼는데 372가 그해 다른 스탯에 있으면 통과한다. 뜻을 판정하는 일이고 기계가 안 한다. 쓴 사람이 읽어서 닫는다.
다시 쓰기 전에 비운다
넣기 전에 모든 서사를 먼저 비운다.
안 그러면 정본에서 빠졌거나 이번에 이탈로 잡힌 해가 옛 서사를 그대로 물고 있는다. 겉보기엔 멀쩡한 지면인데 그 해의 문장이 지난번 것이다. 사진 자리도 같은 식으로 매번 프론트매터에서 다시 센다.
서사가 아직 없는 선수에게도 사진 자리는 붙인다. 사진의 자리는 문장을 안 기다린다. 문장을 안 쓴 선수의 사진이 전부 리드 스트립으로 흘러가 있으면, 지면이 완성되기 전부터 어긋난 모습으로 보인다.
막는 것과 보여 주는 것을 갈랐다
목소리를 보는 게이트는 하우스 금지 목록 중 기계가 판정할 수 있는 것만 강제한다. 과장, 균형 대조, A가 아니라 B, AI 상투구, 체언 종결, 서양식 대시, 이중 피동, 자기 지칭, 본문의 마크다운 헤딩, 그리고 강조 표시의 짝.
지면에 인쇄되는 한국어는 전부 읽는다. 해마다 붙는 서사와 이름 아래 한 줄, 본문, 그리고 사진 캡션. 캡션도 사진 옆과 판권 두 곳에 실리는 문장이라 같은 규칙을 받는다.
채널은 둘이고 성질이 다르다. 막는 쪽은 비문이다. 이중 피동은 어느 문장에 있어도 틀렸다. 보여 주는 쪽은 경향이다. 볼 만하지만 문맥에 따라 정당할 수 있다.
/**
* 마커가 `⚠`가 아니라 `↳`인 것은 의도다: `⚠`는 게이트 위반의 표식이므로,
* 같은 마커를 쓰면 **자문이 revise를 몰게 된다** — 막지 않기로 한 것이 문장을 고치게 된다.
*/
이게 생각보다 중요했다. 같은 경고 표시를 쓰면 막지 않기로 한 게 결국 문장을 고치게 된다. 표시가 판단을 몰고 간다.
보여 주는 쪽의 문턱은 승인된 산문에서 재서 잡았다. 한 문장 안의 것은 승인 산문의 최대가 2개였고 그마저 한 문장이라, 4개부터 신호로 뒀다. 같은 서술어로 끝난 문장은 네 지면 105~129문장의 최대가 4라 5부터다. 너무 흔한 맺음은 아예 안 센다. 했다, 있었다, 됐다 같은 것들이다. 세면 신호가 아니고 소음이 된다.
게이트를 하나로 묶었다
게이트가 여럿이라 하나로 묶었다. 사이드카가 있나, 숫자 게이트와 목소리 게이트가 깨끗한가, 그리고 그 둘이 못 보는 것들.
명예 요약은 프론트매터에 적힌 수상 횟수 묶음이다. 씨앗이 한 번 쓰고 그 뒤로는 손으로 지키는 값이라 레코드가 움직이는 날 낡는다. 그리고 숫자 게이트는 산문을 읽으니 이걸 못 본다. 따로 대조한다.
생몰도 본다. died가 비어 있으면 날짜줄이 그 선수가 살아 있다고 주장한다. 1963년에 세상을 떠난 선수의 지면이 1911 –로 열려 있는 상태다.
하한도 뒀다. 서사가 하나도 없거나 사진이 하나도 없으면 실패다. 얇은 건 경고로만 둔다. 자료가 적은 데드볼 지면은 수집 과제다.
아직 안 쓰인 코드를 미리 대조한다
전시품 코드가 지면 레지스트리에 없으면 그 코드는 화면에서 조용히 사라진다. 전시대가 모르는 코드를 그냥 건너뛴다.
지면에 올라와 있는 코드가 등록되지 않은 경우는 이미 빌드가 막고 있었다. 아무도 못 보던 건 아직 어떤 지면도 안 쓴 코드다. 발행된 지면이 데드볼 타자 둘과 니그로리그 포수와 현대 투수 둘이라, 골드글러브와 실버슬러거와 신인왕과 지명타자상이 한 번도 실행되지 않았다.
골드글러브는 투수에게도 간다. 137개가 투수에게 갔다. 수비 좋은 투수를 처음 쓰는 날 그 선반들이 한꺼번에 처음 켜진다. 그날을 배포로 알게 되지 않으려고 지금 대조한다.
발행 경로에서는 읽기 전용으로 돌린다
마지막 하나를 제일 늦게 알았다.
숫자 게이트는 검증하고 주입한다. 즉 쓴다. 그런데 쓰는 게이트를 그대로 돌리면 자기가 방금 쓴 걸 검사하게 된다. 다시 쓰고, 자기가 쓴 걸 통과시키고, 초록으로 끝난다. 그 사이 발행된 지면은 정본에 없는 문장을 계속 서빙한다.
그래서 발행 경로에서는 읽기 전용으로 돌린다. 아무것도 쓰지 않고, 커밋된 레코드가 엔진이 뽑아내는 것과 바이트 단위로 같은지를 본다. 다르면 실패다. 게이트가 자기에 대해 못 하는 그 검사를 이 모드가 한다.
기계가 못 닫는 자리
여기까지가 기계가 닫는 부분이다. 나머지는 사람이 읽어서 닫는다.
번역체는 정규식이 못 잡는다. 영어 틀 위에 올린 한국어 문장인데 문법으로는 아무 문제가 없다. 선수 간 비슷함도 못 잡는다. 두 지면의 문장이 같은 모양으로 흐르는 건 한 지면 안에서는 안 보인다. 인용이 실재하나, 기록에 없는 야구사 서수가 맞나, 고유명사 표기가 맞나도 마찬가지다.
그래서 네 축으로 다시 읽는다. 기록, 목소리, 흐름, 지면. 읽는 사람이 만나는 순서대로 위에서 아래로, 사람들이 실제로 쥐는 폭에서.
결정론 게이트는 발행 품질의 필요조건이고 충분조건이 아니다. 초록은 바닥이고 결론이 아니다.
게이트의 판정이 이상해 보일 때 손대는 순서도 정해 뒀다. 게이트를 고치기 전에 그 규칙의 테스트 표를 먼저 읽는다. 판정을 지는 건 전부 순수 모듈로 떼어 두고 표로 검증하고 있어서 대개 거기에 답이 있다.