2026-05-30
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 Zig 0.16 마이그레이션 후속으로 함수 지역, linker 서브시스템, 나머지 코드의 managed HashMap을 차례로 unmanaged로 바꿔 전환을 마쳤고(#4021, #4023, #4026), 그 여파로 깨진 NAPI watch 빌드를 바로 복구했습니다(#4028). 파서는 optional chain 관련 문법 검사를 강화해 new a?.b(), new new a()?.b, a?.b.c = 1 같은 할당 대상, optional chain 위의 tagged template을 SyntaxError로 거부하게 했고(#4022, #4029, #4033, #4035), TS cast로 감싼 구조 분해 패턴도 잘못된 할당 대상으로 처리했습니다(#4047). import 바인딩과 namespace 멤버를 변경하는 코드는 esbuild·rolldown처럼 번들 단계에서 거부하고(#4030), 타입 래퍼를 벗길 때 의미가 있는 괄호를 보존하도록 고쳤습니다(#4044).
오후에는 dev 서버의 온디맨드 청크 컴파일을 위한 lazy compilation RFC와 옵션 뼈대(#4037)를 병합하고, 이어 dev_mode와 code_splitting을 함께 쓰는 경로를 만들면서 청크 경계에서 dev 초기화 코드가 깨지던 #4038을 고쳤습니다(#4040). 이 경로는 lazy_compilation 기본값이 꺼져 있어 기존 dev 단일 번들 동작은 그대로입니다. require.context와 code_splitting 조합 지원(#4041), code_splitting과 minify를 함께 쓸 때 청크 내부 식별자 mangle 통합(#4049), TC39 데코레이터 access getter 멤버 이름의 해제 후 사용(#4050), 템플릿 치환 lookahead 뒤 스택 복구 문제(#4051)도 수정했습니다. 사이트는 벤치마크를 고반복으로 재측정해 갱신하고 플레이그라운드 사이드바를 반응형으로 바꿨으며(#4031), 이미 구현된 청크별 CSS 분리를 로드맵의 미구현 목록에서 뺐습니다(#4036).
suji는 Windows ReleaseSafe·ReleaseFast 빌드에서 렌더러가 V8 스택 오버플로로 죽던 문제를 runHost 분리로 고치고(#62) 렌더러 부팅 회귀 테스트와 Windows 프레임 없는 창·드래그 영역 e2e를 더했습니다(#63, #64). 클립보드를 cef_clipboard.zig로 떼어낸 것(#65)을 시작으로, 밤에는 PR 없이 13,362줄이던 cef.zig를 도메인별 모듈로 나눠 326줄로 줄이고 관련 문서를 정리했습니다. 블로그 저장소 ohah.github.io에는 5월 30일 요약 추가 커밋 1개가 있었습니다.
공개 커밋 32개, 해당일 생성 또는 병합된 PR 24개를 정리했습니다. PR 생성 24개·병합 24개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
ohah/suji
- docs: point cef.zig references to the actual split modules
- docs(cef): list 5 helper modules missing from refactor table + parts
- test(e2e): swallow rejection on abandoned print_to_pdf during window destroy
- refactor(cef): complete cef.zig domain split (13,362 → 326 lines)
- test(e2e): close Windows frameless/drag-region verification gap
- test(e2e): add #60 part 2 ReleaseSafe renderer-boot regression guard
- docs(cef): document the cef.zig domain-split refactor (CEF_REFACTOR.md)
- refactor(cef): extract clipboard into cef_clipboard.zig (behavior-unchanged)
- fix(cef): address code-review max findings on #60 fix
- fix(cef): Windows ReleaseSafe/ReleaseFast renderer V8 stack-overflow — runHost never_inline split (closes #60 part 2)
ohah/zntc
- fix(lexer): 템플릿 치환 lookahead 후 template_depth_stack 복구 시 0xaa poison 수정
- fix(transformer): TC39 데코레이터 access getter 멤버 이름 UAF 수정 (string_table realloc)
- fix(bundler): code_splitting + minify 시 청크 내부 식별자 mangle 통합 (#4045)
- fix(parser): TS cast(as/satisfies/!/<T>)로 감싼 destructuring 패턴은 invalid assignment target
- fix(codegen): 타입 래퍼 벗길 때 load-bearing 괄호를 보존 ((a?.b as T).c, (42 as T).x 등)
- fix(bundler): require.context + code_splitting 풀 지원 + production 단일번들 수정 (#4039)
- feat(bundler): dev_mode + code_splitting 경로 + #4038 수정 (lazy compilation PR-2)
- docs(rfc): Lazy compilation RFC + lazy_compilation 옵션 스캐폴딩 (PR-1)
- docs(roadmap): 청크별 CSS 분리를 미구현/후순위에서 제거 (이미 구현됨)
- fix(parser): optional chain 위의 tagged template 을 전부 SyntaxError 로 거부 (a?.b.c
x) - fix(parser): optional chain 이 assignment target 체인 어디든 있으면 거부 (a?.b.c = 1)
- feat(site): 플레이그라운드 반응형 사이드바 + Monaco 동적 리사이즈
- docs(site): 벤치마크 2026-05-30 고반복 재측정 갱신
- fix(semantic,bundler): import 바인딩/namespace 멤버 변형을 번들 단계에서 거부 (esbuild/rolldown parity)
- fix(parser): 인자 없는 new 뒤 trailing optional chain(new new a()?.b)을 SyntaxError 로 거부
- fix(napi): watch changed_files 를 unmanaged backing borrow 로 (#4026 회귀 복구)
- refactor: 나머지 managed HashMap 을 전부 unmanaged 로 전환 (마이그레이션 완료)
- fix(parser): new-callee optional-chain 거부의 진단 품질 + computed subscript [+In] 누락
- refactor(linker): linker 서브시스템 managed HashMap 을 unmanaged 로 전환
- fix(parser): new 표현식 callee 의 optional chain(new a?.b())을 SyntaxError 로 거부
- refactor: 함수-로컬 managed HashMap 을 0.16 unmanaged 로 전환 (컨벤션 통일)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.