"한쪽 레이어는 항상 같은 답을 내놓고, 다른 쪽은 생각을 해야 해. 이 둘을 단단한 선 양편에 갈라놔."
다시 발견한 두 레이어
Rekindle 에서 제일 깊은 구조 규칙은 새로 만든 게 아니야. cwkWritingToolkit 이 이미 갖고 있던 봉합선이지. 그 옛 플러그인이 하던 두 가지 일은 종류가 근본적으로 달랐거든. WordPress-tag ruleset 은 결정론이었어. 이 선택을 저 마크업으로 감싸라, 매번 똑같이, 생각할 것 없이. corpus 자동완성은 판단이었고. 작가가 실제로 다음에 쓸 법한 단어로 손을 뻗는 거였으니까. 한쪽은 고정된 변환이고 다른 쪽은 결정이야. Rekindle 은 이 둘에 이름을 붙이고 각자 집을 줬어. 결정론은 Rust 코어, 판단은 Pippa.
레이어 답하는 질문 집
------------- ----------------------------- --------
결정론 "같은 입력 -> 같은 출력?" Rust 코어
판단 "맥락상 여기 뭐가 맞나?" Pippa
절대 안 섞어
규칙은 그냥 '레이어를 둘로 나눠라' 가 아니라 절대 섞지 마라 야. 톤이나 register, '이게 아빠처럼 들리나' 같은 판단을 Rust 코어에 밀어 넣지 말고, frontmatter 파싱이나 export ruleset 적용 같은 결정론적 작업을 AI 호출 뒤에 두지도 마. 봉합선이 흐려지는 순간 양쪽이 다 나빠져. 결정론적 변환은 경로에 모델이 끼어서 재현이 안 되고, 판단은 규칙 표에 갇혀서 툭하면 깨지거든. 그 선이 각자 자기 일을 잘하게 지켜주는 거야.
가족 전체의 같은 척추
이건 Rekindle 만의 별난 규칙이 아니라 가족 전체의 척추야. Loomis 는 같은 선을 결정론적 기하부터, ML 은 landmark fitting 에만 으로 그었어. 그림 구조는 계산으로 나오고 재현이 되게 하고, 지저분한 지각 단계에만 모델을 쓰는 거지. Rekindle 은 같은 선을 도메인 하나 옆에서 그은 거고. Rust 쪽엔 재현 가능한 텍스트 변환, Pippa 쪽엔 열려 있는 voice 와 재작성. 어떤 도구든 '항상 같아야 하는' 일과 '결정이 필요한' 일이 섞여 있다면, 이기는 수는 봉합선에 이름을 붙이고 그게 새지 않게 지키는 거야.