2026-07-07

요약 (AI 작성)

관측성(E) 축을 하루 만에 통째로 완성한 날입니다. MARU_TRACE 라이브 레코딩으로 실제 세션을 캡처해 replay 하는 경로를 열고, maru.trace.v1·maru.snapshot.v3 역파싱 리더를 round-trip 까지 붙였습니다. 이어 base kind(output/resize) 재적용으로 화면 replay 를 완성하고, 입력 이벤트 기록과 크래시에도 살아남는 증분 flush, 익명화 transform과 maru trace anonymize CLI 를 얹었습니다. 픽스처를 저장하기 전에 민감정보를 차단하는 redaction 가드와, replay→golden 회귀 + redaction 커밋 차단을 걸어 두는 CI 게이트도 함께 넣었습니다. 여기에 code-review 로 OOM 경로 결함 4건(파서 누수·recorder 절단), replay 정확성 2건(멀티 surface 뒤섞임·초기 크기), redaction false-neg/pos 3건을 연달아 잡았습니다.

세션 쪽은 Surface 소유권을 앱 전역으로 끌어올리는 M 계열이 주축이었습니다. M2b 에서 live_pty 런타임 소유를 앱-전역 LiveSurfaceRegistry 로 옮긴 뒤, M3a 로 Term inline Surface 를 registry LiveSurface 번들로 리프트하고, M3b AppRuntime coordinator·M3c 그룹 정규화 L2 리프트로 토대를 정리했습니다. 그 위에서 M3d-1 cross-window 이동 원자 트랜잭션 헤드리스 정책 코어 → M3d-2a-i 라이브 cross-window 워크스페이스 이동(Zig 수술 + ABI, 무재시작) → M3d-2b GUI 배선(menu + Swift NSWindow)까지 한 축을 끝까지 밀었고, 도중 나온 code-review max 결함 8건(0탭 크래시·scope 가드·merge focus 등)도 같이 해소했습니다. 컨트롤 플레인은 A1 실 collector(라이브 AppSession 트리 → SurfaceDto[]), A2a CLI 실 소켓 연결과 서버 serveReadOnly 왕복 배선, A2b 라이브 컨트롤 서버(accept 스레드↔메인 marshal)로 이어졌고, 1f session.capture 프로토콜 코어(chunk 스트림 상태머신)도 L2 순수로 들어왔습니다.

나머지는 사용성과 위생 작업입니다. Ghostty 식 paste protection 확인 모달을 붙이고 붙여넣기 내용 미리보기까지 더했으며, 라이트 테마에서 truecolor·256색 전경이 안 보이던 문제를 min-contrast per-cell 확장으로 고쳤습니다. GUI 범위가 파일 파싱 범위를 좁히던 font.size 회귀를 되돌리고, 문서 range 와 스키마 parse range 를 자동 대조하는 게이트와 facade 경계 강제 테스트(terminal↛session/plugin, plugin↛renderer)를 추가했습니다. 블로그 저장소에는 6/2~6/7·6/23·6/27 누락일과 6/19~7/6 요약 백필 커밋이 올라갔습니다.

커밋

ohah/maru

ohah/ohah.github.io

PR (해당일 생성/머지)

