2026-09-24
한국 시간(KST) 기준으로 하루를 나눴습니다. 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 조회: 2026-10-06 KST. 공개 저장소에서 조회한 활동만 포함합니다.
요약 (AI 작성)
maru 편집기는 자정 무렵 sticky scroll을 병합했습니다(#3899). 화면 맨 위 줄이 속한 스코프의 머리줄을 본문 위에 고정하고, 비교 뷰로 바꾸면 옛 머리줄이 클릭을 가로채던 결함과 같은 낱말 강조가 막대를 자르던 결함도 함께 고쳤습니다. 오후에는 현재 줄 강조와 짝 괄호 강조가 들어왔고, 괄호 점프도 같은 판정을 쓰게 됐습니다(#3911). 들여쓰기 안내선 #3922와 구문 접힘 승격 중 해제된 줄 표를 그리던 문제의 수정 #3933은 이날 PR만 열렸습니다.
렌더러는 안 보이는 탭의 출력이 사이드바만 갱신하고 사이드바가 그대로면 아무것도 올리지 않게 했으며(커밋 기준 활성 32세션 조건에서 앱 CPU −31%), 안 보이는 탭의 kitty 애니메이션이 화면을 다시 그리게 하지 않도록 했습니다. 재부팅 부활은 keep-alive를 끈 칸에서도 에이전트 대화를 잇고, 코드 리뷰에서 나온 두 번 부활·대화 파일 탐색·spawn 실패 처리를 반영했습니다. 밑줄·한글이 들어간 경로에서 사이드바 대화 줄이 비던 문제, 죽은 tmux pane 행이 남던 문제도 고쳤습니다. CI는 ReleaseFast 잡 상한을 45분으로 올리고 AppKit 스모크 잡 셋을 하나로 합쳤고, 재접속 계열을 중심으로 판정자 이름 정리가 계속됐습니다.
Chromium 웹 패널은 sidecar 제어 채널 codec(W1a), CEF sidecar 뼈대(W1b), 실제 브라우저 실행(W1c), 픽셀 링(W2), WKWebView 로그인 유지(W3a), 앱의 sidecar 실행(W3b), Metal 표시(W3c), 마우스·키·IME 입력(W4a), 포인터 라우팅(W4b) PR이 병합됐습니다. 모두 docs/web-panel-osr-backend와 그 하위 기능 브랜치에 들어간 것이며, main 통합 PR #3867은 열려 있습니다.
hwpjs는 새벽에 HWPX 섹션 텍스트 스트리밍, 문단·런 경계, 섹션·헤더 XML 트리 색인과 지원하지 않는 네임스페이스 거부를 넣었고, 오전부터는 선언된 모든 XML 파트와 패키지 바이트 검사, 설정 값, 바탕쪽, 런의 변경 추적 속성과 인라인 태그, 조건부 분기에 따른 바이너리·차트·텍스트·스타일 참조 선택, 표 격자·셀 크기·여백·테두리 참조 검사로 범위를 넓혔습니다. zntc는 네이티브 node 결과와 타깃별 번들 결과를 비교하는 다운레벨 런타임 오라클 스위트를 추가하고, for-of·for-in·for-await를 공통 AST 풀이로 옮기는 3단계 리팩터링과 심볼 ID 누락 검사기, es5 경로의 심볼 전달 수정을 이어갔습니다. es5 상태 기계의 catch 파라미터 스코프, 루프 캡처의 반복별 바인딩, 구조 분해 대입의 rest도 고쳤고, minify 이름 줄이기를 다시 분석한 뒤 하도록 바꾸는 #4775가 열렸습니다.
공개 커밋 92개, 해당일 생성 또는 병합된 PR 54개를 정리했습니다. PR 생성 54개·병합 49개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/hwpjs
- feat(hwpx): inspect table attributes and border references
- feat(hwpx): inspect table cell sublists
- feat(hwpx): resolve table cell border references
- feat(hwpx): inspect table cell attributes
- feat(hwpx): inspect table cell size and margins
- feat(hwpx): inspect table grid geometry
- feat(hwpx): select conditional style references
- feat(hwpx): select conditional section text events
- feat(hwpx): select conditional binary and chart references
- feat(hwpx): inspect conditional switch shape
- feat(hwpx): inspect inline track change tag attributes
- feat(hwpx): inspect inline annotation attributes
- feat(hwpx): inspect inline tab attributes
- feat(hwpx): inspect text node fields and children
- feat(hwpx): inspect run child topology
- feat(hwpx): inspect run track-change attributes
- feat(hwpx): validate master-page formatting references
- feat(hwpx): validate master-page paragraph metadata
- feat(hwpx): inspect master-page ParaListType attributes
- feat(hwpx): inspect master-page parts and section references
- feat(hwpx): inspect settings caret and config values
- feat(hwpx): inspect every declared XML package part
- feat(hwpx): verify every package payload byte
- feat(hwpx): compose known document inspections
- feat(hwpx): inspect header begin numbers
- feat(hwpx): validate paragraph scalar metadata
- feat(hwpx): assemble owned document XML trees
- feat(hwpx): index header XML with shared part tree
- feat(hwpx): replay ordered section XML events
- fix(hwpx): reject unsupported namespace profiles explicitly
- feat(hwpx): visit section content by parent element
- feat(hwpx): resolve section tree attributes
- feat(hwpx): index owned section XML trees
- feat(hwpx): expose paragraph and run boundaries
- feat(hwpx): stream section text and inline tokens
ohah/maru
- refactor(naming): CR3a-2d·2e 세대 해제 판정자 넷을 주제 이름으로 — 원장이 22 에서 18 로
- perf(renderer): 안 보이는 탭의 kitty 애니메이션은 프레임만 넘기고 화면을 다시 그리게 하지 않는다
- fix(remote-agent): 죽은 tmux pane 행이 앱이 사는 동안 안 사라지던 것 (RA7)
- refactor(naming): CR3c 세대 승격 · Client 회수 판정자 둘을 주제 이름으로 — 원장이 24 에서 22 로
- refactor(naming): CR6f output wake · idle soak 판정자 둘을 주제 이름으로 — 원장이 26 에서 24 로
- refactor(naming): CR6a·b 복구된 세션 판정자 셋을 주제 이름으로 — 원장이 29 에서 26 으로
- refactor(naming): CR5 호스트 전체 재접속 판정자 여덟을 주제 이름으로 — 원장이 37 에서 29 로
- refactor(naming): CR4 재접속 Client 교체 판정자 넷을 주제 이름으로 — 원장이 41 에서 37 로
- test(renderer): SO3 는 사이드바가 안정될 때까지 기다린 뒤 판정한다 — CI 에서 늦게 온 git 상태가 사이드바를 정당하게 바꿨다
- fix(renderer): 지문과 교체 사이에 배치가 바뀌면 사이드바 입력을 기억하지 않는다 (적대적 검증)
- perf(renderer): 안 보이는 탭의 출력은 사이드바만, 사이드바가 그대로면 아무것도 안 올린다 — 활성 32 세션 앱 CPU −31 %
- refactor(naming): P5c3d 호환성·attach 제품 E2E 셋을 주제 이름으로 — 원장이 44 에서 41 로
- refactor(naming): CR2e 재접속 단위 테스트 셋을 제품 모듈 이름으로 — 원장이 47 에서 44 로
- docs(osc): OSC 66·5522 의 「Ghostty 패리티」 전제가 틀렸다 — 둘 다 업스트림도 미완성
- refactor(naming): P4 관측·유휴 비용 판정자 여섯(E2·E3)을 주제 이름으로 — 원장이 53 에서 47 로
- refactor(naming): CR6e 재접속 판정자 다섯을 주제 이름으로 — 원장이 58 에서 53 으로
- test(session-host): gh 권한 판정자가 하드링크 경로를 realpath 로 얻지 않는다 — F_GETPATH 가 다른 링크 이름을 돌려준다
- docs(editor): §5.1b 구현 되먹임·적대적 기록(1~3회차 변이 94) · 붙은 토큰 예시 정정(Zig .{·Rust #[ 는 두 토큰)
- test(editor): 적대적 2회차 — P5 revision 판정자 · T13b 로 짝짓기를 「처음 닫힌 품는 쌍」으로 줄임 · T4 등가 · 붙은 토큰 예시 정정(Zig .{ 는 두 토큰, 실측) (§5.1b)
- test(editor): 적대적 1회차 — 생존 변이 열다섯에 판정자 보강 · 등가 넷 주석 · 쓸모없는 갈래 둘 걷어냄 (§5.1b)
- docs(plans): 후속 표에 편집기 기본 장식 넷(① 섰다 · ②~④ 남음) (§5.1b)
- feat(editor): 짝 괄호·현재 줄 제품 배선 — 출처 고르기(트리/글자 훑기)·포커스·커서 100·키 캐시, 점프도 같은 출처 (§5.1b · §3.9c)
- feat(editor): 현재 줄 상자·활성 줄 번호·짝 괄호 상자 그리기 층 + 설정 두 키 (§5.1b)
- feat(editor): 짝 괄호 판정 — 트리 토큰·글 잎·뒤 먼저, 점프도 같은 판정 (§5.1b 계약 · §3.9c VS Code 실측 정정)
- fix(agent): 사이드바 대화 줄이 claude 대화 파일을 세션 id 로 찾는다 — 폴더 이름 규칙을 흉내 내다 밑줄·한글 경로에서 조용히 비었다
- test(session-host): clear·reset 판정자의 자식이 마지막 명령 전에 끝나지 않게 한다 — WriteFailed flake
- ci(session-host): ReleaseFast 상한 45분을 좁히지 않는다 — 콜드 38분·웜 3분 실측과 7일 캐시 만료
- ci(macos): AppKit 스모크 잡 셋을 하나로 합친다 — 같은 앱을 세 번 콜드 빌드하며 macOS 러너 5개 중 셋을 잡고 있었다
- fix(workspace): 재부팅 부활 코드 리뷰 반영 — 두 번 부활·대화 파일 못 찾음·신원 수명·spawn 실패·알림 (RB)
- fix(workspace): keep-alive 를 끈 칸도 재부팅 뒤 에이전트 대화를 이어간다 — 계약의 「한 규칙」대로 (RB2)
- ci(session-host): ReleaseFast 잡 상한을 45분으로 올린다 — 20분으로는 콜드가 끝나지 못해 캐시가 영영 안 선다
- docs(mobile): sticky scroll 설정 두 키는 모바일에 안 싣는다(편집기 화면이 없다) — check-mobile-contract
- docs(editor): §4.1i 되먹임(경계선 2px · 걷어내기 · 헛초록 판정자 · 캡처 · 비교 뷰 결함)·적대적 기록(1~2회차 변이 47 · 등가 넷 · 결함 하나); §8.2p 되먹임(강조가 막대를 자르던 결함, OCH5)
- fix(editor): 비교 뷰·병합 판으로 바꾸면 옛 sticky 머리줄이 클릭·호버·⌘클릭을 가로채던 결함(rowAt 가드, STK11) · 적대적 1회차 판정자 보강·등가 넷 주석 (§4.1i)
- test(editor): sticky 판정자 보강 — 보이는 줄 이분 탐색(값 없는 칸·접힘, STK10) · 접힘 스코프의 끝 경계(닫는 줄까지 선다, STK8) (§4.1i)
- fix(editor): sticky 경계선을 2px quad 로 — pane lowering 은 rule 을 안 그리고 1px quad 는 셰이더 SDF AA 에 지워졌다(캡처 픽셀로 쟀다); 캡처 훅 MARU_FORCE_EDITOR_TOP (§4.1i)
- feat(editor): sticky scroll 제품 층 — 출처(심볼 2층 → 1층 → 접힘), 줄→화면 행(접힘·줄바꿈), caret 을 덮을 칸부터 걷기, 머리줄 구문 색, 고정 행 클릭(그 줄로 가서 자기 칸에)·호버·⌘클릭 억제 (§4.1i, STK7~9)
- fix(editor): 같은 낱말 강조가 서면 막대가 잘리던 결함(op 합계에서 occ_ops 누락, OCH5) · feat: 프레임이 sticky 머리줄로 본문 위쪽 행을 덮는다(STK6) (§5.1a · §4.1i)
- feat(editor): sticky scroll 순수 층 — 칸 규칙(머리줄 행 < d ≤ 마지막 본문 줄의 마지막 행)·세 줄 이상·같은 머리줄 한 번·숨은 줄·줄바꿈·상한 25%; 설정 두 키 (§4.1i, STK1~5)
- docs(editor): §4.1i sticky scroll 계약 — 스코프 출처(심볼 2층 → 1층 → 접힘), 행 격자의 칸 규칙, 최대 5줄·높이 25%, caret 을 덮지 않고 클릭한 줄을 부모 아래에 둔다; 설정 두 키
ohah/zntc
- fix(transformer): es5 루프 캡처 _loop 매개변수·인자·끌어올린 var 에 심볼 전달 (#4760 2단계)
- fix(transformer): es5 상태 기계가 접은 선언·호이스트 var 에 심볼 전달 (#4760 2단계)
- fix(transformer): es5 기본값 매개변수 검사 참조에 심볼 전달 (#4760 2단계)
- chore(integration): 오라클 fixture 디렉토리에 잘못 커밋된 작업 파일 제거
- test(integration): 다운레벨 오라클에 단일 파일 변환 경로와 긴 변수 이름
- fix(transformer): 블록 스코핑 이름 조각을 string_table 재할당에서 보호
- feat(transformer): #4760 심볼 ID 누락 검사기 (ZNTC_DEBUG_SYMBOL_COVERAGE)
- refactor(transformer): #4746 3단계 — for-await 를 방문 없는 AST 풀이로
- refactor(transformer): #4746 2단계 — 상태 기계 for-in 을 AST 풀이로
- refactor(transformer): #4746 1단계 — for-of 를 일반 경로·상태 기계 공통 AST 풀이로
- docs(claude): 개발 워크플로에서 PR 전 /code-review max 필수 규칙 제거
- fix(transformer): #4750 상태 기계 구조분해 대입이 rest 를 채운다
- ci(integration): 오라클 스위트용 node 24 고정 + node<24 에선 건너뛰기
- test(integration): 다운레벨 런타임 오라클 스위트 — 네이티브 node 결과와 타겟별 번들 결과 비교
- fix(transformer): #4743 es5 루프 본문 선언 캡처 시 반복별 바인딩 + 추출 본문의 var 끌어올리기
- fix(transformer): #4712 es5 상태 기계에서 catch 파라미터·블록 바인딩의 스코프를 지킨다
- fix(lint): object_super 서브트리 순회를 walkPreorderIterative 로 — recursive-ast-walker 감사 통과
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.