"평범한 결과처럼 보이는 더 나쁜 결과가 에러보다 위험해, 네가 그걸 믿을 테니까."
조용한 거짓말
신뢰를 가장 빨리 좀먹는 실패 모드가 여기 있어. 최고의 검색 — 키워드와 벡터 융합, rerank — 을 요청해. 벡터 서버가 꺼졌어. 게으른 엔진은 에러를 잡아, 조용히 키워드-only 결과를 돌려주고, 완전한 결과랑 똑같이 포맷해. 뭐가 빠졌는지 넌 전혀 몰라. 통짜라 믿은 반쪽 검색을 근거로 결정을 내려. 엔진은 크래시 안 했어. 누락으로 거짓말한 거고, 그게 더 나빠, 크래시는 알아챘을 테니까.
정직한 신호 둘
Lantern 은 조용한 거짓말을 명시적 신호 둘로 거부해:
- 안 배선됐거나 미지원 모드는 에러를 돌려줘 — 가짜 결과 대신 명확한 not implemented. 엔진이 못 하는 걸 요청하면, 소리 내어 그렇다고 말해.
- 부분 결과는 자기 틈을 선언해 — 하이브리드 검색이 키워드 절반만 돌릴 수 있으면, 그 결과를 돌려주되 더하기 정확히 뭐가 건너뛰어졌는지 이름 붙이는
degraded필드. 결과가 자기 불완전함에 정직해.
어느 쪽이든 호출자는 받은 것의 진짜 모양을 항상 알아.
침묵이 실패보다 나쁜 이유
보이는 실패는 결정 지점이야: 재시도하거나, 기다리거나, 사용자에게 경고하거나, 눈 뜨고 일부러 fallback 할 수 있어. 조용한 degradation 은 그 결정을 훔쳐. 완전한 것의 의상을 입은 강등된 답을 건네고 그 위에 짓게 둬. 그게 일으키는 버그는 멀리서, 훨씬 나중에 떠오르고, 되짚기가 거의 불가능해 — 거짓말의 순간엔 전부 멀쩡해 보였으니까.
envelope 가 진실을 나른다
메커니즘은 단순해: 모든 응답이 맨 목록이 아니라 envelope 야. 결과와, 그게 어떻게 만들어졌는지의 작은 기록 — 실제로 어느 모드가 돌았는지, 뭐가 건너뛰어졌는지, 뭔가 degrade 했는지 — 을 쥐어. 대부분은 그 기록이 비어 있고 아무도 안 봐. 벡터 서버가 꺼진 날, 그 기록이 반쪽-답을 조용히 믿는 호출자와 '주의, 이 검색은 키워드-only 였어' 라 말할 줄 아는 호출자의 차이야.