aboutsummaryrefslogtreecommitdiffstats
path: root/docs/research/062-paged-store-rollback.md
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-24 17:14:54 +0100
committereunhhu <[email protected]>2026-09-24 17:14:54 +0100
commitb1ce1927022d374198441afafeb27199fc8a052a (patch)
tree6021f175f4c67ed03b44240eaa2f90d846f12f6f /docs/research/062-paged-store-rollback.md
parentd34f9426d5317a1948f12f229439946728bc342a (diff)
downloadpure-b1ce1927022d374198441afafeb27199fc8a052a.tar.gz
pure-b1ce1927022d374198441afafeb27199fc8a052a.zip
Establish native micro runtime checkpoint
Diffstat (limited to 'docs/research/062-paged-store-rollback.md')
-rw-r--r--docs/research/062-paged-store-rollback.md45
1 files changed, 45 insertions, 0 deletions
diff --git a/docs/research/062-paged-store-rollback.md b/docs/research/062-paged-store-rollback.md
new file mode 100644
index 0000000..1f734dc
--- /dev/null
+++ b/docs/research/062-paged-store-rollback.md
@@ -0,0 +1,45 @@
+# 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에서는
+아직 컴파일·실행하지 않았다. 원본을 제자리에서 바꾸거나 실행 중 쓰기를
+투명하게 이전하지 않으며, 파일 손상 복구나 모든 전원 장애를 증명하지 않는다.
+기본 저장기는 여전히 페이지 파일을 직접 읽지 못한다. 이 경로는 선택형
+페이지 실험을 되돌릴 실제 수단이지, 기본 저장 경로 승격의 근거 전체는 아니다.