Skip to content

feat(frontend): 다이어그램 테이블 자동 정렬(정렬 버튼) - #36

Merged
seonghobae merged 2 commits into
mainfrom
feat/25-diagram-table-layout
Feb 2, 2026
Merged

feat(frontend): 다이어그램 테이블 자동 정렬(정렬 버튼)#36
seonghobae merged 2 commits into
mainfrom
feat/25-diagram-table-layout

Conversation

@seonghobae

Copy link
Copy Markdown
Collaborator

Summary

다이어그램(React Flow)에서 테이블 노드들을 자동 정렬(정리) 할 수 있는 버튼을 추가했습니다.

Closes #25

Changes

  • 캔버스 우측 상단 툴바에 정렬 버튼 추가
  • 정렬 실행 시 테이블 노드를 제목 기준으로 정렬 후 그리드 배치
  • 1-step 되돌리기(Undo) 지원
  • 접근성: aria-label + aria-live 상태 메시지(정렬 완료/실패)

Testing

  • npm --prefix frontend run typecheck
  • npm --prefix frontend run build

Assumptions

  • 이슈 본문이 비어 있어, "테이블 정렬(다이어그램)"을 **노드 자동 배치(오토 레이아웃)**로 해석했습니다.
    • 필요 시(의도=컬럼 정렬 등) follow-up 이슈로 범위를 조정하겠습니다.

Walkthrough

  • 배치: [정렬]/[되돌리기]는 캔버스 우측 상단 툴바에 배치(사이드바 영향 최소)
  • 상태 처리: 노드가 없을 때 disabled + 툴팁("정렬할 항목이 없습니다"), 실행 중 중복 클릭 방지(정렬 중…)
  • 접근성: 키보드 실행(버튼), aria-label="ERD 자동 정렬", aria-live로 결과 메시지 노출
  • 사용자 보호: 정렬 직후 1-step 되돌리기 제공

Add a toolbar action to auto-arrange table nodes in a deterministic grid, with a one-step undo and accessible status messaging.

Closes #25
@seonghobae

Copy link
Copy Markdown
Collaborator Author

