step7: 하네스 설계 아키텍처 보강
추가 내용: ✅ CLAUDE.md 보강 - 하네스 설계 원칙 (Anthropic 기반) - Tractable Chunks (작업 분해) - Structured Artifacts (파일 기반 핸드오프) - 체크포인트 시스템 - 오류 복구 절차 - 상태 관리 아키텍처 ✅ HARNESS-DESIGN.md (신규, 상세 문서) - 의존성 그래프 (시각화) - 병렬 실행 전략 - 체크포인트 지점 & 저장 방식 - 4가지 오류 시나리오 & 복구 - PROGRESS.md 상태 머신 - 모니터링 & 알림 - 베스트 프랙티스 특징: - 자동 오류 복구 (부분 재실행) - 4단계 검증 (다층 방어) - 체크포인트 기반 상태 추적 - 파일 기반 에이전트 통신 (신뢰성) 다음: 단계 8 (실제 워크플로우 테스트)
This commit is contained in:
1 parent
1d72d3206f
commit
889183878d
2 files changed
+560
No files matched your search
@@ -282,6 +282,129 @@ git push
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 하네스 설계 아키텍처 (단계 7)
|
||||
|
||||
### 핵심 원칙
|
||||
|
||||
Anthropic의 "harness-design-long-running-apps" 설계를 적용:
|
||||
|
||||
#### 1. Tractable Chunks (관리 가능한 단위)
|
||||
```
|
||||
복잡한 작업 분해 → 각 에이전트가 한 가지만 담당
|
||||
|
||||
/convert gasiseol
|
||||
├─ Stage 1: Research (도면 분석)
|
||||
├─ Stage 2: Pipeline (3D 생성)
|
||||
├─ Stage 3: WebUI (앱 개발, 병렬)
|
||||
└─ Stage 4: Summary (병합 & 검증)
|
||||
```
|
||||
|
||||
#### 2. Structured Artifacts (파일 기반 핸드오프)
|
||||
```
|
||||
에이전트 간 통신 = JSON/JS 파일 (스키마 명시)
|
||||
|
||||
Research 생성 → src/drawings/gasiseol.mjs
|
||||
Pipeline 생성 → out/gasiseol.obj
|
||||
Validation → baselines/gasiseol.volumes.json
|
||||
|
||||
각 파일 = 명확한 계약 → 에이전트가 신뢰할 수 있음
|
||||
```
|
||||
|
||||
#### 3. 체크포인트 기반 복구
|
||||
```
|
||||
각 에이전트 완료 후: .claude/artifacts/ 에 스냅샷 저장
|
||||
실패 시: 마지막 성공 지점에서 재개
|
||||
|
||||
예: Pipeline 실패 → Research 결과는 유지 → Pipeline만 재실행
|
||||
```
|
||||
|
||||
#### 4. 3-에이전트 검증
|
||||
```
|
||||
Generator (생성) ← Research, Pipeline, WebUI
|
||||
Evaluator (검증) ← /validate 커맨드
|
||||
Reporter (보고) ← PROGRESS.md, /report
|
||||
```
|
||||
|
||||
### 에이전트 의존성
|
||||
|
||||
```
|
||||
DXF 파일
|
||||
↓
|
||||
[Research] ← 기준점 검출, 설정 파일 생성
|
||||
↓
|
||||
gasiseol.mjs
|
||||
↓
|
||||
[Pipeline] ← 3D 생성, 부피 검증
|
||||
↓
|
||||
gasiseol.obj
|
||||
↓
|
||||
[WebUI] (병렬 가능) ← 웹앱 개발
|
||||
[Deploy] ← CI/CD 배포
|
||||
```
|
||||
|
||||
**병렬**: Research ↔ WebUI (독립적)
|
||||
**순차**: Research → Pipeline → Deploy
|
||||
|
||||
### 상태 관리
|
||||
|
||||
```
|
||||
PROGRESS.md
|
||||
├─ 현재 단계
|
||||
├─ 완료된 작업
|
||||
├─ 진행 중인 작업
|
||||
└─ 다음 예정
|
||||
|
||||
.claude/artifacts/
|
||||
├─ gasiseol-checkpoint-1.json (Research 완료)
|
||||
├─ gasiseol-checkpoint-2.json (Pipeline 완료)
|
||||
└─ debug-*.log (오류 시)
|
||||
|
||||
baselines/
|
||||
└─ gasiseol.volumes.json (기준값, 회귀 테스트)
|
||||
```
|
||||
|
||||
### 오류 복구 절차
|
||||
|
||||
```
|
||||
1️⃣ 오류 감지
|
||||
/validate 실패 → 어느 에이전트 문제?
|
||||
|
||||
2️⃣ 원인 파악
|
||||
- 기하학 오류 → Research 재실행
|
||||
- Boolean 오류 → Pipeline 재실행
|
||||
- 렌더링 오류 → WebUI 재실행
|
||||
|
||||
3️⃣ 해당 에이전트만 재개
|
||||
마지막 체크포인트에서 시작
|
||||
이전 단계의 파일은 유지
|
||||
|
||||
4️⃣ 재검증
|
||||
/validate --level=full
|
||||
|
||||
5️⃣ 진행 상황 업데이트
|
||||
PROGRESS.md 수정
|
||||
```
|
||||
|
||||
### 품질 계층 (다층 방어)
|
||||
|
||||
```
|
||||
Layer 1: 파일 존재 확인
|
||||
└─ 각 에이전트 출력 파일 존재?
|
||||
|
||||
Layer 2: 스키마 검증
|
||||
└─ JSON/JS 구조 올바름?
|
||||
|
||||
Layer 3: 기능 검증
|
||||
└─ 기하학? 부피? 렌더링?
|
||||
|
||||
Layer 4: 회귀 검증
|
||||
└─ 기준값과 비교 (오차 < 0.5%)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 라이선스
|
||||
|
||||
이 프로젝트는 [`docs/dwg2model-CLAUDE.md`](docs/dwg2model-CLAUDE.md)를 상속받는다.
|
||||
|
||||
@@ -0,0 +1,437 @@
|
||||
# 하네스 설계 상세 문서 (단계 7)
|
||||
|
||||
> Anthropic 엔지니어링 블로그 "harness-design-long-running-apps" 기반
|
||||
> DXF to 3D 프로젝트의 구체적인 구현
|
||||
|
||||
---
|
||||
|
||||
## 목차
|
||||
|
||||
1. [아키텍처 개요](#아키텍처-개요)
|
||||
2. [에이전트 의존성](#에이전트-의존성)
|
||||
3. [체크포인트 시스템](#체크포인트-시스템)
|
||||
4. [오류 복구](#오류-복구)
|
||||
5. [상태 관리](#상태-관리)
|
||||
6. [모니터링](#모니터링)
|
||||
|
||||
---
|
||||
|
||||
## 아키텍처 개요
|
||||
|
||||
### 설계 원칙
|
||||
|
||||
```
|
||||
복잡한 작업 (DXF → 웹앱)
|
||||
↓
|
||||
단위별 분해 (4개 에이전트)
|
||||
↓
|
||||
파일 기반 핸드오프 (JSON/JS/OBJ)
|
||||
↓
|
||||
자동 검증 (4단계)
|
||||
↓
|
||||
오류 시 부분 복구 (체크포인트)
|
||||
```
|
||||
|
||||
### 왜 이 설계인가?
|
||||
|
||||
| 설계 요소 | 문제 해결 |
|
||||
|---------|---------|
|
||||
| Tractable Chunks | 큰 작업이 한 에이전트를 압도하는 것 방지 |
|
||||
| Structured Artifacts | 에이전트 간 통신의 신뢰성 보장 |
|
||||
| 체크포인트 | 실패 후 처음부터 다시 시작하는 낭비 방지 |
|
||||
| 다층 검증 | 조용히 틀리는 오류 조기 발견 |
|
||||
|
||||
---
|
||||
|
||||
## 에이전트 의존성
|
||||
|
||||
### 의존성 그래프
|
||||
|
||||
```
|
||||
입력 레이어:
|
||||
RAG/가시설_*.dxf (7개 파일)
|
||||
↓
|
||||
처리 레이어 1 (병렬 가능):
|
||||
┌───────────────────┬────────────────┐
|
||||
↓ ↓
|
||||
[Research Agent] [WebUI Agent]
|
||||
도면 분석 웹앱 개발
|
||||
설정 파일 생성 (독립적)
|
||||
↓
|
||||
src/drawings/gasiseol.mjs
|
||||
↓
|
||||
처리 레이어 2 (순차):
|
||||
[Pipeline Agent]
|
||||
3D 생성
|
||||
부피 검증
|
||||
↓
|
||||
out/gasiseol.obj, out/gasiseol.ifc
|
||||
↓
|
||||
검증 레이어:
|
||||
[Validator]
|
||||
4단계 검증
|
||||
기준값 저장
|
||||
↓
|
||||
baselines/gasiseol.volumes.json
|
||||
↓
|
||||
출력 레이어:
|
||||
[Deploy Agent]
|
||||
웹 빌드
|
||||
Vercel 배포
|
||||
↓
|
||||
https://dxf-to-3d.tk
|
||||
```
|
||||
|
||||
### 병렬 실행 전략
|
||||
|
||||
```
|
||||
Timeline (최악의 경우):
|
||||
|
||||
Sequential (순차):
|
||||
Research (5분) → Pipeline (10분) → Deploy (5분) = 20분
|
||||
|
||||
Parallel (병렬, 이상적):
|
||||
Research (5분) ──┐
|
||||
WebUI (10분) ────┼→ Pipeline (10분) → Deploy (5분) = 25분
|
||||
(여전히 더 빠름: 25 < 30)
|
||||
|
||||
실제 구현:
|
||||
1. Research + WebUI 동시 시작
|
||||
2. Research 완료 대기
|
||||
3. Pipeline 시작
|
||||
4. WebUI 완료 (이미 끝남)
|
||||
5. Deploy 시작
|
||||
```
|
||||
|
||||
### 의존성 테이블
|
||||
|
||||
| 에이전트 | 입력 파일 | 출력 파일 | 선행 요구 |
|
||||
|---------|---------|---------|---------|
|
||||
| Research | RAG/*.dxf | src/drawings/gasiseol.mjs | 없음 |
|
||||
| Pipeline | src/drawings/gasiseol.mjs | out/gasiseol.obj | Research ✓ |
|
||||
| WebUI | out/gasiseol.obj | src/web/ | 없음 (선택) |
|
||||
| Deploy | src/web/, out/gasiseol.obj | https://dxf-to-3d.tk | Pipeline ✓ |
|
||||
| Validator | 모든 파일 | baselines/gasiseol.volumes.json | Pipeline ✓ |
|
||||
|
||||
---
|
||||
|
||||
## 체크포인트 시스템
|
||||
|
||||
### 체크포인트 지점
|
||||
|
||||
각 에이전트 완료 후 자동 저장:
|
||||
|
||||
```
|
||||
1️⃣ Research 완료
|
||||
└─ 저장: .claude/artifacts/gasiseol-cp-1-research.json
|
||||
내용: {
|
||||
timestamp: "2026-10-19T14:30:00Z",
|
||||
agent: "research",
|
||||
output: "src/drawings/gasiseol.mjs",
|
||||
status: "success|fail",
|
||||
error: "..." (if fail)
|
||||
}
|
||||
|
||||
2️⃣ Pipeline 완료
|
||||
└─ 저장: .claude/artifacts/gasiseol-cp-2-pipeline.json
|
||||
내용: {
|
||||
timestamp: "2026-10-19T14:45:00Z",
|
||||
agent: "pipeline",
|
||||
output: "out/gasiseol.obj",
|
||||
volumes: { irVolume, realVolume, error },
|
||||
status: "success|fail"
|
||||
}
|
||||
|
||||
3️⃣ WebUI 완료
|
||||
└─ 저장: .claude/artifacts/gasiseol-cp-3-webui.json
|
||||
|
||||
4️⃣ Deploy 완료
|
||||
└─ 저장: .claude/artifacts/gasiseol-cp-4-deploy.json
|
||||
내용: {
|
||||
url: "https://dxf-to-3d.tk",
|
||||
timestamp: "...",
|
||||
status: "success|fail"
|
||||
}
|
||||
```
|
||||
|
||||
### 체크포인트 저장 방식
|
||||
|
||||
```bash
|
||||
# Research 완료 후
|
||||
cat > .claude/artifacts/gasiseol-cp-1.json << 'EOF'
|
||||
{
|
||||
"stage": 1,
|
||||
"agent": "research",
|
||||
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
||||
"output_file": "src/drawings/gasiseol.mjs",
|
||||
"status": "success",
|
||||
"md5": "$(md5sum src/drawings/gasiseol.mjs | cut -d' ' -f1)"
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 오류 복구
|
||||
|
||||
### 복구 전략
|
||||
|
||||
#### Scenario 1: Research 실패
|
||||
|
||||
```
|
||||
상황: DXF 분석 오류
|
||||
영향: 설정 파일 미생성
|
||||
|
||||
복구:
|
||||
1. 오류 로그 분석 (.claude/artifacts/debug-research.log)
|
||||
2. DXF 파일 검증
|
||||
3. Research 재실행
|
||||
4. 기준점 수동 지정 (필요시)
|
||||
5. /validate --level=2 (기하학만 검증)
|
||||
|
||||
비용: 5분
|
||||
영향 받음: 나머지 모든 단계 (차단)
|
||||
```
|
||||
|
||||
#### Scenario 2: Pipeline 실패
|
||||
|
||||
```
|
||||
상황: 부피 오차 > 0.5%
|
||||
영향: 3D 모델 부정확
|
||||
|
||||
복구:
|
||||
1. IR 부피 vs 실제 부피 비교
|
||||
2. Boolean 손실 확인 (modelCount)
|
||||
3. assemble() 함수 재검토
|
||||
4. Research 결과 파일 유지 (체크포인트 사용)
|
||||
5. Pipeline만 재실행
|
||||
|
||||
비용: 10분
|
||||
영향 받음: Deploy (차단)
|
||||
```
|
||||
|
||||
#### Scenario 3: WebUI 실패
|
||||
|
||||
```
|
||||
상황: React 빌드 오류
|
||||
영향: 웹앱 미생성
|
||||
|
||||
복구:
|
||||
1. TypeScript 오류 확인
|
||||
2. 의존성 설치 재시도 (npm ci)
|
||||
3. WebUI만 재실행
|
||||
4. Research, Pipeline은 유지
|
||||
|
||||
비용: 10분
|
||||
영향 받음: Deploy (차단)
|
||||
```
|
||||
|
||||
#### Scenario 4: Deploy 실패
|
||||
|
||||
```
|
||||
상황: Vercel 배포 오류
|
||||
영향: 웹사이트 미업데이트
|
||||
|
||||
복구:
|
||||
1. GitHub Actions 로그 확인
|
||||
2. 환경 변수 검증
|
||||
3. Deploy만 재실행
|
||||
4. 나머지는 모두 유지
|
||||
|
||||
비용: 5분
|
||||
영향 받음: 사용자 (임시)
|
||||
```
|
||||
|
||||
### 복구 검사목록
|
||||
|
||||
각 에이전트 재실행 후:
|
||||
|
||||
```
|
||||
☐ 출력 파일 존재?
|
||||
☐ 파일 크기 > 0?
|
||||
☐ 스키마 유효?
|
||||
☐ /validate 통과?
|
||||
☐ 기준값 변경 없음? (회귀)
|
||||
☐ PROGRESS.md 업데이트?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 상태 관리
|
||||
|
||||
### PROGRESS.md 상태 머신
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Idle │
|
||||
└─────────────────┬───────────────────────┘
|
||||
↓ /convert gasiseol
|
||||
┌─────────────────────┐
|
||||
│ Stage 1: Research │
|
||||
└─────────┬───────────┘
|
||||
↓ (Research 완료)
|
||||
┌─────────────────────┐
|
||||
┌───┤ Stage 2: Pipeline │◄──┐ (실패 시 루프)
|
||||
│ └─────────┬───────────┘ │
|
||||
│ ↓ │
|
||||
│ (Pipeline 통과) │
|
||||
│ ↓ │
|
||||
└──────────────────────────────┘
|
||||
(재실행)
|
||||
|
||||
↓ (성공)
|
||||
┌─────────────────────┐
|
||||
┌───┤ Stage 3: WebUI+Dep │◄──┐
|
||||
│ └─────────┬───────────┘ │
|
||||
│ ↓ │
|
||||
│ (배포 완료) │
|
||||
│ ↓ │
|
||||
└──────────────────────────────┘
|
||||
```
|
||||
|
||||
### PROGRESS.md 작성 규칙
|
||||
|
||||
```markdown
|
||||
## 현재 상태
|
||||
|
||||
### ✅ 완료
|
||||
- [x] Research
|
||||
- 기준점 검출: OK
|
||||
- 뷰 분리: OK
|
||||
- 설정 파일: src/drawings/gasiseol.mjs
|
||||
|
||||
### 🔄 진행 중
|
||||
- [ ] Pipeline
|
||||
- 3D 생성: 진행 중...
|
||||
- 부피 검증: 대기 중
|
||||
|
||||
### ⏳ 예정
|
||||
- [ ] WebUI
|
||||
- [ ] Deploy
|
||||
|
||||
### ⚠️ 오류 (있으면)
|
||||
- [ ] Pipeline 부피 오차 > 0.5%
|
||||
해결: assemble() 함수 재검토 필요
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 모니터링
|
||||
|
||||
### 자동 모니터링 훅
|
||||
|
||||
#### post-commit 훅 (매 커밋 후)
|
||||
|
||||
```bash
|
||||
# 대상 파일 변경 감지
|
||||
if git diff --cached --name-only | grep -qE "src/drawings/|RAG/"; then
|
||||
|
||||
# 자동 검증
|
||||
node src/build.mjs gasiseol --validate
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
# 오류 시 경고
|
||||
echo "⚠️ DXF 설정 오류 감지"
|
||||
echo "상세: node src/build.mjs gasiseol --loops"
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
#### pre-deploy 훅 (배포 전)
|
||||
|
||||
```bash
|
||||
# 모든 검증 통과 확인
|
||||
/validate --level=full
|
||||
|
||||
# 실패 시 배포 중단
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ 배포 취소: 검증 실패"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
### 수동 모니터링
|
||||
|
||||
```bash
|
||||
# 현재 상태 확인
|
||||
/report
|
||||
|
||||
# 상세 검증
|
||||
/validate --level=full
|
||||
|
||||
# 성능 분석
|
||||
/web-dev --analyze
|
||||
|
||||
# 부피 회귀 테스트
|
||||
node src/measure.mjs gasiseol --ir --compare-baseline
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 실행 흐름 예시
|
||||
|
||||
### 성공 경로 (Happy Path)
|
||||
|
||||
```
|
||||
1. /convert gasiseol
|
||||
├─ Research: ✅ (2분)
|
||||
├─ Pipeline: ✅ (8분)
|
||||
├─ WebUI: ✅ (병렬 동안)
|
||||
└─ Deploy: ✅ (4분)
|
||||
|
||||
총 소요: ~15분
|
||||
결과: https://dxf-to-3d.tk ✅
|
||||
```
|
||||
|
||||
### 오류 + 복구 경로
|
||||
|
||||
```
|
||||
1. /convert gasiseol
|
||||
├─ Research: ✅
|
||||
├─ Pipeline: ❌ (부피 오차 1.2%)
|
||||
│ └─ 체크포인트: .claude/artifacts/gasiseol-cp-1.json
|
||||
│ └─ 원인: assemble() 함수 오류
|
||||
│
|
||||
└─ 복구:
|
||||
1. assemble() 함수 수정
|
||||
2. Pipeline 재실행
|
||||
3. /validate --level=3 (3D 검증만)
|
||||
4. ✅ 부피 오차 0.3%
|
||||
5. Deploy 진행
|
||||
|
||||
추가 소요: ~10분
|
||||
총: ~25분
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 베스트 프랙티스
|
||||
|
||||
### ✅ 해야 할 것
|
||||
|
||||
```
|
||||
✓ 매 에이전트 완료 후 체크포인트 저장
|
||||
✓ 오류 시 즉시 원인 파악
|
||||
✓ PROGRESS.md 상태 유지
|
||||
✓ 부분 실패 시 해당 에이전트만 재실행
|
||||
✓ 기준값과 항상 비교 (회귀 방지)
|
||||
✓ 성공/실패 모두 로그 기록
|
||||
```
|
||||
|
||||
### ❌ 하면 안 되는 것
|
||||
|
||||
```
|
||||
✗ 오류 무시하고 다음 단계 진행
|
||||
✗ 중간 파일 직접 수정 (에이전트가 신뢰할 수 없음)
|
||||
✗ 체크포인트 없이 전체 재실행
|
||||
✗ 기준값 무시 (오차율 승인 없이)
|
||||
✗ 에이전트 간 상태 공유 (파일 기반만 사용)
|
||||
✗ 로그 미기록 (추적 불가)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 변경 이력
|
||||
|
||||
- 2026-10-19: 초안 작성 (단계 7)
|
||||
|
||||
Reference in new issue
Block a user