2026-05-26

요약 (AI 작성)

zntc는 MCP 통합과 dev PostCSS 안정화 두 축으로 가장 많은 변경이 있었습니다. #3867을 기반으로 MCP app channel 작업이 단계별로 진행되어, server의 transport-agnostic dispatcher 분리(PR-A, #3872)와 stdio transport·zntc mcp 서브커맨드(PR-B, #3873)를 시작으로 WS endpoint(PR-E1, #3879)와 react-native MCP runtime WS client(PR-E2, #3880), WebView wrapper alias(PR-D, #3878)까지 채널이 구성되었습니다. 그 위에 ping_app(#3888), find_element(PR-F1, #3892), inspect_state(PR-F2, #3893), eval_code(PR-F3, #3895), get_logs(PR-F4, #3896), take_snapshot(PR-F5, #3897) 같은 MCP tool이 차례로 추가되었고, AppChannel.request API와 응답 매칭(PR-E3a, #3887)도 함께 들어갔습니다. 이 과정에서 DevServer.deinit graceful shutdown(#3889), recv_buf 크기 조정(#3881·#3886), JSON-RPC 2.0 notification 응답 금지(#3874) 등 retroactive code-review 후속 수정이 다수 반영되었습니다.

dev path의 PostCSS 처리에서는 회귀 수정과 RFC #3833 후속 작업이 이어졌습니다. zero-config PostCSS double-pass 해소(#3848), postcssDirDeps 보존과 skipPostcssRun 머지(#3850 관련, #3855·#3856), caller-side pre-warm 도입(#3845)과 silent ignore 회귀 수정(#3851, #3854)이 정리되었고, css({root}) 단독 명시 시 auto-discover search base routing(#3857), reconcileOutdirCss 회귀와 rescan boundary(#3860 관련, #3862) 등이 처리되었습니다. native watch가 graph 외 .css 신규 파일을 감지하도록 FileWatcher의 dir-watch 지원(#3858 PR-1~3)이 추가되었으며, dev-incremental PostCSS 회귀와 DELETE test를 통과시켜 main CI를 복구했습니다(#3868). 이 외에 __zntc_modules Proxy fallback으로 .zntc.css side-effect import를 noop 처리(#3869, #3870·#3871)했고, napi target의 BoringSSL static link로 SSL_CTX_free undefined symbol을 해결했습니다(#3894).

suji는 Windows 패키징과 백엔드/플러그인 dylib 번들링이 중심이었습니다. Windows에서 backend/plugin dylib을 번들하고 런타임에 해석하도록 한 작업(#40)을 시작으로, sentinel marker와 dylib 사전 검증(#41), 누락 시 fail-loud하는 --strict 모드(#42), macOS/Linux로의 dylib 번들링 parity(#43)가 더해졌습니다. self-contained CEF/Node runtime과 packaged exe bootstrap(#39), Windows autoUpdater의 zip 포맷 지원(#44)이 추가되었고, MSYS2 libnode 사용과 Windows CI toolchain 정리, Linux GTK dialog backend 추가 등도 함께 진행되었습니다. ohah.github.io에서는 누락된 5월 항목(05-19, 05-21~05-25) 등록과 today-commit 요약 작성, 다수의 CRON 기반 MDX 맞춤법 검사 작업이 기록되었습니다.

커밋

ohah/ohah.github.io

ohah/suji

ohah/zntc

PR (해당일 생성/머지)

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