2026-09-05

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

요약 (AI 작성)

hwpjs가 Zig로 다시 시작한 날입니다. Rust 코드를 보관하고 Zig 워크스페이스를 초기화한 뒤, CFB 컨테이너의 모듈러 Zig 리더를 세우고 검색·검증 계약을 통일하며 리더 경계를 반복 감사로 굳혔고, 엄격 검증과 편집 가능한 v3/v4 writer까지 넣었습니다. HWP5 쪽은 헤더와 레코드 파싱 기반을 놓고 DocInfo 속성과 버전별 ID 매핑, 바이너리·폰트 리소스, 탭·번호·글머리표·스타일을 개수 검증과 함께 파싱했습니다. @ohah/pdf는 pdf.zig에서 덩이들을 떼어 14,549줄을 7,489줄로 줄이고 전역 묶음을 구조체로 접었으며, pdf.js 맞대기로 DeviceCMYK 색·타일 무늬 간격·그림 확대 뭉개기를 잡았습니다. 문서를 잇달아 열면 앞 문서의 마스크 그림이 나오던 것, /CalRGB와 16비트 그림, 무색 무늬(/PaintType 2)의 색, 내보낸 PDF에 모듈 이름이 새던 것도 고쳤습니다. zerolist에는 ZeroList 통합과 Android 배치 최적화 검증 PR #1이 열려 있습니다.

