2026-07-25
요약 (AI 작성)
"세션이 사라졌을 때 무슨 일이 벌어지는가"를 계약으로 못박은 날입니다. R0 영속 계약을 정렬한 뒤 durable ended tombstone 을 영속시키고, 복구 세션 inventory 와 secure recovery discovery 코어, manifest runtime binding 검증을 붙였습니다. 그 위에서 복원이 누락된 runtime 을 종료 placeholder 로 잇도록 하고 placeholder 객체와 수명 관문을 만들었으며, 묘비에 화면 안내와 ⏎ 되살리기를 달아 사용자가 바로 복구할 수 있게 했습니다. 재접속 실패는 영구 부재와 일시 실패로 분류하고 attach 실패에서도 영구 부재를 구분했으며, 접속 실패 분류표·종료 placeholder 계약·묘비 안내를 각각 문서로 명문화했습니다. 복원이 조용히 버리던 항목은 checkpoint 차단 신호로 남기고, 설정 초기화가 keep-alive 를 지우지 않도록 보존 계약도 세웠습니다.
호스트 인프라도 함께 다졌습니다. 앱 인스턴스 writer lease 와 bounded connection reactor 코어, bounded readiness client 를 넣고 구독 출력을 트랜잭션화했으며 전역 구독 신원을 분리했습니다. host-backed 벨과 OSC 52 클립보드를 client 경로에 잇고 벨·클립보드 관측을 이벤트 발생 tick 에 push 하도록 최적화했으며, host/client 기능 배치 규칙을 문서로 정했습니다. 회귀로는 마우스 motion 리포팅(1003), 스크롤바와 입력모드 리셋을 되살리고 스크롤 상태를 delta 로도 나르도록 고쳤고, host 응답 스키마를 엄격히 검증하도록 바꿨습니다. signed host upgrade E2E 를 추가했고, 되살리기 슬라이스 13건과 session-host 15건의 /code-review max 결함을 수정했습니다.
사이드바에서는 워크스페이스 카드 높이를 줄 수 기반으로 바꾸고, 카드 아래 에이전트 하위 목록 설계와 행마다 폴더·브랜치를 표시하는 보강안을 문서로 확정했습니다.
커밋
ohah/maru
- feat(session-host): make subscription output transactional
- feat(session-host): add bounded readiness client
- feat(session-host): separate global subscription identity
- feat(session-host): add bounded connection reactor core
- feat(session-host): add secure recovery discovery core
- feat(session-host): add recovered session inventory core
- feat(session-host): validate manifest runtime bindings
- feat(session-host): persist durable ended tombstones
- feat(sidebar): 워크스페이스 카드 높이를 줄 수 기반으로 바꿉니다
- fix(ci): macOS writer lease를 Linux 검사에서 격리합니다
- feat(session-host): 앱 인스턴스 writer lease를 추가합니다
- docs(sidebar): 에이전트 행마다 폴더·브랜치를 표시하도록 보강합니다
- docs(sidebar): 워크스페이스 카드의 에이전트 하위 목록 설계를 확정합니다
- docs(session-host): align R0 persistence contracts
- fix(session): 되살리기 슬라이스의 code-review max 결함 13건을 수정합니다
- docs(session-host): 묘비 안내와 ⏎ 되살리기를 반영합니다
- feat(session): 묘비에 화면 안내와 ⏎ 되살리기를 붙입니다
- docs(session-host): 종료 placeholder 복원 계약을 반영합니다
- feat(session): 복원이 누락 runtime을 종료 placeholder로 잇습니다
- docs(session-host): 종료 placeholder 객체 계약을 명문화합니다
- feat(session): 종료 placeholder 객체와 그 수명 관문을 만듭니다
- docs(session-host): 접속 실패 분류표를 명문화합니다
- fix(session): 재접속 실패를 영구/일시로 분류합니다
- fix(session-host): attach 실패에서 영구 부재를 구분합니다
- docs(session): 복원 drop 신호의 checkpoint 차단 계약을 명문화합니다
- fix(session): 복원이 조용히 버린 항목을 신호로 남깁니다
- docs(session): 리셋의 keep-alive 보존 계약을 명문화합니다
- fix(session): 설정 초기화가 keep-alive를 보존하게 합니다
- fix(session): host 응답 스키마를 엄격히 검증합니다
- perf(session): 벨·클립보드 관측을 이벤트 발생 tick에 push합니다
- fix(session-host): code-review max 결함 15건을 수정합니다
- feat(session-host): host-backed OSC 52 클립보드를 잇습니다
- feat(session-host): host-backed 벨을 client 벨 경로에 잇습니다
- docs(session-host): host/client 기능 배치 규칙을 명문화합니다
- fix(session-host): 스크롤 상태를 delta로도 나릅니다
- fix(session): host-backed 스크롤바와 입력모드 리셋을 되살립니다
- fix(session): host-backed 마우스 motion 리포팅(1003)을 되살립니다
- test(session): signed host upgrade E2E를 추가합니다