2026-09-08

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

요약 (AI 작성)

hwpjs가 ICC 역함수와 JPEG 헤더에 들어간 날입니다(68커밋). ICC는 chromatic adaptation 행렬과 고정 행렬을 정확한 유리수로 평가해 matrix TRC 모델을 조립하고, power level root를 활성 구간에서 찾고, clipped parametric branch jump를 분류하며, preimage 경계와 도달 가능성을 정확히 보존하고, full-width rational XYZ 행렬을 뒤집고, 넓은 gamma 역을 기호로 보존하는 데까지 갔습니다. PNG에 내장된 ICC 프로파일과 필수 태그·v2 텍스트 태그를 검사하고 이를 HWP5 BinData에 연결했으며, JPEG은 마커와 엔트로피 경계, frame·scan 헤더, quantization·Huffman 테이블을 파싱했습니다. @ohah/pdf는 표준 글꼴을 밖에서 받아 실을 수 있게 하고, CMap 표를 델타로 줄여 7.3MB를 3.8MB로, 엔진은 wasm-opt로 13% 줄였습니다.

maru 편집기는 전날 열린 #3370으로 비교 뷰에 caret을 세워 키보드로 읽게 했고, 열을 ⌃⇧Tab으로 넘기며(#3381), 가로도 caret을 따라가게 했습니다(두 뷰 공통, #3391). 편집과 접힘이 가로 위치·상한을 버리던 것을 고치고(#3404, #3407), 상태바가 비교 뷰에도 L/R 줄:열을 내게 했습니다(#3389). 활동 뷰는 결과가 이미지인 호출을 한 줄로 접고(AV4b, #3376), 펼쳐도 명령이 안 보이던 것을 고쳤으며(#3377), 접힌 줄에 썸네일을 보이고(AV5, #3388) 적대적 검증을 여러 회 기록했습니다. 이름도 image_gallery에서 활동 뷰에 맞게 바꿨습니다. Enter가 본문까지 넓히는 #3415는 이날 PR이 열렸습니다.

