"취소는 '세계를 undo' 가 아냐. '깨끗이 멈추고, 확실히 내 거라고 아는 것만 치운다' 야."
일시정지랑 취소는 협조적이야
긴 복사는 중단 가능해야 해 — 사용자가 일시정지하거나 취소할 수 있어야 해. 근데 중단이 아무 순간에 벌어지면 오퍼레이션을 알 수 없는 상태로 남겨. Waygate 는 일시정지랑 취소를 협조적으로 만들어: 엔진이 일시정지/취소 요청을 안전한 체크포인트에서만 확인해 — 여러 항목 복사에서 파일 사이, 큰 전송에서 청크 사이. 그 지점에선 상태가 알려졌고 저널이 일관되니, 멈추는 게 깨끗해.
부분 스테이지는 절대 승격 안 돼
이 레슨이 지키는 핵심 규칙: 부분 스테이지는 절대 목적지로 제시 안 돼. 복사를 도중에 취소하면, 반쯤 쓰인 스테이징 항목은 진짜 이름으로 publish 안 돼 — publish 는 완전한 검증 뒤에만 벌어지고, 취소된 복사는 거기 절대 도달 안 해. 사용자는 오퍼레이션이 멈추는 걸 봐; 목적지 이름을 입은 잘린 파일은 절대 안 봐. 취소는 공개 전에 길을 멈춰, 그래서 분장이 절대 안 벗겨져.
정리는 자기 것만 치워
오퍼레이션이 취소되면 정리할 수 있어 — 근데 확실히 소유하는 아티팩트(자기 스테이징 항목)만, 그리고 불확실함이 없을 때만. .waygate-stage-op_7a3f 는 저널이 그 항목이 이 오퍼레이션 거고 오퍼레이션이 안 끝났다고 증명하니까 지워. 자기가 만들었다고 증명 못 하는 건 아무것도 안 건드려. 모호함은 두고 표시하라는 뜻이지, 절대 추측성 삭제가 아냐. 디렉토리 복사는 메인 스레드 밖에서 경계 지어진 게으른 작업 그래프를 짓고, 진행이 바이트·항목·현재 항목·불확정 작업을 정직하게 나눠 — 그래서 일시정지가 항상 엔진이 이해하는 곳에 떨어져.