2026-08-12
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru에서 cwd를 하나의 축으로 통일한 날입니다. 사이드바의 폴더·브랜치줄(#2112), 아카이브 범위 칩과 에이전트 대화 매핑(#2118), 컨트롤 플레인의 세션 목록 cwd(#2125)를 모두 소스 컨트롤과 같은 축에 합류시키고, 대화 매핑의 cwd 게이트는 provider별로 갈랐습니다. 이 규율을 주석이 아니라 게이트로 옮겨 CI가 보게 했고(#2121), host-backed Term에는 커널 cwd 폴백이 없다는 사실(#2130)과 낡은 OSC 7 결함(#2136)을 문서에 남겼습니다. 저장소 판정은 3-상태로 갈라 저장소가 아닌 폴더로 옮기면 옛 목록과 옛 브랜치를 버리게 하고, 브랜치 표시는 .git 이벤트로 갱신하게 했습니다(#2113).
편집기는 전날 열린 가로 스크롤 렌더 #2105를 병합하면서 적대적 검증을 3회차부터 7회차까지 이어 갔습니다. 오른쪽 경계가 반쪽을 그리던 것, 경계에서 위험 문자 표기가 사라져 §3.8이 뚫린 것, 그 4회차 수정이 정수 언더플로로 앱을 죽인 것, op 예산 부족이 프레임 전체를 죽이던 것을 고쳤고, 단위 테스트로만 잡히던 결함은 캡처로 고정했습니다. 이어 세로 스크롤을 시각 행 단위로 만들어 랩된 줄 중간에서도 멈추게 하고(#2111) 인덱스 누적 합이 u32를 넘으면 앱이 죽던 문제를 고쳤으며, 세로 스크롤바를 붙이고 편집기 뷰가 자기 배경을 그리도록 §4.1b를 신설했습니다(#2115). gutter만 혼자 fail-close로 남아 있던 예산 처리와 화면 오른쪽 끝에서 6px 떠 있던 스크롤바도 고쳤습니다. 마지막으로 파일을 디스크에서 실제로 읽어 문서로 여는 N1의 문서 쪽 절반을 넣고, 그 파일이 화면에 뜨는 것을 캡처로, 읽기 전용 판정을 테스트로 잡았습니다(#2119).
chrome에서는 면적 0 clip이 quad를 자르는 대신 통째로 그리던 뒤집힘을 없애고 도크 세그먼트를 얇게 하며 컨트롤 라벨을 측정값으로 앉혔습니다(#2110). claude 2.1.228의 반원 스피너를 running으로 인정하고 카드에 running 집계 배지를 되살렸다가(#2116), 그 배지를 sessions 토글 행으로 옮기고 배지 색 구간을 gutter 폭·줄·글리프까지 맞췄습니다(#2122). 모바일 작업은 deploy/mobile 브랜치에서 진행돼, 전날 열린 iOS·Android 어댑터 #2106과 키를 코어 인코더에 태우는 #2126이 그 브랜치에 병합됐고 main 반영은 아닙니다. iOS를 UITextInput으로 올리는 #2131, 커서를 그리는 #2133, 파이프라인 실패 뒤 렌더 루프 문제를 고치는 #2138은 같은 브랜치를 대상으로 이날 열렸습니다.
session-host는 socket cadence parity를 완성하고(#2114) scoped RPC decoder bridge와 bound RPC family 이관을 진행했으며, runtime connection 권위를 하나로 합쳤습니다(#2117). retryable generation release 보존, terminal generation cleanup 인계(#2124), terminal drain callback 권위 봉인(#2128), wire 전 attach cleanup 준비가 이어졌고, 재접속 전에 현재 admission을 닫고(#2132) 연결 incident 계약과 writer handoff를 정의했습니다(#2135). 종료 단계를 계측하고 정리 전에 창을 내리는 #2139와 CR0b incident artifact를 안전하게 남기는 #2140은 이날 PR이 열렸습니다.
공개 커밋 68개, 해당일 생성 또는 병합된 PR 32개를 정리했습니다. PR 생성 30개·병합 25개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- docs(cwd-axis): 레퍼런스 주장을 정정하고 낡은 OSC 7 결함을 기록한다
- feat(session-host): define incident writer handoff
- feat(session-host): define connection incident contract
- feat(session-host): close current admission before reconnect
- test(editor): 읽기 전용 판정을 실제로 지키는 테스트를 세운다
- docs(editor): 캡처가 판정하는 것을 좁힌다 — CRLF는 그 안에 없다
- docs(editor): 리가처 미해결에 이슈 번호를 단다
- test(editor): 디스크에서 읽은 파일이 화면에 뜨는 것을 캡처로 잡는다
- feat(editor): 파일을 실제로 읽어 문서로 연다 — N1의 문서 쪽 절반
- docs(session-host): host-backed Term에 커널 cwd 폴백이 없다는 사실을 적는다
- fix(control-plane): 세션 목록의 cwd를 GUI와 같은 축에서 답한다
- fix(sidebar): 배지 색 구간을 gutter 폭·줄·글리프까지 맞춘다
- fix(sidebar): running 집계 배지를 카드에서 sessions 토글 행으로 옮긴다
- fix(lab): 강제 에이전트 픽스처가 사이드바 rows를 다시 투영한다
- test(status-bar): bind resource visibility to item identity
- feat(session-host): prepare attach cleanup before wire
- test(session-host): run DTO drift in fresh artifact
- fix(session-host): validate drain marker on Linux
- feat(session-host): seal terminal drain callbacks
- test(session-host): bind preparation drift to DTO role
- test(session-host): define terminal drain callback red gate
- feat(session-host): hand off terminal generation cleanup
- test(chrome): cwd 축 규율을 주석에서 게이트로 옮긴다
- feat(session-host): preserve retryable generation releases
- fix(agent): 대화 매핑의 cwd 게이트를 provider별로 가른다
- test(chrome): 헛돌던 재투영 테스트를 비활성 Term으로 다시 세우고 낡은 주석을 고친다
- fix(agent): 아카이브 범위 칩의 cwd도 같은 축에 합류시킨다
- feat(session-host): unify runtime connection ownership
- fix(editor): gutter도 예산이 모자라면 줄인다 — 혼자 fail-close로 남아 있었다
- fix(editor): 스크롤바가 화면 오른쪽 끝에서 6px 떠 있었다
- test(lab): 캡처의 "아무도 안 그린 자리"를 편집기 배경과 다른 색으로 둔다
- feat(editor): 편집기 뷰가 자기 배경을 그린다 — §4.1b 신설
- docs(editor): 스크롤바 색 주석이 다크 테마를 전제했다
- feat(editor): 세로 스크롤바를 붙인다 — 범위는 시각 행이다
- feat(sidebar): 카드에 종류별 running 집계 배지를 되살린다
- fix(agent): claude 2.1.228의 반원 스피너를 running으로 인정한다
- chore(boundary): main 리베이스 뒤 digest를 재생성한다
- test(chrome): 탐색기 root 추종을 끄고 파일 트리 retained scan 테스트를 결정적으로 만든다
- fix(sidebar): 에이전트 행 줄 수도 cwd가 늦게 올 때 다시 투영한다
- test(chrome): 상태바 빈 구간 테스트가 항목 유무에 흔들리지 않게 한다
- fix(sidebar): 폴더·브랜치줄을 소스 컨트롤과 같은 cwd 축에 합류시킨다
- fix(status-bar): 브랜치 표시를
.git이벤트로 갱신한다 - fix(scm): 저장소 아닌 폴더로 옮기면 옛 목록을 버린다
- docs(editor): N1 잔여 표에서 빠진 둘을 채운다 — 스레딩과 pane 표시
- test(editor): 낡은 스크롤 위치를 캡처로 고정한다 — 화면에 보이는데 단위 테스트만 있었다
- fix(editor): 적대적 검증 3회 더 — 인덱스 누적 합이 u32를 넘으면 앱이 죽었다
- docs(editor): 절단 보고 계약을 주석·문서에 맞춘다
- fix(editor): 코드 리뷰가 잡은 열을 고친다 — 그중 둘은 내 테스트가 가려 주고 있었다
- feat(editor): 세로 스크롤을 시각 행 단위로 만든다 — 랩된 줄 중간에서 멈춘다
- feat(session-host): complete socket cadence parity
- feat(session-host): settle pre-response cadence
- test(session-host): define socket cadence parity
- feat(session-host): migrate bound RPC families
- feat(session-host): add scoped RPC decoder bridge
- test(chrome): 도크 시각 골든을 갱신하고 헤더 사각지대를 메운다
- test(chrome): 제목 소멸 가드가 조용히 무의미해지지 않게 잠근다
- refactor(platform): 도크 뷰포트 측정 버퍼를 계약에서 파생시킨다
- fix(chrome): 도크 세그먼트를 얇게 하고 컨트롤 라벨을 측정값으로 앉힌다
- fix(chrome): 면적 0 clip이 quad를 자르는 대신 통째로 그리던 뒤집힘을 없앤다
- docs(editor): 가로 스크롤 근거의 문서 참조를 고친다
- docs(editor): 예산이 모자랄 때의 계약을 §4에 적는다
- test(editor): 랩 + 세로 스크롤 조합에 가드를 넣는다
- fix(editor): 적대적 검증 7회차 — op 예산 부족이 아직 프레임 전체를 죽였다
- test(editor): §3.8 경계를 캡처로 고정한다 — 4·5회차 결함이 단위 테스트로만 잡혔다
- fix(editor): 적대적 검증 5회차 — 4회차 수정이 정수 언더플로로 앱을 죽였다
- fix(editor): 적대적 검증 4회차 — 경계에서 위험 문자 표기가 사라져 §3.8이 뚫렸다
- fix(editor): 적대적 검증 3회가 잡은 셋을 고친다 — 오른쪽 경계가 반쪽을 그렸다
- feat(editor): 가로 스크롤 렌더를 붙인다 — 랩의 반대편
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.