2026-03-19

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

요약 (AI 작성)

zntc는 이날 PR 96개를 병합했습니다. 아침에 --drop과 define 치환, import.meta의 CJS 변환으로 Phase 3을 닫고 코드 생성 서식·minify, 전체 트랜스파일 파이프라인(#52), Source Map V3(#53), --ascii-only, 주석과 법적 주석 보존, const enum 인라인을 넣어 Phase 4를 진행했습니다. CLI는 stdin 파이프, 오류 코드 프레임, 디렉터리 단위 변환, tsconfig.json과 --project, 폴링 기반 watch 모드(#65)로 Phase 5를 마쳤습니다. 이후에는 Test262 파서 통과율을 13.7%에서 65.6%로 올린 #67을 시작으로 strict mode와 문맥 추적, 스코프·심볼 분석과 재선언 검사(#82), yield·await와 예약어·이스케이프 키워드 제한, 할당 대상 검증, 클래스 private 이름과 super()·생성자 규칙, 유니코드 식별자 범위, import defer·source 같은 조기 오류 검사를 PR 단위로 쌓았습니다. 커밋에 기록된 통과율은 밤에 87%대까지 올라갔습니다.

hwpjs는 레이아웃 엔진 출력을 기존 viewer와 맞추는 작업을 이어 가, 페이지 번호·표 절대 좌표·SVG 테두리와 배경 패턴·개요 마커·하이퍼링크 onclick·WCHAR 오프셋 매핑·Wingdings 문자 매핑을 고치며 픽스처 46개 중 22개가 완전히 일치하게 했습니다(#204). 오후부터는 같은 문서를 HWP와 HWPX로 읽은 결과를 비교하며 HWPX 공백·테두리 정규화, CSS 접두사 통일, epub:switch 제목과 줄 간격, 표·도형 캡션 통합, 중복 ListHeader 문단과 다단 중복 제거를 차례로 병합해 일치 비율을 18/44에서 32/41(78%)까지 올렸습니다(#205부터 #219까지). CLI에서 HWPX를 자동 감지하는 #220은 이날 PR이 열렸습니다.

ghtui는 전날 연 TextEditor 기반 입력 모달(#144)을 병합하고, CI 보안 감사·MSRV 검사·Dependabot·단위 테스트(#145), Windows와 XDG의 gh 설정 경로 처리(#148), v0.1.0 릴리스를 위한 MIT LICENSE와 영문·한국어 CHANGELOG(#150, #151), 시작 시 새 버전 알림과 --check-update(#152), 릴리스 워크플로의 crates.io 자동 퍼블리시(#158)를 추가했습니다. diff 문맥 펼치기와 마크다운 링크 열기·URL 선택 모달도 들어왔고, Warp 등 일부 터미널에서 Shift+방향키가 편집기를 빠져나가거나 선택 중 크래시가 나던 문제를 고쳤습니다(#159부터 #162까지).

cheolsu-proxy는 데스크톱 프런트엔드와 TUI 크레이트의 단위 테스트를 늘렸고(#300, #301), react-native-mcp는 postMessage 재시도와 재시도 시 앱 재시작으로 CI E2E 간헐 실패를 줄였습니다(#124). 블로그 저장소에는 맞춤법 크론의 상태 갱신 커밋과 3월 19일 오늘의 커밋 요약 갱신이 올라왔습니다.

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

커밋

ohah/cheolsu-proxy

ohah/ghtui

ohah/hwpjs

ohah/ohah.github.io

ohah/react-native-mcp

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/cheolsu-proxy#301생성 · 병합mergedmaintest(tui): TUI 크레이트 유닛 테스트 커버리지 확충
ohah/cheolsu-proxy#300생성 · 병합mergedmaintest(desktop): 프론트엔드 유닛 테스트 커버리지 확충
ohah/ghtui#162생성 · 병합mergedmainFix editor selection rendering: text duplication and shift
ohah/ghtui#161생성 · 병합mergedmainFix editor crash on Shift+Arrow text selection
ohah/ghtui#160생성 · 병합mergedmainFix Shift+Arrow in Warp terminal with Esc debounce
ohah/ghtui#159생성 · 병합mergedmainFix Shift+Arrow causing editor exit (terminal compatibility)
ohah/ghtui#158생성 · 병합mergedmainAdd crates.io auto-publish to release workflow
ohah/ghtui#157생성 · 병합mergedmainUpdate README and Help view with complete keybindings
ohah/ghtui#156생성 · 병합mergedmainAdd URL picker modal for multiple markdown links
ohah/ghtui#155생성 · 병합mergedmainAdd markdown link/image open with 'o' key
ohah/ghtui#154생성 · 병합mergedmainFix duplicate review comment editor on modified lines
ohah/ghtui#153생성 · 병합mergedmainFix block select review comment bug, add diff context expand
ohah/ghtui#152생성 · 병합mergedmainAdd update check notification and --check-update flag
ohah/ghtui#151생성 · 병합mergedmainAdd Korean changelog (CHANGELOG_KO.md)
ohah/ghtui#150생성 · 병합mergedmainAdd LICENSE and CHANGELOG.md for v0.1.0 release
ohah/ghtui#149생성 · 병합mergedmainSimplify gh_config_dir() to use dirs::config_dir()
ohah/ghtui#148생성 · 병합mergedmainFix gh CLI config path for Windows and XDG support
ohah/ghtui#145생성 · 병합mergedmainAdd CI security audit, MSRV check, Dependabot, and unit tests
ohah/ghtui#144병합mergedmainUpgrade input modal to full code editor with TextEditor
ohah/hwpjs#220생성mergedmainfeat: CLI에 HWPX 자동 감지 지원 추가
ohah/hwpjs#219생성 · 병합mergedmainfix: ListHeader 중복 조건 개선 — 32/41 유지
ohah/hwpjs#218생성 · 병합mergedmainfix: 다단 중복 제거 — 32/41 (78%)
ohah/hwpjs#217생성 · 병합mergedmainfix: Shape caption 통합 — 31/41 (75.6%)
ohah/hwpjs#216생성 · 병합mergedmainfix: ListHeader 중복 paragraph 제거 — 29/40 (72.5%)
ohah/hwpjs#215생성 · 병합mergedmainfix: ListHeader 중복 + text reorder 제거 (27/40, 67.5%)
ohah/hwpjs#214생성 · 병합mergedmainfix: text reorder 제거 + 26/40 일치 (65%)
ohah/hwpjs#213생성 · 병합mergedmainfix: HWP 캡션 instance_id 더미값 처리 (24/40 일치)
ohah/hwpjs#212생성 · 병합mergedmainfix: outline level clamp + 23/40 일치
ohah/hwpjs#211생성 · 병합mergedmainfix: Run 텍스트 합침 — tabdef 100% (22/40 일치)
ohah/hwpjs#210생성 · 병합mergedmainfix: table caption 통합 렌더링 (22/41 일치)
ohah/hwpjs#209생성 · 병합mergedmainfeat: table caption 렌더링 + line-spacing + epub:switch heading (21/40)
ohah/hwpjs#208생성 · 병합mergedmainfix: epub:switch heading + line-spacing 렌더링 (21/40 일치)
ohah/hwpjs#207생성 · 병합mergedmainfix: hyperlink </a> 닫힘 + border type=NONE 필터 (20/40 일치)
ohah/hwpjs#206생성 · 병합mergedmainfix: CSS prefix 통일 + HWP↔HWPX 19/41 일치
ohah/hwpjs#205생성 · 병합mergedmainfix: HWPX 파서 공백/border 정규화 + 취소선 중복 제거 (18/44 일치)
ohah/hwpjs#204생성 · 병합mergedmainfix: 레이아웃 엔진 100% 일치 — 22/46 fixtures (47%)
ohah/react-native-mcp#124생성 · 병합mergedmainfix: CI E2E 간헐적 실패 안정화 — postMessage retry + 재시도 시 앱 재시작
ohah/zntc#143생성 · 병합mergedmainfeat(parser): for-in/for-of initializer validation
ohah/zntc#142생성 · 병합mergedmainfeat(lexer,parser): escaped keyword in destructuring patterns
ohah/zntc#141생성 · 병합mergedmainfeat(parser): escaped yield/await in generator/async context
ohah/zntc#140생성 · 병합mergedmainfeat(lexer,parser): escaped strict reserved word validation
ohah/zntc#139생성 · 병합mergedmainfeat(parser): yield expression level + duplicate params fix
ohah/zntc#138생성 · 병합mergedmainrefactor(semantic): DeclFlags bitflags for redeclaration rules
ohah/zntc#137생성 · 병합mergedmainfeat(semantic): block-scope redeclaration + labelled break
ohah/zntc#136생성 · 병합mergedmainfeat(parser): add rest element initializer validation
ohah/zntc#135생성 · 병합mergedmainfeat(parser): import-defer/source Stage 3 support
ohah/zntc#134생성 · 병합mergedmainfeat(lexer): bare # syntax error + constructor special method
ohah/zntc#133생성 · 병합mergedmainchore: revert duplicate private name check
ohah/zntc#132생성 · 병합mergedmainfix(parser): static field constructor + delete private
ohah/zntc#131생성 · 병합mergedmainfeat(parser): delete private field + super extends + class field args
ohah/zntc#130생성 · 병합mergedmainfeat(parser): super() extends-only + static prototype + #constructor
ohah/zntc#129생성 · 병합mergedmainfeat(parser): static prototype + #constructor + super() validation
ohah/zntc#128생성 · 병합mergedmainfeat(parser): super() constructor only + class field arguments
ohah/zntc#127생성 · 병합mergedmainfeat(parser): class field arguments + constructor/prototype validation
ohah/zntc#126생성 · 병합mergedmainfeat(parser): class field constructor/prototype name validation
ohah/zntc#125생성 · 병합mergedmainfeat(parser): trailing comma + new import() + for-in single binding
ohah/zntc#124생성 · 병합mergedmainfeat(parser): for-in/for-of single binding validation
ohah/zntc#123생성 · 병합mergedmainfeat(lexer): unicode whitespace + new import() forbidden
ohah/zntc#122생성 · 병합mergedmainfeat(parser): new import() forbidden
ohah/zntc#121생성 · 병합mergedmainfeat: identifier escape validation + throw newline + unicode ranges
ohah/zntc#120생성 · 병합mergedmainfeat(lexer): expand unicode ID_Start/ID_Continue ranges
ohah/zntc#119생성 · 병합mergedmainfix: simplify review - unicode range + nested class test
ohah/zntc#118생성 · 병합mergedmainfeat: unicode Other_ID_Start + private name tests (+453건, 90.7%)
ohah/zntc#117생성 · 병합mergedmainfeat(semantic): class private name validation (oxc style)
ohah/zntc#116생성 · 병합mergedmainfeat(parser): unary ** error + shorthand strict validation
ohah/zntc#115생성 · 병합mergedmainfeat(parser): shorthand strict/yield/await + assignment target improvements
ohah/zntc#114생성 · 병합mergedmainfeat(parser): assignment target + parenthesized destructuring + optional chaining
ohah/zntc#113생성 · 병합mergedmainfeat(parser): class statement position + let binding name validation
ohah/zntc#112생성 · 병합mergedmainfeat(parser): shorthand reserved word + 12 validation unit tests
ohah/zntc#111생성 · 병합mergedmainfeat(parser): import/export top-level + block scope is_top_level
ohah/zntc#110생성 · 병합mergedmainfeat(parser): loop body function forbidden + update/delete validation
ohah/zntc#109생성 · 병합mergedmainfeat(parser): ++/-- target validation + strict delete identifier
ohah/zntc#108생성 · 병합mergedmainfix(parser): yield* newline + directive prologue + literal keyword labels
ohah/zntc#107생성 · 병합mergedmainfix(parser): literal keyword labels + await/yield conditional reserved + directive prologue
ohah/zntc#106생성 · 병합mergedmainfix(lexer): let/static strict mode reserved + literal keyword binding
ohah/zntc#105생성 · 병합mergedmainfeat(parser): literal keyword binding + generator statement position
ohah/zntc#104생성 · 병합mergedmainfeat(parser): const init + import.meta + eval/arguments strict validation
ohah/zntc#103생성 · 병합mergedmainfeat(parser): lexical position check + import/export module + super in methods
ohah/zntc#102생성 · 병합mergedmainfeat(semantic+parser): strict/module scope + new.target/super validation
ohah/zntc#101생성 · 병합mergedmainfeat(parser): yield/await contextual keyword validation
ohah/zntc#100생성 · 병합mergedmainfeat(parser): implement allow_in context for for-in/for-of
ohah/zntc#99생성 · 병합mergedmainrefactor(parser): context bitflags packed struct(u32)
ohah/zntc#98생성 · 병합mergedmainfeat(parser): yield/await ref + label + assignment target
ohah/zntc#97생성 · 병합mergedmainfeat(parser): assignment target validation — 84.5% → 85.9%
ohah/zntc#96생성 · 병합mergedmainfix(parser): object method function context — 80.8% → 84.5%
ohah/zntc#95생성 · 병합mergedmainfix: object_property + computed_property_key + copyNodeDirect audit
ohah/zntc#94생성 · 병합mergedmainfix(parser): async arrow parens + empty params arrow
ohah/zntc#93생성 · 병합mergedmainfix: import side-effect detection + all specifier types output
ohah/zntc#92생성 · 병합mergedmainfix(transformer/codegen): import specifier + arrow parentheses
ohah/zntc#91생성 · 병합mergedmainfix(transformer/codegen): 5 pipeline crashes — method, arrow, switch, import, async
ohah/zntc#90생성 · 병합mergedmainfix(transformer): class field property_definition crash
ohah/zntc#89생성 · 병합mergedmainfix(codegen): optional chaining output + call expression crash
ohah/zntc#88생성 · 병합mergedmainfeat(parser): pre-Phase6 — coalesce mix, rest comma, optional chain template
ohah/zntc#87생성 · 병합mergedmainfeat(parser): non-simple params strict + duplicate param detection
ohah/zntc#86생성 · 병합mergedmainfeat(parser): yield/await identifier restriction in generator/async
ohah/zntc#85생성 · 병합mergedmainfeat(semantic): strict eval/arguments + duplicate parameter
ohah/zntc#84생성 · 병합mergedmainfeat(parser): reserved word + escaped keyword validation
ohah/zntc#83생성 · 병합mergedmainfix(semantic): parameter redeclaration + import bindings
ohah/zntc#82생성 · 병합mergedmainfeat(semantic): scope/symbol analysis + redeclaration validation
ohah/zntc#81생성 · 병합mergedmainfeat(parser): context tracking + strict mode + break/continue/return validation
ohah/zntc#80생성 · 병합mergedmainfix(parser): escaped_keyword in identifier positions
ohah/zntc#79생성 · 병합mergedmainfix(parser): handle kw_target in new.target
ohah/zntc#78생성 · 병합mergedmainstyle: zig fmt
ohah/zntc#77생성 · 병합mergedmainfeat(parser): import attributes + hashbang
ohah/zntc#76생성 · 병합mergedmainfix(parser): skip hashbang comment at file start
ohah/zntc#75생성 · 병합mergedmainfix(parser): binding pattern default values in all positions
ohah/zntc#74생성 · 병합mergedmainfix(lexer): contextual keywords slash → division
ohah/zntc#73생성 · 병합mergedmainrefactor(parser): saveState/restoreState + async arrow
ohah/zntc#72생성 · 병합mergedmainfix(parser): import expression statement + import.defer/source
ohah/zntc#71생성 · 병합mergedmainrefactor(parser): extract tryWrapDefaultValue helper
ohah/zntc#70생성 · 병합mergedmainfix(parser): destructuring default values + dynamic import multi-args
ohah/zntc#69생성 · 병합mergedmainfix(parser): restore prev_token_kind in arrow lookahead
ohah/zntc#68생성 · 병합mergedmainrefactor(lexer): rename token regexp → regexp_literal
ohah/zntc#67생성 · 병합mergedmainfeat(parser,test262): Test262 parser pass rate 13.7% → 65.6%
ohah/zntc#66생성 · 병합mergedmainfeat(lexer,codegen): legal comments preservation (D022)
ohah/zntc#65생성 · 병합mergedmainfeat(cli): watch mode with polling (D048)
ohah/zntc#64생성 · 병합mergedmainfeat(cli): tsconfig.json reader and --project option (D047)
ohah/zntc#63생성 · 병합mergedmainfeat(cli): directory-level transformation (D049)
ohah/zntc#62생성 · 병합mergedmainfeat(cli): error code frame output (D012)
ohah/zntc#61생성 · 병합mergedmainfeat(cli): stdin pipe support (D050)
ohah/zntc#60생성 · 병합mergedmainchore: document Phase 5 CLI decisions (D047-D050)
ohah/zntc#59생성 · 병합mergedmainrefactor(codegen): /simplify backlog review fixes
ohah/zntc#58생성 · 병합mergedmainfeat(parser,transformer): const enum support (D011)
ohah/zntc#57생성 · 병합mergedmainfix(codegen): accurate source map line/column
ohah/zntc#56생성 · 병합mergedmainfix(codegen): fix switch, method/property flags, for-init double semicolon
ohah/zntc#55생성 · 병합mergedmainfeat(lexer,codegen): comment preservation
ohah/zntc#54생성 · 병합mergedmainfeat(codegen): --ascii-only option (D031)
ohah/zntc#53생성 · 병합mergedmainfeat(codegen): source map V3 generation (D046)
ohah/zntc#52생성 · 병합mergedmainfeat(cli): add full transpile pipeline
ohah/zntc#51생성 · 병합mergedmainfeat(codegen): add formatting support (indent, newline, minify)
ohah/zntc#50생성 · 병합mergedmainchore: document Phase 4 codegen decisions (D044-D046)
ohah/zntc#49생성 · 병합mergedmainfeat(codegen): import.meta CJS transformation (D021)
ohah/zntc#48생성 · 병합mergedmainfeat(transformer): add --drop console/debugger and define substitution