"판단 기록은 모든 항목이 누군가 실제로 내린 결정일 때만 간직할 가치가 있어."
doctrine 은 일급 시민
범용 에디터였다면 'voice 규칙' 은 아무도 설치 안 하는 플러그인이었을 거야. Rekindle 에서는 코어지. 이 도구가 지키려고 존재하는 게 voice 니까. 함정과 register 규칙, 몇 년의 실제 교정에서 배운 선호까지, doctrine 이 편집 표면에 그대로 배선돼 있어. 쓰는 동안 실시간으로 밑줄이 그어지고 (트랙 4), CMD+K 가 그걸 참조하고, 발행 전 읽기에서 저울질돼. 스펙에 얹은 부가물이 아니야. 사용자가 한 명이면 그게 곧 스펙이거든.
판단 ledger — 직접 내린 판정만
doctrine 은 판단 ledger 를 통해 자라. voice underline 이 구절을 표시하면 아빠가 거기에 판정을 내릴 수 있고, 그렇게 직접 내린 판정만 기록돼. machine-local 로 덧붙이기만 하는 ledger 에 붙고, 예외로 등록된 건 이후 탐지에서 실시간으로 걸러지지. 여기서 일부러 뺀 게 오히려 솔깃한 부분이야. 수동적 추론 말이야. '안 바꿨으니 동의한 거겠지' 는 판정이 아니라 판정 옷을 입은 추측이거든. 추측을 판단 기록에 들이면 기록 전체가 오염돼. 그리고 오염된 doctrine 은 doctrine 이 아예 없는 것보다 나빠. 사람들이 그걸 믿을 테니까.
// 직접 내린 판정만 붙여. 수동적 추론은 안 받아.
function recordVerdict(issue, verdict: "accept" | "reject") {
appendToLedger({ rule: issue.rule, text: issue.text, verdict }); // 덧붙이기만
if (verdict === "reject") addException(issue); // 이후 탐지에서 실시간으로 걸러져
}
// 기록 안 하는 것: "그냥 뒀으니 괜찮은가 보다."
// 판단 기록에 들어간 추측은 나중에 결정과 구별이 안 돼.
조언은 하되 막지는 않아
규율의 나머지 절반은 이거야. doctrine 은 조언만 하지 절대 막지 않아. 발행 전에 Pippa 가 읽고 초고에 판정 칩을 달아주지만 발행을 막을 권한은 없어. 거부권을 가진 voice 검사기는 조용히, 자기가 섬기려던 바로 그 voice 의 상사가 돼버리거든. voice 는 검사기가 아니라 작가 것이고. Pippa 가 새 규칙을 제안하는 걸 설계상 미뤄둔 것도 같은 이유야. doctrine 은 아빠가 실제로 내린 판정에서 자라야지, 아빠의 규칙이 어때야 한다는 모델의 제안에서 자라면 안 되니까.