← 목록
기타 2026-06-27 25KB 읽기 24분

크라우니 압축기 (Crowny Compressor) — .ccp 포맷 기획서

2026-06-27 · 작성: 총괄집사(Opus 4.8) · 상태: 기획 v0.1 결정: 범용 아카이버 + 설치/배포 포맷 겸용 · Mac Metal 우선 GPU · 무손실 코어 + 미디어는 CAF/CVF 라우팅

1. 개요

.ccp(Crowny Compress Package) = CPU/GPU 병렬로 대용량 파일을 순식간에 압축·해제·설치하는 범용 무손실 압축기. zip/7z를 대체하면서 동시에 크라우니 앱·OS·패키지의 self-extracting 설치 포맷이 된다.

설계 우선순위: ① 속도(압축·해제·설치) > ② 무결성(무손실) > ③ 압축률. 사용자 요구 = "압축률도 좋지만 대용량이 순식간에 압축·해제·설치되는 것."

기존 자산 일반화: CAF7(오디오)·CVF(영상)·CIF(이미지)가 이미 "벡터형 4상균형3진 + 트릿트리 + -0 소멸" 원리로 완성돼 있다. 단 그 코덱들의 압축력은 -0 소멸(손실)에서 나오므로, 일반 파일엔 못 쓴다. .ccp는 같은 원리를 무손실 버전(소멸 게이팅 제거, 반복감지·트릿트리·균형3진 엔트로피만)으로 재설계한다.

2. 핵심 통찰 — 속도의 근원은 "블록 병렬"

GPU 가속 고속 압축의 본질은 파일을 독립 블록으로 쪼개 수천 스레드가 동시 처리하는 것이다. (nvCOMP/GDeflate/LZ4-GPU가 전부 이 구조.) 균형3진 자체가 빠른 게 아니라, 블록 병렬 + GPU가 속도를 만들고 4상균형3진·셀코어는 크라우니 정체성(포맷·모드선택 레이어)을 담당한다. — 이 분리를 정직하게 둔다.

  • 파일 → 독립 블록(기본 1~4MB, 튜너블) 분할
  • 각 블록 = GPU 1 threadgroup / CPU 1 스레드가 독립 압축 → 임베러싱리 병렬
  • 블록 독립성이 곧 시커블 · 부분해제 · 스트리밍 설치를 공짜로 준다

3. 4상 = 블록별 압축 모드 (구조적 정합)

셀코어 룰엔진이 블록 통계(샤논 엔트로피·반복률·바이트 히스토그램·매직바이트)를 보고 4상 중 하나를 블록헤더 1트릿으로 결정. 억지 매핑이 아니라 압축 이론과 그대로 들어맞는다.

모드알고리즘적용
A (-1, 체이닝)벡터형 반복감지LZ-family 매치/딕셔너리 (셀코어 룰이 매치 판정)텍스트·코드·반복
O (0, 균일)런렝스/균일단일값+길이 (CAF "무음구간" 무손실판)0패딩·희소·단색
T (+1, 데이터)트릿트리 엔트로피균형3진 rANS/range coder고엔트로피 일반
U (구분자)라우팅/store재압축 안함 or CAF/CVF/CIF 위임이미압축·미디어

4. 블록당 압축 파이프라인 (무손실)

블록 입력
  → [셀코어 룰엔진] 통계 측정 → 4상 모드 결정 (+ 옵션 델타/MTF 전처리)
  → A상: 벡터 반복감지(LZ)  |  O상: 런렝스  |  T상: 트릿트리 엔트로피  |  U상: store/라우팅
  → 균형3진 패킹 (TOAU, 6B/큐브) + 블록 체크섬
  → 압축 블록 출력
  • -0 소멸 게이팅 없음 (무손실 보장) — 미디어 라우팅(U상)일 때만 손실코덱 사용
  • 셀코어 룰은 규칙저장소.dat에 누적 → 데이터 유형별 모드선택 정확도 학습으로 향상

5. .ccp 파일 포맷 (TOAU 기반)

