2026-09-15

날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.

요약 (AI 작성)

maru의 성능을 진단으로 판 날입니다. 큰 출력에서 tick이 크게 떨어지던 원인을 불공정 mutex 기아로 진단하고 리더가 청크 경계마다 메인에게 코어 락 차례를 넘기게 했으며(#3746), 빈 출력 신호는 코어 락 없이 지나가게 해 전체 잠금의 60%를 없앴습니다(§12.9, #3759). kitty 이미지 base64·zlib 해제와 f=100 PNG 디코드도 리더가 락 밖에서 하게 했습니다(#3754, #3774). CoreText는 grid run 캐시로 CTLine 생성을 건너뛰어 3 pane 스크롤이 19.5Hz에서 56.3Hz로 올랐고(#3769), CTLine 비용의 정체(합자 6배, 폴백 탐색 run당 약 110µs)는 진단만 하고 착수는 보류했습니다(§10.9). session-host는 데몬 할당자의 스택 포획을 꺼 host CPU를 50%에서 14%로 내리고(#3751), 할당자 자신이던 host 메모리 증가와 재접속 창 크래시를 고쳤으며(#3745), daemon이 뜰 때 죽은 host의 1.0GB rollback 사본과 업그레이드 이미지를 거두게 했습니다(#3772).

병합 편집기는 세 판의 대응표를 세워 Result를 따라 굴리고(S3b-M, #3744), 고르기 줄을 판으로 옮기며(S3b-3c, #3748), 세 판에 caret을 세웠습니다(S3b-3b, #3750). 헤더 밴드의 ↓·↑와 F7/⇧F7로 파일 안 다음·이전 충돌 구간을 오가게 했고(S5, #3777), selection이 없으면 IME 조합도 받지 않게 해 조합 글자가 Result 첫 줄에 뜨던 자리를 막았습니다(#3761). 소스 컨트롤은 마커가 없어진 충돌 행에 「+」를 되돌리고(S4, #3755), 「모두 스테이지」가 마커가 남은 충돌 파일을 비켜 가게 했습니다(S4b, #3758). 에이전트 아카이브는 이어하기가 모델도 되살리게 했습니다(#3747).

터미널은 tmux 안 터미널 브라우저가 화면을 박스 문자로 덮던 것을 고치고(#3752), 같은 id 재전송 동안 옛 이미지를 완료까지 보여 주며(#3765), host가 보낸 이미지가 어느 칸에서 사라지는지 세는 진단을 붙였습니다(#3756). 전날 열린 아카이브 스모크 CI #3743이 병합됐고, 테스트는 벽시계 단언을 전수 조사해 시간 대신 차례·모양으로 바꿨습니다(#3753, #3762).

hwpjs는 EMF를 넓혔습니다(41커밋). 클리핑과 RegionData·path 그리기, extended flood fill과 gradient fill, bit·stretch·masked·parallelogram block transfer와 DIB·alpha blend·transparent 전송, layout mode와 linked font, 색 관리·색 보정 상태, comment envelope를 파싱하고, EMF+ 레코드 스트림·comment·object·image effect를 검증하며 SETICMMODE·SETLAYOUT·SETLINKEDUFIS 확장을 받아들였습니다. @ohah/pdf는 겉모습 없는 글상자 주석(/FreeText)과 겉모습 없는 주석을 규격의 기본 모양으로 그리고, 라디오 묶음이 하나만 켜지게 했으며, 겹치던 파싱 다섯 벌을 한 벌로 줄였습니다. ohah.github.io에는 8월 17일 누락분 보강과 문서 표현 정정이 들어갔습니다.

공개 커밋 126개, 해당일 생성 또는 병합된 PR 35개를 정리했습니다. PR 생성 34개·병합 35개는 같은 PR이 양쪽에 포함될 수 있습니다.

커밋

ohah/hwpjs

ohah/maru

ohah/ohah.github.io

ohah/pdf

PR (해당일 생성/머지)

상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#3777생성 · 병합mergedmainfeat(editor): S5 — 헤더 밴드의 ↓·↑ 와 F7/⇧F7 로 파일 안 다음/이전 충돌 구간을 오간다
ohah/maru#3776생성 · 병합mergedmaindocs(present): §10.9 CTLine 비용의 정체 — 합자 6배·폴백 캐스케이드 run당 ~110µs (진단만, 착수 보류)
ohah/maru#3775생성 · 병합mergedmainfix(session-host): tick 의 partial_timeout 네 자리에 이름을 붙인다 — 126 번이 「무엇인지 모름」이었다
ohah/maru#3774생성 · 병합mergedmainperf(terminal): f=100 PNG 도 락 밖에서 디코드한다 — 2.9MB PNG 의 락 보유 16~17ms → <1ms, payload 복사도 없앤다
ohah/maru#3773생성 · 병합mergedmaintest(session-host): add CR6d candidate authority reducer
ohah/maru#3772생성 · 병합mergedmainfix(session-host): 죽은 host 의 rollback 사본(1.0 GB)·오래된 로그를 daemon 시작에 거두고, turnIndexPath 가 부모 디렉터리까지 만든다
ohah/maru#3771생성 · 병합mergedmainfix(build): restore focused app PNG codec wiring
ohah/maru#3770생성 · 병합mergedmaindocs(plans): 3-way 병합 행을 계약 §5 의 현재로 맞춘다
ohah/maru#3769생성 · 병합mergedmainperf(coretext): grid run 캐시 — run 내용 키로 CTLine 생성을 건너뛴다, split 3 pane 스크롤 19.5Hz → 56Hz (§10.7 진단 + §10.8)
ohah/maru#3768생성 · 병합mergedmainfix(session-host): preserve siblings under partial screen pressure
ohah/maru#3767생성 · 병합mergedmainfix(editor): 판 블록을 여백 안쪽에 세우고 배경은 가장자리까지 덮는다 — 4px 넘침·띠 (S3b-2 정정)
ohah/maru#3766생성 · 병합mergedmainfix(agent-turn): 턴 스냅샷 임시 index 를 창이 닫힐 때 지우고, 오래된 형제는 워커가 쓸어 낸다
ohah/maru#3765생성 · 병합mergedmainfix(terminal): 같은 id 재전송 동안 옛 이미지를 완료까지 보여 준다 — #3754 가 만든 프레임마다 깜빡임
ohah/maru#3764생성 · 병합mergedmainfix(session-host): 픽셀을 안 실으면 placement 도 안 싣는다 — 계측이 두 가지를 못 가렸다
ohah/maru#3763생성 · 병합mergedmaindocs(gallery): 「남은 결정」이 이미 내려진 결정을 붙들고 있었다
ohah/maru#3762생성 · 병합mergedmaintest: 벽시계 단언 전수 조사 — 신호를 키우고, 훑는 폭을 세어서 정한다
ohah/maru#3761생성 · 병합mergedmainfix(editor): selection 이 없으면 조합(IME)도 받지 않는다 — 판 초점에서 조합 글자가 Result 첫 줄에 뜨던 자리
ohah/maru#3760생성 · 병합mergedmaintest(session-host): poll owner 판정자를 짧은 소켓 루트로 — 워크트리에서 19개가 죽는다
ohah/maru#3759생성 · 병합mergedmainperf(runtime): 빈 출력 신호는 코어 락 없이 지나간다 — P4-3 진단으로 찾은 전체 잠금의 60% (§12.9)
ohah/maru#3758생성 · 병합mergedmainfeat(scm): 「모두 스테이지」가 마커가 남은 충돌 파일을 비켜 간다 (S4b)
ohah/maru#3757생성 · 병합mergedmainfix(diag): 이미지 대조 계수 — 적대적 검증에서 나온 결함 셋과 흐름 요약줄
ohah/maru#3756생성 · 병합mergedmainfeat(diag): host 가 보낸 이미지가 앱의 어느 칸에서 사라지는지 센다
ohah/maru#3755생성 · 병합mergedmainfeat(scm): 마커가 없어진 충돌 행에 «+» 가 돌아온다 — add 가 곧 완료다 (S4)
ohah/maru#3754생성 · 병합mergedmainperf(terminal): kitty 이미지 base64·zlib 해제를 리더가 락 밖에서 한다 — 브라우저 프레임마다 메인이 서던 3~8ms 를 없앤다 (§13.7 진단 + §13.8)
ohah/maru#3753생성 · 병합mergedmaintest: 판정자 셋이 «기계를 재고» 있었다 — 시간 대신 차례·모양으로
ohah/maru#3752생성 · 병합mergedmainfix(terminal): tmux 안 터미널 브라우저가 화면을 박스 문자로 덮는다 — 세 겹의 원인
ohah/maru#3751생성 · 병합mergedmainperf(session-host): 데몬 할당자의 스택 포획을 끈다 — host CPU 50%→14%
ohah/maru#3750생성 · 병합mergedmainfeat(editor): 세 판에 caret 이 선다 — «초점» 은 판 caret + Result selection 없음 (S3b-3b)
ohah/maru#3749생성 · 병합mergedmainfix(agent-archive): 세션 id 도 같은 argv 토큰 규칙을 지난다 — 인용은 셸로부터만 지켜 준다
ohah/maru#3748생성 · 병합mergedmainfeat(editor): 고르기 줄을 «판» 으로 옮긴다 — VS Code 의 배치를 마커 모델 위에서 (S3b-3c)
ohah/maru#3747생성 · 병합mergedmainfeat(agent-archive): 이어하기가 «모델»도 되살린다 — 그리고 카드의 <synthetic> 을 걷는다
ohah/maru#3746생성 · 병합mergedmainperf(io): 리더가 청크 경계마다 메인에게 코어 락 차례를 넘긴다 — 불공정 mutex 기아로 11~20Hz 로 떨어지던 폭포를 55Hz 로
ohah/maru#3745생성 · 병합mergedmainfix(session-host): host 메모리 누수와 재접속 창 크래시
ohah/maru#3744생성 · 병합mergedmainfeat(editor): 세 판의 «대응표» 를 세우고 Result 를 따라 굴린다 (S3b-M)
ohah/maru#3743병합mergedmainci: 아카이브 스모크를 CI 가 돌린다 — 손으로 안 돌리면 안 도는 게이트였다