2026-06-22
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru는 하루 131개 커밋으로 세팅 화면과 설정 항목을 크게 채웠습니다. 전날 열린 세팅 폼 검색 #836과 리셋 위임 #835를 병합한 뒤 env 변수 삭제와 단축키 해제, 섹션을 넘나드는 검색과 단축키 충돌 경고, SV 그리드와 hue 띠로 임의 색을 고르는 HSV picker(#841)를 넣었고, picker는 Shift 미세 조정, 셀 사이 포인터 선택, hex 입력, 화면 색 추출까지 이어졌습니다. Reset to Defaults는 두 리셋을 하나로 합치고 확인 모달을 붙인 뒤 config 파일 삭제 대신 기본 상태를 atomic write로 덮어쓰도록 바꿨습니다. 테마 프리셋은 맨 위에 두고 활성 시 색을 잠그며 16색 팔레트까지 영속하게 했고, 섹션 키보드 이동, 모달 크기 고정, 선택 행 위젯 가림 수정이 이어졌습니다. 글로벌 핫키 설정 섹션과 변경 즉시 OS 재등록(#914, #917), 기존 chord를 자동으로 해제하는 키바인드 재바인딩도 들어왔습니다.
설정 항목으로는 창 투명도 window.opacity(#843), 커서 깜빡임 주기와 포커스 잃을 때의 커서 모양, 휠 스크롤 배수, URL 클릭 수식키, 타이핑 중 마우스 숨김, 폴백 폰트 font.fallback(#856), 비활성 pane 디밍, input.option-as-meta(#866), 우클릭 동작, OSC 52 읽기 정책, 단어 구분자, 시각 벨과 Dock 배지(#882), bold·italic 폰트 패밀리와 italic 렌더(#884), 시스템 라이트·다크 자동 전환(#887), 배경 이미지와 파일 선택창(#889), 배경 블러(#892)가 추가됐습니다. pane을 사이드바로 끌어 워크스페이스를 나누거나 합치는 grip 핸들(#871)과 move_pane_to_workspace 키 동작도 생겼습니다. 알림은 클릭하면 보낸 터미널로 이동하고(#885), 사이드바 종 아이콘의 인앱 알림 센터(#895)에 읽음·지우기, 배너와의 읽음 동기화, 스크롤, 말풍선 팝오버(#937)를 더했으며, 이를 위해 모달 오버레이의 픽셀 클리핑 인프라(#923)를 넣었습니다.
안정성 쪽에서는 스크롤백을 화면마다 별도 Scrollback 구조체로 나눠 alt screen에 스크롤바가 남던 문제를 해결하고(#850), scrollback.lines를 줄이면 즉시 잘라 내며 좌표를 보정했고, glyph baseline을 정수 픽셀에 맞춰 글자가 흔들리지 않게 했습니다. macOS 번들에 CLI를 넣어 Install CLI 실패를 고쳤고, 버그 점검에서 나온 기능 결함과 문서 불일치를 일괄 수정했으며, 테스트가 실제 config를 덮어쓰지 못하게 막았습니다. 마지막으로 core.zig를 나누는 계획을 문서로 정하고 OSC 응답, 스크롤백 ring, DCS·OSC 라우터, kitty graphics 파싱, 탭스톱·dirty 추적·charset을 osc.zig·parser.zig·screen.zig로 옮기는 분할 10단계(#930부터 #942까지)를 진행했습니다.
zntc는 test262 lexer 중복을 없애고 벤치마크를 ubuntu에서만 돌리며 문서 PR은 건너뛰게 해 CI 잡 수를 줄였습니다(#4461). 블로그 저장소에는 오늘의 커밋 요약 커밋들과 맞춤법 수정이 올라갔습니다.
공개 커밋 138개, 해당일 생성 또는 병합된 PR 109개를 정리했습니다. PR 생성 107개·병합 109개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- refactor(terminal): G3 charset·이모지 폭 헬퍼를 screen.zig로 (core.zig 분할 10/N)
- refactor(terminal): dirty 영역 추적을 screen.zig로 (core.zig 분할 9/N)
- refactor(terminal): G4 동적 탭스톱을 screen.zig로 (core.zig 분할 8/N — Phase B 시작)
- refactor(terminal): APC kitty graphics 파싱·라우팅을 parser.zig로 (core.zig 분할 7/N — Phase A 완료)
- refactor(terminal): OSC 라우터 dispatchOsc를 parser.zig로 (core.zig 분할 6/N)
- feat(notification): 알림 팝업 말풍선 팝오버 — 벨 정렬·anchor·최소높이·GPU 삼각형 caret
- refactor(terminal): DCS(DECRQSS·XTGETTCAP) host-reply를 parser.zig로 (core.zig 분할 5/N — parser 시작)
- docs: TerminalCore(core.zig) 분해 계획 — parser/screen 분리 단일 출처
- test,fix(platform): config 쓰기 경로에 테스트 안전 chokepoint — 실 config 덮어쓰기 원천 차단 (리뷰 #14)
- fix(platform): 메뉴바 catalog-dirty 신호 — reset·인앱·멀티창 keyEquivalent 갱신 (#929 후속, ABI v85)
- refactor(terminal): 스크롤백 ring(Scrollback)을 screen.zig로 분리 (core.zig 분할 4/N — storage 시작)
- refactor(terminal): OSC hyperlink·cwd·maru·semantic-prompt(8/7/5379/133)를 osc.zig로 (core.zig 분할 3/N)
- refactor(terminal): OSC clipboard·notify(52/9/777) host-reply를 osc.zig로 (core.zig 분할 2/N)
- refactor(terminal): OSC 색·팔레트 host-reply를 osc.zig로 분리 (core.zig 분할 1/N)
- fix(app,platform): reload/reset 메뉴바 재빌드(#1)·reset이 keybind 비움(#2-b)·테스트 실-config 덮어쓰기 차단
- docs,refactor: stale 주석 정정 — page-keys 기본값(passthrough→scroll)·OSC 52 읽기 (규칙 후속 A)
- docs: 문서-코드 정합성 일괄 수정 — 버그헌트서 확정된 불일치(shipped 코드에 맞춤)
- fix(app,terminal): /code-review max 후속 — 형제 인덱스 버그·grapheme run·OOM 이중free·rebuild 낭비·문서 동기
- fix(app,terminal): 버그헌트 기능 결함 5건 수정 (reap active_term·init 누수·reload 카탈로그·TAB dirty·응답버퍼 상한)
- feat(render): atlas 보이는-ink 세로 중앙 정렬 — 헤더 알림 벨 폰트-독립 정렬
- fix(settings): reloadConfig arena UAF + serializeConfig errdefer 누수 (리뷰)
- docs(notifications,layering): 모달 클리핑 인프라 + 알림 픽셀 스크롤 백로그 기록
- fix(settings): 재바인딩 시 stale unbind 줄 정리 — config 위생 (키바인드 후속)
- feat(render): 모달 오버레이 px 클리핑 인프라 — draw.Op.clip → MetalFrame.modal_clip → scissor (ABI v84)
- fix(renderer): 헤더 알림 벨 이모지 세로 보정 과대 수정 (0.55→0.40ch)
- feat(settings): 키바인드 재바인딩 완전 교체 — 빌트인 chord 자동 unbind (키바인드 완전 교체)
- feat(settings): HSV picker 스포이드 — i 로 NSColorSampler 화면 색 추출 (picker 후속·v83)
- fix(sidebar): 헤더 벨 아이콘을 우측 그룹과 균일 간격으로 정렬
- refactor(chrome): 오버레이 스크롤 후속 — 윈도잉 헬퍼 통합·휠 효율·모달 휠 게이트
- feat(global-hotkey): 변경 즉시 OS 재등록 — 라이브 반영 (PR2)
- feat(settings): HSV picker hex 인라인 편집 — # 로 정확한 hex 타이핑 (picker 후속)
- feat(settings): 글로벌 핫키 세팅 섹션 + 캡처 + write-back (PR1)
- fix(notification): 스크롤바 thumb 액션행 침범 clamp + 리뷰 정리
- feat(notification): 알림 센터 패널 스크롤 — 화면 넘는 카드 카드단위 + 스크롤바
- feat(settings): HSV picker SV 그리드 sub-cell 포인터 — 클릭/드래그로 연속 s/v (picker 후속)
- feat(settings): HSV picker 연속 해상도 — Shift 미세 조정으로 그리드 셀 사이 값 (picker 고급화)
- feat(theme): 테마 프리셋 전체 영속 — theme.preset 키로 16색 팔레트까지 (팔레트 영속)
- fix(chrome): pane grip 세로 가운데(tui 패딩) + 벨 hover 하이라이트 정렬
- refactor(notification): 읽음 동기화 단일 정책(카드=배너) + mark 헬퍼 정리
- feat(settings): 배경 이미지 파일 선택창 — 경로 타이핑 대신 NSOpenPanel (v81)
- fix(chrome): 모달 외곽선(별도 테두리 op) 제거 — tui는 박스 배경만
- feat(notification): 배너↔센터 읽음 동기화 + 배지 9+
- feat(notification): 알림 설정 — notifications.osc·history-limit config
- style(chrome): tui 모달 외곽선을 강조 테두리→은은한 divider 선으로
- fix(bell): 배경 pane/탭의 BEL도 drain — Dock 배지·시각·소리 (리뷰 D)
- fix(macos): New Window·quick 세션 초기 시스템 외관 적용 (리뷰 B)
- fix(settings): follow-system 켜지면 theme.preset 행 숨김 (리뷰 C)
- feat(notification): 알림 읽음/지우기 — 카드 ✕·하단 액션 행·Backspace
- refactor(width): UTF-8 경계 절단/백스페이스 단일 출처화 — 6중복 통합 (리뷰 A)
- fix(settings): follow-system 중 preset 변경 라이브 적용 + 잠금 복원 (F2-9 리뷰 라운드2)
- fix(notification): 알림 종 아이콘 정렬 + 패널 위치·크기 개선
- fix(settings): /code-review max 반영 — follow-system 토글·word-separators 잘림 (F2-9·F2-8)
- feat(notification): 인앱 알림 센터 — 사이드바 종 아이콘 + 알림 목록 패널 (2단계)
- fix(input): 세팅 모달/녹음 중 ⌘조합 단축키 누수·chord 녹음 실패 수정
- fix(chrome): 세팅 Tab 힌트를 제목 아래(상단)로 이동
- feat(platform): 세팅 창 뒤 배경 블러 — window.blur (CGS, F3-1)
- fix(chrome): 세팅 Tab 표시 세련화 — 세로 바 제거, 힌트 중앙·활성 영역 강조
- fix(notification): code-review 반영 — delegate 타이밍·quick 패널·전면 배너 게이트
- feat(notification): 알림 클릭 시 발신 터미널로 자동 활성화 (창+탭+pane+term)
- feat(chrome): 세팅 Tab 영역 전환 표시 — 활성 영역 세로 바 + 비활성 dim + 하단 힌트
- feat(chrome): 세팅 배경 이미지 — window.background-image PNG (F2-1)
- fix(chrome): 키보드 섹션 네비도 필드 수 재주입 — 입력 섹션 ↓ 멈춤 수정
- feat(theme): theme.follow-system — 시스템 라이트/다크 테마 자동 전환 (F2-9)
- fix(chrome): 세팅 모달 높이를 FullHeight 고정 — 너비는 유지
- fix(chrome): 모달 열렸을 때 터미널 포커스 완전 상실 — 커서 hollow + blink 정지
- feat(font): font.family-bold/family-italic — bold·italic 폰트 패밀리 + italic 렌더 (F2-3)
- fix(config): 세팅 폰트 크기 슬라이더 범위를 [6,72]로 — grid 붕괴 수정
- feat(bell): bell.visual + bell.dock-badge — 시각 벨·Dock 배지 (F2-4)
- fix(sidebar): 브랜치 글리프 fallback 제거(├) + 세팅·confirm 모달 z-order 겹침 수정
- feat(input): input.word-separators — 더블클릭 단어 구분자 (F2-8)
- test(coretext): buildPaneGripDrawList 글리프 중앙(cols/2) 배치 헤드리스 테스트
- docs(tabs-splits): grip 3칸 패딩·openHand 호버 커서 반영(#875 누락 정정)
- fix(sidebar): 에이전트 아이콘 1.1× 확대를 gutter col 0로 한정
- feat(chrome): move_pane_to_workspace:N — pane을 N번 워크스페이스에 합치기(merge 키보드)
- feat(terminal): osc52.read — OSC 52 클립보드 읽기 정책 allow|deny (F2-6)
- feat(chrome): pane grip 양쪽 패딩 + 호버 grab(openHand) 커서
- fix(sidebar): 에이전트 아이콘 fallback '정' 깨짐 근본 수정
- feat(input): input.right-click — 터미널 우클릭 동작 paste|menu|reporting (F2-5)
- feat(chrome): Pane을 사이드바로 드래그해 워크스페이스 분리·합치기 + grip 핸들
- fix(chrome): 선택 하이라이트 — quad 위젯을 slider/toggle로 한정(color/palette 제외)
- fix(macos): 사이드바 최소 너비 근본 수정 — 단일 헬퍼·전 경로 floor·max cap
- fix(macos-smoke): verifyCloseLifecycle에 io 인자 전달 — pty-metal-smoke 컴파일 복구
- fix: /code-review max 후속 — 세션 3개 PR 결함 수정 (C1 컴파일·C2 포커스 redraw·C3 장식선 디밍)
- fix(macos): 사이드바 최소 너비를 헤더 아이콘 기반 동적 클램프로
- fix(chrome): 선택 행 slider/toggle 위젯이 하이라이트에 가려지는 문제 수정
- feat(input): input.option-as-meta — Option을 Meta(Alt)로 토글 (F2-2)
- docs(config-gui): 세팅 키보드 네비(Tab/↑↓) 반영
- feat(chrome): 세팅 좌측 섹션 네비 키보드 이동 (Tab/↑↓)
- feat(window): window.unfocused-dim — 비활성 split pane 디밍 (F2-7)
- fix(chrome): rich 세팅 모달 선택 행 위젯이 하이라이트에 가려지는 문제 수정
- feat(cursor): cursor.unfocused — 창 포커스 잃을 때 block/hollow/hidden (F1-4b-2)
- fix(chrome): dropdown chevron 폭 예약 + 라벨 reserve 상향 (#860 후속)
- fix(terminal): 하향 트림 좌표 보정을 활성 화면으로 한정 + 정밀 dirty·dedup·OOM 일관성
- fix(chrome): 세팅 모달 고정 너비 + rich 테마 깨짐 수정
- feat(chrome): displayCols의 짝 truncateToCols 추가
- docs(settings): scroll.on-output을 이미 구현(viewport pin)으로 정정 (F1-10)
- feat(terminal): scrollback.lines 하향 시 즉시 트림 + 좌표 보정
- docs(macos): font.fallback cascade 명확화 주석 — bold 상속·per-shape 비용 (code-review max)
- feat(config): 폴백 폰트 font.fallback — CoreText cascade list (F1-2)
- docs(config-gui): 테마 프리셋 최상단·사용자 지정·색 잠금 동작 반영
- feat(macos): 테마 프리셋 최상단·사용자 지정 순환·활성 시 색 잠금
- feat(chrome): 세팅 FieldRow.disabled — 비활성 행 회색·잠금 표시
- docs(abi): reset_defaults 주석을 덮어쓰기로 동기화
- fix(macos): reset 결함 수정 — dirty 5개 폐기·createFileAtomic 계약·실패 notice
- feat(macos): Reset config 덮어쓰기를 atomic write + 디렉터리 보장으로 (#844 후속)
- feat(macos): Reset를 config 파일 삭제 대신 기본 상태로 덮어쓰기
- fix(macos): mouse-hide-while-typing를 IME 확정 경로로 — 실제 타이핑에 동작 (code-review max)
- review: 리뷰 findings 전체 반영 — rewrap OOB 차단·setCap grow·dedup·방어 가드
- review: 문서/주석 정합 수정 + per-screen 스왑 불변식 테스트
- refactor(terminal): 스크롤백을 화면당 Scrollback 구조체로 분리 — alt 스크롤바 잔존 근본 해결
- feat(config): 타이핑 중 마우스 숨김 input.mouse-hide-while-typing (F1-6)
- docs(config): scroll.multiplier가 트래킹 앱에도 적용됨을 명시 — Ghostty 베이스
- fix(chrome): HSV picker hue 셀↔값 가역화 — '['/']' stuck·마커 어긋남 (code-review max #1)
- feat(config): URL 클릭 수식키 input.url-click-modifier (F1-5)
- feat(config): 휠 스크롤 배수 scroll.multiplier (F1-10-1)
- fix(build): macOS 번들에 maru CLI 포함 — Install CLI 실패 수정
- feat(config): 커서 깜빡임 주기 cursor.blink-interval-ms (F1-4b-1)
- feat(config): 창 배경 투명도 window.opacity — clear color alpha (F1-1)
- fix(macos): 글리프 baseline을 정수 픽셀로 스냅 — 행간/크기별 v·w 흔들림 제거
- feat(chrome): 세팅 HSV 색 picker — SV 그리드+hue 스트립, 임의 색 선택 (CS-4-6)
- fix(chrome): /code-review max #840 후속 — 다중-chord 액션 완전 unbind
- feat(chrome): 세팅 CS-4 후속 4종 — 교차 섹션 검색·palette 마커·빌트인 unbind·충돌 경고
- feat(chrome): 세팅 keybind unbind — Backspace로 사용자 단축키 해제
- feat(chrome): 세팅 env 변수 삭제 — Backspace로 제거 + line-removal write-back
- feat(macos): Reset에 확인 모달 추가 + 통일 후속 문서 동기화
- refactor(macos): 두 리셋을 단일 resetAllSettings로 통일
- docs(macos): Reset to Defaults 통일 동작으로 주석·문서 동기화
- fix(macos): Reset to Defaults를 통합 리셋(파일 삭제)에 위임
- fix(renderer): 키캡 컬러 렌더 완성 + 리뷰 후속 — isColorGlyph·복사·Reset 정합
- fix(test): boundary 스캔 읽기 상한 1MB→2MB — app_session.zig가 1MB 초과
- feat(chrome): 세팅 폼 검색 — '/'로 현재 섹션 행 필터 (CS-4-4 후속)
ohah/ohah.github.io
- Fix typos and polish docs/monthly-opensource/hwpjs/development-1.mdx
- 2026-06-23: Update workspace state after cron run
- 2026-06-23: Update today-commit.md with AI summary
- docs: add today's commit summary (2026-06-21 and 2026-06-22)
- docs: add today's commit summary (2026-06-22)
- docs: add today's commit summary (2026-06-22)
ohah/zntc
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.