2026-08-09
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru의 거대해진 app_session을 주제별 파일로 가른 날입니다. agent_dock(#2004)을 시작으로 file_panel·pane·dock·tab·sidebar·scroll·settings·workspace·web·input·notification·agent·git·term을 차례로 떼어냈고, 한 그룹만 쓰는 파일 레벨 헬퍼를 그 그룹 파일로 함께 옮겼으며(#2044) 탭 그룹 모델과 디버그 픽스처 하네스도 제자리로 옮겼습니다. 거대 허브 세 개에서는 tick의 독립 세 단계, mouse의 진행 중 제스처 라우팅, handleKeyEvent의 key-down 종결부를 함수로 떼어냈고(#1992), 익명 struct 반환에 이름을 줬으며, 웹 find 결과의 죽은 사본과 reapplyAmbiguousWidth의 죽은 코어 락을 지웠습니다(#1989). external source digest 원장은 데이터 파일로 떼고 갱신을 도구로 옮겼습니다. test 전용 헬퍼를 따로 빼는 #2026은 병합 없이 닫혔습니다.
코드 편집기와 git diff를 네이티브 GPU로 이관하는 계약도 이날 세웠습니다(#2017). 편집기가 서는 텍스트 경로를 셀로 못 박고(#2022) 편집기를 overlay composite의 first consumer로 두었으며, 기존 CM6 구현과 VSCode 소스를 대조해 gutter·상태바 배치를 확정했습니다(#2024). 그 과정에서 성능 baseline 선측정, 폰트 크기 연동이 실증됐다는 주장, gutter 근거의 출처 층과 ch 단위를 스스로 철회하거나 정정했고, 버퍼 표현은 실측 후 재선택하도록 고쳐 N2 착수 게이트로 등재했습니다. 구현은 N1 읽기 전용 뷰의 gutter와 본문 렌더(#2027)에서 시작해 뷰포트·selection·파일 입출력 계약을 세우고, 편집기 텍스트를 셀 인덱스로 배치하는 방식으로 옮겼으며, 폰트 크기를 셀에서 파생시키고 device scale 이중 적용을 막았습니다. 탭 전개가 전각 문자를 두 칸으로 세게 하고 selection 구조를 넓혔으며, 셀 배치 선택을 놓치지 못하게 assert를 셋으로 넓혔습니다(#2046). 적대적 입력을 가시화하는 Trojan Source 방어 #2045는 이날 PR이 열렸습니다.
상태바에는 리소스 항목이 붙었습니다. 설계를 실측 근거와 함께 확정하고 이 창의 터미널 메모리·CPU를 낸 뒤(#2009), 항목을 누르면 탭별 내역 팝오버가 뜨게 했고(#2021) 제목·열 머리글을 넣고 앵커가 사라지면 함께 닫히게 했습니다. 상태바 배경을 사이드바·터미널과 구분되게 바꾸고 상단 경계선을 그었으며, 앵커한 메뉴를 사이드바로 밀지 않게 했고(#2051), 앱 프로세스를 합계에 넣기로 뒤집고 tmux는 "안 하는 것"으로 문서를 정정했습니다(#2042). chrome 쪽은 알림 막대를 공용 발행 경로로 옮기고(SV5a-2, #2002), 공용 lowering이 합성 층을 인자로 받게 하며(SV6a, #1993) 오버레이 quad를 프레임 끝에 한 덩어리로 붓게 했습니다(SV6b, #2013). 셀보다 얇은 fill을 GPU quad로 내려 1px 구분선을 살리고(#2016), 탭 제목을 프레임당 한 번만 발행해 다중 pane 제목 소실을 없앴으며(#2018), 탭 제목과 사이드바 검색 줄 텍스트를 measured 경로로 옮겼습니다. 전날 열린 사이드바 헤더 정렬 #1978도 병합됐습니다.
session-host는 generation 이벤트 소유권을 봉인하고(#1998) release authority를 완성한 뒤, C3-1로 attachment가 이벤트를 소유하게 하고(#2019), C3-2로 purge-first drain을 배선했으며(#2025), C3-3에서는 실패 정산과 revoke ordering 계약을 확정해 dormant revoke authority와 final admission을 넣고 ordered revoke admission을 활성화했습니다(#2052). zntc는 #4598 작업으로 IIFE의 TLA 다운레벨을 청크 async factory에 위임하고(#4625), worker 서브빌드가 부모 format으로 TLA 위임을 판정하던 문제와 code splitting 청크 SyntaxError 회귀를 고쳤습니다(#4626). 같은 이슈의 1단계 시도였던 #4624는 닫혔습니다.
공개 커밋 121개, 해당일 생성 또는 병합된 PR 70개를 정리했습니다. PR 생성 69개·병합 66개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
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 에 위임
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.