C.W.K.
Stream
Lesson 04 of 04 · published

문자열 동등으로 재검증

~12 min · revalidation, string-equality, drift, determinism

Level 0불 꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"이 citation 이 여전히 정직해? 그 질문은 기계가, 기계적으로, 영원히 답할 수 있어야 하고 — 그건 그게 의미에 관한 질문일 수 없다는 뜻이야."

Citation 이 여전히 성립해?

2년 전에 passage 를 고정하고 그 위에 claim 을 지었어. 그 뒤 소스 에세이가 열 번 편집됐어. 그래서: 네 citation 이 여전히 네가 말한 걸 가리켜? 이게 재검증이 답하는 질문이고, 수천 개 citation 에 대해, 요구 시, 사람이 아무것도 안 읽고 답해야 해. 그건 답이 계산 가능해야 한다는 뜻이고 — 그 제약이 설계 전체를 정해.

세 상태, 문자열 동등으로 결정

재검증은 passage 의 고정된 텍스트를 현재 소스와 비교하고, 정확히 세 상태 중 하나를 돌려줘:

  • Live — 고정된 텍스트가 기록된 offset 에 여전히 앉아 있어. 아무것도 안 움직였어. citation 은 만든 날만큼 정확히 참이야.
  • Reanchored — 문서가 바뀌었는데(그래서 offset 이 틀렸는데), 고정된 텍스트가 그 안 다른 데서 유일하게 발견돼. 단어는 살아남았고, 그냥 옮겨졌어. 엔진이 offset 을 안전히 업데이트할 수 있어, 유일한 정확 매치는 모호하지 않으니까.
  • Drifted — 정확한 고정 텍스트가 소스에 아예 없어. 단어가 사라졌거나 바뀌었어. 엔진은 이걸 보고하고 그 외 아무것도 안 해.

그게 상태 기계 전부야. 모든 결정이 문자열의 == 야.

어떤 모델도 의미를 판단 안 해

눈에 띄게 없는 걸 봐: fuzzy 매칭 없음, 유사도 임계값 없음, 임베딩 비교 없음, 그리고 무엇보다 "이게 전과 대충 같아?" 라고 묻는 모델 없음. 여기선 그게 재앙일 거야. citation 의 유효성이 모델의 의견에 의존하는 순간, 네 증거는 그 모델의 기분만큼만 안정적이고 — 같은 citation 이 어떤 텍스트 변경도 없이 오늘 검증되고 내일 실패할 수 있어. 결정론-먼저는 레이어가 철학적이 됐다고 버려지지 않아. 검증은 정확 매치거나 아무것도 아니야.

검증은 기계적이어야 해, 아니면 검증이 아냐. 확인에 판단이 필요한 순간, 그건 확인이길 그만두고 리뷰가 필요한 또 하나의 의견이 돼. 멍청한 기계가 백만 번 돌려도 항상 자기와 일치하게 무결성 확인을 설계해. 정확 동등은 안 화려하고 살짝 부서지기 쉬워 — 쉼표 하나 바뀌면 live 가 drifted 로 뒤집혀 — 근데 제품 전체가 믿음직함인 시스템에선 부서지기-쉽고-정직한 게 유연하고-책임 없는 걸 매번 이겨.

Drift 는 나아

순수 문자열 동등의 조용히 우아한 결과가 여기 있어: drifted 는 사형 선고가 아냐. 재검증이 파괴적 동작을 아예 안 하니까 — 보고만 하니까 — drift 한 citation 은 삭제되거나 영구히 깨졌다 표시되지 않아. 그냥 상태야. 나중에 누가 그 편집을 되돌리거나 문단을 복원하면, 바로 다음 재검증이 정확한 텍스트를 다시 찾고 citation 이 곧장 live 로 돌아가. 아무것도 수리할 필요가 없었어, 아무것도 손상된 적이 없으니까. 상태는 항상 현재 현실에서 재계산되지, 절대 패치 안 돼. 증거 레이어에서도, 답은 수리가 아니라 파생이야.

Code

세 상태, 순수 문자열 동등, 파괴적 동작 없음·python
def revalidate(passage) -> str:
    """Is this citation still honest? Decided by string equality — nothing else."""
    text = read_current_source(passage.corpus_id, passage.doc_relpath)

    # 1. LIVE — the pinned text is still exactly where we recorded it.
    if text[passage.char_start:passage.char_end] == passage.text:
        return "live"

    # 2. REANCHORED — the doc moved, but the exact words are uniquely findable.
    if text.count(passage.text) == 1:          # unique == unambiguous == safe
        new_start = text.index(passage.text)
        update_offsets(passage, new_start, new_start + len(passage.text))
        return "reanchored"

    # 3. DRIFTED — the exact text isn't there. Report it; destroy nothing.
    return "drifted"

# Note the absence: no fuzzy match, no similarity score, no model asked
# "is this close enough?". And because nothing is destroyed, if the text ever
# returns, the next revalidation reports "live" again. Drift heals.

External links

Exercise

문서에서 저장한 인용구를 상상하고, 그 문서가 편집된다고 상상해. 세 확인을 순서대로 적어: 인용구가 여전히 같은 자리에 있어? 아니면, 다른 데 정확히 한 번 나타나? 아니면, drift 보고. 이제 솔깃한 네 번째 옵션을 생각해 — '정확하진 않은데 충분히 비슷해 보이니 받아들이자.' 그 옵션을 더하면 왜 나머지 셋의 가치가 파괴되는지 한 문장으로 설명해.
Hint
'충분히 비슷' 이 허용되는 순간, 모든 검증 결과가 판단이 되고, 리포트가 소스에 대한 증거이길 그만두고 소스에 대한 의견이 돼. 정확 매칭의 부서지기 쉬움이 바로 'live' 결과를 뭔가 의미하게 만드는 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.