repo#상태제목
ohah/maru#1250mergedfeat(macos): M3d-2b — cross-window 워크스페이스 이동 GUI 배선 (menu + Swift NSWindow)
ohah/maru#1249mergedfix(session): M3d-2a-i /code-review max 결함 8건 — 0탭 크래시·scope 가드·merge focus 외
ohah/maru#1248mergedfeat(session): M3d-2a-i — 라이브 cross-window workspace 이동 (Zig 수술 + ABI, 무재시작)
ohah/maru#1247mergedfeat(session): M3d-1 — cross-window 이동 원자 트랜잭션 헤드리스 정책 코어
ohah/maru#1246mergedfix(session): M3a~M3c /code-review max 결함 3건 — trace_recorder per-link·moveWorkspace 정규화순서·doc
ohah/maru#1245mergedfeat(observability): MARU_TRACE 입력 이벤트 기록
ohah/maru#1244mergedfeat(session): M3c — 그룹 정규화 L2 리프트 (inheritGroupMarker 등 → group_normalize)
ohah/maru#1243mergedfeat(observability): trace 익명화 transform + maru trace anonymize CLI
ohah/maru#1242mergedfeat(session): M3b — AppRuntime coordinator + SurfaceRuntime 앱-전역 승격
ohah/maru#1241mergedfeat(observability): MARU_TRACE 증분 flush — 크래시 복원
ohah/maru#1240mergedfeat(observability): trace fixture + CI — replay→golden 회귀 + redaction 커밋 차단
ohah/maru#1239mergeddocs(observability): stale parseShellEvents → parseEvents 정정 (doc-code 드리프트)
ohah/maru#1238mergedfix(observability): redaction false-neg/pos 3건 — 재조립 스캔·매처 확장 (code-review)
ohah/maru#1237mergedfix(observability): replay 정확성 2건 — 멀티 surface 뒤섞임·초기 크기 (code-review)
ohah/maru#1236mergedfix(observability): OOM 경로 결함 4건 — 파서 누수·recorder 절단 (code-review)
ohah/maru#1235mergedfeat(observability): 민감정보 redaction 가드 — trace/snapshot fixture 저장 전 차단
ohah/maru#1234mergedfeat(observability): MARU_TRACE 라이브 레코딩 — 실제 세션 캡처→replay (관측성 E)
ohah/maru#1233mergedfeat(observability): 화면 replay 완성 — base kind(output/resize) 재적용 (관측성 E)
ohah/maru#1232mergedfeat(session): M3a — Surface 소유권 lift, Term inline Surface → registry LiveSurface 번들
ohah/maru#1231mergedfeat(observability): snapshot reader — maru.snapshot.v3 역파싱 + round-trip (관측성 E)
ohah/maru#1230mergeddocs(mobility): M3 구체 설계 — Surface 소유권 이동 + M3a~M3e 분해 (doc-first)
ohah/maru#1229mergedfeat(observability): trace reader — maru.trace.v1 역파싱 + round-trip (관측성 E)
ohah/maru#1228mergedfix(session): M2b·1f /code-review max 결함 — capture chunk_size 가드 + stale docstring 정정
ohah/maru#1227mergedtest(config): 문서 range↔스키마 parse range 자동 대조 게이트 (CS-3 확장)
ohah/maru#1226mergeddocs: core_command 경로·quick-terminal.width range를 실제 코드에 일치
ohah/maru#1225mergedfeat(session): 1f session.capture 프로토콜 코어 — chunk 스트림 상태머신 (L2 헤드리스)
ohah/maru#1224mergedfeat(session): M2b — live_pty 런타임 소유를 앱 전역 LiveSurfaceRegistry로 이전
ohah/maru#1223mergedtest(boundary): 문서화된 facade 경계 강제 — terminal↛session/plugin, plugin↛renderer
ohah/maru#1222mergedfeat(chrome): paste protection 확인 모달에 붙여넣기 내용 미리보기 (Ghostty식)
ohah/maru#1221mergedfeat(session): paste protection — 위험한 붙여넣기 확인 모달 (Ghostty식)
ohah/maru#1220mergedfeat(session): A2b 라이브 컨트롤 서버 — accept 스레드↔메인 marshal + 실 collector (+리뷰 경화)
ohah/maru#1219mergedfix(renderer): 라이트 테마 truecolor·256색 전경 비가시 — min-contrast를 per-cell로 확장
ohah/markdown-editor#7opendocs: 누락된 ADR 3건 기록 + 전체 평가 수정사항
ohah/maru#1218mergedfix(config): font.size 파일 파싱 범위 회귀 — 문서·resolveFont와 합의된 [1,512] 복원
ohah/maru#1217mergeddocs: 문서-코드 전수조사 stale 동기화 + 번들 아이콘(Octicons) attribution 추가
ohah/maru#1216mergedfeat(session): A2a CLI 실 소켓 연결 + 서버 serveReadOnly — 왕복 배선
ohah/maru#1215mergedfeat(session): A1 실 collector — 라이브 AppSession 트리 → SurfaceDto[] (Zig per-session)