2026-08-24
요약 (AI 작성)
편집 버퍼를 persistent rope 와 delta 로 세우고 selection 을 같은 연산에서 밀게 한 날입니다(§3.0·§3.3). @maru/* 는 마커와 장식(여러 매치 동시 칠하기), 앱이 자기 패턴을 주입하는 링크 규칙, 캔버스가 못 하는 접근성·터치를 DOM 이 맡는 구조를 얻었고, 장식이 무한 렌더 루프를 만들어 유휴 1638fps 였던 것을 2fps 로, 워커 모드에서 open() 직후 22ms 흐리던 것을 잡았습니다.
에이전트 훅은 신원에 host 소유 자리를 만들고(계약이 GUI 만 알고 있었다) host 가 자기 신원으로 훅 경로를 채우며 훅 로그 칸을 만들고 치우고 GUI 가 그것을 읽게 해, host-backed 터미널이 훅 모드로 살게 됐습니다. 훅을 턴 경계 트리거로 삼고(AT1) 턴 제목을 링에 싣습니다(AT2). maru 를 두 개 띄우면 같은 훅 로그를 물던 것과 업그레이드 뒤 뜬 자식만 신원을 못 받던 것도 고쳤습니다.
Windows 는 도크에 파일 트리가 뜨고(아틀라스를 나눠 쓴다) 입력이 갈리고 디바이더로 도크 폭이 바뀌고 도크가 파일 트리↔소스 컨트롤을 갈아 끼우며, 창이 사이드바 띠까지 셋으로 갈리고 프레임리스 창·테마 색·아이콘·헤더 아이콘 줄이 섰습니다. 탐색기는 CIM §9 조건을 항목별로 닫고 Chrome Lab 시나리오와 시각 골든을 얻었으며, 밀려난 세션이 조용히 사라지던 것에 신원 자취를 남기고, 공개 attach 루프를 실제 TTY 에 연결하고 localhost SSH 로 번들 attach 를 검증했습니다.
커밋
ohah/maru
- fix(packages): 워커 모드에서 open() 직후 화면이 22ms 흐렸다
- refactor(scm): 캡처 전용 탭 강제를 제품 tick 에서 걷어낸다
- docs(scm): 하니스가 커밋 tree 를 빌리는 이유와 그 한계를 적는다
- test(scm): 캡처 하니스가 진짜 tree 와 놓친 턴을 심는다
- fix(windows): 그리지 않은 행이 눌렸다 — 그린 수를 히트테스트에 준다
- feat(windows): 입력이 갈린다 — 포인터는 사각형으로
- fix(mobile): 설정 화면의 숫자 입력과 키보드 자리
- test(windows): 속 빈 판정 둘과, 존재하지 않던 결함 하나
- feat(windows): 창이 터미널과 도크로 갈린다
- refactor(scm): 활성 링을 한 번만 조회하고, 놓친 턴을 지우지 않는 이유를 적는다
- feat(scm): 턴 링의 주인을 세션으로 옮긴다 (AT0)
- docs(structure): debug_fixtures 게이트 수를 다시 잰다(57 → 68)
- refactor(chrome): 상태바 캡처 게이트 넷을 제품 tick 에서 걷어낸다
- fix(test): 이음매 테스트를 집계 스위트에서 뺀다 — 프로세스 전역을 흔든다
- fix(test): 내가 더한 테스트가 뒤 테스트들의 HOME 을 지운 채로 나갔다
- test(agent-hooks): 이름의 이음매를 건너는 테스트가 하나도 없었다
- fix(agent-hooks): 업그레이드 뒤 뜬 자식만 훅 신원을 못 받고 있었다
- docs(plans): 이미 끝난 일을 «남았다» 고 적은 줄 셋을 고친다
- feat(editor): 한 번의 편집이 selection을 함께 민다 — delta와 역연산 (§3.3)
- feat(editor): 편집 가능한 버퍼가 섰다 — persistent rope, 스냅숏이 O(1)이다 (§3.0)
- docs(windows): 사이드바 ⒝ 결정 — Windows 관례를 따른다
- docs(windows): 사이드바 ⒝ 의 전제가 틀렸다 — 맥은 이미 프레임리스다
- docs(windows): 왼쪽 사이드바를 계획에 넣는다 — 두 번째 공백
- fix(session): 밀려난 기록을 목록이 찬 뒤에도 말한다 (적대적 검증)
- docs(chrome): 없는 불변식에 이름 붙인 주석 둘과 게이트 수를 고친다
- fix(session): 밀려난 세션이 조용히 사라졌다 — 신원 자취를 남긴다
- fix(windows): macOS 호출부가 usize 인데 공유 인자가 u32 였다 — 뿌리를 막는다
- feat(windows): 사이드바 헤더에 아이콘 줄이 뜬다
- test(mobile): 갈라 놓은 두 손잡이를 계약으로 고정한다
- fix(mobile): 글자 크기와 줄 높이를 갈라 놓는다
- fix(packages): 장식이 무한 렌더 루프를 만들고 있었다
- refactor(packages): 장식 비교를 한 함수로 모은다 — 두 겹 방어의 대가를 없앤다
- fix(file-tree): 발행 신선도가 기하도 보게 한다 — resize 뒤의 클릭이 죽었다
- fix(test): 새 e2e 테스트의 세 자리를 굳힌다 — 뮤테이션·흔적·여유
- test(agent-hooks): 「수동 검증」 두 항목을 자동으로 만든다
- feat(lab): 작은 터미널 폰트 축을 시나리오와 골든으로 연다
- feat(metrics): advance 의 소수까지 ABI 로 받아 근사를 없앤다
- fix(session-host): reuse strict CR6e validators
- docs(agent-hooks): AT1 서술을 사실에 맞추고, 실측이 뒤집은 단정 하나를 고친다
- feat(session): 턴 식별자를 링에 싣는다 (AT1, 계약 §3.1)
- feat(agent-hooks): 세션이 시작되면 base 를 찍는다 — 첫 턴이 안 뜨던 것 (AT1)
- fix(agent-hooks): 훅 모드에 신원 소스가 없었다 — payload 가 정하게 한다 (AT1)
- fix(scm): 예약을 총합에서 한 번만 올린다 — 열마다 올리면 틈이 벌어진다
- fix(scm): 이어 그리는 글자의 자리를 role 크기로 잡는다 — 상한이 작은 폰트를 못 덮었다
- docs(windows): 로컬 초록이 중간 커밋 둘을 깨 놓고 있었다
- test(windows): 판정 셋이 죽어 있었다 — 적대적 검증 3 회
- feat(windows): 프레임리스 창과 캡션 버튼
- fix(windows): 파일 트리에 아이콘이 하나도 없었다 — 분류가 macOS 에 갇혀 있었다
- test(renderer): 아이콘 codepoint 를 이름으로 고른다
- fix(renderer): 합성 글리프가 한 아틀라스 슬롯을 공유했다 — codepoint 로 키잉한다
- feat: 크롬 색이 테마를 탄다 — §2m.33 의 부채를 갚는다
- fix(windows): 상대 import 가 macOS 아티팩트를 깼다 — 배럴로 든다
- feat(windows): 사이드바 카드에 글자가 뜬다 — 인코더/디코더 한 쌍을 뺀다
- feat(agent-hooks): GUI 가 host 칸을 읽는다 — host-backed 터미널이 훅 모드로 산다
- feat(packages): 링크 규칙 — 앱이 자기 패턴을 주입한다
- fix(session-host): defer TX after control completion
- feat(session-host): add P5d SSH release gate
- docs(session-host): define P5d SSH release gates
- docs(file-tree): 셀 투영의 소비자 서술을 사실에 맞춘다 — 삭제 대상이 아니다
- refactor(packages): 코어에 카운터를 더하는 대신 이미 있는 것을 쓴다
- fix(session-host): TerminalCore 새 필드를 handoff 목록과 코덱에 등록한다
- feat(packages): 마커와 장식 — 여러 매치를 동시에 칠한다
- feat(agent-hooks): host 가 자기 신원으로 훅 경로를 채운다 — 발급 순서를 당겨서
- docs(session-host): 백로그 목록이 이미 구현된 셋을 붙들고 있었다
- docs(development-commands): 파일 하나만 돌리는 개발 루프를 적는다
- docs(agent-hooks): codex 오류 턴을 «미검증»에서 «확정된 한계»로 종결한다
- fix(agent-hooks): maru 를 두 개 띄우면 두 인스턴스가 같은 훅 로그를 물던 것
- feat(session-host): 공개 attach 루프를 연결한다
- feat(windows): 도크에 파일 트리가 뜬다 — 아틀라스를 나눠 쓴다
- test(scm): 목록 타이포 변경에 맞춰 도크 시각 골든을 갱신한다
- feat(scm): 소스 컨트롤 파일 행을 목록 타이포·전경 위계로 옮긴다
- feat(agent-hooks): 훅 신원에 host 소유 자리를 만든다 — 계약이 GUI 만 알고 있었다
- test(file-tree): 세대만 오른 뒤의 클릭을 고정한다 — 원래 죽어 있었다
- feat(file-tree): CIM §9 조건을 항목별로 닫는다 — 창 비활성과 발행 세대
- fix(windows): 창 밖에서 떼면 도크가 창을 삼켰다 — 유효 크기를 되쓴다
- feat(windows): 디바이더를 끌면 도크 폭이 바뀐다
- feat(packages): 접근성과 터치 — 캔버스가 못 하는 일을 DOM 이 한다
- revert(lab): 잡음 예산을 되돌린다 — 진단이 틀렸고 러너는 0 픽셀로 맞는다
- fix(lab): 번들 폰트를 구성원까지 등록하고, 잡음과 회귀를 나눠 본다
- fix(lab): 도크 골든을 제품 폰트로 찍는다 — 그동안 지키지 못하던 축이 결함을 드러냈다
- fix(packages): 조합 중 Cmd 를 통째로 삼키던 것 — 바이트 경로만 막는다
- fix(packages): IME 회귀 둘 — 조합이 두 번 보이고, Cmd 조합이 글자를 뒤집었다
- fix(packages): 데모가 안 뜨던 것 — 구독을 마운트 뒤로 옮기고 스모크를 세운다
- feat(chrome): 밀려난 턴 기록 고지를 캡처로 찍는다
- feat(windows): 도크가 뷰를 갈아 끼운다 — 파일 트리 ↔ 소스 컨트롤
- feat(windows): 창이 셋으로 갈린다 — 사이드바 띠
- fix(mobile): 한글이 완성되는 대로 나가고, 지우면 실제로 지워진다
- docs: 편집기 검색이 들어왔는데 그것을 서술하는 문서 셋이 낡았다
- fix(editor): 5·6라운드 검증 — 차단 결함 하나, 무판정 축 넷, 그리고 깎아내기 (§5.1)
- fix(editor): 4라운드 검증 — 낡은 값으로 가운데를 잡던 결함, 무판정 축 넷, 검증 도구 구멍 넷 (§5.1)
- fix(editor): 3라운드 검증 — 과대 주장 세 번째, 판정 안 하던 판정자 셋, 영속 산출물 (§5.1)
- fix(editor): 2라운드 검증 — 내가 들여온 회귀 둘, 세그폴트 하나, 뚫린 판정자 넷 (§5.1)
- fix(editor): 적대적 검증이 잡은 것 — 제품 결함 8, 판정 못 하던 판정자 3, 거짓 주장 4 (§5.1)
- feat(editor): ⌘F가 편집기 문서를 검색한다 — 있던 기능이 아니라 조용히 틀린 것이었다 (§5.1)
- fix(agent-hooks): 남은 호출부 하나가 옛 신원 타입을 넘기고 있었다
- fix(agent-hooks): 판정에 유예와 위장 방어를 더한다 — 남은 두 창을 덮는다
- fix(agent-hooks): 살아 있는 host 의 로그를 지울 뻔했다 — 판정 근거를 바꾼다
- feat(agent-hooks): host 가 자기 훅 로그 칸을 만들고 치운다
- feat(session-host): complete P5c3d compatibility gate
- test(runner): 「골라졌는가」와 「돌았는가」는 다른 질문이다 — 통과 수도 센다
- docs(lab): 도크 시나리오의 face 서술을 단일 출처와 맞춘다 — 제품은 사용자 폰트다
- feat(file-tree): 스크롤된 트리 시나리오를 더한다 — 부분 가림 행이 눌리지 않는지
- docs(file-tree): 행 card 주석이 가리키던 호버 색의 주인을 사실로 고친다
- feat(file-tree): Chrome Lab 탐색기 시나리오와 시각 골든 — 첫 캡처에서 스펙 위반을 잡았다