1c29b4ee8a
feat(autoScale): calculateScale TDD (v0-plan Task 8 — 핵심 차별화)
...
src/features/autoScale/calculateScale.ts:
- 사진 어깨 픽셀 / 카메라 옷 너비 픽셀 = 스케일
- 카메라 옷 너비 ≤ 0 → scale=1, confidence=0 폴백
- 비율 [0.3, 3.0] 클램핑 → 클램핑 시 confidence=0.5, 정상 시 confidence=1.0
src/features/autoScale/__tests__/calculateScale.test.ts:
- 6 케이스 TDD: 정상비율 / 0폴백 / 음수폴백 / 상한클램핑 / 하한클램핑 / 클램핑X
검증:
- npx jest src/features/autoScale: 6 passed
- 전체 npm test: 5 suites / 15 tests passed (sanity 1 + pose 1 + photoValidation 3 + maskSplit 4 + autoScale 6)
- npx tsc --noEmit: 무에러
남은 부분 (v0-plan Task 8):
- detectClothWidthPx (네이티브 saliency 호출) — v0 폴백 scale=1, 보강은 Task 12에서
- usePinchScale hook (gesture-handler) — UI 통합 시점에 작성
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 15:55:12 +09:00
8ec53d95f0
feat(maskSplit): computeSplitRegions TDD (v0-plan Task 6)
...
src/features/maskSplit/splitMask.ts:
- Region / SplitRegions / ImageSize 타입
- 상의(어깨-20 ~ 골반) / 하의(골반 ~ 발목+20) / 전신(어깨-80 ~ 발목+20)
- x 범위: keypoint bbox ±20px
- requireJoint helper: validatePose 통과 후 호출 invariant — 누락 시 explicit throw
src/features/maskSplit/__tests__/splitMask.test.ts:
- 4 케이스 TDD: top / bottom / full y 좌표 + 공통 x 범위
검증:
- npx jest src/features/maskSplit: 4 passed
- npx tsc --noEmit: 무에러
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 15:54:17 +09:00
6f2998ef5f
feat(photoValidation): validatePose TDD 3 케이스 (v0-plan Task 5)
...
src/features/photoValidation/validatePose.ts:
- 필수 6개 joint(어깨/골반/발목) 신뢰도 0.5↑ 검사
- 어깨 y 차이 30px 초과 시 기울어짐 사유 추가
- score = 100 - reasons × 25, passed = score ≥ 80
- 한국어 격조사 정확히 ('어깨가', '골반이', '발목이')
src/features/photoValidation/__tests__/validatePose.test.ts:
- 3 케이스 TDD: 정상 / 어깨 누락 / 기울어짐
- RED(Cannot find module) → GREEN(3 passed) 사이클 확인
검증:
- npx jest src/features/photoValidation: 3 passed
- npx tsc --noEmit: 무에러
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 15:53:05 +09:00
0f12be57cf
feat(pose): TS wrapper + PoseResult 타입 + Jest mock test (v0-plan Task 4 일부)
...
src/features/pose/index.ts:
- Keypoint / Joint / PoseResult 타입 정의 (Vision Framework joint name 매핑)
- detectPose 함수: NativeModules.PoseModule.detectPose wrapper
- wrapper 내부 매번 NativeModules 조회 → 테스트의 NativeModule 주입 가능
src/features/pose/__tests__/pose.test.ts:
- NativeModules.PoseModule 직접 할당 mock (jest.mock 호이스팅 + jest-expo Platform 충돌 회피)
- detectPose 호출 → mock 결과 그대로 반환되는지 검증
검증:
- npx jest src/features/pose: 1 passed
- npx tsc --noEmit: 무에러
남은 부분 (Mac 작업):
- modules/pose/ios/PoseModule.swift (VNDetectHumanBodyPoseRequest 17점 keypoint)
- modules/pose/ios/PoseModule.m (RCT_EXTERN_MODULE)
- 실기기 manual test: keypoint를 사진 위 overlay로 시각 검증
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 15:51:43 +09:00
2919b7b4ac
chore: initial Expo SDK 56 + RN 0.85 + TS 6 setup with vision-camera/skia deps
...
W1 Task 1 Windows 가능 범위 완료.
핵심 파일:
- package.json: lapie name + scripts(start/ios/android/web/test/typecheck)
- app.json: bundleIdentifier com.lapie.app + iOS 권한 3종
(NSCameraUsageDescription, NSPhotoLibraryUsageDescription, NSPhotoLibraryAddUsageDescription)
- tsconfig.json: strict + noUncheckedIndexedAccess + types:["jest"]
- jest.config.js: jest-expo preset
- src/__tests__/sanity.test.ts: jest 동작 검증용 (W1 Task 3에서 실제 테스트로 대체 예정)
의존성:
- expo ~56.0.4, react 19.2.3, react-native 0.85.3
- react-native-vision-camera ^5.0.10
- @shopify/react-native-skia 2.6.2
- react-native-worklets-core ^1.6.3
- react-native-gesture-handler ~2.31.1
- react-native-safe-area-context ~5.7.0
- zustand ^5.0.13
- jest ^29.7.0, jest-expo ^56.0.4, @types/jest ^30
SDK 버전은 v0-plan(2026-05-23 작성)의 표기보다 상향:
- Expo SDK 52 → 56 (작업 시점 최신 stable)
- RN 0.76 → 0.85, TS 5 → 6
- vision-camera v4 → v5, skia v1 → v2.6
plan은 "7월 착수 직전 재검토" 명시 — 작업 시점 최신 적용.
검증:
- npx tsc --noEmit: 무에러
- npm test: sanity 1 passed
다음 단계 (Mac):
- npx expo prebuild --platform ios
- npx expo run:ios --device
- W1 Task 2 (vision-camera 카메라 화면 + 권한)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 15:41:31 +09:00
1a03b71779
docs: initial spec, v0-plan, brainstorming, CLAUDE.md harness rules
...
- docs/spec.md: 정식 spec (브랜드·시장·기술 스택·일정·Day 0 검증 결과)
- docs/v0-plan.md: W1~W4 13 task 구현 plan (TDD + manual test 절차)
- docs/brainstorming-raw.md: 2026-05-23 brainstorming 원본
- CLAUDE.md: 하네스 운영 규약 (컨텍스트 3단·agentic 7 구성요소·박재오 Why 정합도)
- README.md: 입구 + v0 상태 표
- .gitattributes: Windows ↔ macOS LF 통일 + pbxproj 바이너리 처리
- src/, modules/ 폴더 구조 (.gitkeep)
박재오 + AI agent 협업 표준 정립. 7월 착수 → 5/24 앞당김.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 15:31:41 +09:00