2026-09-21

요약 (AI 작성)

@ohah/pdf v0.2.0 이 나갔습니다 — PDF → Markdown/JSON, LLM 에 먹이는 꼴로. pdf.markdown({ pages? }) 와 pdf.blocks({ pages? }) 가 제목 계층·문단(하이픈 잇기)·목록·코드·표·머리말/꼬리말을 뽑고, 태그 PDF 는 구조 나무를 따라가며 괘선 없는 표도 찾습니다. 글자 뽑기를 pdf.js 수준으로 올리고(조각 폭·틈 판정·합자·내장 인코딩), 한국어 실전 문서로 다듬어 docling 과 맞댔으며, 무작위 27편(arXiv 22·한국 보고서 5)에서 드러난 아홉을 고치고, 큰 암호 문서 여는 데 56초 걸리던 것을 90ms 로 줄이고 누운 글(arXiv 스탬프)을 거릅니다. zntc 도 v0.1.10 을 냈습니다 — dev 가 사라진 CSS import 의 <link> 를 지우고(#4671), 아직 없는 경로도 감시 목록에 남기고(#4683), 중첩된 dev 산출 디렉토리를 CSS 탐색·복사에서 제외하며(#4678), CSS 파이프라인 사전 패스의 비용 측정과 D2a 선행 조건 재판정을 RFC 에 적었습니다.

maru 편집기는 파일 없이 여는 편집기(U1)와 이름 없는 문서 저장(U2), 저장 실패 사유와 「연 뒤 바뀌었나」 질문(C0), 저장 충돌을 «고르게» 하는 것과 네이티브 다시 읽기(C1a)를 얻었고, LSP 2단은 foldingRange 접힘 3층(⑨), didSave 통지(⑩ — rustc 진단이 저장에만 다시 돌아 고친 오류가 남아 있었다), 참조 피커 ⇧F12(⑪), 구현·타입 정의·선언으로 이동(⑫, open)까지 갔습니다. 비교 뷰에도 구문 색이 납니다. 에이전트 훅은 원격 Term 의 턴 스냅샷·✎ 귀속을 저쪽 기계에서 세우고(AT3c), ✎ 의 근거를 로컬·원격으로 통일하고(AT3d), 훅 커맨드 하나로 로컬/원격 설치기의 핑퐁을 없애고(RA8), 원격 tmux pane 별 훅 슬롯 테이블·라우팅·사이드바 행·«+N pane 밀림» 고지까지 RA7 조각 다섯을 쌓았습니다. 실기 e2e(새 Maru.app → maru ssh → loopback sshd → claude 한 턴) 도구와 결과를 문서로 남겼습니다.

build.zig 는 21,352줄에서 8,835줄로 줄었습니다 — 등록을 «바뀌는 이유» 별로 build/ 로 가르고, 빌드 등록을 문자열이 아니라 AST 뷰 build_graph 로 세며, tests/boundary/ 판정자 스무 개를 표로 모았습니다. #3833 과 #3839 가 각자 초록으로 머지돼 main 이 컴파일되지 않던 것을 고쳤고, 잃은 게 없는데 저장을 막아 껐다 켤 때마다 배치가 사라지던 두 교착도 닫았습니다. hwpjs 는 EMF 레코드 wire 지원을 분류하고 polyline·Path 기하·closure·fill path/ellipse 를 조립하며, hwp5 가 EMF+ world transform 을 replay 합니다.

커밋

ohah/hwpjs

ohah/maru

ohah/pdf

ohah/zntc

PR (해당일 생성/머지)

repo#상태제목
ohah/zntc#4691mergedchore: release v0.1.10
ohah/zntc#4690mergedfix(web): 중첩된 dev 산출 디렉토리를 CSS 탐색·복사에서 제외 (#4678)
ohah/zntc#4689mergeddocs(rfc): CSS 파이프라인 사전 패스의 비용 측정 + D2a 선행 조건 재판정 (§11)
ohah/zntc#4688mergedfix(server): 아직 없는 경로도 감시 목록에 남긴다 (#4683)
ohah/zntc#4687mergedchore(web,server): 죽은 주입 경로 제거 + css-update href 타입 정정 (#4680, #4681)
ohah/zntc#4686mergedfix(web): dev 가 사라진 CSS import 의 <link> 를 지운다 (#4671)
ohah/maru#3847mergedfeat(editor): 저장 충돌을 «고르게» 한다 + 네이티브 다시 읽기를 만든다 (C1a)
ohah/maru#3846openfeat(editor): LSP 2단 ⑫ — 구현·타입 정의·선언으로: 팔레트 명령 셋이 참조 피커와 같은 길(0 알림·1 이동·2+ 피커); provider 없는 종류는 묻지 않고 알린다 (§8.2m)
ohah/maru#3845mergedrefactor(build): tests/boundary/ 판정자 스무 개를 표로 — 등록과 「매달기」가 3천 줄 떨어져 있었다
ohah/maru#3844mergedfix(editor): main 이 컴파일되지 않는다 — bool 로 쓰는 저장 자리 여섯
ohah/maru#3843openfix(editor): didSave 판정자·캡처 훅을 C0 의 saveDocument 오류 합집합에 맞춘다 — #3833 과 #3839 가 각자 초록으로 머지돼 main 이 컴파일되지 않는다
ohah/maru#3842mergedfeat(agent-hooks): RA7 조각 5 — 밀린 pane 은 «+N pane 밀림» 고지 행으로 남고, pane 행 문구가 기본 폭에 온전히 들어간다
ohah/maru#3841openfix(status-bar): 리소스 팝오버의 합이 안 맞던 것 — 자르는 자리가 정렬보다 앞이었다
ohah/maru#3840mergedfeat(editor): LSP 2단 ⑪ — 참조 피커: ⇧F12 → references 위치 전부를 팔레트 기반 피커로(현재 파일 먼저·미리보기·root 밖 알림), 하나면 바로 이동, 로드 중 content modified 는 되묻기 (§8.2l)
ohah/maru#3839mergedfeat(editor): 저장이 실패하면 왜인지 말한다 + 「연 뒤 바뀌었나」를 처음으로 묻는다(C0)
ohah/maru#3838mergedfeat(agent-hooks): RA7 조각 4 — 사이드바에 원격 tmux pane 행, 클릭은 그 pane 의 세션을 최근 세션으로
ohah/maru#3837mergedfeat(agent-hooks): RA7 조각 2·3 — 원격 tmux pane 별 훅 슬롯 테이블과 라우팅, Term 배지는 pane 중 하나라도 running 이면 running, 턴 끝·알림은 pane 마다
ohah/maru#3836mergedrefactor(build): 빌드 그래프 뷰가 «안 담은 것을 없다고 말하지» 않게 한다 — VarCalls 를 모든 receiver 에
ohah/maru#3835mergedrefactor(agent-hooks): RA7 조각 1 — 훅 모드 상태를 HookSlot 로 뽑고 Term 은 인라인 슬롯 하나 (동작 불변)
ohah/maru#3834mergedtest(app-session): IME preedit 판정자가 자식의 첫 줄이 도착한 뒤 기준 셀을 잡는다 — CI 세 PR 연속 «expected 12622, found 77» 플레이크
ohah/maru#3833mergedfeat(editor): LSP 2단 ⑩ — 저장 통지 didSave: rustc 진단이 저장에만 다시 돌아 고친 오류가 남아 있었다 — 쓰기 성공 뒤 flush → didSave (§8.2k)
ohah/maru#3832mergeddocs(agent-hooks): 실기 e2e tmux 변형 — pane 1(사용자 플로우, RA6 역조회 실기 통과)·pane 2(RA7 배치, 지금은 접힘) + RA7 재실측·조각화·착수 전 공격
ohah/maru#3831mergedrefactor(build): 빌드 등록을 «문자열이 아니라 구조로» 센다 — AST 뷰 build_graph 와 첫 판정자 이관
ohah/maru#3830mergedfix(workspace): 잃은 게 없는데 저장을 막아, 껐다 켤 때마다 배치가 사라지던 두 교착
ohah/maru#3829mergeddocs(agent-hooks): 에이전트 턴 축 실기 e2e 도구와 결과 — 새 Maru.app → maru ssh → loopback sshd → claude 한 턴 → 에이전트 탭 «2개 파일 · ✎ 2» (AT3c·RA8·AT3d 실기 검증)
ohah/maru#3828mergedfeat(editor): LSP 2단 ⑨ — foldingRange 접힘 3층: 서버 범위가 구문 층 위에 서고(use·문서 주석 묶음), 로드 중 빈 응답은 되묻고, 승격은 3층을 덮지 않는다 (§8.2j)
ohah/maru#3827mergedfeat(editor): 이름 없는 문서를 저장한다 — 이름을 묻고 보통 문서가 된다(U2)
ohah/maru#3826mergedfix(agent-hooks): AT3d — ✎ 의 근거를 «편집 도구가 겨냥 ∧ tree 목록» 으로 로컬·원격 통일, 되돌림은 Read 에서 뜬 before 가 있을 때만, 시간 창 폴백 폐기
ohah/maru#3825mergedfeat(agent-hooks): RA8 — 훅 커맨드 하나로 로컬/원격 설치기의 핑퐁을 없앤다, 로그 디렉터리는 HOME 만으로, 원격 nonce 경로 탈출을 막는다
ohah/maru#3824mergedrefactor(build): build.zig 21,352 → 8,835 — 등록을 «바뀌는 이유»별로 build/ 로 가르고, 판정자가 보는 「빌드 소스」를 한 곳이 소유하게 한다
ohah/maru#3823mergedfeat(editor): New Editor Tab — 파일 없이 여는 편집기(U1)
ohah/maru#3822mergeddocs(editor): 이름 없는 문서 계약·계획 — 초안이 든 근거 넷이 코드와 반대였다
ohah/maru#3821mergeddocs(session-host): §12.6 — PartialFrame 의 «반응» 은 왜 아직 안 고쳤나, 미룬다면 어떤 기계로 도나
ohah/maru#3820mergedfeat(agent-hooks): AT3c — 원격 Term 의 턴 스냅샷·✎ 귀속을 저쪽 기계에서 세운다 (원격 세트 = 로컬 세트, 턴 목록은 tree 가 있는 기계에서)
ohah/maru#3819mergedfeat(editor): 비교 뷰에도 구문 색을 낸다 — 계약은 있었고 구현이 반쪽이었다