같은 다섯 건이 이틀 연속 나갔다. 걸러내는 코드는 그날도 돌고 있었다
이미 실은 항목인지를 제목으로 판정하는데, 견주는 두 제목을 서로 다른 코드가 만든다. 한쪽은 자르고 한쪽은 되살려서, 안 맞는 항목은 한 번도 안 걸러졌는데 걸러낸 수는 매일 늘고 있었다.
이 글은 뉴스 요약이 아니라 이 사이트를 만들면서 있었던 일에 대한 기록입니다.
8월 30일 아침 LLM 페이지에 클로드 코드 다섯 건이 실렸다. 전날 실린 다섯 건과 글자 하나 다르지 않았다. 한국어 제목도, 영어 제목도, 두 줄짜리 해설도 같았다.
알아챈 것은 기록이 아니라 사람이었다. 그날 기록에 남은 문장은 "항목 14건"이 전부였다.
열쇠는 제목이다
도구 릴리스 노트를 열 곳에서 모은다. 형식이 제각각이라 날짜로는 못 고른다. 절반은 항목별 날짜가 아예 없다. 그래서 "오늘 나온 것"이 아니라 "전에 실은 적 없는 것"으로 고른다.
판정은 제목으로 한다. 소문자로 낮추고 문장부호를 지운 뒤 견준다. 릴리스 노트는 같은 항목의 제목을 조금씩 다듬어 다시 올린다. 글자를 곧이곧대로 보면 그때마다 놓친다.
문제는 견주는 두 제목을 서로 다른 코드가 만든다는 데 있었다. 하나는 수집기가 만들고, 하나는 이미 발행된 기록에서 읽어온다.
수집기가 만든 제목
Added PreModelSwitch and PostModelSwitch hook events (block, confirm,
or annotate a model switch);...
기록에 실린 제목
Added PreModelSwitch and PostModelSwitch hook events (block, confirm,
or annotate a model switch); SessionStart resume hooks now receive
session staleness and the estimated re-cache cost
수집기는 긴 항목을 110자에서 자른다. 마크다운 불릿 하나가 100자를 넘는 일이 흔한데 그대로는 제목으로 못 쓴다. 다음 단계는 반대로 자르지 않은 전문을 적는다. 번역이 미심쩍을 때 되돌아갈 근거로 두는 자리라 잘려 있으면 쓸모가 없다.
둘 다 자기 자리에서는 맞는 판단이다. 만나는 지점에서만 안 맞는다.
반대쪽에서도 어긋났다
클로드 앱 릴리스 노트를 읽는 파서는 정반대로 틀어져 있었다. 제목 뒤에 다음 항목의 머리까지 붙여서 가져왔고, 다음 단계에서 그걸 다듬어 적었다. 이번에는 기록에 실린 제목이 수집기가 만든 제목보다 짧다.
방향은 반대인데 결과는 같다. 글자로 견주면 안 맞고, 안 맞으면 그 항목은 영원히 처음 보는 것이 된다.
왜 오래 안 보였나
걸러낸 수는 매일 기록에 남는다. 8월 29일에 115, 8월 30일에 125였다. 늘고 있었다.
그 숫자는 걸러낸 항목을 센다. 걸러냈어야 할 항목은 세지 않는다. 열쇠가 안 맞는 항목은 비교를 그냥 통과하므로 어느 칸에도 안 잡힌다. 고장이 0으로 찍히면 눈에 걸린다. 이건 멀쩡하게 늘어나는 숫자로 왔다.
되살아나는 간격도 한몫했다. 매일 마흔 자리를 두고 후보가 겨루는데 되살아난 항목이 매번 뽑히지는 않는다. 클로드 앱의 페이블 5 항목은 8월 25일, 27일, 30일에 실렸다. 이틀 걸렀다가 사흘 걸렀다. 규칙적인 고장이 아니라 우연한 겹침으로 읽혔다.
실릴 때마다 처음 보는 항목이었으니 매번 새로 옮겼다. 세 번의 결과가 이렇다.
| 실린 날 | 같은 항목, 세 번의 제목 |
|---|---|
| 8월 25일 | 클로드 페이블 5와 미쏘스 5 접근이 다시 열렸다 |
| 8월 27일 | 클로드 페이블 5·미소스 5 이용 재개 |
| 8월 30일 | 클로드 페이블 5·미토스 5, 접속 제한 풀렸다 |
제품 이름조차 세 번 다르게 적혔다. 나란히 놓기 전에는 같은 항목인 줄 몰랐다.
고친 것
정규화한 두 제목 가운데 한쪽이 다른 쪽의 앞부분이면 같은 항목으로 본다. 잘린 제목은 전문의 앞부분이고, 다듬은 제목은 붙여온 제목의 앞부분이다. 한 줄로 양쪽 방향이 다 잡힌다. 짧은 제목끼리 앞부분만 겹치는 경우는 최소 길이 40자로 막았다.
다른 길도 있었다. 다음 단계에서 제목을 손대지 못하게 막는 쪽이다. 그건 안 골랐다. 되돌아갈 근거를 잘린 채 두는 것이 더 나쁘고, 매일 사람이 지켜야 하는 규칙은 언젠가 깨진다. 판정하는 쪽이 견디는 편이 낫다.
| 고치기 전 | 고친 뒤 | |
|---|---|---|
| 이미 실은 것으로 걸러낸 수 | 139 | 158 |
| 클로드 앱에서 줍는 항목 | 92건 | 99건 |
옆에서 하나 더 나왔다
파서를 들여다보다 반대 증상을 찾았다. 제목이 다음 항목을 삼키면 삼켜진 쪽은 후보에 아예 오르지 못한다. 7월 1일 항목 하나와 4월 9일 항목 셋이 그렇게 없었다. 92건을 줍는 줄 알았는데 실제로는 99건이었다.
이쪽은 흔적조차 안 남는다. 중복은 페이지에 두 번 보이기라도 하는데 누락은 그냥 없다. 유일한 신호가 제목이 200자를 넘어가는 것이었고, 그 값은 어느 화면에도 안 나온다.
남는 것
두 증상은 정반대인데 뿌리가 같다. 같은 것을 다르다고 보면 중복이 나오고, 다른 것을 같다고 보면 항목이 사라진다. 둘 다 예외를 던지지 않는다. 카운터도 멀쩡해 보인다.
이미 나간 중복은 지웠다. 8월 30일이 14건에서 8건이 됐고 8월 27일에서 한 건을 뺐다. 먼저 실린 날은 그대로 뒀다.
숫자를 하나 더 세라는 이야기가 아니다. 세고 있는 숫자가 무엇을 못 세는지 알아두자는 이야기다. 걸러낸 수는 안 걸러진 수를 절대 말해주지 않는다.