2026-05-16
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 code splitting을 크게 넓혔습니다. 먼저 분할 청크마다 CSS를 나누고 content-hash와 css_names 패턴을 적용했으며, 동적 청크를 불러올 때 런타임에 CSS link 태그를 넣게 했습니다(#3322, #3323, #3325). 작은 공통 청크를 합치는 minChunkSize(#3333)와 리터럴이 아닌 동적 import() 경고(#3336)가 이어졌고, Module Federation과 CJS·IIFE 분할 설계 RFC를 문서로 남겼습니다(#3319, #3341). 그 뒤 preserve-modules와 CJS 출력(P3-A, #3343), 레지스트리 런타임과 안정 모듈 ID를 쓰는 CJS·IIFE 분할(P3-B, #3344, #3346, #3349), UMD·AMD 분할(#3357), IIFE 동적 로더의 worker·Deno·Node-ESM 폴백과 CSP nonce 지원(#3355, #3358)이 차례로 병합됐고, 초기 레지스트리 코어는 걷어 내 하나로 정리했습니다(P3-C, #3363). 청크를 넘나드는 re-export와 export *, namespace re-export가 바인딩되지 않던 문제, 같은 청크 동적 import가 다시 쓰이지 않아 ERR_MODULE_NOT_FOUND가 나던 문제, 동적 entry 청크의 중복 export 오류, 중첩 namespace re-export 체인 모듈이 과하게 지워지던 문제(#3371) 등 후속 수정도 같은 날 들어왔습니다.
다른 영역에서는 semantic 분석이 사용자 import를 호이스팅된 심볼로 미리 선언하도록 고쳐 export가 import 바인딩을 가리키는 문제를 정리했고(#3312, #3314), class 필드 이름 get/set, 삼항 결과 자리의 반환 타입 있는 화살표 함수, 파생 클래스 매개변수 프로퍼티 변환의 use-after-free(#3320)를 수정했습니다. Flow match 식은 스칼라 패턴과 객체·배열·인스턴스 구조 분해까지 정밀하게 변환하게 됐습니다(#3301, #3304). mangler는 RFC #3288 아래에서 측정과 예약 이름 전파를 이어 가다가, 검증으로 반박된 슬롯 공유 인프라를 제거했습니다(#3342). RN 릴리스 런타임 초기화 순서 보존과 HMR Refresh 심볼 바인딩 보존(#3345, #3365)도 병합됐습니다.
suji는 CEF와 무관한 embed C ABI를 분리한 뒤 iOS·Android 호스트 예제를 만들었습니다. 모바일 크로스 컴파일, suji_core_register_handler와 suji_core_last_error()를 추가하고, Rust·Go·Zig 정적 백엔드와 언어별 예제 구조를 갖춘 다음 iOS 시뮬레이터와 Android 에뮬레이터에서 실제 빌드·구동을 확인하며 결함을 고쳤습니다. Windows dlopen 백엔드는 kernel32를 직접 감싸 지원했습니다. 새벽에는 macOS 서명 모드·공증·.dmg, Windows·Linux 패키징과 release.yml, 기본값이 검증만 하는 SDK 배포 워크플로를 추가하고 CI에서 드러난 비-macOS 빌드 결함을 고쳤습니다.
agent-devtools는 PR 8개를 병합했습니다. agent-browser 0.27의 pushstate·다이얼로그 자동 처리·snapshot URL·cURL 쿠키 가져오기 동기화와 resource-type 필터, Core Web Vitals 측정, init script(#1), React DevTools hook을 넣은 react tree·inspect·renders·suspense 명령(#2), 쿠키·vitals 버그 수정(#3), swipe·키보드·batch·doctor·프로필·안정적 탭 ID(#7), find 로케이터 액션과 CDP 엔드포인트 연결 등 13건의 패리티 보강(#8)입니다. 버전은 0.1.2(#6)와 0.1.3 커밋으로 올렸습니다. 새 저장소 zerolist는 Zig zero-copy 엔진과 RN 모노레포, 가상화 연산 벤치로 시작해, FlatList와 같은 의미의 가상화 엔진과 드롭인 컴포넌트, JSX 슬롯 풀을 네이티브 스크롤과 Zig가 배치하는 구조를 Android 에뮬레이터에서 확인하고 iOS 시뮬레이터로 옮겼습니다. 커밋 메시지대로 측정은 시뮬레이터·에뮬레이터 기준이고 실기기 성능은 검증 전입니다. 블로그 저장소 ohah.github.io의 커밋 21개는 크론 점검 기록과 일일 요약 갱신, tech-stack 제목 오타 수정입니다.
공개 커밋 191개, 해당일 생성 또는 병합된 PR 73개를 정리했습니다. PR 생성 73개·병합 73개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/agent-devtools
- chore: bump version to 0.1.3
- feat: agent-browser 패리티 REAL GAP 13건 보강 (#8)
- Merge pull request #7 from ohah/feat/parity-gaps
- docs: 패리티 갭 보강 반영 (comparison/CLAUDE/SKILL, 533 테스트)
- feat: 안정적 탭 ID (agent-browser parity)
- feat: --profile + profiles (agent-browser parity)
- feat: doctor 진단 명령 (agent-browser parity)
- feat: batch 명령 (agent-browser parity)
- feat: keydown/keyup/keyboard 명령 (agent-browser parity)
- feat: swipe 터치 제스처 (agent-browser parity)
- Merge pull request #6 from ohah/release/0.1.2
- chore: bump version to 0.1.2
- Merge pull request #5 from ohah/fix/ci-windows-recvline
- fix(ci): Windows에서 recvLineAlloc 테스트 컴파일 실패 수정
- Merge pull request #4 from ohah/docs/skill-sync-0.27
- docs: SKILL.md/commands.md에 0.27 동기화 + React 명령 반영
- Merge pull request #3 from ohah/fix/e2e-cookie-vitals
- refactor: /simplify — cookie bulk 콤마 버그 수정 + 헬퍼 추출
- fix: E2E 검증으로 발견한 cookies/vitals 버그 2건 수정
- Merge pull request #2 from ohah/feat/react-introspection
- docs: CLAUDE.md에 React 인트로스펙션 명령 + 구조 반영 (테스트 529개)
- feat: react suspense [--only-dynamic] 명령 (React 인트로스펙션 완료)
- feat: react renders start|stop 명령 + 에러 메시지 정제
- feat: react inspect <fiberId> 명령
- feat: react tree 명령 + 대형 출력 절단 버그 수정
- feat: React DevTools hook 벤더링 + --enable=react-devtools
- Merge pull request #1 from ohah/feat/agent-browser-sync-0.27
- docs: CLAUDE.md에 agent-browser 0.27 동기화 명령 반영 + 테스트 519개
- feat: --init-script + removeinitscript 지원
- feat: vitals 명령 추가 — Core Web Vitals + TTFB 측정
- feat: network intercept에 --resource-type <csv> 필터 추가
- feat: agent-browser 0.27 동기화 — pushstate/다이얼로그 자동처리/snapshot --urls/cookies --curl
ohah/ohah.github.io
- chore: spellcheck completed
- docs: add 2026-05-16 daily activity summary
- chore(cron): verify one MDX file for spelling (2026-05-17 05:00 UTC)
- docs: update 2026-05-16 daily activity summary
- docs: mark CRON_CRD_WRITE.md next scheduled run (2026-05-17 05:00 UTC)
- docs(cron): update CRON_CRD_WRITE.md with 2026-05-17 01:00 UTC check
- cron: verify spelling - development-4.mdx
- fix: correct typo in tech-stack heading (홍대병 → 홍대)
- docs: add 2026-05-16 activity summary
- chore(cron): log CRD-write cron task completed (2026-05-17 00:00 KST)
- chore(cron): mark CRD_WRITE cron completed (2026-05-16 23:30 UTC) ✓
- cron: complete daily CRD write verification (2026-05-16 22:30 KST)
- chore(cron): update hwpjs/development-1.mdx verification record (2026-05-16 23:30 UTC)
- docs: add 2026-05-16 daily activity summary
- docs: CRON spelling check for docs/monthly-opensource/hwpjs/development-2.mdx (2026-05-16 19:30 KST)
- docs: update CRON_CRD_WRITE.md - development-2.mdx verified (2026-05-16)
- docs: update CRON_CRD_WRITE.md with 06:30 KST completion (2026-05-16)
- docs: update CRON_CRD_WRITE.md - 2026-05-16 03:30 KST completed
- docs(cron): record CRD doc verification for development-2.mdx (2026-05-16 12:00 KST)
- chore: mark CRON_CRD_WRITE.md as completed for 2026-05-16 19:30 KST
- chore(cron): verify hwpjs/development-8.mdx spelling (2026-05-16 10:00 KST)
ohah/suji
- refactor(sdk): /simplify — sparse-index 버전 인지 폴링
- refactor(sdk): /simplify — crate 발행 무한대기 가드 + 부분발행 경고
- fix(sdk): release.yml name 의 콜론 인용(YAML 매핑 오류 수정)
- fix(sdk): crate 발행순서(macros→suji) + path dep version + go vet 비차단
- feat(sdk): SDK 배포 워크플로 (발행 X, 검증만 기본)
- test(release): 서명모드/플래그 파싱 단위테스트 + SigningMode 단일화
- refactor(release): /simplify — embed-libs find 확장자 한정 + stub 동기화 주석
- fix(release): embed-libs 진단/find + cli Windows Debug (CI 2차)
- fix(release): CI 노출 결함 2건 — 비-macOS SigningMode 스텁 + bash3.2
- refactor(release): /simplify — runCmd 단일화 + secret env + cp 정합
- feat(release): Win/Linux 패키징 + 모바일 signingConfig + release.yml (B/C/D)
- feat(macos): 서명모드(none/adhoc/identity)+공증+.dmg (zero-native 패리티)
- docs(cef): /simplify — window_lifecycle 스텁 WHY 주석 가드 경로 보강
- fix(ci,platform): 레이어2 — Rust 1.93 + window_lifecycle 비-macOS 스텁
- fix(ci,platform): edition2024 Rust 토글 + 비-macOS 컴파일 결함 2건
- fix(build): zig-toml 의존성을 불변 커밋 SHA 로 핀 (장기 CI 적색 해소)
- refactor(test): /simplify — iOS smoke 생존판정·배열 견고화
- test(windows): state/Rust/Go 통합 테스트 Windows skip 가드 제거 (#11 잔여)
- test(mobile): iOS 시뮬레이터 변형별 빌드+기동 스모크 스크립트
- refactor(examples): /simplify — Android build-lib 위생 + 낡은 주석 정정
- fix(android): rust/go/zig 변형에 코어 .so 패턴 전파 + Zig 디바이스 실증
- fix(android): APK 빌드/구동 블로커 해결 — multi 에뮬레이터 실증
- fix(examples/android): 미사용 appcompat 제거 + APK 빌드 블로커 정직 문서화
- fix(examples/ios): 시뮬레이터 빌드 가능 + 실 결함 3건 (실빌드·구동 검증)
- docs: Android README build-lib 주석 변형별 정확화
- docs: 모바일 언어별 예제 구조 반영 (CLAUDE.md/PLAN.md)
- feat(examples): Android go/zig 변형 (언어별 예제 완성)
- feat(examples): Android 언어별 예제 구조 (_shared 호스트 + multi/rust 변형)
- feat(examples): iOS go/zig 변형 + Zig 정적 백엔드
- feat(examples): iOS 언어별 예제 구조 (_shared 호스트 + multi/rust 변형)
- ci: mobile-backends 호스트 하니스 job 추가 (회귀 방지)
- feat(examples): Android Rust/Go 정적 백엔드 (iOS 동형) + 공용 브리지 헤더
- fix(embed): last_error simplify 리뷰 반영
- feat(embed): suji_core_last_error() 진단 게터 (zero-native 차용)
- test(mobile-backends): simplify 리뷰 반영
- test(mobile-backends): 코어+Rust+Go 정적 링크 호스트 검증 하니스
- feat(sdk,examples): iOS Rust/Go 정적 백엔드 (고유 심볼 진입점)
- feat(embed): suji_core_register_handler + 모바일 네이티브 핸들러 예제
- docs: embed 코어 분리 + 모바일 + Windows dlopen 반영 (CLAUDE.md/PLAN.md)
- docs: CLAUDE.md 이슈 #11 해결 반영 (Windows dlopen kernel32 래핑)
- feat(examples): Android 호스트 스켈레톤 + JNI/JS 브릿지 (Phase 3)
- feat(loader): Windows dlopen 백엔드 지원 (kernel32 직접 래핑)
- feat(examples): iOS 호스트 스켈레톤 + JS 브릿지 (Phase 3)
- feat(embed): 모바일 크로스 컴파일 지원 + CI 회귀 방지
- Merge feat/embed-core-abi: CEF 무관 embed C ABI 분리 (Phase 1+2)
- feat(core): CEF 무관 embed C ABI 분리 (Phase 1+2)
ohah/zerolist
- feat: #22 ③ iOS 포팅 — zigpool(ZlPoolList) iOS Fabric, 시뮬 검증
- feat: #21 ③-N3 — 리사이클: JSX 풀이 무한 스크롤 (③ 본질 완성)
- feat: #20 ③-N2 — 네이티브 스크롤 + Zig 가 매 프레임 JSX 풀 슬롯 구동(JS 0)
- feat: #19 ③-N1 — Fabric 호스트가 JS 풀 슬롯(JSX) 표시 + 네이티브 배치
- fix: #11 에뮬 검증 — RN 코어 TurboModule 회귀 + ③ 렌더/정합 버그
- fix: #16 hermesc 경로 견고화 (하드코딩 → node require.resolve)
- feat: #11 ZeroList③ 아키텍처 PoC (네이티브 스레드 Zig 가시범위)
- feat: #11 ZeroList flatlist 패리티 보강 (ScrollView 패스스루 등)
- test: #11 ZeroList 컴포넌트 테스트(RTL) + native jest 프로젝트 복구
- feat: #11 예제앱 harness 에 ZeroList 엔진 연결
- feat: #11 ZeroList flatlist drop-in 컴포넌트 (list.tsx)
- feat: #11 zerolist 가상화 엔진(flatlist 동일 시맨틱) + jni 브리지 + jest 인프라
- feat: #18 chrome-free 측정 루트 + /simplify 정정 (Fabric mount≈0)
- feat: #11-1 fabric 임베드 네이티브 리스트 + /simplify 정정
- feat: phase b-1 순수 네이티브 베이스라인 (NativeBenchActivity)
- feat: maestro+gfxinfo 변별 테스트 자산화 (측정 교착 해소)
- fix: harness /simplify — 측정 무효 jsLag 제거 + heavy 셀 정리
- refactor: harness /simplify — 측정 타당성·중복 제거
- feat: phase c-1 벤치 harness 셸 (셀×높이×스크롤 매트릭스)
- feat: zerolist poc — zig zero-copy engine + rn monorepo + phase a bench
ohah/zntc
- feat(linker): ESM wrapper-barrel default import 도 scope-aware member 분석
- fix(tree-shaker): 중첩 ns re-export 체인 모듈 over-elimination (#3368)
- fix(bundler): splitting 단일/같은 청크 namespace whole-value 미합성 (#3367)
- style(rn): oxfmt format preset.test.ts (pre-push/CI Lint&Format 차단 해소)
- fix(bundler): cross-chunk namespace re-export 미바인딩 (#3321 후속)
- refactor(refresh): drop unreachable component_idx fallback
- refactor(resolver): drop tryResolveAbsolutePath wrapper
- fix: preserve refresh symbol bindings for RN HMR
- test(smoke): 함수참조/비결정 entry 를 값·동작 기반으로 교체 (false-positive DIFF 제거)
- feat(bundler): sideEffects:false 모듈 top-level 멤버대입 member-augment 귀속
- docs(bundler): cross-chunk namespace re-export 한계 정밀 규명 + 추적 테스트 (#3321)
- refactor(bundler): P3-C — dead PR1 레지스트리 코어 제거, 단일 canonical 화 (MF 선행, #3321)
- test(bundler): RSC 디렉티브 × iife/umd-split 회귀 가드 + PR4 잔여 스코프 확정 (#3321)
- feat(bundler): IIFE/UMD 동적 로더 CSP nonce 지원 (PR4, #3321)
- feat(bundler): UMD/AMD code splitting (PR4, #3321)
- refactor(test): IIFE 드라이버 헬퍼 writeIifeDriver 공용화 (#3321 /simplify 후속)
- feat(bundler): IIFE 동적 로더 비-DOM 폴백 (worker/Deno/Node-ESM) (PR4, #3321)
- fix(bundler): export * from cross-chunk re-export 미바인딩 (#3321 후속)
- test(bundler): align dev-mode CJS require expects with HMR registry rewrite
- refactor(bundler): factor out __zntc_modules dev require helpers
- fix(rn): stabilize zntc runtime registry
- fix(rn): preserve release runtime initialization order
- fix(bundler): same-chunk 동적 import 미재작성 → ERR_MODULE_NOT_FOUND (#3321 후속)
- fix(linker): reserve all-scope 1-char identifiers in Phase A (cross-module shadow)
- fix(bundler): ESM 동적-entry 청크 Duplicate export SyntaxError (PR4, #3321)
- fix(bundler): cross-chunk re-export 심볼 미바인딩 (#3321 후속)
- feat(bundler): P3-B IIFE code splitting — 런타임 레지스트리 활성화 (#3321)
- perf(runtime): terse TypeError messages in minified private-field helpers
- perf(transformer): compact private-field postfix update in statement context
- feat(bundler): P3-B CJS code splitting emit 연결 (#3321)
- feat(bundler): P3-B 레지스트리 런타임 + 안정 모듈 ID 하위 인프라 (#3321)
- feat(bundler): preserve-modules + CJS output (P3-A, #3321)
- chore(mangler): remove refuted c2/M2 dead infra (RFC #3288)
- docs(rfc): CJS/IIFE code splitting (P3) design, integrated with MF runtime registry
- test(bundler): edge-case hardening for #3321 chunk work + document css_names limit
- feat(mangler): global-freq-rank-aware Phase B slot ordering (RFC #3288 M2 PR-2)
- feat(mangler): bundle-wide frequency-rank infra for M2 slot-pool sharing (RFC #3288 M2 PR-1)
- fix(bundler): inline @import'd CSS per chunk across split chunks (P0-4)
- feat(bundler): warn on non-literal dynamic import() specifier (P1)
- feat(mangler): reference-precise liveness option for top-level slot sharing (RFC #3288 c2 infra)
- docs(bundler): document literal-only dynamic import policy + minChunkSize
- feat(bundler): minChunkSize — merge tiny common chunks (P2)
- fix(linker): broadcast namespace-import member sources to per_mod_reserved (RFC #3288)
- fix(bundler): collect CSS through tree-shaken side-effect proxy modules (#3330)
- fix(bundler): don't force content hash into chunk CSS names
- fix(linker): broadcast .alias re-export source to per_mod_reserved (RFC #3288 b)
- chore(mangler): collision invariant assert for RFC #3288 (PR a, safety net)
- test(e2e): runtime CSS <link> injection for dynamic chunks
- feat(bundler): inject runtime CSS <link> for dynamic chunks
- refactor(bundler): extract planCssChunks from emitCssChunks
- feat(bundler): content-hash & css_names pattern for chunk CSS
- feat(bundler): per-chunk CSS splitting for code splitting
- fix(transformer): use-after-free in derived-class param property lowering (D23)
- docs(rfc): add Module Federation & 분할 배포 RFC
- fix(parser): typed arrow with return type in ternary consequent (D22)
- fix(parser): class field named get/set with type/optional/definite (D21)
- chore(semantic): clean D20 stale comments + forward value-use guard
- refactor(semantic): remove D20 read-only side-table (PR-3, Closes #3310)
- test(semantic): import redeclaration spec-correct guard (D20 PR-2)
- fix(semantic): predeclare user import as hoisted symbol (D20 PR-1)
- fix(semantic): forward export to import binding via read-only side-table (D20)
- fix(transpile): correct default/namespace import specifier layout in auto type-only
- style: zig fmt (#3129 follow-up)
- refactor: transparent type-wrapper 태그를 단일 predicate 로 통합 (#3129)
- docs(pages): correct buildSync plugin limitation on deployed site
- docs(plugins): correct plugin status drift vs actual code
- perf(minify): X===null||X===void 0 → X==null nullish check fold (rxjs -186B)
- feat(flow): precise match object/array/instance destructuring + block body fix
- perf(mangler): J-step3a — wrapper-isolated internal candidate 측정 (RFC #3288)
- perf(mangler): J-step2a — Phase A cross-module vs internal 분류 측정 (RFC #3288)
- feat(flow): precise match expression lowering (scalar patterns)
- perf(minify): shared-ns getter object → arrow __export (zod -930B, G1-step2)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.