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
- feat(macos): auto-reap a Term/pane when its shell exits (stage 8 split PR5b)
- refactor(macos): unify pane tab-bar hit-test into BarMetrics; fix '+' hover X (stage 8 split PR-G)
- feat(macos): per-pane tab bar "+" button to spawn a new Term (stage 8 split PR-F)
- feat(macos): drag a Term tab to another pane (cross-pane move + collapse) (stage 8 split PR-E2)
- feat(macos): drag a Term tab to reorder within the pane (stage 8 split PR-E1)
- feat(macos): hover-X to close a Term tab in the pane bar (stage 8 split PR-D2)
- fix(macos): distinguish the focused pane in split tab bars (active-pane indicator)
- feat(macos): click a tab in the pane bar to switch Term (stage 8 split PR-D1)
- fix(macos): wire user config keybindings into handleKeyEvent
- feat(macos): per-pane tab-bar Term titles + active highlight; fix bar height (stage 8 split PR-C2)
- feat(macos): per-pane top tab-bar strip + bar background (stage 8 split PR-C1)
- feat(macos): per-pane Term tabs — Cmd+T/W/]/[ lifecycle (stage 8 split PR-B)
- refactor(split): Pane = multi-surface tab container, generic SplitTree (stage 8 split PR-A)
- feat(macos): pane close with tree collapse, Cmd+W pane-aware (stage 8 split PR5a)
- feat(macos): keyboard pane navigation with Cmd+Option+arrow (stage 8 split PR3b-2b)
- feat(macos): pane focus + pane-rect input routing + click-to-focus (stage 8 split PR3b-2a)
- feat(macos): visible pane split with Cmd+D (stage 8 split PR3b-1b)
- feat(macos): N-frame render merge machinery for splits (stage 8 split PR3b-1a)
- refactor(macos): extract Pane from Tab for multi-pane splits (stage 8 split PR3a)
- feat(macos): per-cell panel origin render primitive (stage 8 split PR2b)
- feat(macos): Tab holds a single-leaf SplitTree (stage 8 split PR2a)
- feat(app): SplitTree model + recursive layout (stage 8 split PR1)
- feat(macos): drag-to-reorder sidebar tabs (stage 8 PR3d)
- feat(config): Cmd+Shift+]/[ to cycle next/previous tab (stage 8)
- feat(macos): hover-to-close X icon on sidebar tabs (stage 8)
- feat(macos): tab close with active reselect and Cmd+W (stage 8 PR4)
- feat(macos): sidebar click-to-switch and hover hit-test (stage 8 PR3c)
- feat(macos): render tab titles in the sidebar via shared-atlas second pass + upload merge (stage 8 PR3b-2b)
- feat(macos): sidebar glyph pipeline seam + tab-title DrawList synthesizer (stage 8 PR3b-2a)
- feat(macos): cmux-style tall tab slots (~2.5x cell height) via pixel slot height
- fix(macos): account for sidebar offset in pointer/IME coordinate transforms
- feat(config): theme-configurable sidebar colors (derive from background by default)
- feat(macos): sidebar second cell array + active-tab highlight band (stage 8 PR3b-1)
- feat(macos): vertical sidebar layout via surface-to-rect render mechanism (stage 8 PR3a)
- docs(tabs): tabs/split/layout strategy — cmux-style vertical sidebar, model-vs-driver split
- feat(macos): Cmd+T opens a new tab through the key path (stage 8 PR2)
- feat(macos): multi-tab PTY drain + createTab/switchTab, verified with 2-tab smoke (stage 8 PR1d-2b)
- refactor(macos): DevSession tabs as ArrayList(*Tab) dynamic container (stage 8 PR1d-2a)
- refactor(macos): extract per-tab state into a Tab struct (stage 8 PR1d-1)
- refactor(macos): route DevSession seam through app_window.active() (stage 8 PR1c)
- refactor(app): AppWindow.tabs holds *Surface so surfaces never move (stage 8 PR1b)
- refactor(macos): route DevSession through activeSurface() seam for multi-tab (stage 8 PR1a)
- feat(observability): maru.trace.v1 writer for shell semantic events (B2)
- feat(terminal): structured shell semantic-event stream (OSC 133/7 observability foundation)
- docs(pr): require Mermaid diagrams to use GitHub-renderable syntax
- feat(macos): window title from OSC 0/2 title, falling back to OSC 7 cwd basename
- feat(terminal): OSC 7 cwd reporting (VTE de-facto standard, core + ABI + zsh emit)
- docs(rules): require documenting the de-facto base + decision for non-standard terminal behavior
- fix(macos): commit IME composition before special/shortcut keys bypass it
- fix(config): default input.page-keys to scroll (Mac-native, avoids shell misparse)
- fix(shell): OSC 133 B marker survives prompt-framework PS1 rebuilds
- fix(terminal): OSC 133 code-review fixes — gutter exit carry + scroll tags
- feat(renderer): OSC 133 exit-status gutter marks (green/red bar)
- feat(app): OSC 133 prompt jump navigation (Cmd+Up/Down)
- feat(terminal): carry OSC 133 tags through reflow and scrollback re-wrap
- feat(shell): zsh emits OSC 133 semantic prompt markers + MARU_DEBUG dump
- feat(terminal): OSC 133 semantic prompt parsing + per-row classification
ohah/ohah.github.io
- Fix typo in docs/index.mdx
- Fix typos, apply prettier formatting to development-3.mdx
- Reviewed CRD development-5 for spelling and style consistency
- docs(today-commit): fill in 2026-06-12 summary (AI)
ohah/zntc
- fix(transformer): 중첩 object rest assignment-target 을 es2017 에서 lowering — for ([b, {a,...r}] of) (#4261)
- fix(transformer): rest param(ES2015)을 default_params 지원 타겟에서 native 유지 — arrow object+array-rest 조합 (#4251 후속)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.