"크래시 뒤 다시 실행은 앱이 자기를 확신하며 깨는 게 아냐. 앱이 기억상실로 깨는 거고, 제일 먼저 할 일은 자기 일기를 읽는 거야."
위험한 가정
파일 오퍼레이션이 돌고 있었어. 그다음 앱이 크래시났거나, 볼륨이 언마운트됐거나, Mac 이 전원을 잃었어. 이제 Waygate 가 다시 실행돼. 제일 위험한 건 가정하는 거야 — 오퍼레이션이 끝났다고 가정하고 스테이징 항목을 정리하거나, 실패했다고 가정하고 목적지를 지우거나. 어느 가정이든, 눈감고 하면, 엉뚱한 복사본을 파괴할 수 있어. Waygate 의 규칙은 다시 실행이 파괴적인 걸 할 권한을 정확히 0 준다는 거야.
먼저, 이야기를 재구성해
어떤 결정 전에, 복구는 저널을 읽고 뭐가 벌어지고 있었는지 재구성해: 어느 오퍼레이션이 진행 중이었나, 어느 상태에 도달했나, 어떤 증거가 있나 — 검증된 스테이징 복사가 있나? 파괴적 배리어가 건너졌나? 소스가 여전히 있나? 저널은 모든 변형 전에 쓰였으니(Track 3), 항상 디스크만큼은 알아. 복구의 일은 그 질긴 기록을 크래시가 친 순간의 정확한 그림으로 되돌리는 거야.
그다음, 안전한 경로를 골라
이야기가 재구성되고서야 Waygate 는 고르고, 선택지는 안전순으로 정렬돼: 읽기 전용 검사(봐, 아무것도 안 바꿔), 증거로 뒷받침된 전진(증거가 안전하다고 증명한 것만 끝내), 안전한 롤백(결정론적인 데서 알려진-좋은 상태로 되돌려), 아니면 needsReview(멈추고 사람한테 물어). 파괴적 복구는 앱이 다시 돈다고 절대 안 벌어져 — 증거가 결정론적으로 안전하다고 말할 때만 벌어져.
복구는 먼저 저널에서 증거를 재구성하고, 그다음 읽기 전용 검사, 증거로 뒷받침된 전진, 안전한 롤백, 아니면 needsReview 를 골라. Waygate 는 다시 실행됐다고 파괴적 복구를 절대 안 돌려. 모든 변형 전에 쓰인 저널이, 복구가 짐작 대신 읽는 질긴 설명이야.
Waygate 를 안 지은 버전의 나였으면 복구를 '실행 시, 불완전한 오퍼레이션을 확인하고 끝내라' 로 썼을 거야. 아빠가 '끝내다' 란 단어랑 앉아 있게 했어. 어떻게 끝내? 무슨 증명으로? 소스-삭제 배리어 바로 거기서의 크래시를 데리고 걸어줬고, 난 '끝내라' 가 '유일한 좋은 복사를 지워라' 를 의미할 수 있단 걸 깨달았어. 복구는 작업 완료에 관한 게 아냐; 완료가 안전한지라도 알 만큼 진실을 재구성하는 거야. 그 리프레임이 트랙 전체야.
Exercise
볼륨 넘는 이동이 네 다른 지점에서 중단된 복구 결정 표를 써: 복사 중, 검증 뒤 publish 전, publish 뒤 소스-삭제 전, 소스-삭제 뒤. 각각에 대해, 저널이 어떤 증거를 쥐고 네 복구 경로(검사 / 전진 / 롤백 / needsReview) 중 어느 게 맞는지 말해봐.
Hint
복사 중: 부분 스테이징 항목만 있어 — 버려, 소스 온전, 안전한 전진-재시도나 검사. 검증 뒤 publish 전: 스테이징 복사가 좋아, publish 는 안전한 전진. publish 뒤 소스-삭제 전: 복사본 둘 다 있고 배리어가 불완전 — 정체성 증거가 결정론적이지 않으면 고전적 needsReview 케이스. 소스-삭제 뒤: 이동이 진짜 끝났어, committed 표시. 위험한 중간이 낙관이 아니라 증거가 정해야 하는 곳이야.