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
- docs(cron): mark CRON_CRD_WRITE.md 08:00 KST task as completed
- cron: CRD write - verified spelling in one MDX file (2026-05-27 00:00 KST)
- docs: CRON_CRD_WRITE.md - verify one MDX file (development-4.mdx)
- docs: add AI summary for 2026-05-26 daily commit
- docs: complete CRD spelling check at 23:00 KST (2026-05-26)
- docs: complete today-commit summary for 2026-05-26
- cron: complete spelling check for tech-stack.mdx
- docs: cron task completed - one mdx file verified (development-2.mdx)
- docs: cron task completed - one mdx file verified (development-2.mdx)
- cron: document CRON_CRD_WRITE.md completion at 18:00 KST
- cron: document CRON_CRD_WRITE.md completion at 17:30 KST
- docs: verify spelling for CRON_CRD_WRITE.md completion entry (2026-05-26 16:30 KST)
- docs: complete cron task - CRD development-4.mdx spelling check (2026-05-26 15:00 KST)
- docs(today-commit): register missing May entries (05-19, 05-21~05-25)
- docs: add CRON_CRD_WRITE.md entry for 2026-05-26 14:00 KST
- chore: update cron CRD write completion for development-4.mdx
- chore(cron): add 2026-05-26 12:30 KST CRON task entry
- docs: mark 2026-05-26 03:30 KST cron task as completed
- docs: add cron entry for 2026-05-26 10:30 KST CRD write verification
ohah/suji
- Windows autoUpdater (zip format) — PowerShell helper + Expand-Archive
- macOS/Linux backend dylib bundling (self-contained packaging parity)
- Add Linux GTK dialog backend
- Align native API documentation
- Use MSYS2 libnode for Windows Actions
- Export MSYS2 MinGW root in Actions
- Fix Windows CI toolchain setup
- Add --strict packaging flag to fail on missing backend/plugin dylibs
- Fix PR #40 code-review findings: sentinel marker + dylib validation
- Bundle backend/plugin dylibs in Windows package + runtime resolution
- Windows packaging: bundle CEF/Node runtime, detect packaged exe
- Update CLAUDE.md with recent Windows native + plugin progress
- Fix Rust wrapper on stable Rust (specta typescript opt-in)
- Add Windows e2e + wrapper-bundle runners for state/sqlite plugins
ohah/zntc
- feat(mcp): take_snapshot tool — fiber tree nested summary + cap policy
- feat(mcp): get_logs tool — console intercept + ring buffer + cursor pagination
- feat(mcp): eval_code tool — 동기 expression 평가 + ref context 바인딩
- fix(build): napi target 에 BoringSSL static link — SSL_CTX_free undefined symbol 해결
- feat(mcp): inspect_state tool — fiber props/state/hooks 직렬화
- feat(mcp): find_element tool — RN fiber tree 첫 매칭 + opaque ref
- fix(test): /code-review max — F1/F2/F3 (E2E robustness)
- test(integration): MCP App Channel E2E — /__mcp-app + ping_app 양방향
- chore(server): MCP cosmetic 주석 + 5s magic → const (PR-E3b F3/F7 + F5 F3)
- fix(server): code-review max — F2/F4/F5 retroactive
- fix(server): DevServer.deinit 가 connection thread 종료까지 wait (retroactive PR-E3a F5)
- fix(server,react-native): code-review max — F1/F2/F6 + F4/F5 (PR-E3b retro)
- feat(server,react-native): ping_app MCP tool — 양방향 sanity check (PR-E3b of #3867)
- fix(server): code-review max — F1/F2/F3 (AppChannel race + write serialization)
- feat(server): AppChannel.request API + response matching (PR-E3a of #3867)
- fix(server): recv_buf 256KB heap → 32KB stack (retroactive F2)
- fix(react-native): retroactive code-review — F1/F3/F4/F5/F7 safety hardening
- chore(react-native): 묶음 deferred 정리 — PR-C F4 / PR-D F8 / PR-E2 F3+F6
- fix(react-native): mcp-runtime jest opt-out + send drop warn (deferred PR-E2 F5+F7)
- fix(react-native): WebView wrapper HMR race + strict mode (deferred PR-D F3+F4)
- fix(server): connection recv buffer 8KB → 256KB heap alloc (deferred PR-E1 F3)
- fix(react-native): code-review — F1/F2/F4 root cause (PR-E2 follow-up)
- feat(react-native): MCP runtime WS client (placeholder → 실 connect, PR-E2 of #3867)
- fix(server): code-review max — F1/F2/F4/F5/F6 (PR-E1 follow-up)
- feat(server): MCP app channel WS endpoint (PR-E1 of #3867)
- fix(react-native,bundler): code-review max — F1/F2/F5/F6 partial
- feat(react-native): MCP WebView wrapper alias — Babel plugin 의 잔존 잔존 native 치환 (PR-D of #3867)
- fix(react-native,cli): code-review max — mcp opt-out forward + 명시 활성 warn
- feat(react-native): MCP runtime preamble — dev 빌드 entry 자동 inject (PR-C of #3867)
- fix(server): code-review max F1/F2 — monotonic 시간으로 polling deadline
- perf(server): get_build_events 가 새 event 도착 시 일찍 반환 (HOL blocking 완화)
- fix(cli): zntc mcp root resolution ?? → || (ZNTC_ROOT 빈 값 안전)
- feat(cli): zntc mcp 에 root 옵션 추가 (positional + ZNTC_ROOT env)
- fix(server): code-review 후속 — 204 응답 헤더 + notification id 검사 strict
- fix(server): JSON-RPC 2.0 notification 응답 금지 (spec 준수)
- fix(server): code-review max — LineTooLong resync + 응답 정규화 fast path
- feat(server,napi,cli): MCP stdio transport + zntc mcp subcommand
- refactor(server): dispatcher 자체에 -32603 fallback 내장
- refactor(server): handleMcp 본문을 transport-agnostic dispatcher 로 분리
- fix(bundler): __zntc_modules Proxy noop 을 .css key 만 한정 (PR #3870 /code-review max #2/#6)
- fix(bundler): __zntc_modules Proxy fallback — .zntc.css side-effect import noop (Closes #3869)
- fix(cli,web): dev-incremental PostCSS test 회귀 fix + DELETE test 통과 (CI 복구)
- fix(cli): PR #3865 /code-review max — double broadcast + outdir==root edge
- fix(cli): drain rebuildAppDevCss 가 prepare 도 호출 (Closes #3861)
- fix(web,cli): #3857 /code-review max — require base 분리 + guard 추가
- fix(cli,web): css({root}) 단독 명시 시 auto-discover search base routing (Closes #3857)
- docs(readme): fix dev server example command
- fix(napi,cli): reconcileOutdirCss 회귀 + rescan boundary (#3860 /code-review max)
- feat(napi,cli,web): native watch 가 graph 외 .css 신규 file detect (#3858 PR-3)
- fix(server): 삭제 path 의 UAF 차단 (#3858 PR-2 /code-review max #1)
- feat(server): dev_server.watchLoop 가 root_dir dir-watch + rescan (#3858 PR-2)
- fix(server): InotifyBackend removePath 의 inotify wd leak 차단 (/code-review max #3)
- feat(server): FileWatcher 의 dir-watch 지원 (#3858 PR-1)
- fix(web): AppDevControllerOptions/PrepareAppCssPipelineRootOptions 에 postcssOverride.root 타입 추가 (/code-review max #1/#12)
- Revert "fix(web): preparePostcssApplied 가 sass-only false-positive 해소 (/code-review max #1)"
- fix(web): preparePostcssApplied 가 sass-only false-positive 해소 (/code-review max #1)
- fix(web): prepare 의 postcssDeps 가 incremental 시 carry-over (/code-review max #1)
- fix(web): prepare 의 postcssDirDeps 보존 + afterBundle skipPostcssRun 머지 (Closes #3850)
- fix(cli,web): css({root}) caller-pre-warm 에서 silent ignore 회귀 fix (Closes #3851)
- fix: #3852 이중 import 방지 + #3853 sourceRoot type guard (RFC #3833 follow-up)
- style: apply oxfmt to zntc.mjs after #2 fix
- fix(cli): buildBundleOptions 의 caller-pre-warm css filter 를 app caller 만 적용 — bundle 모드 silent drop 회피 (#3833)
- fix: /code-review max 3 finding fix — runAppBuild 무조건 drop + docstring 정확화 + JSON-literal regex 강화 (#3833)
- style: apply oxfmt to dev.ts test additions
- refactor(cli) + test: dropCallerPreWarmedCssPlugin helper + dev sass/css-modules/single-pass 통합 test (#3833)
- fix(web): dev path zero-config PostCSS double-pass 해소 — preparePostcssApplied state + skipPostcssRun mirror (Closes #3847)
- style: oxfmt fix for postcss test helper imports
- fix(cli): caller-pre-warm sentinel 가진 css plugin 을 dispatcher 에서 제거 — buildAppSync sync × async onLoad BundleFailed + dev double-pass 동시 해소 (#3833)
- test(web,core): D1a'' acceptance test 강화 — sentinel + 4 분기 + dev path (#3833)
- fix: extractCssPostcssOverride predicate 의 두 번째 항도 optional chain (latent null deref 차단)
- refactor(cli): extractCssPostcssOverride helper 추출 — runAppBuild/runAppDev 중복 제거 (#3833)
- fix: D1a'' Phase 2 의 /code-review max #3 — explicit no-op 시 watch deps 누락 (#3833)
- style: apply oxfmt to postcss.ts (D1a Phase 2 follow-up)
- feat(web,core): D1a'' Phase 2 — dev path 도 caller-side pre-warm (#3833)
- fix: D1a'' Phase 1 의 재-review finding fix — disabled/options-only 분기 + CssZntcPlugin internal (#3833)
- fix: D1a'' Phase 1 의 /code-review max finding fix — findLast + presence check + Vite parity (#3833)
- feat(core,web): RFC #3833 v3 D1a'' Phase 1 — caller-side pre-warm 으로 사용자 explicit css({postcss}) 적용
- fix(server): Windows TLS root-cause — TlsConnection comptime 분기 + ci.yml mitigation revert (#3841)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.