2026-07-24
요약 (AI 작성)
실행 중인 host 를 무중단으로 갈아끼우는 live-upgrade 를 설계부터 검증까지 밀어붙인 날입니다. U0 계약을 고정한 뒤 U1·U2 기반을 구현하고, 업그레이드 타깃 inode 고정과 staged target preflight, handoff 권위 저장과 attempt 기록, 승인·호스트별 업그레이드 권위 연결로 트랜잭션을 강화했습니다. 실패 대비도 같은 비중으로 다뤄, rollback self-image 권위와 rollback image staging·host pool 연결을 넣고 same-PID host exec rollback 과 연속 upgrade rollback 을 검증했으며, upgrade commit 경계와 N-1 호환 경계를 fail-close 로 닫고 복원 경합과 host pool lease 경계를 정리했습니다. 복원 경로 역시 restore 진입 권위 고정, 복원 그래프 커밋 권위, restore 활성화 권위와 제품 restore activation 연결로 권위를 한 줄로 세웠습니다.
터미널 링크 감지를 host-backed 세션에 되살린 것도 이날입니다. 설계를 확정하고 원격 OSC 8 미전달 사실을 반영해 정정한 뒤, 링크 span 에 감지 종류 태그와 뷰포트 수집기를 붙이고 screen wire 에 link_spans record 를 추가해 host 가 뷰포트 링크를 계산·적재하면 client 가 조립해 렌더 스냅샷에 노출하도록 했습니다. 그 위에 Cmd+hover 밑줄과 원격 Cmd+클릭 링크 열기를 host RPC 로 배선하고 로컬 회귀 가드를 추가했으며, RPC 응답 파싱은 strict 디코더 하나로 통일하고 link_at 은 전용 디코더로 분리했습니다.
에이전트 관측(agent observer)도 한 축 진행했습니다. 화면 region·게이트·완료 알림 설계를 문서로 쓰고 region·게이트 엔진을 구현한 뒤, claude 의 실제 신호를 실측해 판정을 정정하고 근거를 문서에 고정했으며 게이트 판정을 경화했습니다. 그 밖에 host-backed 일반 key 가 host 의 DECKPAM·kitty 모드로 인코딩되도록 고치고, 재접속 직후 관측이 없을 때도 스크롤이 동작하게 하며, core command 패리티와 구 host 원격 복사 호환을 맞췄습니다. 문서 위생으로는 광고된 config 키가 실재하는지 검사하는 게이트를 추가하고, 알림 config 3키가 미구현임을 명시했습니다.
커밋
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 패리티