# 062 — 선택형 페이지 저장소를 기본 불변 형식으로 되돌리기 [061](061-durable-document-edit-latency.md)의 페이지 저장소는 실제 큰 문서 수정에서 짧은 중앙값을 보였지만, 기본 저장기가 `PUREP001`을 읽지 못했다. 이 형식 경계를 줄이기 위해 [문서 앱 전용 내보내기](../../prototypes/connections/export_flat_store.py)를 만들었다. 도구는 **새 디렉터리**에 현재 본문과 리비전을 `PUREB001`로 기록하고, 기본 고정 CLI로 전부 재읽은 후에 디렉터리를 공개한다. 원본을 변경하지 않는다. 런타임 코어와 기본 앱의 C 소스·링크 경로에는 코드가 추가되지 않았다. 변환 동안 원본 `.writer.lock`의 공유 POSIX 잠금을 유지한다. 협력하는 쓰기 프로세스는 `busy`를 받으며, 키 목록과 각 읽기는 한 시점의 일관된 상태를 본다. 각 대상 파일과 대상 디렉터리를 동기화하고, 임시 디렉터리를 최종 경로로 이름 변경한 뒤 상위 디렉터리도 동기화한다. 중간 읽기가 실패하면 임시 디렉터리를 지우고 최종 경로를 공개하지 않는다. 대상 경로는 실행 전에 존재하지 않아야 하며, 그 경로를 다른 프로세스가 동시에 생성하지 않아야 한다. 서비스 쓰기가 `busy`를 받지 않도록 유지보수 중 실행하는 경로다. [실제 앱 검사](../../prototypes/connections/results/2026-09-24-flat-export/export-check.json)는 빈 값·1바이트·16 KiB 경계·16 KiB 초과·1 MiB 문서를 생성하고, 큰 문서를 65회 수정한 후 내보냈다. 모든 본문과 리비전이 새 기본 저장기에서 일치했고, 기본 저장기로 이어서 수정하자 리비전이 66→67로 증가했다. 원본은 66을 유지했다. 변환 중 별도 쓰기는 `busy`, 종료 뒤 같은 쓰기는 성공했다. 기존 대상·심볼릭 링크 객체·주입한 중간 읽기 실패도 거절하고 미완성 대상을 남기지 않았다. [1,024개 추가 문서 검사](../../prototypes/connections/results/2026-09-24-flat-export/export-scale-1024.json)는 총 1,029개 객체, 1,212,418 논리 바이트를 변환하고 각 객체를 기본 CLI로 재읽었다. 이는 `/tmp` 파일시스템의 기능 검사이며 처리량 자료가 아니다. [ext4 경로 검사](../../prototypes/connections/results/2026-09-24-flat-export/export-ext4.json)는 같은 다섯 문서와 동기화·공개·복원을 작업트리의 ext4에서 실행했다. 재현 명령은 `make -C prototypes/connections check-flat-export`다. 현재 `check-hybrid`에도 이 검사가 포함된다. [새 소스 묶음](../../prototypes/connections/results/2026-09-24-flat-export-source/pure-source-preview.tar.gz)은 168개 파일, 압축 329,118 B이며 [별도 디렉터리 검사](../../prototypes/connections/results/2026-09-24-flat-export-source/source-check-linux-aarch64.json)에서 이 변환, C·TUI·CLI 동작과 Linux 릴리스 상한을 통과했다. 앞선 묶음과 해시를 비교하면 실행용 C·헤더는 모두 같다. 새 코드는 선택형 Python 변환기·검사와 사용 안내에만 있다. 도구는 번들된 `editor.pure` 문서 앱의 고정 CLI를 사용하며 범용 저장소 마이그레이터는 아니다. 소스가 16 KiB 페이지를 요구하고 Apple Silicon에서는 아직 컴파일·실행하지 않았다. 원본을 제자리에서 바꾸거나 실행 중 쓰기를 투명하게 이전하지 않으며, 파일 손상 복구나 모든 전원 장애를 증명하지 않는다. 기본 저장기는 여전히 페이지 파일을 직접 읽지 못한다. 이 경로는 선택형 페이지 실험을 되돌릴 실제 수단이지, 기본 저장 경로 승격의 근거 전체는 아니다.