2026-07-13

요약 (AI 작성)

에이전트가 브라우저를 실제로 몰 수 있게 만든 날입니다. §9.6 을 doc-first 로 쓴 뒤 CLI-1 클라이언트 L2 순수(파서·wire·렌더)와 CLI-2 소켓 배선으로 maru browser 를 세웠고, 화면 캡처는 5f-1-0 설계 → 5f-1-1 서버측 chunk-streaming → 5f-1-2 CLI 재조립 + PNG 출력으로 한 축을 끝낸 뒤 rect/scale 옵션까지 붙였습니다. browser.list 로 에이전트가 web surface 를 발견하게 하고, act 5f-2 로 CSS 셀렉터 기반 click/type/scroll 을, 저장소 쪽은 쿠키 쓰기(setCookie/deleteCookie)와 localStorage·clearStorage 로 §9.4 D4 를 완성했습니다. 권한 UX 는 target 창 모달과 dedup 으로 경화하고, "Revoke Browser Grants" 메뉴와 개별 grant 취소 서브메뉴를 더해 회수 경로를 열었습니다. 22·23차 /code-review max 결함(screenshot·browser.list slice, cross-origin 격리와 screenshot 자원 상한)을 반영하고 §9.4·§9.5 산문을 그 결과에 동기화했으며, paste-큐 라우팅 테스트의 간헐 crash(reap→dangling surface UAF)와 browser.list·session.get 의 web url 빈칸도 잡았습니다.

zntc 는 "빌드는 green 인데 산출물이 안 돌아가는" 계열을 집중적으로 걷어냈습니다. 렌더 패리티 게이트를 3층(모듈 평가)·4층(렌더 + 기준 번들러 픽셀 대조)으로 신설하고 산출물 재파싱 게이트를 추가해, 이후 #4493·#4503 수정이 들어오자 test.fail 마커를 걷어냈습니다. 실제 결함으로는 #4503 dead-store 제거가 클로저 읽기·재진입을 놓쳐 살아 있는 대입을 지우던 문제, #4493 구조분해 할당의 shorthand+기본값에서 리네임이 누락되던 문제, #4494·#4495·#4502·#4492 로 이어진 크로스-청크 계열(require 썽크 참조, DCE 된 심볼의 export 잔류, ns getter 의 공개명 오적용)을 정리했습니다. 파서·코드젠 쪽은 #4500 new callee 의 member/tagged-template 체인 흡수, #4048 argless new 의 optional callee 중복 진단, #4146 깊은 타입 중첩의 스택 오버플로우를 진단으로 전환, #4482 토큰 병합 판정을 출력 바이트 기준으로 바꾸는 작업이 있었고, #4485 url(logo.png) 와 #4483 new URL("x.js", import.meta.url) 의 ./ 없는 상대 지정자 재작성, #4491 CJS 래퍼 파라미터의 mangler 예약, #4488 for-await 다운레벨의 raw await 잔류도 함께 해결했습니다.

커밋

ohah/maru

ohah/zntc

PR (해당일 생성/머지)

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