2026-07-11
요약 (AI 작성)
인앱 브라우저를 사용 가능한 물건으로 마감한 날입니다. 7e-3 에서 주소창의 back/forward/reload 버튼을 붙여 브라우저 골격을 완성하고, 7e-4 로 버튼 폴리시와 ⌘←/→/R 단축키를 더했습니다. 주소창 편집은 별도 입력 경로 대신 공유 OverlayInput 으로 리팩터해 IME 조합 표시를 얻고 중복을 없앴으며(사용자 지적 반영), inputFocus 에 .addr_edit 을 추가해 평문 타이핑이 새던 문제를 고쳤습니다. 이어 7f 로 새 창·팝업을 흡수해 — 7f-0 Swift-first web term 등록 ABI, 7f-1 WKUIDelegate.createWebViewWith adopt, 7f-2 위험 스킴 차단 정책 게이트 — 팝업이 앱 밖으로 새지 않게 했습니다. 손 테스트에서 나온 ⌘R 미동작, 링크 이동 시 주소창 미갱신, 탭 닫기 확인, 주소창 클릭-어웨이 포커스, 모달이 웹 패널에 가려 ⌘Q 확인이 Enter 를 못 받던 문제도 함께 정리했습니다.
포커스는 4g 로 한 축을 통합했습니다. 흩어져 있던 포커스 패치들을 웹↔터미널 포커스 동기 불변식으로 묶어(4g-0 활성 web surface getter → 4g-1 reconcileWebFocus → 4g-2 정리 검토 결론 → 4g-3 override 단일 출처) 설계 문서와 함께 정착시켰고, 렌더러 슬라이스로 탭·pane 드래그 시각물을 WKWebView 위 최상위 오버레이 레이어로 올렸습니다.
컨트롤 플레인은 라이브 browser.* 배선(5e)이 주제였습니다. §9.2·§9.3 을 doc-first 로 먼저 쓴 뒤 §5-async deferred marshal(in-flight 레지스트리)을 선행으로 깔고, 5e-1 dispatchBrowser 가 skeleton 대신 BrowserOp 를 반환하도록 바꾼 다음 5e-2a 라우팅, 5e-2b-1 Zig L4 marshal(op 큐·defer·take/complete ABI), 5e-2b-2 소켓 라이브 제어 E2E 까지 이었습니다. 1e-core 로 capability nonce 를 라이브 auth 경로에 배선해 browser/write/lifecycle 공통 토대도 마련했습니다. 13~17차 /code-review max 결함을 계속 흡수했고, 탭 전환 시 sync 게이트 오투영으로 화면이 사라지던 버그와 스모크의 web 패널 삐져나옴을 고쳤으며, 설정에는 네비 전체 리셋과 변경 행별 ↺ 를 제공하는 기본값 리셋 UX(CS-4-8)를 추가했습니다.
커밋
ohah/maru
- fix: 17차 /code-review max 결함 6건 (browser 제어 정확성·견고성)
- fix(macos): 스모크 web 패널 삐져나옴 — scripted resize를 실 창 크기로
- feat(settings): 기본값 리셋 UX — 네비 전체 리셋 진입점 + 변경 행 항목별 ↺ (CS-4-8)
- feat(control): 5e-2b-2 — 소켓 browser.* 라이브 제어 E2E (Swift drain + 소켓 스모크)
- docs(io-render-threading): §11.7 정정 — per-surface baseline은 실익 없음(밴드에이드가 최소 해법)
- feat(control): 5e-2b-1 — browser op Zig L4 marshal (op 큐·defer·take/complete ABI)
- fix: 16차 /code-review max 결함 3건 수정 ([1][2][5])
- docs(io-render-threading): §11.7 활성 surface 전환 시 sync 게이트 baseline 재설정 문서화
- fix(macos): 탭 전환 시 화면 소멸(2026 sync 게이트 오투영) 수정
- feat(control): 5e-2a — dispatchAuthenticated가 browser.*를 op로 라우팅 (L2)
- feat(control): 5e-1 — dispatchBrowser가 skeleton 대신 BrowserOp 반환 (L2)
- docs: 5e 라이브 browser.* 배선 상세 설계 (control-plane §9.3, doc-first)
- feat(control): §5-async — deferred marshal (in-flight 레지스트리, 라이브 browser.* 배선 선행)
- fix: 15차 /code-review max 결함 5건 수정 ([0][2][4][10][11])
- feat(control): 1e-core — capability nonce를 라이브 auth 경로에 배선 (browser/write/lifecycle 공통 토대)
- docs: browser capability 발급 UX 결정 반영 (사용자 승인) — §9.2
- docs: 에이전트 브라우저 제어 라이브 e2e 설계 (control-plane §9.2, doc-first)
- feat(macos): 렌더러 슬라이스 — 탭/pane 드래그 시각물을 최상위 오버레이 레이어로 (WKWebView 위)
- fix(macos): Phase 4g-3 — 14차 /code-review max 결함 6건 (focus-sync override 단일 출처)
- docs(macos): Phase 4g-2 — focus-sync 정리 검토 결론 + KVO [7] 해소 (비-동작)
- feat(macos): Phase 4g-1 — 웹↔터미널 포커스 동기 불변식 통합 (reconcileWebFocus)
- feat(macos): Phase 4g-0 — focus-sync 불변식 토대: 활성 web surface getter(any kind)
- docs(web-panel): 웹↔터미널 포커스 동기 불변식 설계 (4g — 흩어진 포커스 패치 통합)
- fix(macos): 브라우저 UX 3건 — 탭 닫기 확인·잘못된 주소 유지·주소창 단축키
- fix(macos): 손 테스트 후속 — 주소창 클릭-어웨이 포커스·브라우저 클릭 활성 동기
- fix: Phase 7 13차 /code-review max 결함 — 확정 11건 수정 (7은 상의 보류)
- feat(macos): Phase 7f-2 — 팝업 대상 URL 정책 게이트 (위험 스킴 차단)
- fix(macos): 마지막 창 닫기(⌘W·빨간버튼·웹뷰탭)를 Cmd+Q 종료 확인으로 합류
- feat(macos): Phase 7f-1 — 새 창/팝업 adopt (WKUIDelegate.createWebViewWith)
- feat(macos): Phase 7f-0 — 새 창/팝업 adopt용 Swift-first web term 등록 ABI
- docs(web-panel): 7f 새 창/팝업 adopt 계획 + host-mediated 브라우저 MCP(에이전트 제어) 설계
- fix(macos): browser ⌘R 미동작 + 링크 이동 시 주소창 미갱신 수정
- fix(macos): 모달을 web 패널 위 최상위 입력 대상으로(⌘Q 종료 모달 Enter 무응답 수정)
- feat(macos): Phase 7e-4 — 주소창 nav 버튼 폴리시 + 키보드 단축키(⌘←/→/R)
- feat(macos): Phase 7e-3 — 주소창 nav 버튼 back/forward/reload (인앱 브라우저 완성)
- docs: 입력 대상 라우팅 통합을 후속 계획으로 기록 (inputFocus switch → activeTextInput 통합)
- refactor(macos): 주소창 편집을 공유 OverlayInput으로 (IME 조합 표시 + DRY) — 사용자 지적 반영
- fix(macos): 7e-2 주소창 편집 입력 버그 — inputFocus에 .addr_edit 추가 (평문 타이핑 라우팅)
- feat(macos): Phase 7e-2b — 주소창 편집 Swift 배선 (포커스 전이 + navigate) = 브라우징 동작