diff options
Diffstat (limited to 'docs/research/069-atomic-authored-size-policy.md')
| -rw-r--r-- | docs/research/069-atomic-authored-size-policy.md | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/docs/research/069-atomic-authored-size-policy.md b/docs/research/069-atomic-authored-size-policy.md new file mode 100644 index 0000000..4718e89 --- /dev/null +++ b/docs/research/069-atomic-authored-size-policy.md @@ -0,0 +1,72 @@ +# 069 — 작성한 크기 정책을 실제 문서 효과에 연결 + +2026-09-24. Linux AArch64, GCC 14.2, C17 `-O2`. 첫 공개 체크포인트를 향한 +실제 앱 경계 검증이다. [068](068-opaque-app-core.md)의 불투명 실행 코어는 +변경하지 않았다. + +[`bounded-editor.pure`](../../prototypes/connections/examples/bounded-editor.pure)는 +`store.splice(..., edit.insert, 8)`로 수정 후 문서의 최대 바이트 수를 작성한다. +준비 단계에서 상수를 검사하고, 저장 어댑터가 그 값을 효과에 전달한다. +두 저장 구현은 쓰기 잠금 안에서 현재 버전의 크기, 제거 길이, 삽입 길이로 +최종 크기를 계산한다. 초과하면 새 파일·리비전을 공개하지 않는다. +정책 검사를 위한 별도 읽기나 전체 문서 버퍼는 만들지 않는다. 요청 본문이 +상한 값을 결정하지도 못한다. 예상 리비전 충돌을 먼저 판단하므로 낡은 +요청은 정책 결과로 충돌을 가리지 않는다. + +CLI에서 6 B 생성→2 B 추가는 허용됐고 1 B 추가는 거절됐으며, 기존 8 B +내용과 리비전 2가 유지됐다. 1 B 제자리 교체는 허용됐다. 정의의 상한을 +4 B로 바꾸고 새 소스 호스트를 시작하자 같은 길이의 교체도 거절되고, +4 B 삭제만 허용됐다. 고정 빌드는 처음 준비한 8 B 정책을 유지했다. +소스·고정 HTTP는 같은 저장 파일에서 동일한 결과를 냈고, 두 TUI는 +저장 거절 뒤 초안을 보존했다. 선택형 상호 인증 TLS 피어도 초과 수정은 +상태 5(`limit`)로 거절하고 허용한 삭제는 CLI에서 같은 버전으로 읽혔다. +[실행 증거](../../prototypes/connections/results/2026-09-24-atomic-policy/policy.json)와 +[인증 피어 증거](../../prototypes/connections/results/2026-09-24-atomic-policy/policy-peer.json)에 +재현된 시나리오를 기록했다. + +| Linux AArch64 `text` / 저장 비용 | 이전 068 | 현재 | 변화 | +|---|---:|---:|---:| +| 기본 실행 코어 | 4,632 B | **4,632 B** | 0 | +| 유휴 영역 / 활성 슬롯 | 120 / 216 B | **120 / 216 B** | 0 / 0 | +| 준비된 문서 정의 | 680 B | **680 B** | 0 | +| 소스 CLI / HTTP | 35,743 / 43,950 B | **36,135 / 44,342 B** | +392 / +392 B | +| 고정 CLI / HTTP | 19,204 / 26,625 B | **19,268 / 26,689 B** | +64 / +64 B | +| 고정 / 소스 TUI | 31,959 / 48,572 B | **32,023 / 48,972 B** | +64 / +400 B | +| 선택형 비동기 소스 HTTP | 48,241 B | **48,633 B** | +392 B | +| 선택형 TLS 겸용 피어 | 46,894 B | **47,286 B** | +392 B | +| 선택형 혼합 저장소 HTTP | 49,133 B | **49,589 B** | +456 B | + +`PureProgram`의 정책 값은 기존 정렬 패딩에 배치했다. 64비트 호스트의 +680 B 크기를 컴파일 시 검사한다. 기본 코어 아카이브에는 계속 `runtime.o` +하나만 있으며, 문서 평가기·정책·저장소는 포함되지 않는다. 선택형 혼합 +저장소 HTTP는 기존 49,152 B 상한을 437 B 초과했다. 이전 소스 묶음을 +같은 도구로 다시 빌드해 49,133 B 기준을 확인했고, 456 B 증가를 검토해 +선택형 상한만 50,176 B로 조정했다. 기본 코어 상한은 그대로 4,864 B다. +소스 TUI는 현재 49,152 B 상한까지 180 B만 남는다. 이후 기능은 이 +선택형 실행물의 코드 구조를 다시 검토해야 하며 상한을 자동으로 늘리지 않는다. +이 수치들은 코드 섹션이고 libc/OpenSSL, 스택, payload 및 저장 파일을 +포함하지 않는다. 기존 1 MiB 문서 검사의 피크 RSS는 소스 CLI 2,080 KiB, +고정 CLI 2,112 KiB였다. 런 간 차이를 정책의 RAM 효과라고 주장하지 않는다. + +`check-release`에는 실제 CLI·HTTP·TUI 정책 경로를 넣었다. +`check-policy-peer`, `check-hybrid`, `check-async`, `check-async-server`, +기존 TUI·인증 피어 검사와 ASan/UBSan C·정책 검사가 통과했다. 이 환경의 +ptrace 아래에서 LeakSanitizer는 실행되지 않아 누수 탐지는 끄고 실행했다. +현재 C 호스트를 기존 Zig scalar 정적 라이브러리와 다시 링크한 세 앱 +인스턴스 검사도 통과했지만 Zig를 새로 빌드한 증거는 아니다. + +[소스 묶음](../../prototypes/connections/results/2026-09-24-atomic-policy/pure-source-preview.tar.gz)은 +173개 파일이다. [깨끗한 추출 검사](../../prototypes/connections/results/2026-09-24-atomic-policy/source-package-check.json)는 +릴리스·TUI·TLS·문서 전달·저장 형식 변환 경로를 다시 실행했다. +[소스 CLI](../../prototypes/connections/results/2026-09-24-atomic-policy/pure-document-source-cli-linux-aarch64.tar.gz), +[고정 CLI](../../prototypes/connections/results/2026-09-24-atomic-policy/pure-document-fixed-cli-linux-aarch64.tar.gz), +[고정 CLI+TUI](../../prototypes/connections/results/2026-09-24-atomic-policy/pure-document-fixed-cli-tui-linux-aarch64.tar.gz), +[소스 CLI+TUI](../../prototypes/connections/results/2026-09-24-atomic-policy/pure-document-source-cli-tui-linux-aarch64.tar.gz)는 +각각 이동한 위치에서 실제 문서 작업을 통과했다. 압축 크기는 순서대로 +22,862 / 12,966 / 32,144 / 51,398 B다. + +이것은 **문서 수정 효과 안의 한 숫자 정책**이다. scalar 앱의 규칙 언어와 +문서 앱이 하나로 합쳐진 것은 아니며, 일반 산술·조건부 효과·여러 효과, +네트워크/RPC의 범용 연결도 아직 없다. 바이트 상한은 문자나 문자소 +수의 상한이 아니다. macOS arm64 CI에는 정책 검사를 추가했지만, 해당 +빌드·실행 결과는 아직 확인하지 못했다. |
