2026-08-28
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru의 편집기에 구문 트리 1층이 선 날입니다. tree-sitter를 배선하고 판정자를 세운 뒤 적대적 검증으로 Linux 축과 골든 목록까지 넓혔습니다(N4 §5.3, #2784). 그 위에서 코드에 색을 입히는 제품 배선 #2803은 이날 PR이 열렸습니다. 파일 트리는 재투영이 매 tick 사용자의 스크롤을 선택 행으로 되감던 것과 보여 주지 못한 것을 보여 줬다고 기록하던 것을 고쳤습니다(#2801).
session-host는 checkpoint를 둘러싼 결정이 오갔습니다. 실패 시 Quit을 취소하게 했고(#2786), 중복 checkpoint 보존과 tombstone 재실행 영속성을 검증했으며, 두 번째 checkpoint coordinator는 되돌렸습니다(#2796). 복원 중·종료 중에는 checkpoint를 쓰지 않게 하려던 R7-0 #2794는 병합 없이 닫혔습니다. 이틀 전 열린 #2742가 병합돼 성공한 upgrade를 실패로 읽던 자리를 닫고, 테스트가 사용자 registry를 오염시켜 실행 중인 앱을 죽이던 격리 문제를 정리했습니다. poison 사유가 갈리면 앱을 죽이던 자리(#2790), 알림을 물어보는 값이 비싸졌는데 호출부가 그대로였던 것(#2792)을 고치고, 유휴 화면 투영과 metadata 생성을 runtime 이벤트로 열게 했으며, 원격 출력에 AppKit을 깨우고(#2800) foreground metadata generation을 보존했습니다(#2806). P4 게이트 현황을 코드·실측으로 다시 적는 #2802와 영속성이 깨진 동안 상태바에 그 사실을 남기는 #2798은 이날 열렸습니다.
Windows는 전날 열린 파일 카드 ✕ #2775를 병합하고, 사이드바 검색에 글자를 칠 수 있게 했으며(#2781), 에이전트 도크 검색으로 W8.15를 마무리했고(#2788), 세션 카드 ✕를 계약이 정한 절반까지 붙였습니다(#2797). 실행 중이면 확인 모달을 띄우는 W8.16 나머지 #2805는 이날 열렸고, 계획서가 "무엇이 남았나"의 단일 출처이기를 그만둔 것은 되돌렸습니다(#2778). SSH는 테스트가 CPU를 태우는 고아와 며칠씩 사는 sshd를 남기던 것(#2782, #2785), 재접속한 셸에 마우스 리포트가 쏟아지던 것(#2789)을 고쳤습니다. 모바일은 새 연결에서 남은 요청과 runtime id 문제를 고치고, 폰이 원격 화면 레코드를 조립하게 했습니다(S11-5, #2799).
공개 커밋 64개, 해당일 생성 또는 병합된 PR 32개를 정리했습니다. PR 생성 30개·병합 27개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- fix(session-host): restore capability-less N-1 metadata safely
- test(session-host): require legacy metadata consumer parity
- docs(session-host): define legacy metadata consumer gate
- fix(session-host): preserve foreground metadata generation
- test(session-host): require foreground consumer parity
- docs(session-host): define foreground consumer parity gate
- docs(windows): §2m.78 — 세션 닫기 적대적 검증 5회
- test(windows): 적대적 검증 4회차 — 거절 경로 판정이 동어반복이었다
- test(windows): 적대적 검증 3회차 — 연달아 닫아도 불변식이 버티는지 잰다
- fix(windows): 적대적 검증 2회차 — 닫은 뒤에 + 가 죽었다(id 재사용)
- fix(windows): 적대적 검증 1회차 — 앞쪽 세션을 닫으면 보고 있던 세션이 바뀌었다
- docs(windows): 계획서 W8.16 칸에서 셸이 먹은 낱말 하나를 되돌린다
- docs(windows): §2m.77 — 세션 닫기, "결정 대기" 는 덜 읽고 적은 표시였다
- feat(windows): 세션 카드의 ✕ — 계약이 정한 절반까지
- test(file-tree): reveal 판정자가 짧은 픽스처에서 패닉하지 않고 거절한다
- fix(file-tree): 보여 주지 못한 것을 «보여 줬다» 고 기록하지 않는다
- fix(file-tree): 재투영이 매 tick 사용자의 스크롤을 선택 행으로 되감았다
- test(session-host): verify metadata reattach parity
- test(session-host): require metadata reattach parity
- docs(session-host): define metadata reattach parity gate
- fix(session-host): separate idle CPU from runner delay
- perf(session-host): wake AppKit on remote output
- test(session-host): require client idle pump evidence
- docs(session-host): specify client idle pump evidence
- feat(mobile): 폰이 원격 화면 레코드를 조립한다 (S11-5)
- docs(session-host): 쓰기 소유자·저장 경로를 실제 배치로 맞춘다
- fix(build): 죽은 테스트 이름을 필터에서 뺀다
- revert(session-host): 두 번째 checkpoint coordinator 를 되돌린다 (P4 C3-1)
- test(session-host): settle metadata sources before idle budget
- docs(session-host): align event-driven producer status
- perf(session-host): gate metadata production by runtime events
- docs(session-host): specify event-driven metadata sampler
- docs(windows): §2m.76 — 에이전트 검색, 그리고 안 재고 쓴 문장 하나를 갚는다
- feat(windows): 에이전트 도크 검색 — W8.15 의 나머지
- perf(session-host): 알림을 물어보는 값이 공짜가 아니게 됐는데 호출부가 그대로였다
- fix(session-host): preserve metadata cadence while screen is idle
- perf(session-host): gate idle screen projection by events
- docs(session-host): specify event-driven producer gates
- fix(ssh): 끊긴 자리에서 입력 모드를 되돌린다 — 재접속한 셸에 마우스 리포트가 쏟아졌다
- fix(session-host): isolate screen inbox overflow recovery
- fix(session-host): poison 사유가 갈리면 앱을 죽이던 자리를 닫는다
- fix(session-host): restore 경로만 옛 뿌리에 socket 을 열고 있었다
- fix(tests): 같은 파일의 두 번째 테스트가 옛 뿌리를 그대로 쥐고 있었다
- fix(tests): 격리가 옮긴 것은 socket 이 아니라 «뿌리» 였다 — 두 e2e 가 부모와 자식을 갈라 놓았다
- fix(tests): N-1 baseline 은 uid 기준 socket 을 요구한다 — 이 경로만 공용을 짚는다
- fix(tests): runner 격리가 libc 없는 대상의 빌드를 깨뜨렸다
- fix(session-host): 테스트가 사용자 registry 를 오염시켜 실행 중인 앱을 죽였다
- test(editor): 적대적 검증 3회를 더 돌린다 — Linux 축과 골든 목록을 연다
- test(editor): 구문 판정자를 적대적 검증 3회로 두들긴다 — 여덟으로 늘었다
- feat(editor): 구문 트리 1층이 선다 — tree-sitter 배선과 판정자 (N4 §5.3)
- fix(ssh): 스모크가 띄운 sshd 가 며칠씩 살아남았다 — 새는 자리 둘을 함께 막는다
- fix(ssh): 테스트 하네스가 자식 셸을 못 거두고 waitpid 에서 영영 멈추던 것을 고친다
- docs(session-host): P4 완료 상태를 실제 gate와 맞춘다
- fix(session-host): checkpoint 실패 시 Quit을 취소한다
- docs(windows): §2m.75 — 검색 입력, 그리고 경계 테스트가 한글을 구한 이야기
- feat(windows): 사이드바 검색에 글자를 친다 — 죽어 있던 줄이 산다
- docs(windows): 어제 적은 검색 모델이 틀렸다 —
text_field가 아니라overlay_input이다 - test(session-host): verify tombstone relaunch persistence
- fix(cli): ssh 테스트가 CPU 를 태우는 고아를 남겼다
- test(session-host): verify duplicate checkpoint preservation
- fix(mobile): 새 연결에서 남은 요청과 셸에 실리는 runtime id
- docs(windows): 계획서가 "무엇이 남았나"의 단일 출처이기를 그만뒀다 — 되돌린다
- docs(windows): §2m.74 — ✕ 닫기, 그리고 열 배치가 갈려 있던 것
- feat(windows): 파일 카드의 ✕ 가 눌린다 — 그리고 열 배치를 중립으로 모았다
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.