2026-07-24
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru는 영속 세션(host-backed) 터미널의 동작을 로컬과 맞추는 수정부터 병합했습니다. 붙여넣기가 bracketed 마커 없이 전송돼 Claude Code가 이미지를 인식하지 못하던 문제를 host 관측값으로 판정하게 고쳤고(#1559), 재접속 직후 관측이 오기 전에도 스크롤이 동작하게 했으며(#1562), core command 패리티(#1563)와 구버전 host의 원격 복사 호환(#1564), 일반 키를 host의 DECKPAM·kitty 모드로 인코딩하는 수정(#1565)이 이어졌습니다. host-backed 세션에서 Cmd+hover 밑줄과 Cmd+클릭 링크 열기가 동작하지 않던 문제는 #1574로 되살렸습니다. 링크 span에 감지 종류를 붙이고 screen wire에 link_spans 레코드를 더해 host가 뷰포트 링크를 계산하면 client가 조립해 렌더 스냅샷에 노출하며, 열기 대상 판정은 runtime.link_at RPC로 host에 넘깁니다. 원격에서는 OSC 8 명시 링크가 전달되지 않는다는 점도 설계 문서에 반영했습니다.
실행 중인 host를 갈아 끼우는 live-upgrade는 U0 계약 고정(#1566) 뒤 같은 PID에서 exec하는 경로 전체가 #1567로 병합됐습니다. 업그레이드 대상 inode 고정, staged target preflight, handoff 권위 저장과 attempt 기록, 승인·host별 업그레이드 권위, rollback self-image와 rollback image staging, 다중 host runtime 소유권 통합, restore 진입·복원 그래프 커밋·restore 활성화 권위가 들어갔고, commit 경계와 N-1 호환 경계를 fail-close로 닫으면서 연속 업그레이드 rollback과 후속 실패 시 host 재개를 검증했습니다.
에이전트 관측 쪽은 화면 region·게이트·완료 알림 설계(#1568)와 region·게이트 엔진(#1569)을 병합했습니다. 실제 claude 2.1.218 화면과 OSC 타이틀을 캡처해 대조한 결과 기존 규칙이 현재 UI와 어긋난 부분을 정정했고(#1571), 멀티플렉서 환경을 포함한 실측 근거를 문서에 고정했으며(#1572), 게이트 판정의 잠재 결함 3건을 닫았습니다(#1573). claude working footer를 footer region으로 옮기는 PR #1570은 병합 없이 닫혔습니다. 문서 쪽에서는 알림 config 3키가 아직 미구현임을 명시하고(#1575), 문서가 광고하는 설정 키가 실제로 있는지 검사하는 게이트를 추가했습니다(#1576).
공개 커밋 54개, 해당일 생성 또는 병합된 PR 16개를 정리했습니다. PR 생성 15개·병합 15개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- test(config): 문서가 광고하는 키가 실재하는지 검사하는 게이트를 추가합니다
- docs(agent-session): 알림 config 3키가 미구현임을 명시합니다
- refactor(session-host): RPC 응답 파싱을 strict 디코더 하나로 통일합니다
- fix(session-host): link_at 응답을 전용 디코더로 파싱합니다
- test(session): 로컬 Cmd+hover 회귀 가드를 추가합니다
- feat(session-host): 원격 Cmd+클릭 링크 열기를 host RPC로 배선합니다
- fix(session): host-backed 세션의 Cmd+hover 밑줄을 되살립니다
- feat(session-host): client가 host 링크를 조립해 렌더 스냅샷에 노출합니다
- feat(session-host): host가 뷰포트 링크를 계산해 스냅샷에 싣습니다
- feat(session-host): screen wire에 link_spans record를 추가합니다
- feat(terminal): 링크 span에 감지 종류 태그와 뷰포트 수집기를 추가합니다
- docs(session-host): 원격 OSC 8 링크 미전달을 반영해 설계를 정정합니다
- docs(session-host): host-backed 링크 감지 설계를 확정합니다
- feat(session): 제품 restore activation을 연결합니다
- feat(session): restore 활성화 권위를 준비합니다
- feat(session): 복원 그래프 커밋 권위를 준비합니다
- fix(session): product restore fixture identity를 분리합니다
- feat(session): rollback self-image 권위를 추가합니다
- feat(session): restore 진입 권위를 고정합니다
- feat(session): staged target preflight를 추가합니다
- feat(session): live-upgrade 트랜잭션을 강화합니다
- feat(session): handoff 권위 저장을 구현합니다
- feat(session): 업그레이드 타깃 inode를 고정합니다
- feat(session): attempt 기록을 handoff에 포함합니다
- feat(session): upgrade 승인 권위를 강화합니다
- feat(session): host별 업그레이드 권위를 연결합니다
- fix(session): upgrade 복원 경합을 닫습니다
- fix(session): N-1 호환 경계를 fail-close 합니다
- feat(session): N-1 호스트 어댑터를 연결합니다
- test(session): upgrade 경계 검증을 강화합니다
- fix(session): host pool lease 경계를 명확히 합니다
- fix(session): 후속 upgrade 실패에서 host를 재개합니다
- feat(session): 다중 host runtime 소유권을 통합합니다
- feat(session): 연속 host upgrade rollback을 검증합니다
- feat(session): upgrade preflight 경계를 검증합니다
- fix(ci): host upgrade fixture를 macOS로 제한합니다
- fix(session): host upgrade commit 경계를 fail-close합니다
- feat(session): rollback image staging과 host pool을 연결합니다
- feat(session): host 연결 결과와 pool 경계를 분리합니다
- feat(session): same-PID host exec rollback을 검증합니다
- feat(session): host upgrade U1 U2 기반을 구현합니다
- fix(session): agent observer 게이트 판정을 경화합니다
- docs(session): 멀티플렉서 환경 실측 결과를 반영합니다
- docs(session): agent observer 신호 근거를 실측으로 고정합니다
- fix(session): claude 실제 신호에 맞춰 agent observer 판정을 정정합니다
- feat(session): agent observer 화면 region·게이트 엔진을 추가합니다
- docs(session): agent observer 화면 region·게이트·완료 알림 설계를 추가합니다
- feat(session): host 업그레이드 U0 계약을 고정합니다
- fix(session): host-backed 일반 key가 host의 DECKPAM·kitty 모드로 인코딩합니다
- docs(session): 호스트 소켓 경로 상한을 고정합니다
- fix(session): 구 host 원격 복사를 호환합니다
- fix(session): host-backed core command parity
- fix(session): host-backed 스크롤이 재접속 직후(관측 미가용)에도 동작합니다
- fix(session): host-backed 붙여넣기 bracketed-paste 패리티
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.