2026-03-27
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
agent-devtools가 이날 시작됐습니다. Zig 프로젝트로 초기화한 뒤 WebSocket 프레임 코덱, CDP 메시지 파싱과 직렬화, Chrome 프로세스 실행과 CDP 연결, CLI 진입점을 차례로 만들고, 네트워크 이벤트 수집과 network list, Unix 소켓으로 통신하는 데몬을 붙여 CLI에서 데몬을 거쳐 Chrome까지 이어지는 구조를 완성했습니다. 오후에는 콘솔 로그 캡처와 --port 기반 CDP 탐색, 웹앱 API를 역으로 정리하고 응답 JSON 스키마를 추론하는 analyze, Fetch.enable 기반 네트워크 가로채기, 흐름 녹화·재생·비교를 넣었습니다. 이어 screenshot·eval·탐색 명령, 스냅샷과 @ref로 요소를 가리키는 클릭·입력·스크롤 같은 페이지 조작을 추가해 agent-browser와 같은 명령 체계를 갖췄고, agent-browser와의 비교 문서와 AI 에이전트용 SKILL.md를 썼습니다. 밤에는 멀티스레드 구조와 agent-browser와 같은 접근성 트리, 상주 모드, 실패 시 종료 코드 1, --debug 모드를 더했습니다. 이 저장소는 이날 PR 없이 커밋으로만 진행됐습니다.
zntc 번들러는 namespace import를 동적으로 접근할 때 변수 선언을 만들고 이름 충돌을 점진적으로 피하도록 했으며(#442, #444), import defer·source를 default import로 파싱하던 문제와 삼항 연산자 안 화살표 함수 본문의 : 오파싱을 고쳤습니다(#448, #449). scope hoisting의 내부 함수 shadowing과 리네임 충돌, namespace 객체에 default 키워드가 그대로 나오던 문제를 고쳤고(#451, #453부터 #455까지), Rolldown 방식의 CJS·ESM 상호 운용(#456)과 export *에서 default를 빼는 스펙 준수 수정(#457)을 넣었습니다.
오후부터는 트리 셰이킹을 export 수준 DCE(#459)와 rolldown 방식의 StmtInfo 기반 문장 단위 셰이킹(#460)으로 고도화했습니다. exports 조건 해석 순서를 Node.js 스펙에 맞추고(#461), arktype에서 생긴 회귀를 계기로 export * 경유 모듈을 보호하는 필터(#464)를 넣었으며, 심볼 기반 모듈 도달성으로 svelte 번들을 78KB에서 22KB로 줄였습니다(#465). 마지막으로 CLI --conditions, 상수 인라인, 코드 생성 단계 DCE(#466)가 병합됐습니다.
블로그 저장소에서는 맞춤법 크론이 hwpjs 개발기와 기술 스택 글을 차례로 점검해 development-2 글의 띄어쓰기를 고치고 나머지는 확인 완료로 표시했으며, 3월 26일과 27일의 오늘의 커밋 요약이 작성됐습니다.
공개 커밋 130개, 해당일 생성 또는 병합된 PR 17개를 정리했습니다. PR 생성 17개·병합 17개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/agent-devtools
- feat: --debug 모드 + SKILL.md (AI 에이전트 도구 설명서)
- feat: interactive 모드 실패 시 exit code 1 반환
- feat: 멀티스레드 + agent-browser 동일 AX tree + 110개 명령어 + 상주 모드
- feat: 테스트 14개 추가 + Skills (SKILL.md) 생성
- docs: CLAUDE.md 최종 동기화 — 60+ 명령어, 339 테스트
- feat: agent-browser 전체 명령어 동일 구현
- feat: dblclick, is visible/enabled/checked, get attr 추가
- refactor: DaemonContext 구조체로 handleCommand 10개 파라미터 통합
- refactor: 트리 구조 스냅샷 + RefMap 최적화 + DaemonContext 준비
- fix: /simplify snapshot 리뷰 반영
- fix: get text/html/value를 DOM.resolveNode + Runtime.callFunctionOn으로 구현
- feat: scroll, select, check, get text/html/value 추가
- docs: CLAUDE.md snapshot + 페이지 조작 + 기본 명령어 반영
- feat: Snapshot + @ref 시스템 + 페이지 조작 (click/fill/type/press/hover)
- feat: 기본 명령어 추가 — screenshot, eval, back/forward/reload, get url/title, wait
- docs: CLAUDE.md 최종 동기화 — 모든 Phase 완료
- refactor: /simplify recorder.zig 리뷰 반영
- feat: Phase 5 — 플로우 녹화/재생/비교 (record/diff)
- feat: Phase 4 — 네트워크 인터셉트 (Fetch.enable)
- docs: CLAUDE.md Phase 3 스키마 추론 반영
- feat: Phase 3 보완 — 응답 JSON 스키마 자동 추론
- docs: CLAUDE.md 전체 동기화
- refactor: /simplify analyzer.zig 리뷰 반영
- feat: Phase 3 — analyze 명령 (웹앱 API 역공학)
- docs: agent-devtools vs agent-browser 비교 문서
- test: CDP discovery 테스트 3개 추가
- feat: --port CDP discovery + httpGet 구현
- fix: -0 엣지케이스 + RemoteObject 전체 subtype 테스트 추가
- refactor: /simplify 리뷰 반영
- fix: console 로그 캡처 — 모든 JS 타입 정확한 텍스트 변환
- feat: console list, --headed, --port 옵션 추가
- feat: Phase 3 선행 보강 — network get, status, idle timeout, network clear
- refactor: /simplify main.zig + 문서 동기화
- feat: 데몬 아키텍처 완성 — CLI → 데몬 → Chrome CDP 전체 파이프라인
- refactor: /simplify daemon.zig 리뷰 반영
- feat: 데몬 프로세스 + Unix Socket 통신 프로토콜
- fix: network list 출력 + 무한 대기 문제 해결
- feat: network list CLI 명령 구현 (Phase 2 완료)
- feat: Network 이벤트 수집 모듈 + 11개 테스트
- refactor: /simplify Phase 2 리뷰 반영
- feat: Chrome 프로세스 스폰 + CDP 연결 대기
- feat: WebSocket Client (TCP 연결 + 핸드셰이크 + 프레임 I/O)
- refactor: /simplify main.zig 리뷰 반영
- feat: CLI 진입점 구현 (Phase 1 완료)
- refactor: /simplify chrome.zig 리뷰 반영
- feat: Chrome 프로세스 관리 + 37개 테스트
- refactor: /simplify 코드 리뷰 반영
- feat: CDP 테스트 보강 + Target 도메인 + JSON 이스케이프 검증
- feat: CDP 메시지 파싱/직렬화 + 44개 테스트
- feat: WebSocket 프레임 코덱 + Connection 상태 관리자
- docs: 프로젝트 계획 및 아키텍처 문서 추가
- init: Zig 프로젝트 초기화
ohah/ohah.github.io
- CRD: Add 2026-03-28 03:00 AM cron entry - all files checked
- CRON: Update timestamp - 2026-03-28 02:30 AM (Asia/Seoul)
- 2026-03-28 02:01:18 - CRD 크론 다시 실행, 모든 .mdx 파일 완료
- chore: cron-crd-write - all .mdx files already checked, mark run 258
- CRD: 2026-03-28 01:00AM run - no target files to check
- docs: CRD 30분마다 실행 상태 갱신 (2026-03-28 12:30)
- docs: add AI summary for 2026-03-27 activity
- chore(cron): update CRON_CRD_WRITE.md for 2026-03-28 00:00 AM check
- feat(cron): update CRD check log at 2026-03-27 11:30 PM
- chore(cron): mark CRD 253 complete — all .mdx files already checked
- docs: update CRON_CRD_WRITE.md - 10:30 PM cron check, all files complete
- Cron: record CRD schedule for 2026-03-27 09:00 PM
- cron-crd: 마지막 상태 갱신 - 2026-03-27 08:30 PM
- docs: mark hwpjs/tech-stack.mdx as complete (all files done)
- docs: mark hwpjs/development-5.mdx as complete
- docs: mark hwpjs/development-4.mdx as complete
- docs: fix spacing in development-3.mdx (CRD) [blog-crd-write]
- chore: spell-check fix - development-2.mdx spacing improvements
- chore: check docs/monthly-opensource/hwpjs/development-1.mdx for spelling
- docs: mark hwpjs/development.mdx as checked (no spelling errors found)
- Fix typo: '러천지' → '러스트지' in hwpjs/background.mdx and update CRON_CRD_WRITE.md checklist
- docs: update CRON CRD Write timestamp (no files to check)
- docs: update CRON_CRD_WRITE.md - all CRD development files checked (dev through tech-stack)
- docs: update CRON_CRD_WRITE.md - checked docs/monthly-opensource/crd/development-2.mdx
- docs: update CRON_CRD_WRITE.md - checked docs/monthly-opensource/crd/development-1.mdx
- docs: update CRON_CRD_WRITE.md - checked docs/monthly-opensource/crd/development.mdx
- cron-crd: mark 3604 entry 189 (03:00 PM) as CRD complete
- cron: CRD 30분마다 실행 - 03:00 PM
- docs: CRD 30m execution log @ 2:30 PM (2026-03-27)
- docs: add AI summary for 2026-03-26 activity
- CRD: 1:30 PM cron check - all files OK, updated status
- CRD: 1:00 PM cron check - all files OK, updated status
- docs: update CRON_CRD_WRITE.md - 12:30 PM CRD run (no changes needed)
- 🤖 CRD: Update chron status - all .mdx files already completed
- chore: update cron write status - all docs checked
- chore(cron): update CRD status for 10:00 AM cycle (340-i-jeong-cha-ga-bu-yeok-suk-cha-jeong-ja-183)
- chore(cron): add 30-minute CRD cycle entry for 09:30 AM
- docs: CRD 30분마다 실행 완료 - 09:00 AM
ohah/zntc
- refactor(bundler): /simplify 상수 인라인 코드 품질 개선
- feat(bundler): --conditions CLI + 상수 인라인 + codegen DCE
- refactor(bundler): /simplify 코드 품질 개선
- style: zig fmt
- fix(bundler): 심볼 기반 모듈 도달성 — svelte 78KB→22KB (72% 감소)
- refactor(bundler): export default identifier — rolldown 방식 심볼 재사용
- fix(bundler): export default identifier의 도달성 seed — yargs y18n 수정
- docs: CLAUDE.md smoke 현황 업데이트 (avg 0.87x, ❌ 2개)
- fix(bundler): export_bindings 필터 — named re-export 경유 모듈 보호 (#462)
- fix(bundler): export_bindings 필터 — export * re-export 경유 모듈 보호 (#463)
- fix(bundler): export_bindings 필터 비활성화 (arktype flatMorph regression)
- refactor(bundler): /simplify — dead code 제거 + 중복 루프 통합
- refactor(bundler): StmtInfo cross-module + export_bindings 필터 완성
- refactor(bundler): StmtInfo 도달성 기반 cross-module import 필터 + default export 보호
- docs: CLAUDE.md + DECISIONS.md 동기화 (D095, smoke 현황, phase 업데이트)
- fix(bundler): exports 조건 해석을 Node.js 스펙 순서로 변경
- docs: CLAUDE.md + DECISIONS.md 동기화 (D093-D094, StmtInfo, purity)
- refactor(bundler): /simplify 리뷰 반영 — dead code 제거 + hasSideEffects 통합
- feat(bundler): StmtInfo 기반 statement-level tree-shaking (rolldown 방식)
- feat(bundler): tree-shaker 2단계 — export 수준 DCE (#458)
- docs: tree-shaker 2단계 우선순위 추가 (#458)
- docs: CLAUDE.md + DECISIONS.md 동기화 (Interop, Unambiguous, export * default)
- test(bundler): 이번 세션 수정사항 regression 테스트 6개 추가
- fix(bundler): export *에서 default export 제외 (ESM 스펙 준수) (#457)
- fix(bundler): Rolldown 방식 CJS→ESM Interop 도입 (#456)
- refactor(bundler): namespace/default 처리 정리 + HashMap 최적화
- fix(bundler): namespace barrel re-export + default 키워드 출력 방지 (#455)
- fix(bundler): namespace 객체에서 bare default 키워드 출력 방지 (#454)
- fix(bundler): .js Unambiguous 파싱 + scope hoisting 리네임 충돌 방지 (#447)
- fix(bundler): scope hoisting에서 내부 함수 이름 shadowing 충돌 방지 (#450)
- fix(parser): 삼항 연산자 consequent 안 화살표 expression body에서
:오파싱 (#446) - fix(parser): import defer/source를 default import으로 올바르게 파싱 (#445)
- fix(bundler): namespace 변수명 progressive 충돌 방지
- test: shorthand property rename 버그 failing 테스트 추가 (#445)
- fix(bundler): namespace 변수명 progressive 충돌 방지
- test(bundler): namespace import 동적 접근 + 변수명 충돌 테스트 추가
- fix(transformer): ts_as_expression unwrap 시 symbol_id 덮어쓰기 방지
- fix(bundler): namespace 변수명 충돌 방지 (_ns suffix)
- fix: errdefer에서 var_name 메모리 해제 누락 수정
- fix(bundler): namespace import 동적 접근 시 변수 선언 생성 (esbuild 방식)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.