2026-05-26

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

요약 (AI 작성)

zntc의 가장 큰 작업은 MCP였습니다. 서버의 handleMcp 본문을 전송 방식과 무관한 dispatcher로 분리하고(#3872) stdio 전송과 zntc mcp 하위 명령을 더한 뒤(#3873), JSON-RPC 2.0 notification에 응답하지 않도록 고치고 root 옵션과 ZNTC_ROOT 환경 변수를 받게 했습니다. React Native 쪽에는 dev 빌드 entry에 MCP 런타임 preamble을 자동으로 넣고(#3877) WebView wrapper alias(#3878), 앱 채널 WS 엔드포인트(#3879)와 런타임 WS 클라이언트(#3880), AppChannel.request 응답 매칭(#3887)을 쌓아 양방향 확인용 ping_app 도구(#3888)와 E2E 테스트(#3891)까지 이었습니다. 저녁에는 fiber 트리를 다루는 find_element, inspect_state, eval_code, get_logs, take_snapshot 도구를 차례로 추가했습니다(#3892, #3893, #3895, #3896, #3897). 그사이 수신 버퍼 크기 조정, WebView wrapper의 HMR 경쟁 조건, DevServer.deinit가 연결 스레드 종료를 기다리게 하는 수정(#3889) 등 리뷰 후속 PR이 이어졌습니다.

오전에는 Windows TLS 문제의 원인을 TlsConnection comptime 분기로 고치고 전날의 CI 우회를 되돌렸으며(#3843), RFC #3833의 D1a'' 1단계로 사용자가 명시한 css({postcss})를 호출 쪽 pre-warm으로 적용했습니다(#3844). 2단계(dev 경로 pre-warm), 헬퍼 추출, zero-config PostCSS 이중 실행 해소, css({root})가 조용히 무시되던 회귀, postcssDirDeps 보존 수정은 스택 기능 브랜치에 차례로 병합됐고(#3845, #3848, #3854, #3856 등), 이 커밋들은 후속 이슈 다섯 건을 묶은 #3859와 함께 main에 들어왔습니다. 이어 native watch가 그래프 밖의 새 .css 파일을 감지하도록 FileWatcher 디렉터리 감시와 rescan을 넣고(#3860, #3862), css({root}) 단독 지정 시 탐색 기준 경로와 drain 경로의 prepare 누락을 고쳤으며, dev-incremental PostCSS 회귀를 바로잡아 main CI를 복구했습니다(#3868). __zntc_modules Proxy가 .css 키의 부수 효과 import를 noop으로 처리하도록 했고(#3870, #3871), napi 타깃에 BoringSSL을 정적 링크해 SSL_CTX_free 미정의 심볼 문제를 해결했습니다(#3894).

suji는 Windows 패키징을 진행했습니다. CEF·Node 런타임을 함께 담은 self-contained 패키지와 패키징된 exe 감지(#39), 백엔드·플러그인 dylib 번들링과 런타임 경로 해석(#40), 리뷰 후속의 sentinel 마커와 dylib 사전 검증(#41), dylib이 없으면 실패시키는 --strict 옵션(#42)을 병합했고, 같은 번들링을 macOS·Linux에도 맞췄습니다(#43). Windows 자동 업데이터는 PowerShell과 Expand-Archive로 zip 형식을 처리합니다(#44). state·sqlite 플러그인의 Windows e2e와 wrapper 테스트 러너(#36), stable Rust 빌드를 위해 specta TypeScript 내보내기를 cargo feature로 분리한 Rust SDK 수정(#37)도 들어갔고, PR 없이 Windows CI 도구 체인을 MSYS2 libnode 기준으로 고치고 Linux GTK 대화상자 백엔드를 추가했습니다.

블로그 저장소 ohah.github.io에는 크론의 맞춤법·CRD 점검 기록 커밋 외에, 빠져 있던 5월 오늘의 커밋 항목(05-19, 05-21부터 05-25까지) 등록과 5월 26일 요약 작성 커밋이 있었습니다.

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

커밋

ohah/ohah.github.io

ohah/suji

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/suji#44생성 · 병합mergedmainWindows autoUpdater (zip format) — PowerShell helper + Expand-Archive
ohah/suji#43생성 · 병합mergedmainmacOS/Linux backend dylib bundling (Windows parity)
ohah/suji#42생성 · 병합mergedmainPackaging: --strict mode to fail-loud on missing backend/plugin dylibs
ohah/suji#41생성 · 병합mergedmainFix PR #40 findings: sentinel marker + dylib pre-validation
ohah/suji#40생성 · 병합mergedmainWindows packaging: bundle backend/plugin dylibs (toolchain-less user distro)
ohah/suji#39생성 · 병합mergedmainWindows packaging: self-contained CEF/Node runtime + packaged exe bootstrap
ohah/suji#38생성 · 병합mergedmaindocs: update CLAUDE.md with Windows native + plugin progress
ohah/suji#37생성 · 병합mergedmainRust SDK: gate specta TypeScript export behind cargo feature (stable Rust build)
ohah/suji#36생성 · 병합mergedmainPlugin wrapper test runners (state e2e + 4-wrapper unit bundle)
ohah/zntc#3897생성 · 병합mergedmainfeat(mcp): take_snapshot tool — fiber tree nested summary + cap policy (PR-F5)
ohah/zntc#3896생성 · 병합mergedmainfeat(mcp): get_logs tool — console intercept + ring buffer + cursor pagination (PR-F4)
ohah/zntc#3895생성 · 병합mergedmainfeat(mcp): eval_code tool — 동기 expression 평가 + ref context 바인딩 (PR-F3)
ohah/zntc#3894생성 · 병합mergedmainfix(build): napi target 에 BoringSSL static link — SSL_CTX_free undefined symbol
ohah/zntc#3893생성 · 병합mergedmainfeat(mcp): inspect_state tool — fiber props/state/hooks 직렬화 (PR-F2)
ohah/zntc#3892생성 · 병합mergedmainfeat(mcp): find_element tool — RN fiber tree 첫 매칭 + opaque ref (PR-F1)
ohah/zntc#3891생성 · 병합mergedmaintest(integration): MCP App Channel E2E — /__mcp-app + ping_app 양방향 (#3867)
ohah/zntc#3890생성 · 병합mergedmainchore(server): MCP cosmetic 주석 + PING_TIMEOUT_MS const (PR-E3b F3/F7 + F5 F3)
ohah/zntc#3889생성 · 병합mergedmainfix(server): DevServer.deinit graceful shutdown — connection thread wait (retroactive PR-E3a F5)
ohah/zntc#3888생성 · 병합mergedmainfeat(server,react-native): ping_app MCP tool — 양방향 sanity check (PR-E3b of #3867)
ohah/zntc#3887생성 · 병합mergedmainfeat(server): AppChannel.request API + response matching (PR-E3a of #3867)
ohah/zntc#3886생성 · 병합mergedmainfix(server): recv_buf 256KB → 32KB (retroactive F2 — memory growth)
ohah/zntc#3885생성 · 병합mergedmainfix(react-native): retroactive code-review safety hardening (F1/F3/F4/F5/F7)
ohah/zntc#3884생성 · 병합mergedmainchore(react-native): MCP deferred cosmetic 묶음 (PR-C F4 / PR-D F8 / PR-E2 F3+F6)
ohah/zntc#3883생성 · 병합mergedmainfix(react-native): mcp-runtime jest opt-out + send drop warn (PR-E2 F5+F7 deferred)
ohah/zntc#3882생성 · 병합mergedmainfix(react-native): WebView wrapper HMR race + strict mode (PR-D F3+F4 deferred)
ohah/zntc#3881생성 · 병합mergedmainfix(server): connection recv buffer 8KB → 256KB (PR-E1 F3 deferred)
ohah/zntc#3880생성 · 병합mergedmainfeat(react-native): MCP runtime WS client (PR-E2 of #3867)
ohah/zntc#3879생성 · 병합mergedmainfeat(server): MCP app channel WS endpoint (PR-E1 of #3867)
ohah/zntc#3878생성 · 병합mergedmainfeat(react-native,bundler): MCP WebView wrapper alias + AliasEntry exact opt-in (PR-D of #3867)
ohah/zntc#3877생성 · 병합mergedmainfeat(react-native): MCP runtime preamble — dev 빌드 entry 자동 inject (PR-C of #3867)
ohah/zntc#3876생성 · 병합mergedmainperf(server): get_build_events 가 새 event 도착 시 일찍 반환 (#3867 follow-up)
ohah/zntc#3875생성 · 병합mergedmainfeat(cli): zntc mcp root 옵션 — positional + ZNTC_ROOT env (#3867 follow-up)
ohah/zntc#3874생성 · 병합mergedmainfix(server): JSON-RPC 2.0 notification 응답 금지 + 204 헤더 정리 (#3867 follow-up)
ohah/zntc#3873생성 · 병합mergedmainfeat(server,napi,cli): MCP stdio transport + zntc mcp subcommand (PR-B of #3867)
ohah/zntc#3872생성 · 병합mergedmainrefactor(server): handleMcp 본문을 transport-agnostic dispatcher 로 분리 (PR-A of #3867)
ohah/zntc#3871생성 · 병합mergedmainfix(bundler): __zntc_modules Proxy noop 을 .css key 만 한정 (PR #3870 /code-review max)
ohah/zntc#3870생성 · 병합mergedmainfix(bundler): __zntc_modules Proxy fallback — .zntc.css side-effect noop (Closes #3869)
ohah/zntc#3868생성 · 병합mergedmainfix(cli,web): dev-incremental PostCSS 회귀 fix + DELETE test 통과 (main CI 복구)
ohah/zntc#3866생성 · 병합mergedmainfix(cli): PR #3865 /code-review max — double broadcast + outdir==root edge
ohah/zntc#3865생성 · 병합mergedmainfix(cli): drain rebuildAppDevCss 가 prepare 도 호출 (Closes #3861)
ohah/zntc#3864생성 · 병합mergedmainfix(cli,web): css({root}) 단독 명시 시 auto-discover search base routing (Closes #3857)
ohah/zntc#3863생성 · 병합mergedmaindocs(readme): fix dev server example command
ohah/zntc#3862생성 · 병합mergedmainfix(napi,cli): reconcileOutdirCss 회귀 + rescan boundary (PR #3860 /code-review max)
ohah/zntc#3860생성 · 병합mergedmainfeat(server): native watch graph 외 .css 감지 (Closes #3858)
ohah/zntc#3859생성 · 병합mergedmainfix(web,cli): RFC #3833 v3 D1a'' follow-up 5 issue 통합 fix
ohah/zntc#3856생성 · 병합merged기능 브랜치: fix/css-root-mode-routing-3851fix(web): prepare 의 postcssDirDeps 보존 + afterBundle skipPostcssRun 머지 (Closes #3850)
ohah/zntc#3855생성 · 병합merged기능 브랜치: fix/css-root-mode-routing-3851fix(web): runPostcssIfConfigured 가 deps/dirDeps 보존 + skipPostcssRun 머지 (Closes #3850)
ohah/zntc#3854생성 · 병합merged기능 브랜치: refactor/css-filter-helper-3833fix(cli,web): css({root}) caller-pre-warm 에서 silent ignore 회귀 (Closes #3851)
ohah/zntc#3849생성 · 병합merged기능 브랜치: fix/dev-postcss-double-pass-3847refactor(cli) + test: dropCallerPreWarmedCssPlugin helper + dev sass/css-modules/single-pass 통합 test (RFC #3833)
ohah/zntc#3848생성 · 병합merged기능 브랜치: refactor/css-plugin-extract-helper-3833fix(web): dev path zero-config PostCSS double-pass 해소 (Closes #3847)
ohah/zntc#3846생성 · 병합merged기능 브랜치: feat/css-postcss-override-prewarm-d1a-phase2-3833refactor(cli): extractCssPostcssOverride helper 추출 + predicate optional chain 통일 (RFC #3833)
ohah/zntc#3845생성 · 병합merged기능 브랜치: feat/css-postcss-override-prewarm-d1a-3833feat(web,core): D1a'' Phase 2 — dev path 도 caller-side pre-warm (RFC #3833)
ohah/zntc#3844생성 · 병합mergedmainfeat(core,web): RFC #3833 v3 D1a'' Phase 1 — caller-side pre-warm 으로 사용자 explicit css({postcss}) 적용
ohah/zntc#3843생성 · 병합mergedmainfix(server): Windows TLS root-cause — TlsConnection comptime 분기 + #3842 mitigation revert (Closes #3841)