2026-04-26
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 ES5 다운레벨링에 쓰는 런타임 헬퍼를 가상 모듈로 바꿨습니다. __generator 같은 헬퍼를 모듈마다 인라인하지 않고 가상 모듈에서 import하도록 로더 인프라를 깔고(#1970), 미등록 헬퍼 매핑과 graph 파싱 단계의 transformer pre-pass, 코드 분할 모드의 헬퍼 import 분배, 소스맵 ID 정리를 묶어 병합했으며(#1971), 단일 번들 모드에서도 활성화했습니다(#1977). 흩어져 있던 transformer 옵션 사본 14개는 transform_options_base 하나로 모았습니다(#1974, #1975, #1979). ESM 출력의 external import를 require로 바꾸지 않고 보존하고(#1983), axios 번들링을 위해 try 블록 안 해석 실패 require를 optional로 처리하며 ESM external default import의 별칭을 냈습니다(#2026, #2028).
나머지는 다운레벨 의미 보존 수정이 대부분이었습니다. optional 메서드 호출의 this와 단락 평가, 논리·거듭제곱 대입의 멤버 참조, optional eval의 간접 호출(#1985~#1989), optional·static·논리 대입·괄호로 감싼 super와 파생 생성자 안 super 프로퍼티 receiver(#1991, #1992, #1994, #2001, #2029, #2032, #2035), 파생 생성자의 런타임 검사와 return 평가 순서, 여러 단계 super 체인의 new.target 보존(#2004, #2009, #2021, #2025), 클래스 메서드를 descriptor로 정의하기, 기본값 초기화의 TDZ, 배열 구조 분해의 iterable 읽기(#2005, #2007, #2008), tagged template의 잘못된 escape(#2014), Annex B sloppy 함수 호이스팅의 lexical 충돌(#2015)이 있었습니다. 번들러 쪽은 namespace 값 객체를 importer끼리 공유하고(#1990), 죽은 조건부 require를 건너뛰며(#2006), 래퍼 합성 심볼과 CJS require 래퍼 이름도 mangling하고(#2003, #2020), 플러그인 transform 결과를 캐시 키에 넣고 순수 클래스 식을 tree shaking합니다(#2041, #2043).
suji는 main에 직접 커밋 56개를 올렸습니다. Linux/Windows CI 빌드 회귀와 Rust SDK 테스트의 use-after-free를 고친 뒤, Electron 호환을 목표로 시스템 트레이, 알림, 애플리케이션 메뉴 커스터마이즈, 파일 시스템 API, 전역 단축키, 창 resize·focus·move 이벤트를 차례로 추가했습니다. 보안 쪽으로는 프런트엔드 경로 화이트리스트 기반 fs sandbox, 앱별 CEF cache 격리, IPC 유효성 검사와 CSP 기본 헤더, macOS App Sandbox entitlements 자동화, iframe sandbox와 origin allowlist를 넣었고, CEF locale 정리와 바이너리 strip으로 앱 크기를 약 38MB 줄였습니다. 마지막으로 WebContentsView에 해당하는 view 데이터 모델과 IPC, macOS NSView 합성, JS API와 E2E를 갖춘 Phase 17-A를 마무리했습니다.
bungae는 기본 번들러를 zts로 바꾸고 zts 서버 헬퍼를 정리했으며 서브모듈을 올렸습니다(#73). cheolsu-proxy에서는 자동 TLS passthrough를 보강하는 #339가 열렸습니다. ohah.github.io에는 2026년 4월 월간 타임라인과 4월 25·26일 오늘의 커밋 요약, ZTS 개발기 11편 맞춤법 수정이 올라왔습니다.
공개 커밋 150개, 해당일 생성 또는 병합된 PR 63개를 정리했습니다. PR 생성 63개·병합 61개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- chore: update zts submodule
- chore: update zts submodule
- fix: extract zts release assets
- refactor: move zts server helpers under zts
- chore: default to zts bundler
- chore: stop tracking local scratch dirs and ignore RN bundle output
ohah/ohah.github.io
- fix: correct spelling and spacing in zts/development-11.mdx
- docs: mark ALL MDX FILES COMPLETED in CRON_CRD_WRITE.md checklist
- docs: mark all mdx files completed in CRON_CRD_WRITE.md
- docs: mark 2026-04-27 as checked in CRON_CRD_WRITE.md
- chore: mark all mdx files as checked in CRON_CRD_WRITE.md
- docs(today-commit): add AI summary for 2026-04-26
- cron: mark docs/today-commit/2026-04-26.md as completed
- docs(today-commit): add 2026-04-25 commit activity summary
- cron: check off 2026-04-25.md from mdx spellcheck list
- Add cron guide backup and dream diary
- chore: mark all mdx spellcheck complete and clean untracked files
- Add cron guide backup and dream diary
- docs(monthly-opensource): add 2026년 4월 timeline
- docs(today-commit): list 2026-04-24, 2026-04-25 in index
- docs(today-commit): add AI summary for 2026-04-25
ohah/suji
- feat(example,e2e): Phase 17-A 마무리 — example view 데모 + 시각 캡처 검증
- test(window): Phase 17-A.8/9/10 — 누락 시나리오 + E2E 실 실행 검증
- refactor(sdk,e2e): /simplify — createView 코멘트 + E2E destroyWindow no-op 제거
- feat(sdk,e2e): Phase 17-A.7 — Frontend JS API + E2E + 문서
- refactor(window): /simplify — DestroyedView non-pub + createView 인라인
- feat(window): Phase 17-A.6 — view-created/view-destroyed 이벤트 + 자동 정리
- refactor(window): /simplify — view 회귀 매트릭스에 isDevToolsOpened 추가
- test(window): Phase 17-A.5 — webContents API view 호환 회귀 검증
- refactor(cef): /simplify — msgSendNSRect 헬퍼 + reorderSubview .? + 상수 일관성
- feat(cef): Phase 17-A.4 — setViewBounds/setViewVisible/reorderView macOS
- refactor(cef): /simplify — errdefer + view OnBeforeClose quit 가드
- feat(cef): Phase 17-A.3 — createView/destroyView macOS NSView 합성
- refactor(window): /simplify — parseBounds 헬퍼 + nonNegUsize + 테스트 분할
- feat(window): Phase 17-A.2 — view IPC 핸들러 8개 + dispatch
- refactor(window): /simplify — view 헬퍼 추출 + 슬라이스 반환 + no-op guard
- feat(window): Phase 17-A.1 — WebContentsView 데이터 모델 + 단위 테스트
- feat(security): iframe sandbox + origin allowlist — CSP frame-src 자동 합성
- feat(bundle): CEF locale prune + binary strip — 38MB 절약 (12%)
- docs(plan): Electron 대비 부족 항목 종합 — 시스템 통합 + Phase 7+ 잔여 + BrowserView
- refactor(security): /simplify — IPC 검증/CSP/sandbox 정리 + 단위 테스트 보강
- refactor(sandbox): 하위호환 분기 제거 + 회귀 테스트 의미 강화
- feat(sandbox): macOS App Sandbox 자동화 — config.app.sandbox + helper별 entitlements
- feat(security): Phase 7 — IPC 유효성 검사 + CSP default 헤더 + contextIsolation audit
- docs: 앱별 cache 격리 + fs sandbox 문서 — CLAUDE.md / PLAN.md / cache.mdx 신규
- feat(typed)+test: Rust/Go fs typed wrapper + 4 SDK 일관성 + sandbox 종합 unit
- test: Zig SDK fs typed unit + buildAppCachePath unit + 회귀 보강
- fix(security)+test: fs sandbox 5개 보안 버그 + 8 신규 테스트
- feat(cache): 앱별 cache 격리 — Electron app.getPath('userData') 동등 (3 OS)
- feat(security): fs sandbox — frontend path 화이트리스트 + backend 우회 + Zig typed wrapper
- fix(e2e): lifecycle setBounds 첫 test에서 moved 검증 제거 — CI macOS runner 비결정적
- fix(build-libnode): tar에 versioned symlink (libnode.<ABI>.dylib/.so.<ABI>) 포함
- fix(ci-e2e): libnode.137.dylib symlink 생성 — release tar 누락 보강
- refactor: Go SDK windows escapeJSON → jsonesc.Full + jsonString/Bool → util.zig 승격
- docs(plan): fs.rm + mtime ms + e2e CI workflow 반영
- test(e2e)+ci: 부족 테스트 보강 + e2e CI workflow 자동화
- refactor(lifecycle): /simplify — 4 typed callbacks + change-detection guard + 정리
- feat(phase5-lifecycle): Window resize/focus/blur/move events — NSWindowDelegate 자동 부착
- refactor(global-shortcut): /simplify — 에러 코드 분리 + extractEscapedField + writeCStr 재사용 + 테스트 강화
- feat(phase5-e): Global shortcut — macOS Carbon Hot Key + 5 SDK + accelerator 파싱
- Add demo native controls test coverage
- feat(fs)+refactor: fs.rm + mtime ms + emit 통합 + Go fs 패턴 통일
- refactor(fs): /simplify — coreError 헬퍼 + 핸들러 에러 surface 강화 + SDK 일관성
- Add native API controls to demo app
- Implement file system core API
- Document menu API and strengthen SDK tests
- Add drag region helper and notification sound guard
- Implement application menu customization API
- docs(agents): AGENTS.md 추가 — Codex 등 다른 에이전트도 CLAUDE.md 참조하도록 thin pointer
- feat(phase5-c): Notification v1 — UNUserNotificationCenter + 5 진입점 + click 이벤트
- test(coverage): Tray/Zoom/DevTools E2E + SDK 단위 + 명시 회귀 — functional path 100%
- refactor: /simplify Tray — allocNSMenuItem 헬퍼 추출 + DIALOG_PARSE_ARENA 재사용
- feat(phase5-b): Tray v1 — NSStatusItem + 메뉴 + click 라우팅 + 5 진입점
- fix(rust-sdk): __SUJI_CORE OnceLock → AtomicPtr — 테스트 격리 use-after-free 해소
- fix(ci): logger_test cleanupOldLogs Linux/Windows panic — Io.Dir.OpenOptions.iterate=true
- fix(ci): Linux/Windows 빌드 회귀 — deferMakeKeyAndOrderFront macOS guard + getCurrentPid 헬퍼
- fix(ci): Linux/Windows 빌드 회귀 — WindowInitOpts.parent_id 미존재 + Zig 0.16 GetCurrentProcessId 제거 대응
ohah/zntc
- fix(bundler): tree-shake pure class expressions
- chore(simplify): /simplify followup — super wrapper-unwrap helper 공용화 (#2030/#2034)
- test(bundler): strengthen plugin transform cache coverage
- fix(bundler): include transformed source in cache key
- fix(bundler): tighten binding local name invariants
- fix(bundler): post-transform analysis refresh
- refactor(semantic): record predeclare refs during predeclare
- fix(mangler): include generated temp bindings
- fix(transformer): optional chain 안의 wrapped super 도 super lowering — (super as any)?.x (#2034)
- fix(transformer): wrapped super 도 super lowering — (super)/(super as any) 등 (#2030)
- fix(transformer): derived ctor 안 super property receiver 를 _this 로 emit (#2022)
- chore(simplify): /simplify followup — AliasBinding struct + fillOrAlias 헬퍼 + 테스트 강화
- fix(bundler): ESM external default import 의 mangled local 에 alias var emit
- feat(bundler): try-block 안의 unresolved require/import 를 optional 로 처리
- test(integration): #1710 가드 expectation 을 _newTarget 캡쳐와 함께 emit 되는 형태에 맞춤
- fix(transformer): TS parameter property — derived ctor 에선 super() 뒤 삽입
- fix(transformer): capture NewTarget for multi-level super chains
- fix(semantic): predeclare double declare-ref 회귀 해소
- fix(transformer): preserve NewTarget for lowered super calls
- fix(minify): mangle cjs require wrapper names
- fix(ci): integration test failures 일괄 해결
- chore(simplify): /simplify followup — 최근 머지된 10 PR 정리
- minify guard helper name
- test(transformer): #2014 의 tagged template invalid escape 회귀 가드 복원
- fix(semantic): Annex B B.3.3.1 sloppy function hoist 의 outer lexical 충돌 시 skip
- fix(transformer): tagged template literal 의 invalid escape 를 cooked 에서 undefined 처리
- fix(transformer): ES5 string-keyed method 의 defineProperty key 이중 quote
- docs(roadmap): 2026-04-26 실측 기반 비측정 정보 갱신
- fix(test262): test262 repo root 입력 시 toolchain self-fixture 자동 제외
- test(transformer): cover derived constructor return edge cases
- fix(transformer): preserve derived constructor return evaluation order
- fix: read array destructuring from iterables
- fix: preserve default initializer TDZ
- fix(bundler): skip dead conditional requires
- fix: define class methods with descriptors
- fix(bundler): mangle wrapper synthetic symbols
- fix: preserve derived constructor runtime checks
- fix(transformer): static super downlevel receiver
- chore(transformer): /simplify followup — 최근 transformer fix PR 7개
- fix(transformer): super property receiver downlevel
- chore: format touched TypeScript tests
- fix: share namespace value objects across importers
- test: stabilize zts CLI coverage
- fix(transformer): super logical assignment receiver 보존
- fix(transformer): optional super method call downlevel
- fix(transformer): exponentiation assignment member reference 보존
- fix(transformer): optional eval call indirect eval 보존
- fix(transformer): logical assignment member reference 보존
- fix(transformer): optional method call receiver 단락 평가 보존
- fix(transformer): preserve this for optional method calls
- fix(bundler): metafile JSON 의 control character escape (NUL byte)
- test(bundler): #1962 ESM external 엣지케이스 테스트 추가 + matchPackageSubPath 분리
- fix(bundler): ESM external import을 require()로 변환하지 않고 보존 (#1962)
- refactor(transformer): BIT_DEFS field 를 string → HelperBit enum 화
- refactor(transformer): borrow_source_ast 옵션 → Transformer.initBorrow 팩토리 분리
- feat(bundler): preserve-modules 의 chunk.rel_dir 가 helper virtual ID 일 때 sanitize
- refactor(bundler): EmitOptions transformer-mirror 필드를 transform_options_base 에서 derived
- refactor: /simplify 사후 review fix — to_binary/keep_names helper 추출 + stale 주석 + fixture spawn 안정화
- feat(bundler): single-bundle 모드 helper module 본격 활성 (#1961 PR 1h)
- fix(emitter): runtime helper virtual module 의 used_export_names 강제 (#1961 PR 1g)
- refactor(bundler): emitter transformer.init 도 transform_options_base 통합 (#1961 PR 1f)
- refactor(graph): 14 transformer mirror options → transform_options_base 통합 (#1961 PR 1e)
- perf(transformer): emit 단계 cloneForTransformer fast path (#1961 PR 1d)
- refactor(bundler): runtime_helper_modules 를 src/ root 로 승격 — layer 역전 정리 (#1961 PR 1c)
- refactor: /simplify 검토 반영 — 중복 제거 + dead field 정리 (#1961 PR 1b/7)
- test(integration): runtime helper virtual module 회귀 fixture (#1961 PR 1b/6)
- feat(emitter): runtime helper virtual module — sourcemap source ID sanitize (#1961 PR 1b/5)
- feat(bundler): runtime helper virtual module — splitting 모드 helper import 분배 (#1961 PR 1b/4)
- feat(bundler): graph parse 단계 transformer pre-pass + builtin plugin 등록 (#1961 PR 1b/3)
- feat(transformer): runtime helper virtual module — finalize helper import emit (#1961 PR 1b/2)
- feat(bundler): runtime helper virtual module — 미등록 14 helper 매핑 (#1961 PR 1b/1)
- feat(bundler): runtime helper virtual module loader 인프라 (#1961 PR 1a)
- fix(transformer): ES5 destructuring 다운레벨 — 임시 var 중복 + async destructuring 잔존 (#1960)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.