You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
코디 재현 엔진 consumer MVP의 실패 상태 8종(wireframes.md §4)이 F2~F6 각 화면에 빠짐없이 구현되었는지 통합 검증하고, VTON 모듈과의 의존성이 없음을 smoke test로 확인한다. F2~F6는 각각 자신의 실패 상태를 소유(구현)하고, F8은 누락된 실패상태를 catch하는 cross-cutting QA 역할만 담당한다.
범위
통합 검증 대상 (wireframes.md §4 표)
#
실패 상태
주인공 화면
구현 담당
F8 검증
1
비패션·저해상도 이미지
① Upload
F2
① 에러 메시지 & 재업로드 동선
2
분석 confidence 낮음
② Analysis
F3
② confidence 배지 시각화 & 다른 사진 유도
3
예산 초과
④ Recommended
F5
④ 예산 ±1 단계 제안 + 근접 세트 노출
4
품절·사이즈 없음
④·⑤
F5·F6
④ auto-swap + 유사도% 재표기, ⑤ 다음 후보 제시
5
affiliate 미커버
④·⑤
F5·F6
④ 비제휴 참고표시, ⑤ 제휴 대체 우선 노출
6
"안 비슷함" 👎 피드백
④
F5
④ 좋아요/싫어요 수집 → 인-플레이스 재랭킹
7
빈 결과(0건)
④
F5
④ "조건 과협소" 안내 + ③ 완화 유도
8
미가입 + 저장 시도
⑤
F6
⑤ 가입 모달(gated). (+)Saved 관련 상태는 F9 소유(F8 범위 밖)
Acceptance Criteria
화면 경로·라우트 검증
packages/web/app/cody/ 아래 5개 화면이 정확한 경로에만 존재:
① app/cody/page.tsx (Upload)
② app/cody/analysis/page.tsx
③ app/cody/conditions/page.tsx
④ app/cody/recommended/page.tsx
⑤ app/cody/item/[skuHash]/page.tsx
(보조) app/cody/saved/page.tsx, app/cody/looks/[slug]/page.tsx 존재 확인
금지 경로 미존재 확인: /recreate, /request, /(request), /(consumer), /cody/screens, /cody/detail 등 절대 금지 경로 스캔 (grep으로 경로 미존재 확인)
단일 adapter 검증
packages/web/lib/api/adapters/cody-match.ts 유일 존재 확인 (모든 타입 + entry function 포함)
lib/api/adapters/cody-match-mock.ts 존재 (mock data)
F3/F5/F6에서 다른 adapter 파일 생성 금지 (codyAnalysisAdapter.ts, recommended/adapter.ts, useCodyMatch.ts, CodyEngineAdapter 등 미존재)
grep: import.*adapter.*from.*[cC]ody → F3/F5/F6 파일이 cody-match.ts만 import 확인
TS 타입 mirror 검증 (cody-match-stage2 §2.1·§2.2)
CodyAnalysis 타입이 모든 필드 포함 (items[], style{mood[], season[], color_palette[], silhouette[]}, style_formula{must_keep[], replaceable[], core_combination, substitute_axis[]})
주의: fit 필드 없음 (fit은 client-only), confidence 필드 없음 (분석품질은 FE mock state)
목적
코디 재현 엔진 consumer MVP의 실패 상태 8종(wireframes.md §4)이 F2~F6 각 화면에 빠짐없이 구현되었는지 통합 검증하고, VTON 모듈과의 의존성이 없음을 smoke test로 확인한다. F2~F6는 각각 자신의 실패 상태를 소유(구현)하고, F8은 누락된 실패상태를 catch하는 cross-cutting QA 역할만 담당한다.
범위
통합 검증 대상 (wireframes.md §4 표)
Acceptance Criteria
화면 경로·라우트 검증
packages/web/app/cody/아래 5개 화면이 정확한 경로에만 존재:app/cody/page.tsx(Upload)app/cody/analysis/page.tsxapp/cody/conditions/page.tsxapp/cody/recommended/page.tsxapp/cody/item/[skuHash]/page.tsxapp/cody/saved/page.tsx,app/cody/looks/[slug]/page.tsx존재 확인/recreate,/request,/(request),/(consumer),/cody/screens,/cody/detail등 절대 금지 경로 스캔 (grep으로 경로 미존재 확인)단일 adapter 검증
packages/web/lib/api/adapters/cody-match.ts유일 존재 확인 (모든 타입 + entry function 포함)lib/api/adapters/cody-match-mock.ts존재 (mock data)import.*adapter.*from.*[cC]ody→ F3/F5/F6 파일이 cody-match.ts만 import 확인TS 타입 mirror 검증 (cody-match-stage2 §2.1·§2.2)
CodyAnalysis타입이 모든 필드 포함 (items[], style{mood[], season[], color_palette[], silhouette[]}, style_formula{must_keep[], replaceable[], core_combination, substitute_axis[]})fit필드 없음 (fit은 client-only),confidence필드 없음 (분석품질은 FE mock state)CandidateSKU타입이 stage2 §2.2 전 필드 포함 (sku_signature_hash, brand, product, color, category, price_krw, primary_image_url, product_url, source_domain, retailer_scope, confidence, reason, relaxation_level, image_verification)affiliate_url은 catalog_items(§7.1) 소속, CandidateSKU 아님ShopperPreference타입 (budget_krw, retailer_scope, country, gender, excluded_brands, preferred_retailers)fit필드 없음AnalysisQuality(FE-only): confidence 배지용, cody_analysis와 분리ClientOnlyFitPreference: 'over' | 'slim' | 'any' (ShopperPreference 아님, client-side only)실패 상태 소유권 검증 (각 화면이 자기 것 구현)
① Upload (F2 담당):
② Analysis (F3 담당):
AnalysisQuality.confidence배지 (수치 아님, 시각적 표시만) ✓④ Recommended (F5 담당) — 4가지:
⑤ Item Detail (F6 담당):
(+) Saved / Shop-this-look (F9 담당):
VTON 비의존 smoke test
app/cody/*화면 파일들이lib/components/vton,lib/stores/vtonStore,/api/v1/vton에서 import 0건from.*[vV]ton|vtonStore|/api/v1/vton→ app/cody 내 매치 0/cody라우트의 smoke test (로드 + 기본 flow) 시 VTON modal/state 미의존 확인스토어·컴포넌트 구조 검증
packages/web/lib/stores/codyStore.ts존재 (flow state 관리)packages/web/lib/components/cody/아래 화면별 컴포넌트들 (UploadScreen, AnalysisScreen 등)useImageUpload재사용 금지 확인 (F2 새 codyStore + 새 upload hook만)핵심 파일
mock·real 경계 (contract 출처)
decoded-docs/Architecture/cody-match-stage2.md §2.1(VLM 분석 결과 schema)cody-match-stage2.md §2.2(per-role 후보 SKU)cody-match-stage2.md §2.1(유저 조건, fit 필드 없음)cody-match-stage2.md— budget-100k / budget-500k / budget-1M / authentic의존성
F7 (mock→real reconcile) 는 본 F8과 독립 — F7은 체크리스트만, 구현 아님.
제약·주의
경로 절대 규칙
packages/web/app/cody/*packages/web/lib/components/cody/*packages/web/lib/stores/codyStore.tspackages/web/lib/api/adapters/cody-match.ts(유일)/recreate,app/request,app/(request),app/(consumer),/screens,/detail등타입 mirror 엄격
VTON 분리 (testable AC)
lib/components/vton/VtonModal.tsx,/lab/vton,/api/v1/vton/*존재 가능/cody/*smoke test 가 VTON modal/state 미의존 확인Upload 재사용 금지
useImageUpload재사용 ❌ (내부 requestStore + startDetection() → 옛 flow)DropZone+compressImage+uploadImage+ 새 cody upload hook/store 만 사용참조
참고
F8의 역할은 검증(QA)이지 구현이 아님. F2~F6이 각각:
F8은 이 8가지가 모두 구현됐는지, 경로/타입/adapter가 spec을 어기지 않는지 통합 검증만 수행한다.