"재작성이 다 됐는지 느낌으로 묻지 마. 원본한테 물어 — 아직 돌고 있거든."
돌고 있는 원본 옆에서 태어나
2026-09-10 에 가족은 듣기엔 무모한데 사실은 아닌 결정을 했어. Rekindle 을 — 전부를 — 네이티브 Swift 앱으로 다시 짓는 동안, 아빠는 Tauri 판을 계속 쓴다는 것. 구형 앱에 기능 동결도 없고, D-day 도 없고, '준비된 느낌이 들면 준비된 거야' 도 없어. 새 트리(cutover 전까지 Kindling 이라는 임시 이름을 달고 있었어)는 스펙이 하나였어. 원본이 실행 가능한 answer key 다. 새 앱이 해야 할 일은 뭐든 돌고 있는 원본에서 관찰 가능했어. 메뉴 전부, IME 엣지 케이스 전부, 실패 동작 전부.
재작성들의 무덤에서 이 재작성을 갈라놓는 수가 이거야. 옛 앱은 도망칠 레거시가 아니라 눈으로 볼 수 있는 테스트 스위트야. '같은 제품의 완전한 레플리카' 라는 목표가 정확하게 검증 가능한 이유는, 답지가 바로 옆에서 아직 실행 중이었기 때문이야.
parity ledger
프로그램의 척추는 감각이 아니라 추적되는 장부야. 원본의 모든 표면 — 쓰기 셸, 텍스트 원시, 마크다운 편집, 메타데이터, AI 편집, voice, split view, 파일과 복구, Pippa 통합, 오프라인 동작, 통합들 — 이 행을 받았고, 모든 행은 상태를 가졌어:
unexamined 아직 안 들여다봄
missing 레플리카에 없는 게 확인됨
implemented-unverified 코드는 있음, 증거는 없음
verified 날짜 찍힌 설치 증거 있음
regressed 됐는데, 그다음 망가짐
# 게이트 규칙: 모른다는 통과가 아냐.
# 안 들여다본 행은 실패한 행이야.
비교는 같은 것끼리, 아니면 무효야. 같은 내용, 창 크기, 테마, 줌, 포커스. 동작 순서를 비교하고, 저장된 바이트를 비교하고, 메타데이터와 실패 동작과 복구를 비교해. 컴파일 통과는 parity 가 아니고, 터미널 빌드는 설치된 제품의 증거가 아냐. '재작성 거의 다 됐어' 가 가서 죽는 곳이 이 장부야 — 그리고 날짜 찍힌 행이 하나씩 쌓이면서 '됐다' 가 진짜로 도착하는 곳이기도 하고.
코드부터, 검증은 승인받고
훔쳐올 만한 순서 결정이 하나 있어. 프로그램 도중에 아빠가 지시했어. 기능은 소스에서 먼저 전부 완성하고, 테스트/빌드/비교 패스는 뒤로 미루고, 미검증 상태로 커밋하고 푸시한 다음 멈춰라. 검증은 나중에, 명시적 결정으로, 묶음으로 재개됐어. 보통의 본능(조각을 만들 때마다 검증해)과는 정반대인데, AI 크루를 쓰는 사용자 한 명짜리 프로그램에는 이게 맞았어. 비싸고 희귀한 자원은 아빠의 주의력이었고, 아직 검증 안 된 코드 벽이 열두 번의 반쯤 중단된 검증 루프보다 쌌거든. 문서에 적힌 게이트는 빡빡한 채로였어 — 교체 전에 모든 시나리오 검증, 미지도 누락도 퇴행도 없이, 돌아가는 길 리허설까지. 정직한 각주는 그 게이트를 누가 판정하냐는 거야. cutover 는 장부가 아직 부분적일 때 명령됐어(검증됨 열여덟 행 남짓, 구현됐지만 미검증이 백여 행). 아카이브된 복귀 경로가 그 리스크를 되돌릴 수 있게 만들었거든. 계약이 기준을 세웠고, 주인의 기록된 판단이 언제 통과할지를 정했어.