2026-09-22

날짜별 분류는 기존 기록과 같은 UTC 기준입니다. 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 집계 마감: 2026-09-26 17:05:20 KST (08:05:20 UTC). 공개 저장소에서 조회한 활동만 포함합니다.

요약 (AI 작성)

maru 편집기에 SSH 세션의 원격 저장과 저장 충돌 비교가 더해졌습니다. 미저장 내용의 백업·크래시 복구·이름 없는 문서 복원을 잇고, 파일 신원을 잃은 문서도 내용부터 되살리도록 했습니다. 에이전트 탭의 턴 목록은 디스크에 남겨 앱 재시작 뒤 다시 읽습니다. LSP 인레이 힌트와 문서 심볼 목록을 연결하고, 힌트가 줄바꿈과 구문 색의 열 위치를 어긋나게 하던 문제를 고쳤습니다. 구현·타입 정의·선언으로 이동하는 명령도 반영했습니다. 저장 충돌의 선택·다시 읽기, 밀린 tmux pane 고지, 빌드 등록의 모듈 주입 판정과 경계 테스트 정리도 포함됩니다. 터미널은 DECSET 2031 / DSR 996으로 테마 변경을 구독한 앱에 알립니다.

@ohah/pdf는 v0.2.1과 v0.2.2를 배포했습니다. 실문서 100편에서 글자 추출·글꼴·그림을 대조하고, 퍼저가 찾아낸 예측기 경계 밖 읽기와 큰 QuadPoints의 반복 문제를 수정했습니다. hwpjs는 EMF의 호·타원·베지어·이미지·Path를 장치 좌표로 옮기고 경계선을 펼치는 기하 처리를 확장했습니다.

zntc는 async generator와 클래스 메서드의 다운레벨 변환, iterator 위임의 반환값, 반복마다 달라져야 하는 let 바인딩, 함수 이동 시 arguments 캡처를 다듬었습니다. 블로그 저장소에도 이전 날짜 기록과 개발기를 보충하고 의존성을 갱신한 작업이 있었습니다. maru의 Chromium 웹 패널은 통합 PR #3867이 열린 진행 작업입니다.

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

커밋

ohah/hwpjs

ohah/maru

ohah/ohah.github.io

