"저장은 네 폰에서 일어나. 네트워크는 자르고 다시 고용할 수 있는 배달원이야 — 네 생각이 살아남을지 결정하는 건 절대 아냐."
저장은 로컬이야
현장 캡처를 신뢰 가능하게 만드는 invariant 가 여기 있어: breadcrumb 은 어떤 네트워크 sync 도 시도되기 전에, 기기에, 로컬로 커밋된다. 저장을 탭하는 순간, 생각은 로컬 outbox 에 durable 하고 — 그다음에야 엔진이 Office 로 push 를 시도해. 이건 죽은 호텔 네트워크, 비행기 모드, 닿지 않는 Pippa 가 기억을 앗아갈 수 없다는 뜻이야. Office 연결도 Pippa 도 저장 임계경로에 절대 없어. 네트워크의 일은 이미 안전히 저장된 걸 배달하는 거지, 저장하는 그것이 되는 게 아냐.
outbox state machine
캡처된 각 breadcrumb 은 명시적 state 집합을 지나: LOCAL_ONLY, QUEUED, SYNCING, SYNCED, FAILED_NEEDS_ATTENTION. 결정적 규칙은 로컬 payload 가 idempotent 서버 승인 전에 절대 삭제되지 않는다 는 거야. sync 실패한 crumb 은 사라지지 않고 조용히 중복으로 retry 하지도 않아 — 해결될 때까지 보이는 failed state 에 앉아 있어. 그리고 스트림이 항상 unsynced 수를 드러내니까, PWA 저장이 최종 아카이브가 아니라 staging 영역임을 한눈에 봐. 아무것도 조용히 안 버려지고; 아무것도 조용히 안 중복돼.
왜 idempotency 가 현장에서 중요한가
현장 네트워크는 느리기만 한 게 아냐 — 모호해. 요청이 나가고, 연결이 죽고, 서버가 받았는지 진짜 몰라. 순진한 수정인 맹목 retry 는 중복을 만들어: 첫 게 실제로 도착했으니 같은 crumb 사본 두 개. Waystone 는 각 crumb 에 안정된 기기-생성 정체성을 줘서, retry 가 idempotent 야 — 서버가 같은 crumb 으로 인식하고 두 번째를 안 만들어. 이게 나쁜 연결 후 낫는 outbox 와 신호 끊길 때마다 기억을 조용히 불리는 것의 차이야.