2026-09-26
한국 시간(KST) 기준으로 하루를 나눴습니다. 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 조회: 2026-10-06 KST. 공개 저장소에서 조회한 활동만 포함합니다.
요약 (AI 작성)
zntc는 이날 공개 커밋 100개로 작업이 가장 많았습니다. 새벽에 IIFE 접기가 반환식을 복사해 선언이 사라진 변수를 가리키던 문제와 합성 변수 이름이 사용자 변수를 가리던 문제를 고친 뒤, 오후부터 변환 패스가 쓰는 가변 심볼 편집기와 스코프 소유자 추적·재연결을 의미 분석에 더했습니다. 이어 반복문·optional catch·nullish·optional chaining·tagged template·데코레이터·런타임 헬퍼 import처럼 변환이 만든 임시 변수와 함수를 원래 심볼과 스코프에 연결했습니다. ES5 클래스 IIFE의 자기 참조, 매개변수 기본값보다 먼저 초기화해야 하는 캡처, static private 메서드·접근자, 추출된 루프의 catch 제어 흐름, TypeScript namespace와 병합 enum의 출처도 바로잡았고, Hermes 프리셋에서 async generator를 낮추도록 했습니다.
maru 편집기는 감싸는 쌍이나 다음 여는 괄호로 가는 괄호 점프(#3954)를 병합하면서 다음 여는 괄호 탐색을 트리 커서 한 번 걷기로 바꿔 커밋이 밝힌 측정에서 44초 걸리던 경우를 1ms 미만으로 줄였습니다. 줄 끝 목표로 내려갈 때 큰 열 값이 넘치던 문제(#3956), 비교·병합 뷰에서 줄 번호가 본문에 밀려 사라지던 결함(#3940)도 고쳤고, copyleft 레퍼런스 이름을 문서와 주석에서 걷어냈습니다. 원격 에이전트 쪽은 죽은 pane의 이벤트가 살아 있는 다른 Term에 귀속되던 문제(#3960)와 orphan 경고가 옛 짝을 이번 분배 옆에 찍던 문제(#3962)를 고쳤습니다.
저녁에는 랩된 줄에서 아래로 두 번 이동하면 목표 열이 0으로 무너지던 문제, 맞닿기만 한 두 선택 범위가 합쳐지던 문제, ⌘⌫가 들여쓰기를 남기던 문제, 편집기 pane에서 커서가 깜빡이지 않던 문제, 한글 조합을 Enter로 확정한 글자가 문서에 들어가지 않던 IME 문제(#3968), 하이퍼링크를 보내지 않던 앱에 능력을 알리는 pty 수정(#3972)과 term-program 설정(#3974) PR이 열렸습니다. 이 PR들은 다음 날 병합됐고, Goal.line_end를 없애려던 #3973은 병합 없이 닫혔습니다. 괄호 색·강조·점프 판정을 통일한 #3964도 이날 열려 다음 날 병합됐고, Markdown 소스 네이티브 이관 계약 검토안 #3967은 미병합입니다. Chromium 웹 패널의 권한 요청 sheet(W5b1), CoreLocation 위치 전달(W5b2), 웹 알림 전달(W5c)은 기능 브랜치 docs/web-panel-osr-backend에 병합돼 main 반영이 아니며, main 통합 PR #3867은 열려 있습니다.
hwpjs는 HWPX에 포함된 SVG XML 구조와 OLE 컨테이너, BMP 픽셀, 선택적으로 켜는 JPEG 픽셀 검사와 Exif 방향 보고, Adobe 4성분 JPEG와 PNG RGBA 디코딩을 HWP 컨테이너 검사에 이었습니다. 섹션·바탕쪽 텍스트 스냅샷을 문서 모음에서 비교하는 검증을 더하고, 수식·필드·매개변수 목록·단 정의·쪽 번호 제어 검사도 넓혔습니다. 새 공개 저장소 ohah/spinon이 첫 커밋(initialize Boson repository)과 함께 만들어졌습니다. 웹 문법으로 모바일과 웹 앱을 만드는 GPU 기반 UI 프레임워크를 실험하는 저장소로, 같은 JavaScript 트리를 V8과 Rust 레이아웃을 거쳐 iOS UIKit·Android 네이티브 뷰로 그리는 PoC PR #1이 이날 열려 9월 28일 새벽에 병합됐습니다. 블로그 저장소에는 9월 22일부터 26일까지의 기록 갱신과 전수 검토 보완 커밋 두 개가 있습니다.
공개 커밋 154개, 해당일 생성 또는 병합된 PR 68개를 정리했습니다. PR 생성 65개·병합 56개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/hwpjs
- feat(hwpx): inspect section number controls
- feat(hwpx): inspect column definitions
- feat(hwpx): inspect field marker links
- feat(hwpx): inspect inline string controls
- feat(hwpx): inspect field parameter lists
- feat(hwpx): inspect section meta tag text
- feat(hwpx): inspect section parameter lists
- feat(hwpx): inspect equation shape comments
- feat(hwpx): inspect equation caption sublists
- feat(hwpx): inspect equation shape fields
- feat(hwpx): inspect equation scripts and fields
- test(hwpx): compare master text snapshots across corpus
- feat(hwpx): own master-page text snapshots
- test(hwpx): compare selected text snapshots across corpus
- test(hwpx): verify text snapshots across corpus
- feat(hwpx): own section text event snapshots
- feat(png): connect RGBA inspection to HWP containers
- feat(png): decode owned RGBA pixels
- feat(hwpx): decode Adobe four-component JPEG pixels
- feat(hwpx): report Exif orientation independently of pixels
- feat(hwpx): inspect Exif JPEG orientation metadata
- feat(hwpx): inspect Exif Adobe JPEG pixels
- feat(hwpx): opt into observed JPEG component IDs
- test(hwpx): verify JPEG pixel differences against direct IDCT
- feat(hwpx): add opt-in JPEG pixel inspection
- feat(hwpx): validate BMP pixels across image reports
- feat(hwpx): inspect normalized OLE copies
- feat(hwpx): inspect packaged OLE containers
- feat(hwpx): inspect manifest image candidates
- feat(hwpx): inspect embedded SVG XML structure
ohah/maru
- fix(remote-agent): orphan 경고가 «옛 짝» 을 이번 분배의 mine 옆에 찍어 거짓말하던 것 (RF8)
- docs(plans): 네이티브 편집기 절 제목의 낡은 「N1 진행 중」을 고친다 — N1~N5 모두 섰다 · 「섰다」는 「끝났다」가 아니다(N3 남은 셋은 코드로 확인)
- fix(remote-agent): 죽은 pane 의 이벤트가 살아 있는 «남의 Term» 으로 귀속되던 것 — 빈 세션 이름은 모름이다 (RA7.7)
- test(editor): 공백 표시는 run·글자 몫을 쓰지 않는다(RB8) — 불변식 ⑵를 「저장소의 run 을 쓰는 텍스트 op」로 좁힌다
- test(editor): 몫 판정자의 빈틈 여섯을 메우고 세션 저장소를 1.5배씩 키운다 (B1 적대적 3~5회차)
- fix(editor): 세션 저장소 할당이 실패해도 호출자가 준 run·글자보다 작아지지 않는다 (B1 적대적 1회차)
- fix(editor): run·글자 몫을 컴포넌트가 기하로 묶어 답한다 — 비교 뷰·병합에서 줄 번호가 본문에 밀려 통째로 사라지던 결함 (B1, visual-mapping §4)
- docs: copyleft 레퍼런스의 이름을 문서·주석에서 걷고 maru 용어로 적는다 — 외부 도구 출처 표현 정리
- docs(editor): 층 규칙의 범위를 바로잡고 레퍼런스 표를 고친다 — 출력 모델은 둘(arena 덧붙이기 다수 / 고정 슬라이스), VS Code GPU 글자 셀·Zed Scene
- docs(editor): 머지된 #3922 기준으로 안내선 서술을 고친다 — 막대 뒤 남은 자리에 쓰고 밴드 뒤로 옮기므로 남을 굶기지 않고 자기가 잘린다
- docs(editor): run 몫은 입력에서 세지 않고 기하로 묶는다 — 공식은 가르는 규칙의 사본이라 낡는다 · 사전 검증 7,000회와 판정자 함정 넷
- docs(editor): draw 저장소의 몫은 방출하는 컴포넌트가 센다 — 비교 뷰 줄 번호가 통째로 사라진 원인(run 640 한도)과 이관 순서
- docs(editor): §3.9c 적대적 기록 — 커서 상한을 메모로 바꾼 뒤의 변이 11
- test(editor): 괄호 점프 메모 적대적 — 가짜 provider 의 다음 여는 괄호도 한 번 걷기(정렬 전제를 드러낸다: P07) · P02 등가 주석
- perf(editor): 괄호 점프 — 커서 수 상한 대신 형제 쌍 메모 · 다음 여는 괄호 한 번 걷기 (VS Code 와 같게 상한 없음)
- docs(editor): §3.9c 괄호 점프 적대적 5회차 — 실제 파일 16 언어 차분(여섯 언어 0 %) · 차이는 「무엇이 괄호인가」가 색의 규칙과 다른 데서 온다
- fix(editor): 괄호 점프 적대적 3·4회차 — 속성 이름 괄호 · 커서 100 개 선 · 계약 문장 감사 · 깨진 코드의 차이 실측
- fix(editor): 괄호 점프 적대적 1·2회차 — 다음 여는 괄호는 트리 커서로 한 번 걷는다(44 초 → 1 ms 미만) · HTML 글 잎 종류를 가른다
- test(editor): BRP8 — 갈 데가 없으면 선택은 앞쪽 끝으로 접힌다
- feat(editor): 괄호 점프 — 닿은 괄호가 없으면 감싸는 쌍의 닫는 괄호로, 없으면 다음 여는 괄호로 (VS Code jumpToBracket)
- fix(editor): 줄 끝 목표로 내려갈 때 «아주 큰 열» 이 i32 로 좁혀지며 넘치던 것 — 행 끝 offset 을 곧바로 낸다 (MOV14)
ohah/ohah.github.io
ohah/spinon
ohah/zntc
- fix(ts): register unused namespace destructuring temps
- test(ts): update enum merge snapshots for shared storage
- test(ts): refresh merged namespace enum snapshots
- fix(ts): preserve merged namespace enum members
- fix(ts): keep namespace destructuring temps in IIFE scope
- fix(ts): preserve merged namespace member provenance
- fix(codegen): preserve TypeScript namespace binding provenance
- chore(audit): classify iterative scope walkers
- style(test): format class capture regression fixture
- fix: keep class field captures distinct from parameter defaults
- fix: preserve copied constructor scope and capture order
- fix: bind ES5 class field arrow captures in constructor scope
- test(transformer): wire class self provenance into semantic fixtures
- fix(transformer): bind ES5 class IIFE self storage by source SymbolId
- style(test): format async generator capture matrix
- fix(transformer): keep source lexical captures across generated generator loops
- test(transformer): keep synthetic coverage fixtures in test module
- test(transformer): inventory generated identifier symbol coverage
- style(test): format lexical capture regression cases
- fix(transformer): visit decorated constructors once at final scope
- test(transformer): verify nested and class lexical captures
- fix(transformer): preserve exact capture origins across copied functions
- fix(transformer): track lexical capture symbols by source frame
- fix(transformer): preserve native default parameter environment
- test(transformer): expand parameter temp targets and remove fixed Hermes failures
- fix: bind parameter temps in their source function scope
- fix(compat): lower async generators in Hermes preset
- fix(transformer): lower parameter defaults that depend on body captures
- fix: order class parameter arrow captures before defaults
- fix(runtime): use owned static private descriptor shape
- style(test): format private symbol regression fixtures
- fix(transformer): retain source scope ancestors in generated functions
- fix(runtime): ignore inherited private descriptor slots
- fix(transformer): bind arrow body temps in arrow scopes
- fix(transformer): bind generated body temps in output function scopes
- fix(transformer): preserve static private accessor and readonly semantics
- test(transformer): cover static private super in extracted methods
- fix(transformer): emit static private methods with class brand
- fix(transformer): lower extracted private methods through function pipeline
- style(test): format class self regression cases
- fix(semantic): distinguish class self binding identity
- fix(transformer): preserve class IIFE scope ownership
- fix: preserve parameter capture role across statement copies
- test(transformer): cover parameter capture ordering boundaries
- fix: initialize parameter arrow captures before default checks
- test(transformer): assert live helper reference identity
- test(transformer): require fixed async generator default minification
- fix: preserve async generator inner scope frontier and parameter boundary
- fix(transformer): bind temps in registered generated functions
- fix(transformer): bind decorated method body temps in source scope
- test(transformer): separate existing decorator key runtime defect
- fix(transformer): require function scope for state machine owners
- test(transformer): record existing Hermes async generator boundary
- fix(transformer): preserve decorated method scope provenance
- test(transformer): cover decorated computed async method scope
- fix(transformer): carry original class owner into state lowering
- feat(transformer): preserve source scopes for lowered class methods
- test(transformer): exercise computed state machine method owners
- feat(transformer): bind generated state machine callback references
- style(test): format legacy helper target matrix
- fix(transformer): include legacy decorator helper in ES5 output
- test: cover hostile loop var write scope paths
- feat(transformer): track hoisted loop var writes in source scopes
- fix: preserve live scope owners across loop body copies
- test(transformer): scope metadata fixture to helper linkage
- test(transformer): execute legacy helper import modes
- fix: bind legacy decorator runtime helpers through virtual imports
- style(test): format catch control flow fixtures
- test(transformer): cover nested catch control flow boundaries
- fix(transformer): preserve catch control flow in extracted loops
- fix(minify): merge declarations only in the emitted tree
- feat(semantic): collect runtime identifier reference positions
- fix(parser): preserve ambient declaration markers
- feat(semantic): relocate reference scope and symbol together
- fix(semantic): preserve generator loop call references
- feat(semantic): track original nodes of copied references
- feat(semantic): track extracted loop call arguments
- feat(semantic): retain nullish identifier reference provenance
- feat(semantic): support safe scope reparenting for transforms
- feat(semantic): bind isolated runtime helper imports
- feat(semantic): bind decorator access parameters
- feat(semantic): bind generated tagged template functions
- feat(semantic): bind live assignment target temp references
- feat(semantic): bind nullish assignment value temps
- feat(semantic): bind spread constructor callee temps
- feat(semantic): bind optional-chain temp references
- feat(semantic): bind original function nullish temps
- feat(semantic): bind top-level nullish temps during transform
- feat(semantic): preserve generated temp allocation identity
- feat(semantic): bind generated optional catch parameters
- feat(semantic): bind generated loop symbols during transform
- feat(semantic): remap preserved scope owners after transform
- feat(semantic): track lexical scope owners through transforms
- feat(semantic): add mutable symbol editor for transform passes
- test(transformer): require aliased JSX helper calls
- fix(transformer): keep JSX runtime helper references aligned with imports
- test(transformer): enforce symbol coverage for generated user identifiers
- fix(transformer): 식별자 생성 감사의 우회로를 막는다 — 조건식 태그·JSX 식별자 (#4760 후속)
- fix(transformer): 합성 이름을 사용자 변수와 겹치지 않게 모듈 단위로 정한다 (#4814)
- fix(minify): IIFE 접기가 반환식을 복사하지 않고 가리키게 한다 (#4812)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.