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