2026-06-09
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru는 dev shell이 실제 터미널처럼 보이도록 렌더링을 다듬는 데서 시작했습니다. 셀 전경색과 SGR 배경색 칠하기(#165, #172), 공통 baseline 정렬(#166), 실제 폰트 메트릭과 Retina HiDPI, 번들 폰트(#167)가 들어왔고, idle tick에서 CoreText shaping을 건너뛰며(#171) grid 계산을 Swift에서 Zig로 옮겼습니다(#170, #173). 터미널 코어에는 DECAWM autowrap(#175), 콜론 형식 확장색 SGR(#169), 반전 블록 커서(#182)가 추가됐습니다. resize reflow는 한 번 넣었다가(#184) Ghostty libghostty-vt 비교 oracle(#187)을 만든 뒤 되돌리고(#188), 스크롤백 ring buffer와 뷰포트, 렌더, 휠·Shift+PageUp/Down 입력(#190부터 #193까지)을 먼저 깐 다음 soft-wrap 추적과 활성 화면 reflow(#194, #195)로 다시 들어왔습니다. 라이브에서 좁은 폭의 프롬프트가 겹치던 문제는 DSR·CPR 응답 경로(#196), 드래그 끝에 한 번만 resize 적용(#198), TERM=xterm-256color 지정(#199), 커서가 있는 줄은 reflow하지 않는 방식(#200)으로 정리했습니다. PR에서도 성능 예산을 돌리도록 CI를 바꿨습니다(#189).
후반에는 TUI 지원을 넣었습니다. scroll region(DECSTBM, #206), alternate screen(#207), application cursor keys(#208), alt screen에서 휠을 화살표로 바꾸는 alternate scroll(#209), IL·DL과 커서 표시·reverse video(#212), DECSC·DECRC와 DA1(#214)이 들어왔고, glyph가 많은 출력에서 atlas 좌표가 바닥나 글자가 깨지던 문제를 atlas 재활용으로 고쳤습니다(#213, #217). 누적 리뷰 반영(#215부터 #219까지) 뒤에는 resize 때 스크롤백 행 재배치(#220)와 스크롤 위치 고정(#221), DECSCUSR 커서 모양(#222), 마우스 선택과 Cmd+C 복사(#223), 더블·트리플 클릭 선택(#224), bracketed paste를 지원하는 Cmd+V(#225)까지 병합됐습니다. Cmd+클릭으로 URL을 여는 #226은 이날 PR이 열렸습니다.
suji는 모바일 e2e 하니스를 여러 변형에서 견고하게 만들고 rust·go·multi Android 변형에 gradlew 래퍼를 커밋했습니다(#136, #137). 새 플러그인으로 창 bounds·최대화 상태를 저장·복원하는 window-state(#138), 창을 화면·트레이·커서 위치에 놓는 positioner(#139), multipart 업로드와 디스크 다운로드를 하는 upload(#140)를 추가했고, 큰 IPC 페이로드가 잘리던 문제를 청크 분할과 동적 버퍼로 고쳤습니다(#141). 블로그 저장소에는 Craby 배경 문서의 어조 수정, 오늘의 커밋 요약, 크론이 만든 교정 커밋이 올라갔습니다.
공개 커밋 71개, 해당일 생성 또는 병합된 PR 68개를 정리했습니다. PR 생성 68개·병합 67개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- feat(terminal,platform): Cmd+V paste with newline normalization and bracketed paste (ABI v15)
- feat(terminal,platform): double-click word and triple-click line selection (ABI v14)
- feat(terminal,platform): mouse selection and Cmd+C clipboard copy (ABI v13)
- feat(terminal,platform): cursor shapes via DECSCUSR (block/underline/bar, ABI v12)
- fix(terminal): keep the scrolled-back view anchored across resize (Ghostty pin semantics)
- feat(terminal): re-wrap scrollback rows to the new width on resize (deferred)
- refactor(terminal,tests): n-aware scroll range, merged 47/1047 arm, shared oracle case manifest
- fix(terminal,platform): ED 3 clears scrollback, page-scroll works in alt screen, batched alternate scroll
- fix(renderer): rebuild the glyph frame when the atlas invalidates mid-build
- fix(terminal): wrap links at scroll-range boundaries, EL/ED pending-wrap, parser kept across resize
- fix(terminal): per-screen DECSC slots, unconditional 1049 save/restore, atomic alt enter
- fix(terminal): DECSC/DECRC cursor save-restore (ESC 7/8) and DA1 identification
- fix(renderer): recycle the glyph atlas when row-packer coordinates run out
- feat(terminal): IL/DL line edits, cursor visibility (DECTCEM), and SGR reverse video
- test: close coverage gaps from recent PRs (escapeForLog, scrollPage, EnvStorage, viewport frame)
- docs: fixed-cell pixel layout is already implemented (#162) — fix stale "NDC inset" notes
- feat(platform): alternate scroll converts wheel to arrows in the alt screen (DECSET 1007)
- feat(input): application cursor keys (DECCKM) switch arrows between CSI and SS3
- feat(terminal): alternate screen (DECSET 1049/47/1047/1048)
- feat(terminal): scroll region (DECSTBM) with margin-confined LF/IND/RI
- docs: sync plan/matrix with scrollback, DSR/CPR, and real resize metrics
- refactor(platform): move scroll delta/page conversion from Swift into Zig (ABI v11)
- fix(platform): guard scroll-delta conversion, page-size fallback, wide-glyph cursor overlay
- fix(app): clamp debug-log ellipsis, build frames from renderSnapshot, drop dead EnvStorage branch
- fix(terminal): correct reflow scratch bound, EL mode-1 wrap flag, scrollback wide-glyph clip
- fix(terminal): do not reflow the cursor's line on resize (xterm.js approach)
- fix(pty): set TERM=xterm-256color for the spawned shell instead of inheriting
- fix(platform): apply grid resize once at end of live drag, not every step
- debug(app): log PTY-output control sequences under MARU_DEBUG
- feat(terminal): answer DSR/CPR cursor-position queries over a write-back path
- feat(terminal): reflow the active screen on resize, overflow into scrollback
- feat(terminal): track soft-wrap per active row and per scrollback row
- feat(platform): scroll the scrollback viewport via wheel and Shift+PageUp/Down
- feat(terminal): render the scrollback viewport via renderSnapshot
- feat(terminal): add scrollback viewport offset and scroll API
- feat(terminal): store scrolled-off rows in a scrollback ring buffer
- ci(performance): run the perf budget on pull requests so regressions gate merges
- revert(terminal): restore copy-region resize, defer reflow until scrollback
- test(oracle): compare resize reflow against Ghostty libghostty-vt
- fix(terminal): preserve blanks up to the cursor during reflow
- debug(platform): show soft-wrap flags in the MARU_DEBUG screen dump
- feat(terminal): reflow soft-wrapped lines on resize
- test(terminal): harden coverage for wrap edges, colon SGR, cursor projection, packing
- feat(platform): render the inverted block cursor and sync dev-shell docs
- chore(platform): dedup MARU_DEBUG gate, fix resize counter, refresh boundary doc
- fix(platform): enable premultiplied blending and project BCE backgrounds for blank cells
- fix(app): enforce min 2-column grid at the PTY winsize boundary, single-source the clamp
- fix(terminal): clear pending wrap on scroll-LF and parse colorspace-less colon SGR
- refactor(terminal): enforce min 2 columns and drop the wide-glyph OOB degrade
- test(terminal): document and cover the 1-column wide-glyph OOB guard
- fix(terminal): implement DECAWM autowrap (deferred/pending wrap)
- debug(platform): log TerminalCore cell grid on frame build under MARU_DEBUG
- fix(platform): compute terminal grid in Zig dev session from real cell metrics
- feat(platform): render SGR cell background color
- perf(platform): skip CoreText shaping on idle dev-session ticks
- refactor(platform): move grid math and resize dedup from Swift to Zig
- fix(terminal): handle SGR colon sub-parameter extended color correctly
- fix: address /code-review max findings (#162–#167) with regression tests
- feat(platform): real font metrics, Retina HiDPI, and bundled font for the dev shell
- fix(platform): anchor glyphs on a common baseline instead of centering
- feat(platform): tint terminal glyphs with the cell foreground color
ohah/ohah.github.io
- (CRON) Updated spelling and formatting consistency in index.mdx
- CRD completed for one MDX file.
- chore(daily): update 2026-06-09 commit summary
- Corrected tone in Craby background doc: adjusted language regarding React Native preference.
ohah/suji
- feat(ipc): 큰 IPC 페이로드 무제한화 (청크 분할 + emit 동적 버퍼)
- feat(plugin): upload — multipart 파일 업로드 / 다운로드→디스크 (Tauri upload 동등)
- feat(plugin): positioner — 창을 화면/트레이/커서 위치로 배치 (Tauri positioner 동등)
- feat(plugin): window-state — 창 bounds/maximized 저장·복원 (Electron/Tauri 동등)
- chore(android): rust/go/multi 변형에 gradlew 래퍼 커밋 — 6개 변형 통일
- test(mobile): e2e 하니스 변형 견고화 — xcodegen-before-ls + bash 호출 + 루프 가드
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.