2026-06-12

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

요약 (AI 작성)

maru는 셸 통합부터 시작했습니다. 전날 열린 OSC 133 semantic prompt 파싱 #286을 병합하고, zsh가 프롬프트·입력·출력 경계 표시를 내보내게 했으며(#287), 이 태그를 reflow와 스크롤백 재배치에서도 유지하고(#288), Cmd+↑·↓ 프롬프트 점프(#289)와 명령 성공·실패를 초록·빨강 막대로 보여 주는 gutter 표시(#290)를 더했습니다. OSC 7 현재 디렉터리 보고(#296)와 OSC 0·2 제목을 쓰는 창 제목(#297), 셸 의미 이벤트 스트림과 maru.trace.v1 기록기(#299, #300)도 들어왔습니다. input.page-keys 기본값을 scroll로 바꾸고(#293), 특수 키 앞에서 IME 조합을 확정하도록 고쳤으며(#294), 표준이 없는 터미널 동작은 사실상 기준과 결정을 문서로 남기라는 규칙도 추가했습니다.

오후부터는 8단계 탭과 분할 화면을 진행했습니다. DevSession이 활성 surface를 거치게 하고 surface를 힙에 고정한 뒤 탭 상태를 Tab 구조체와 동적 목록으로 옮겨(#301부터 #305까지) 여러 탭의 PTY drain과 Cmd+T 새 탭(#306, #307)을 동작시켰습니다. cmux식 세로 사이드바로 방향을 정한 설계 문서(#308) 뒤에 사이드바 레이아웃과 하이라이트, 테마 색, 큰 탭 슬롯, 공유 atlas 두 번째 패스로 그리는 탭 제목, 클릭 전환과 호버, Cmd+W 닫기, 호버 X, Cmd+Shift+] / [ 순환, 드래그 재정렬(#309부터 #320까지)이 차례로 들어왔습니다. 분할은 SplitTree 모델과 재귀 레이아웃(#321)에서 출발해 panel별 렌더 origin, N개 frame 병합, Cmd+D 분할(#326), panel 포커스와 Cmd+Option+화살표 이동, 트리를 접는 panel 닫기(#329)로 이어졌습니다. 이후 pane 하나가 여러 Term을 가로 탭으로 담는 구조(#330, #331)로 바꾸고 pane별 탭 바와 제목, 클릭 전환, 호버 X 닫기, pane 안팎 드래그 이동, "+" 버튼(#332부터 #341까지)을 붙였으며, 셸이 끝나면 Term과 pane을 자동으로 정리하는 기능(#342)까지 병합됐습니다. 사용자 설정 키바인딩이 실제 키 처리에 전달되지 않던 문제도 고쳤습니다(#334).

zntc는 전날 열린 #4262로 default 파라미터를 지원하는 타깃에서 rest 파라미터를 그대로 두게 했고, 중첩된 object rest 할당 대상을 es2017에서 낮추는 수정(#4263)을 병합했습니다. 블로그 저장소에는 오늘의 커밋 요약과 크론이 만든 교정 커밋이 올라갔습니다.

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

커밋

ohah/maru

ohah/ohah.github.io

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#342생성 · 병합mergedmainfeat(macos): auto-reap a Term/pane when its shell exits (stage 8 split PR5b)
ohah/maru#341생성 · 병합mergedmainrefactor(macos): unify pane tab-bar hit-test into BarMetrics; fix '+' hover X (stage 8 split PR-G)
ohah/maru#340생성 · 병합mergedmainfeat(macos): per-pane tab bar "+" button to spawn a new Term (stage 8 split PR-F)
ohah/maru#339생성 · 병합mergedmainfeat(macos): drag a Term tab to another pane (cross-pane move + collapse) (stage 8 split PR-E2)
ohah/maru#338생성 · 병합mergedmainfeat(macos): drag a Term tab to reorder within the pane (stage 8 split PR-E1)
ohah/maru#337생성 · 병합mergedmainfeat(macos): hover-X to close a Term tab in the pane bar (stage 8 split PR-D2)
ohah/maru#336생성 · 병합mergedmainfix(macos): distinguish the focused pane in split tab bars (active-pane indicator)
ohah/maru#335생성 · 병합mergedmainfeat(macos): click a tab in the pane bar to switch Term (stage 8 split PR-D1)
ohah/maru#334생성 · 병합mergedmainfix(macos): wire user config keybindings into handleKeyEvent
ohah/maru#333생성 · 병합mergedmainfeat(macos): per-pane tab-bar Term titles + active highlight; fix bar height (stage 8 split PR-C2)
ohah/maru#332생성 · 병합mergedmainfeat(macos): per-pane top tab-bar strip + bar background (stage 8 split PR-C1)
ohah/maru#331생성 · 병합mergedmainfeat(macos): per-pane Term tabs — Cmd+T/W/]/[ lifecycle (stage 8 split PR-B)
ohah/maru#330생성 · 병합mergedmainrefactor(split): Pane = multi-surface tab container, generic SplitTree (stage 8 split PR-A)
ohah/maru#329생성 · 병합mergedmainfeat(macos): pane close with tree collapse, Cmd+W pane-aware (stage 8 split PR5a)
ohah/maru#328생성 · 병합mergedmainfeat(macos): keyboard pane navigation with Cmd+Option+arrow (stage 8 split PR3b-2b)
ohah/maru#327생성 · 병합mergedmainfeat(macos): pane focus + pane-rect input routing + click-to-focus (stage 8 split PR3b-2a)
ohah/maru#326생성 · 병합mergedmainfeat(macos): visible pane split with Cmd+D (stage 8 split PR3b-1b)
ohah/maru#325생성 · 병합mergedmainfeat(macos): N-frame 렌더 머지 머신리 (stage 8 split PR3b-1a)
ohah/maru#324생성 · 병합mergedmainrefactor(macos): Tab에서 Pane 추출 (stage 8 split PR3a)
ohah/maru#323생성 · 병합mergedmainfeat(macos): per-cell panel origin 렌더 프리미티브 (stage 8 split PR2b)
ohah/maru#322생성 · 병합mergedmainfeat(macos): Tab을 단일 leaf SplitTree 루트로 (stage 8 split PR2a)
ohah/maru#321생성 · 병합mergedmainfeat(app): SplitTree 모델 + 재귀 레이아웃 (stage 8 split PR1)
ohah/maru#320생성 · 병합mergedmainfeat(macos): 사이드바 탭 드래그 재정렬 (stage 8 PR3d)
ohah/maru#319생성 · 병합mergedmainfeat(config): Cmd+Shift+]/[ 탭 전환 키 (stage 8)
ohah/maru#318생성 · 병합mergedmainfeat(macos): 사이드바 탭 호버 X 닫기 아이콘 (stage 8)
ohah/maru#317생성 · 병합mergedmainfeat(macos): 탭 close + active 재선택 + Cmd+W (stage 8 PR4)
ohah/maru#316생성 · 병합mergedmainfeat(macos): 사이드바 클릭→탭 전환 + 호버 hit-test (stage 8 PR3c)
ohah/maru#315생성 · 병합mergedmainfeat(macos): 사이드바 탭 제목 렌더 — 공유 atlas 두 번째 패스 + 업로드 머지 (stage 8 PR3b-2b)
ohah/maru#314생성 · 병합mergedmainfeat(macos): 사이드바 glyph 파이프라인 seam + 탭 제목 DrawList 합성기 (stage 8 PR3b-2a)
ohah/maru#313생성 · 병합mergedmainfeat(macos): cmux식 큰 탭 슬롯 (~2.5× cell 높이) — 픽셀 슬롯 높이
ohah/maru#312생성 · 병합mergedmainfix(macos): 포인터/IME 좌표 변환에 사이드바 offset 반영 (블록 밀림 수정)
ohah/maru#311생성 · 병합mergedmainfeat(config): 사이드바 색 테마 설정화 (기본은 background 파생)
ohah/maru#310생성 · 병합mergedmainfeat(macos): 사이드바 두 번째 셀 배열 + 활성 탭 하이라이트 밴드 (stage 8 PR3b-1)
ohah/maru#309생성 · 병합mergedmainfeat(macos): vertical sidebar layout via surface-to-rect render mechanism (stage 8 PR3a)
ohah/maru#308생성 · 병합mergedmaindocs(tabs): tabs/split/layout strategy — cmux-style vertical sidebar, model-vs-driver split
ohah/maru#307생성 · 병합mergedmainfeat(macos): Cmd+T opens a new tab through the key path (stage 8 PR2)
ohah/maru#306생성 · 병합mergedmainfeat(macos): multi-tab PTY drain + createTab/switchTab, verified with 2-tab smoke (stage 8 PR1d-2b)
ohah/maru#305생성 · 병합mergedmainrefactor(macos): DevSession tabs as ArrayList(*Tab) dynamic container (stage 8 PR1d-2a)
ohah/maru#304생성 · 병합mergedmainrefactor(macos): extract per-tab state into a Tab struct (stage 8 PR1d-1)
ohah/maru#303생성 · 병합mergedmainrefactor(macos): route DevSession seam through app_window.active() (stage 8 PR1c)
ohah/maru#302생성 · 병합mergedmainrefactor(app): AppWindow.tabs holds *Surface so surfaces never move (stage 8 PR1b)
ohah/maru#301생성 · 병합mergedmainrefactor(macos): route DevSession through activeSurface() seam for multi-tab (stage 8 PR1a)
ohah/maru#300생성 · 병합mergedmainfeat(observability): maru.trace.v1 writer for shell semantic events (B2)
ohah/maru#299생성 · 병합mergedmainfeat(terminal): structured shell semantic-event stream (OSC 133/7 observability foundation)
ohah/maru#298생성 · 병합mergedmaindocs(pr): require Mermaid diagrams to use GitHub-renderable syntax
ohah/maru#297생성 · 병합mergedmainfeat(macos): window title from OSC 0/2 title, falling back to OSC 7 cwd basename
ohah/maru#296생성 · 병합mergedmainfeat(terminal): OSC 7 cwd reporting (VTE de-facto standard, core + ABI + zsh emit)
ohah/maru#295생성 · 병합mergedmaindocs(rules): require documenting the de-facto base + decision for non-standard terminal behavior
ohah/maru#294생성 · 병합mergedmainfix(macos): commit IME composition before special/shortcut keys bypass it
ohah/maru#293생성 · 병합mergedmainfix(config): default input.page-keys to scroll (avoids vi/emacs shell misparse)
ohah/maru#292생성 · 병합mergedmainfix(shell): OSC 133 B marker survives prompt-framework PS1 rebuilds
ohah/maru#291생성 · 병합mergedmainfix(terminal): OSC 133 code-review fixes — gutter exit carry + scroll tags
ohah/maru#290생성 · 병합mergedmainfeat(renderer): OSC 133 exit-status gutter marks (green/red bar)
ohah/maru#289생성 · 병합mergedmainfeat(app): OSC 133 prompt jump navigation (Cmd+Up/Down)
ohah/maru#288생성 · 병합mergedmainfeat(terminal): carry OSC 133 tags through reflow and scrollback re-wrap
ohah/maru#287생성 · 병합mergedmainfeat(shell): zsh emits OSC 133 semantic prompt markers + MARU_DEBUG dump
ohah/maru#286병합mergedmainfeat(terminal): OSC 133 semantic prompt parsing + per-row classification
ohah/zntc#4263생성 · 병합mergedmainfix(transformer): 중첩 object rest assignment-target 을 es2017 에서 lowering — for ([b, {a,...r}] of)
ohah/zntc#4262병합mergedmainfix(transformer): rest param(ES2015)을 default_params 지원 타겟에서 native 유지 — arrow object+array-rest 조합