2026-09-19

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

요약 (AI 작성)

zntc v0.1.9와 maru 편집기 자동완성이 들어온 날입니다. zntc는 전날 열린 #4664로 CJS default import 직접 축약을 ESM importer에도 적용하고, package.json "type":"module"을 사용자 프로젝트 코드에도 적용한 뒤(#4666, 앞선 시도 #4665는 닫힘) v0.1.9 릴리스 커밋을 냈습니다(#4667). 릴리스 뒤에는 bun.lock 동기화 PR 생성 실패를 조용히 넘기지 않도록 CI를 고쳤습니다(#4668). maru 편집기는 F2로 심볼 이름을 바꾸고 WorkspaceEdit 전부를 검증한 뒤 적용·저장하며 Undo Last Rename을 두었고(#3795), ⌘.로 진단 문맥의 code action을 컨텍스트 메뉴에 띄웠습니다(#3798).

자동완성은 세 조각이 들어왔습니다. 식별자·트리거 글자·⌃Space로 completion을 묻고 로컬 필터로 좁혀 고르면 textEdit과 additionalTextEdits가 undo 하나로 적용되는 ①-a(#3797), 서버 없는 파일에도 버퍼 단어를 띄우고 LSP 항목과 병합해 fuzzy로 정렬하며 강조 항목을 미리 resolve하는 ①-b(#3804), labelDetails 꼬리와 description을 보이고 넘치면 순서대로 접는 ①-c(#3807)입니다. ①-b와 함께 rust-analyzer가 i32를 넘는 요청 id를 알림으로 오인해 시그니처·포맷·rename·completion·code action 응답이 없던 것을 실측으로 찾아 id를 i32 안으로 넣었습니다.

terminal-core는 kitty 전송 매체 t=f/t=t/t=s와 S/O를 받아 kitten icat이 maru에서 memory를 고르게 했고(#3805), 원격 애니메이션은 「로컬 전용」이 아니라 「돌되 프레임마다 blob 전체를 싣는다」로 문서를 고쳤습니다(#3800). 에이전트 훅은 PostToolUse·PostToolUseFailure(Bash)로 셸 구간을 닫습니다(AT3b-1, #3806). 합자 왼쪽 오버항을 반올림에서 문턱 뺀 올림으로 바꿔 ...가 ..로 잘리던 결함을 고쳤고(#3802), 복구 세션의 한글 preedit를 PTY echo 전에도 제자리에 표시합니다(#3796). 「세션 정보를 동기화하지 못했습니다」가 어느 런타임에서 얼마나 기다려 났는지와 구독 무효화의 호출자를 로그에 남기게 했고, §10.9 폭포 검산은 기대 CTLine 4.2ms가 실측 4.19ms와 맞았습니다. hwpjs는 EMF+의 custom line cap·pen·region·string format·font·image attributes·clear 레코드와 arc·bezier·closed curve·curve 그리기 레코드를 파싱합니다.

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

커밋

ohah/hwpjs

ohah/maru

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#3807생성 · 병합mergedmainfeat(editor): 자동완성 ①-c — labelDetails: label 뒤 꼬리(옅게)·오른쪽 description, 넘치면 오른쪽(16 문턱) → 꼬리 → label 순으로 접기 (§8.2g-c)
ohah/maru#3806생성 · 병합mergedmainfeat(agent-hooks): AT3b-1 — PostToolUse·PostToolUseFailure(Bash) 로 셸 구간을 닫는다, 순수 층 shell_bracket + 턴과 함께 봉인
ohah/maru#3805생성 · 병합mergedmainfeat(terminal-core): kitty 전송 매체 t=f/t=t/t=s + S/O — kitten icat 이 maru 에서 memory 를 고른다
ohah/maru#3804생성 · 병합mergedmainfeat(editor): 자동완성 ①-b — 버퍼 단어·LSP 병합·fuzzy·강조 항목 미리 resolve(undo 하나)·kind 열 (§8.2g-b) + fix(lsp): 요청 id 를 i32 안으로(rust-analyzer 실측)
ohah/maru#3803생성 · 병합mergedmainfix(session-host): 구독 무효화의 호출자마다 이름을 준다 — 이름이 있어도 못 갈랐다
ohah/maru#3802생성 · 병합mergedmainfix(font): 합자 왼쪽 오버항을 반올림에서 문턱 뺀 올림으로 — ... 가 .. 로 잘리던 결함
ohah/maru#3801생성 · 병합mergedmaindocs(present): §10.9 폭포 검산 — 기대 CTLine 4.2ms = 실측 4.19ms, 남은 shaping 은 합자·폴백 그대로 (착수 없음)
ohah/maru#3800생성 · 병합mergedmaindocs(kitty): 원격 애니메이션은 «로컬 전용»이 아니라 «돌되 프레임마다 blob 전체를 싣는다»
ohah/maru#3799생성 · 병합mergedmaindiag(app): 「세션 정보를 동기화하지 못했습니다」가 어느 런타임에서·얼마나 기다려 났는지 안 남겼다
ohah/maru#3798생성 · 병합mergedmainfeat(editor): code action — ⌘. 로 진단 문맥의 codeAction 을 컨텍스트 메뉴로, edit(또는 resolve)를 WorkspaceEdit 규칙으로 적용 (LSP 2단 ⑦, §8.2h) + main 의 RemoteRuntime 크기 pin 수정
ohah/maru#3797생성 · 병합mergedmainfeat(editor): 자동완성 ①-a — LSP 완성 팝업: 식별자·트리거 글자·⌃Space 로 묻고 로컬 필터로 좁혀 고르면 textEdit+additionalTextEdits 가 undo 하나 (LSP 2단 ⑥, §8.2g)
ohah/maru#3796생성 · 병합mergedmainfix(session-host): 복구 세션의 한글 preedit를 PTY echo 전에도 제자리에 표시
ohah/maru#3795생성 · 병합mergedmainfeat(editor): 심볼 이름 바꾸기 — F2 → textDocument/rename, WorkspaceEdit 전부 검증 뒤 적용·저장·Undo Last Rename (LSP 2단 ⑤, §8.2f)
ohah/zntc#4668생성 · 병합mergedmainci(release): bun.lock 동기화 PR 생성 실패를 조용히 넘기지 않는다
ohah/zntc#4667생성 · 병합mergedmainchore: release v0.1.9
ohah/zntc#4666생성 · 병합mergedmainfix(bundler): package.json "type":"module" 을 사용자 프로젝트 코드에도 적용
ohah/zntc#4665생성closedmainfix(bundler): package.json "type":"module" 을 사용자 프로젝트 코드에도 적용
ohah/zntc#4664병합mergedmainperf(bundler): CJS default import 직접 축약을 ESM importer 에도 적용