aboutsummaryrefslogtreecommitdiffstats
path: root/docs/research/069-atomic-authored-size-policy.md
blob: 4718e89cf51c31876d85d6a3ad9c7aa4db68d3f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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에는 정책 검사를 추가했지만, 해당
빌드·실행 결과는 아직 확인하지 못했다.