@coderabbitai 리뷰 부탁드립니다. (이슈 #25: 다이어그램 테이블 자동 정렬/되돌리기)

@coderabbitai

coderabbitai Bot commented Feb 2, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

스냅샷을 기반으로 노드/엣지 상태를 관리하도록 ReactFlow 훅이 도입되었고, 그리드 기반 자동 레이아웃(자동 배치), 배치 취소(undo) 및 위치 스냅샷/복원 로직이 추가되었습니다. UI에 툴바(자동 레이아웃, 되돌리기)와 접근성 메시지가 포함되었습니다.

Changes

Cohort / File(s) Summary
App - 상태 관리 및 레이아웃 UI
frontend/src/App.tsx
useNodesState/useEdgesState 도입, ReactFlowInstance ref 사용, 자동 레이아웃 워크플로우(isLayouting, layoutMessage), 노드 위치 스냅샷/복원(undoPositions), computeSortedGridLayout 적용 및 view fitting, 툴바(자동 레이아웃/Undo)와 ARIA 메시지 추가.
ERD 변환 로직 및 타입
frontend/src/erd/convert.ts
TableNodeData 타입 추가(컬럼에 is_pk 포함), snapshot→그래프 변환이 Node<TableNodeData>[] 반환으로 변경, GRID 상수 사용하여 노드 기본 위치 계산 및 FK 레이블 개선.
레이아웃 상수
frontend/src/erd/layoutConstants.ts
그리드 구성 상수 추가: GRID_COLUMNS, GRID_X_GAP, GRID_Y_GAP.
스타일
frontend/src/styles.css
.canvas, .canvasToolbar, .srOnly 클래스 추가 — 캔버스 컨테이너와 툴바 스타일, 스크린리더 전용 유틸리티.

Sequence Diagram(s)

sequenceDiagram
    participant User as "User"
    participant Toolbar as "Canvas Toolbar"
    participant Layout as "Layout Engine\n(computeSortedGridLayout)"
    participant ReactFlow as "ReactFlowInstance"

    User->>Toolbar: 클릭 (Auto Layout)
    Toolbar->>Layout: 요청 (snapshotNodePositions -> compute layout)
    Layout-->>Toolbar: 새 positions
    Toolbar->>ReactFlow: applyPositions to nodes
    ReactFlow->>ReactFlow: set nodes/edges, fitView()
    ReactFlow-->>Toolbar: 완료 신호
    Toolbar-->>User: 상태 메시지 업데이트
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

✨ 그리드 위에 노드들이 정렬되네,
클릭 한 번에 위치를 기억하고,
실수는 되돌리고, 배치는 완성되네.
툴바는 속삭여요—"자동으로 정렬할게요" 🎨


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore
❌ Failed checks (1 error)
Check name Status Explanation Resolution
Docstring Coverage ❌ Error Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경사항의 핵심인 다이어그램 테이블 자동 정렬(오토 레이아웃) 기능을 명확하게 설명하고 있습니다.
Description check ✅ Passed PR 설명이 요약, 변경사항, 테스트 방법, 가정사항을 포함하며 변경사항과 관련 있는 상세한 내용을 제공하고 있습니다.
Linked Issues check ✅ Passed PR은 이슈 #25를 명확히 해결하며, 노드 자동 배치 기능, Undo 지원, 접근성 개선 등 요청된 기능을 모두 구현하고 있습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 오토 레이아웃 기능 구현과 관련되어 있으며, 새로운 레이아웃 상수 정의, UI 컴포넌트 개선, 타입 정의 추가 등이 일관되게 목표를 지원합니다.
Sast ✅ Passed SAST 분석 결과 보안 취약점이 발견되지 않았습니다. 추가된 함수들은 순수 함수로 구성되며, React JSX를 통해 안전하게 렌더링됩니다.
Sbom ✅ Passed SBOM 분석 결과 새로운 외부 종속성 추가나 버전 변경이 없으며 알려진 보안 취약점이 없습니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/25-diagram-table-layout

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai

coderabbitai Bot commented Feb 2, 2026

Copy link
Copy Markdown

@seonghobae 네, PR #36에 대한 리뷰를 시작하겠습니다.

이슈 #25의 다이어그램 테이블 자동 정렬 및 되돌리기 기능 구현에 대해 꼼꼼히 검토하고, 코드 품질, 접근성, 사용자 경험 측면에서 피드백을 드리겠습니다.


🧠 Learnings used
Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/llm-gateway-litellm-cost-dashboard PR: 0
File: :0-0
Timestamp: 2026-01-16T17:35:00.313Z
Learning: Repo llm-gateway-litellm-cost-dashboard: PR에서 review request 가능한 로봇은 Copilot이며, gh CLI로 `--add-reviewer Copilot`으로 요청한다 (타임라인에는 copilot-pull-request-reviewer[bot]으로 표시됨). CodeRabbit(coderabbitai[bot])은 collaborator 미등록으로 gh CLI 요청 시 422 에러가 발생하므로, PR 코멘트에서 `coderabbitai review` 또는 `coderabbitai full review`로 트리거한다 (레이트리밋 유의).

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:29:54.337Z
Learning: Repo HYOSUNG-ITX-AI-Business-Department/smart-crawling-server: 이슈 본문이 불충분할 경우 PR `#413의` 관련 리뷰 코멘트를 참조해 본문을 재작성한다. 선호 포맷은 “문제정의, 병합 Flow/경로, 코드 수정 내용과 파일 변경 확인, 수정 효과 검증”이며, 영향 범위·호환성/리스크·백링크(해당 PR/리뷰 discussion) 섹션을 포함한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:39:49.665Z
Learning: Repo smart-crawling-server: seonghobae는 이슈 본문 보강 시 4단 구성(문제정의, 병합 Flow/경로, 코드/설정 수정 내용, 검증 기준)을 선호하며, 관련 PR/리뷰 코멘트 백링크 포함 및 능동적 라벨링(실제 레포 존재 라벨 사용)을 기대한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:31:26.353Z
Learning: Repo smart-crawling-server: seonghobae는 이슈 생성/정리 시 리뷰 코멘트(PR `#413` 백링크 포함)를 근거로 본문을 보강하고, 라벨은 사전 학습된 것 외에도 범주를 능동적으로 선정해 부여할 것을 선호한다(예: bug, backend, api, tech-debt, 우선순위 라벨).

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-23T14:56:03.236Z
Learning: Repo smart-crawling-server: 사용자 seonghobae는 이슈 ↔ PR 검증 시 "문제정의, 병합 Flow/경로, 코드 수정 내용과 파일 변경 확인, 수정 효과 검증" 4단 구성을 선호하며, 응답 스키마 일관성·추적성·마스킹 준수 여부를 핵심 확인 포인트로 요구한다.
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@seonghobae

Copy link
Copy Markdown
Collaborator Author

PR checks evidence

Required checks

gh pr checks --required --watch --fail-fast

Merge state

gh pr view --json mergeStateStatus,mergeable

Rulesets / Branch policy (when permitted)

gh api "repos/$OWNER/$REPO/rules/branches/$BASE_BRANCH" || gh api "repos/$OWNER/$REPO/branches/$BASE_BRANCH/protection"

Code scanning (when permitted)

gh api "/repos/$OWNER/$REPO/code-scanning/analyses?pr=$PR_NUMBER"
gh api "/repos/$OWNER/$REPO/code-scanning/alerts?pr=$PR_NUMBER&state=open"

analyses

alerts

Code quality / Check-runs (when permitted)

gh api "/repos/$OWNER/$REPO/commits/$HEAD_SHA/check-runs"

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Fix all issues with AI agents
In `@frontend/src/App.tsx`:
- Around line 85-103: The useEffect is currently keyed on
snapshot?.snapshot_json (object reference) which causes reruns when snapshot is
a new object even if content is identical; to fix, memoize the graph or
stringify the snapshot JSON so dependencies compare by value: either compute
const graph = useMemo(() => snapshotToGraph(snapshot?.snapshot_json),
[JSON.stringify(snapshot?.snapshot_json)]) and then have useEffect depend on
graph (and call setEdges/setNodes using that memoized graph), or change the
dependency to [JSON.stringify(snapshot?.snapshot_json), setEdges, setNodes] so
useEffect only runs when the snapshot content actually changes.
- Around line 307-309: Add an accessible label to the undo button by adding an
aria-label attribute (e.g., aria-label="정렬 되돌리기" or aria-label="Undo layout") on
the button that uses onUndoLayout and whose disabled state depends on
undoPositions and isLayouting; keep the existing title and disabled logic intact
so screen readers get a clear, consistent descriptor for the button.
- Around line 155-156: The catch block swallowing errors after the failed layout
operation loses diagnostic info; update the try/catch where
setLayoutMessage('정렬에 실패했습니다. 다시 시도해 주세요.') is called to accept the error
parameter (e.g., catch (err) or catch (error)) and log it (console.error or your
app logger) in development, while still calling setLayoutMessage for the user;
reference the catch block and the setLayoutMessage call to locate and update the
handler.
- Around line 118-133: Extract the repeated layout constants (columns, xGap,
yGap) into a shared constants module and import them into
computeSortedGridLayout so the values are not duplicated (refer to the constants
instead of the hard-coded literals in computeSortedGridLayout). Replace the
unsafe cast (a.data as any)?.title / (b.data as any)?.title by typing the node
data (e.g., declare an interface like FlowNodeData { title?: string } and use
Node<FlowNodeData> or narrow via a type guard) and access title with optional
chaining and a typed fallback (e.g., title ?? id) so sorting is type-safe;
update computeSortedGridLayout signature/usage accordingly to use the typed Node
data.
- Around line 298-309: Add explicit type="button" attributes to the two buttons
in App.tsx (the button that calls onAutoLayout and the button that calls
onUndoLayout) to avoid default submit behavior inside forms; update the button
elements that reference onAutoLayout, nodes, isLayouting and the button that
references onUndoLayout and undoPositions to include type="button".

Comment thread frontend/src/App.tsx Outdated
Comment thread frontend/src/App.tsx Outdated
Comment thread frontend/src/App.tsx Outdated
Comment thread frontend/src/App.tsx
Comment thread frontend/src/App.tsx Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@frontend/src/App.tsx`:
- Around line 295-329: The toolbar buttons in the ERD canvas (the JSX buttons
that call onAutoLayout and onUndoLayout inside the element with className
"canvasToolbar") lack an explicit type attribute; update those button elements
to include type="button" to prevent them acting as submit buttons and to satisfy
a11y/semantic requirements.
- Around line 118-133: The sort in computeSortedGridLayout uses localeCompare
without a locale, which can produce non-deterministic ordering across
environments; update the comparator used when creating sorted (the localeCompare
call on aTitle and bTitle) to pass a fixed locale like 'en' (and optional
options if needed) so the title comparison is deterministic for layout purposes;
modify the line inside sort in computeSortedGridLayout to call
aTitle.localeCompare(bTitle, 'en') (or similar explicit locale) to fix the
issue.

Comment thread frontend/src/App.tsx Outdated
Comment thread frontend/src/App.tsx
@seonghobae

Copy link
Copy Markdown
Collaborator Author

@coderabbitai 리뷰 코멘트 반영했습니다. 재검토 부탁드립니다.

  • toolbar 버튼에 type="button" 명시
  • 정렬 comparator locale 고정(localeCompare(..., 'en'))
  • undo 버튼 aria-label 추가
  • layout 상수 모듈로 추출 + TableNodeData 타입 적용
  • auto-layout 실패 시(dev) 진단 로그 추가

@seonghobae

Copy link
Copy Markdown
Collaborator Author

PR checks evidence

Required checks

gh pr checks --required --watch --fail-fast
no required checks reported on the 'feat/25-diagram-table-layout' branch

Merge state

gh pr view --json mergeStateStatus,mergeable,reviewDecision
{"mergeStateStatus":"BLOCKED","mergeable":"MERGEABLE","reviewDecision":"CHANGES_REQUESTED"}

Rulesets / Branch policy

gh api "repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/rules/branches/main" || gh api "repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/branches/main/protection"
[{"type":"deletion","ruleset_source_type":"Organization","ruleset_source":"HYOSUNG-ITX-AI-Business-Department","ruleset_id":11494851},{"type":"non_fast_forward","ruleset_source_type":"Organization","ruleset_source":"HYOSUNG-ITX-AI-Business-Department","ruleset_id":11494851},{"type":"pull_request","parameters":{"required_approving_review_count":1,"dismiss_stale_reviews_on_push":false,"required_reviewers":[],"require_code_owner_review":false,"require_last_push_approval":false,"required_review_thread_resolution":true,"allowed_merge_methods":["merge","squash","rebase"]},"ruleset_source_type":"Organization","ruleset_source":"HYOSUNG-ITX-AI-Business-Department","ruleset_id":11494851},{"type":"file_path_restriction","parameters":{"restricted_file_paths":[".github/agents/*.md","agents/*.md"]},"ruleset_source_type":"Enterprise","ruleset_source":"hyosung-itx","ruleset_id":10761435}]

Code scanning (analyses)

gh api "/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses?pr=36"
[{"ref":"refs/pull/36/head","commit_sha":"c4c8b10155c78f373e500d0f693e30bb9d428f03","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:javascript-typescript\",\"language\":\"javascript-typescript\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:javascript-typescript","error":"","created_at":"2026-02-02T13:51:25Z","results_count":0,"rules_count":102,"id":943291539,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943291539","sarif_id":"43febdce-003e-11f1-878f-411743cf785c","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":true,"warning":""},{"ref":"refs/pull/36/head","commit_sha":"c4c8b10155c78f373e500d0f693e30bb9d428f03","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:python\",\"language\":\"python\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:python","error":"","created_at":"2026-02-02T13:51:13Z","results_count":0,"rules_count":50,"id":943290972,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943290972","sarif_id":"3cb106f8-003e-11f1-817a-669c75cbb4bf","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":true,"warning":""},{"ref":"refs/pull/36/head","commit_sha":"c4c8b10155c78f373e500d0f693e30bb9d428f03","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:actions\",\"language\":\"actions\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:actions","error":"","created_at":"2026-02-02T13:50:57Z","results_count":0,"rules_count":23,"id":943290290,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943290290","sarif_id":"32ce4ad8-003e-11f1-9cf8-fa8961a71095","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":true,"warning":""}]

Code scanning (open alerts)

gh api "/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/alerts?pr=36&state=open"
[]

Code quality / Check-runs

gh api "/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/commits/5b44f80c1fc5a8874a03c208aa7fddb1642821b4/check-runs"
{"total_count":7,"check_runs":[{"id":62221102431,"name":"CodeQL","node_id":"CR_kwDORF0XDs8AAAAOfKqtXw","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221102431","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/runs/62221102431","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/runs/62221102431","status":"queued","conclusion":null,"started_at":"2026-02-02T14:27:10Z","completed_at":null,"output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221102431/annotations"},"check_suite":{"id":56145780595},"app":{"id":57789,"client_id":"Iv1.4643383dd86f00de","slug":"github-advanced-security","node_id":"MDM6QXBwNTc3ODk=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Advanced Security","description":"","external_url":"https://github.com/features/security","html_url":"https://github.com/apps/github-advanced-security","created_at":"2020-03-17T21:25:09Z","updated_at":"2024-07-11T07:30:47Z","permissions":{"actions":"read","checks":"write","contents":"read","metadata":"read"},"events":[]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221011288,"name":"dependency-review","node_id":"CR_kwDORF0XDs8AAAAOfKlJWA","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"0a59732c-d0ae-5a46-bb34-68ea4bc69abd","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011288","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924608/job/62221011288","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924608/job/62221011288","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:29Z","completed_at":"2026-02-02T14:26:40Z","output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011288/annotations"},"check_suite":{"id":56145697249},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221011278,"name":"backend","node_id":"CR_kwDORF0XDs8AAAAOfKlJTg","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"1094d377-6999-5f62-9b2a-ede7267c8881","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011278","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011278","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011278","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:29Z","completed_at":"2026-02-02T14:27:11Z","output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011278/annotations"},"check_suite":{"id":56145697263},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221011251,"name":"frontend","node_id":"CR_kwDORF0XDs8AAAAOfKlJMw","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"49cc7616-243e-53a9-8ab1-37540349101d","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011251","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011251","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011251","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:30Z","completed_at":"2026-02-02T14:27:02Z","output":{"title":null,"summary":null,"text":null,"annotations_count":2,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011251/annotations"},"check_suite":{"id":56145697263},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221009887,"name":"Analyze (javascript-typescript)","node_id":"CR_kwDORF0XDs8AAAAOfKlD3w","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"2242883e-0daa-56c8-b51b-7dcd136c0f40","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009887","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009887","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009887","status":"in_progress","conclusion":null,"started_at":"2026-02-02T14:26:29Z","completed_at":null,"output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009887/annotations"},"check_suite":{"id":56145693738},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[]},{"id":62221009834,"name":"Analyze (actions)","node_id":"CR_kwDORF0XDs8AAAAOfKlDqg","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"3985025b-38c2-5c89-90d4-138ddc5a4dba","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009834","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009834","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009834","status":"in_progress","conclusion":null,"started_at":"2026-02-02T14:26:29Z","completed_at":null,"output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009834/annotations"},"check_suite":{"id":56145693738},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[]},{"id":62221009820,"name":"Analyze (python)","node_id":"CR_kwDORF0XDs8AAAAOfKlDnA","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"f8de918e-8ed5-5207-b280-150e210c4f2f","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009820","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009820","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009820","status":"in_progress","conclusion":null,"started_at":"2026-02-02T14:26:29Z","completed_at":null,"output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009820/annotations"},"check_suite":{"id":56145693738},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[]}]}

@coderabbitai

coderabbitai Bot commented Feb 2, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

# Get the diff between the two commits to see what changed
echo "=== Diff between commits ==="
git diff c4c8b10155c78f373e500d0f693e30bb9d428f03..5b44f80c1fc5a8874a03c208aa7fddb1642821b4

echo -e "\n=== List of files changed ==="
git diff --name-only c4c8b10155c78f373e500d0f693e30bb9d428f03..5b44f80c1fc5a8874a03c208aa7fddb1642821b4

echo -e "\n=== Check for layout constants module ==="
fd -t f "layout" frontend/src/

echo -e "\n=== Current App.tsx content (relevant sections) ==="
cat frontend/src/App.tsx

echo -e "\n=== Check if layoutConstants or similar module exists ==="
fd -e ts -e tsx . frontend/src/ | head -20

Length of output: 19729


@seonghobae 재검토 완료했습니다! 모든 리뷰 코멘트가 완벽하게 반영되었습니다. 👍

✅ 반영 사항 확인

  1. type="button" 명시

    • 정렬 버튼 (Line 309) 및 되돌리기 버튼 (Line 318)에 모두 추가
  2. locale 고정

    • localeCompare(bTitle, 'en')로 명시적 locale 지정 (Line 129)
  3. undo 버튼 aria-label

    • aria-label="정렬 되돌리기" 추가 (Line 323)
  4. layout 상수 모듈화 + 타입 안정성

    • frontend/src/erd/layoutConstants.ts 신규 생성
    • TableNodeData 타입 export 및 전체 타입 체계 강화
    • Node<TableNodeData>, ReactFlowInstance<Node<TableNodeData>, Edge> 제네릭 적용
  5. 개발 환경 진단 로그

    • import.meta.env.DEV 체크 후 console.error('Auto-layout failed', error) 출력

🎯 추가 개선 사항

요청사항 외에도 다음과 같은 품질 향상이 이루어졌습니다:

  • 성능 최적화: snapshotJsonKey 메모이제이션으로 그래프 재계산 최소화
  • 타입 안정성: 모든 함수 시그니처에 Array<Node<TableNodeData>> 타입 명시
  • 에러 핸들링: catch 블록에서 error 변수 캡처하여 로깅
  • 접근성: ARIA live region이 조건 없이 렌더링되어 스크린리더 호환성 확보

모든 CI 체크도 통과했으며, 코드 품질이 기대 이상으로 향상되었습니다. 승인 가능한 상태입니다.


🧠 Learnings used
Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:29:54.337Z
Learning: Repo HYOSUNG-ITX-AI-Business-Department/smart-crawling-server: 이슈 본문이 불충분할 경우 PR `#413의` 관련 리뷰 코멘트를 참조해 본문을 재작성한다. 선호 포맷은 “문제정의, 병합 Flow/경로, 코드 수정 내용과 파일 변경 확인, 수정 효과 검증”이며, 영향 범위·호환성/리스크·백링크(해당 PR/리뷰 discussion) 섹션을 포함한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/llm-gateway-litellm-cost-dashboard PR: 0
File: :0-0
Timestamp: 2026-01-16T17:35:00.313Z
Learning: Repo llm-gateway-litellm-cost-dashboard: PR에서 review request 가능한 로봇은 Copilot이며, gh CLI로 `--add-reviewer Copilot`으로 요청한다 (타임라인에는 copilot-pull-request-reviewer[bot]으로 표시됨). CodeRabbit(coderabbitai[bot])은 collaborator 미등록으로 gh CLI 요청 시 422 에러가 발생하므로, PR 코멘트에서 `coderabbitai review` 또는 `coderabbitai full review`로 트리거한다 (레이트리밋 유의).

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/llm-gateway-litellm-cost-dashboard PR: 0
File: :0-0
Timestamp: 2026-01-17T07:06:35.537Z
Learning: Repo llm-gateway-litellm-cost-dashboard: PR `#8에서` 사용자 계정을 통해 동작하는 자동화 에이전트가 30회 이상 반복적으로 `coderabbitai review`를 요청하여 rate limit 정책 위반 및 불필요한 재검토가 발생했다. 향후 자동화 에이전트는 rate limit 정책(초기 1회 + 새 커밋/타임아웃 후 최대 1회)을 준수해야 하며, 검증 완료 후에는 승인 대기가 필요함을 명확히 안내해야 한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/groupware-chat-backend PR: 69
File: .github/workflows/deploy-hopaissvr.yml:125-131
Timestamp: 2026-01-15T14:16:10.195Z
Learning: Repo groupware-chat-backend: 사용자가 LLM Agent로 자동화된 gh CLI 워크플로우를 운영 중일 때, 리뷰는 선택적 개선안이 아닌 지시적(directive) 형태로 제공해야 한다. 누락된 구현(예: 조직 시크릿이 추가되었으나 워크플로우 env 블록에 누락된 경우)은 즉시 필수 수정 사항으로 지적하고 정확한 줄 번호와 코드 블록을 제공한다.

Learnt from: CR
Repo: HYOSUNG-ITX-AI-Business-Department/agent-prompt-registry PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2026-01-05T08:47:13.916Z
Learning: Applies to .github/workflows/**/*.{yml,yaml} : For GitHub Actions-related changes, leave evidence such as CI results (Checks) or execution links

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/groupware-rag-on-premise-podman PR: 0
File: :0-0
Timestamp: 2026-01-05T22:41:00.883Z
Learning: Repo groupware-rag-on-premise-podman: CodeRabbit required status check가 rate limit 또는 timeout으로 FAILURE/PENDING에 고착되어 PR 병합이 차단될 경우, (1) `gh pr merge --admin` 시도, (2) GitHub UI에서 해당 required check 임시 제거 후 병합 및 재활성화, (3) `gh api /repos/.../statuses/<sha>` POST로 manual override(repo:status 권한 필요), (4) merge queue가 설정된 경우 UI "Add to merge queue" 버튼 사용. 모든 다른 CI 체크가 통과했고 코드 품질 검증이 완료된 경우 override는 안전하다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/litellm-billing-admin PR: 0
File: :0-0
Timestamp: 2026-02-02T04:23:42.377Z
Learning: Repo HYOSUNG-ITX-AI-Business-Department/litellm-billing-admin: PR `#20` 미반영 사항 이슈화 시, 코드 분석을 통해 (1) 보안 취약점(이메일 형식 미검증, DoS 취약), (2) 안정성 문제(에러 처리·파일 정리 부재), (3) 테스트 커버리지 공백(엣지케이스 미테스트)을 발굴하고, 각각 4단 구성(문제정의, Flow, 수정 내용, 수락 기준) + 백링크 + 호환성/리스크 섹션으로 이슈를 작성했다. assignee는 기본 미지정.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/groupware-chat-backend PR: 0
File: :0-0
Timestamp: 2026-01-14T20:15:33.308Z
Learning: Repo groupware-chat-backend: GitHub Actions 워크플로우의 Health check 실패 처리 시, `docker logs`로 전체 로그를 덤프하면 환경변수 및 secrets가 Actions 로그에 노출될 수 있다. 대신 `docker ps -a`로 컨테이너 상태(이름, 상태, 이미지, 포트)만 출력하여 민감 정보 노출을 최소화한다. 성공 시 health endpoint 응답 출력은 정상 동작 확인을 위해 유지 가능하다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/groupware-chat-backend PR: 0
File: :0-0
Timestamp: 2026-01-16T01:39:53.520Z
Learning: Repo groupware-chat-backend: GitHub Actions 워크플로우에서 수집 실패 시에도 부분 결과(error.txt 등)를 아티팩트로 업로드하려면, 수집 단계를 `exit 0`로 성공 처리하고 `collect_failed=true` 플래그를 출력한 뒤, 전용 "Fail when collection failed" 단계에서 플래그를 체크하여 최종 실패 처리한다. 이를 통해 디버깅 가능성을 확보하면서 워크플로우는 최종적으로 실패 상태를 유지한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/groupware-rag-on-premise-podman PR: 0
File: :0-0
Timestamp: 2026-01-05T11:20:27.218Z
Learning: Repo groupware-deployment-template: GitHub Actions composite action에서 $GITHUB_ENV 기록 시 newline/CR 인젝션 방어는 (1) Bash 네이티브 문자열 비교로 명시적 차단 (`[[ "$VAR" == *$'\n'* || "$VAR" == *$'\r'* ]]`), (2) multiline-safe EOF delimiter 구문 사용, (3) 사전 입력 검증(allowlist, 경로 정규화, 패턴 매칭) 조합으로 다층 방어한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 413
File: smart-crawling-console/types/template.d.ts:110-110
Timestamp: 2025-12-25T07:32:35.856Z
Learning: Repo smart-crawling-server: 프론트 타입 TemplateRecord의 인덱스 시그니처를 object까지 확장하면 테이블/정렬/CSV/직렬화에서 기능 오류가 발생하므로 “기능 버그”로 분류하고 ko-KR 신규 이슈를 생성(또는 유사 이슈에 연동)한다. 수락 기준: object 제거/명시 필드화, 타입체크와 리스트 UI 수동 검증 포함.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:48:57.319Z
Learning: Repo smart-crawling-server: seonghobae 요청에 따라 날짜/시간 표준화 이슈(`#610`)는 ‘능동적 라벨링( bug, data-integrity, backend, database, date-time, timezone, utc, standardization, refactor, tech-debt, documentation, P1 )’과 4단 구성 본문(문제정의·영향 범위/경로·수정 제안·수락 기준), PR `#413` 리뷰 코멘트 백링크 포함이 팀 선호 포맷이다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-23T14:56:03.236Z
Learning: Repo smart-crawling-server: 사용자 seonghobae는 이슈 ↔ PR 검증 시 "문제정의, 병합 Flow/경로, 코드 수정 내용과 파일 변경 확인, 수정 효과 검증" 4단 구성을 선호하며, 응답 스키마 일관성·추적성·마스킹 준수 여부를 핵심 확인 포인트로 요구한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:31:26.353Z
Learning: Repo smart-crawling-server: seonghobae는 이슈 생성/정리 시 리뷰 코멘트(PR `#413` 백링크 포함)를 근거로 본문을 보강하고, 라벨은 사전 학습된 것 외에도 범주를 능동적으로 선정해 부여할 것을 선호한다(예: bug, backend, api, tech-debt, 우선순위 라벨).

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/llm-gateway-litellm-cost-dashboard PR: 0
File: :0-0
Timestamp: 2026-01-17T04:26:18.959Z
Learning: Repo llm-gateway-litellm-cost-dashboard: 문서 이관 PR(`#8`)에서 모든 blocking 항목(markdown lint, 일관성, language tags, SSE interval, metadata_only 문서화, 버튼 순서, Top-N 명확화, 내부 정보 익명화)이 해결되었으며, 최종 병합은 Copilot (copilot-pull-request-reviewer[bot]) 승인 대기 중이다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:48:57.319Z
Learning: Repo smart-crawling-server: 날짜/시간 표준화 성격 이슈(`#610` 등)에서는 bug, data-integrity, backend, database, date-time, timezone, utc, standardization, refactor, tech-debt, documentation, P1 라벨을 선호하고, 본문은 4단 구성(문제정의·영향 범위/경로·수정 제안·수락 기준)과 PR `#413` 리뷰 코멘트 백링크를 포함해 정리한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:32:18.110Z
Learning: Repo smart-crawling-server: 목록 응답 정규화 이슈는 console/frontend/api 범주에 속하며, 레이블로 standardization/refactor를 선호한다. 본문은 PR/리뷰 코멘트 백링크와 4단 구성(문제정의·근거/레퍼런스·수락 기준·영향 범위)을 포함한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/smart-crawling-server PR: 0
File: :0-0
Timestamp: 2025-12-26T13:39:49.665Z
Learning: Repo smart-crawling-server: seonghobae는 이슈 본문 보강 시 4단 구성(문제정의, 병합 Flow/경로, 코드/설정 수정 내용, 검증 기준)을 선호하며, 관련 PR/리뷰 코멘트 백링크 포함 및 능동적 라벨링(실제 레포 존재 라벨 사용)을 기대한다.

Learnt from: seonghobae
Repo: HYOSUNG-ITX-AI-Business-Department/litellm-billing-admin PR: 0
File: :0-0
Timestamp: 2026-02-01T13:07:35.563Z
Learning: Repo HYOSUNG-ITX-AI-Business-Department/litellm-billing-admin: PR 병합 후 미비 사항 이슈화 요청 시, (1) README 문서 누락, (2) 로깅 부재, (3) CI 통합 누락 등 실질적 개선사항을 4단 구성(문제정의, 병합 Flow/경로, 수정 내용, 수락 기준) + PR 백링크로 작성하며, assignee는 기본 미지정한다.
✅ Actions performed

Comments resolved and changes approved.

@seonghobae

Copy link
Copy Markdown
Collaborator Author

PR checks evidence (pre-merge)

Required checks

gh pr checks --required --watch --fail-fast
no required checks reported on the 'feat/25-diagram-table-layout' branch

Merge state

gh pr view --json mergeStateStatus,mergeable,reviewDecision
{"mergeStateStatus":"CLEAN","mergeable":"MERGEABLE","reviewDecision":"APPROVED"}

Rulesets / Branch policy

gh api "repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/rules/branches/main" || gh api "repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/branches/main/protection"
[{"type":"deletion","ruleset_source_type":"Organization","ruleset_source":"HYOSUNG-ITX-AI-Business-Department","ruleset_id":11494851},{"type":"non_fast_forward","ruleset_source_type":"Organization","ruleset_source":"HYOSUNG-ITX-AI-Business-Department","ruleset_id":11494851},{"type":"pull_request","parameters":{"required_approving_review_count":1,"dismiss_stale_reviews_on_push":false,"required_reviewers":[],"require_code_owner_review":false,"require_last_push_approval":false,"required_review_thread_resolution":true,"allowed_merge_methods":["merge","squash","rebase"]},"ruleset_source_type":"Organization","ruleset_source":"HYOSUNG-ITX-AI-Business-Department","ruleset_id":11494851},{"type":"file_path_restriction","parameters":{"restricted_file_paths":[".github/agents/*.md","agents/*.md"]},"ruleset_source_type":"Enterprise","ruleset_source":"hyosung-itx","ruleset_id":10761435}]

Code scanning (analyses)

gh api "/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses?pr=36"
[{"ref":"refs/pull/36/head","commit_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:javascript-typescript\",\"language\":\"javascript-typescript\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:javascript-typescript","error":"","created_at":"2026-02-02T14:27:41Z","results_count":0,"rules_count":102,"id":943398957,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943398957","sarif_id":"5499f09a-0043-11f1-9152-52876152784b","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":true,"warning":""},{"ref":"refs/pull/36/head","commit_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:python\",\"language\":\"python\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:python","error":"","created_at":"2026-02-02T14:27:25Z","results_count":0,"rules_count":50,"id":943398072,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943398072","sarif_id":"4b54807c-0043-11f1-9532-d3e59391d754","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":true,"warning":""},{"ref":"refs/pull/36/head","commit_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:actions\",\"language\":\"actions\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:actions","error":"","created_at":"2026-02-02T14:27:13Z","results_count":0,"rules_count":23,"id":943397342,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943397342","sarif_id":"4265ad06-0043-11f1-8f92-fb357f7c92d0","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":true,"warning":""},{"ref":"refs/pull/36/head","commit_sha":"c4c8b10155c78f373e500d0f693e30bb9d428f03","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:javascript-typescript\",\"language\":\"javascript-typescript\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:javascript-typescript","error":"","created_at":"2026-02-02T13:51:25Z","results_count":0,"rules_count":102,"id":943291539,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943291539","sarif_id":"43febdce-003e-11f1-878f-411743cf785c","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":false,"warning":""},{"ref":"refs/pull/36/head","commit_sha":"c4c8b10155c78f373e500d0f693e30bb9d428f03","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:python\",\"language\":\"python\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:python","error":"","created_at":"2026-02-02T13:51:13Z","results_count":0,"rules_count":50,"id":943290972,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943290972","sarif_id":"3cb106f8-003e-11f1-817a-669c75cbb4bf","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":false,"warning":""},{"ref":"refs/pull/36/head","commit_sha":"c4c8b10155c78f373e500d0f693e30bb9d428f03","analysis_key":"dynamic/github-code-scanning/codeql:analyze","environment":"{\"build-mode\":\"none\",\"category\":\"/language:actions\",\"language\":\"actions\",\"runner\":\"[\\\"ubuntu-latest\\\"]\"}","category":"/language:actions","error":"","created_at":"2026-02-02T13:50:57Z","results_count":0,"rules_count":23,"id":943290290,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/analyses/943290290","sarif_id":"32ce4ad8-003e-11f1-9cf8-fa8961a71095","tool":{"name":"CodeQL","guid":null,"version":"2.24.0"},"deletable":false,"warning":""}]

Code scanning (open alerts)

gh api "/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/code-scanning/alerts?pr=36&state=open"
[]

Code quality / Check-runs

gh api "/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/commits/5b44f80c1fc5a8874a03c208aa7fddb1642821b4/check-runs"
{"total_count":7,"check_runs":[{"id":62221102431,"name":"CodeQL","node_id":"CR_kwDORF0XDs8AAAAOfKqtXw","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221102431","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/runs/62221102431","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/runs/62221102431","status":"completed","conclusion":"success","started_at":"2026-02-02T14:27:10Z","completed_at":"2026-02-02T14:27:17Z","output":{"title":"No new alerts in code changed by this pull request","summary":"[View all branch alerts](/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/security/code-scanning?query=pr%3A36+tool%3ACodeQL+is%3Aopen).","text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221102431/annotations"},"check_suite":{"id":56145780595},"app":{"id":57789,"client_id":"Iv1.4643383dd86f00de","slug":"github-advanced-security","node_id":"MDM6QXBwNTc3ODk=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Advanced Security","description":"","external_url":"https://github.com/features/security","html_url":"https://github.com/apps/github-advanced-security","created_at":"2020-03-17T21:25:09Z","updated_at":"2024-07-11T07:30:47Z","permissions":{"actions":"read","checks":"write","contents":"read","metadata":"read"},"events":[]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221011288,"name":"dependency-review","node_id":"CR_kwDORF0XDs8AAAAOfKlJWA","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"0a59732c-d0ae-5a46-bb34-68ea4bc69abd","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011288","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924608/job/62221011288","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924608/job/62221011288","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:29Z","completed_at":"2026-02-02T14:26:40Z","output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011288/annotations"},"check_suite":{"id":56145697249},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221011278,"name":"backend","node_id":"CR_kwDORF0XDs8AAAAOfKlJTg","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"1094d377-6999-5f62-9b2a-ede7267c8881","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011278","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011278","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011278","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:29Z","completed_at":"2026-02-02T14:27:11Z","output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011278/annotations"},"check_suite":{"id":56145697263},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221011251,"name":"frontend","node_id":"CR_kwDORF0XDs8AAAAOfKlJMw","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"49cc7616-243e-53a9-8ab1-37540349101d","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011251","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011251","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593924618/job/62221011251","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:30Z","completed_at":"2026-02-02T14:27:02Z","output":{"title":null,"summary":null,"text":null,"annotations_count":2,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221011251/annotations"},"check_suite":{"id":56145697263},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[{"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/pulls/36","id":3236657352,"number":36,"head":{"ref":"feat/25-diagram-table-layout","sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}},"base":{"ref":"main","sha":"0ba723814985ea8daa9bbcec676f73958309e132","repo":{"id":1146951438,"url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud","name":"pg-erd-cloud"}}}]},{"id":62221009887,"name":"Analyze (javascript-typescript)","node_id":"CR_kwDORF0XDs8AAAAOfKlD3w","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"2242883e-0daa-56c8-b51b-7dcd136c0f40","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009887","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009887","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009887","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:29Z","completed_at":"2026-02-02T14:27:51Z","output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009887/annotations"},"check_suite":{"id":56145693738},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[]},{"id":62221009834,"name":"Analyze (actions)","node_id":"CR_kwDORF0XDs8AAAAOfKlDqg","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"3985025b-38c2-5c89-90d4-138ddc5a4dba","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009834","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009834","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009834","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:29Z","completed_at":"2026-02-02T14:27:22Z","output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009834/annotations"},"check_suite":{"id":56145693738},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[]},{"id":62221009820,"name":"Analyze (python)","node_id":"CR_kwDORF0XDs8AAAAOfKlDnA","head_sha":"5b44f80c1fc5a8874a03c208aa7fddb1642821b4","external_id":"f8de918e-8ed5-5207-b280-150e210c4f2f","url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009820","html_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009820","details_url":"https://github.com/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/actions/runs/21593923335/job/62221009820","status":"completed","conclusion":"success","started_at":"2026-02-02T14:26:29Z","completed_at":"2026-02-02T14:27:34Z","output":{"title":null,"summary":null,"text":null,"annotations_count":0,"annotations_url":"https://api.github.com/repos/HYOSUNG-ITX-AI-Business-Department/pg-erd-cloud/check-runs/62221009820/annotations"},"check_suite":{"id":56145693738},"app":{"id":15368,"client_id":"Iv1.05c79e9ad1f6bdfa","slug":"github-actions","node_id":"MDM6QXBwMTUzNjg=","owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","user_view_type":"public","site_admin":false},"name":"GitHub Actions","description":"Automate your workflow from idea to production","external_url":"https://help.github.com/en/actions","html_url":"https://github.com/apps/github-actions","created_at":"2018-07-30T09:30:17Z","updated_at":"2025-12-02T18:13:15Z","permissions":{"actions":"write","administration":"read","artifact_metadata":"write","attestations":"write","checks":"write","contents":"write","copilot_requests":"write","deployments":"write","discussions":"write","issues":"write","merge_queues":"write","metadata":"read","models":"read","packages":"write","pages":"write","pull_requests":"write","repository_hooks":"write","repository_projects":"write","security_events":"write","statuses":"write","vulnerability_alerts":"read"},"events":["branch_protection_rule","check_run","check_suite","create","delete","deployment","deployment_status","discussion","discussion_comment","fork","gollum","issues","issue_comment","label","merge_group","milestone","page_build","public","pull_request","pull_request_review","pull_request_review_comment","push","registry_package","release","repository","repository_dispatch","status","watch","workflow_dispatch","workflow_run"]},"pull_requests":[]}]}

@seonghobae
seonghobae merged commit 46d3d45 into main Feb 2, 2026
8 checks passed
@seonghobae
seonghobae deleted the feat/25-diagram-table-layout branch February 2, 2026 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

테이블 정렬 기능 추가 (다이어그램)

1 participant