2026-09-22

한국 시간(KST) 기준으로 하루를 나눴습니다. 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 조회: 2026-10-06 KST. 공개 저장소에서 조회한 활동만 포함합니다. 9월 22일부터 KST 기준으로 바꿨습니다. 9월 21일까지의 기록은 UTC 날짜로 나눴으므로, 이날은 겹치지 않도록 09:00 KST 이후 활동만 담았습니다.

요약 (AI 작성)

이날은 KST 기준으로 바꾼 첫날이라 09:00 KST 이후 활동만 담았습니다.

maru 편집기는 SSH 세션에서 어디에 저장할지 묻고 원격 쪽 파일에 저장하는 경로를 얻었고(#3853), 저장 충돌 확인 상자에 선택지와 네이티브 다시 읽기(#3847), 비교(#3848)를 더했습니다. 미저장 편집은 백업으로 남아 크래시 뒤에도 살아남고 저장이나 수락된 닫기에서 지워지며(#3858), 크래시가 삼킨 편집을 되살리는 후속 PR #3866도 이날 열렸습니다. LSP 쪽은 구현·타입 정의·선언으로 이동하는 팔레트 명령(#3846)과 인레이 힌트(#3859)가 들어왔고, 힌트가 구문 색과 줄바꿈 경계의 열 위치를 어긋나게 하던 결함도 함께 고쳤습니다. 에이전트 탭의 턴 목록은 디스크에 저장되어 앱을 다시 켜도 남습니다(#3852).

maru 터미널 코어는 DECSET 2031 / DSR 996 색 구성 통지를 구현해, 테마 전환이 이를 구독한 앱에 전달되도록 했습니다(#3857). session-host는 출력 revision을 metadata 이벤트에서 빼서 불필요한 메타데이터 갱신을 없앴고(커밋이 밝힌 수치는 활성 32세션 조건에서 앱 CPU −35%), idle로 내려간 host 뒤에 새 Term이 in-process로 조용히 열리던 문제를 고쳤으며, 재접속 비용 측정과 oversized 세션의 형제 격리 테스트를 더했습니다. 이 밖에 밀린 pane을 고지 행으로 남기는 에이전트 훅 개선, 리소스 팝오버 합계 수정, 빌드 판정 61자리를 문자열에서 구조 판정으로 옮기면서 모듈 주입을 못 읽던 결함을 고친 작업(#3849), 상태바·마커 프리뷰·원격 에이전트를 그룹 파일로 떼어낸 app-runtime 리팩터링, 판정자 이름 정리가 이어졌습니다.

@ohah/pdf는 실문서 100편을 pymupdf·pdf.js·mupdf 결과와 맞대어 잡은 글자 추출·글꼴·그림 결함을 고치고 v0.2.1과 v0.2.2를 배포했습니다. v0.2.2에는 퍼저가 찾은 예측기의 범위 밖 읽기와 큰 QuadPoints에서 끝없이 돌던 문제의 수정도 들어갔습니다. hwpjs는 EMF의 Path·이미지·폴리라인·베지어·사각형 좌표를 장치 공간으로 옮기고, 아핀 타원과 호의 기하, 원뿔 곡선 구간, 파이 경계, 3차 베지어의 평가와 분할을 추가했습니다.

zntc는 async generator 함수와 메서드, 클래스 메서드의 다운레벨 변환, yield* 위임의 반환값, 상태 기계 루프의 반복별 let 바인딩, 본문이 다른 함수로 옮겨질 때의 arguments 캡처, es5 generator 안 for-of와 for-await 처리, public class field 변환을 고쳤고, minify 때 헬퍼에 축약명을 적용했습니다. 블로그 저장소에서는 9월 14일 이후 기록과 개발기를 보충하고 의존성 갱신, 미사용 eslint 제거, Node 26 고정, dist 추적 해제를 했습니다.

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

커밋

ohah/hwpjs

ohah/maru

ohah/ohah.github.io

ohah/pdf

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
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#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 선행)