2026-05-17
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 Module Federation(MF) 지원을 하루 만에 크게 진척시켰습니다. 웹 스파이크 설계와 S0부터 S5까지의 검증 결과, MF2 계약 실측을 문서로 남긴 뒤(#3374, #3379, #3380) P1 작업으로 MF config 표면과 검증(#3390), 연합 경계 모듈 식별과 안정 ID(#3394), shared 의존의 글로벌 seam 자동 파생(#3396), webpack 방식 container(remoteEntry) emit(#3401), shareScopeMap 런타임(#3406), mf-manifest.json 에미터(#3410), @module-federation/runtime을 재사용하는 host 통합(#3413)을 병합했습니다. Playwright 실브라우저 interop CI와 zntc host에서 rspack·enhanced remote를 불러오는 역방향 e2e(#3416, #3418)로 호환성을 확인했고, P2로 manifest의 shared·remotes 정밀화, SHA-256 무결성 sidecar와 Ed25519 서명(#3431, #3432), metafile 표식을 더했습니다. P3에서는 빌드 시점에 remote 계약·expose 부재·shared singleton 버전·sidecar 변조를 검사해 즉시 실패시키는 검증(#3442, #3443, #3444, #3450), 경계 모듈 소유권 린트, 런타임 가드 폴백(#3454)이 들어갔고, 밤에는 정적 import "remote/x"를 위한 seam과 async preload-gate(#3462, #3463)가 이어졌습니다.
minify 크기 격차 작업도 여러 갈래로 진행됐습니다. namespace member-access를 직접 심볼로 재작성하는 작업(#3409), bundle-context에서 export const 선언을 병합하는 작업(#3417), CJS wrapper의 exports·module 이름을 mangle하는 작업(#3458)은 각각 에픽 브랜치에서 하위 PR을 병합한 뒤 main에 반영됐고, CJS wrapper mangle에는 이후 eval·with 가드가 추가됐습니다(#3461). minify_syntax에서 유효한 식별자 객체 키의 따옴표를 빼는 변경(#3446)도 병합됐습니다. 반면 esbuild renamer를 옮기는 nested-scope renamer는 RFC(#3391) 뒤 slot 인프라와 이름 발급 PR이 에픽 브랜치에만 병합됐고, 시도한 접근들의 측정 결과를 묶은 mangler size-gap RFC(#3460)가 이 방향을 종결로 정리했습니다. RN 쪽은 HMR 뒤 sourcemap 유지(#3372), 릴리스 번들 평가 안정화(#3404), lazy barrel·CJS namespace require·re-export·svg 에셋·babel 플러그인 실행 위치 등을 묶은 require 런타임 누락 경로 보정(#3449)을 병합했고, 같은 내용을 나눠 올린 PR 세 개는 닫았습니다. 벤치마크 문서에는 번들 크기 비교가 추가됐습니다(#3429).
suji는 BrowserWindow 객체지향 래퍼를 JS·Node·Rust·Go SDK에 넣어 Phase 6을 마쳤고, CDP 기반 set_user_agent·get_user_agent와 capture_page를 코어와 4개 SDK에 추가해 실제 CEF e2e로 확인했습니다. window.__suji__를 동결하는 contextIsolation(Phase 7)과 Linux PDF 인쇄 핸들러가 들어갔고, 오후부터는 모바일 임베드 경로에 http.fetch를 배선한 뒤 Tauri와 같은 구조의 __core__ 네이티브 와이어로 clipboard, shell, notification, dialog, safe_storage, 앱 메타, fs를 Slice 1부터 11까지 차례로 붙이고 iOS 시뮬레이터·Android 에뮬레이터 e2e와 인터랙티브 데모를 추가했습니다. 의존성 없는 npx @suji/cli init 스캐폴더, Menu.popup 컨텍스트 메뉴, macOS App Sandbox 빌드 옵션(suji build --sandbox)과 security-scoped bookmark도 이날 커밋입니다. Linux·Windows safeStorage 패리티 커밋은 곧바로 되돌렸습니다.
zerolist는 JS-0 정량 계측과 셀 mount/unmount churn 지표를 추가하고, ringIndex 교차 계약 테스트로 순수 ring 단축 가설을 반증했으며, 네이티브가 권위를 갖는 binding 리사이클러를 구현했습니다. agent-devtools에는 미뤄 둔 소형 패리티 6건과 auth 동시성 버그 수정을 담은 PR #9를 열었으나 아직 병합되지 않았습니다. 블로그 저장소 ohah.github.io의 커밋 13개는 크론의 맞춤법 점검 표시 커밋 12개와 요약 갱신 커밋 1개입니다.
공개 커밋 128개, 해당일 생성 또는 병합된 PR 65개를 정리했습니다. PR 생성 65개·병합 61개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
- docs: verify CRD write cron task - development-4.mdx spelling check (2026-05-18 19:00 UTC)
- chore: CRD cron spelling check - docs/monthly-opensource/crd/development-4.mdx verified
- chore: mark CRD cron task 2026-05-18 18:30 UTC as complete
- docs: update CRON_CRD_WRITE.md - verified development-3.mdx spelling (2026-05-18 18:30 UTC)
- docs: update CRON_CRD_WRITE.md with 2026-05-18 17:30 UTC completed task
- cron: add 2026-05-18 16:30 UTC crd-write verification (hwpjs/tech-stack.mdx)
- docs: today-commit 2026-05-17 AI summary
- docs: CRON_CRD_WRITE.md - completed 2026-05-17 15:00 UTC check
- cron: CRD_WRITE spelling check (2026-05-17 14:00 UTC)
- docs: CRON write task 2026-05-17 19:00 UTC (hwpjs/tech-stack.mdx verified)
- chore: crd-write cron - verify development-6.mdx spelling (2026-05-17 05:30 UTC)
- docs: update CRON_CRD_WRITE.md - 2026-05-17 13:00 UTC check completed
- chore: verify CRD development-4.mdx spelling (2026-05-17 14:00 UTC)
ohah/suji
- feat(macos): Security-scoped bookmarks — App Sandbox 영속 파일 접근
- feat(macos): App Sandbox 인프라 — suji build --sandbox / SUJI_SANDBOX
- feat(menu): Programmatic context menu — Menu.popup(items,{x?,y?})
- feat(cli): npx @suji/cli init — 의존 0 순수 Node 스캐폴더
- feat(examples): 모바일 네이티브 @suji/api 인터랙티브 데모 (8 index.html)
- docs(plan): 코드서명 표기 정정 — notarize 구현됨 + adhoc 로컬 실증
- docs(plan): 모바일 네이티브 @suji/api 최종 정리 (Slice 1~11 완료)
- feat(mobile): core clipboard buffer/has/formats + fs stat/mkdir/rm (Slice 11)
- feat(mobile): core fs (Slice 10) — read/write/readdir
- docs(ios): shell_beep SystemSoundID 1057=Tink 출처 주석 명시
- feat(mobile): core shell 확장 (Slice 9) — beep/open_path/show_item/trash
- feat(mobile): core dialog 확장 (Slice 8) — error/open/save
- fix(android): MainActivity.kt raw NUL 바이트 → 이스케이프 (위생)
- feat(mobile): core clipboard 확장 (Slice 7) — html/rtf/image
- feat(mobile): core app 메타 (Slice 6) — get_path/locale/name/version
- feat(mobile): core safe_storage (Slice 5) + PLAN 커버리지 표
- docs(embed): suji_core_register_handler channel 인자 계약 정정 (root cause)
- feat(mobile): 진짜 기능 e2e (iOS 시뮬 + Android 에뮬) + Android 배선 버그픽스
- feat(mobile): core dialog (Slice 4, 호스트-측 async 가로채기)
- feat(mobile): core shell.openExternal + notification (Slice 2·3)
- feat(mobile): core 네이티브 와이어 + clipboard (Tauri 동형, Slice 1)
- feat(mobile): http.fetch 를 모바일 임베드 경로까지 배선 (zig:http)
- feat(cef): Linux PDF print handler + PLAN 잔여 정합
- feat(security): contextIsolation — window.suji frozen + 슬롯 봉인 (Phase 7)
- refactor(e2e): /simplify — capture-page leftover 정리 + UA 400ms WHY
- docs: set_user_agent PLAN e2e 반영 + CLAUDE e2e 목록(capture/UA)
- test(e2e): capture_page/set_user_agent 실 CEF CDP 실증
- refactor(cef): /simplify — capture_page data 추출/슬롯/release 정리
- feat(window): capture_page (CDP Page.captureScreenshot) — 코어 + 4 SDK
- refactor(window): /simplify — get_user_agent 에러/미설정 시맨틱 분리
- feat(window): set_user_agent/get_user_agent 동적 (CDP) — 코어 + 4 SDK
- refactor(sdk): /simplify — BrowserWindow create 실패 시맨틱 4-SDK 정합
- feat(sdk/rust,go): BrowserWindow OO 래퍼 + Phase 6 완료
- feat(sdk/node): BrowserWindow OO 래퍼 (@suji/node, Phase 6)
- feat(sdk/js): BrowserWindow OO 래퍼 (@suji/api, Phase 6)
- Revert "feat(safeStorage): Linux secret-tool + Windows DPAPI 패리티 (배치4 슬라이스)"
- feat(safeStorage): Linux secret-tool + Windows DPAPI 패리티 (배치4 슬라이스)
- refactor(pkg): /simplify — run.sh glob-safe 산출물 체크 + fingerprint 주석
- test(pkg): Zig 패키지 소비성 회귀 가드 + 검증 (배치3)
- refactor(#13): 비-macOS bundle_macos 스텁 제거 + PLAN 정정(EmbedRuntime/dispatch)
ohah/zerolist
- test: #23 카운트 지표 확장 — 셀 mount/unmount churn 계측
- feat: #25 ③ 네이티브-권위 binding 리사이클러 — 시각정합+적은 JS 동시
- test: #24 ringIndex 교차계약 + 정직한 조사 결과(순수ring 단축 반증)
- feat: #23 JS-0 정량 계측 + 정직한 결과(③ 어댑터 결함 발견)
ohah/zntc
- feat(mf): 정적 import "remote/x" async preload-gate — PR-2 (#3459)
- feat(mf): 정적 import "remote/x" seam 인프라 — PR-1 (#3459)
- fix(emitter): CJS wrapper mangle 에 eval/with 가드 (정확성 hardening)
- refactor(bundler): drop redundant RN wrapped-binding helper call and simplify reexport check
- fix(core): align HMR debounce with quick-save contract
- fix(transformer): keep generator state temps outside callbacks
- fix(transformer): hoist state machine temps into generator callbacks
- fix(transformer): hoist private method temps in standalone functions
- fix(transformer): hoist class method temps in method scope
- fix(rn): transform svg source assets natively
- fix(rn): skip wrapped binding imports in factories
- fix(rn): inject project root for root-import babel plugin
- fix(rn): run babel plugins from project root
- fix(rn): seed re-export sources for require namespace
- fix(rn): keep lazy getter targets for CJS namespace require
- fix(rn): skip deferred lazy barrel imports
- docs(rfc): mangler size-gap 측정 종결 통합 RFC (CLOSED)
- feat(emitter): CJS wrapper mangle 기본 ON + RN 가드 (RFC PR-4)
- feat(emitter): CJS wrapper exports/module mangle 활성화 + kill-switch (RFC PR-3)
- feat(codegen): CJS wrapper free exports/module 참조 치환 가드 (RFC PR-2)
- feat(codegen): CJS wrapper exports/module 이름 옵션 인프라 (RFC PR-1)
- test(mf): P3 회귀-방어 커버리지 보강 — 가드 noop·비-네트워크 reject·loadContract (#3318)
- feat(mf): 런타임 가드 폴백 emit + 빌드핀·가드 e2e 박제 (#3440)
- feat(mf): 소유권 경계 린트 — 경계 모듈 store 자체생성 비-차단 경고 (#3439)
- feat(mf): 빌드타임 무결성 검증 — sidecar stale/변조 fail-fast (#3438)
- feat(minify): minify_syntax 시 valid-identifier 객체 키 quote 제거
- feat(mf): 빌드타임 shared 버전 호환 검증 — singleton fail-fast (#3437)
- feat(mf): 빌드타임 expose 계약 검증 — 부재 expose import fail-fast (#3436)
- feat(mf): 빌드타임 계약 검증 토대 — RemoteContract parse+resolve (#3435)
- docs(mf): P3 PR 분해 — RFC §7.3 + 트래커 이슈 (#3318)
- test(mf): enhanced interop 확대 — 다중 expose + shared singleton 실브라우저 (#3425)
- feat(mf): metafile MF 산출 표식 — additive zntcMf 키 (#3424)
- feat(mf): Ed25519 무결성 sidecar 서명 에미터 + verify (#3423)
- feat(mf): SHA-256 무결성 다이제스트 sidecar (#3422)
- docs(site): 벤치마크에 번들 크기(tree-shake+minify) 비교 추가
- feat(mf): manifest.remotes 정밀 — mf.remotes → ManifestRemote (#3421)
- fix(test): linkNodeModules 가 transitive dep 를 실제로 링크 (CI ubuntu unresolved 수정)
- feat(mf): manifest.shared 정밀 — SharedEntry → ManifestShared (#3420)
- docs(mf): P2 PR 분해 — RFC §7.2 + 트래커 이슈 (#3318)
- test(mf): interop 커버리지 갭 보강 — 다중-remote/negative/멱등/manifest 한계 (#3318)
- test(mf): S4 역방향 interop e2e — zntc host → 표준 rspack/enhanced remote (#3415)
- test(minify): RFC#3411 export-wrapper 병합 버그 경계 빡센 회귀 추가
- perf(minify): bundle-context export const 선언 병합 (decl coalescing, PR-1)
- test(mf): Playwright S3 실브라우저 interop CI — manifest-driven 갭 영구 박제 (#3389)
- feat(mf): host 통합 — @module-federation/runtime 재사용 (config→init 배선) (#3388)
- docs(rfc): bundle-context export const 선언 병합 사각 (decl coalescing)
- feat(mf): mf-manifest.json 에미터 — webpack/rspack MF 호환 스키마 (#3387)
- refactor(env): env-presence flag 제너릭 통합 + RFC 결과 기록 (PR-3)
- feat(linker): namespace member-access → 직접심볼 재작성 (esbuild StarNameLoc, PR-2)
- feat(mf): shareScopeMap 런타임 + shared→async — container.init 가 host shared 해석 (#3386)
- refactor(bundler): drop cjs_wrap_substitute dead path and dedupe seed helpers
- fix(rn): stabilize release bundle evaluation
- fix(mf): WASI realpath @compileError — wasm-bundler 빌드 복구 (#3318)
- feat(mf): webpack-style container emit (remoteEntry) — init/get + 실 MF2 runtime interop (#3385)
- docs(rfc): shared-ns dead-emit 루트커즈 계측 정정 (§2/§3/§6 반증)
- docs(rfc): shared-namespace dead-emit gate (esbuild StarNameLoc=nil 1:1)
- feat(mf): shared 글로벌 seam 자동 파생 — boundary shared 의존을 글로벌-파라미터로 (#3384)
- feat(mf): P1-1 연합 경계 모듈 식별·표시 + 안정 ID (#3383, #3318)
- docs(rfc): nested-scope renamer port (esbuild renamer.go 1:1) — minify 격차 유일 레버
- feat(mf): P1-0 Module Federation config 표면 + 검증 (#3382, #3318)
- docs(mf): P1 PR 분해 박제 — 스파이크 제약→인프라우선 (#3318)
- docs(mf): 스파이크 S3 PASS + S4 계약 포착 — 종결 판정 (#3318)
- docs(mf): 웹 스파이크 S0/S1/S2/S5 PASS 결과 + P1 제약 박제 (#3318)
- docs(mf): MF2 계약 실측 반영 — docs.module-federation.io 정독 (#3318)
- test(e2e): 코드스플리팅 런타임 실브라우저 e2e — JS 동적청크+CSP nonce (#3318 §8.1 S0)
- docs(mf): §8.1 에 청크 실브라우저 e2e(S0) 통합 (#3318)
- refactor(stmt-info): extract memberAssignTargetParts 공통 코어 (#3359 중복 제거)
- docs(mf): 웹 스파이크 설계 추가 — P1 게이트 (#3318)
- fix(linker): wrapper-barrel default 술어를 default_export_named_local 로 교정
- test(rn-dev-server): clear rebuild timeout to avoid leaked handle
- fix(rn): keep sourcemap after HMR rebuild
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.