2026-09-09

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

요약 (AI 작성)

maru에 앱 아이콘이 생긴 날입니다. 앰버 커서 모티프로 세 플랫폼 아이콘을 넣고(M11b, #3445), 두 덩이의 자리를 맞바꿔 「마」는 느낌으로만 남겼으며(#3460), 켤 때 번쩍이지 않는 런치 스크린을 붙였습니다(M11d, #3462). 모바일은 배포 준비 중 개발 쪽에서 미리 할 수 있는 셋을 했고(M11a, #3441), 첫 실행에 키가 안 서던 것을 Android(여는 자리를 Java로, #3419)와 iOS(파일을 세운다, #3423) 양쪽에서 고치고 알림 권한을 붙을 때 묻게 해 M16을 닫았습니다. 폰에서 실패가 아무 데도 안 남던 것에 진단 복사(M15a, #3433)와 죽은 자리 기록(M15b, #3435)을 붙이고, 하네스가 조용히 빗나가던 것을 재서 알게 했습니다(M8, #3439).

터미널은 kitty 프로토콜을 넓혔습니다. 번호로 보내는 I= 이미지(#3418), key release/repeat를 보고하는 report_events(#3421), 부모 기준 relative placement(#3427), 번호·커서 자리로 지우는 delete 타깃(#3442), keyboard flag 4·8·16(#3450), OSC 99 데스크톱 알림(#3459)을 얻었습니다. placeholder가 셋째 diacritic을 안 읽어 I= 이미지가 안 뜨던 것, 키를 뗄 때 글자가 한 번 더 나가던 자모 이중 입력(#3449, #3463), 누르고 있어도 반복이 안 먹던 것, alt 화면의 kitty flag가 셸로 새 앱이 죽으면 Ctrl+C가 먹통이던 것(#3464)도 고쳤습니다. 편집기는 줄 끝 너머로 미는 editor.scroll-beyond-last-column을 더하고(#3420), 구문 접힘 승격도 가로 상한·위치를 버리지 않게 했습니다.

활동 뷰는 전날 열린 #3415로 Enter가 본문까지 넓히게 됐고, Codex 결과 배열을 이어 읽으며(#3436) JS 껍데기를 벗겨 안쪽 도구와 명령을 보이게 했습니다(§2.2, #3461). 원격 채널은 hello를 놓친 채널을 죽은 것으로 보게 해 열 세션 중 둘만 서던 문제를 고쳤고(#3466), 침묵으로 죽은 채널을 되살리는 #3470은 이날 PR이 열렸습니다. 소스 컨트롤 원격 감시자는 git이 왜 실패했는지까지 남깁니다(v8, #3457). session-host는 원격 실측 입력과 timing artifact 출처를 검증·결속하고, 원격 Release metadata와 변경 전후 봉인, asset 다운로드, semantic 파일, 관측과 verdict 결속, verifier 배선, 통과 기록 보존(#3451)까지 이었으며, 양쪽 로그를 이어붙일 손잡이(#3403)와 선행 검사가 거부한 이유(#3469)를 남기게 했습니다.

hwpjs는 JPEG 디코더를 세웠습니다. 엔트로피 비트와 Huffman 심볼, 순차 계수 블록과 스캔·restart 구간, 양자화와 IDCT·샘플 복원, 프로그레시브 스캔과 계수 조립, JFIF·JFXX 썸네일·Adobe 메타데이터·내장 ICC 재조립까지 다루고 HWP5의 내장 JPEG 검사에 연결했습니다. BMP는 비압축과 RLE를 명시적 부분 인덱스 평면으로 풀고 V5 프로파일과 내장 ICC를 검사했으며, GIF 인덱스 프레임 디코드도 시작했습니다.

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

커밋

ohah/hwpjs

ohah/maru

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#3471생성 · 병합mergedmaintest(terminal): 적대적 검증 그물 둘 — 실제 앱 바이트와 할당 실패
ohah/maru#3470생성mergedmainfix(agent): 침묵으로 죽은 채널을 되살린다 — 스트리머는 멀쩡한데 배지만 죽던 자리
ohah/maru#3469생성 · 병합mergedmainfeat(session-host): 선행 검사가 «왜» 거부했는지 남긴다
ohah/maru#3468생성mergedmainfix(agent-activity): 갈래표가 Codex 어휘를 안다 — 28.9% 가 잘못된 칸에 있었다 (§2.1)
ohah/maru#3467생성mergedmaindocs(mobile): M11 을 여기까지로 닫고, 문서가 «없는 파일» 을 가리키던 것을 고친다
ohah/maru#3466생성 · 병합mergedmainfix(agent): hello 를 놓친 채널은 죽는다 — 열 세션 중 둘만 서던 자리
ohah/maru#3465생성 · 병합mergedmaindocs(native-editor): 매핑 레이어 재평가 트리거에 «접힘 토글의 재계산 비용» 을 더한다
ohah/maru#3464생성 · 병합mergedmainfix(terminal): alt 화면의 kitty flag 가 셸로 샜다 — 앱이 죽으면 Ctrl+C 가 먹통
ohah/maru#3463생성 · 병합mergedmainfix(chrome): 키를 뗀 것이 chrome 입력으로 새서 글자가 두 번 들어가던 것
ohah/maru#3462생성 · 병합mergedmainfeat(mobile): 런치 스크린 — 켤 때 번쩍이지 않는다 (M11d)
ohah/maru#3461생성 · 병합mergedmainfeat(agent-activity): Codex 는 JS 껍데기를 벗겨 안쪽 도구와 명령을 보인다 (§2.2)
ohah/maru#3460생성 · 병합mergedmainfeat(mobile): 아이콘 두 덩이의 자리를 맞바꾼다 — 「마」는 느낌으로만 (M11c)
ohah/maru#3459생성 · 병합mergedmainfeat(terminal): OSC 99 — kitty 데스크톱 알림
ohah/maru#3458생성 · 병합mergedmainfix(editor): 구문 접힘 승격도 가로 상한·위치를 안 버린다 — 세 번째 자리
ohah/maru#3457생성 · 병합mergedmainfeat(scm): 원격 감시자가 git 이 «왜» 실패했는지까지 남긴다 (v8)
ohah/maru#3456생성 · 병합mergedmainfix(terminal): 누르고 있어도 반복이 안 먹던 것 — repeat 은 press 와 같다
ohah/maru#3455생성 · 병합mergedmaindocs(session-host): 자동 업그레이드 상태를 실제 배선과 맞춘다
ohah/maru#3454생성 · 병합mergedmaintest(session-host): restore postcommit 실패를 실제 PTY로 닫는다
ohah/maru#3453생성 · 병합mergedmaintest(session-host): restore precommit 실패를 실제 PTY로 닫는다
ohah/maru#3452생성 · 병합mergedmainfeat(session-host): GitHub 보존 pass artifact를 동일 run에서 재검증한다
ohah/maru#3451생성 · 병합mergedmainfeat(session-host): 원격 릴리스 통과 기록을 보존한다
ohah/maru#3450생성 · 병합mergedmainfeat(terminal): kitty keyboard flag 4·8·16 — 대체 키·모든 키·연관 텍스트
ohah/maru#3449생성 · 병합mergedmainfix(terminal): 키를 뗄 때 글자가 한 번 더 나가던 것 (자모 이중 입력)
ohah/maru#3448생성 · 병합mergedmainfeat(session-host): wire remote release verifier
ohah/maru#3447생성 · 병합mergedmainfix(terminal): placeholder 가 셋째 diacritic 을 안 읽어 I= 이미지가 안 떴다
ohah/maru#3446생성 · 병합mergedmainfeat(session-host): bind remote release verdict
ohah/maru#3445생성 · 병합mergedmainfeat: 앱 아이콘 — 앰버 커서 모티프, 세 플랫폼 (M11b)
ohah/maru#3444생성 · 병합mergedmaintest(editor): 빠른 고리가 이름이 아니라 «모듈 경로» 로 고른다 — 224개가 0번 돌고 있었다
ohah/maru#3443생성 · 병합mergedmainfeat(session-host): bind remote release observation
ohah/maru#3442생성 · 병합mergedmainfeat(terminal): kitty delete 타깃 d=n·d=c — 번호로, 커서 자리로 지운다
ohah/maru#3441생성 · 병합mergedmainfeat(mobile): 배포 준비 — 개발 쪽에서 미리 할 수 있는 셋 (M11a)
ohah/maru#3440생성 · 병합mergedmainfeat(session-host): bind held release semantic files
ohah/maru#3439생성 · 병합mergedmainfix(mobile): 하네스가 조용히 빗나가고 있었다 — 재서 알고, 안 되면 말한다 (M8)
ohah/maru#3438생성 · 병합mergedmainfeat(session-host): bind remote release semantics
ohah/maru#3437생성 · 병합mergedmaindocs(editor): breadcrumb 은 이미 저장소 루트 기준이다 — 낡은 문장 넷과 안 돌던 판정자 일곱
ohah/maru#3436생성 · 병합mergedmainfix(agent-activity): Codex 결과는 배열이다 — 원소를 이어 읽는다 (§2.4·§2.1.1)
ohah/maru#3435생성 · 병합mergedmainfeat(mobile): 죽으면 그 자리를 남긴다 — 다음 실행이 보여 준다 (M15b)
ohah/maru#3434생성 · 병합mergedmainfeat(session-host): download remote release assets by exact ID
ohah/maru#3433생성 · 병합mergedmainfeat(mobile): 폰에서 실패가 아무 데도 안 남았다 — 진단을 복사할 수 있게 한다 (M15a)
ohah/maru#3432생성 · 병합mergedmainfeat(session-host): 원격 Release 변경을 전후 봉인한다
ohah/maru#3431생성 · 병합mergedmaintest(editor): 가로 축의 안 재던 자리 다섯을 잰다 — 변이 6회차가 연 구멍
ohah/maru#3430생성 · 병합mergedmainfeat(session-host): 원격 Release metadata를 결속한다
ohah/maru#3429생성 · 병합mergedmaindocs(mobile): M16 을 닫는다 — 첫 실행 경험 네 조각이 다 섰다
ohah/maru#3428생성 · 병합mergedmainfix(android): 알림이 떠 있으면서 안 보였다 — 붙을 때 권한을 묻는다 (M16c)
ohah/maru#3427생성 · 병합mergedmainfeat(terminal): kitty relative placement (P/Q/H/V) — 부모 기준으로 이미지를 놓는다
ohah/maru#3426생성 · 병합mergedmainfeat(session-host): live timing 검증기를 배선한다
ohah/maru#3425생성 · 병합mergedmaindocs(mobile): M16b 를 닫는다 — 두 기기 다 첫 실행에 키가 선다
ohah/maru#3424생성 · 병합mergedmainfeat(session-host): 원격 timing artifact를 안전하게 가져온다
ohah/maru#3423생성 · 병합mergedmainfeat(ios): 키를 «만드는» 자리가 없었다 — 첫 실행에 파일을 세운다 (M16b-2)
ohah/maru#3422생성 · 병합mergedmainfeat(session-host): 원격 timing artifact 출처를 결속한다
ohah/maru#3421생성 · 병합mergedmainfeat(terminal): kitty report_events — key release/repeat 를 보고한다 (flag 2)
ohah/maru#3420생성 · 병합mergedmainfeat(editor): 줄 끝 너머로 민다 — editor.scroll-beyond-last-column (기본 5)
ohah/maru#3419생성 · 병합mergedmainfix(android): 첫 실행에 키가 안 섰다 — 여는 자리를 Java 로 옮긴다 (M16b-1)
ohah/maru#3418생성 · 병합mergedmainfeat(terminal): kitty I= image number — 번호로 보내는 클라이언트의 이미지가 뜬다
ohah/maru#3417생성 · 병합mergedmainfeat(session-host): GitHub 원격 실측 입력을 검증한다
ohah/maru#3415병합mergedmainfeat(agent-activity): Enter 가 본문까지 넓힌다 — 라벨은 세션의 2.9% 다 (BS1)
ohah/maru#3403병합mergedmainfeat(session-host): 양쪽 로그를 이어붙일 손잡이와 시각을 남긴다