2026-10-01
한국 시간(KST) 기준으로 하루를 나눴습니다. 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 조회: 2026-10-06 KST. 공개 저장소에서 조회한 활동만 포함합니다.
요약 (AI 작성)
hwpjs는 HWP5와 HWPX 문서에 실험적인 편집 경로를 붙였습니다. 자정 직후 HWP5 선택 범위에 기존 글자 모양을 적용하는 기능을 더한 뒤, 브라우저의 읽기 전용 Canvas 텍스트 미리보기에서 출발해 실험용 편집기를 JS와 WASM으로 노출하고 Canvas 직접 입력·선택을 붙였습니다. 중첩 문단과 빈 문단의 텍스트 생성, 탭 보존, 수식 필드 재계산, 여러 문단에 걸친 하이퍼링크 라벨도 원자적 편집 단위로 다루며, 추적 중인 모든 fixture 문단에 대해 편집을 감사하는 시험을 더했습니다. HWPX는 원본에 묶인 텍스트 splice와 XML을 보존하는 저장, 선택한 항목만 바꾸고 나머지 ZIP 레코드는 유지하는 저장을 바탕으로 단 정보·탭, 필드 라벨과 수식 필드, 주석 본문과 자동 번호, 보호 개체 앵커, 쪽 번호 설정을 지키며 편집하도록 하고 편집 세션을 WASM·Canvas에 연결했습니다. 모두 실험용 편집 경로이며 재조판은 하지 않습니다.
maru 편집기는 한 문서를 여러 뷰가 공유하는 구조로 옮기는 작업을 main에 연이어 병합했습니다. VS Code 기준 공유 문서 UX 설계 #4032와 소유 경계 조사 #4036에 이어 Undo·Redo 소유 분리 #4038, 본문과 저장 정보 분리 #4042, 안정 문서 핸들 #4044, 앱 전역 저장소 연결 #4048, 문서 통지와 뷰 갱신 분리 #4058가 들어갔습니다. 같은 창의 두 pane이 문서를 공유 편집하는 내부 연결과 Undo 게시 #4054·#4055도 병합됐지만, PR 본문에 따르면 사용자 분할 명령은 IME·LSP·저장·복원 조건을 갖춘 뒤 노출합니다. IME 조합 범위를 보존하고 줄바꿈된 후보 창 위치를 검증하는 #4046도 병합됐습니다.
maru의 session host 쪽은 자정 직후 #4030이 병합돼, 업그레이드가 실패해도 새 host를 띄우지 않고 살아 있는 호환 host를 재사용하며 연결이 살아 있을 때만 그 host를 채택하게 됐습니다. 테스트·CI 쪽에서는 PR에서 건너뛰던 session_host 판정자를 다시 돌리기 위해 판정자 사이 전역 상태가 새던 두 건 #4039·#4045와 러너가 물려받은 SIGINT·SIGQUIT 무시 상태 #4029를 고쳤습니다. 재활성화 PR #4059와 작업공간 복원을 workspace.restore 설정으로 끄는 #4060은 이날 열려 다음 날 병합됐습니다. Zig 의존성을 저장소에 둔 tarball로 빌드하고 #4050, PR에서 같은 트리를 검증했으면 main push의 macOS 잡을 건너뛰며 #4057, host 시작 때 실행 파일 해시를 한 번만 하고 fork된 판정자 자식의 panic이 DWARF를 읽지 않게 해 시험 시간을 줄였습니다(#4053, #4056). Chromium 웹 패널의 W7b 적대 검증 후속 #4033·#4034·#4035, select 팝업 전달 #4051, 카메라 utility 반복 재시작 수정 #4040은 기능 브랜치 docs/web-panel-osr-backend에 병합된 것으로 main 반영은 아닙니다. 앱이 select 목록을 그리는 #4061은 이날 열려 자정 직후 같은 기능 브랜치에 병합됐습니다.
spinon은 Taffy 레이아웃 모듈 #17을 병합하고, 소수 너비 Flex 분배를 브라우저 기준값과 비교하는 시험을 더했습니다. HostDocument 공통 문서 모델 #20과 Stylo DOM 어댑터 연결 #21, 기본 UA 스타일 자원과 CSS 비교 모델 #18, Vite·Rspack CSS 산출 비교 실험 #19, CSS 자원 어댑터 시제품 #23과 Stylo stylesheet 입력 목록 #24이 들어갔습니다. zntc는 낮춤 과정에서 심볼 정체성을 보존하는 #4887을 시작으로 PR 29개를 병합했습니다. 변환기가 만드는 구조 분해·generator 반복문 임시 변수, 런타임 helper, JSX runtime import를 생성 시점에 심볼로 등록하고, TypeScript·Flow 타입 제거와 CommonJS 출력에서 변환 단계의 심볼과 semantic graph를 재사용하도록 바꿨습니다. namespace IIFE 매개변수와 Flow match 참조도 심볼로 다루게 했고, 중첩 namespace 이름 충돌과 enum IIFE 초기값 캡처 같은 codegen 문제를 고쳤습니다.
공개 커밋 111개, 해당일 생성 또는 병합된 PR 68개를 정리했습니다. PR 생성 65개·병합 65개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/hwpjs
- feat(hwpx): preserve page number settings during paragraph editing
- feat(hwpx): retain automatic number anchors during canvas text editing
- feat(hwpx): connect protected object anchors to native and canvas editing
- feat(hwpx): edit note bodies while retaining automatic numbering
- feat(hwpx): recalculate formula fields through atomic edits and saves
- feat(hwpx): connect source-bound field label editing to canvas
- feat(hwpx): preserve column metadata and tabs during text editing
- feat(hwpx): connect owned editing sessions to wasm and canvas
- docs(hwpx): record completed paragraph edit corpus results
- feat(hwpx): bind selected paragraph edits and create text in empty runs
- feat(hwpx): add source-bound text splice and preserving XML save
- feat(zip): preserve archive records while replacing selected payloads
- feat(hwpx): expose section text events and canvas preview
- feat(hwp5): edit cross-paragraph hyperlink labels atomically
- feat(hwp5): allow text edits outside formula labels
- feat(hwp5): recalculate formulas in atomic text edits
- feat(hwp5): extend retained field editing foundations
- feat(hwp5): map canvas tab edits to source offsets
- feat(hwp5): preserve tabs in text splices and worker projections
- feat(hwp5): materialize text in existing empty paragraphs
- feat(hwp5): edit plain text in owned nested paragraphs
- test(hwp5): audit editing across every tracked fixture paragraph
- feat(hwp5): enable direct canvas text input and selection
- feat(hwp5): expose experimental editor through JS and WASM
- feat(hwp5): add read-only Canvas text preview in browser
- docs(docs): confirm Canvas-based web preview rendering
- feat(hwp5): apply existing character styles to selected text ranges
ohah/maru
- fix(editor): LSP 시작 중 생존 뷰의 문서 연결 보존
- feat(editor): 문서 통지와 뷰 갱신을 분리
- perf(tests): fork 된 판정자 자식의 panic 은 DWARF 를 읽지 않는다 — 함수 이름까지만 찍고 같은 SIGABRT 로 끝낸다
- perf(session-host): host 시작은 실행 파일을 한 번만 해시한다 — build id 와 rollback self-image 가 같은 identity 를 쓴다
- fix(editor): reject remote mirrors in shared view admission
- feat(editor): synchronize edits and undo across shared views
- ci: skip macOS jobs on main push when the PR proved the same tree
- test(editor): 공유 편집의 실패 복구와 뷰 종료 적대적 검증
- feat(editor): 연결된 뷰의 편집과 Undo 게시 기반 구현
- fix(session-host): count metadata applied in the same pump turn as a screen batch
- fix(editor): release IME provenance independently of document leases
- test(editor): record integrated IME candidate evidence
- fix(editor): preserve IME ranges and verify wrapped candidates
- fix(session-host): reentry 정산 판정자가 앞선 판정자가 남긴 post snapshot 에 막히던 것 — 시작 전에 비운다
- ci: build Zig dependencies from vendored tarballs, never the network
- refactor(editor): 호스트 파일을 폴더로 묶고 이름 단축
- refactor(editor): 단일 뷰 문서를 앱 전역 핸들로 이관
- test(editor): plant a distinct name in every terminal in NS9
- test(editor): 문서 참조 수명 적대적 검증 보강
- feat(editor): 안정 문서 핸들과 참조 수명 골격 추가
- fix(session-host): delta_chunk 판정자가 앞선 판정자가 올린 프레임 도장에 막히던 것 — 읽기 전에 도장을 끈다
- test(editor): replace the external change atomically in the save-conflict smoke
- fix(session-host): keep observation probe nonce through GUI metadata coalescing
- test(session-host): wait for applied ssh dest in P3-e4d-4 and keep last user action failure
- refactor(editor): 문서 본문과 저장 정보의 소유 경계 분리
- fix(tests): 러너가 무시로 물려받은 SIGINT·SIGQUIT 를 되돌리고, C2 상대 스레드의 read 에 기한을 건다
- refactor(editor): 공유 문서 이관을 위한 Undo·Redo 소유 분리
- docs(editor): 공유 문서의 실제 소유와 이관 경계 조사
- docs(editor): VS Code 재조사 결과로 공유 뷰 UX 계약 확정
- docs(editor): 공유 편집 미결 정책의 VS Code 근거와 권장안 정리
- docs(editor): 반복 검증으로 저장 순서와 요청 수명 및 편집 통지 보완
- docs(editor): 공유 provider와 복구 수명 및 grant 역할 정합성 보완
- docs(editor): 공유 문서 종류와 검색 복원 권한 경계 보완
- docs(editor): 공유 편집의 경쟁과 Undo IME 실패 경계 보완
- docs(editor): 공유 문서 설계의 저장 수명과 게시 반례 보완
- docs(editor): 공유 문서와 독립 뷰 설계 및 검증 단계 정리
- fix(session-host): 재사용 host 채택은 연결이 살아 있을 때만, 두 번째 GUI 는 lock 이 풀리면 곧바로 재사용 판정으로
- fix(session-host): 업그레이드가 실패해도 새 host 를 띄우지 않는다 — 살아 있는 호환 host 를 재사용해 「host 하나」를 지킨다
ohah/spinon
- feat: Stylo stylesheet 입력 목록 구현
- feat: CSS 자원 어댑터 시제품 추가
- docs(style): C03 구현 상태와 아키텍처 문서 동기화
- feat(style): Stylo DOM 어댑터 연결
- fix(core): 예약 핸들 취소와 DOM 경계 명세
- refactor(core): HostDocument 모듈 분리와 Rust 규칙 추가
- feat(core): HostDocument 코어 모델 추가
- docs: 재기반 검증 근거 추가
- test(layout): 소수 Flex 분배의 브라우저 기준 추가
- feat(layout): Taffy 레이아웃 모듈 추가
- chore: Bun 도구 버전을 1.4.2로 갱신
- spike: Vite·Rspack CSS 산출 비교 실험
- docs: 내장 UA stylesheet 출처와 사용 예 보강
- fix: CSS 비교 기준 검증 근거 보강
- docs: CSS 비교 기준과 구현 계획 동기화
- feat: 기본 UA 스타일 자원 내장
ohah/zntc
- fix(semantic): bind inline runtime helper symbols
- fix(semantic): model namespace IIFE parameters as symbols
- fix(transpile): reuse semantic graph for TS decorators
- fix(transpile): reuse semantic graph for TS auto-accessors
- fix(transpile): reuse semantic graph for TS private elements
- fix(transpile): preserve semantic graph for TS static blocks
- fix(transformer): track generated class rest parameters
- test(transformer): cover import-export symbol identities
- fix(transformer): register Flow match temp symbols during lowering
- test(format): skip Flow fixture in formatter
- fix(semantic): analyze Flow match source references
- test(symbols): require exact external identity evidence
- fix(transformer): avoid shadowing temp-like globals
- fix(bundler): preserve rename identity across reanalysis
- fix(transformer): bind generator for-of temps at creation
- fix(transformer): bind generator for-in temps at creation
- fix(transpile): bind standalone JSX runtime imports to symbols
- fix(transformer): bind JSX runtime helper symbols
- fix(codegen): prevent enum IIFE initializer capture
- fix(codegen): preserve private nested namespaces
- fix(codegen): avoid nested namespace name collisions
- test(transformer): audit orphan synthetic symbols
- fix(transformer): 구조분해 매개변수 임시 심볼을 생성 시 등록
- fix(transformer): bind destructuring temps at creation
- fix(transformer): preserve lexical scopes in coverage audit
- refactor(transpile): reuse transform symbols for type-erased Flow
- fix(transpile): isolate standalone runtime helper names
- refactor(transpile): reuse transform symbols for type-erased TypeScript
- refactor(transpile): reuse transform symbols for CommonJS output
- feat(transformer): preserve symbol identity through lowering
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.