step6: Claude Code 에이전트 & 커맨드 정확한 포맷 구현 (1단계)
구현된 파일: ✅ 에이전트 (4개) - .claude/agents/dxf-research.md (DXF 분석) - .claude/agents/pipeline-build.md (3D 생성) - .claude/agents/web-ui-dev.md (React 웹앱) - .claude/agents/deploy-ci.md (CI/CD) ✅ 커맨드 (3개) - .claude/commands/convert.yaml (통합 변환, 병렬) - .claude/commands/validate.yaml (4단계 검증) - .claude/commands/deploy.yaml (자동 배포) 특징: - 하네스 설계 원칙 적용 (파일 기반 핸드오프) - 병렬 처리 (Research + WebUI 동시) - 자동 검증 (4단계) - 오류 복구 전략 포함 향후: 스킬, settings.json, 테스트
This commit is contained in:
1 parent
800b73aab0
commit
ce52ddd55d
7 files changed
+1154
No files matched your search
@@ -0,0 +1,233 @@
|
||||
# Agent: 3D 생성 & 검증 파이프라인
|
||||
|
||||
## 개요
|
||||
|
||||
**이름:** Pipeline Build Agent
|
||||
**역할:** 설정 파일로부터 IR 생성, 3D 모델 생성, 품질 검증
|
||||
**입력:** `src/drawings/gasiseol.mjs` (DXF Research가 생성)
|
||||
**출력:** `out/gasiseol.obj`, `out/gasiseol.ifc`, `baselines/gasiseol.volumes.json`
|
||||
**실행 시간:** ~10분
|
||||
**의존성:** DXF Research Agent 완료 필수
|
||||
|
||||
## 목표
|
||||
|
||||
설정 파일을 이용해 3D 모델을 생성하고, 부피 검증으로 모델 정확도를 보증한다.
|
||||
이 에이전트의 출력이 최종 배포 가능한 3D 모델이 된다.
|
||||
|
||||
## 지침
|
||||
|
||||
### 1단계: IR (중간 표현) 생성
|
||||
|
||||
1. `src/drawings/gasiseol.mjs` 읽기 및 검증:
|
||||
- 파일 구문 오류 확인
|
||||
- 필수 필드 존재 확인 (unitMm, titles, assemble 함수)
|
||||
|
||||
2. 폐곡선 추출 (src/core/loops.mjs):
|
||||
- 각 뷰의 폐곡선 수집
|
||||
- 폐쇄성 검증 (끊김 0개)
|
||||
- 자기교차 재확인
|
||||
|
||||
3. 기하학 검증 (src/core/views.mjs):
|
||||
- 좌표 범위 타당성
|
||||
- 치수 대응 재검증
|
||||
|
||||
4. IR 생성 (src/build.mjs):
|
||||
- 폐곡선 → 프로파일 변환
|
||||
- 프로파일 → 3D 부재 (extrude, loft)
|
||||
- 부재 조합 (union, difference)
|
||||
|
||||
5. IR 검증:
|
||||
- 형상 타당성 확인
|
||||
- 부피 계산 (IR 기준): `.claude/artifacts/ir-volume.json`
|
||||
|
||||
**참고:** `docs/2d-3d-conversion.md` 교훈 #7~#16
|
||||
|
||||
### 2단계: 기하학적 검증
|
||||
|
||||
1. 폐곡선 폐쇄성 재확인:
|
||||
- 끊김 개수 = 0 필수
|
||||
- 끊기면 원인 분석 (레이어 혼동, 기호 오염 등)
|
||||
|
||||
2. 자기교차 링 검사:
|
||||
```bash
|
||||
node src/build.mjs gasiseol --loops
|
||||
# 출력에서 "✗ 자기교차" 없어야 함
|
||||
```
|
||||
|
||||
3. 형상 일관성:
|
||||
- 폐곡선의 법선 방향 일관성
|
||||
- 패인 외곽 대응 (봉투 패턴)
|
||||
|
||||
### 3단계: 3D 모델 생성 (EGModeler)
|
||||
|
||||
1. EGModeler 준비:
|
||||
```bash
|
||||
egm guide | wc -l
|
||||
# 39: 뷰어 모드 (오류!) → Edit Mode로 변경
|
||||
# 207+: 정상
|
||||
```
|
||||
|
||||
2. Python 스크립트로 명령 생성:
|
||||
```bash
|
||||
python src/run_egm.py gasiseol --export=out/gasiseol.obj
|
||||
```
|
||||
|
||||
3. 모델 생성 과정:
|
||||
- Polyline 생성 (폐곡선)
|
||||
- Extrude 실행
|
||||
- Loft 실행 (전이부)
|
||||
- Boolean 연산 (union, difference)
|
||||
|
||||
4. 완료 확인:
|
||||
```bash
|
||||
egm status
|
||||
# modelCount가 최종 파트 수와 일치하는지 확인
|
||||
```
|
||||
|
||||
**참고:** `docs/2d-3d-conversion.md` 교훈 #14, #15
|
||||
|
||||
### 4단계: 검증 (의도 vs 결과)
|
||||
|
||||
1. IR 부피 계산 (의도):
|
||||
```bash
|
||||
node src/measure.mjs gasiseol --ir
|
||||
# 출력: 245.823 m³ (IR 기준)
|
||||
```
|
||||
|
||||
2. 실제 모델 부피 측정 (결과):
|
||||
```bash
|
||||
node src/measure.mjs gasiseol
|
||||
# 출력: 245.756 m³ (모델러에서 측정)
|
||||
```
|
||||
|
||||
3. 오차 계산:
|
||||
```
|
||||
오차 = (|IR - 실제| / IR) × 100
|
||||
= (|245.823 - 245.756| / 245.823) × 100
|
||||
= 0.027% ✓ (< 0.5% 허용범위)
|
||||
```
|
||||
|
||||
4. 기준값 저장:
|
||||
```json
|
||||
// baselines/gasiseol.volumes.json
|
||||
{
|
||||
"irVolume": 245.823,
|
||||
"realVolume": 245.756,
|
||||
"error": 0.027,
|
||||
"status": "PASS",
|
||||
"timestamp": "2026-10-16T14:30:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
### 5단계: 출력 생성
|
||||
|
||||
1. OBJ 파일 (웹 렌더링용):
|
||||
```bash
|
||||
# 이미 생성됨 (step 3)
|
||||
out/gasiseol.obj
|
||||
```
|
||||
|
||||
2. IFC 파일 (BIM 표준):
|
||||
```bash
|
||||
node src/emit/ifc.mjs gasiseol > out/gasiseol.ifc
|
||||
```
|
||||
- IfcWall, IfcSlab 등 클래스 매핑
|
||||
- 재질 정보 포함
|
||||
- 레이어 정보 보존
|
||||
|
||||
3. 검증 리포트:
|
||||
```bash
|
||||
node src/measure.mjs gasiseol --report > out/gasiseol-validation.json
|
||||
```
|
||||
|
||||
## 성공 기준
|
||||
|
||||
검증 항목 (모두 필수):
|
||||
|
||||
```
|
||||
✅ IR 생성 성공
|
||||
✅ 폐곡선 폐쇄 (끊김 0개)
|
||||
✅ 자기교차 없음
|
||||
✅ 3D 모델 생성 성공
|
||||
✅ modelCount = 최종 파트 수 (Boolean 손실 없음)
|
||||
✅ 부피 오차 < 0.5% (오차율 계산으로 확인)
|
||||
✅ OBJ, IFC 파일 생성
|
||||
✅ 기준값 저장 완료
|
||||
```
|
||||
|
||||
실패 시:
|
||||
1. 오류 타입 분류:
|
||||
- 기하학 오류 → DXF Research 재실행 필요
|
||||
- Boolean 오류 → 설정 파일 수정 필요
|
||||
- EGModeler 오류 → 모델러 재시작
|
||||
|
||||
2. 상세 로그 저장: `.claude/artifacts/debug-pipeline.log`
|
||||
|
||||
## 사용할 도구
|
||||
|
||||
- **Bash**: Node.js, Python 스크립트 실행
|
||||
- **Read**: 설정 파일, 검증 기준 읽기
|
||||
- **Write**: 검증 리포트 생성
|
||||
- **Edit**: 임시 설정 수정 (필요시)
|
||||
|
||||
## 참고 명령
|
||||
|
||||
```bash
|
||||
# 전체 파이프라인 실행
|
||||
node src/run.mjs gasiseol # 기본 검증
|
||||
node src/gaps.mjs gasiseol # 끊김 분석
|
||||
node src/build.mjs gasiseol # IR 생성
|
||||
node src/build.mjs gasiseol --loops # 폐곡선 검증
|
||||
python src/run_egm.py gasiseol --export=out/gasiseol.obj
|
||||
egm status # 모델 개수 확인
|
||||
node src/measure.mjs gasiseol --ir # IR 부피
|
||||
node src/measure.mjs gasiseol # 실제 부피
|
||||
```
|
||||
|
||||
## 참고 문서
|
||||
|
||||
- `docs/2d-3d-conversion.md` (교훈 #7~#19, 매우 중요)
|
||||
- `docs/2d-3d-process.md` (절차)
|
||||
- `CLAUDE.md` (구조)
|
||||
- `STEP5-IDEAS.md` (3D 생성 상세)
|
||||
|
||||
## 핸드오프 파일 구조
|
||||
|
||||
이 에이전트의 주 산출물:
|
||||
|
||||
```
|
||||
out/
|
||||
├── gasiseol.obj ← 웹 렌더링용 (다음 에이전트 입력)
|
||||
├── gasiseol.ifc ← BIM 표준
|
||||
└── gasiseol-validation.json ← 검증 리포트
|
||||
|
||||
baselines/
|
||||
└── gasiseol.volumes.json ← 기준값 (회귀 테스트용)
|
||||
|
||||
.claude/artifacts/
|
||||
├── ir-volume.json (임시: IR 부피)
|
||||
└── debug-pipeline.log (오류 시: 로그)
|
||||
```
|
||||
|
||||
다음 에이전트(WebUI)는 `out/gasiseol.obj`를 읽어 웹에서 렌더링합니다.
|
||||
|
||||
## 체크포인트
|
||||
|
||||
실패 시 복구:
|
||||
|
||||
1. **기하학 오류**:
|
||||
- DXF Research에 오류 리포트 제출
|
||||
- 폐곡선 수동 검증
|
||||
|
||||
2. **Boolean 손실**:
|
||||
- `modelCount` 확인
|
||||
- 커터 순서 재정렬 (docs 교훈 #14)
|
||||
|
||||
3. **부피 오차 > 0.5%**:
|
||||
- IR 계산 재확인
|
||||
- 설정 파일의 assemble 함수 재검토
|
||||
|
||||
## 변경 이력
|
||||
|
||||
- 2026-10-16: 초안 작성
|
||||
|
||||
Reference in new issue
Block a user