2026-07-14

요약 (AI 작성)

브라우저 제어의 눈과 손을 붙인 날입니다. 접근성 스파이크를 대체하는 §9.5.4 설계를 먼저 쓰고(ref = data-maru-ref 확정, 엔진 중립 note, Safari 선례 없음 정정), snapshot-1 로 ARIA 트리를 read-only eval 하는 서버측 스냅샷을, snapshot-2 로 그 ref 를 locator 삼아 click/type/scroll 하는 ref 기반 act 를 얹었습니다. 스냅샷 결과가 scriptResultString 을 거치며 JSON 이 이중 인코딩되던 문제도 우회로 정리했습니다.

executeScript 는 결과 전송 계약을 처음부터 다시 세웠습니다. JSON-RPC bulk 전송 경계와 결과 전송 상한을 문서로 못박은 뒤, chunk wire 계약·실행 예약 수명주기·결과 pull ABI·progressive 결과 pump 를 차례로 깔고, page 결과를 bounded 로 직렬화해 구조화된 형태로 돌려주도록 했습니다. outbound wire byte 회계와 결과 바이트 회계를 함께 넣어 전송량을 계측 가능하게 만들었고, async expression 지원과 result pump 활성화로 실제 사용 경로를 열었습니다. 그 밖에 browser op 수명주기 경합을 보강하고, /code-review max 가 짚은 macOS exec/screenshot 회귀와 getLocalStorage 손상·dead code 를 정리했으며, New Browser Tab 에 ⌘⌥T 기본 단축키를 부여했습니다. coalesce 바이트 admission 의 stale 프레임 한계는 미수정 상태로 문서에 남겼습니다.

zntc 는 번들러의 심볼 충돌·순환 계열을 하루 종일 파고들었습니다. #4522 code-split 된 동적 CJS import 가 named 멤버를 잃던 무성 오컴파일에서 시작해, #4524 --preserve-modules × CJS 가 통째로 깨지던 것, #4526 forwarding holder 변수가 사용자 top-level 심볼과 충돌해 CJS↔CJS 순환이 로드 시 TypeError 를 내던 것, #4528 wrap 된 모듈의 잔여 결함 3건, #4530 래퍼 심볼이 deconflict 되지 않아 파싱조차 안 되던 것까지 이어졌습니다. 특히 매 수정마다 리뷰가 회귀를 잡아내(첫 수정이 만든 하드 회귀 4건, exports_X 도 lazy 여야 한다는 지적, 두 개의 독립 $N 할당기가 근본이라는 결론) 고쳐-깨짐-다시-고침을 반복한 하루였습니다. 함께 '빌드 green + 실행 실패' 잔여 7건(#4505 #4510 #4514 #4515 #4518 #4519 #4520)을 일괄 정리하고, 렌더 패리티 게이트에 monaco 케이스와 의미(semantic) 대조 축을 추가했습니다.

커밋

ohah/maru

ohah/zntc

PR (해당일 생성/머지)

repo#상태제목
ohah/maru#1400mergedfeat(browser): ref 기반 act — snapshot ref로 click/type/scroll (snapshot-2, §9.5.4)
ohah/maru#1399mergedfeat(browser): snapshot 서버측 — ARIA 트리 read-only eval (snapshot-1, §9.5.4)
ohah/maru#1398mergeddocs(control-plane): snapshot + ref 기반 act 설계 (§9.5.4)
ohah/maru#1397mergedfeat(keybind): New Browser Tab 기본 단축키 ⌘⌥T
ohah/zntc#4534mergedfix(bundler): #4530 래퍼 심볼이 사용자 top-level 심볼과 deconflict 되지 않아 파싱 불가
ohah/maru#1396mergedfix(browser): /code-review max 결함 — macOS exec/screenshot 회귀·getLocalStorage 손상·dead code
ohah/zntc#4531mergedfix(bundler): #4528 preserve-modules × wrap 된 모듈의 결함 3건 (named import / --minify 이름 / entry 미실행)
ohah/maru#1395mergedfix(control): browser op 수명주기 경합 보강
ohah/zntc#4529mergedfix(bundler): #4526 preserve-modules + --format=cjs 의 CJS↔CJS 순환이 로드 시 TypeError
ohah/maru#1394mergeddocs(text-field-editor): 주소창 caret·선택·마우스 편집 설계 (슬라이스 0)
ohah/maru#1393mergedfeat(control): executeScript async expression 지원
ohah/zntc#4527mergedfix(bundler): #4524 --preserve-modules × CJS 가 통째로 깨지던 것 (래퍼 심볼 미-export)
ohah/maru#1392mergedfeat(control): browser result pump 활성화
ohah/zntc#4525mergedfix(bundler): #4522 code-split 된 동적 CJS import 가 named 멤버를 잃던 무성 오컴파일
ohah/maru#1391mergedfeat(control): executeScript page 결과 bounded 직렬화
ohah/maru#1390mergedfeat(control): progressive 결과 pump 기반
ohah/maru#1389mergedfeat(control): executeScript 결과 pull ABI
ohah/zntc#4521mergedfix: '빌드 green + 실행 실패' 계열 잔여 이슈 7건 일괄 수정 (#4505 #4510 #4514 #4515 #4518 #4519 #4520)
ohah/maru#1388mergedfeat(control): executeScript 실행 예약 수명주기
ohah/maru#1387mergeddocs(control-plane): JSON-RPC bulk 전송 경계 명시
ohah/maru#1386mergedfeat(control): outbound wire byte 회계
ohah/maru#1385mergedfeat(browser): executeScript chunk wire 계약
ohah/maru#1384mergedfeat(control): executeScript 결과 바이트 회계 기반
ohah/maru#1383mergedfeat(browser): 구조화된 executeScript 결과 반환
ohah/maru#1382mergeddocs(control-plane): executeScript 결과 전송 상한 설계