2026-08-20
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru가 에이전트 훅 축을 열고 Windows에 파일 트리와 소스 컨트롤을 띄운 날입니다. 훅을 상태·알림·턴의 단일 소스로 두는 계약을 먼저 적고(#2465), 훅 이벤트를 나르는 채널의 순수 코어(AH1, #2471)를 세워 적대적 검증으로 굳힌 뒤(#2476), claude의 settings.json(#2482)과 codex(#2495)에 훅을 설치하고 신뢰를 기록했습니다. 게이트는 기본 꺼짐이고, 끄면 설치한 것을 지웁니다(#2498). 컨트롤 플레인은 적대적 검증을 여러 회차 거쳐 원격 축을 SSH 채널 하나 더로 정하고(S10a, #2472), 같은 연결에 컨트롤 채널을 열고(S10b-1, #2481), ABI·펌프가 그것을 알게 하고(S10b-2, #2493), 폰이 닿을 중계 maru control --stdio를 냈습니다(S10c, #2503). 서버가 열자는 채널은 §5.1대로 거절하게 했습니다.
Windows는 파일 트리가 화면에 뜨고(#2473) 선택 띠까지 그려졌으며(#2479), 그리기 스모크를 27초에서 4초로 줄였습니다. git을 부를 캡처 러너를 CreateProcessW와 익명 파이프로 세우고(#2484) 환경 상속, stdin NUL, stdout·stderr 분리 같은 함정을 적대적으로 검증한 뒤, git 백엔드(#2496)와 스테이지·커밋 쓰기 경로(#2501)가 Windows에서 돌고 소스 컨트롤이 화면에 떴습니다(#2506). 죽은 경로를 그린 소스 컨트롤 스모크는 되돌렸고(#2508), 기본으로 쓰이는 PowerShell 5.1을 실제로 띄워 봤습니다(#2462). session-host는 CR5 다중 runtime ledger 계약(#2474)과 runtime set의 reconnect job 결속, 다중 runtime 퇴역 권위 준비를 거쳐 ordered runtime reconnect 트랜잭션을 완성했습니다(#2505).
모바일은 전날 열린 첫 접속 서버 지문 승인 #2459를 병합하고, 왜 못 붙었는지 화면이 말하게 했으며(#2464), 조합 중인 한글을 편집 칸에 보이게 하고 확정을 잃지 않게 했습니다(#2466). 안드로이드 ELF를 16KB 페이지로 정렬하고, 테마를 모든 화면에 적용했습니다. 폰트는 빈 칸을 공백으로 셰이핑해 줄 뒤쪽 합자가 죽는 것을 막고(#2469) 4글자 합자의 왼쪽 오버항을 3칸까지 허용했습니다(#2477). 소스 컨트롤 탭 개수를 목록 모델 없이 세어 매 프레임 378µs를 12.8µs로 줄였고(#2489), 누른 적 없는 버튼의 뗌이 링크 Cmd+클릭을 두 번 열던 문제(#2499)와 이모지 cluster 묶기를 text.emoji-width=wide에서도 켜는 수정(#2500)도 들어갔습니다. 언어를 박은 문자열에 게이트를 세우는 #2491과 네이티브 편집기에서 텍스트를 고르고 복사하는 #2507은 이날 PR이 열렸습니다.
공개 커밋 118개, 해당일 생성 또는 병합된 PR 51개를 정리했습니다. PR 생성 49개·병합 49개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- revert(windows): 죽은 경로를 그린 소스 컨트롤 스모크를 되돌리고, 왜 틀렸는지 적는다
- feat(windows): 소스 컨트롤이 Windows 화면에 뜬다 (W8.4 마무리)
- feat(session-host): complete ordered runtime reconnect transactions
- fix(terminal): 이모지 cluster 묶기를 text.emoji-width=wide 에서도 켠다
- feat(session-host): publish shared reconnect client once
- fix(cli): 중계는 POSIX 에서만 컴파일된다
- fix(cli): 중계를 cli 순수성 재고에 올린다
- feat(control-plane): 폰이 닿을 중계를 낸다 —
maru control --stdio(S10c) - feat(session-host): prepare host-wide runtime retirement
- feat(windows): git 쓰기 경로(스테이지·언스테이지·커밋)가 Windows 에서 돈다 (W8.4)
- fix(input): 누른 적 없는 버튼의 뗌을 앱에 보내지 않는다 — 링크 Cmd+클릭이 브라우저를 두 번 열었다
- feat(chrome): 탭 바 상태를 강제하는 캡처 훅을 넣는다(탭 수·버튼 호버)
- fix(windows): 캡처 러너를 maru 배럴로 가져온다 — 상대 경로가 macOS 빌드를 깼다
- fix(windows): 캡처 러너 import 를 Windows 전용 함수 안으로 옮긴다 — macOS 빌드가 깨졌다
- fix(windows): macOS CI 를 깬 git_backend 테스트 등록을 되돌린다
- feat(windows): git 백엔드가 Windows 에서 돈다 (W8.4)
- feat(agent-hooks): 게이트를 끄면 설치한 것을 지운다
- feat(agent-hooks): codex 에 훅을 설치하고 신뢰를 기록한다 (AH2b-4)
- feat(agent-hooks): codex 훅 신뢰 값을 계산한다 (AH2b-2·3)
- feat(agent-hooks): 이벤트 세트를 provider 별로 가른다 (AH2b-1)
- test(mobile): 반쯤 연 컨트롤 채널이 남지 않는 것을 잰다
- fix(mobile): 순서 실수를 세션 실패로 내리지 않는다
- fix(mobile): 컨트롤 상수 드리프트를 게이트가 잡게 한다
- docs(mobile): 컨트롤 stderr 포인터의 수명을 헤더에 적는다
- docs(mobile): 컨트롤 훅 규칙을 고친 대로 적는다
- fix(mobile): 컨트롤 훅이 없으면 채널을 아예 안 연다
- feat(mobile): ABI·펌프가 컨트롤 채널을 안다 (S10b-2)
- fix(windows): 캡처 러너가 자식 stdin 을
NUL로 준다 —null핸들은 EOF 가 아니다 - test(windows): 캡처 러너의 환경 처리를 적대적으로 검증한다 — 빈 값과 상속 온전성
- perf(scm): 탭 개수를 목록 모델 없이 센다 — 매 프레임 378µs 를 12.8µs 로 (적대적 검증 4회차)
- fix(mobile): 컴파일 진단 문구를 i18n 원장에 올린다
- docs(ssh): 채널 거절 경로는 실서버로 못 잰다 — 그 이유와 함께 적는다
- docs(ssh): 모르는 번호 규칙과 채널 거절 규칙을 서로 잇는다
- fix(mobile): Step 에 필드가 늘면 absorb 에서 컴파일이 멈춘다
- fix(ssh): 서버가 채널을 열자고 하면 제대로 거절한다 (§5.1)
- feat(windows): 캡처 러너가 환경을 상속한 뒤 덮어쓴다 — 없으면 git 이 자격 증명을 물으며 멈춘다
- feat(session-host): bind CR5 runtime set to reconnect job
- fix(font): 글리프 격자 덤프에 실제 셀 메트릭을 실어 배치를 믿을 수 있게 한다
- test(settings): 문구를 박아 둔 단언 여섯을 키로 바꾼다 — CI 가 잡았다
- fix(i18n): 한 화면에 서는 문구 중 일부만 옮겨 언어가 섞였다 + digest 를 반사 자리로 좁힌다
- refactor(boundary): 원장 판정 규칙을 한 곳이 소유하게 한다
- docs(windows): §2m.8 의 '합친다' 서술을 스트림 축으로 맞춘다
- fix(windows): 캡처 러너가 stdout·stderr 를 가려 받는다 — 합치기는 잡음을 데이터로 만든다
- feat(windows): git 을 부를 캡처 러너를 세운다 — CreateProcessW + 익명 파이프 (W8.4 준비)
- fix(agent-hooks): 리베이스 뒤 digest 를 다시 재고 Codex 세트 차이를 적는다
- docs(agent-hooks): Codex trusted_hash 를 «커맨드 해시» 라고 단정하지 않는다
- feat(agent-hooks): claude settings.json 에 훅을 설치한다 (AH2a-2)
- fix(agent-hooks): 설치 판정이 집합 불일치와 필드 드리프트를 잡게 한다 (AH2a-1 검증)
- feat(agent-hooks): 훅 설치 계획 판정을 순수 층으로 만든다 (AH2a-1)
- fix(scm): 탭 개수와 스크롤 상한을 활성 탭에서 떼어낸다 — 히스토리가
(0)이고 안 굴렀다 - fix(session-host): admit canonical empty metadata DTO
- feat(session-host): define CR5 runtime ledger contract
- fix(ssh): 열지 않은 채널 테스트의 기대 오류를 실제 이름으로
- test(ssh): 두 채널이 한 조각에 섞여 와도 각자 간다
- test(ssh): 무보호였던 컨트롤 채널 규칙 셋을 막는다
- docs(control-plane): 적대적 검증 — RFC 원문 대조로
hello판정 규칙을 고친다 - fix(ssh): 닫은 컨트롤 채널은 버퍼를 더 요구하지 않는다
- docs(ssh): 컨트롤 채널의 두 상한을 계약에 적는다 — 이름으로
- fix(ssh): 컨트롤 버퍼도 화면과 같은 배압 규칙을 따른다
- docs(ssh): 검증 행렬에 컨트롤 채널 두 회차를 적는다
- test(ssh): 컨트롤 채널을 실서버 두 회차로 못박는다 (S10b-1)
- feat(ssh): 같은 연결에 컨트롤 채널을 하나 더 연다 (S10b-1)
- fix(chrome): 탭바 ✕·‹·› 를 3칸 버튼의 가운데로 옮겨 좌우 패딩을 맞춘다
- feat(windows): 파일 트리 선택 띠가 화면에 뜬다 — 새 쿼드 파이프라인 없이 (W8.2 ⒞)
- docs: 매트릭스의 테스트 개수를 실제와 맞춘다
- docs: §4 하위 절이 역순으로 들어가 있던 것을 바로잡는다
- fix(agent-hooks): @compileError 메시지를 영어로 옮긴다
- test(agent-hooks): 테스트 진단 메시지를 영어로 옮긴다
- fix(agent-hooks): provider 이름이 줄을 깨뜨릴 수 있으면 거절한다
- docs: 검증 매트릭스를 AH1 구현 결과로 갱신한다
- fix(agent-hooks): 빈 out 으로 부르면 무한 루프가 되던 자리를 막는다
- feat(agent-hooks): 훅 타임아웃 값을 코드가 소유한다
- test(agent-hooks): 형 변화 방어가 실제로 도는지 본다
- test(agent-hooks): 세트-파서 드리프트를 막고 게이트가 개수를 세게 한다
- fix(agent-hooks): 커서 API 가 오용을 부르던 자리를 고친다
- fix(agent-hooks): 커맨드와 파서의 계약 두 곳을 묶는다
- fix(agent-hooks): 패치 본문의 가짜 표식을 경로로 읽지 않는다
- fix(agent-hooks): Codex 는 편집 경로를 패치 텍스트로 준다 (실측 반영)
- fix(agent-hooks): pane 식별자 검증과 인터리브 복구를 더한다 (AH1 재검증)
- fix(font): 4글자 합자의 왼쪽 오버항을 3칸까지 허용해 첫 글자 잘림을 없앤다
- perf(windows): 그리기 스모크를 27 초에서 4 초로 줄이고 캡처 하네스를 저장소에 둔다 (W8.2 ⒝ 적대적 검증)
- docs(control-plane): 적대적 검증 15회차 — 남은 주장 전수 대조
- docs(control-plane): 적대적 검증 14회차 — 처음 읽는 사람의 순서
- docs(mobile-ux): 적대적 검증 13회차 — 결정이 남긴 낡은 자리
- docs(control-plane): 적대적 검증 12회차 — 방금 만든 규칙을 다시 공격
- docs(control-plane): 적대적 검증 11회차 — 최악의 경우와 보안 문서 충돌
- docs(control-plane): 적대적 검증 10회차 — 문서가 스스로 모순되는가
- docs(control-plane): 적대적 검증 9회차 — 게이트가 정말 재는가
- docs(control-plane): 적대적 검증 8회차 — 확정한 것과 적힌 것 대조
- docs(control-plane): 적대적 검증 7회차 — 문서가 코드에 대해 하는 주장 대조
- docs(control-plane): 적대적 검증 6회차 — 이 문서만으로 만들 수 있나
- docs(control-plane): 적대적 검증 5회차 — 다른 계약과의 충돌
- docs(control-plane): 적대적 검증 4회차 — 규칙을 뒤집어 본다
- docs(control-plane): 적대적 검증 3회차 — 우리 쪽에서 막히는 자리 넷
- docs(control-plane): 적대적 검증 2회차 — 안 적은 것 다섯을 채운다
- docs(control-plane): 적대적 검증으로 드러난 셋을 계약에 반영한다
- docs(control-plane): 원격 축을 정한다 — SSH 채널 하나 더 (S10a · M3a)
- test(windows): 그리기 스모크가 내용을 판정하고 크기 변경을 따라간다 (W8.2 ⒝ 적대적 검증)
- feat(windows): 파일 트리가 Windows 화면에 뜬다 (W8.2 ⒝)
- fix(agent-hooks): 회전 감지와 검증 두 곳의 구멍을 메운다 (AH1 적대적 검증)
- feat(agent-hooks): 훅 이벤트를 나르는 채널의 순수 코어를 만든다 (AH1)
- test(mobile): 데모 바이트가 들고 있던 판정을 테스트로 옮긴다
- fix(font): 빈 칸을 공백으로 셰이핑해 줄 뒤쪽 합자가 죽는 것을 막는다
- feat(mobile): 테마를 모든 화면에 · 데모 텍스트 제거 · 자판 버튼 (사용자 요청)
- refactor(session): 파일 트리의 그리기와 히트테스트를 한 산술로 모은다 (W8.2 ⒝ 준비)
- fix(mobile): 조합 중인 한글을 편집 칸에 보이게 하고 확정을 잃지 않는다
- docs: 에이전트 훅을 상태·알림·턴의 단일 소스로 두는 계약을 적는다
- feat(mobile): 왜 못 붙었는지 화면이 말한다 (S9b-3b)
- fix(android): 기기에서 도는 ELF 를 16KB 페이지로 정렬한다
- docs: "먼저 재 보고 정한다" 는 독립된 선택지가 아니다
- docs: "좁히면 신호가 약해진다" 는 내 프레이밍이 틀렸다
- docs: count 와 digest 의 값어치를 전수로 쟀다 — 236 중 5 대 207
- docs: 원장 충돌 빈도 주장을 실측으로 좁힌다
- fix(tools): digest 갱신 출력이 새 해시를 잘라 보여 주고 있었다
- feat(ssh): 처음 붙는 서버의 지문을 보여 주고 승인받는다 (S9b-3)
- test(windows): 기본으로 쓰이는 PowerShell 5.1 을 실제로 띄워 본다 (W7 후속)
- docs(windows): "⒝ 는 배선만 남았다" 던 내 문장을 실측으로 뒤집는다 (W8.2)
- docs(scm):
가져오기가 세 탭에서 눌린다는 진술을 사실로 고친다
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.