터미널은 kitty U=1 유니코드 placeholder를 받아 tmux 경유 이미지가 제자리에 뜨게 하고, kitty a=q·XTWINOPS·DECRQM·winsize 픽셀 같은 응답을 메웠으며(#3398), TERM_PROGRAM 위장을 걷어 maru가 자기 이름을 말하게 했습니다. 워크트리에서 남의 브랜치를 말하던 git 판정도 고쳤습니다(#3382). file-tree 워커를 거두고 나가게 한 #3399는 병합됐다가 deinit이 워커를 기다리지 않게 하는 #3402로 되돌려졌습니다. PR 체크리스트에는 각자는 초록인데 합치면 깨지는 경우를 다루는 합류 규율이 들어갔습니다(#3383).

모바일은 아틀라스를 그리는 배율에 맞춰 굽고 Android도 셀이 바뀌면 다시 굽게 했으며(#3390, #3392), OS 접근성 글자 크기를 따라가고(M13c, #3393), 새 출력을 소리로 알리고(M9a, #3395), 스크롤백을 낭독기로 훑고(M9b), 선택을 줄 단위 동작으로 만들었습니다(M9c, #3401). 저전력 모드면 그리는 주기를 반으로 하고(M14a) 배경에서는 아예 깨어나지 않게 했으며(M14b), 첫 실행이 빈 검은 화면이던 것도 고쳤습니다(#3416). session-host는 전날 열린 upgrade stage3 preparation #3371을 병합하고, profile stage3 명령과 live checkpoint 결속, authored profile subject 선택, profile별 attestation payload와 최종 fence, profile-aware aggregate 완성(#3414)까지 이었으며, 닫은 사유와 활성화 거부 조건을 로그에 남기게 했습니다.

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

커밋

ohah/hwpjs

ohah/maru

ohah/pdf

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#3416생성 · 병합mergedmainfeat(mobile): 첫 실행이 빈 검은 화면이었다 — 갈 곳에서 서게 한다 (M16a)
ohah/maru#3415생성mergedmainfeat(agent-activity): Enter 가 본문까지 넓힌다 — 라벨은 세션의 2.9% 다 (BS1)
ohah/maru#3414생성 · 병합mergedmainfeat(session-host): profile-aware aggregate를 완성한다
ohah/maru#3413생성 · 병합mergedmainfeat(session-host): profile authored checkpoint를 live 배선한다
ohah/maru#3412생성 · 병합mergedmainfeat(session-host): authored attestation 최종 fence를 고정한다
ohah/maru#3411생성 · 병합mergedmainfeat(session-host): profile별 attestation payload를 고정한다
ohah/maru#3410생성 · 병합mergedmainfeat(agent): orphan 에 «내가 뭘 들고 있었나» 를 함께 남긴다
ohah/maru#3409생성 · 병합mergedmainfeat(session-host): profile별 검증 대상을 fresh process에서 고정한다
ohah/maru#3408생성 · 병합mergedmaindocs(mobile): 데이터 절약 — 줄일 것이 없다는 것을 재서 적는다 (M14c)
ohah/maru#3407생성 · 병합mergedmainfix(editor): 접힘도 가로 위치·상한을 안 버린다 — 접을 때 막대가 사라지던 자리
ohah/maru#3406생성 · 병합mergedmainperf(mobile): 배경에서는 아예 안 깨어난다 (M14b)
ohah/maru#3405생성 · 병합mergedmainfeat(mobile): 저전력 모드면 그리는 주기를 반으로 (M14a)
ohah/maru#3404생성 · 병합mergedmainfix(editor): 편집이 가로 위치·상한을 안 버린다 — 되감기는 「그 다음 프레임」이었다
ohah/maru#3403생성mergedmainfeat(session-host): 양쪽 로그를 이어붙일 손잡이와 시각을 남긴다
ohah/maru#3402생성 · 병합mergedmainrevert(file-tree): deinit 은 워커를 안 기다린다 — 남이 이미 고친 것을 되돌린다
ohah/maru#3401생성 · 병합mergedmainfeat(mobile): 선택을 «줄 단위 동작» 으로 만든다 (M9c)
ohah/maru#3400생성 · 병합mergedmainfeat(mobile): 스크롤백을 낭독기로 훑는다 (M9b)
ohah/maru#3399생성 · 병합mergedmainfix(file-tree): 워커를 거두고 나간다 — CI 간헐 누수의 원인
ohah/maru#3398생성 · 병합mergedmainfix(terminal): 대답하는 쪽을 메운다 — kitty a=q·XTWINOPS·DECRQM·winsize + TERM_PROGRAM 위장 철회
ohah/maru#3397생성 · 병합mergedmainfeat(session-host): select authored profile subjects
ohah/maru#3396생성 · 병합mergedmainrefactor(agent-activity): 이름이 거짓이 아니게 한다 — image_gallery → agent_activity (AV6)
ohah/maru#3395생성 · 병합mergedmainfeat(mobile): 새 출력을 소리로 알린다 (M9a)
ohah/maru#3394생성 · 병합mergedmainfeat(session-host): live stage 3를 보호된 profile로 선택한다
ohah/maru#3393생성 · 병합mergedmainfeat(mobile): OS 접근성 글자 크기를 따라간다 (M13c)
ohah/maru#3392생성 · 병합mergedmainfeat(mobile): Android 도 셀이 바뀌면 아틀라스를 다시 굽는다 (M13b)
ohah/maru#3391생성 · 병합mergedmainfeat(editor): 가로도 caret 을 따라간다 — 두 뷰 공통
ohah/maru#3390생성 · 병합mergedmainfeat(mobile): 아틀라스를 «그리는 배율» 에 맞춰 굽는다 — 확대가 아니라 그린다
ohah/maru#3389생성 · 병합mergedmainfeat(status-bar): 비교 뷰에도 커서 위치를 낸다 — L/R 줄:열
ohah/maru#3388생성 · 병합mergedmainfeat(agent-activity): 접힌 줄이 그림도 보여 준다 — 「전체」의 썸네일 (AV5)
ohah/maru#3387생성 · 병합mergedmainfeat(session-host): profile stage3를 live checkpoint에 결속한다
ohah/maru#3386생성 · 병합mergedmainfix(app-session): 판정자가 detached worker 보다 먼저 끝나지 않게 한다
ohah/maru#3385생성 · 병합mergedmainfeat(session-host): profile stage3 준비를 실제 validator 경로에 연결한다
ohah/maru#3384생성 · 병합mergedmainfeat(session-host): 활성화 단계 거부가 어느 조건이었는지 말한다
ohah/maru#3383생성 · 병합mergedmaindocs(pr-checklist): 각자는 초록인데 합치면 깨지는 것 — 합류 규율
ohah/maru#3382생성 · 병합mergedmainfix(git): 워크트리에서 남의 브랜치를 말하고 있었다
ohah/maru#3381생성 · 병합mergedmainfeat(editor): 비교 뷰의 열을 ⌃⇧Tab 으로 넘긴다
ohah/maru#3380생성 · 병합mergedmainfix(agent-index): 파일 번호는 스캐너가 찍는다 — 퇴출이 배열을 당겨도 안 어긋난다
ohah/maru#3379생성 · 병합mergedmainfeat(session-host): 닫은 사유를 안쪽까지 찍는다
ohah/maru#3378생성 · 병합mergedmainfeat(session-host): bootstrap profile stage3 command
ohah/maru#3377생성 · 병합mergedmainfix(agent-activity): 펼쳐도 명령이 안 보였다 — 계약이 갚기로 한 대가를 갚는다
ohah/maru#3376생성 · 병합mergedmainfeat(agent-activity): 결과가 이미지인 호출은 한 줄이다 — 「전체」의 중복 접기 (AV4b)
ohah/maru#3375생성 · 병합mergedmainfeat(session-host): publish profile upgrade timing artifact
ohah/maru#3374병합mergedmainfix(agent): 메모리가 잠깐 모자랐다고 그 목적지를 영영 죽이지 않는다
ohah/maru#3371병합mergedmainfeat(session-host): compose upgrade stage3 preparation
ohah/maru#3370병합mergedmainfeat(editor): 비교 뷰에 caret 이 선다 — 키보드로 읽는다