2026-09-11
요약 (AI 작성)
PR 80건이 들어간 날입니다. 편집기 폭 캐시가 편집·줄 수 변화·탭 폭 변경에도 살아남게 하고, 되돌리기가 범위를 알게 하고, 체크포인트를 프레임에 나눠 세웠습니다. 모바일은 M12 를 닫고 다른 기계로 갈아타면 화면을 처음으로 되돌리며, M3c 로 끊은 것이 되돌아오지 않게 하고 안 시킨 끊김이면 물러나며 다시 붙고 세션 목록을 «볼 때» 다시 받고 ssh 가 죽은 소켓을 keepalive 로 알아챕니다. UX 계약은 현재형으로 고쳤습니다 — 덮개는 «정해진 것» 이다(U0·U1·U2).
원격 활동은 RAV3 로 원격 pane 의 활동이 화면에 뜨고, 원격/SSH 이력 비목표를 뒤집어 무엇을 선 위로 보낼지 실측으로 정했습니다. session-host 는 handoff 크기를 태그별로 갈라 스크롤백이 주범이 아님을 알았고, input→Metal submit 을 재고, 첫 프레임의 알림 재전송을 없애고, 자식을 못 받은 빈 host 가 영영 안 죽어 업그레이드를 막던 것을 고치고, 레이아웃 조각을 host 가 «보관만» 하게 하고(A-1), CR6f 장시간 idle soak 를 제품 gate 로 고정하고, Notification Center 제품 트랜잭션을 고정했습니다.
터미널은 kitty·OSC·키보드 인코더 방어선을 전수로 훑었습니다 — kitty 여덟 중 여섯, OSC 여섯 중 둘이 그물 밖이었고, 키보드 인코더는 여섯 중 다섯이 잡혔으며 못 잡은 하나는 Caps Lock 이었습니다. 테스트는 샤드 배정을 이름 해시로 바꿨고(테스트 하나가 2,741개의 배정을 흔들었다), 스윕이 제품 소켓 뿌리 /tmp/maru-<uid> 를 지울 뻔한 것을 막았습니다.
커밋
ohah/maru
- docs(mobile): UX 계약을 현재형으로 — 덮개는 «정해진 것» 이다 (U0)
- fix(tests): 이름의 숫자를 pid 로 믿다가 살아 있는 host 를 고아로 만들었다
- fix(tests): 거두려던 94% 를 못 거두고 있었다 —
maru-t<pid>를 읽는다 - fix(tests): 바퀴를 다시 만들었다 — 스윕이 기존
clean-tmp-fixtures.sh를 부른다 - test(session-host): 알림 세대 분리를 제품 경로로 증명한다
- docs(mobile): 열린 것을 한곳에 두고 표와 기계로 대조한다
- perf(macos): measure launch to first drawable
- feat(mobile): 끊은 것이 되돌아오지 않게 하고, 안 시킨 재접속을 말한다 (M3c)
- diag(session-host): runtime_changed 일곱 갈래가 한 이름으로 뭉쳐 침묵하던 것
- test(terminal): fuzz 를 버그 사냥 도구로 쓴다 — seed 400 개를 훑었다
- diag(session-host): handoff 크기를 태그별로 가른다 — 스크롤백은 주범이 아니었다
- fix(session-host): 자식을 못 받은 빈 host 가 영영 안 죽어 업그레이드를 막던 것
- docs(remote-activity): 열린 질문 넷을 제안대로 확정한다 (사용자 결정 2026-09-11)
- docs(remote-activity): 「원격이 없으면 못 잰다」가 틀렸다 — 실서버에 심어서 쟀다
- docs(remote-activity): 원격/SSH 이력 비목표를 뒤집고 무엇을 선 위로 보낼지 실측으로 정한다
- docs(mobile): M12 를 닫는다 — 그리고 그것을 못 잡은 판정자를 고친다
- perf(editor): 되돌리기도 범위를 안다 — 한 묶음의 앞끝과 꼬리
- test(terminal): 애니메이션 합성 경로 넷과 건너뛰기·재전송을 고정한다
- feat(mobile): 다른 기계로 갈아타면 화면을 처음으로 되돌린다 (M12-f3)
- test(mobile): 언어 원장을 98 로 올린다 — 전환 확인 화면 (M12-f2)
- fix(mobile): 확인 화면이 «목록이 보인 그 이름» 을 보인다 (M12-f2)
- test(mobile): 세 번째 요청 자리를 모으고 판정자를 세운다 (M12-f2)
- feat(mobile): 붙어 있는데 다른 서버를 누르면 «묻고 갈아탄다» (M12-f2)
- perf(editor): 줄 수가 바뀌어도 폭 캐시가 산다 — 꼬리를 민다
- diag(session-host): 알림 바인딩 RPC 를 «왜» 보냈는지 남긴다
- feat(agent): orphan 에 채널 상태를 함께 남긴다 — 「못 봤다」와 「안 맞았다」를 가른다
- test(terminal): kitty APC 무작위 fuzz — 문법을 알아야 코드를 밟는다
- perf(editor): 편집이 폭 캐시를 버리지 않는다 — 바뀐 줄만 다시 센다
- docs(session-host): align completion status
- test(mobile): 판정자가 틀린 «모양» 을 물고 있었다 — 나가는 «자리» 를 센다 (M2-f2)
- docs(app-session): 상태 객체 열다섯은
.{}로 못 만든다 — 재시도하지 말 것 - fix(test): 샤드 배정을 이름 해시로 — 테스트 하나가 2741 개의 배정을 흔들었다
- fix(app): 빌드 신원을 못 읽어도 말한다 — 부재가 같은 혼동을 만들었다
- docs(tests): 「헬퍼로 옮기면 해결된다」는 오판을 막아 둔다
- test(terminal): 애니메이션의 이음매와 PNG 프레임 거부를 고정한다
- fix(tests): 스윕이 제품 소켓 뿌리를 지울 뻔했다 —
/tmp/maru-<uid>를 뺀다 - fix(session-host): 애니메이션이 있으면 handoff 가 통째로 거부됐다
- fix(tests): 러너가 묵은 /tmp 픽스처를 쓸어 낸다 — 47.4 GB 가 쌓여 있었다
- perf(session-host): measure input to Metal submit
- perf(editor): 가장 긴 줄이 짧아지면 상한도 준다 — 캐시로 정확히 센다
- fix(remote-activity): 적대적 3 회 더 — 체인 인덱스가 밀린다·없는 파일을 가리킨다
- fix(remote-activity): 적대적 3 회 더 — 조용한 유실·판 드리프트·CI 가 잡은 원장
- feat(remote-activity): RAV1 — 원격 활동 wire 코덱
- feat(agent): orphan 의 mine 을 pane 통째로 남긴다 — 자른 값이 벽이었다
- perf(editor): 탭 폭을 바꿔도 폭 캐시가 산다 — 세터가 다시 채운다
- feat(ssh): 죽은 소켓을 스스로 알아챈다 — keepalive (M3c)
- diag(app): 관측 이벤트당 비용을 줄일 수 있는지 가르는 두 숫자를 센다
- test(terminal): fuzz 의 탐지력을 재고, 공허하던 자원 단언을 세운다
- fix(session-host): 라벨 하나가 전원 재전송을 부르던 것 — 세대 축을 runtime 별로 나눈다
- docs(mobile): 계획서 상태를 서술절·코드와 맞춘다 (U1·U2)
- fix(remote-activity): 적대적 3 회 더 — 헬퍼의 「가장 중요한 계약」을 어기고 있었다
- fix(remote-activity): 적대적 3 회 더 — 실 원격에 제품 헬퍼를 심어서
- feat(remote-activity): RAV2 — 헬퍼 판 9
activity와 실물 왕복 게이트 - docs(session-host): CR6f soak 완료 상태를 동기화한다
- feat(mobile): 안 시킨 끊김이면 물러나며 다시 붙는다 (M3c)
- docs(session-host): mark P5d R3 verification complete
- fix(workspace): 덮이는 레이아웃의 사본이 하나도 안 남던 것
- diag(session-host): 수신 한도로 끊을 때 자리와 바이트가 안 남던 것
- feat(session-host): isolate P5d release workspace
- test(terminal): 키보드 인코더 스윕 — 여섯 중 다섯이 잡혔고, 못 잡은 하나는 Caps Lock 이었다
- feat(session-host): define notification release evidence
- feat(session-host): add notification click helper
- feat(session-host): add signed CLI evidence leaf
- test(terminal): kitty 방어선을 전수로 훑었다 — 여덟 중 여섯이 그물 밖이었다
- fix(remote-activity): 적대적 3 회 + CI 가 잡은 「로컬에서는 영영 안 드러나는」 결함
- feat(remote-activity): RAV4 — 체인을 저쪽에서 푼다
- test(session-host): CR6f 장시간 idle soak를 배선한다
- diag(session-host): rejected 여덟 자리가 한 이름으로 뭉쳐 있던 것
- docs(session-host): define signed CLI release evidence
- docs(session-host): 완료된 알림과 지연 게이트를 맞춘다
- feat(remote-activity): RAV5b — 원격 pane 에서 펼치면 본문이 뜬다
- feat(remote-activity): RAV5a — 구간을 당겨오는 문
- docs(session-host): 현재 완료 상태를 한 목소리로 맞춘다
- perf(editor): 체크포인트를 프레임에 나눠 세운다 — 상한을 올릴 기계
- feat(mobile): 세션 목록을 «볼 때» 다시 받는다 (M3c)
- feat(session-host): own notification product transaction
- test(terminal): OSC 방어선 스윕 — 여섯 중 둘이 그물 밖, 하나는 중복 방어선이었다
- diag(session-host): 해싱 대역폭을 어느 자리가 쓰는지 안 갈리던 것
- test(session-host): update release adapter aggregate count
- docs(session-host): close P5d R2b candidate authority
- fix(session-host): preserve foreign P5d cleanup paths
- test(session-host): seal P5d mounted gate caller inventory
- fix(session-host): execute P5d from pinned candidate copy
- feat(session-host): bind P5d evidence to mounted candidate
- diag(session-host): attach 거절이 어느 판정인지 안 남던 것
- test(session-host): c3c 반복 표본을 수집한다
- docs(session-host): c3c 반복 표본 계약을 세운다
- feat(mobile): 넓은 화면에서 읽는 화면만 폭을 제한한다 (M5)
- docs(mobile): 여기까지 — 모바일을 멈추고 재개 조건을 적는다
- fix(remote-activity): 적대적 3 회 — 게이트가 덮는다고 적은 범위를 안 덮고 있었다
- feat(remote-activity): RAV3 — 원격 pane 의 활동이 화면에 뜬다
- test(session-host): c3c 지연 예산을 판정한다
- docs(session-host): c3c 지연 예산을 확정한다
- perf(editor): 가로 스크롤 상한을 지운다 — 줄마다 열→byte 체크포인트
- feat(session-host): 레이아웃 조각을 host 가 «보관만» 하게 한다 (A-1)
- feat(session-host): bind P5d evidence into release candidates
- fix(session-host): restore fresh completion verification
- test(session-host): freeze selection compatibility