2026-09-05

요약 (AI 작성)

hwpjs 가 Zig 로 다시 시작한 날입니다. Rust 코드를 legacy/ 에 보관하고 Zig 워크스페이스를 초기화한 뒤, CFB 컨테이너의 모듈러 Zig 리더를 세우고 검색·검증 계약을 통일하고 리더 경계를 반복 감사로 굳혔으며, hwp5 의 DocInfo 속성과 버전별 ID 매핑, 바이너리·폰트 리소스를 개수 검증과 함께 파싱했습니다. @ohah/pdf 는 문서를 잇달아 열면 앞 문서의 마스크 그림이 나오던 것, /CalRGB 를 안 옮기고 16비트 그림을 안 그리던 것, 무색 무늬(/PaintType 2)의 색을 무시하던 것, 타일 무늬 간격과 그림 키울 때 뭉개기(pdf.js 맞대기로 잡았다), 내보낸 PDF 에 모듈 이름이 새던 것(/Subtype /core.Form)을 고치고, 문서 다시 쓰기(apply)를 떼어 12,525줄을 10,859줄로 줄였습니다. zerolist 에는 ZeroList 통합과 Android 배치 최적화 검증 PR 이 열렸습니다.

maru 는 소스 컨트롤 감시자를 «실제로 심고»(RW2c) 적대적 검증 13회에서 결함 열을 잡았습니다. 편집기는 위/아래로 커서 추가(⌥⌘↑/⌥⌘↓, §3.2b)와 열/블록 선택(⌥드래그·⇧⌥드래그·⇧⌥⌘ 방향키, §3.2a)을 얻었고, 원격 파일 트리 설계를 열어 RF1 순수 층(목록 wire 와 (host, path) root 키)을 놓았습니다. claude 진행 상태줄을 화면에서 다시 읽게 했고(esc to interrupt 가 사라졌다), 종류를 모르는 running 에이전트를 claude 로 그리지 않습니다.

테스트 인프라를 크게 손봤습니다 — 시간을 태우던 픽스처 넷 189초→2.7초, imports.zig 판정자의 되풀이 파싱 100초→39초, release adapter 판정자 84개를 모드당 두 바이너리로 모아 CI 컴파일 45·129회→2·4회, 세션을 닫을 때 안 읽힌 master 출력을 버려 pty teardown 4,077ms→15ms.

커밋

ohah/hwpjs

ohah/maru

ohah/pdf

PR (해당일 생성/머지)

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