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
- test(session): foundation 커버리지 갭 보강 — 미검증 분기·경계·계약 14건
- feat(session): 1e capability auth 코어 — nonce hash·인가 판정·fd payload (헤드리스)
- fix(cli): usage 에러가 Zig 스택 트레이스 덤프 대신 깔끔한 안내로 종료
- fix: 적대적 검증 반영 — 코드 hardening 3건 + 문서 drift 대량 정정
- feat(session): 1d CLI read-only metadata — sessions list/get 파서·dispatch·소켓 왕복
- feat(session): 1c Surface DTO + read-only 디스패치 코어 — §3 엔티티·scope 응답
- feat(session): 1b 컨트롤 소켓 부트스트랩 — unix socket bind/accept/peer-cred/hello
- feat(terminal): OSC 52 상한 초과를 notice로 표면화 (무음 실패 제거) + 장기 방향 문서화
- feat(session): M2a LiveSurfaceRegistry — 런타임 소유 골격(generic·TDD, 미배선)
- fix(session): 누적 code-review max 결함 2건 — WindowGraph OOM 롤백·Framer 프레임 유실
- fix(terminal): OSC 52 대용량 버퍼 회수 갭 — code-review max 5건
- feat(session): 1a 컨트롤 플레인 프로토콜 스키마 — JSON-RPC 2.0 + ndjson framing
- feat(session): M1 WindowGraph — window↔surface 배치 순수 모델 + move/merge
- fix(terminal): OSC 52 한 문단 크기 클립보드 쓰기가 통째로 버려지던 것 수정
- feat(session): M0b WindowMembershipSnapshot — window_kind + metadata scope 필터
- feat(session): M0a SurfaceIdAllocator — 앱 전역 surface_id 발급기
- docs: M0a 착수 결정 3건 확정 + 착수 전 문서 재점검(drift gate)
- docs(control): §11.1 구현 착수 순서·에이전트 분배 추가
- docs: 반박 재검증 3건 정정 — restore 멀티창 현황·caret 소유·API 정확성
- docs(control): 적대적 검증 반영 — 자기모순 2건 정정 + 보안·동시성 결함 흡수
- docs(control): 리베이스 후 main 대조 검증 반영 — stale 3건·계획 갭 4건
- docs(web-panel): maru-app:// 스킴 확정 + RFC 3986 근거
- docs: document renderer preflight gates
- docs(control): 이동성 foundation 명확성·순서 다듬기 (5건)
- docs(control): clarify no-compat surface identity plan
- docs(control): 이동성 foundation·게이트 후속 검증 반영 (6건)
- docs(window): add surface mobility strategy
- docs(control): add code convention gates
- docs(control): add stability performance gates
- docs(control): require tdd micro slices
- docs(refs): unify browser automation reference
- docs(control): require cli help gates
- docs(control): require phase start gates
- docs(control): clarify self metadata gates
- docs(web): add cef adoption gates
- docs(web): clarify cef agent browser boundary
- docs(web): clarify cef plugin strategy
- docs(web): document bun frontend tests
- docs(web): clarify zntc frontend tooling
- docs(web): zntc 번들러와 Bun workspace 방향 정리
- docs(control-plane): capability fd 실측 결과 반영
- docs(control-plane): shell capability fd gate 추가
- docs(control-plane): capability fd 인가 계획 보강
- docs: 적대적 재검증 3렌즈 반영 — capability↔§8.3 동기화·§7 정정·collector 2층·보안 정직화
- docs(control-plane): 리뷰 후속 — §6 capability 매핑·§8.4 제목 정리
- docs(control-plane): 보안·검증 게이트 보강
- docs(web-panel): 적대적 검증 4렌즈 반영 — 입력 라우팅·보안·CEF·정합
- docs(web-panel): 미래 — 웹뷰 백엔드 추상화 + CEF opt-in 플러그인 (suji 선례)
- docs(web-panel): WKWebView 합성·z-order·브리지 인프라 설계 (spike 실측 반영)
- docs: code-review high 후속 — 예외 단일출처화·참조 수정·레퍼런스 등록 (4건)
- docs(control-plane): 검증 메타 제거·담백화 + 확정 결정 반영
- docs(control-plane): 네이티브 뷰 예외 명문화 + Phase별 테스트 전략
- docs(control-plane): 세션 컨트롤 플레인 설계 + 적대적 검증 반영
- fix(chrome): code-review 2차 5건 — ungroup·고정정책 갭
- fix(chrome): ungroup 시 그룹 고정 속성 미인계 + §14 문서 동기화
- fix(chrome): 고정 요소는 흡수 불가 정책 — 고정 탭 top_level 강제·고정 그룹 nest 금지
- fix(chrome): top_level 경계를 기존 경로에서 유지 (code-review 9건)
- fix(chrome): 고정 탭 그룹 흡수 보정 + 접힌 그룹 드래그 펼침 억제 (SG8g)
- fix(chrome): 그룹 드래그가 고정 탭과 순서 교환 (sidebarGroupDropBoundary top_level 인식)
- refactor(chrome): §2.1 재설계 완결 — 빈gap 제스처·3축 공존·UX 마감 (SR5)
- refactor(chrome): model-2 드래그 top_level 인터리빙 (SR4)
- refactor(chrome): createGroup 선택 탭만 + promote-in-place (SR3)
- refactor(chrome): normalize/align top_level 인식 재작성 (SR2)
- refactor(chrome): top_level 저장·7경계 파생 토대 (SR1)
- docs(sidebar): §2.1 재설계 model-2 설계 확정 (§14, 적대검증 3회 보강)
- refactor(theme): min-contrast 대비 하한 리뷰 반영(bg_lum 호이스팅·활성 경계 문서 정정)
- feat(theme): ANSI 팔레트 자동 대비 게이트(theme.min-contrast)
- chore(chrome): 그룹 드래그 plan MARU_DEBUG 로그 (Cmd 게이트 재검증 도구)
- feat(chrome): 그룹 드래그 Cmd=중첩 / 일반=형제 구분 + 고스트 피드백
- docs(sidebar): GL1~4·버그수정 문서 전면 동기화 (§13·§2.1·§12·§10)
- fix(chrome): 최상위 카드 그룹 흡수(createTab)·그룹 고정 해제 시 로컬 pin 잔류 + pin 회귀 매트릭스
- test(chrome): 로컬 pin 공존·중첩 하드닝 (GL4)
- feat(chrome): 로컬 pin 렌더 — 📌·위생·드래그 엣지·마커 위 배치 (GL3)
- feat(chrome): toggleLocalPin + 멤버 우클릭 로컬 pin + 드래그 clamp (GL2)
- feat(chrome): local_pinned 필드·직렬화·stablePartitionSubtree 토대 (GL1)
- docs(sidebar): 그룹-로컬 pin — C2와 직교하는 새 축 (§13, 적대검증 3회 보강)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.