2026-07-06

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

요약 (AI 작성)

maru 사이드바 그룹에는 그룹 고정과 별개인 그룹-로컬 pin(GL1부터 GL4)이 들어왔습니다. local_pinned 필드·직렬화와 stablePartitionSubtree 토대, toggleLocalPin과 멤버 우클릭·드래그 clamp, 📌 렌더, 공존·중첩 하드닝을 차례로 쌓았고, 새 워크스페이스가 그룹 멤버로 흡수되던 createTab 문제와 그룹 고정 해제 후 로컬 pin이 남던 문제도 고쳤습니다. 그룹 드래그는 Cmd를 누르면 중첩, 그냥 끌면 형제 위치 변경으로 나뉘고 고스트 피드백이 붙었습니다(#1196). 이어 §2.1 재설계(#1197)로 top_level 저장값을 도입해 그룹을 만들 때 선택한 탭만 묶고, 고정 탭과 그룹의 순서를 드래그로 섞을 수 있게 했으며(SR1부터 SR5), 고정된 요소는 어디에도 흡수되지 않는 정책과 ungroup 시 고정 속성을 넘기지 않는 처리, 두 차례 코드 리뷰 지적을 반영했습니다.

라이트 배경에서 읽기 어려운 ANSI 팔레트 색을 색상은 유지한 채 어둡게 보정하는 theme.min-contrast 대비 하한(기본 WCAG 3.0)이 추가됐습니다(#1198). OSC 52 클립보드 쓰기는 고정 2KB 버퍼 때문에 한 문단 크기만 넘어도 통째로 버려지던 것을 동적 버퍼로 고쳤고(#1201), 최대 16MB 버퍼가 계속 남던 회수 갭(#1204)과 상한 초과를 알림으로 보여 주는 처리(#1207)가 뒤따랐습니다.

문서 쪽에서는 세션 컨트롤 플레인 설계 PR #1103이 병합됐습니다. ndjson JSON-RPC 프로토콜과 capability fd 인가, 네이티브 뷰 예외와 Phase별 테스트 전략, WKWebView 합성·z-order·브리지 설계, CEF opt-in 플러그인 방향, maru-app:// 스킴, 창 사이 surface 이동 전략이 여러 차례 적대적 검증을 거쳐 정리됐습니다. 이 설계는 곧바로 코드로 내려와 앱 전역 SurfaceIdAllocator(M0a, #1199), WindowMembershipSnapshot(M0b, #1200), 창과 surface 배치를 다루는 순수 모델 WindowGraph(M1, #1202), 런타임 소유 골격 LiveSurfaceRegistry(M2a, 아직 미배선, #1206)가 병합됐습니다.

컨트롤 플레인 Track C는 JSON-RPC 2.0·ndjson 프레이밍 스키마(1a, #1203), unix 소켓 bind·peer uid 확인·hello(1b, #1208), Surface DTO와 read-only 디스패치(1c, #1209), CLI sessions list/get(1d, #1210), capability 인가 판정 코어(1e, #1213)까지 진행됐습니다. WindowGraph OOM 롤백과 프레이머 프레임 유실 수정(#1205), 검증 반영 하드닝(#1211), CLI 사용법 오류에 스택 트레이스 대신 안내를 내는 수정(#1212), 커버리지 보강 테스트 14건(#1214)도 함께 병합됐습니다.

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

커밋

ohah/maru

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#1214생성 · 병합mergedmaintest(session): foundation 커버리지 갭 보강 — 미검증 분기·경계·계약 14건
ohah/maru#1213생성 · 병합mergedmainfeat(session): 1e capability auth 코어 — nonce hash·인가 판정·fd payload (헤드리스)
ohah/maru#1212생성 · 병합mergedmainfix(cli): usage 에러가 Zig 스택 트레이스 대신 깔끔한 안내로 종료
ohah/maru#1211생성 · 병합mergedmainfix: 적대적 검증 반영 — 코드 hardening 3건 + 문서 drift 대량 정정
ohah/maru#1210생성 · 병합mergedmainfeat(session): 1d CLI read-only metadata — sessions list/get 파서·dispatch·소켓 왕복
ohah/maru#1209생성 · 병합mergedmainfeat(session): 1c Surface DTO + read-only 디스패치 코어 — §3 엔티티·scope 응답
ohah/maru#1208생성 · 병합mergedmainfeat(session): 1b 컨트롤 소켓 부트스트랩 — unix socket bind/accept/peer-cred/hello
ohah/maru#1207생성 · 병합mergedmainfeat(terminal): OSC 52 상한 초과를 notice로 표면화 (무음 실패 제거) + 장기 방향 문서화
ohah/maru#1206생성 · 병합mergedmainfeat(session): M2a LiveSurfaceRegistry — 런타임 소유 골격(generic·TDD, 미배선)
ohah/maru#1205생성 · 병합mergedmainfix(session): 누적 code-review max 결함 2건 — WindowGraph OOM 롤백·Framer 프레임 유실
ohah/maru#1204생성 · 병합mergedmainfix(terminal): OSC 52 대용량 버퍼 회수 갭 (code-review max 후속 5건)
ohah/maru#1203생성 · 병합mergedmainfeat(session): 1a 컨트롤 플레인 프로토콜 스키마 — JSON-RPC 2.0 + ndjson framing
ohah/maru#1202생성 · 병합mergedmainfeat(session): M1 WindowGraph — window↔surface 배치 순수 모델 + move/merge
ohah/maru#1201생성 · 병합mergedmainfix(terminal): OSC 52 한 문단 크기(>2KB) 클립보드 쓰기가 통째로 버려지던 것 수정
ohah/maru#1200생성 · 병합mergedmainfeat(session): M0b WindowMembershipSnapshot — window_kind + metadata scope 필터
ohah/maru#1199생성 · 병합mergedmainfeat(session): M0a SurfaceIdAllocator — 앱 전역 surface_id 발급기
ohah/maru#1198생성 · 병합mergedmainfeat(theme): ANSI 팔레트 자동 대비 게이트(theme.min-contrast)로 라이트 테마 가독성 개선
ohah/maru#1197생성 · 병합mergedmainfeat(sidebar): §2.1 재설계 — 그룹 생성 선택 탭만 + 고정 탭↔그룹 인터리빙 (top_level, SR1~5)
ohah/maru#1196병합mergedmainfeat(sidebar): 그룹-로컬 pin(멤버 그룹 내 고정) + Cmd 중첩/형제 드래그 + 흡수 버그 수정
ohah/maru#1103병합mergedmaindocs(control-plane): 세션 컨트롤 플레인 설계 + 적대적 검증 반영