From 895cb48ee0c6ca45060ebe5f252710620acb4e65 Mon Sep 17 00:00:00 2001 From: johngreen Date: Thu, 21 May 2026 19:21:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?docs(claude):=20UI/=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EC=A0=9C=EC=95=88=20=EC=8B=9C=20ASCII=20B?= =?UTF-8?q?efore/After=20=EA=B7=B8=EB=A6=BC=20=EC=9D=98=EB=AC=B4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존 컨벤션에 § 💬 추가. 글로만 설명하면 사용자가 이해 못 함 — 변경 전/후 두 그림을 무조건 그려서 보여줘야 함. 코드 인용 (file:line, CSS class) 최소화하고 영문/SQL/전문용어 풀어쓰기. 3줄 패턴 (무슨 일 / 사용자 영향 / 어떻게 고치는지) 권장. Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 54b32c82..08ded1be 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,3 +1,82 @@ + +# 절대 규칙: 검증 없는 주장 금지 + +내가 출력하는 모든 발언은 근거가 있어야 한다. 근거가 없으면 그 말을 하지 않는다. 위로·추정·일반론·"보통 그렇다"로 채우지 않는다. + +## 위반 사례 (절대 하지 말 것) +- "100명 중 5명도 안 된다" 같은 통계를 출처 없이 만들어내기 +- "통과 확률 70~80%" 같은 수치를 추정으로 제시하기 +- "보통", "일반적으로", "대부분" 으로 시작하는 일반론 +- 본인이 검증 안 한 SDK/API 동작을 단정적으로 설명하기 +- 위로·격려를 위해 사실이 아닌 것을 끼워넣기 + +## 발화 전 자기 검증 +한 문장이라도 출력하기 전에 다음을 확인: +1. **출처가 있는가?** — 코드(파일:라인), 명령 결과, 공식 문서, 사용자가 준 정보, 도구 호출 결과 중 하나 +2. **출처가 없다면 추정인가?** — 추정이면 명시적으로 "추정이지만…" 또는 "확인 안 됐지만…" 으로 시작 +3. **추정도 근거가 없으면?** — 말하지 않는다. "모릅니다" 또는 "확인이 필요합니다" 라고 한다 + +## 모를 때의 정답 +- 검색·문서 조회·코드 읽기로 확인 가능하면 확인부터 한다 +- 확인이 불가능하면 "모릅니다" 가 정답. 그럴듯한 답을 만들지 않는다 +- 사용자 의사결정에 영향을 주는 사실일수록 더 엄격하게 적용 + +## 어겼을 때 +사용자가 "그 근거 뭐야" 라고 묻거나 잘못된 사실을 지적하면: +- 즉시 인정. "맞습니다. 그 수치 제가 지어냈습니다." 같이 명시적으로 시인 +- 변명·재포장 금지 +- 무엇이 검증된 사실이고 무엇이 추정/날조였는지 다시 분리해서 제시 + + +# 💬 사용자에게 설명할 때 — 그림으로 (★ 중요) + +UI 변경 제안, 디자인 토론, 코드 구조 설명 등을 할 때는 **반드시 변경 전/후를 ASCII 표나 도식으로 그려서** 보여준다. 글로만 설명하면 사용자가 이해 못 한다. + +## 원칙 + +1. **변경 제안은 무조건 Before / After 두 그림** +2. **코드 인용 (file:line, 변수명, CSS class) 최소화** — 결론과 시각적 영향 위주 +3. **평어, 한국어, 짧은 문장** +4. **영문/SQL/전문용어 풀어쓰기** — "grid template" 대신 "표 컬럼 배치", "stopPropagation" 대신 "클릭이 위로 새는 거 막기" +5. **3줄 패턴 권장** — 무슨 일 / 사용자한테 보이는 영향 / 어떻게 고치는지 + +## 나쁜 예시 ❌ + +> "ColumnGrid.tsx:93-103 의 `grid-cols-[4px_140px_1fr_100px_160px_40px]` 를 5컬럼으로 축소하고, 라벨 셀에 sub-line 을 추가하면 entity/code/numbering 의 메타가 inline 으로..." + +(사용자: "뭐라는지 모르겠어") + +## 좋은 예시 ⭕ + +> **지금 모양:** +> ``` +> 라벨·컬럼명 │ 참조/설정 │ 타입 +> 거래처명 │ — │ 텍스트 ← 빈 칸 +> 거래처ID │ customer_mng → ... │ 테이블참조 +> ``` +> +> **바꿔서:** +> ``` +> 라벨·컬럼명 │ 타입 +> 거래처명 │ 텍스트 +> 거래처ID │ 테이블참조 +> → customer_mng.id ← 정보 있을 때만 작게 밑에 +> ``` + +## 옵션 제시할 땐 표로 + +``` +| 옵션 | 핵심 | 단점 | +| A안 | 이름만 바꾸기 | 가장 가벼움 | +| B안 | 그룹을 잘게 쪼개기 | 그룹 수 늘어남 | +``` + +## 우선 순위 +- 첫 시도에 글만 쓰지 말 것. 그림부터 그리고 글은 짧게 보충. +- 사용자가 "무슨 말인지 모르겠어" 하면 → 더 분해해서 다시 그림 그리기. 글 길어지면 더 헷갈림. + +--- + # INVYONE — Claude 작업 컨벤션 이 파일은 git 에 올라가는 **프로젝트 공용** Claude 가이드입니다. 모든 머신/팀원의 Claude Code 인스턴스가 이 컨벤션을 따라야 합니다. -- 2.52.0 From 30ebb14023b668cadecdc1a8cb7c7a49daf6ed00 Mon Sep 17 00:00:00 2001 From: johngreen Date: Thu, 21 May 2026 19:21:30 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix(=ED=85=8C=EC=9D=B4=EB=B8=94=ED=83=80?= =?UTF-8?q?=EC=9E=85):=20=EC=9E=85=EB=A0=A5=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20lucide=20=EB=A1=9C=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC=20=E2=80=94=20letter/symbol/emoji=20=ED=98=BC?= =?UTF-8?q?=EC=9E=AC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존엔 iconChar 문자열에 'T'(글자) / '#'(기호) / '{}'(코드) / '📎'(emoji) 식으로 일관성 없게 표시. 카드 그리드에서 시각 노이즈 큼. - TypeColorConfig.iconChar(string) → Icon(LucideIcon) 으로 교체 - 13개 입력 타입 전부 lucide 아이콘 매핑 (Type/Hash/Calendar/Braces/Link2 등) - FALLBACK_TYPE_CONFIG export 해서 TypeOverviewStrip 의 legacy/unknown 도 같은 인터페이스 따름 Co-Authored-By: Claude Opus 4.7 (1M context) --- .../admin/table-type/ColumnDetailPanel.tsx | 12 ++-- .../admin/table-type/TypeOverviewStrip.tsx | 15 ++--- frontend/components/admin/table-type/types.ts | 57 ++++++++++++++----- 3 files changed, 52 insertions(+), 32 deletions(-) diff --git a/frontend/components/admin/table-type/ColumnDetailPanel.tsx b/frontend/components/admin/table-type/ColumnDetailPanel.tsx index 8b365576..d1556a11 100644 --- a/frontend/components/admin/table-type/ColumnDetailPanel.tsx +++ b/frontend/components/admin/table-type/ColumnDetailPanel.tsx @@ -183,12 +183,12 @@ export function ColumnDetailPanel({ isLegacy && "cursor-not-allowed", )} > - - {conf.iconChar} - + { const length = ratio * circumference; const dashArray = `${length} ${circumference - length}`; const dashOffset = -offset; offset += length; - const conf = isLegacy ? LEGACY_CONF : (INPUT_TYPE_COLORS[type] || { color: "text-muted-foreground", bgColor: "bg-muted" }); + const conf = isLegacy ? LEGACY_CONF : (INPUT_TYPE_COLORS[type] || FALLBACK_TYPE_CONFIG); return { type, dashArray, @@ -112,7 +105,7 @@ export function TypeOverviewStrip({ .filter((type) => (counts[type] || 0) > 0) .sort((a, b) => (counts[b] ?? 0) - (counts[a] ?? 0)) .map((type) => { - const conf = INPUT_TYPE_COLORS[type] || { color: "text-muted-foreground", bgColor: "bg-muted", label: type }; + const conf = INPUT_TYPE_COLORS[type] || { ...FALLBACK_TYPE_CONFIG, label: type }; const isActive = activeFilter === null || activeFilter === type; return (