2026-09-01
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
@ohah/pdf가 메모리를 잡은 날입니다. 안 쓰는 자리는 잡지 않아 바닥 메모리를 112MB에서 38MB로, 이어 정적 곳간을 늦게 잡아 26MB로 줄였고, 스캔 그림을 원본 해상도로 펼치던 것(465MB에서 55MB)과 wasm 스택(16MB에서 2MB)도 줄였습니다. 4만 쪽 문서 처리가 89초에서 49ms가 됐고, 받을 수 있는 파일 크기를 1689MB로 올렸으며, 세는 상한을 걷어내 표가 문서에 맞춰 늘어나게 했습니다. 빽빽한 쪽이 통째로 백지로 나오던 것, 출력 자리가 꽉 차면 쪽 표를 뭉개던 것, 양식 문서가 빈 쪽으로 그려지던 것을 고쳤고, 레거시 전수조사가 낸 다섯 중 파일을 망가뜨리던 둘과 환경이 깨진 자리 열세 가지를 두들기며 나온 셋도 고쳤습니다. 범위 요청·열 때 갈 자리·양식 계산식·XFA 읽기와 낮은 층 API 내보내기도 더했습니다.
maru의 에이전트 상태는 훅과 화면을 한 판정으로 합쳤습니다. 권위표를 순수 층으로 세우고 실제 codex 화면과 원격 SSH+tmux로 실측한 뒤 배선했습니다(#3019). 전날 열린 원격 배지 재접속 #2985가 병합돼 이어읽기 커서와 백오프 재접속이 들어왔고, 원격 셸 규율 통합 #3000도 병합됐습니다. 원격 축은 소스 컨트롤에서 원격 index를 바꾸고(RS4a, #3005) 메시지를 stdin으로 보내 원격 커밋하며(RS4b, #3011), 원격 fetch를 활성 pane에 넣고 CI에서 실물 SSH로 돌게 했습니다(#3015). 보고자 없는 원격 pane이 로컬로 판정되던 링크 구멍(#3018), 원격 폴더줄이 훅이 알려 준 작업 디렉터리를 쓰는 것(#3012), 종료 안내가 원격 경로를 로컬처럼 적던 것(#3034), 갤러리가 원격 pane의 대화를 로컬에서 열던 것(#3027), 소켓 없는 원격 pane이 로컬 저장소를 보여 주던 것(#3057)을 고쳤고, 컨트롤 플레인 DTO가 cwd_host로 어느 기계의 경로인지 알리게 했습니다(#3044).
편집기는 찾기가 대소문자와 낱말을 가리고(⌥⌘C·⌥⌘W, #3014), 고른 범위 안으로 가두며(⌥⌘L, #3037), 스크롤 막대에 검색 결과 마커를 찍었습니다(#3025). 비교 뷰에서도 ⌘F가 선택이 있는 열을 세고 그 막대에 마커가 찍히게 했습니다(#3052). Windows는 ⌥⌘C 하나 때문에 Ctrl+Shift+C가 복사가 아니게 돼 있던 것을 고치고(#3024), 목록이 Page/Home/End로 굴러가게 했으며, 도크를 다시 그릴 때마다 폰트 폴백을 새로 짓던 것을 17ms에서 2ms로 줄였습니다(#3033). 늘 빨갛던 게이트도 13개 실패를 1개로 줄였습니다(#3043).
session-host는 릴리스 인증을 촘촘히 쌓았습니다. predecessor release asset 인증(#2999)에 이어 GitHub tag chain 검증(#3004), 현재 GitHub 권위와 릴리스 인증, manifest를 GitHub 증명에 결속하고 pathname을 private 증명 입력으로 고정, frozen executable pathname의 fd 권위, 제품 권위와 evidence signer 결속, private asset 실체화와 attest, frozen compatibility 관측, 최종 관측 조립, release audit 요약 인코딩과 게시, executable 권위 부트스트랩과 토큰 캡처, manifest candidate 권위, 절대 deadline과 권위·릴리스·manifest deadline 공유까지 이었습니다. 하위 PR 하나(#3035)는 기능 브랜치에 병합됐습니다. 이는 검증 기반이며 이날 maru 릴리스가 나간 것은 아닙니다. 모바일과 --stream은 폰이 알린 뷰포트가 host 슬롯까지 닿게 하고(#3039), 원격 화면이 창보다 높으면 아래를 보여 주며, 배경색과 반전을 그리게 했습니다(#3001).
공개 커밋 175개, 해당일 생성 또는 병합된 PR 71개를 정리했습니다. PR 생성 67개·병합 68개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- docs(editor): 닫힌 기능을 「아직」이라 말하던 문장 아홉을 고친다
- feat(session-host): share current manifest deadline
- test(session-host): drive current manifest deadline
- docs(session-host): bind current manifest deadline
- feat(session-host): share current release deadline
- test(session-host): drive current release deadline
- docs(session-host): bind current release deadline
- feat(session-host): share current authority deadline
- test(session-host): drive current authority deadline
- docs(session-host): bind current authority deadline
- ci: allow macOS product gates to finish
- feat(session-host): own release absolute deadline
- test(session-host): drive release absolute deadline
- docs(session-host): define release absolute deadline
- feat(session-host): consume manifest candidate authority
- test(session-host): drive manifest candidate consumption
- docs(session-host): define manifest candidate consumption
- feat(session-host): own manifest candidate authority
- test(session-host): drive manifest candidate authority
- docs(session-host): define manifest candidate authority
- fix(test): 판정자가 초기화 안 된 file_tree 에 심어 누수를 냈다 — CI 가 잡았다
- fix(scm): 소켓이 없는 원격 pane 이 로컬 저장소를 보여 줬다 — 제품 화면으로 잡았다
- feat(session-host): capture release token authority
- test(session-host): drive release token capture
- docs(session-host): define release token capture
- fix(session-host): controller 없는 세션의 observer 도 뷰포트를 선언할 수 있다 (S11-6)
- feat(session-host): bootstrap release executable authority
- test(session-host): drive release executable bootstrap
- docs(session-host): define release executable bootstrap
- feat(session-host): publish release audit summaries
- test(session-host): drive release summary publication
- docs(session-host): define release summary publication
- feat(editor): 비교 뷰 막대에도 검색 마커가 찍힌다 — 검색 중인 열에만 (§4.1a)
- feat(session-host): encode release audit summaries
- test(session-host): drive release audit summary encoding
- docs(session-host): define release audit summary encoding
- docs(ssh): §9.4 의 「전수」에 cwd 아닌 원격 경로를 더한다 — 갤러리가 그 구멍으로 샜다
- feat(session-host): assemble current final observation
- test(session-host): drive current final observation
- docs(session-host): define current final observation
- fix(agent): 소스가 끊길 때 훅 자리도 버린다 (⒁) · 낡은 주석 정리 (⒂)
- test(agent): C1·C2 를 제품 사슬에서 잠근다 — 순수 판정자가 못 보던 자리
- fix(agent): 검증 계속 — 조건 복제·매핑 무판정·문서 논리와 UI 간극
- fix(agent): 적대적 검증 계속 — §1.3 미구현·seq 리셋 누락·훅 unknown 구간
- fix(agent): 배선이 실제로는 안 돌던 자리 둘 — C2 굶김과 낡은 승인 알림
- docs(agent-hooks): 적대적 검증이 배선에서 찾은 둘 — C3 공백과 원격 한계
- fix(agent): 화면 경로도 배지까지 책임진다 — 넷째 자리
- feat(agent): 훅과 화면을 한 판정으로 합친다 — 배선 (§1.1)
- docs(agent-hooks): 업데이트 화면 버그 보고를 철회한다 — 캡처 아티팩트였다
- docs(agent-hooks): 원격(SSH+tmux) 실측과 그것이 찾은 화면 규칙 버그 (§1.7)
- docs(agent-hooks): 실제 codex 화면으로 권위표를 돌렸다 (§1.7)
- fix(agent): 적대적 검증이 찾은 것 — 턴 경계 리셋 버그와 빠진 전제들
- feat(agent): 훅·화면 권위표를 순수 층으로 세운다 (§1.1)
- docs(agent-hooks): 소스를 합치되 뒤집기를 열거로 제한한다 (§1 개정)
- feat(session-host): 폰이 알린 뷰포트가 host 슬롯까지 닿는다 (S11-6 3b)
- feat(control): 컨트롤 플레인 DTO 가
cwd_host로 어느 기계의 경로인지 알린다 - feat(session-host): observe frozen compatibility
- test(session-host): drive current compatibility observation
- docs(session-host): define current compatibility observation
- feat(editor): 비교 뷰에서도 ⌘F 가 센다 — 선택이 있는 열을 (§5.1)
- docs(ssh): §9.4 표에 종료 안내 행을 더한다 — 판정자도 그 행을 함께 문다
- feat(session-host): attest current private assets
- test(session-host): drive current asset attestation
- docs(session-host): define current asset attestation
- feat(session-host): bind child cwd to held directory
- test(session-host): drive inherited fd process boundary
- docs(session-host): define inherited fd process boundary
- build(windows): 게이트가 상시 빨갰다 — 13 개 실패를 1 개로
- test(ssh): 문서 판정자가 «달아난 슬라이스» 와 «파일 하나만 보기» 로 헛돌 수 있었다 (적대적 검증)
- docs(ssh): §9.4 표가 두 번 낡았다 — 사실로 고치고, 다시 낡지 않게 판정자를 문다
- feat(editor): 찾기를 고른 범위 안으로 가둔다 —
⌥⌘L(§5.1) - docs(config): keep-alive 기본값의 선결 주석을 정정 — 둘 다 사실이 아니게 됐다
- fix(term): 안내 갈래를 합쳐 한국어 리터럴이 늘지 않게 한다 — CI 가 잡았다
- fix(term): 종료 안내가 원격 경로를 로컬처럼 적었다 — 폴더줄과 같은 규율로
- feat(session-host): materialize current asset private files
- test(session-host): drive current asset private files
- docs(session-host): define current asset private files
- perf(windows): 도크를 다시 그릴 때마다 폰트 폴백을 새로 짓고 있었다 — 17ms → 2ms
- docs(session-host): default-true 백로그 셋 중 둘은 이미 닫혀 있었다 — 코드 대조로 정정
- feat(session-host): bind current release evidence
- test(session-host): drive current evidence composition
- docs(session-host): define current evidence composition
- test(dock): 뷰가 늘면 «활성 pane 을 어떻게 따라가는가» 를 컴파일러가 묻는다 · flaky 판정을 정정한다
- feat(session-host): 뷰포트 선언을 읽고 슬롯이 든다 (S11-6 3a)
- fix(session-host): bind release evidence signer
- test(session-host): expose foreign evidence signer replay
- docs(session-host): bind release evidence signer
- docs(ssh): §9.6 의 링크 갭 ⚠️ 를 닫힌 사실로 정정 — 코드가 먼저 고쳐져 있었다
- fix(windows):
Ctrl+Shift+C가 복사가 아니게 돼 있었다 —⌥⌘C하나 때문에 - fix(gallery): 원격 pane 의 대화를 로컬에서 열지 않는다 — 남의 이미지가 그 세션 이름표 밑에 떴다
- feat(session-host): bind current local product
- test(session-host): drive current product composition
- docs(session-host): define current product composition
- feat(editor): 막대가 「매치가 어디 있나」를 답한다 — 검색 결과 마커 (§4.1a)
- fix(test): 세 번째 픽스처도 제품 순서로 — cwd 는 ssh 진입 뒤에 온다
- fix(test): 픽스처를 제품 순서로 맞추고, wasm 을 소스에 다시 맞춘다
- docs(ssh): §9.6 의 「보고자 없는 원격은 못 메운다」를 해소 사실로 정정
- fix(ssh):
maru ssh목적지도 원격 판정의 근거다 — 보고자 없는 pane 의 링크 구멍을 닫는다 (A) - fix(terminal): ssh 에 들어가면 기록된 cwd 를 버린다 (B — A 의 선결)
- feat(session-host): pin frozen executable pathname
- test(session-host): drive frozen executable pathname authority
- docs(session-host): define frozen executable pathname authority
- fix(session-host): --stream 이 소비자가 끊기면 끝난다 (S11)
- feat(scm): 남은 두 한계를 닫는다 — 실패가 무엇을 고칠지 말하고, 도는 터미널에 안 넣는다
- feat(session-host): own current manifest pathname
- test(session-host): drive current manifest pathname ownership
- docs(session-host): define current manifest pathname ownership
- feat(session-host): authenticate current manifest
- test(session-host): drive current manifest attestation
- docs(session-host): define current manifest attestation
- feat(windows): 목록이 Page/Home/End 로도 굴러간다
- fix(mobile): 원격 화면이 창보다 높으면 아래를 보여 준다 (S11-6)
- docs(agent-hooks): herdr는 훅을 버린 게 아니라 상태만 뺐다
- docs(agent-hooks): 참조 둘이 반대 답을 냈다는 것을 적는다
- docs(agent-hooks): 섞기 전에 무엇을 켜야 하는지부터 적는다
- feat(scm): 원격 fetch 는 활성 pane 에 넣는다 · 죽은 가드를 지운다 · CI 에서 실물 SSH 로 돈다 (RS4c)
- feat(editor): 찾기가 대소문자와 낱말을 가린다 —
⌥⌘C·⌥⌘W(§5.1) - fix(agent): 훅 cwd 를 무한정 믿지 않고, 창 제목도 같은 값을 쓴다 (적대적 검증 5 회)
- fix(agent): 원격 폴더줄이 훅이 알려 준 작업 디렉터리를 쓴다
- feat(scm): 원격 커밋 — 메시지를 stdin 으로 보낸다 (RS4b)
- feat(session-host): authenticate current GitHub release
- test(session-host): drive current release authority
- docs(session-host): define current release authority
- docs(windows): "막대 색이 안 변한다" 는 틀린 주장이었다 — 재 보니 이미 변한다
- fix(mobile): GenerationGap 은 화면을 끄지 않는다 (S11-6)
- feat(session-host): authenticate current GitHub authority
- test(session-host): drive current GitHub authority
- docs(session-host): define current GitHub authority
- feat(scm): 원격 index 를 실제로 바꾼다 — 스테이지 계열부터 (RS4a)
- feat(session-host): resolve GitHub release tag chains
- test(session-host): drive GitHub tag-chain transport
- docs(session-host): define GitHub tag-chain transport
- chore(i18n): 재시도 경로의 영구 실패 진단 둘을 원장에 올린다 (29→31)
- fix(agent): 재접속이 스스로를 막던 자리 셋을 연다 (적대적 검증 5 회)
- chore(i18n): 채널 재접속 진단 셋을 원장에 올린다 (26→29)
- docs(agent): RA5-a·b·c 를 구현 완료로 표시하고, 검증이 잡은 넷을 남긴다
- fix(agent): 채널을 포기하면 말하고, 재접속이 스스로 막던 자리 넷을 연다 (RA5-c + 적대적 검증)
- fix(agent): 원격 이벤트 채널이 끊기면 물러났다 다시 붙는다 (RA5-b)
- feat(agent): 스트리머가 커서를 흘리고
--resume으로 이어 읽는다 (RA5-a 배선) - feat(agent): 원격 이벤트 채널에 이어읽기 커서를 붙인다 — 순수 층 (RA5-a)
- docs(ssh): §9 의 낡은 서술을 코드에 맞춘다 — cwd_host 는 이미 실린다
- fix(ssh): host-backed 링크도 원격 cwd 면 파일 경로를 안 연다 (§9.4)
- fix(agent): 원격 프레임을 파일 이름 상한으로 재 tmux pane 을 안 버린다
- test(windows): 판정이 개발자의 작업 트리에 기대고 있었다
- style(scm):
zig fmt— 위임으로 바꾼 자리의 빈 줄이 남았다 - fix(agent-hooks): 원격 명령 판정자가 옛 형태를 물고 있었다 — CI 가 잡았다
- fix(ssh): 원격 셸 규율을 한 곳으로 모은다 — 네 곳이 나란히 틀렸다
- docs(session-host): --stream client 가 자기 뷰포트를 알리는 계약 (S11-6)
- feat(session-host): authenticate predecessor release assets
- test(session-host): drive predecessor asset composition
- docs(session-host): define predecessor asset composition
- feat(mobile): 원격 화면이 배경색과 반전을 그린다 (S11)
ohah/pdf
- perf: 맨 위에 있는 표는 옮기지 않고 뒤로 늘린다
- feat: 범위 요청 · 열 때 갈 자리 · 양식 계산식 · XFA 읽기
- feat: 세는 상한을 다 걷어내고, malloc 이 우리 메모리를 밟던 것을 고친다
- fix: 빽빽한 쪽이 통째로 백지로 나오던 것 — 자리를 필요한 만큼 잡는다
- test: 메모리를 세 칸으로 나눠 찍는다 — 한 칸만 보면 결론이 뒤집힌다
- perf: wasm 스택 16MB → 2MB
- test: 메모리를 재는 자를 저장소에 둔다
- perf: 스캔 그림을 원본 해상도로 펼치던 것 — 465MB → 55MB
- perf: 바닥 메모리 38MB → 26MB — 정적 곳간 넷을 더 늦게 잡는다
- perf: 안 쓰는 자리는 안 잡는다 — 바닥 메모리 112MB → 38MB
- feat: 세는 상한을 없앤다 — 표가 문서에 맞춰 늘어난다
- fix: 조용히 자르던 상한 아홉 개를 올린다
- fix: 출력 자리가 꽉 차면 그 뒤(쪽 표)를 뭉개던 것
- perf: 4만 쪽 문서 89초 → 49ms, 그리고 남은 상한 둘
- fix: 레거시 조사에서 나온 나머지 — 캐시 열쇠·죽은 파일·틀린 문서
- fix: 레거시 전수조사에서 나온 다섯 — 두 개는 파일을 망가뜨리고 있었다
- perf: 받을 수 있는 파일을 512MB → 1689MB 로, 여는 값도 줄여
- fix: 양식 문서가 통째로 빈 쪽으로 그려지던 것
- test: 환경이 깨진 자리 열세 가지를 두들긴다 — 그러다 셋을 고쳤다
- test: 공개 API 를 전수로 두들긴다 — 그러다 셋을 고쳤다
- feat: 돌려주는 것들에 이름을 붙인다
- fix: 기본 자리를 만들 때 번들러가 경고하지 않게
- feat: 낮은 층 API 도 내보낸다 (drawOps · checkSignature · Stencil)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.