2026-08-02
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru에 세션 아카이브 UI를 처음부터 끝까지 붙인 날입니다. 로컬 세션 아카이브 부트스트랩(#1774)에서 출발해 카드 그룹화, 워크스페이스 범위 필터, 검색 필터, 선택한 로그의 안전한 노출, 상세 탭 열기와 bounded 상세 파싱, 새로고침 컨트롤을 차례로 붙였습니다. 도크가 짧을 때 상세를 감추고 높이에 맞춰 clamp하는 처리, 검색 시 숨겨진 선택 해제, 소스 컨트롤 스크롤 높이 보존, 아카이브 순회의 no-follow 유지, 변경 없는 세션 요약 캐싱도 함께 다뤘고, 아카이브 세션을 활성 pane의 cwd로 한정하도록 고쳤습니다. 파일 트리가 활성 터미널의 cwd를 따라가게 하는 #1780과 그 뷰포트 픽스처 안정화 #1791도 병합됐습니다.
chrome을 Metal UI로 옮기는 토대도 놓았습니다. Metal UI 레이아웃과 시각 게이트를 문서로 정의한 뒤(#1781) typed flex layout 코어(#1782), 중첩 Metal UI rect 트리(#1784), typed pointer interaction seam(#1786), typed UI paint resolver(#1790)를 넣고 Metal overlay lowering을 추출했습니다(#1793). 처음에 기능 브랜치를 대상으로 쌓았던 #1787·#1788·#1789는 닫고 main 대상 PR로 다시 올렸습니다. 검증용으로 test-only Lab lowering seam(#1794)과 결정적 Lab 시나리오, Metal Lab readback 캡처(#1796)를 만들었고, 그 위에서 Session Dock 컴포넌트 트리와 포인터 lifecycle을 연결한 뒤(#1799) 픽셀 단위 스크롤 투영, refresh anchor 보존, archive detail 패널 마운트(#1805)까지 이었습니다. 레거시 tui 설정 항목은 숨겼습니다.
session-host는 generation 소유권(CR3a)을 세웠습니다. 소유권 계약을 정의하고(#1769) skeleton(#1770), generation attachment shell(#1778), batch registry와 adapter를 붙였으며, 초기 snapshot을 generation이 소유하게 했습니다(#1792). ended stream purge를 명세하고 준비했고, ended event hot peek, 공유 stream 연산 permit, client poison 결과 분류(#1767), 실행 중 reconnect 계약 문서(#1766)가 이어졌습니다. 전날 열린 typed control semantics 소비 #1751과 observer로 강등된 터미널의 입력 불가 알림 #1761도 이날 병합됐습니다. 안정성 쪽은 macOS tmp 정리가 살아 있는 host의 endpoint를 지우지 못하게 하고, ~/.cache/maru를 비워도 세션을 잃지 않게 했으며(#1772), 셸 통합 파일이 사라지면 다음 탭에서 다시 만들도록 고쳤습니다(#1773).
파일 패널은 읽기 모드가 문서에 직접 쓴 HTML을 그리게 한 #1764를 병합했고, 문법 목록 잠금을 원문 보존 규칙으로 바꿔 모르는 원문 조각을 그대로 지키게 했습니다(#1765). 리치 모드의 블록 조각에는 렌더 미리보기와 로컬 이미지를 붙이고 반쪽 조각은 미리보기를 감췄습니다(#1768). 테스트에서는 diff 워커 경합으로 죽던 테스트 셋(#1775), Trash 복원 대기, Zig 0.16 sleep API 전환, IPC 없이 session-host 테스트를 돌리는 CI 조정이 있었습니다. ohah.github.io에는 CRD 작성 크론 작업과 워크플로를 설정하는 커밋이 하나 들어갔습니다.
공개 커밋 78개, 해당일 생성 또는 병합된 PR 44개를 정리했습니다. PR 생성 41개·병합 41개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- feat(chrome): mount archive detail panel
- feat(chrome): add archive detail panel component
- feat(chrome): preserve session dock refresh anchor
- feat(chrome): project session dock scroll in pixels
- feat(session-host): prepare ended stream purge
- docs(agent): define session dock pixel scroll
- feat(chrome): connect session dock component tree
- feat(session-host): add ended event hot peek
- feat(session-host): add shared stream operation permits
- feat(chrome): add Metal Lab readback capture
- docs(session-host): specify ended stream purge
- test(chrome): cover Lab card clip geometry
- fix(chrome): make Lab action target measurable
- test(chrome): cover Lab scenario action seam
- feat(chrome): build deterministic Lab scenarios
- feat(chrome): add test-only Lab lowering seam
- fix(session-host): align snapshot process test domain
- feat(session-host): own generation initial snapshots
- refactor(chrome): extract Metal overlay lowering
- feat(chrome): add typed UI paint resolver
- test(file-tree): stabilize cwd follow viewport fixture
- feat(chrome): add typed pointer interaction seam
- feat(chrome): hide legacy tui setting entry
- docs(chrome): keep layout status in tracking docs
- feat(chrome): add nested metal ui rect tree
- feat(session-host): bind generation batch adapter
- feat(session-host): add generation batch registry
- feat(chrome): add typed flex layout core
- docs(chrome): specify pointer interaction ownership
- docs(chrome): define Metal UI layout and visual gates
- docs(agent-sessions): define native dock components
- fix(file-tree): follow active terminal cwd
- fix(ci): run session host tests without IPC
- fix(ci): avoid Zig test runner IPC failure
- test(agent): cover active pane cwd scope refresh
- fix(agent): scope archive sessions by active pane cwd
- feat(agent): open archive session detail tabs
- feat(agent): parse bounded archive session detail
- feat(agent): group archive session cards
- docs(agent): define grouped archive session UI
- fix(agent): clarify workspace scope availability
- feat(agent): filter archive by workspace scope
- fix(agent): clear hidden selection on search
- feat(agent): filter archive snapshot by search
- fix(agent): hide detail when dock is too short
- fix(agent): clamp archive detail to dock height
- feat(agent): show archive detail actions in dock
- feat(agent): reveal selected archive log safely
- feat(agent): retain verified archive source identity
- fix(agent): preserve source control scroll height
- feat(agent): add archive refresh control
- fix(agent): keep archive traversal no-follow
- perf(agent): cache unchanged session summaries
- feat(agent): add session archive bootstrap
- docs(session-host): define CR3a-2b ownership gates
- feat(session-host): add generation attachment shell
- test(app-session): use Zig 0.16 sleep API
- test(file-panel): wait for trash restore completion
- test(app-session): diff 워커 경합으로 죽던 테스트 셋을 고칩니다
- fix(shell-integration): 통합 파일이 사라지면 다음 탭에서 다시 만듭니다
- fix(session-host): tmp 정리가 살아 있는 host의 endpoint를 지우지 못하게 합니다
- fix(session-host): 캐시를 비워도 살아 있는 세션을 잃지 않게 합니다
- docs(session-host): close CR3a-2 ownership contract
- ci: allow cold macOS session-host gates to finish
- feat(session-host): add CR3a generation ownership skeleton
- feat(file-panel): 리치가 로컬 이미지를 그리고, 반쪽 조각은 미리보기를 감춥니다
- feat(file-panel): 리치의 블록 조각에 렌더 미리보기를 붙입니다
- docs(session-host): define CR3a ownership contract
- feat(session-host): classify client poison outcomes
- fix(session-host): observer로 강등된 터미널의 입력 불가를 알립니다
- feat(file-panel): 문법 잠금을 걷어내고 모르는 원문 조각을 보존합니다
- docs(file-panel): 문법 목록 잠금을 원문 보존 규칙으로 대체합니다
- docs(file-panel): 리치 HTML 미리보기를 신뢰 shell 삽입의 단일 예외로 엽니다
- docs(session-host): 실행 중 reconnect 계약을 정의합니다
- feat(session-host): consume typed control semantics
- docs(session-host): define f3c2 semantic take
- feat(file-panel): 읽기 모드가 문서에 직접 쓴 HTML을 그립니다
ohah/ohah.github.io
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.