2026-07-12

날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.

요약 (AI 작성)

maru 컨트롤 플레인은 에이전트 브라우저 제어 프로토콜(5f)을 문서로 먼저 정리한 뒤 곧바로 구현했습니다. §9.4 프로토콜 리뷰와 §9.5 구현 설계, 3차 전수조사 정정, D3·D4·D5 결정 확정(#1326, #1327, #1328) 위에, 이벤트 구독·매칭 코어 EventBroker(#1329)와 응답·이벤트 통합 큐 OutboundQueue(#1330)를 만들었습니다. 서버는 직렬 accept를 연결당 스레드로 바꾸고(#1331), auth 한 번 뒤 같은 연결로 요청을 이어 받는 지속 세션(#1332), 스레드 안전한 OutboundChannel과 연결당 reader·writer 두 스레드 구조(#1334, #1335)로 재구성됐습니다.

이벤트는 메인 스레드 전용 SubscriberRegistry와 연결 수명 배선(#1337, #1338), browser.subscribe 배선(#1339), WKWebView url KVO로 browser.navigated를 보내는 처리(#1342)를 거쳐 실제로 흐르게 됐고, loadState·dialog·crashed·closed 이벤트와 서버 SIGPIPE 방어가 더해졌습니다(#1345). 권한 쪽은 세션 cap 누적(#1348, #1349), 쿠키·스토리지 열람을 분리한 browser_storage scope(#1350), browser.getCookies(#1351)로 이어졌습니다. 이어 capability 발급 UX를 pane 단위 확인 grant(Model B)로 개정하고(#1353), grant 저장소와 인가 합성, 확인 대기 요청 흐름, 실제 사용자 확인 모달까지 1e-confirm 단계를 모두 병합했습니다(#1354부터 #1360). 18차부터 22차까지 매 단계 리뷰 결함 수정도 함께 들어갔습니다.

앱 쪽에서는 파일·이미지·텍스트를 어느 pane에 떨어뜨려도 활성 pane에만 들어가던 회귀를 고치고, 붙여 넣기 대상을 큐에 넣는 시점에 고정했습니다(#1344). ESC로 에이전트를 끊으면 사이드바 스피너가 계속 진행 중으로 남던 버그는 인터럽트 감지를 넣고 리뷰 두 차례로 오탐을 줄여 고쳤습니다(#1347). theme.min-contrast는 다크 배경 위 어두운 전경도 보정하도록 양방향으로 넓히되, 기본 설정에서 밝히는 방향은 좁게 제한했습니다(#1343). read_error 종료를 trace에 기록하는 관측 PR #1289도 병합됐고, 코드 에디터·git diff 뷰어·LSP surface 설계 문서 PR #1340이 이날 열렸습니다.

zntc는 Vite식 query-suffix import(?raw, ?url, ?inline, ?worker)를 문서와 함께 추가하고 리뷰 지적 4건을 반영했습니다(#4478). CSS url()이 가리키는 자산을 실제로 방출하고 경로를 재작성하는 수정(#4469), class static block과 --jsx=preserve를 원문 복사 대신 AST로 출력하는 수정(#4473, #4477), minify의 쉼표 시퀀스 접기에서 문장 시작 괄호가 빠져 런타임 SyntaxError가 나던 버그 수정(#4474), 동명 basename 자산의 래퍼 이름 충돌 수정(#4476)이 병합됐습니다. e2e browser-smoke 패키지 버전 고정(#4471), v0.1.3 릴리스(#4479), 버전 lockstep과 bun.lock 동기화 자동화(#4480)도 들어갔고, if 폴딩 시 우선순위 괄호와 단항 토큰 병합을 고치는 PR #4484, #4486이 열렸습니다. ohah.github.io에는 오래된 오늘의 커밋 항목 정리 커밋이 있었습니다.

공개 커밋 60개, 해당일 생성 또는 병합된 PR 47개를 정리했습니다. PR 생성 46개·병합 44개는 같은 PR이 양쪽에 포함될 수 있습니다.

커밋

ohah/maru

ohah/ohah.github.io

ohah/zntc

PR (해당일 생성/머지)

상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#1360생성 · 병합mergedmaindocs(control): 1e-confirm 완료 상태 동기화 (stale "남음" 마커 정정)
ohah/maru#1359생성 · 병합mergedmainfeat(control): 1e-confirm-2b — 실 확인 모달 (env 스텁 → 사용자 grant 모달)
ohah/maru#1358생성 · 병합mergedmainfeat(control): 1e-confirm-2a — held-across-ticks grant 확인 인프라 (모달 전 async hold)
ohah/maru#1357생성 · 병합mergedmainfeat(control): 1e-confirm-1c-2 — held-request grant 흐름 (needs_grant→승인 시 grant+재구동)
ohah/maru#1356생성 · 병합mergedmainfeat(control): 1e-confirm-1c-1 — needs_grant 결과 방출 (미grant valid=확인 대기 후보)
ohah/maru#1355생성 · 병합mergedmainfeat(control): 1e-confirm-1b — browser authz에 pane confirm-grant 합성 (세션 cap OR grant)
ohah/maru#1354생성 · 병합mergedmainfeat(control): 1e-confirm-1a — PaneGrantStore L2 순수 코어 (Model B grant 저장소)
ohah/maru#1353생성 · 병합mergedmaindocs(control): 1e-confirm-0 — §9.2 개정 Model B pane-bound confirm-grant (doc-first)
ohah/maru#1352생성 · 병합mergedmainfix: 22차 /code-review max 결함 수정 (cap 누적 → cookies 보안)
ohah/maru#1351생성 · 병합mergedmainfeat(control): 5f-4c — browser.getCookies (WKHTTPCookieStore, D5 게이트 실동작)
ohah/maru#1350생성 · 병합mergedmainfeat(control): 5f-4b — browser_storage ScopeClass (D5 쿠키 분리 게이트)
ohah/maru#1349생성 · 병합mergedmainfeat(control): 5f-4a-2 — auth.grant로 세션 cap 누적 (cap 누적 완성)
ohah/maru#1348생성 · 병합mergedmainfeat(control): 5f-4a-1 — dispatchAuthenticated가 cap 집합 수용 (누적 토대)
ohah/maru#1347생성 · 병합mergedmainfix(agent): ESC 인터럽트를 감지 — 스피너가 "진행 중"에 영구 고착되던 버그
ohah/maru#1346생성 · 병합mergedmainfix: 21차 /code-review max 결함 수정 (closed 종료 마커 correctness)
ohah/maru#1345생성 · 병합mergedmainfeat(control): 5f-3 — 이벤트 확장 (loadState/dialog/crashed/closed) + 서버 SIGPIPE 방어
ohah/maru#1344생성 · 병합mergedmainfix(app): 드래그앤드롭이 떨어뜨린 pane으로 들어가게 (활성 pane 고정 회귀)
ohah/maru#1343생성 · 병합mergedmainfix(theme): min-contrast 양방향 보정 — 다크 배경의 어두운 전경이 안 보이던 갭
ohah/maru#1342생성 · 병합mergedmainfeat(control): 5f-0b-3c — WKWebView url KVO → browser.navigated 이벤트 주입
ohah/maru#1341생성 · 병합mergedmainfix: 20차 /code-review max 결함 수정 (이벤트 구독 인프라)
ohah/maru#1340생성mergedmaindocs(editor-surface): 코드 에디터·git diff 뷰어·포맷/린트·LSP surface 설계 (Phase 0)
ohah/maru#1339생성 · 병합mergedmainfeat(control): 5f-0b-3b — browser.subscribe dispatch 배선 (동기 registry 등록)
ohah/maru#1338생성 · 병합mergedmainfeat(control): 5f-0b-3a-2 — SubscriberRegistry 연결 수명 배선 (leaf-mutex pivot)
ohah/maru#1337생성 · 병합mergedmainfeat(control): 5f-0b-3a — SubscriberRegistry (메인 전용 이벤트 라우팅, 순수 로직)
ohah/maru#1336생성 · 병합mergedmainfix: 19차 /code-review max 결함 수정 (2b-2 동시성 재아키텍처)
ohah/maru#1335생성 · 병합mergedmainfeat(control): 5f-0b-2b-2-β — 연결당 reader+writer 2-스레드 (응답을 outbound 경유)
ohah/maru#1334생성 · 병합mergedmainfeat(control): 5f-0b-2b-2-α — OutboundChannel (스레드-안전 per-connection outbound)
ohah/maru#1333생성 · 병합mergedmainfix: 18차 /code-review max 결함 수정 (지속 세션 null-close 버그 외)
ohah/maru#1332생성 · 병합mergedmainfeat(control): 5f-0b-2b-1 — 지속 세션 (auth 1회 + 순차 요청 루프)
ohah/maru#1331생성 · 병합mergedmainfeat(control): 5f-0b-2a — 연결당 스레드 (직렬 accept 폐기·head-of-line 제거)
ohah/maru#1330생성 · 병합mergedmainfeat(control): 5f-0b-1 — OutboundQueue 순수 구조 (응답+이벤트 통합·coalesce·purge)
ohah/maru#1329생성 · 병합mergedmainfeat(control): 5f-0a — EventBroker L2 순수 코어 (browser 이벤트 구독·매칭·직렬화)
ohah/maru#1328생성 · 병합mergedmaindocs(control-plane): §9.4/§9.5 3차 전수조사 정정 (모순·gap·stale)
ohah/maru#1327생성 · 병합mergedmaindocs(control-plane): §9.5 5f-0 구현 설계 (§9.4 감사 후속 A1~A5)
ohah/maru#1326생성 · 병합mergedmaindocs(control-plane): §9.4 에이전트 제어 프로토콜 리뷰 (5f 선행, doc-first)
ohah/maru#1289병합mergedmainfeat(observability): read_error를 trace에 read-error kind로 기록 (종료 트리거 진단)
ohah/zntc#4486생성mergedmainfix(codegen): #4482 단항 토큰 병합 + prefix-단항 리터럴의 load-bearing 괄호
ohah/zntc#4484생성mergedmainfix(codegen): #4481 if → &&/?: 폴딩 시 precedence 괄호 재유도
ohah/zntc#4480생성 · 병합mergedmainchore(release): 버전 lockstep 자동화 + publish 후 bun.lock 자동 동기화
ohah/zntc#4479생성 · 병합mergedmainchore(release): v0.1.3
ohah/zntc#4478생성 · 병합mergedmainfeat(resolve): Vite query-suffix import (?raw / ?url / ?inline / ?worker)
ohah/zntc#4477생성 · 병합mergedmainfix(codegen): --jsx=preserve 를 소스 원문 복사가 아니라 AST 로 출력
ohah/zntc#4476생성 · 병합mergedmainfix(linker): 동명 basename 자산의 require 래퍼 이름 충돌 → 다른 자산의 URL 반환
ohah/zntc#4474생성 · 병합mergedmainfix(codegen): minify comma-sequence 접기 시 statement-start 괄호 소실 (런타임 SyntaxError)
ohah/zntc#4473생성 · 병합mergedmainfix(codegen): class static block 을 소스 원문 복사가 아니라 AST 로 출력
ohah/zntc#4471생성 · 병합mergedmainfix(test): e2e browser-smoke 패키지 버전 고정 (상위 메이저 릴리스가 CI 를 깨뜨림)
ohah/zntc#4469생성 · 병합mergedmainfix(css): CSS url() 로 참조된 자산 방출 + url 재작성