백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/{name}/sources: 프로젝트에 소스 추가/업데이트
- InlineSourceConfig 재사용, KnowledgeRepository.upsert_source 호출
- DELETE /projects/{name}/sources/{source_name}: 소스 삭제
- 404 처리 + 외래 키 정리
- GET /projects/{name} 응답에 base_url 필드 추가
프론트엔드 API 레이어 (src/lib/api/):
- sources.ts: sourcesApi.create/delete + Zod 스키마 (Source, deleteSourceResponseSchema)
TanStack Query 훅 (src/hooks/):
- useSources.ts: useCreateSource, useDeleteSource (mutation + 캐시 무효화)
- queryKeys에 sources.byProject 키 팩토리
ConfigureSourcesPage 완전 교체 (src/pages/):
- 2열 레이아웃: 등록된 소스 목록 + 소스 추가 폼
- react-hook-form + zod 검증 (name 정규식, type enum, trust 0~1, rate_limit 1~600)
- 소스 카드 표시: type 배지, 신뢰도, base_url 링크, 삭제 버튼
- 빈 상태/로딩 스켈레톤/에러+재시도 모두 처리
- "크롤 진행" 버튼은 소스 1개 이상일 때만 활성
- sonner 토스트 알림
i18n locale 키 sources.* 추가 (한/영)
다음 단계: Phase 1.3 — URL 시드 크롤 (CrawlPage 실제 구현)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/inline 추가: 파일 시스템 의존 없이 JSON 본문으로 ProjectConfig 인라인 생성
- CreateProjectInlineRequest + InlineSourceConfig Pydantic 모델
- GET /domains 추가: 미리 정의된 도메인 목록 (perfume, tea, coffee, candle, supplement, gift)
- 각 도메인의 entity_types, predicates, attribute_count 반환
프론트엔드 API 레이어 (src/lib/api/):
- domains.ts: domainsApi.list + Zod 스키마
- ontology.ts: ontologyApi.get(domain) + Zod 스키마
- projects.ts: createInline() 메서드 + CreateProjectInlineRequest 타입
TanStack Query 훅 (src/hooks/):
- useDomains: 도메인 목록 (30분 staleTime)
- useOntology(domain): 도메인 상세
- useCreateProjectInline: 인라인 생성 mutation + projects 캐시 무효화
- queryKeys에 domains, ontology 키 팩토리 추가
UI 프리미티브 (src/components/ui/):
- input.tsx, label.tsx, textarea.tsx
OnboardingPage 완전 교체 (src/pages/OnboardingPage.tsx):
- react-hook-form + zod 검증 (project_name 정규식, 도메인 필수)
- 도메인 카드 그리드 선택 (entity/predicate 개수 미리보기)
- 백엔드 /projects/inline POST → 성공 시 sonner 토스트 + /sources/{name}으로 이동
- 로딩/에러/재시도 UI
기타:
- Vite proxy에 /domains prefix 추가
- i18n locale 키 onboarding.* 추가 (한/영)
다음 단계: Phase 1.2 — 온톨로지 엔티티/클레임 직접 입력 + URL 추출
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
구현 사항:
1. SubgraphRetriever.retrieve_by_semantic_query() 추가
- 쿼리 임베딩 기반 의미 유사도 검색
- 코사인 유사도로 관련 엔티티 자동 발견
- 의미 임계값(min_similarity) 기반 필터링
- N-hop 확장으로 컨텍스트 그래프 추출
2. Phase 5 GraphRAG API 엔드포인트 완성 (phase5_app.py)
- POST /api/v1/graph/resolve: 엔티티 중복 감지/병합
- POST /api/v1/graph/subgraph: N-hop 부분그래프 추출
- POST /api/v1/graph/subgraph/semantic: 의미 기반 부분그래프 추출
- POST /api/v1/graph/patterns/paths: 경로 검색
- POST /api/v1/graph/patterns/cycles: 순환 감지
- POST /api/v1/graph/analytics/centrality: 중심성 분석
- POST /api/v1/graph/analytics/communities: 커뮤니티 감지
3. 종합 테스트 스위트 작성
- test_entity_resolver.py: 24개 테스트 ✅
- test_subgraph_retriever.py: 15개 테스트 ✅
- test_phase5_app.py: 25개 테스트 ✅
- test_rdf_converter.py: 2개 테스트 ✅
- 총 66개 테스트, 모두 통과
성능 목표:
- 벡터 임베딩: 10K 엔티티 5초 내
- 의미 검색: 상위 K개 매칭 < 200ms
- 부분그래프 추출: 2-hop 쿼리 < 200ms
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Entity Resolver (벡터 + Jaro-Winkler 유사도) 테스트 구현 완료
- 24개 유닛 테스트 모두 통과
- TestEntityNormalization: 라벨 정규화 테스트 (4개)
- TestJaroWinklerSimilarity: 텍스트 유사도 테스트 (4개)
- TestTextSimilarity: 텍스트 유사도 계산 테스트 (4개)
- TestEntityResolverInit: 초기화 테스트 (3개)
- TestDuplicateDetection: 중복 감지 테스트 (4개, 비동기)
- TestClusterResolution: 클러스터 병합 테스트 (2개, 비동기)
- TestResolutionReport: 리포트 생성 테스트 (3개)
- entity_resolver.py datetime.utcnow() → datetime.now(UTC) 변환
- textdistance>=4.6.0 의존성 추가
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Update all datetime.utcnow() to datetime.now(UTC) for Python 3.12+ compatibility
- Update all datetime.utcfromtimestamp() to datetime.fromtimestamp(..., UTC)
- Fix dataclass default_factory to use lambda: datetime.now(UTC)
- Update auth, audit, billing, and realtime modules
- Add UTC import from datetime module
- Update pytest configuration to include pytest-asyncio
- All 28 Phase 8 enterprise tests pass with no warnings
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
[GraphAnalytics]
- calculate_centrality(type): degree, pagerank, betweenness, closeness
- detect_communities(algorithm): Louvain, label propagation
- get_graph_statistics(): density, diameter, connectivity
- find_influential_entities(): 복합 점수 기반 중요도 분석
- Community 데이터 클래스
[특징]
- 정규화된 점수 (0-1 범위)
- 순위 지정 (1, 2, 3, ...)
- GDS 라이브러리 지원 (폴백 포함)
- 성능 최적화된 Cypher 쿼리
[테스트]
- test_phase5_graph_analytics.py (8 테스트 통과)
- 모든 통합 테스트 통과
Phase 5.0-5.2 완성!
다음: API 엔드포인트 통합
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>