2026-08-12
요약 (AI 작성)
cwd 를 하나의 축으로 통일한 날입니다. 사이드바의 폴더·브랜치줄, 에이전트 대화 매핑, 아카이브 범위 칩, 컨트롤 플레인의 세션 목록 cwd 를 모두 소스 컨트롤과 같은 축에 합류시키고, 대화 매핑의 cwd 게이트는 provider 별로 갈랐습니다. 이 규율을 주석이 아니라 게이트로 옮겨 CI 가 보게 했고, host-backed Term 에는 커널 cwd 폴백이 없다는 사실과 낡은 OSC 7 결함을 문서에 기록했습니다. 이어서 저장소 판정을 3-상태로 갈라 저장소가 아닌 폴더로 옮겼을 때 옛 목록·옛 브랜치가 남지 않게 하고, 브랜치 표시를 .git 이벤트로 갱신하도록 했습니다.
편집기는 N1 의 문서 쪽 절반을 채웠습니다. 파일을 실제로 디스크에서 읽어 문서로 열고, 그 파일이 화면에 뜨는 것을 캡처로 잡았으며 읽기 전용 판정을 실제로 지키는 테스트를 세웠습니다. 세로 스크롤을 시각 행 단위로 만들어 랩된 줄 중간에서도 멈추게 하고 세로 스크롤바를 붙였으며, 편집기 뷰가 자기 배경을 그리도록 §4.1b 를 신설했습니다. 적대적 검증은 3회차부터 7회차까지 이어지며 뼈아픈 것들을 잡아냈습니다 — 오른쪽 경계가 반쪽을 그리던 것, 경계에서 위험 문자 표기가 사라져 §3.8 이 뚫린 것, 그 4회차 수정이 정수 언더플로로 앱을 죽인 것, 인덱스 누적 합이 u32 를 넘으면 앱이 죽던 것, op 예산 부족이 프레임 전체를 죽이던 것까지. 단위 테스트로만 잡히던 결함들은 캡처 게이트로 옮겨 고정했고, gutter 만 혼자 fail-close 로 남아 있던 예산 처리도 다른 곳과 맞췄으며 예산 부족 시의 계약을 §4 에 적었습니다. 스크롤바가 화면 오른쪽 끝에서 6px 떠 있던 것과 낡은 스크롤 위치도 캡처로 고정해 고쳤습니다.
모바일 어댑터가 처음 등장한 것도 이날입니다. iOS·Android 어댑터를 제품 구조로 세우고(M0~M2), 키를 코어의 인코더에 태우고(M4a2) 커서를 그렸으며(M4a5), iOS 를 UITextInput 으로 올리면서 한글이 왜 그래도 안 되는지를 실측으로 남겼습니다(M2b). 파이프라인 실패 뒤에도 렌더 루프를 걸고 있던 문제도 고쳤습니다. session-host 는 연결 incident 계약과 writer handoff 를 정의하고, 재접속 전에 현재 admission 을 닫으며 runtime connection 권위를 하나로 합쳤고, terminal drain 콜백 권위 봉인과 generation cleanup 인계, retryable release 보존, socket cadence parity 완성, scoped RPC decoder bridge 와 bound RPC family 이관을 진행했습니다. chrome 에서는 면적 0 clip 이 quad 를 자르는 대신 통째로 그리던 뒤집힘을 없애고, 도크 세그먼트를 얇게 하며 컨트롤 라벨을 측정값으로 앉혔습니다. 사이드바는 running 집계 배지를 카드에서 sessions 토글 행으로 옮기고 배지 색 구간을 gutter 폭·줄·글리프까지 맞췄으며, claude 2.1.228 의 반원 스피너를 running 으로 인정하도록 판정을 고쳤습니다.
커밋
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): 가로 스크롤 렌더를 붙인다 — 랩의 반대편