2026-09-10

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

요약 (AI 작성)

zntc가 v0.1.7 릴리스 커밋을 낸 날입니다. VFS 번들러가 entry의 import를 해석하도록 listDir를 구현하고(#4646), 형제 파일이 동명 디렉토리 index를 이기도록 해석 순서를 고친 뒤 v0.1.7을 냈습니다(#4647). maru 활동 뷰는 Codex 어휘를 아는 갈래표로 28.9%가 잘못된 칸에 있던 것을 바로잡고(#3468), 옛 형식의 JSON 껍데기를 벗겨 라벨의 74.4%가 명령이 되게 했으며(§2.2, #3472), 검색이 입력 전부를 보게 해 사각 26.2%를 없앴습니다(#3481). chunk 껍데기를 벗겨 갇힌 출력 191.5MB를 되찾고(#3498), 「구조는 벗기고 글자는 안 알아본다」를 계약으로 뒀습니다(§2.3). 원격 채널은 전날 열린 #3470으로 침묵으로 죽은 채널을 되살리고, 좀비가 EOF를 안 줘도 조용하면 스트리머를 다시 띄우며(#3477), host 세대가 바뀌면 pane을 영영 못 받던 것을 pane 칸 귀속으로 고쳤습니다(#3491).

편집기는 줄별 폭 캐시(L2)로 접힘 토글이 문서를 다시 훑지 않게 해 30.3ms를 1.29ms로 줄였고(#3502), caret이 가장자리에 붙기 전에 굴리는 여백(세로 5, 가로 0)을 넣었으며(#3474), 접힘 범위를 못 센 것을 접을 것이 없는 것과 가르게 했습니다. 터미널은 kitty를 켠 앱에서 키를 누르고 있어도 한 번만 먹던 것(#3486), DECRQM이 ?1048을 모른다고 답하던 것(#3500), 침묵이 앱을 멈추게 하던 ANSI 모드 질의와 DSR-DEC 응답(#3503)을 고쳤고, kitty 애니메이션의 프레임 전송·재생 제어·합성을 넣은 뒤(#3505) 그것이 메모리 예산을 우회하고 LRU를 뒤집던 것을 잡았습니다(#3510). 키를 뗄 때 매크로·앱 액션이 다시 나가던 것도 고쳤습니다(#3475).

모바일은 누름이 표를 지나게 해 서버 목록(M12a, #3478)과 원격 세션 목록(M12b, #3490)을 옮기고, 남은 화면을 옮기며 옛 자리를 없애 M12를 닫았습니다(#3492). 목록 끝에서 튕기게 하고(#3501), 서버 목록 줄이 머리를 덮던 것과 추천 단어가 통째로 들어가던 것을 고쳤습니다(#3504, #3512). session-host는 target_invalid의 진짜 이유를 자식이 자기 파일에 적게 하고(#3480), 늦게 추가한 tag가 필수여서 새 빌드를 깔 때마다 host가 하나씩 늘던 것을 잡았습니다(#3488). 앱이 어느 바이너리인지 스스로 말하게 했고(#3507), 출하 빌드에서 UB였던 undefined 세션 선언 88개를 걷어냈습니다(#3508, #3511). 러너가 묵은 /tmp 픽스처를 쓸어 내는 #3509는 이날 PR이 열렸습니다.

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

커밋

ohah/maru

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#3512생성 · 병합mergedmainfix(mobile): 추천 단어가 통째로 들어갔다 — 확정도 «맞춘다» (M2-f1)
ohah/maru#3511생성 · 병합mergedmaintest: undefined 세션 선언 88개를 걷어낸다 — 읽히는 축이 결정적이 된다
ohah/maru#3510생성 · 병합mergedmainfix(terminal): 애니메이션이 메모리 예산을 우회하고 LRU 를 뒤집었다
ohah/maru#3509생성mergedmainfix(tests): 러너가 묵은 /tmp 픽스처를 쓸어 낸다 — 47.4 GB 가 쌓여 있었다
ohah/maru#3508생성 · 병합mergedmainfix(test): undefined 세션을 걷어낸다 — 출하 체제에서 UB 였다 (+ editor ReleaseFast 잡)
ohah/maru#3507생성 · 병합mergedmainfeat(app): 앱이 어느 바이너리인지 스스로 말한다
ohah/maru#3506생성 · 병합mergedmaindocs(agent-activity): 「구조는 벗기고 글자는 안 알아본다」를 계약이 든다 (§2.3)
ohah/maru#3505생성 · 병합mergedmainfeat(terminal): kitty 애니메이션 — a=f 프레임 전송·a=a 재생 제어·a=c 합성
ohah/maru#3504생성 · 병합mergedmainfix(mobile): 서버 목록 줄이 머리를 덮었다 — 머리를 본문 뒤로 (U1-f1)
ohah/maru#3503생성 · 병합mergedmainfeat(terminal): ANSI 모드 질의와 DSR-DEC 에 답한다 — 침묵이 앱을 멈추게 했다
ohah/maru#3502생성 · 병합mergedmainperf(editor): 줄별 폭 캐시(L2) — 접힘 토글이 문서를 다시 안 훑는다 (30.3ms → 1.29ms)
ohah/maru#3501생성 · 병합mergedmainfeat(mobile): 끝에서 튕긴다 — 유계 좌표는 그대로 둔다 (U1 bounce)
ohah/maru#3500생성 · 병합mergedmainfix(terminal): DECRQM 이 ?1048 을 «모른다» 고 답했다 — 목록을 소스에서 뽑는다
ohah/maru#3499생성 · 병합mergedmaindocs(native-editor): 접힘 토글 비용을 «직접 재서» 고친다 — 트리거가 울렸다
ohah/maru#3498생성 · 병합mergedmainfeat(agent-activity): chunk 껍데기를 벗긴다 — 갇힌 출력 191.5 MB 를 되찾는다 (§2.4)
ohah/maru#3497생성 · 병합mergedmainfix(mobile): U1 의 히트 44 는 «없어진 일» 이었다 — 재고 게이트를 세운다
ohah/maru#3496생성 · 병합mergedmaintest(terminal): 문서가 약속했는데 판정자가 없던 갈래 셋에 그물을 단다
ohah/maru#3495생성 · 병합mergedmaintest(syntax): 접힘 범위의 «가장 긴 것 하나» 를 잰다 — 적대적 3회
ohah/maru#3494생성 · 병합mergedmainfix(test): 실 프로세스 스모크를 샤드 밖으로 — 테스트 하나가 늘면 터지던 자리
ohah/maru#3493생성 · 병합mergedmainfix(editor): 접힘 범위를 «못 센 것» 은 「접을 것이 없다」가 아니다 — 실패를 보고한다
ohah/maru#3492생성 · 병합mergedmainfeat(mobile): 남은 화면을 옮기고 옛 자리를 없앤다 — M12 를 닫는다 (M12c)
ohah/maru#3491생성 · 병합mergedmainfix(agent): host 세대가 바뀌면 그 pane 을 영영 못 받았다 — pane 칸으로 귀속한다
ohah/maru#3490생성 · 병합mergedmainfeat(mobile): 원격 세션 목록도 표를 지난다 — 뜻은 «그 세션의 id» (M12b)
ohah/maru#3489생성 · 병합mergedmaintest(editor): 구문 접힘 승격의 «실패 갈래» 를 잰다 — 할당 실패 주입
ohah/maru#3488생성 · 병합mergedmainfix(session-host): 새 빌드를 깔 때마다 host 가 하나씩 늘던 것 — 늦게 추가한 tag 가 필수였다
ohah/maru#3487생성 · 병합mergedmaintest(terminal): 공허하게 통과하던 kitty 판정자 둘을 훑어 고친다
ohah/maru#3486생성 · 병합mergedmainfix(terminal): kitty 를 켠 앱에서 키를 누르고 있어도 한 번만 먹던 것 — repeat 은 press 다
ohah/maru#3485생성 · 병합mergedmaintest(session-host): handoff stable field를 전수 검증한다 — U1 종료 gate
ohah/maru#3484생성 · 병합mergedmainfeat(agent): orphan 은 «가장 가까운 짝» 을 남긴다 — 엉뚱한 Term 이 덮던 자리
ohah/maru#3483생성 · 병합mergedmainfix(mobile): 붙어 달라는 요청을 누른 그때 집는다 — iOS 만 갈려 있었다 (M12-f1)
ohah/maru#3482생성 · 병합mergedmaintest(session-host): 원격 parity 가 가상 placement 를 헛통과하고 있었다
ohah/maru#3481생성 · 병합mergedmainfeat(agent-activity): 검색이 입력 전부를 본다 — 사각 26.2% 를 없앤다 (§2.1.1)
ohah/maru#3480생성 · 병합mergedmainfix(session-host): target_invalid 의 진짜 이유를 남긴다 — 자식이 자기 파일에 적는다
ohah/maru#3479생성 · 병합mergedmaintest(editor): caret 여백 판정자가 «절반 clamp 의 기준» 까지 잰다 — 적대적 3회
ohah/maru#3478생성 · 병합mergedmainfeat(mobile): 누름이 표를 지난다 — 서버 목록 (M12a)
ohah/maru#3477생성 · 병합mergedmainfix(agent): 조용하면 스트리머를 다시 띄운다 — 좀비는 EOF 를 안 준다
ohah/maru#3476생성 · 병합mergedmaintest(terminal): 부모 검증이 고아 정리 비용의 상한임을 고정한다 (3 ms vs 1094 ms)
ohah/maru#3475생성 · 병합mergedmainfix(input): 키를 뗄 때 매크로·앱 액션이 다시 나가 동작이 두 번 일어나던 것
ohah/maru#3474생성 · 병합mergedmainfeat(editor): caret 여백 — 가장자리에 붙기 전에 굴린다 (세로 5 · 가로 0)
ohah/maru#3473생성 · 병합mergedmainfix(mobile): 적대적 검증 8~10회차 — 계약이 코드와 어긋났고, 산출물이 근거를 뒤집었다
ohah/maru#3472생성 · 병합mergedmainfeat(agent-activity): 옛 형식의 JSON 껍데기를 벗긴다 — 라벨의 74.4% 가 명령이 된다 (§2.2)
ohah/maru#3470병합mergedmainfix(agent): 침묵으로 죽은 채널을 되살린다 — 스트리머는 멀쩡한데 배지만 죽던 자리
ohah/maru#3468병합mergedmainfix(agent-activity): 갈래표가 Codex 어휘를 안다 — 28.9% 가 잘못된 칸에 있었다 (§2.1)
ohah/maru#3467병합mergedmaindocs(mobile): M11 을 여기까지로 닫고, 문서가 «없는 파일» 을 가리키던 것을 고친다
ohah/zntc#4647생성 · 병합mergedmainchore: release v0.1.7
ohah/zntc#4646생성 · 병합mergedmainfix(wasm): VFS 번들러가 entry 의 import 를 해석하도록 listDir 구현