2026-05-25

날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.

요약 (AI 작성)

zntc는 오전에 번들러 경로 소유권 정리를 이어갔습니다. watch 모드에서 ResolveCache를 재빌드마다 초기화해 arena가 계속 커지는 것을 막고(#3756), putModule OOM 롤백의 이중 해제와 끊어진 맵 항목(#3758), NAPI 플러그인 virtual path 누수(#3761)를 고쳤습니다. 이어 PathRef.plugin 변형을 없애고(#3762) 변형별 owns_path를 대칭화한 뒤 bool을 Owner enum으로 바꾸고(#3768), .dataurl 페이로드 소유 구분과 별도 arena intern, 모든 변형의 OOM errdefer 회귀 테스트까지 미뤄 둔 항목 일곱 개를 차례로 병합했습니다(#3766부터 #3772). RealpathCache를 16샤드 mutex로 나누고(#3775) codegen·transform 하위 단계 측정 hook을 넣었으며, 벤치마크 데이터를 재측정해 갱신하고 mimalloc을 v3.3.2로 올렸습니다.

낮부터는 dev 서버 작업이 몰렸습니다. JS dev 서버의 모듈 단위 incremental HMR을 켜고(#3783) watch()에 skipInitialOutput 옵션을 더했으며(#3787), WatchHandle.stop()이 worker 스레드 종료까지 기다리게 하는 등 후속 수정이 이어졌습니다. runServe는 cold-start runBundle을 없애고 watch만으로 돌게 바꿨고(#3826), HMR 업데이트 모듈의 sourcemap 엔드포인트(#3820)와 여러 오류를 보존하는 WatchRebuildEvent.errors(#3822)도 들어왔습니다. 같은 시기 BoringSSL을 Chromium 148 stable에 고정한 서브모듈로 추가하고(#3786) 정적 라이브러리로 통합한 뒤(#3792), Zig 바인딩과 TLS 어댑터(#3808), --certfile·--keyfile로 켜는 dev 서버 TLS(#3817), HTTPS·WSS e2e 테스트(#3824)까지 병합했습니다. Windows Release 빌드의 TLS 컴파일 차단은 continue-on-error로 우회했습니다(#3842).

저녁에는 dev overlay 클라이언트를 단일 소스로 합치고(#3780), app 파이프라인이 JS 플러그인을 통과시키게 하며(#3827) @zntc/web/css 하위 export를 새로 만들었습니다(#3829). runAppBuild에 기본 css() 플러그인을 자동으로 붙이는 변경(#3832)은 동기 dispatcher와 비동기 cssOnLoad가 맞지 않아 실제로 동작하지 않는 코드라는 이유로 되돌렸고(#3838), dev CSS 파이프라인 역할을 정리하는 RFC 문서(#3833)를 여러 차례 고쳐 병합했습니다. RFC의 한 안이던 async buildApp 전환 PR #3839은 병합되지 않고 닫혔습니다. 영어 README를 추가하고 한국어판을 README_KO로 옮겼습니다(#3830).

suji는 Windows 지원을 크게 넓혔습니다. Windows에서 Node 백엔드와 창 이벤트를 켠 뒤(#17) 클립보드, 셸, 화면·다크 모드, globalShortcut, 투명도·메시지 상자, 파일 열기·저장 대화상자, 트레이, 알림을 Win32 API로 구현했고(#18부터 #25), 오후에는 창 그림자, WM_HOTKEY 전달용 펌프 스레드, 트레이 클릭·메뉴, 디렉터리 선택, 풍선 알림 클릭 이벤트와 코드 리뷰 후속 수정, Go c-shared DLL 로딩 수정(#35)을 병합했습니다. PR 없이 커밋한 작업도 많아 Linux의 화면·클립보드(텍스트·HTML)·셸·D-Bus 알림 API, deb·AppImage 패키징, Homebrew formula와 curl 설치 스크립트 같은 릴리스 자동화, 자동 업데이터의 매니페스트 확인·내려받기·설치, Crashpad DB에서 crashReporter 보고서 읽기, init의 GitHub Actions 워크플로 생성, Go용 TypeScript 핸들러 타입 헬퍼가 들어갔습니다.

블로그 저장소 ohah.github.io의 커밋 15개는 크론이 맞춤법·CRD 점검 완료를 기록한 커밋 14개와 활동 요약 추가 커밋 1개입니다.

공개 커밋 176개, 해당일 생성 또는 병합된 PR 84개를 정리했습니다. PR 생성 84개·병합 81개는 같은 PR이 양쪽에 포함될 수 있습니다.

커밋

ohah/ohah.github.io

ohah/suji

ohah/zntc

PR (해당일 생성/머지)

상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.

저장소PR해당일 활동상태대상 브랜치제목
ohah/suji#35생성 · 병합mergedmainFix Windows Go c-shared DLL load (-ldflags=-s -w)
ohah/suji#34생성 · 병합mergedmainCode-review follow-up on PR #33 — TOCTOU + timeout sentinel + system theme
ohah/suji#33생성 · 병합mergedmainApply /code-review max findings + universal Win32 manifest
ohah/suji#32생성 · 병합mergedmainWindows balloon click → notification:click event
ohah/suji#31생성 · 병합mergedmainWindows: opacity/shadow non-Views fallback, OS-initiated state events, TaskDialogIndirect custom buttons
ohah/suji#30생성 · 병합mergedmainWindows IFileOpenDialog for directory selection
ohah/suji#29생성 · 병합mergedmainWindows tray click/menu + nativeTheme:updated via pump window
ohah/suji#28생성 · 병합mergedmainWindows globalShortcut WM_HOTKEY delivery via pump thread
ohah/suji#27생성 · 병합mergedmainImplement Windows window setHasShadow via DWM
ohah/suji#26생성 · 병합mergedmainFix Windows/Linux native API code-review findings
ohah/suji#25생성 · 병합mergedmainImplement Windows notification via Shell_NotifyIcon balloon
ohah/suji#24생성 · 병합mergedmainImplement Windows tray create/destroy via Win32 Shell_NotifyIconW
ohah/suji#23생성 · 병합mergedmainImplement Windows showOpenDialog/showSaveDialog via Win32 commdlg32
ohah/suji#22생성 · 병합mergedmainImplement Windows setOpacity + dialog.messageBox via Win32
ohah/suji#21생성 · 병합mergedmainImplement Windows globalShortcut via Win32 RegisterHotKey
ohah/suji#20생성 · 병합mergedmainImplement Windows screen + nativeThemeIsDark via Win32
ohah/suji#19생성 · 병합mergedmainImplement Windows shell via Win32 ShellExecuteW
ohah/suji#18생성 · 병합mergedmainImplement Windows clipboard via Win32 OpenClipboard
ohah/suji#17생성 · 병합mergedmainEnable Node backend and cross-platform window events on Windows
ohah/zntc#3842생성 · 병합mergedmainci: Windows Release Build 의 사전-의도 TLS 컴파일 차단을 continue-on-error 로 회피
ohah/zntc#3840생성 · 병합mergedmainfix(web): css-modules prototype shadowing — Object.create(null) + Object.hasOwn 이중 가드 (RFC #3833 a1-#2)
ohah/zntc#3839생성closedmainfeat(core): async buildApp + runAppBuild 전환 (RFC #3833 v2-A / D1a)
ohah/zntc#3838생성 · 병합mergedmainrevert: runAppBuild 의 default css() plugin 자동 prepend — sync dispatcher × async cssOnLoad 로 dead code (#2538 4-4 PR-3a revert)
ohah/zntc#3837생성closedmainfix(cli): resolveAppPlugins 가 user explicit css() 중복 prepend 방지 (#3836)
ohah/zntc#3833생성 · 병합mergedmaindocs(rfc): dev CSS pipeline 통일 — cssPlugin vs dev-controller 역할 정리 (#2538 4-4)
ohah/zntc#3832생성 · 병합mergedmainfeat(cli): runAppBuild 의 default css() plugin 자동 prepend + opt-out (#2538 4-4 PR-3a)
ohah/zntc#3831생성 · 병합mergedmainchore: remove root test_* binaries + ignore Zig test emit-bin output
ohah/zntc#3830생성 · 병합mergedmaindocs(readme): add English README, move Korean to README_KO
ohah/zntc#3829생성 · 병합mergedmainfeat(web): @zntc/web/css sub-export 신설 — ZntcPlugin factory + .css PostCSS pass (#2538 4-4 PR-2)
ohah/zntc#3828생성 · 병합mergedmaintest(dev-server): 종합 E2E — cold-start → JS incremental → graph change → HTML fallback (#3779 → #3826)
ohah/zntc#3827생성 · 병합mergedmainfeat(app): app pipeline plugin dispatcher 노출 — buildApp 이 JS plugin 통과 (#2538 4-4 PR-1)
ohah/zntc#3826생성 · 병합mergedmainfeat(dev-server): runServe 의 watch 단독화 — cold-start runBundle 제거 + HTTP listen wait (#3796/#3798 root-cause)
ohah/zntc#3825생성 · 병합mergedmainfix(napi): multi-error root-cause — partial build success 유지 + errors 별도 노출 (#3799 cont., #3796 partial)
ohah/zntc#3824생성 · 병합mergedmaintest(dev-server): TLS e2e — HTTPS + WSS handshake + connected frame (#2538 4-2 PR-4)
ohah/zntc#3823생성 · 병합mergedmaindocs(dev-server): #3796/#3798 limitation 명시 + 일부 error msg 영어로
ohah/zntc#3822생성 · 병합mergedmainfeat(napi): WatchRebuildEvent.errors 배열 — multi-error 보존 (#3799)
ohah/zntc#3821생성 · 병합mergedmaintest(server): PR-3a/3b deferred test 종합 backfill + log err helper (#2538 4-2)
ohah/zntc#3820생성 · 병합mergedmainfeat(dev-server): HMR Update modules sourcemap endpoint + sourceMappingURL append (#3799)
ohah/zntc#3819생성 · 병합mergedmainfix(dev-server): graphChanged 시 outdir 재출력 + CSS link 재주입 (#3813 partial)
ohah/zntc#3818생성 · 병합mergedmainfix(core): #3803 minor 묶음 — skipInitialOutput build warn + stop throw retry 가능
ohah/zntc#3817생성 · 병합mergedmainfeat(dev-server): TLS 통합 — TlsContext + handleConnection 분기 + --certfile/--keyfile (#2538 4-2 PR-3b)
ohah/zntc#3816생성 · 병합mergedmainfix(server): broadcastRebuildEvent noop branch 도 clearError — stale overlay 해제 (#3799 부분)
ohah/zntc#3815생성 · 병합mergedmainfix(napi): skipInitialOutput=true 면 incremental rebuild 도 skip_bundle_output 자동 활성 (#3802)
ohah/zntc#3814생성 · 병합mergedmainfix(dev-server): cssDerived predicate 를 appDev.isCssLikeChange 헬퍼로 통일 (#3801)
ohah/zntc#3812생성 · 병합mergedmaintest(watch): WatchHandle.stop() 동기성 회귀 가드 (#3806 follow-up)
ohah/zntc#3811생성 · 병합mergedmaintest(server): TlsWriter.drainFn drain contract 단위 test backfill (#2538 4-2)
ohah/zntc#3810생성 · 병합mergedmainfix(dev-server): drain else 분기 3분기 fix — HTML/JSON FullReload + JS noop + CSS-only full pipeline (#3797)
ohah/zntc#3809생성 · 병합mergedmainfix(build): mimalloc 을 C++ 컴파일로 처리 — MSVC ARM64 ldar64/stlr64 intrinsic 회피 (CI hotfix)
ohah/zntc#3808생성 · 병합mergedmainfeat(server): BoringSSL Zig binding + TLS adapter (Io.Reader/Writer 어댑터) (#2538 4-2 PR-3a)
ohah/zntc#3807생성 · 병합mergedmainfix(napi): watch worker 가 outdir 받아 output path 결합 (#3795)
ohah/zntc#3806생성 · 병합mergedmainfix(napi): WatchHandle.stop() 가 worker thread 종료까지 wait (#3794, #3800)
ohah/zntc#3805생성 · 병합mergedmainfix(dev-server): zntc dev 가 opts.devMode 자동 set — incremental HMR runtime 주입 (#3793)
ohah/zntc#3804생성 · 병합mergedmainhotfix(ci): revert composite checkout-zntc action (CI fail 복구) + dependabot boringssl ignore
ohah/zntc#3792생성 · 병합mergedmainfeat(build): BoringSSL 정적 lib 통합 (OPENSSL_NO_ASM=1) (#2538 4-1 PR-2/N)
ohah/zntc#3789생성 · 병합mergedmainchore(boringssl): #3786 review follow-ups (CI shallow / NOTICE / cadence)
ohah/zntc#3787생성 · 병합mergedmainfeat(napi): watch() 의 skipInitialOutput 옵션 + runServe 적용 (#3779 follow-up)
ohah/zntc#3786생성 · 병합mergedmainchore(vendor): add google/boringssl submodule pinned to Chromium 148 stable (#2538 4-1 PR-1/N)
ohah/zntc#3785생성 · 병합mergedmainfix(dev-server): closeServerForRestart 시 native watch handle stop (#3779 follow-up)
ohah/zntc#3783생성 · 병합mergedmainfeat(dev-server): JS dev server 의 module-level incremental HMR 활성화 (#3779)
ohah/zntc#3782생성 · 병합mergedmainchore(dev-server): #2538 4-3 review follow-ups (EOL/leak/sentinel/invariant)
ohah/zntc#3781생성closed기능 브랜치: chore/dev-overlay-client-unify-2538chore(dev-server): #2538 4-3 review follow-ups (EOL/leak/sentinel/invariant)
ohah/zntc#3780생성 · 병합mergedmainrefactor(dev-server): unify dev overlay client via single source + placeholder (#2538 4-3)
ohah/zntc#3778생성 · 병합mergedmaindocs(site): 벤치마크 데이터 2026-05-25 갱신 (로컬 재측정)
ohah/zntc#3777생성 · 병합mergedmainperf(profile): transform sub-phase 측정 hook (#3745 T1 — 도구 보강)
ohah/zntc#3776생성 · 병합mergedmainperf(profile): codegen sub-phase 측정 hook (#3745 C1 — 도구 보강)
ohah/zntc#3775생성 · 병합mergedmainperf(bundler): R2 (#3745) RealpathCache 16-shard mutex
ohah/zntc#3774생성 · 병합mergedmainchore(deps): bump mimalloc v3.2.8 → v3.3.2
ohah/zntc#3773생성 · 병합mergedmaindocs: ResolveCache + Owner discipline 시리즈 반영 (D104)
ohah/zntc#3772생성 · 병합mergedmaintest(bundler): OOM injection 회귀 가드 — 모든 variant errdefer (deferred 7)
ohah/zntc#3771생성 · 병합mergedmainfix(bundler): resolve_imports unreachable → explicit panic (deferred 6)
ohah/zntc#3770생성 · 병합mergedmainrefactor(bundler): .dataurl.data 별도 arena intern (deferred 5)
ohah/zntc#3769생성 · 병합mergedmainrefactor(napi): plugin_bridge owned ResolvedModule builder 헬퍼 (deferred 4)
ohah/zntc#3768생성 · 병합mergedmainrefactor(bundler): owns_path bool → Owner enum self-documenting (deferred 3)
ohah/zntc#3767생성 · 병합mergedmainrefactor(bundler): .dataurl owns_payload discriminator + mime intern (deferred 2)
ohah/zntc#3766생성 · 병합mergedmainrefactor(bundler): owns_path default 제거 — caller 강제 명시 (deferred 1)
ohah/zntc#3765생성 · 병합mergedmainfix(bundler): #3763/#3764 retro review — .custom aliasing assert + plugin_test/NAPI 명시
ohah/zntc#3764생성 · 병합mergedmainrefactor(bundler): .external/.custom owns_path 대칭화 (#3763 후속)
ohah/zntc#3763생성 · 병합mergedmainrefactor(bundler): .file/.disabled owns_path 대칭화 — .virtual 와 일관 (multi-angle finding)
ohah/zntc#3762생성 · 병합mergedmainrefactor(bundler): PathRef.plugin variant 제거 — production unused (#3759 sweep deferred)
ohah/zntc#3761생성 · 병합mergedmainfix(bundler): #3759 NAPI plugin virtual path leak (owner discriminator)
ohah/zntc#3760생성 · 병합mergedmainfix(bundler): H2 (#3755 deferred) plugin variant 도 store-owned 로 clone
ohah/zntc#3758생성 · 병합mergedmainfix(bundler): #3755 putModule OOM rollback shared backing 더블 free + dangling map entry
ohah/zntc#3757생성 · 병합mergedmaintest(css): @charset/@layer/@import condition_tail 영구 회귀 가드 4건 추가
ohah/zntc#3756생성 · 병합mergedmainperf(bundler): #3751 watch mode 의 ResolveCache N-rebuild reset (arena monotonic growth 차단)