2026-07-21
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru는 영속 터미널 세션 호스트를 P1부터 P3까지 한꺼번에 쌓았고, 이날 maru PR은 모두 main에 병합됐습니다. 먼저 Maru 소유 runtime ID와 별도 세션 호스트의 소유권·종료·다중 workspace attach 계약을 정의한 문서(#1471)를 병합하고, provider 세션 연속성 잔여를 걷어냈습니다(#1474). P2에서는 PTY와 셸의 수명·입출력을 GUI 레이아웃에서 떼어 내는 TermRuntimeBackend 계약과 in-process 어댑터를 만들고(#1476), GUI를 그 handle 계약으로 배선했습니다(#1480).
P3는 순서대로 진행됐습니다. wire codec과 frame parser(#1483), 화면 snapshot·delta 레코드 codec(#1484), runtime당 controller 1명과 observer N명을 관리하는 TerminalRuntimeRegistry(#1485), 연결 dispatch 상태 기계(#1486), 실제 unix 소켓 어댑터·소켓 발견 정책·maru-sessiond 진입점·분리 실행 launcher와 __session-host CLI(#1487부터 #1491), host client의 hello·RPC 왕복(#1492), runtime.spawn/terminate와 RuntimeOps seam(#1493), 실제 runtime manager와 daemon 배선(#1496), attach·input·resize dispatch(#1497)가 들어갔습니다. 응답 크기 상한 등 리뷰에서 나온 정확성·보안 결함도 #1495로 고쳤습니다.
그 위에 화면 스트리밍을 얹었습니다. 화면 snapshot 투영(#1499), attach 시 snapshot 전송(#1501), delta 계산과 client push(#1502, #1503), client 쪽 화면 조립기(#1504)와 RenderSnapshot 셀 변환(#1505), Surface.renderSnapshot() 렌더 seam(#1506), Surface의 원격 화면 소스(#1507)와 client 쪽 원격 runtime(#1508)이 이어졌고, 원격 화면 stream 소비 결함 7건을 고쳤습니다(#1509). 마지막으로 frame loop pump의 원격 모드(#1510), host-backed RemoteTermBackend(#1511), 원격 Term 입력·resize 라우팅(#1512)을 붙였습니다.
파일 패널에서는 Mermaid 라이브 프리뷰를 연결하고 cold·warm helper deadline 계약을 맞췄으며(#1473), smoke 타임아웃 조정(#1478), 메인 액터 tick의 lock 대기 계측(#1479), 두 512 상한 문서 정리(#1481), 응답 없는 render mailbox 회수(#1482)가 뒤따랐습니다. CI는 required 게이트에 macOS·Web 제품 검사를 넣고(#1475) perf artifact 검사를 substring grep에서 정확한 JSON 검증으로 바꿨습니다(#1477). 웹 패널 포커스 시 ⌘C·⌘V·⌘A를 WebKit에 넘기고(#1489), 모드 전환 때 iframe이 editor를 덮던 CSS 누락(#1494), 소스 모드 세로 스크롤바와 위젯 잔존(#1498), 소스 모드 gutter 재도색과 우클릭 메뉴(#1500)도 고쳤습니다.
zntc는 증분 빌드와 CJS 출력 정확성 PR 3개를 병합했습니다. --preserve-modules --format=cjs에서 재할당되는 export가 순환 중 undefined로 굳던 문제를 exports 객체를 저장소로 쓰는 방식으로 고쳤고(#4592), const를 구워 넣은 소비자를 provider가 바뀔 때만 캐시에서 빼는 B-precise 전략을 넣었으며(#4593), 증분 fingerprint가 interop 모드와 공유 namespace 변수명 변화를 놓치던 두 구멍을 메웠습니다(#4594). 세 건 모두 리뷰 지적 반영 커밋이 뒤따랐습니다.
공개 커밋 53개, 해당일 생성 또는 병합된 PR 44개를 정리했습니다. PR 생성 42개·병합 44개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- feat(session-host): 원격 Term 입력/resize를 라우팅 표에 배선합니다
- feat(session-host): host-backed TermRuntimeBackend 어댑터를 추가합니다
- feat(session-host): frame-loop pump에 원격 모드를 추가합니다
- fix(session-host): 원격 화면 stream 소비 결함을 고칩니다
- feat(session-host): client 쪽 원격 runtime을 추가합니다
- feat(session-host): Surface에 원격 화면 소스를 추가합니다
- refactor(session): Surface.renderSnapshot() 렌더 seam을 도입합니다
- feat(session-host): 원격 화면을 RenderSnapshot cells로 변환합니다
- feat(session-host): 화면 조립기를 추가합니다
- feat(session-host): 화면 delta를 client에 push합니다
- feat(session-host): 화면 delta 계산을 추가합니다
- feat(session-host): attach가 화면 snapshot을 전송하도록 배선합니다
- fix(file-panel): 소스 모드 gutter 숨김(WKWebView repaint 회피) + WKWebView 우클릭 메뉴 억제
- feat(session-host): 화면 snapshot 투영을 추가합니다
- fix(file-panel): 소스 모드 세로 스크롤바와 라이브→소스 atomic 위젯 잔존을 고친다
- feat(session-host): attach/input/resize dispatch를 추가합니다
- feat(session-host): 실 runtime_manager와 daemon 배선을 추가합니다
- fix(session-host): 코드리뷰 max 지적을 반영합니다
- fix(file-panel): 모드 전환 시 iframe이 안 숨겨져 editor를 덮던 CSS 누락을 고친다
- feat(session-host): runtime.spawn/terminate dispatch와 RuntimeOps seam을 추가합니다
- feat(session-host): host client(hello/RPC 왕복)를 추가합니다
- feat(session-host): detached-helper launcher와 __session-host CLI를 추가합니다
- feat(session-host): maru-sessiond entrypoint와 fork process smoke를 추가합니다
- feat(session-host): socket 발견 정책 state machine을 추가합니다
- fix(file-panel): 도크·브라우저 웹 패널 포커스 시 ⌘C/⌘V/⌘A를 WebKit에 위임한다
- feat(session-host): 실 unix socket adapter를 추가합니다
- feat(session-host): connection dispatch state machine을 추가합니다
- feat(session-host): TerminalRuntimeRegistry와 controller state machine을 추가합니다
- feat(session-host): screen-stream snapshot/delta record codec을 추가합니다
- fix(live-preview): 수명 전환 시 응답 없는 Mermaid render mailbox를 로컬 회수한다
- feat(session-host): MRSH wire codec과 frame parser를 추가합니다
- docs(mermaid): 두 512 상한을 별개 계약으로 명명하고 stale "fragment당 4"를 정정한다
- refactor(session): GUI를 TermRuntimeBackend handle 계약으로 배선합니다
- fix(perf): Mermaid 메인 액터 tick의 lock 대기와 hang 경로 elapsed를 계측한다
- fix(test): Mermaid smoke harness timeout을 제품 cold deadline보다 크게 맞춘다
- fix(perf): perf artifact 게이트를 substring grep에서 exact JSON validator로 바꾼다
- fix(ci): required 게이트에 macOS·Web 제품 검사를 포함한다
- refactor(session): TermRuntimeBackend seam 계약과 in-process adapter를 추가합니다
- refactor(session): provider 세션 연속성 잔여를 제거합니다
- docs(session): P1 제거 계약을 보완합니다
- docs(session): 외부 attach와 resize 범위 명확화
- docs(session): detail workspace and host protocol
- docs(session): 영속 터미널 세션 호스트 계약
- fix(file-panel): Mermaid cold start 계약을 정합화한다
- ci: Mermaid 성능 게이트를 제품 최적화로 실행한다
- ci: Mermaid macOS 실패 증거를 보존한다
- feat(file-panel): Mermaid 라이브 프리뷰를 연결한다
ohah/zntc
- fix(incremental): #4545 code-review max 지적 반영 — 소비자 def_format·OOM latch·rank-only 게이트
- fix(incremental): #4545 증분 fingerprint 누락 홀 2종 (interop-mode · shared-ns var 명)
- perf(incremental): #4557 code-review max 지적 반영 — staleness 홀 3건 + OOM 폴백
- perf(incremental): #4557 const-baked 소비자를 provider 변경 시에만 evict (B-precise)
- fix(bundler): #4587 code-review max 지적 반영 — ns/re-export 회귀·콤마·output-exports·NamedEvaluation
- fix(bundler): #4587 preserve-modules cjs 재할당 export live-binding (exports-as-storage)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.