2026-08-09

요약 (AI 작성)

거대해진 app_session 을 주제별 파일로 가른 날입니다. tab·term·workspace·pane·input·scroll·sidebar·dock·settings·notification·git·agent·web·file_panel·agent_dock 으로 차례차례 떼어내고, 한 그룹만 쓰는 파일 레벨 헬퍼를 그 그룹 파일로 함께 옮겼으며 디버그 픽스처 하네스도 별도 파일로 뺐습니다. 거대 허브 세 개에서는 소함수를 추출하고(tick 의 독립 세 단계, mouse 의 진행 중 제스처 라우팅, handleKeyEvent 의 key-down 종결부), 익명 struct 반환에 이름을 주고, 죽은 코드(웹 find 결과 사본, reapplyAmbiguousWidth 의 코어 락)를 지웠습니다. 적대적 검증 결과에 맞춰 주석·타입·문서를 고쳤고, external source digest 원장을 데이터 파일로 떼면서 갱신을 손에서 도구로 옮겼습니다.

코드 편집기를 네이티브 GPU 로 이관하는 계약도 이날 세웠습니다. 편집기가 서는 텍스트 경로를 셀로 못박고 편집기를 overlay composite 의 first consumer 로 두었으며, 기존 CM6 구현과 VSCode 소스를 대조해 gutter·상태바 배치를 확정했습니다. 그 과정에서 자기 주장을 여러 번 철회했습니다 — 폰트 크기 연동이 실증됐다는 주장, 성능 baseline 선측정, gutter 근거의 출처 층과 ch 단위가 각각 정정됐고, 버퍼 표현은 실측 후 재선택하도록 고쳐 N2 착수 게이트로 등재했습니다. 구현은 N1 읽기 전용 뷰의 gutter 와 본문 렌더에서 시작해 뷰포트·selection·파일 입출력 계약을 세우고, 편집기 텍스트를 셀 인덱스로 배치하는 근본 해법으로 옮겼으며, 폰트 크기를 셀에서 파생시키고 device scale 이중 적용을 막았습니다. 탭 전개가 전각 문자를 두 칸으로 세도록 고치고, selection 을 VSCode 수준 편집이 가능한 구조로 넓혔으며, assert 의 사정거리를 정확히 적고 셀 배치 선택을 놓치지 않도록 assert 를 셋으로 넓혔습니다.

상태바에는 리소스 항목이 붙었습니다. 설계를 실측 근거와 함께 확정하고 이 창의 터미널 메모리·CPU 를 낸 뒤, 항목을 누르면 탭별 내역 팝오버가 뜨도록 했고 팝오버에 제목·열 머리글을 넣어 상태바와 떼어 놓았으며 앵커가 사라지면 함께 닫도록 했습니다. 상태바 배경을 사이드바·터미널 어느 쪽과도 구분되게 파고 상단 경계선을 그었으며, 앱 프로세스를 합계에 넣기로 뒤집고 tmux 는 "못 잡는 것"이 아니라 "안 하는 것"으로 문서를 정정했습니다. chrome 쪽은 SV5a-2 로 알림 막대를 공용 발행 경로로 옮겨 손수 그린 복제본을 지우고, SV6a 로 공용 lowering 이 합성 층을 인자로 받게 하며 SV6b 로 오버레이 quad 를 프레임 끝에 한 덩어리로 붓도록 했습니다. 셀보다 얇은 fill 을 GPU quad 로 내려 1px 구분선을 살리고, 탭 제목을 프레임당 한 번만 발행해 다중 pane 제목 소실을 없앴으며, 탭 제목·사이드바 검색 줄 텍스트를 measured 경로로 옮기고 measured 텍스트 캐시를 소비처별 슬롯으로 일반화했습니다.

session-host 는 generation 이벤트 소유권(C3-1~C3-3)을 닫았습니다. 이벤트 attachment 계약을 동결하고 inline attachment 게이트를 명세한 뒤 소유권 경계와 복구 갭을 메웠고, C3-2 는 purge-first drain 계약을 동결해 배선하고 제품 경계·drain 감사 갭을 닫았으며, C3-3 은 실패 정산과 revoke ordering 계약을 확정해 dormant revoke authority 와 ordered revoke admission 을 활성화했습니다. 이벤트 allocator 를 generation scope 전반에서 안정화하고 소유권을 봉인했으며, 실패 단계를 드러내는 테스트들(event seal mismatch, drain 실패 단계, remote pump 실패 원인)을 붙였습니다. zntc 에서는 #4598 로 IIFE 의 TLA 다운레벨을 청크 async factory 에 위임하고, worker 서브빌드가 부모 format 으로 TLA 위임을 판정하던 문제와 code splitting 청크 SyntaxError 회귀를 고쳤습니다.

