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
- fix(chrome): 상태바에 앵커한 메뉴를 사이드바로 밀지 않는다
- feat(session-host): activate ordered revoke admission
- docs(session-host): start C3-3a3 activation
- refactor(app-session): 익명 struct 반환에 이름을 주고 web/input으로 옮긴다
- refactor(app-session): 디버그 픽스처 하네스를 app_session/debug_fixtures.zig로 뺀다
- docs(status-bar): tmux는 "못 잡는 것"이 아니라 "안 하는 것"으로 적는다
- docs(status-bar): 앱 프로세스를 합계에 넣기로 뒤집고, tmux 사각지대를 적는다
- refactor(app-session): F6 보정 — 탭 그룹 모델을 tab.zig로 옮긴다
- fix(editor): assert의 사정거리를 정확히 적는다 — ReleaseSafe는 남고 ReleaseFast만 사라진다
- fix(editor): 셀 배치 선택을 놓치지 못하게 assert를 셋으로 넓히고 대가를 적는다
- test(session-host): align final admission alias fixture
- feat(session-host): add dormant final admission
- docs(grapheme): 비-2027 ZWJ 이모지가 화면을 어긋내는 증상의 판정 근거를 남긴다
- refactor(app-session): 한 그룹만 쓰는 파일 레벨 헬퍼를 그룹 파일로 함께 옮긴다
- docs(editor): N1 진행 상황을 사실대로 적는다
- docs(editor): 버퍼 표현 실측을 N2 착수 gate로 등재한다
- docs(editor): 버퍼 표현을 실측 후 재선택하도록 고치고 계약 모순 셋을 정리한다
- docs(editor): 문서를 현재 구현에 맞춘다
- fix(editor): max 코드리뷰 지적 다섯 건을 고친다
- feat(editor): 편집기 텍스트를 셀 인덱스로 배치한다 (근본 해법)
- fix(editor): 줄 번호 자리별 op을 되살리고 깨진 테스트를 고친다
- fix(editor): 폰트 크기를 직접 받고 device scale 이중 적용을 막는다
- feat(editor): 편집기 텍스트의 폰트 크기를 셀에서 파생시킨다
- docs(editor): 폰트 크기 연동이 실증됐다는 주장을 철회한다
- fix(editor): 줄 번호를 자리마다 셀에 스냅하고 본문 렌더 경로 이탈을 기록한다
- fix(editor): 탭 전개가 전각 문자를 두 칸으로 센다
- test(editor): 폰트 크기 변종 시나리오로 gutter 연동을 실증한다
- feat(editor): selection을 VSCode 수준 편집이 가능한 구조로 넓힌다
- style(editor): content.zig에 zig fmt를 적용한다
- feat(editor): N1 뷰포트·selection·파일 입출력 계약을 세우고 회계 버그를 고친다
- feat(editor): N1 읽기 전용 뷰의 gutter와 본문 렌더를 세운다
- refactor(app-session): term·surface를 app_session/term.zig로 가른다
- docs(status-bar): 팝오버 구현 뒤 남은 미구현 항목을 한 곳에 모은다
- feat(chrome): 상태바 상단에 경계선을 긋는다
- fix(status-bar): 상태바 배경을 사이드바·터미널 어느 쪽과도 구분되게 판다
- fix(status-bar): 앵커가 사라지면 팝오버도 닫고, 머리글만 있는 메뉴의 선택을 범위 안에 둔다
- feat(status-bar): 리소스 팝오버에 제목·열 머리글을 넣고 상태바와 떼어 놓는다
- feat(status-bar): 리소스 항목을 누르면 탭별 내역 팝오버가 뜬다
- docs(session-host): close final admission contract
- refactor(app-session): git·SCM을 app_session/git.zig로 가른다
- fix(chrome): 알림 패널 헤더가 스크롤 시 사라지던 것과 구분선이 gutter를 가로지르던 것을 고친다
- feat(session-host): add dormant revoke authority
- refactor(app-session): 에이전트 관측을 app_session/agent.zig로 가른다
- docs(session-host): split revoke ordering activation gates
- feat(session-host): confirm generation poison effects
- fix(chrome): 스크롤바 잡는 폭을 gutter 전체로 넓힌다(그리는 폭과 분리)
- refactor(app-session): 알림·벨을 app_session/notification.zig로 가른다
- refactor(app-session): 키 입력·IME·키바인딩을 app_session/input.zig로 가른다
- docs(session-host): C3-3 실패 정산 계약을 확정
- refactor(app-session): web panel·인앱 브라우저를 app_session/web.zig로 가른다
- test(session-host): inventory fd identity helpers
- fix(session-host): seal one validated socket identity
- fix(session-host): preserve fd identity on Linux CI
- docs(session-host): close C3-3 effect removal inventory
- fix(session-host): preserve C3-2 semantic outcomes
- fix(session-host): close C3-2 product drain audit gaps
- test(session-host): close C3-2 product boundary
- feat(session-host): wire purge-first generation drain
- test(session-host): specify C3-2 purge-first gate
- docs(session-host): freeze C3-2 purge-first contract
- fix(chrome): 셀보다 얇은 fill을 GPU quad로 내려 1px 구분선을 살린다
- feat(chrome): 오버레이 quad를 프레임 끝에 한 덩어리로 붓는다 (SV6b)
- docs(editor): gutter 계약의 적대적 검증 결과를 반영한다
- docs(editor): gutter 근거의 출처 층과 ch 단위를 바로잡는다
- docs(editor): gutter·상태바 배치를 VSCode 소스에서 확인해 확정한다
- refactor(app-session): workspace·window를 app_session/workspace.zig로 가른다
- fix(chrome): 탭 제목을 프레임당 한 번만 발행해 다중 pane 제목 소실을 없앤다
- docs(editor): 편집기가 서는 텍스트 경로를 셀로 못박는다
- test(session-host): harden C3-1 ownership boundary
- fix(session-host): close C3-1 ownership recovery gaps
- feat(session-host): own generation events in attachments
- test(session-host): specify inline event attachment gate
- docs(session-host): freeze event attachment C3-1 contract
- docs(editor): 성능 baseline 선측정을 철회하고 근거에서 성능을 뺀다
- docs(editor): 편집기를 overlay composite의 first consumer로 두고 Role 어휘를 바로잡는다
- docs(editor): N0c 나머지 대조 — 뷰포트 컬링과 선택 범위의 함정을 못박는다
- docs(editor): 기존 CM6 구현 대조를 착수 전 단계로 넣고 그 산출물을 반영한다
- docs(editor): 이미 있는 CM6 diff 코드와 editor 영역 라벨을 계약에 반영한다
- docs(editor): 코드 편집기·git diff를 네이티브 GPU로 이관하는 계약을 세운다
- refactor(app-session): 세팅·메뉴·이름 변경·config 적용을 app_session/settings.zig로 가른다
- refactor(app-session): 스크롤 기구를 app_session/scroll.zig로 가른다
- docs(status-bar): 리소스 팝오버 설계를 확정한다
- refactor(app-session): 사이드바를 app_session/sidebar.zig로 가른다
- feat(status-bar): 이 창의 터미널 메모리·CPU를 상태바에 낸다
- refactor(app-session): 탭을 app_session/tab.zig로 가른다
- feat(session-host): complete generation event release authority
- docs(session-host): define canonical stale event recovery
- docs(session-host): freeze 2c3d C2 release contract
- refactor(app-session): 도크 일반을 app_session/dock.zig로 가른다
- fix(chrome): 알림 배지 원을 헤더 아이콘 줄의 실제 세로 원점에 맞춘다
- refactor(app-session): pane·split·divider를 app_session/pane.zig로 가른다
- feat(chrome): 알림 막대도 공용 발행 경로로 옮기고 손수 그린 복제본을 지운다 (SV5a-2)
- refactor(app-session): 파일 탐색기·파일 패널을 app_session/file_panel.zig로 가른다
- refactor(app-session): 에이전트 세션 기록 도크를 app_session/agent_dock.zig로 가른다
- fix(session-host): stabilize event allocator across generation scopes
- test(session-host): expose event seal mismatch field
- test(session-host): isolate event drain failure stage
- test(session-host): identify remote pump failure stage
- test(session-host): expose remote pump failure cause
- feat(session-host): seal generation event ownership
- test(chrome): 큰 폰트 시나리오에 목록 캡처를 남기고 탭 제목 정렬을 고친다
- refactor(chrome): 탭 제목 텍스트를 measured 경로로 옮긴다
- docs(status-bar): 리소스 항목 설계를 실측 근거와 함께 확정한다
- refactor(boundary): external source digest 원장을 데이터 파일로 뗀다
- refactor(chrome): 사이드바 검색 줄 텍스트를 measured 경로로 옮긴다
- refactor(app-session): 웹 find 결과의 죽은 사본을 지운다
- refactor(chrome): 공용 lowering이 합성 층을 인자로 받게 한다 (SV6a)
- build(boundary): external source digest 갱신을 손에서 도구로 옮긴다
- refactor(chrome): measured 텍스트 캐시를 소비처별 슬롯으로 일반화한다
- docs(web-panel): 웹 탭 find 하이라이트가 남는다던 단언을 실기기 확인으로 정정한다
- docs(app-session): 허브 추출의 주석·타입·문서를 적대적 검증 결과대로 고친다
- refactor(app-session): tick에서 독립적인 세 단계를 함수로 떼어낸다
- refactor(app-session): mouse의 진행 중 제스처 라우팅을 함수로 떼어낸다
- refactor(app-session): handleKeyEvent의 key-down 종결부를 헬퍼로 모은다
- fix(session-host): 픽스처 자식 대기 예산에 여유를 주고 정리 실패가 원인을 덮지 않게 한다
- fix(app-session): reapplyAmbiguousWidth의 죽은 코어 락을 제거한다
- docs(session-host): freeze 2c3d event owner contract
- fix(chrome): 사이드바 헤더를 창 오른쪽 두 밴드와 한 줄로 맞춘다
ohah/zntc
- fix(bundler): #4598 code splitting 청크 SyntaxError 회귀 + multi-format 가드 철회
- fix(bundler): #4598 worker 서브빌드가 부모 format 으로 TLA 위임을 판정하던 문제
- fix(bundler): #4598 IIFE 의 TLA 다운레벨을 청크 async factory 에 위임