ohah/pdf

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#3875생성mergedmainperf(font): 셰이핑이 프레임마다 폰트를 다시 만들지 않는다 — 활성 32 세션 앱 CPU −22.5 %
ohah/maru#3874생성mergedmainrefactor(naming): CR3b 판정자 다섯을 주제 이름으로 — 원장이 68 에서 63 으로
ohah/maru#3873생성 · 병합mergedmaindocs(editor): 이름 없는 문서 계획을 닫는다 — 열 슬라이스가 전부 들어갔다
ohah/maru#3872생성 · 병합mergedmainfeat(editor): LSP 2단 ⑭ — 심볼 2층 documentSymbol: 밴드 체인·피커가 서버 목록으로 선다(정렬·포함 깊이·이름 자기 검산), 편집 중엔 1층 (§8.2o·§7.5)
ohah/maru#3871생성 · 병합mergedmainfeat(editor): 신원을 잃은 문서를 이름 없는 문서로 되살린다 — 두 입구, 한 규칙 (U4d)
ohah/maru#3870생성closedmainfix(session-host): RemoteRuntime 크기 pin 을 실측값으로 — 색 구성 통지(2031)가 ReleaseFast 에서만 +16, main 이 빨갰다
ohah/maru#3869생성 · 병합mergedmainfeat(editor): 이름 없는 문서가 내용과 함께 돌아온다 — workspace 는 «번호»만 싣는다 (U4c)
ohah/maru#3868생성 · 병합mergedmainrefactor(naming): CR3a-2c3 판정자 스물넷을 주제 이름으로 — 원장이 92 에서 68 로
ohah/maru#3867생성openmainfeat(web-panel): 웹 OSR 백엔드 — 계획(§13·W1W8)과 W1aW2 구현(codec·CEF sidecar·브라우저·픽셀 링)
ohah/maru#3866생성 · 병합mergedmainfeat(editor): 크래시가 삼킨 편집을 조용히 되살린다 — 묻는 자리는 «저장하는 순간»이다 (U4b)
ohah/maru#3865생성 · 병합mergedmainrefactor(naming): F3 단계 라벨을 주제 접두로 — 게이트가 고르는 테스트 집합은 그대로
ohah/maru#3864생성 · 병합mergedmainrefactor(naming): 센티넬 일곱을 주제 이름으로 — 원장이 99 에서 92 로
ohah/maru#3863생성 · 병합mergedmainfix(session-host): U4a 가 키운 RemoteRuntime 크기 pin 을 다시 잰다 (main 빨강 수정)
ohah/maru#3862생성 · 병합mergedmainrefactor(naming): release adapter P5d 판정자 넷을 주제 이름으로 — 원장이 103 에서 99 로
ohah/maru#3861생성 · 병합mergedmainfix(debug-fixtures): MARU_FORCE_SYS_APPEARANCE_LATER 의 시간 기준 — 2031 실기 검증이 «전환 먼저, 구독 나중» 이 되던 것
ohah/maru#3860생성 · 병합mergedmainrefactor(naming): kernel cwd 판정자 셋을 주제 이름으로 — 원장이 106 에서 103 으로
ohah/maru#3859생성 · 병합mergedmainfeat(editor): LSP 2단 ⑬ — 인레이 힌트: 줄 워커 하나로 가상 텍스트를 끼운다; rust-analyzer refresh 수용, tsgo 를 죽이던 initialized params [] 수정 (§4.1h·§8.2n)
ohah/maru#3858생성 · 병합mergedmainfeat(editor): 미저장 편집이 크래시를 넘어 살아남는다 — 백업이 남고, 저장·수락된 닫기에 사라진다 (U4a)
ohah/maru#3857생성 · 병합mergedmainfeat(terminal-core): 색 구성 통지 DECSET 2031 / DSR 996 — 라이브 테마 전환이 구독한 앱(Claude Code)에 닿는다
ohah/maru#3856생성 · 병합mergedmainrefactor(app-runtime): F17~F19 — 동사를 걷고 명사로 묶어 상태바·마커 프리뷰·원격 에이전트를 뗀다 (app_session.zig −1,958)
ohah/maru#3855생성 · 병합mergedmainfix(session-host): host 가 idle 로 내려간 뒤 새 Term 이 in-process 로 조용히 열린다 — 죽은 spawn host 를 치우고 한 번 다시 붙는다
ohah/maru#3854생성 · 병합mergedmaintest(session-host): 재접속 비용을 재고 oversized 세션이 형제를 죽이지 못하게 한다
ohah/maru#3853생성 · 병합mergedmainfeat(editor): SSH 세션에서 «어디에» 쓸지 묻고, 저쪽에 저장한다 (U3)
ohah/maru#3852생성 · 병합mergedmainfeat(agent-turn): AT7 — 턴 목록 영속화: 앱을 껐다 켜도 에이전트 탭의 턴 목록이 남는다 (계약 §6 재작성)
ohah/maru#3851생성 · 병합mergedmaintest(naming): 판정자 이름의 슬라이스 ID 를 원장으로 못 박고, 한 주제를 실제로 옮겨 비용을 잰다
ohah/maru#3850생성 · 병합mergedmainperf(session-host): 출력 revision 을 metadata 이벤트에서 뺀다 — 활성 32 세션 앱 CPU −35 %
ohah/maru#3849생성 · 병합mergedmainrefactor(build): 빌드 판정 61자리를 문자열에서 구조(AST)로 — 막고 있던 것은 분류가 아니라 배선이었다
ohah/maru#3848생성 · 병합mergedmainfeat(editor): 저장 충돌에 «비교»를 더한다 — 확인 상자의 네 번째 자리 (C1b)
ohah/maru#3847병합mergedmainfeat(editor): 저장 충돌을 «고르게» 한다 + 네이티브 다시 읽기를 만든다 (C1a)
ohah/maru#3846병합mergedmainfeat(editor): LSP 2단 ⑫ — 구현·타입 정의·선언으로: 팔레트 명령 셋이 참조 피커와 같은 길(0 알림·1 이동·2+ 피커); provider 없는 종류는 묻지 않고 알린다 (§8.2m)
ohah/maru#3845병합mergedmainrefactor(build): tests/boundary/ 판정자 스무 개를 표로 — 등록과 「매달기」가 3천 줄 떨어져 있었다
ohah/maru#3842병합mergedmainfeat(agent-hooks): RA7 조각 5 — 밀린 pane 은 «+N pane 밀림» 고지 행으로 남고, pane 행 문구가 기본 폭에 온전히 들어간다
ohah/maru#3841병합mergedmainfix(status-bar): 리소스 팝오버의 합이 안 맞던 것 — 자르는 자리가 정렬보다 앞이었다
ohah/zntc#4720생성 · 병합mergedmainfix(transformer): #4718 라벨이 겹치는 자리의 yield 가 두 번 실행되지 않게 한다
ohah/zntc#4719생성 · 병합mergedmainfix(transformer): #4710 라벨 붙은 for-await 를 루프로 인식한다
ohah/zntc#4717생성 · 병합mergedmainfix(transformer): #4716 상태 기계 루프의 반복별 let 바인딩을 복원한다
ohah/zntc#4715생성 · 병합mergedmainfix(transformer): #4709 es5 generator 안 for-of 를 iterator 프로토콜로 돌린다
ohah/zntc#4713생성 · 병합mergedmainfix(transformer): #4703 es5 state machine 의 catch 좌변을 참조 노드로 만든다
ohah/zntc#4711생성 · 병합mergedmainfix(transformer): #4707 es5 async generator 안 for-await 의 await 을 __await 로 표시한다
ohah/zntc#4706생성 · 병합mergedmainfix(transformer): #4705 async generator 의 yield/return 재개 의미론을 스펙에 맞춘다
ohah/zntc#4704생성 · 병합mergedmainfix(transformer): #4700 yield* 위임의 .return(v) 완료값을 보존한다
ohah/zntc#4702생성 · 병합mergedmainfix(transformer): #4699 클래스 메서드의 async/generator 를 타겟에 맞춰 낮춘다
ohah/zntc#4701생성 · 병합mergedmainperf(bundler): minify 시 __publicField / __asyncDelegator 축약명 적용 (es2017 기준 −15.6%)
ohah/zntc#4698생성 · 병합mergedmainfix(transformer): #4628 async generator 메서드 다운레벨 (최상위 함수만 덮던 수정 보완)
ohah/zntc#4697생성 · 병합mergedmainfix(bundler): #4630 es5 타겟에서 interop 산출물의 ES6 문법 제거
ohah/zntc#4696생성 · 병합mergedmainfix(transformer): #4629 public class field 를 자기 비트로 낮춘다 (es2015~es2021)
ohah/zntc#4695생성 · 병합mergedmainfix(transformer): #4628 async generator 를 자기 비트로 게이트 + yield* 위임 수정
ohah/zntc#4694생성 · 병합mergedmainrefactor(compat): UnsupportedFeatures 비트 폭 확장 + 폭을 단일 진실원으로 (#4628 · #4629 선행)