┌─ 매직 "CCP7" + TOAU 6B/큐브
├─ 헤더 큐브: 버전 · 블록크기 · 블록수 · 원본총크기 · 플래그(gpu/무손실/설치형/스트리밍)
├─ 블록 인덱스 테이블:  블록당 { 오프셋, 압축크기, 원본크기, 모드트릿(4상), CRC }
│     └ → 시커블 · 부분해제 · 병렬설치의 핵심
├─ [블록0 압축데이터][블록1]…[블록N]   ← 각각 독립, 임의 순서 해제 가능
└─ 꼬리: 전체 해시_SHA256 · 메타(파일트리/권한/심볼릭/설치스크립트)
  • 설치형 플래그: 꼬리 메타에 파일트리·퍼미션·설치스크립트 → 해제 = 설치
  • 블록 인덱스가 있으니 다운로드 중인 블록부터 즉시 해제 시작 가능

6. "순식간 설치" 메커니즘

  1. 스트리밍 해제: 블록 도착 즉시 해제→디스크 기록 (다운로드와 동시 진행)
  2. 병렬 해제: N블록 동시 GPU/CPU 해제 (블록 독립성 활용)
  3. self-extracting: .ccp 앞에 소형 런처 스텁 → 더블클릭 설치
  4. 제로카피: mmap + 블록단위 직접 배치, 임시파일 없음

7. GPU 백엔드 (Mac Metal 우선)

  • Metal 컴퓨트 셰이더(1차): 블록당 1 threadgroup. 히스토그램/엔트로피 = 병렬 reduction,
엔트로피코딩 = 인터리브 rANS(GPU 친화). Apple Silicon 통합메모리로 제로카피 유리.
  • CUDA(2차): 기존 삼진 CUDA 커널(project_ternary_cuda_kernels) 재활용, Jetson/Linux.
  • CPU 폴백(항상): NEON SIMD + 스레드풀. GPU 없거나 소형파일이면 CPU가 더 빠름 → 자동 분기.
  • 자동 디스패치: 파일크기·GPU가용성 보고 블록을 GPU/CPU에 분배(하이브리드 스케줄러).

8. 미디어 라우팅 (U상)

매직바이트 감지 → 손실 허용 시 기존 코덱 위임(선택 플래그, 기본 off=무손실 store):

  • mp4/mov → CVF · wav/flac/pcm → CAF7 · png/jpg/bmp → CIF
  • 이미 압축됨(zip/gz/jpg/mp4) → store(재압축 안함, 최고속)

9. CLI / 도구

bashccp 압축 <경로...> -o out.ccp [--level 1..9] [--gpu|--cpu] [--설치형] [--미디어손실]
ccp 해제 out.ccp [-d 대상디렉토리]
ccp 설치 app.ccp                 # self-extract + 설치스크립트 실행
ccp 목록 out.ccp                 # 블록인덱스 · 파일트리
ccp 검증 out.ccp                 # CRC + SHA256 무결성

10. 단계 로드맵

Phase내용산출
0포맷 스펙 동결 + CPU 단일스레드 레퍼런스(정확성 우선)CCP포맷.한선, 라운드트립 테스트
1셀코어 룰엔진 모드선택 + 무손실 파이프라인(A/O/T/U)CCP압축.한선, CCP모드.한선
2CPU 멀티스레드 + NEON SIMD멀티코어 벤치
3Metal GPU 백엔드 + 하이브리드 스케줄러.metal 커널 + 하드웨어.한선 동반
4설치형/스트리밍/self-extract + 미디어 라우팅ccp 설치, 스텁런처
5CLI 패키징 + 벤치마크 KPI + 상용화README/BENCHMARK/LICENSE

11. 벤치마크 KPI (CAF7 상용화 패턴 차용)

  • 압축속도 GB/s · 해제속도 GB/s · 압축률(vs zip/zstd) · 라운드트립 무결성(100%) · 설치 소요시간
  • 회귀 매트릭스: 텍스트·바이너리·이미 압축됨·희소·미디어 5종 코퍼스

12. 정직한 리스크 / 함정

  • 균형3진 패킹 오버헤드: 트릿을 바이트로 패킹하면 손실 발생 가능. → 6B/큐브 TOAU 정렬 유지,
엔트로피코딩은 trit-native rANS로 오버헤드 흡수. 무손실 라운드트립 테스트가 게이트.
  • 속도 vs 압축률: 속도 우선이므로 기본 레벨은 zstd-1~3급 목표, --level 9에서만 고압축.
  • GPU 작은파일 역효과: 디스패치 오버헤드 > 이득. 임계크기 미만은 CPU 강제(자동).
  • 무손실 절대 사수: 일반파일에 -0 소멸 금지. 미디어 손실은 명시 플래그(--미디어손실)에서만.

