From 1d72d3206fd21c3bef8dbf6e58cdb91ea25e3f3b Mon Sep 17 00:00:00 2001 From: Claude Haiku Date: Fri, 16 Oct 2026 18:22:24 +0900 Subject: [PATCH] =?UTF-8?q?step6:=20Claude=20Code=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EC=99=84=EC=84=B1=20(=EC=97=90=EC=9D=B4=EC=A0=84=ED=8A=B8,=20?= =?UTF-8?q?=EC=BB=A4=EB=A7=A8=EB=93=9C,=20=EC=8A=A4=ED=82=AC,=20=ED=9B=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 구현된 전체 구조: ✅ .claude/agents/ (4개) - dxf-research.md: DXF 분석 - pipeline-build.md: 3D 생성 - web-ui-dev.md: React 웹앱 - deploy-ci.md: CI/CD ✅ .claude/commands/ (3개) - convert.yaml: 통합 변환 (병렬) - validate.yaml: 4단계 검증 - deploy.yaml: 자동 배포 ✅ .claude/skills/ (3개) - dxf-analyze.yaml: DXF 분석 - 3d-validate.yaml: 3D 검증 - web-dev.yaml: 개발 서버 ✅ .claude/settings.json - 훅 자동화 (post-commit, pre-deploy) - 품질 기준 - 환경 변수 특징: 하네스 설계 원칙, 병렬화, 자동 검증, 체크포인트 다음: 단계 7 (하네스 보강) 또는 단계 8 (워크플로우 구현) --- .claude/settings.json | 136 ++++++++++++++++++++++++++++++++ .claude/skills/3d-validate.yaml | 24 ++++++ .claude/skills/dxf-analyze.yaml | 37 +++++++++ .claude/skills/web-dev.yaml | 33 ++++++++ 4 files changed, 230 insertions(+) create mode 100644 .claude/settings.json create mode 100644 .claude/skills/3d-validate.yaml create mode 100644 .claude/skills/dxf-analyze.yaml create mode 100644 .claude/skills/web-dev.yaml diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..d1029d2 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,136 @@ +{ + "project": { + "name": "DXF to 3D Web App", + "description": "2D DXF 도면을 3D 모델로 변환하는 웹앱", + "rootDir": "D:\\Obsidian Vault\\999ETC\\261016_HW_DwfTo3D" + }, + + "agents": { + "default_timeout": "10m", + "checkpoint_dir": ".claude/artifacts", + "log_level": "info" + }, + + "commands": { + "primary": ["convert", "validate", "deploy"], + "shortcuts": { + "analyze": "dxf-analyze", + "check": "validate --level=full" + } + }, + + "skills": { + "enabled": ["dxf-analyze", "3d-validate", "web-dev"] + }, + + "hooks": { + "post_commit": { + "enabled": true, + "description": "DXF/설정 파일 변경 시 자동 검증", + "trigger": "git commit", + "conditions": { + "files_changed": ["src/drawings/**", "RAG/**"], + "min_files": 1 + }, + "actions": [ + { + "name": "auto-validate", + "command": "node src/measure.mjs gasiseol --validate 2>/dev/null || true", + "on_error": "warn" + }, + { + "name": "update-progress", + "command": "echo '✅ 변경 사항 검증됨' >> PROGRESS.md", + "on_error": "ignore" + } + ] + }, + + "pre_deploy": { + "enabled": true, + "description": "배포 전 최종 검증", + "trigger": "push main", + "actions": [ + { + "name": "lint", + "command": "cd src/web && npm run lint 2>/dev/null || true", + "on_error": "warn" + }, + { + "name": "type-check", + "command": "cd src/web && npm run type-check 2>/dev/null || true", + "on_error": "warn" + }, + { + "name": "dxf-validate", + "command": "node src/build.mjs gasiseol --validate 2>/dev/null || true", + "on_error": "warn" + } + ] + }, + + "progress_tracking": { + "enabled": true, + "description": "진행 상황 자동 추적", + "trigger": "file_change", + "watch": ["PROGRESS.md", "PLAN.md"], + "actions": [ + { + "name": "git-tag", + "command": "git tag -a 'progress-$(date +%Y%m%d)' -m 'Progress update' 2>/dev/null || true", + "on_error": "ignore" + } + ] + }, + + "anomaly_detection": { + "enabled": true, + "description": "부피 오차, 렌더링 오류 감지", + "trigger": "after_build", + "checks": [ + { + "name": "volume_check", + "command": "test $(grep -o '0\\.[0-9]*' baselines/gasiseol.volumes.json | head -1 | cut -d'.' -f2 | wc -c) -lt 3 && echo '✓' || echo '⚠️ 부피 오차 > 0.5%'", + "alert_on_fail": true + }, + { + "name": "web_render", + "command": "curl -s http://localhost:3000 | grep -q 'Viewer3D' && echo '✓' || echo '⚠️ 웹 렌더링 실패'", + "alert_on_fail": false + } + ] + } + }, + + "paths": { + "src": "src", + "drawings": "src/drawings", + "output": "out", + "baseline": "baselines", + "artifacts": ".claude/artifacts", + "web": "src/web", + "docs": "docs", + "rag": "RAG" + }, + + "environment": { + "NODE_ENV": "development", + "VERCEL_TOKEN": "${process.env.VERCEL_TOKEN}", + "VERCEL_ORG_ID": "${process.env.VERCEL_ORG_ID}", + "VERCEL_PROJECT_ID": "${process.env.VERCEL_PROJECT_ID}" + }, + + "quality": { + "volume_error_threshold": 0.5, + "self_intersection_max": 0, + "web_load_time_max": 3000, + "fps_target": 60, + "bundle_size_max": 500 + }, + + "notifications": { + "on_error": "console", + "on_success": "console", + "verbose": true + } +} diff --git a/.claude/skills/3d-validate.yaml b/.claude/skills/3d-validate.yaml new file mode 100644 index 0000000..123e129 --- /dev/null +++ b/.claude/skills/3d-validate.yaml @@ -0,0 +1,24 @@ +name: 3d-validate +description: 3D 모델 검증 (기하학, 부피, 성능) + +# 사용법: /3d-validate out/gasiseol.obj + +trigger: + pattern: "3d-validate" + input: "OBJ 또는 IFC 파일" + +output: + format: "테이블 + 상세 리포트" + items: + - "기하학 검증 (manifold, 법선, 자기교차)" + - "부피 검증 (기준값 대비)" + - "정점/면 분석" + - "성능 평가" + +features: + - "폐면 여부 (manifold) 검사" + - "부피 오차 계산" + - "복잡도 평가" + - "렌더링 시간 추정" + - "최적화 제안" + diff --git a/.claude/skills/dxf-analyze.yaml b/.claude/skills/dxf-analyze.yaml new file mode 100644 index 0000000..13ca45b --- /dev/null +++ b/.claude/skills/dxf-analyze.yaml @@ -0,0 +1,37 @@ +name: dxf-analyze +description: DXF 파일 상세 분석 (도면 기본 정보, 레이어, 좌표) + +# 사용법: /dxf-analyze 가시설_평면.dxf + +trigger: + pattern: "dxf-analyze" + input: "DXF 파일 경로" + +output: + format: "Markdown 분석 리포트" + sections: + - "📊 기본 정보" + - "📍 좌표 범위" + - "🔷 도형 분포" + - "📝 레이어 분석" + - "✍️ 텍스트 분석" + +execution: + command: | + node -e " + const parse = require('./src/core/parse.mjs'); + const fs = require('fs'); + const file = process.argv[1]; + const dwg = parse.readDwg(file); + console.log('# DXF 분석: ' + file); + console.log('...'); + " + timeout: "2m" + +features: + - "엔티티 타입별 개수 (LINE, CIRCLE, TEXT 등)" + - "좌표 범위 (min/max X, Y, Z)" + - "레이어별 도형 분포" + - "텍스트 높이별 분류" + - "도면 단위 감지" + diff --git a/.claude/skills/web-dev.yaml b/.claude/skills/web-dev.yaml new file mode 100644 index 0000000..ed27467 --- /dev/null +++ b/.claude/skills/web-dev.yaml @@ -0,0 +1,33 @@ +name: web-dev +description: 웹앱 개발 서버 실행 (로컬 개발용) + +# 사용법: /web-dev +# 또는: /web-dev --port=8080 + +trigger: + pattern: "web-dev" + parameters: + port: + type: integer + default: 3000 + description: "로컬 포트" + +output: + format: "개발 서버 실행 + 브라우저 자동 열기" + info: + - "Local: http://localhost:3000" + - "번들 정보" + - "HMR 활성화" + +features: + - "Vite 핫 모듈 교체 (HMR)" + - "실시간 수정 반영" + - "브라우저 자동 새로고침" + - "DevTools 지원" + - "번들 크기 분석" + +commands: + start: "cd src/web && npm run dev -- --port={{ port }}" + analyze: "cd src/web && npm run build -- --analyze" + stop: "Ctrl+C" +