2026-08-13
요약 (AI 작성)
편집기를 하나의 Term 종류로 승격한 날입니다. SurfaceKind 에 editor 를 더해 타입 자리를 만들고 kind == .web 로 뭉뚱그려 있던 8곳을 분류한 뒤, 편집기 Term 을 만들어 파일을 붙이고 훅이 파일을 편집기 Term 으로 열어 렌더 블록까지 잇도록 했습니다. 프레임 조립은 chrome 컴포넌트로 올렸고, 사이드바 아이콘에서 편집기가 빠져 있던 것도 채웠습니다. 렌더 쪽에서는 배경 quad 가 자기 본문을 덮고 있던 것을 layer 3 → 2 로 고치면서 합성 층에 이름을 줘 Lab 과 제품이 갈리던 자리를 없앴고, 배경이 텍스트를 덮는 것을 Lab 게이트가 잡도록 했습니다. 편집기 배경은 terminal_bg 토큰으로 터미널과 같은 색을 쓰되 창 투명도는 그 역할에만 걸고, 본문에는 창 padding 을 적용하지 않도록(grid → body) 정리했습니다.
터미널에서는 wrap 이음의 유령 공백 문제를 뿌리부터 팠습니다. 안 쓴 칸과 쓴 공백을 구분하는 것에서 시작해(동작 무변) soft-wrap 이음이 wrap 채움을 내용으로 삼지 않게 하고, BCE 로 칠한 화면에서도 같은 규칙이 서도록 했으며, 중립 렌더 계층도 안 쓴 칸을 빈 칸으로 보게 맞췄습니다. 이어 화면을 지워도 스크롤백에서 줄이 계속 이어지던 문제를 잡아 홈에서의 ED 0·ED 1 과 0행을 비우거나 덮는 연산도 스크롤백 wrap 을 끊도록 했습니다. 폰트는 셰이핑을 run 단위로 묶고 합자를 설정으로 빼 성능을 손봤습니다.
모바일은 실제로 쓸 수 있는 수준까지 올라왔습니다. 스크롤로 화면 밖 출력을 보게 하고(M4b1), 길게 누르면 잡고 끌면 스크롤되는 선택(M4a·M4b2)과 키바 옆 copy 로 꺼내는 복사(M4b3), 소프트 키보드에 없는 키를 만드는 보조 키바(M4b4)를 붙였으며, 이모지를 컬러 아틀라스로 굽고 그리도록 했습니다(M4a6). 선택 중 화면이 흐르던 것, iOS 포인터, iOS 에서 셸 따옴표와 -- 플래그를 못 치던 것, 번들 폰트에 없는 기호가 영구 공백이던 것도 고쳤습니다. session-host 는 CR0b incident writer 를 부트스트랩해 artifact 를 안전하게 영속시키고 managed client publication 을 봉인했으며, incident process 권위를 격리하고 CR0b 의 크로스플랫폼 경계를 맞췄습니다. 앱 종료는 단계를 계측하고 정리 전에 창을 내리도록 바꿨고, SSH 는 로컬 셸이 OSC 7 authority 를 비워 자기 세션을 원격으로 오판하지 않게 고쳤습니다.
커밋
ohah/maru
- fix(editor): 편집기 배경에 창 투명도를 건다 — terminal_bg 역할에만
- feat(chrome): 편집기 배경을 터미널과 같은 색으로 — terminal_bg 토큰
- fix(editor): 편집기 본문에 창 padding을 적용하지 않는다 — grid → body
- fix(editor): 삽입이 가로챈 doc 주석 둘을 제자리로 되돌린다
- test(chrome): Lab 게이트가 배경이 텍스트를 덮는 것을 잡게 한다
- fix(chrome): 합성 층에 이름을 준다 — Lab과 제품이 갈린 자리를 없앤다
- test(editor): 렌더 계약에 회귀 테스트를 붙이고 세션 deinit의 문서 누수를 고친다
- fix(editor): 배경 quad가 자기 본문을 덮고 있었다 — layer 3 → 2
- feat(editor): 훅이 파일을 편집기 Term으로 열고 렌더 블록을 잇는다
- fix(editor): 사이드바 아이콘에서 편집기가 빠져 있었다
- fix(editor): 적대적 검증이 잡은 셋을 고친다 — 라벨·collector·테스트
- feat(editor): 편집기 Term을 만들고 파일을 붙인다
- feat(session): kind == .web 8곳을 분류해 편집기를 넣는다
- feat(session): SurfaceKind에 editor를 더한다 — 편집기 Term의 타입 자리
- test(chrome): 헤더 고정 quad 가 scissor 를 견디는지 골든이 본다
- fix(session-host): scratch open 실패를 skip 이 아니라 error 로 낸다
- fix(session-host): 테스트 임시 디렉터리를 열 때 잔여물을 걷는다
- test(macos): wrap 경계를 걸친 검색을 헤드리스로 캡처하는 픽스처
- fix(renderer): 중립 렌더 계층도 안 쓴 칸을 빈 칸으로 본다
- fix(terminal): CI 가 잡은 세 자리를 닫고 바뀐 동작을 고정한다
- fix(terminal): BCE로 칠한 화면에서도 wrap 채움을 내용으로 안 삼는다
- fix(terminal): soft-wrap 이음이 wrap 채움을 내용으로 삼지 않게 한다
- refactor(terminal): 안 쓴 칸을 쓴 공백과 구분한다(동작 무변)
- fix(chrome): app_session.zig external source digest 를 갱신한다
- fix(sidebar): 카드 호버 밴드가 상태바를 덮지 않게 뷰포트 바닥에서 자른다
- fix(sidebar): 에이전트 행의 상태 마커를 두 형태 모두 선두에 둔다
- fix(terminal): 0행을 비우거나 덮는 연산도 스크롤백 wrap 을 끊는다
- fix(terminal): 홈에서의 ED 0·ED 1 도 스크롤백 wrap 을 끊는다
- fix(terminal): 화면을 지워도 스크롤백에서 이어지던 줄이 안 끊겼다
- perf(font): 셰이핑을 run 단위로 묶고 합자를 설정으로 뺀다
- fix(session-host): skip CR0b product fixtures off macOS
- fix(session-host): gate CR0b runtime init by platform
- feat(session-host): seal managed client publication
- fix(sidebar): 토글 행에서 같은 파형을 두 번 그리지 않는다
- fix(session-host): isolate incident process authority
- fix(session-host): align CR0b cross-platform boundaries
- fix(session-host): remove empty incident directory
- feat(session-host): bootstrap CR0b incident writer
- refactor(editor): 프레임 조립을 chrome 컴포넌트로 올린다
- docs(trace-replay): 셸 이벤트 스트림의 드레인 제약을 단일 출처에 적는다
- feat: persist CR0b incident artifacts securely
- feat(app-host): 종료 단계를 계측하고 정리 전에 창을 내린다