13. 관련 파일 / 배치(예정)

  • 디렉토리: /Users/ef/crowny-compressor/ (예정)
  • 포트: 웹 서비스화 시 crowny-ports.sh set compressor.crowny.org <port>로 선언(빌드 시)
  • 한선씨 동반: CCP포맷.한선 · CCP압축.한선 · CCP모드.한선 · 하드웨어.한선(Metal 시뮬)
  • 선행 자산: CAF7(/Users/ef/crowny-audio) · CVF(video.crowny.org) · CIF · 삼진 CUDA 커널

14. Phase 0 완료 (2026-06-27) ✅

산출물 (/Users/ef/crowny-compressor/):

  • spec/CCP-FORMAT-v0.md — 포맷 스펙 동결(헤더22B·블록인덱스5B·4상 모드트릿·FNV체크섬)
  • src/ccp.c — CPU 레퍼런스 인코더/디코더 CLI (cc -O2 -o ccp src/ccp.c)
  • ccp c|d <in> <out> 압축/해제, ccp l 블록목록, ccp t 자체검증
  • 구현 모드: U(STORE)·O(RLE). 블록 병렬·SIMD·Metal은 Phase 2~3.
  • src/CCP모드.한선 — 셀코어 모드선택 룰 동반(반복률→4상, 교차곱으로 나눗셈함정 회피). 컴파일·실행 OK, 학습DB 등록(압축블록_모드선택_4상).
  • 검증 결과 (전부 무손실 라운드트립 + 체크섬 OK):

    입력원본압축비율
    자체검증(균일+난수+런 혼합)200,000 B84,436 B42.2%
    텍스트(스펙md)2,814 B2,845 B101.1% ⚠️
    바이너리(ccp 실행파일)34,144 B11,645 B34.1%
    5MB 0패딩(대용량 균일)5,000,000 B39,779 B0.7%
    • 4상 블록 라우팅 실증: 균일블록→O/RLE, 의사난수블록→U/STORE 자동 선택.
    • 대용량 균일 데이터 0.7% 즉시 압축 = "대용량 순식간" 1차 증거.
    • 텍스트 101.1% 팽창 = 정직한 Phase 0 한계(RLE 무효+STORE 오버헤드) → Phase 1 A/T 모드가 해결.

    15. Phase 1 완료 (2026-06-27) ✅ — 4상 모드 전부 작동

    추가 산출물:

    • ccp.c 확장 (337줄): A상 LZ(LZ4식 해시매치, lz_encode/lz_decode) + T상 엔트로피(적응 order-0 Subbotin 레인지코더 range_encode/range_decode → LZ스트림 2단 압축).
    • 셀코어 룰 = "후보 생성→최소 채택"으로 확장: STORE/RLE/LZ/LZ+엔트로피 중 블록별 최소 선택, 4상 모드트릿 기록.
    • src/CCP엔트로피.한선 — 적응 빈도모델 룰 동반(초기화/누적/갱신/재정규화). 컴파일·실행 OK, 학습DB 등록(압축_엔트로피_적응모델).
    벤치 (전부 무손실 라운드트립 + 체크섬 OK, vs gzip):
    입력원본ccp비율gzipccp/gzip
    자체검증(혼합)200,0007,6903.8%
    텍스트(스펙md)2,8141,84565.6%1,5631.18x
    바이너리(ccp)34,1446,38018.7%5,8121.09x
    5MB 0패딩5,000,0003,0980.1%4,9000.63x (이김)
    소스(crownyc.c 717KB)717,735245,71134.2%171,6831.43x
    • 진척: 텍스트 101%(P0)→65.6%(P1), 자체검증 42%→3.8%. 균일/반복 대용량은 gzip 추월.
    • 남은 격차(big.c 1.43x): order-0 엔트로피가 LZ 혼합스트림(리터럴/길이/거리)을 한 모델로 처리 → gzip은 컨텍스트 분리 Huffman. Phase 1.5에서 스트림 분리 or order-1 컨텍스트로 격차 축소 가능.

    16. Phase 2 (블록 병렬) + 1.5 (레벨/압축률) 완료 (2026-06-28) ✅

    Phase 2 — 블록 병렬 (pthread work-steal, 원자 카운터):

    • 압축/해제 워커가 블록을 원자적으로 분배, 블록 독립성으로 거의 선형 확장.
    • 200MB 혼합 파일 실측 (12코어 M-series):
    1 스레드12 코어가속
    압축512 MB/s4,757 MB/s~9x
    해제923 MB/s5,821 MB/s~6x
    200MB 압축 ~45ms / 해제 ~36ms = "대용량 순식간" 달성. 압축률은 스레드 무관 동일.

    Phase 1.5 — 압축레벨 (속도 우선 기본, 선택적 고압축):

    • order-1 단독은 혼합 LZ스트림에서 무효 확인 → 2-스트림 분리(리터럴 order-1 / 제어 order-0)로 격차 축소.
    • T블록 tflag로 두 포맷 공존: 0=단일스트림 order-0(고속), 1=2-스트림 분리(최대).
    • 레벨: L1=고속LZ · L5=기본(order-0, 최속+균형) · L9=최대(분리+order1). ccp c <in> <out> [1-9].
    레벨big.c(717KB)200MB 압축vs gzip(big.c)
    L139.4%3,837 MB/s1.65x
    L5(기본)34.2%4,757 MB/s1.43x
    L931.9%3,707 MB/s1.34x
    • 자체검증(혼합) L9 = 2.4%. 3레벨 전부 무손실 라운드트립 PASS.
    • 정직: 일반 텍스트/코드는 gzip의 1.34~1.65x(엔트로피 컨텍스트 한계), 단 속도가 gzip 대비 수십 배 + 균일/반복 대용량은 gzip 추월. 사용자 1순위(속도)에 최적화.

    17. Phase 3 (Metal GPU PoC) 완료 (2026-06-28) ✅

    • kernels/ccp_metal.m (106줄) — 런타임 셰이더 컴파일(newLibraryWithSource, 오프라인 metal 툴체인 불필요).
    블록당 1 GPU 스레드 per-block RLE 커널. clang -fobjc-arc -framework Metal -framework Foundation.
    • src/CCP하드웨어.한선 — GPU 커널의 한선씨 시뮬 동반(플랫폼락 더블작성). 컴파일·실행 OK, 학습 등록.
    • 실측 (M2 Max, 50MB 균일/반복):
    방식속도압축률
    CPU L5 (LZ+엔트로피, 12코어)6,434 MB/s0.4%
    GPU RLE (블록 4096)15,460 MB/s1.0%
    • 정직한 결론: GPU는 단순모드(RLE/통계)에서 2.4x 빠름(15.5 GB/s) 단 LZ+엔트로피 부재로 압축률↓.
    하이브리드 스케줄러가 정답: GPU=균일/반복 블록 고속 처리, CPU=복잡 블록 LZ+엔트로피. 통합메모리라 CPU도 이미 대역폭 한계 근처(6.4 GB/s)지만, GPU가 RLE 레인에서 별도 처리량 추가.

    18. 현 상태 요약 (Phase 0~3 완료)

    완성: 동작하는 무손실 압축기 — 4상 블록 라우팅(U/O/A/T) · 블록 병렬(12코어 4.7GB/s) · 3레벨 · GPU PoC(15.5GB/s). 산출물: ccp.c(491줄, CPU) · ccp_metal.m(106줄, GPU) · 한선씨 동반 3종(모드/엔트로피/하드웨어) · 포맷스펙. 사용자 목표 달성: "대용량 순식간" = 200MB 압축 45ms/해제 36ms, 균일 대용량 GPU 15.5GB/s. 무손실 + 미디어 CAF/CVF 라우팅 설계.

    19. Phase 4 (A 하이브리드GPU + B 아카이브/설치 + C 미디어라우팅) 완료 (2026-06-28) ✅

    울트라 에이전트 워크플로우로 진행: 병렬 조사(3 Explore) → 통합(메인) → 적대검증(4 병렬).

    리팩터: compress/decompress → buffer 코어(ccp_compress_buf/ccp_decompress_buf) + 얇은 파일 래퍼. 아카이브가 인메모리로 코어 재사용.

    B — 폴더 아카이브 + 설치(해제=설치):

    • walk_dir(lstat 재귀, 심볼릭 비추적) → 매니페스트{경로·타입·mode·size·링크} + 데이터 직렬화 → 기존 블록엔진 통과(블록코드 무변경). flags bit1=설치형.
    • ccp a <out.ccp> <경로...> 아카이브, ccp x <in.ccp> [대상] 추출=설치(3패스: 디렉토리→파일→심볼릭, 권한복원, 원자적 rename, 경로공격 차단 safe_rel).
    • ccp sx <a.ccp> <설치기.command> self-extract — 4KB 셸스텁 + 아카이브 → Finder 더블클릭 설치.
    • 검증: 폴더(디렉토리/파일/심볼릭/권한 755) 라운드트립 diff -r 일치, self-extract 설치 무손실.
    C — 미디어 라우팅 + 이미압축 감지:
    • detect_compressed() 매직바이트표(zip/gz/png/jpg/mp4/mp3/zstd… 19종) → 이미압축/미디어는 STORE 강제(헛수고·역효과 방지, 항상 무손실). gz 파일 100% STORE 검증.
    • ccp m <미디어> 손실 라우팅: wav→CAF7(실 바이너리 호출 검증), mp4→CVF(node+ffmpeg). 도구 없으면 rc!=0 폴백. CIF는 서버전용·스텁이라 제외(조사 결론).
    A — GPU 하이브리드 레인:
    • src/ccp_gpu.{h,m} GPU 라이브러리(ccp_gpu_init/rle_batch/destroy), ccp.c는 순수 C 유지. 단일 링크 빌드.
    • ccp-gpu g <in> <out> GPU RLE 레인(블록당 1 GPU스레드). GPU 인코드 → CPU 디코더 호환(STORE/RLE 모드만) 라운드트립 무손실.
    • 정직: GPU 레인=고속·저압축률(50MB 0.8%), CPU L5=고압축률(0.4%). 둘은 별도 레인(사용자/휴리스틱 선택). 블록단위 자동 라우터는 차기.
    빌드: make(CPU 전기능) · make ccp-gpu(Metal) · make ccp_asan(메모리검증). 한선씨 동반 추가: CCP아카이브.한선(매니페스트 포맷+경로안전, 컴파일·실행·학습 완료). 총 동반 4종.

    19b. 적대검증 울트라 워크플로우 + 하드닝 (2026-06-28) ✅

    4 에이전트 병렬 적대검증(289K 토큰) → GPU레인 16/16·코어 무손실 81건 전수 PASS. 악성/손상입력에서 11개 버그 적발 → 전부 수정 + ASan 클린(유효경로 누수 0):

    버그내용수정
    FIFO 행특수파일 아카이브 시 무한블록add_path에 !S_ISREG 스킵
    SFX 종료코드설치 실패해도 exit 0스텁 exit $RC 전파
    미디어 종료코드system() wait status→exit 0WEXITSTATUS 정규화
    Bug-A blocks과대0xFFFFFFFF→OOB인덱스 크기 검증
    Bug-B csize과대블록합>본문→OOB블록합==본문 검증
    Bug-C extract 죽은코드get_u32 2B OOB죽은 라인 제거+경계검사
    Bug-D LZ오프셋잘린스트림 OOBi+1<cn·off<=o 가드
    Bug-E/F TRITcsize<5·tflag무효 OOBcsize·tflag 가드+memset0
    Bug-G count과대거대 malloc NULL derefcount*15<=payload 가드
    Bug-H 버전미검증 묵과src[4]!=VERSION 거부
    손상 .ccp는 이제 전부 크래시 없이 "손상:…" 메시지로 거부. 매니페스트 경계·경로공격(safe_rel) 검증. ccp.c 764줄.

    20b. Phase 5 (SHA256 무결성 v1 + 블록단위 하이브리드 라우터) 완료 (2026-06-28) ✅

    ① SHA256 무결성 (포맷 v1, FNV 4B → 32B):

    • C 스칼라 SHA256 구현(shasum -a 256과 바이트 일치 검증). VERSION 0→1, 꼬리 4B→32B, 바운드검사 전부 +32 반영.
    • 병목 발견·해결: 전체파일 단일 SHA256(스칼라 ~233MB/s)이 압축속도(4.7GB/s)를 20배 깎음 → 병렬 머클 루트(merkle_root: 블록별 SHA256 코어분산 → 루트=SHA256(다이제스트 연접))로 ~1.3GB/s 복구. 암호학적 강도 유지(블록 변경→루트 변경).
    • 변조 1바이트 → "무결성 불일치" 거부 확인. 손상입력 회귀(v1 32B trailer) ASan 클린.
    ② 블록단위 GPU/CPU 하이브리드 자동 라우터 (ccp-gpu h):
    • 블록 반복률 ≥0.50 → GPU 레인(RLE), 미만 → CPU 레인(LZ/엔트로피). GPU 스레드(전블록 RLE) ‖ CPU 워커(저반복) 동시가동 후 레인별 결과 조립.
    • 200MB 혼합: GPU블록 1152/3200 오프로드, 압축률 32.3%(CPU 32.0%와 동급) 유지, 무손실. 고반복(=CPU LZ가 느린) 블록을 GPU가 병렬 처리.
    한선씨 동반 추가: CCP무결성.한선(머클루트+레인결정, 빌트인 해시_SHA256). 총 동반 5종. ccp.c 832줄. 정직: 머클해싱이 무결성 비용(무결성 없는 FNV 4.7GB/s vs SHA256 1.3GB/s) — 200MB 0.15초로 여전히 "순식간". 추가 가속은 ARM SHA-NI 하드웨어 명령(차기).

    21. Phase 6 (ARM SHA-NI 하드웨어 무결성 가속) 완료 (2026-06-28) ✅

    미션: 전 세계의 압축/해제 시간을 줄여 시간·에너지·공간을 만든다. 병목=무결성 해싱.

    • Apple Silicon SHA-NI 명령(vsha256hq/h2q/su0q/su1q) NEON 변환 추가. __attribute__((target("crypto")))로 크립토 확장 컴파일, arm64 자동 사용 + 스칼라 폴백(CCP_NO_SHANI).
    • 정확성 검증: ccp sha(디버그) == shasum -a 256 전부 일치(abc 알려진벡터~200MB), HW==스칼라 해시 동일.
    • 속도: 압축 무결성 비용 20배→1.7배 단축. 200MB L5 ~2,800 MB/s(무결성 포함, 머클=병렬 HW SHA). 스칼라 1.3GB/s → HW 2.8GB/s.
    • 전기능 무손실 회귀 + 손상입력 ASan 클린 유지. ccp.c 908줄.
    누적 속도 진화 (200MB, 무결성 포함): 무결성무(FNV) 4.7GB/s → SHA256 스칼라 0.23GB/s → 병렬머클 1.3GB/s → SHA-NI 병렬머클 2.8GB/s. 강한 암호 무결성 + "순식간" 양립.

    22. Phase 7 (스트리밍 아카이브 + 자기완결 SFX + GPU 무결성 겹침) 완료 (2026-06-28) ✅

    ① 스트리밍 아카이브 (메모리 O(블록), GB급 폴더):

    • add_path_stream(데이터 미적재 매니페스트) + 세그먼트 테이블(매니페스트=메모리·파일=디스크) + read_global(이진탐색→pread 온디맨드) + sworker(블록단위 스트리밍 압축, 블록별 SHA). 파일 데이터를 RAM에 안 쌓음.
    • 200MB 폴더 아카이빙 RSS 143MB(구 메모리적재 ~467MB 대비 3배 절감). 무손실·심볼릭·빈폴더 OK. ccp a가 스트리밍 사용.
    ② 자기완결 self-extract 바이너리 (ccp sx2):
    • ccp 실행파일 자체에 아카이브 임베드(꼬리=u64 오프셋+"CCPSFX"). _NSGetExecutablePath로 자기 탐지→임베드 추출. 외부 ccp 0 의존. 깨끗한 env에서 설치 무손실, 일반 ccp 오탐 0. (extractextract_mem 리팩터)
    ③ GPU 무결성 겹침 (정직한 판단):
    • GPU엔 SHA 하드웨어 없음 → Metal 스칼라 SHA 커널은 CPU SHA-NI보다 느림(미채택). 대신 CPU SHA-NI 머클을 GPU RLE 연산과 동시 계산(GPU 도는 동안 노는 CPU 활용, mr_thread). GPU/하이브리드 레인은 이미 HW SHA-NI 머클 사용.
    검증: 전기능 무손실(코어·스트리밍아카이브·자기완결SFX·GPU·하이브리드) + 새 경로 ASan 클린(손상아카이브·빈폴더 엣지 안전). ccp.c 1052줄.

    23. Phase 8 (스트리밍출력 + 이식 + 한선씨 디코더, 병렬) 완료 (2026-06-28) ✅

    울트라 병렬: 백그라운드 에이전트(③ 한선씨 디코더, 독립파일) ‖ 메인세션(①② ccp.c).

    ① 스트리밍 출력: write_ccp_file(블록별 버퍼를 FILE에 순차 기록·즉시 free, 거대 dst 미사용). archive_stream 적용 → 200MB 폴더 RSS 75MB(스트리밍출력 전 143MB, 원래 ~467MB 대비 6배 절감). 입력(pread 온디맨드)+출력(비복사) 양쪽 메모리 O(블록).

    ② Linux/Windows 이식: get_exe_path(macOS _NSGetExecutablePath + Linux /proc/self/exe)로 SFX 이식. SHA-NI/Metal 가드로 비-arm64/비-macOS는 스칼라·CPU 폴백. -DCCP_NO_SHANI 스칼라 빌드 클린(x86 경로 검증). Windows=GetModuleFileName 포팅 차기.

    ③ 크라우니브라우저용 한선씨 .ccp 디코더 (src/CCP디코더.한선, 플랫폼락 더블, 서브에이전트 sonnet):

    • STORE(U)·RLE(O) 모드 디코드(정수읽기4 곱셈합성으로 나눗셈함정 회피). 헤더파싱·블록순회·재구성·해제파일. STORE/RLE PASS(cmp 바이트동일) 독립검증.
    • LZ/TRIT는 레인지코더 나눗셈이 4상균형3진 비호환 → 네이티브 ccp d 필요(명시). GPU레인(ccp-gpu g)이 STORE/RLE만 생성하므로 실용적.
    • 신규 함정 발견: hanseonc_high 2>&1 컴파일이 stderr 로그를 toau에 섞어 VM hang → > out.toau(stderr 분리) 필수. 한글1자≈9cubes. [[feedback_hanseon_compile_stderr_trap]] 메모리+가드레일템플릿 기록.
    검증: C 전기능 무손실 + 한선씨 디코더 STORE/RLE PASS + 스트리밍출력 ASan 클린. ccp.c 1062줄·한선씨 동반 6종.

    24. Phase 9 (한선씨 디코더 LZ 모드 추가) 완료 (2026-06-28) ✅

    검증 가능성 우선 분별: x86 SHA-NI·Windows 포팅은 이 arm64 macOS에서 실행 검증 불가(미검증 크립토=위험) → 보류. 대신 여기서 검증 가능한 한선씨 디코더 확장에 집중.

    한선씨 디코더에 LZ(모드2) 추가 (src/CCP디코더.한선 210줄):

    • 고니블/저니블(니블 추출을 뺄셈 루프로 — 나눗셈 함정 회피), LZ해제(C lz_decode 1:1 거울: 토큰·리터럴·오프셋·매치복사, 15-확장, off/길이 가드).
    • STORE·RLE·LZ 3종 PASS — 한선씨 내부 검증 + 셸 cmp 독립 교차검증 byte-identical. 큰 LZ파일(소스 레벨1)도 A/LZ 디코드.
    • 로드 3221 cubes (에이전트가 우려한 ~1900은 하드캡 아님 확인).
    • 남은 1모드 TRIT(3): 레인지코더 range/=tot 등 무부호 32bit 나눗셈/wraparound이 4상균형3진 VM과 비호환 → 정수 재설계 필요(차기). ccp c -5/-9만 TRIT 사용, -1(LZ)+GPU레인은 한선씨로 완전 해제 가능.
    커버리지: 크라우니브라우저가 .ccp의 3/4 모드(STORE/RLE/LZ)를 순수 한선씨로 해제. 실용 대부분 커버.

    25. 다음 액션 (Phase 10~)

    • 한선씨 TRIT 디코드 — 레인지코더 무부호 나눗셈을 정수 routine(뺄셈 long division)으로 재설계
    • x86 SHA-NI / Windows 포팅 — x86 테스트 호스트 확보 후 검증과 함께
    • 크라우니브라우저 WASM .ccp 디코더(crowny-wasm로 한선씨→WASM)
    • TOAU 큐브정렬(6B/큐브) v2 헤더

    20. 다음 액션 (구 Phase 5 — 위에서 완료)

    • 블록단위 GPU/CPU 자동 라우터(반복률 기반 분배, 동시가동)
    • 스트리밍 압축 입력(GB급 폴더 메모리 2배 회피)
    • TOAU 큐브정렬 v1 헤더 + SHA256 체크섬
    • 압축률: order-2 / 거리·길이 별도 모델
    • self-extract 단일바이너리 임베딩(ccp PATH 의존 제거)