커밋

ohah/maru

ohah/zntc

PR (해당일 생성/머지)

repo#상태제목
ohah/maru#2052mergedfeat(session-host): activate ordered revoke admission
ohah/maru#2051mergedfix(chrome): 상태바에 앵커한 메뉴를 사이드바로 밀지 않는다
ohah/maru#2050mergedrefactor(app-session): 익명 struct 반환에 이름을 주고 web/input으로 옮긴다
ohah/maru#2049mergedrefactor(app-session): 디버그 픽스처 하네스를 app_session/debug_fixtures.zig로 뺀다
ohah/maru#2048mergedrefactor(app-session): F6 보정 — 탭 그룹 모델을 tab.zig로 옮긴다
ohah/maru#2047mergeddocs(grapheme): 비-2027 ZWJ 이모지가 화면을 어긋내는 증상의 판정 근거를 남긴다
ohah/maru#2046mergedfix(editor): 셀 배치 선택을 놓치지 못하게 assert를 셋으로 넓히고 대가를 적는다
ohah/maru#2045mergedfeat(editor): 적대적 입력을 가시화한다 (§3.8 Trojan Source 방어)
ohah/maru#2044mergedrefactor(app-session): 한 그룹만 쓰는 파일 레벨 헬퍼를 그룹 파일로 함께 옮긴다
ohah/maru#2043mergedfeat(session-host): add dormant final admission
ohah/maru#2042mergeddocs(status-bar): 앱 프로세스를 합계에 넣기로 뒤집고, tmux 사각지대를 적는다
ohah/maru#2041mergedrefactor(app-session): term·surface를 app_session/term.zig로 가른다
ohah/maru#2040mergeddocs(status-bar): 팝오버 구현 뒤 남은 미구현 항목을 한 곳에 모은다
ohah/maru#2039mergeddocs(session-host): close final admission contract
ohah/maru#2038mergedfix(chrome): 알림 패널 헤더가 스크롤 시 사라지던 것과 구분선이 gutter를 가로지르던 것을 고친다
ohah/maru#2037mergedfeat(session-host): add dormant revoke authority
ohah/maru#2036mergedrefactor(app-session): git·SCM을 app_session/git.zig로 가른다
ohah/maru#2035mergeddocs(session-host): split revoke ordering activation gates
ohah/maru#2034mergedrefactor(app-session): 에이전트 관측을 app_session/agent.zig로 가른다
ohah/maru#2033mergedfeat(session-host): confirm generation poison effects
ohah/maru#2032mergedrefactor(app-session): 알림·벨을 app_session/notification.zig로 가른다
ohah/maru#2031mergedfix(chrome): 스크롤바 잡는 폭을 gutter 전체로 넓힌다(그리는 폭과 분리)
ohah/maru#2030mergedrefactor(app-session): 키 입력·IME·키바인딩을 app_session/input.zig로 가른다
ohah/maru#2029mergeddocs(session-host): C3-3 실패 정산·revoke ordering 계약을 확정한다
ohah/maru#2028mergedrefactor(app-session): web panel·인앱 브라우저를 app_session/web.zig로 가른다
ohah/maru#2027mergedfeat(editor): N1 읽기 전용 뷰의 gutter와 본문 렌더를 세운다
ohah/maru#2026closedrefactor(app-session): test 전용 공용 헬퍼를 app_session/test_support.zig로 뺀다
ohah/maru#2025mergedfeat(session-host): wire C3-2 purge-first generation drain
ohah/maru#2024mergeddocs(editor): gutter·상태바 배치를 VSCode 소스에서 확인해 확정한다
ohah/maru#2023mergedrefactor(app-session): workspace·window를 app_session/workspace.zig로 가른다
ohah/maru#2022mergeddocs(editor): 편집기가 서는 텍스트 경로를 셀로 못박는다
ohah/maru#2021mergedfeat(status-bar): 리소스 항목을 누르면 탭별 내역 팝오버가 뜬다
ohah/maru#2020mergedrefactor(app-session): 세팅·메뉴·이름 변경·config 적용을 app_session/settings.zig로 가른다
ohah/maru#2019mergedfeat(session-host): own generation attachment events
ohah/maru#2018mergedfix(chrome): 탭 제목을 프레임당 한 번만 발행해 다중 pane 제목 소실을 없앤다
ohah/maru#2017mergeddocs(editor): 코드 편집기·git diff를 네이티브 GPU로 이관하는 계약을 세운다
ohah/maru#2016mergedfix(chrome): 셀보다 얇은 fill을 GPU quad로 내려 1px 구분선을 살린다
ohah/maru#2015mergedrefactor(app-session): 스크롤 기구를 app_session/scroll.zig로 가른다
ohah/zntc#4626mergedfix(bundler): #4598 splitting 청크 SyntaxError 회귀 + worker 가 부모 format 으로 판정하던 문제
ohah/maru#2014mergeddocs(status-bar): 리소스 팝오버 설계를 확정한다
ohah/maru#2013mergedfeat(chrome): 오버레이 quad를 프레임 끝에 한 덩어리로 붓는다 (SV6b)
ohah/maru#2012mergedrefactor(app-session): 사이드바를 app_session/sidebar.zig로 가른다
ohah/maru#2011mergedrefactor(app-session): 탭을 app_session/tab.zig로 가른다
ohah/maru#2010mergedfeat(session-host): complete generation event release authority
ohah/maru#2009mergedfeat(status-bar): 이 창의 터미널 메모리·CPU를 상태바에 낸다
ohah/maru#2008mergedrefactor(app-session): 도크 일반을 app_session/dock.zig로 가른다
ohah/zntc#4625mergedfix(bundler): #4598 IIFE 의 TLA 다운레벨을 청크 async factory 에 위임
ohah/maru#2007mergedfix(chrome): 알림 배지 원을 헤더 아이콘 줄의 실제 세로 원점에 맞춘다
ohah/maru#2006mergedrefactor(app-session): pane·split·divider를 app_session/pane.zig로 가른다
ohah/maru#2005mergedrefactor(app-session): 파일 탐색기·파일 패널을 app_session/file_panel.zig로 가른다
ohah/maru#2004mergedrefactor(app-session): 에이전트 세션 기록 도크를 app_session/agent_dock.zig로 가른다
ohah/maru#2003mergedfix(chrome): 탭 제목 세로 정렬을 role line box 기준으로 고치고 큰 폰트 캡처를 남긴다
ohah/maru#2002mergedfeat(chrome): 알림 막대도 공용 발행 경로로 옮기고 손수 그린 복제본을 지운다 (SV5a-2)
ohah/maru#2001mergedrefactor(chrome): 탭 제목 텍스트를 measured 경로로 옮긴다
ohah/maru#2000mergeddocs(status-bar): 리소스 항목 설계를 실측 근거와 함께 확정한다
ohah/maru#1999mergedrefactor(boundary): external source digest 원장을 데이터 파일로 뗀다
ohah/maru#1998mergedfeat(session-host): seal generation event ownership
ohah/maru#1997mergedrefactor(chrome): 사이드바 검색 줄 텍스트를 measured 경로로 옮긴다
ohah/maru#1996mergedrefactor(app-session): 웹 find 결과의 죽은 사본을 지운다
ohah/maru#1995mergedbuild(boundary): external source digest 갱신을 손에서 도구로 옮긴다
ohah/maru#1994mergeddocs(web-panel): 웹 탭 find 하이라이트가 남는다던 단언을 실기기 확인으로 정정한다
ohah/maru#1993mergedrefactor(chrome): 공용 lowering이 합성 층을 인자로 받게 한다 (SV6a)
ohah/maru#1992mergedrefactor(app-session): 거대 허브 세 개에서 소함수를 추출한다
ohah/maru#1991mergedrefactor(chrome): measured 텍스트 캐시를 소비처별 슬롯으로 일반화한다
ohah/maru#1990mergedfix(session-host): 픽스처 자식 대기 예산에 여유를 주고 정리 실패가 원인을 덮지 않게 한다
ohah/maru#1989mergedfix(app-session): reapplyAmbiguousWidth의 죽은 코어 락을 제거한다
ohah/maru#1988mergeddocs(session-host): 2c3d event owner 계약을 확정한다
ohah/zntc#4624closedfix(transformer): #4598 TLA 래퍼가 export 스코프를 분리해 ReferenceError 를 내던 문제 (1단계)
ohah/maru#1987closedfix(app-session): reapplyAmbiguousWidth의 죽은 코어 락을 제거한다