maru는 소스 컨트롤 감시자를 실제로 심고(RW2c, #3212) 적대적 검증 13회에서 결함 열을 잡았으며(#3218), 전면 TUI 구간에 도크가 홈을 보던 원격 pane cwd를 한 규칙으로 모았습니다(#3247). 원격 파일 트리 설계를 열고 목록 wire와 (host, path) root 키의 RF1 순수 층을 놓았고(#3260), 감시 헬퍼가 목록을 말하는 list 서브커맨드를 붙였습니다(RF2a, #3271). Windows 원격 업로드 설계 초안 #3241은 열린 채 남아 있습니다. 편집기는 괄호 짝 점프(⇧⌘\, #3219)와 위/아래로 커서 추가(⌥⌘↑/⌥⌘↓, #3240)를 얻었고, 글자를 한 색으로 그리던 호스트가 중립 규칙을 쓰게 했습니다(#3233). 열/블록 선택 #3270은 이날 PR이 열렸습니다. 에이전트 쪽은 esc to interrupt가 사라진 claude 진행 상태줄을 화면에서 다시 읽고(#3222), codex의 Waiting을 놓치던 것을 고치며, 종류를 모르는 running 에이전트를 claude로 그리지 않게 했습니다(#3234). 이미지 갤러리 라벨은 「누가 넣었나」부터 말하게 했습니다(#3217).

테스트 인프라도 크게 손봤습니다. 시간을 태우던 픽스처 넷을 189초에서 2.7초로 줄이고(#3252), imports.zig 판정자의 되풀이 파싱을 기억하게 했으며(#3246), release adapter 판정자 84개를 모드당 두 바이너리로 모아 CI 컴파일 횟수를 크게 줄였습니다(#3262). 세션을 닫을 때 안 읽힌 master 출력을 버려 바쁜 자식의 exit가 막히지 않게 했습니다(#3266). session-host는 복원이 죽은 단계, fd 슬롯 예약 실패 이유와 점유자, 창이 안 돌아온 이유와 poison 위치를 남기게 했고(#3215), same-run attestation bundle 검증, durable evidence 승격과 인계, release aggregate 원자적 인계와 재개방, live release 단계 순서 강제, candidate attestation bundle 채택, stage 3 preparation 커밋까지 이었습니다. 모바일은 세션 목록이 흐르게 하고 스크롤바를 달았으며(#3214), 회전 시 격자를 다시 잡고(#3221) 시스템 다크/라이트를 따라가게 했습니다(#3255).

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

커밋

ohah/hwpjs

ohah/maru

ohah/pdf

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#3271생성 · 병합mergedmainfeat(remote-watch): 헬퍼가 목록을 말한다 — list 서브커맨드(판 3)와 실물 왕복 게이트 (RF2a)
ohah/maru#3270생성mergedmainfeat(editor): 열/블록 선택 — ⌥드래그·⇧⌥드래그와 ⇧⌥⌘ 방향키 (§3.2a)
ohah/maru#3269생성 · 병합mergedmainfeat(session-host): stage 3 preparation을 단일 product owner로 묶는다
ohah/maru#3268생성 · 병합mergedmainbuild: test-macos-only 는 두 모드 루프 안의 판정자를 Debug 로만 돈다 — check-boundaries 와 같은 규칙
ohah/maru#3267생성mergedmainfeat(mobile): 안 바뀐 프레임은 GPU 를 안 쓴다 — 정지 8초에 3,901 tick 을 쉰다
ohah/maru#3266생성 · 병합mergedmainfix(pty): 세션을 닫을 때 안 읽힌 master 출력을 버려 바쁜 자식의 exit 가 막히지 않게 한다 — teardown 4,077ms → 15ms
ohah/maru#3265생성 · 병합mergedmainfeat(session-host): adopt reauthenticated current drafts
ohah/maru#3264생성 · 병합mergedmainfeat(session-host): reopen durable preparation outputs
ohah/maru#3263생성 · 병합mergedmainperf(test): 느린 판정자 셋의 시간을 줄인다 — 실패 주입 조기 종료·fail-stop 병렬 대기
ohah/maru#3262생성 · 병합mergedmainbuild: release adapter 판정자 84개를 모드당 두 바이너리로 모은다 — CI 컴파일 45·129회 → 2·4회
ohah/maru#3261생성 · 병합mergedmainfeat(session-host): retain durable preparation outputs
ohah/maru#3260생성 · 병합mergedmainfeat(file-tree): 원격 파일 트리 설계를 열고 RF1 순수 층을 놓는다 — 목록 wire 와 (host, path) root 키
ohah/maru#3259생성mergedmaintest(smoke): 굴린 편집기의 색을 잰다 — 판정이 보고도 안 잡던 자리 (§2m.114)
ohah/maru#3258생성 · 병합mergedmaintest(agent): 실제 화면 fixture 로 규칙을 전수 잠근다
ohah/maru#3257생성 · 병합mergedmainfeat(session-host): wire candidate attestation bundles
ohah/maru#3256생성 · 병합mergedmainfeat(agent): 화면이 provider 를 못 읽으면 스스로 말한다 — §1.2 의 화면 쪽 대칭
ohah/maru#3255생성 · 병합mergedmainfeat(mobile): 시스템 다크/라이트를 따라간다 — 데스크톱 F2-9 를 잇는다
ohah/maru#3254생성 · 병합mergedmaintest(agent): 종류 전환에서 리셋 호출을 잠근다 — AK1 이 남긴 마지막 공백
ohah/maru#3253생성 · 병합mergedmainfeat(session-host): adopt candidate attestation bundles
ohah/maru#3252생성 · 병합mergedmaintest(app-session): 시간을 태우던 픽스처 넷을 고친다 — 189초 → 2.7초 (IG2-a·IG2 적대적·ES21·ES22)
ohah/maru#3251생성 · 병합mergedmaindocs(agent): 레퍼런스 소스 실측을 남긴다 — 규칙의 데이터화·region 어휘·ASCII 프레임
ohah/maru#3250생성 · 병합mergedmainci: check-boundaries 를 자기 러너로 갈라 잰다
ohah/maru#3249생성 · 병합mergedmaindocs(agent): 오늘 바뀐 계약과 판정자를 문서에 맞춘다
ohah/maru#3248생성 · 병합mergedmaintest(agent): C2 의 제품 배선을 판정자로 잠근다 — 두 줄이 끊겨도 아무도 몰랐다
ohah/maru#3247생성 · 병합mergedmainfix(scm): 원격 pane 의 cwd 를 한 규칙으로 모은다 — 전면 TUI 구간에 도크가 홈을 봤다 (RS6)
ohah/maru#3246생성 · 병합mergedmainperf(boundary): imports.zig 판정자가 같은 소스를 되풀이해 파싱하던 것을 기억한다 (100초 → 39초)
ohah/maru#3245생성 · 병합mergedmainfeat(session-host): enforce live release phase order
ohah/maru#3244생성 · 병합mergedmainfeat(smoke): 편집기 판을 찍을 수 있게 한다 — --hold-editor-ms (§2m.113)
ohah/maru#3243생성closedmaintest(boundary): 3b 판정자의 main.zig 읽기 상한을 8 MiB 로 — main 이 빨갛다
ohah/maru#3242생성 · 병합mergedmainfix(session-host): restore 3b boundary source scan
ohah/maru#3241생성openmaindocs(ssh): Windows 원격 업로드 설계 초안과 열린 질문 다섯을 연다
ohah/maru#3240생성 · 병합mergedmainfeat(editor): 위/아래로 커서 추가 — ⌥⌘↑/⌥⌘↓ (§3.2b)
ohah/maru#3239생성 · 병합mergedmainfeat(session-host): fd 슬롯을 «누가» 쥐고 있는지 남긴다 — 비었다던 자리가 점유였다
ohah/maru#3238생성 · 병합mergedmainfeat(mobile): 키바 줄 수를 «폭이» 정한다 — 가로에서 한 줄, 본문 9줄→11줄
ohah/maru#3237생성 · 병합mergedmainfix(agent): C2 의 「무거운 조건」을 시간에서 근거의 질로 바꾼다
ohah/maru#3236생성 · 병합mergedmaindocs(scm): ②c 완료 표기와 감시자 시한 주석을 실측에 맞춘다
ohah/maru#3235생성 · 병합mergedmaindocs(agent): 스피너 프레임 근거를 900 회 관측으로 갱신한다 — 표본이 결론을 바꿨다
ohah/maru#3234생성 · 병합mergedmainfix(status-bar): 종류를 모르는 running 에이전트를 claude 로 그리지 않는다
ohah/maru#3233생성 · 병합mergedmainfeat(editor): 편집기가 글자를 한 색으로 그렸다 — 규칙을 중립으로 올려 두 호스트가 같은 것을 쓴다 (§2m.112)
ohah/maru#3232생성 · 병합mergedmaintest(agent): 종류 전이 리셋을 판정자로 잠근다 — 열셋 중 하나만 잠겨 있었다
ohah/maru#3231생성 · 병합mergedmainfeat(session-host): execute aggregate process phases
ohah/maru#3230생성 · 병합mergedmaindocs(scm): §11.9 열린 질문 넷을 실측으로 닫는다
ohah/maru#3229생성 · 병합mergedmainfix(agent): codex 진행 줄에서 working 요구를 뺀다 — Waiting 을 놓쳤다
ohah/maru#3228생성 · 병합mergedmaindocs(scm): 원격 트랙 진행 서술을 실제 그물에 맞춘다
ohah/maru#3227생성 · 병합mergedmainfeat(session-host): release aggregate를 안전하게 다시 연다
ohah/maru#3226생성 · 병합mergedmaindocs(mobile): 오늘 붙인 것 셋과 «없어진 일» 하나를 문서에 맞춘다
ohah/maru#3225생성 · 병합mergedmainfeat(session-host): fd 슬롯 예약이 왜 실패했는지 남긴다 — 단계 이름만으론 다섯 갈래였다
ohah/maru#3224생성 · 병합mergedmainfix(app-session): 원격 SCM 픽스처를 호스트 PTY 로 보낸다
ohah/maru#3223생성 · 병합mergedmainfeat(session-host): release aggregate를 원자적으로 인계한다
ohah/maru#3222생성 · 병합mergedmainfix(agent): claude 진행 상태줄을 화면에서 다시 읽는다 — esc to interrupt 가 사라졌다
ohah/maru#3221생성 · 병합mergedmainfix(mobile): 세로 잠금을 풀고 회전하면 격자를 다시 잡는다 (M5 첫 슬라이스)
ohah/maru#3220생성 · 병합mergedmainfeat(session-host): 복원이 어느 단계에서 죽었는지 남긴다 — 이름만으론 후보가 여럿이었다
ohah/maru#3219생성 · 병합mergedmainfeat(editor): 괄호 짝으로 점프 — ⇧⌘\ (§3.9c)
ohah/maru#3218생성 · 병합mergedmainfix(scm): RW2c 의 설치 경로를 굳힌다 — 적대적 검증 13 회에서 결함 열
ohah/maru#3217생성 · 병합mergedmainfeat(image-gallery): 이미지 라벨이 «누가 넣었나»부터 말하게 한다 — 출처 표시와 다중 첨부 순번
ohah/maru#3216생성 · 병합mergedmainfix(session-host): durable evidence를 삭제 없이 인계한다
ohah/maru#3215생성 · 병합mergedmainfeat(session-host): 창이 왜 안 돌아왔는지, poison 이 어디서 났는지 남긴다
ohah/maru#3214생성 · 병합mergedmainfix(mobile): 세션 목록이 안 흘렀다 — 창에 안 들어가는 세션에 닿을 수가 없었다
ohah/maru#3213생성 · 병합mergedmainfeat(session-host): baseline evidence를 durable 경계로 승격한다
ohah/maru#3212생성 · 병합mergedmainfeat(scm): 실은 감시자를 «실제로 심는다» (RW2c)
ohah/maru#3211생성 · 병합mergedmainfeat(session-host): same-run attestation bundle을 로컬 검증한다
ohah/maru#3210생성 · 병합mergedmainrefactor(mobile): 「키보드 겹침은 두 번 빼지 않는다」를 코어 한 곳으로
ohah/maru#3209생성 · 병합mergedmainfix(scm): 감시자의 rev-list 는 군더더기였다 — for-each-ref 가 이미 덮는다
ohah/maru#3160병합mergedmaindocs(editor): 대소문자 변환과 캡처 훅을 계획에 기록한다 — 「계약 안」 편집 보조 여섯이 닫혔다
ohah/zerolist#1생성openmainperf: ZeroList 통합과 Android 배치 최적화 검증