2026-07-13

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

요약 (AI 작성)

maru는 에이전트가 인앱 브라우저를 CLI로 다룰 수 있게 했습니다. §9.6 설계(#1361) 뒤 maru browser 클라이언트의 파서·wire·렌더(#1362)와 소켓 배선(#1363)이 들어갔고, 화면 캡처는 chunk-streaming 설계(#1365), 서버 측 스트리밍(#1366), CLI 재조립과 PNG 출력(#1367), 영역·배율 옵션(#1376) 순으로 완성됐습니다. 에이전트가 web surface를 찾는 browser.list(#1368)와 그 url이 빈칸으로 나오던 문제 수정(#1369), CSS 셀렉터 기반 click·type·scroll(#1375), 셀렉터 표시와 로드 완료를 기다리는 browser.wait(#1380)도 병합됐습니다.

저장소 쪽은 쿠키 쓰기·삭제(#1371)와 localStorage·clearStorage(#1374)로 §9.4 D4를 채웠습니다. 권한 UX는 확인 모달을 대상 창에 띄우고 중복을 막도록 다듬었고(#1372), "Revoke Browser Grants" 메뉴와 개별 grant 취소 서브메뉴로 부여한 권한을 되돌릴 수 있게 했습니다(#1373, #1377). 22·23차 리뷰에서 나온 쓰기 경로의 cross-origin 격리 누락과 screenshot 자원 상한 문제를 고치고 문서를 맞췄으며(#1370, #1378, #1379), 브라우저 성능 측정은 backend별 후속 결정으로 미뤘습니다(#1381). paste 큐 라우팅 테스트가 해제된 surface를 참조해 간헐적으로 죽던 문제도 고쳤습니다(#1364).

zntc는 "빌드는 성공하는데 산출물이 돌지 않는" 결함을 집중적으로 걷어냈습니다. 산출물을 다시 파싱하는 게이트와 for-await 다운레벨이 generator 안에 raw await를 남기던 문제 수정(#4489), 모듈 평가와 렌더 픽셀을 기준 번들러와 대조하는 렌더 패리티 게이트(#4506)를 새로 두었고, 결함이 고쳐지자 test.fail 마커를 걷어냈습니다(#4516). 수정된 결함은 minify의 if 폴딩 우선순위 괄호(#4484)와 단항 토큰 병합(#4486), ** 좌변 괄호 계약(#4490), 클로저 읽기와 재진입을 놓쳐 살아 있는 대입을 지우던 dead-store 제거(#4513), 구조 분해 할당의 shorthand와 기본값 리네임 누락(#4512), CJS 래퍼 파라미터를 mangler 예약어로 둔 수정(#4497)입니다.

코드 스플리팅 쪽에서는 같은 청크 소비자에 크로스-청크 공개명을 쓰던 문제(#4496, #4507), DCE된 심볼이 청크 export에 남던 문제(#4508), 크로스-청크 CJS import가 provider 청크의 require 썽크를 참조하던 문제(#4509)를 고쳤습니다. 파서는 중첩 new의 member 체인과 tagged template 흡수(#4504), argless new의 ZNTC0623 중복 진단(#4501), 깊은 타입 중첩의 스택 오버플로를 진단으로 바꾸는 수정(#4499)이 들어갔고, ./ 없는 상대 지정자를 쓰는 CSS url(logo.png)와 new URL("x.js", import.meta.url)의 재작성(#4498, #4487), seed에 따라 죽던 tsconfig_cache 테스트의 해제 후 참조 수정(#4511)도 병합됐습니다. 렌더 패리티 게이트에 monaco 케이스와 의미 대조 축을 더하는 PR #4517이 이날 열렸습니다.

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

커밋

ohah/maru

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#1381생성 · 병합mergedmaindocs(control-plane): 브라우저 성능 측정을 backend별로 보류
ohah/maru#1380생성 · 병합mergedmainfeat(browser): wait selector/load 동기화 (5f-2)
ohah/maru#1379생성 · 병합mergedmaindocs(control-plane): §9.4 D4·§9.5.7 산문을 23차 리뷰 격리·클램프에 동기화
ohah/maru#1378생성 · 병합mergedmainfix(browser): 23차 /code-review max 결함 — cross-origin 격리·screenshot 자원상한
ohah/maru#1377생성 · 병합mergedmainfeat(browser): per-grant revoke UI — 개별 grant 취소 서브메뉴 (§9.2)
ohah/maru#1376생성 · 병합mergedmainfeat(browser): screenshot rect/scale (§9.5.7)
ohah/maru#1375생성 · 병합mergedmainfeat(browser): act 5f-2 — click/type/scroll (CSS-selector, eval)
ohah/maru#1374생성 · 병합mergedmainfeat(browser): localStorage + clearStorage (§9.4 D4 storage 완성)
ohah/maru#1373생성 · 병합mergedmainfeat(browser): grant revoke — "Revoke Browser Grants" 메뉴 (§9.2 Model B)
ohah/maru#1372생성 · 병합mergedmainfeat(browser): grant UX 경화 — target 창 모달 + dedup (§9.2 Model B)
ohah/maru#1371생성 · 병합mergedmainfeat(browser): 쿠키 쓰기 — browser.setCookie/deleteCookie (§9.4 D4)
ohah/maru#1370생성 · 병합mergedmainfix(browser): 22차 /code-review max 결함 4건 (screenshot·browser.list slice)
ohah/maru#1369생성 · 병합mergedmainfix(macos): browser.list·session.get의 web url 빈칸 — collector가 nav 상태서 채움
ohah/maru#1368생성 · 병합mergedmainfeat(browser): browser.list — 에이전트 web surface 발견 (§9.6.1)
ohah/maru#1367생성 · 병합mergedmainfeat(cli): 5f-1-2 — maru browser screenshot (chunk 재조립 + PNG 출력, §9.5.7)
ohah/maru#1366생성 · 병합mergedmainfeat(browser): 5f-1-1 — browser.screenshot 서버측 chunk-streaming (§9.5.7)
ohah/maru#1365생성 · 병합mergedmaindocs(control-plane): 5f-1-0 — browser.screenshot chunk-streaming 구현 배선 설계 (§9.5.7)
ohah/maru#1364생성 · 병합mergedmainfix(macos): paste-큐 라우팅 테스트 간헐 crash 제거 (reap→dangling surface UAF)
ohah/maru#1363생성 · 병합mergedmainfeat(cli): CLI-2 — maru browser 소켓 배선 (에이전트가 브라우저 제어)
ohah/maru#1362생성 · 병합mergedmainfeat(cli): CLI-1 — maru browser 클라이언트 L2 순수 (파서·wire·렌더)
ohah/maru#1361생성 · 병합mergedmaindocs(control): CLI-0 — maru browser CLI 설계 (§9.6 doc-first)
ohah/zntc#4517생성mergedmaintest(e2e): 렌더 패리티 게이트에 monaco 케이스 + 의미(semantic) 대조 축 추가
ohah/zntc#4516생성 · 병합mergedmaintest(e2e): 렌더 패리티 게이트의 test.fail 마커 제거 — #4493·#4503 수정 반영
ohah/zntc#4513생성 · 병합mergedmainfix(minify): #4503 dead-store 가 소스 순서를 실행 순서로 착각 → 살아있는 대입 삭제
ohah/zntc#4512생성 · 병합mergedmainfix(codegen): #4493 구조분해 assignment 의 shorthand+기본값 프로퍼티에서 리네임 누락
ohah/zntc#4511생성 · 병합mergedmainfix(test): tsconfig_cache 테스트의 use-after-free — seed 의존 SIGSEGV
ohah/zntc#4509생성 · 병합mergedmainfix(bundler): #4494 크로스-청크 CJS import 가 provider 청크의 require 썽크를 참조
ohah/zntc#4508생성 · 병합mergedmainfix(bundler): #4495 DCE 된 심볼이 청크 export 에 남아 모듈 로드 실패
ohah/zntc#4507생성 · 병합mergedmainfix(bundler): #4502 ns 객체 getter 가 같은 청크 소비자에게도 크로스-청크 공개명을 쓰던 문제
ohah/zntc#4506생성 · 병합mergedmaintest(e2e): 렌더 패리티 게이트 — 3층(모듈평가)·4층(렌더+기준 번들러 픽셀 대조) 신설
ohah/zntc#4504생성 · 병합mergedmainfix(parser): #4500 중첩 new 의 member 체인 / callee tagged template 이 new 밖으로 새던 silent miscompile
ohah/zntc#4501생성 · 병합mergedmainfix(parser): #4048 argless new 의 optional callee + trailing ?. 에서 ZNTC0623 중복 발행
ohah/zntc#4499생성 · 병합mergedmainfix(parser): #4146 깊게 중첩된 타입 구문에서 재귀-하강 스택 오버플로우
ohah/zntc#4498생성 · 병합mergedmainfix(css): #4485 url(logo.png) — ./ 없는 bare 상대 지정자 재작성
ohah/zntc#4497생성 · 병합mergedmainfix(codegen): #4491 CJS 래퍼 파라미터($e/$m)를 mangler 예약어로
ohah/zntc#4496생성 · 병합mergedmainfix(bundler): #4492 같은 청크 소비자에게 크로스-청크 공개명을 적용하던 문제
ohah/zntc#4490생성 · 병합mergedmaintest(codegen): #4482 후속 — ** 좌변 괄호 계약을 사후조건으로 강제
ohah/zntc#4489생성 · 병합mergedmaintest(codegen): 산출물 재파싱 게이트 + #4488 for-await 다운레벨 수정
ohah/zntc#4487생성 · 병합mergedmainfix(resolve): #4483 new URL("x.js", import.meta.url) 의 ./ 없는 worker 지정자 재작성
ohah/zntc#4486병합mergedmainfix(codegen): #4482 단항 토큰 병합 + prefix-단항 리터럴의 load-bearing 괄호
ohah/zntc#4484병합mergedmainfix(codegen): #4481 if → &&/?: 폴딩 시 precedence 괄호 재유도