2026-02-28
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
react-wasm-table은 이날도 PR 12개를 병합했습니다. 왼쪽·오른쪽 열 고정과 영역별로 잘라 그리는 고정 열 렌더링(#30), TSV·CSV·HTML 복사와 Cmd+V 붙여넣기 콜백, WASM 보기 인덱스를 ref로 넘기는 지연 행 모델(#31), 헤더를 끌어 열 순서를 바꾸는 드래그 앤 드롭과 위·아래 행 고정(#32)을 차례로 넣었습니다. 열 순서가 바뀌어도 셀을 찾을 수 있게 문자열 테이블은 열 ID로 조회하도록 바꿨습니다.
셀 안 레이아웃 쪽은 캔버스용 Flex·Text·Badge 컴포넌트와 데모 페이지를 추가하고(#33), 패딩·테두리·배경을 갖는 Box와 Stack 컴포넌트, Rust Taffy로 셀 안 Flex·Box·Stack 배치를 계산하는 compute_composite_layout을 넣었습니다(#34). 셀 렌더러는 컴포넌트별 파일로 나눴고(#35), 내장 렌더러에 stack을 등록했으며(#38), 마지막에 렌더러 디렉터리 구조를 다시 정리했습니다(#40). 클릭 위치를 판별하는 컨텍스트 메뉴 이벤트도 추가했습니다(#36).
API 면에서는 useReactTable·flexRender와 Table·Thead·Tbody 구조를 해석하는 parseTableChildren 등 TanStack 스타일 Table API를 공개하고(#37), InstructionBuilder를 없애 렌더 루프가 cellDef로 셀을 그리게 하면서 TanStack 데모 섹션을 추가했습니다(#39). 보이는 범위만 담는 가상 행 모델과 내보내기용 getTotalRowModel, 브라우저 스크롤 높이 한계를 피하려고 스크롤바를 1천만 px로 제한하는 수정은 #41로 들어왔습니다. e2e 워크플로는 임시로 껐습니다.
ssh-agent-web 저장소가 이날 시작됐습니다. PTY를 띄워 /terminal과 /terminal/agok 경로로 제공하는 Bun WebSocket 터미널 서버와, xterm으로 접속하는 반응형 React 웹 앱, SSH 포트 포워딩 사용법을 담은 README로 구성했습니다. cheolsu-proxy는 pnpm과 prettier를 bun과 oxfmt·oxlint로 바꾸고 mise 설정과 AGENTS.md를 추가했으며(#53, #54), 문서 폴더를 document로 옮기고 Rspress 2.0.3과 SSG로 CI를 고친 뒤(#55) Pages 배포 워크플로를 되살렸습니다(#56). react-native-mcp는 모노레포 루트에서 init을 실행하면 작업 공간 안의 RN 앱을 찾아 설정하고 패키지를 package.json에 추가하도록 했습니다(#107).
블로그 저장소(ohah.github.io)에는 당시 일일 요약 자동화가 남긴 활동 요약 추가와 완료 시각 갱신 커밋 2개가 있었습니다.
공개 커밋 122개, 해당일 생성 또는 병합된 PR 17개를 정리했습니다. PR 생성 17개·병합 17개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/cheolsu-proxy
- chore(config): restore deploy-pages workflow, remove review commands
- fix(document): rspress/config → @rspress/core (CI 모듈 해결)
- fix(document): docs→document, @rspress/core 2.0.3, SSG
- ci(deploy-docs): bun 버전 1.2로 고정
- fix(docs): rspress 1.47.1 고정 및 README 링크 수정
- chore: reference/ 폴더 gitignore 추가
- chore: pnpm→bun, prettier→oxfmt/oxlint, mise.toml·AGENTS.md
ohah/ohah.github.io
ohah/react-native-mcp
- docs: init 모노레포·package 추가·옵션 문서 반영
- test(server): init 모노레포·add-package·runInit 테스트 보강
- feat(server): init 모노레포 지원 및 package.json 자동 추가
ohah/react-wasm-table
- fix(grid): cap scrollbar at 10M px and scale position for large content
- feat(grid): add virtual row model and getTotalRowModel for export
- refactor(grid): reorganize renderer into subdirectories
- chore(demo): align existing pages with Grid API / TanStack section layout
- feat(demo): add TanStack demo section with shared components and routes
- test(grid): add parse-table-children keys and use-render-loop cellDef/parsedBodyContent
- feat(grid): parse Table Tr/Td keys and pass parsedBodyContent to render loop
- refactor(grid): remove InstructionBuilder, resolve cells via cellDef in render loop
- test(grid): update cell-renderer tests for stack renderer
- feat(grid): register stack renderer and add measurement support
- feat(grid): add stack cell renderer
- chore(demo): update WASM binary
- feat(demo): add Table API demo page
- refactor(hooks): TanStack-compatible updater types for sorting and filtering
- feat: export Table API (Table, useReactTable, flexRender, cell, parseTableChildren)
- feat: add useReactTable (TanStack Table API alias)
- feat: add parseTableChildren and table structure components
- feat: add flexRender for JSX/cell render function resolution
- feat: add Cell type and buildCell for TanStack-compatible cell access
- refactor(row-model): add getVisibleCells and expand row model helpers
- feat(grid-instance): add getHeaderGroups and row model to build options
- refactor: buildHeaderGroups to accept leaf columns and depth
- refactor: add RowPinningPosition to types
- refactor: add TanStack-compatible state updater types
- refactor(adapter): extend EventManager for region-aware coordinate conversion
- docs: align roadmap table and fix test type assertion style
- chore: add reference/ to gitignore
- docs: mark context menu (6-5) done in roadmap
- feat(grid): add context menu (onContextMenu) with hit-test and optional table in event
- style(core): rustfmt remaining composite_params calls in layout tests
- style(core): apply rustfmt to layout.rs composite section
- style(grid): format cell-renderers and cell-renderer test
- fix(wasm): reduce compute_composite_layout args via CompositeLayoutParams
- docs(demo): label planned section as interactive (DOM overlay) in CanvasComponents
- docs: note ProgressBar as interactive stub in canvas-components
- docs: move ProgressBar to interactive (DOM overlay) in canvas-component-list
- feat(demo): add CanvasStack page and sidebar/CanvasComponents link
- docs: add composite layout architecture and Stack in canvas component list
- test(grid): add Stack component and composite layout cell renderer tests
- feat(grid): add Stack cell renderer and use WASM composite layout in Flex/Box
- feat(grid): pass computeChildLayout from engine to cell renderer context
- feat(grid): add Stack instruction type and Stack canvas component
- feat(wasm): add compute_composite_layout for in-cell Flex/Box/Stack
- style(renderer): apply oxfmt to cell-renderers (fix CI lint)
- docs: update canvas-component-list for new renderer paths
- test(renderer): add registry to makeContext in cell-renderer tests
- fix(renderer): pass registry in draw context for box/flex child rendering
- refactor(renderer): slim cell-renderer.ts to registry and wire built-ins from cell-renderers/
- feat(renderer): add box and flex cell renderers in cell-renderers/
- feat(renderer): add text, badge, stub cell renderers in cell-renderers/
- feat(renderer): add cell-renderers/shared with layout helpers and measure utils
- feat(renderer): add cell-renderer-types for shared context and registry interface
- refactor(demo): LayerDemo use contentLeft/contentWidth and readCell helpers
- refactor(grid): use content bounds for grid line horizontal extent
- refactor(grid): use content bounds for header and data backgrounds in canvas renderer
- feat(grid): add contentLeft and contentWidth to LayerContext
- refactor(grid): derive header/content right edge from cell bounds in canvas renderer
- feat(demo): CanvasBox and CanvasComponents for real Box component
- docs: move Box to supported in canvas-component-list and canvas-components
- test(grid): add Box component and Box cell renderer tests
- feat(grid): add Box cell renderer with box model (padding, border, background)
- feat(grid): add Box instruction type and Box canvas component
- docs: add variable row height / Flex→Rust plan to roadmap
- chore(demo): add routes and sidebar for canvas demo pages
- refactor(demo): CanvasComponents as hub with links to demos
- feat(demo): add Canvas Box stub demo page
- feat(demo): add Canvas ProgressBar stub demo page
- feat(demo): add Canvas Flex demo page
- feat(demo): add Canvas Badge demo page
- feat(demo): add Canvas Text demo page
- test(grid): tighten canvas component tests with types and cases
- fix(grid): flex cell renderer stretch and align per child
- docs: expand canvas-components (Text/Badge, stubs)
- docs: add canvas-component-list and link in AGENTS
- feat: add canvas Flex/Text/Badge components and demo page
- refactor(wasm): allow clippy on update_viewport_columnar, use map_or
- style(core): line-wrap long expressions in row-pinned layout
- docs: mark Row Pinning complete in roadmap
- refactor(wasm): use RowPinnedLayoutParams in row-pinned bindings
- refactor(core): row-pinned layout via RowPinnedLayoutParams
- demo: add Column DnD and Row Pinning demo page
- chore: temporarily disable e2e workflow
- docs: update roadmap for row pinning and column DnD
- refactor(grid): use-render-loop improvements
- refactor(grid): render region and layer updates
- feat(grid): column drag-and-drop reorder
- feat(grid): add row pinning and column DnD types and props
- feat(wasm): expose row-pinned layout and rebuildView
- feat(core): add row-pinned layout and virtual scroll range
- chore(demo): update WASM binary
- example(demo): add ClipboardDemo page and sidebar entry
- docs: update roadmap for clipboard, pinning, Virtual Canvas Region
- test(grid): extend grid-instance and use-grid-table tests for viewIndicesRef
- feat(grid): wire Cmd+V paste in use-selection to onPaste callback
- feat(grid): add clipboard utilities (copy/paste, buildCSV/buildHTML, parseClipboardText)
- refactor(grid): viewIndices → viewIndicesRef for lazy row model
- demo: add Column Pinning page and sidebar link
- feat(grid): wire columnPinning and re-ingest on column order change
- feat(grid): region-based draw pipeline in use-render-loop
- refactor(grid): extend canvas fills and grid lines to content width for pinned regions
- feat(grid): region-aware coordinate conversion in event-manager
- feat(grid): add region system for frozen column rendering
- refactor(grid): key StringTable by column ID for order-independent lookups
- feat(grid): add column pinning state and computePinningInfo in resolve-columns
ohah/ssh-agent-web
- chore: add .env.example and Document/user, documents/users placeholders
- chore: gitignore .react-router and tsbuildinfo
- feat(web): React app with layout, terminal/agok routes, xterm WebSocket client, responsive
- feat(server): Bun WebSocket terminal server (PTY, /terminal, /terminal/agok, SSH_AGENT_USER_CWD)
- docs: add README (usage, env, SSH port forwarding)
- chore: init monorepo (gitignore, mise, workspaces)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.