Skip to content

feat(analysis): 분석 실패 단계 노출 + Supabase 진단 로그 수집 - #42

Merged
devpark435 merged 3 commits into
devfrom
worktree-idempotent-crunching-beacon
Jul 30, 2026
Merged

feat(analysis): 분석 실패 단계 노출 + Supabase 진단 로그 수집#42
devpark435 merged 3 commits into
devfrom
worktree-idempotent-crunching-beacon

Conversation

@devpark435

@devpark435 devpark435 commented Jul 30, 2026

Copy link
Copy Markdown
Owner

문제

분석 실행 시 "분석 중 문제가 발생했어요"만 반복 표시. _startAnalysis()의 단일 catch가 실패 지점 6개를 하나의 메시지로 뭉갬. TestFlight엔 콘솔이 없어 debugPrint 진단도 전부 사라짐.

변경

1. 실패 단계 노출

  • 스낵바에 [영상 자르기|첫 프레임 추출|레인 검출|호모그래피 계산|분석 파이프라인] 단계에서 실패했어요
  • "자세히" → 예외 + 스택트레이스 선택복사 다이얼로그
  • ffmpeg 실패 시 로그 마지막 12줄을 예외 메시지에 첨부

2. Supabase 진단 로그

  • DebugLogBufferdebugPrint를 감싸 최근 400줄 적재. 절단 시 tail 보존
  • AnalysisDebugLogService — 분석 1회당 analysis_debug_logs에 한 행. 업로드 예외는 전부 삼킴
  • 성공 케이스도 기록. landmark_speed_kmh / legacy_speed_kmh / speed_source / trajectory_source / 검출 프레임 수를 metrics(jsonb)로 축적 → 구속 정확도를 표본 1개가 아닌 분포로 판단

3. 부수

  • package_info_plus 정식 의존성 추가 (기존 settings_page 미선언 의존성도 해소)
  • 존재하지 않고 참조도 없는 assets/videos/ pubspec 항목 제거
  • 빌드번호 1.3.0+7

DB

analysis_debug_logs 테이블 적용 완료 (2026-07-30). 11컬럼, RLS on, 본인 행만 insert/select하는 정책 2개, 인덱스 2개. 보안 어드바이저에 이 테이블 관련 경고 없음.

SQL은 supabase/migrations/20260730_analysis_debug_logs.sql에 기록용으로 보관 (재실행 안전).

검증

  • flutter analyze lib/ — 신규 파일 0 issues (기존 7건은 무관한 선행 이슈)
  • flutter test test/core/services/debug_log_buffer_test.dart — 7 passed
  • flutter test test/features/analysis — 210 passed
  • flutter test 전체 — test/widget_test.dart 1건 실패. 선행 이슈: 스모크 테스트가 Supabase.initialize 없이 BowlingDiaryApp을 pump해 _instance._isInitialized assertion. 이번 변경과 무관하며 손대지 않음

제거 대상 (공개 배포 전)

QA 뱃지 · 진단 필드 · DebugLogBuffer · AnalysisDebugLogService · analysis_debug_logs 테이블

[analysis_trim_page]
- 실패 지점 6개가 "분석 중 문제가 발생했어요" 하나로 뭉개져 TestFlight에서
  원인 파악이 불가능했다. 단계 라벨(영상 자르기/첫 프레임 추출/레인 검출/
  호모그래피 계산/분석 파이프라인)을 스낵바에 표기
- 스낵바 "자세히" 액션에서 예외+스택을 SelectableText로 확인 가능 (내부 QA용,
  공개 배포 전 제거)
- ffmpeg 실패 시 returnCode만으론 원인을 알 수 없어 로그 마지막 12줄을
  예외 메시지에 첨부

[pubspec]
- TestFlight 재업로드용 빌드번호 1.3.0+7
TestFlight엔 콘솔이 없어 파이프라인이 뱉는 진단(debugPrint)이 전부
사라진다. 실패 원인 추적과 구속 표본 축적을 동시에 해결한다.

[core]
- DebugLogBuffer — debugPrint를 감싸 최근 400줄 링 버퍼에 적재.
  dump()는 절단 시 tail 보존(실패 직전 줄이 가장 중요)
- main에서 install(). 중복 install 시 래퍼 중첩 방지

[analysis]
- AnalysisDebugLogService — 분석 1회당 analysis_debug_logs에 한 행.
  업로드 예외는 전부 삼킨다(진단 수집이 분석을 깨면 안 됨)
- 성공/실패 양쪽 기록. 성공 시 랜드마크·기존 구속 두 값과 궤적 소스,
  검출 프레임 수를 metrics(jsonb)로 남겨 표본을 쌓는다
- 트림 시작 시 버퍼 clear — 직전 세션 로그 혼입 방지

[supabase]
- migrations/20260730_analysis_debug_logs.sql — 테이블 + RLS(본인 행만
  insert/select). 대시보드 SQL Editor에서 수동 적용 필요

[pubspec]
- package_info_plus 추가 (앱 버전 기록용, 기존 settings_page의 미선언
  의존성도 함께 해소)
- 존재하지 않고 참조도 없는 assets/videos/ 항목 제거
@devpark435 devpark435 changed the title fix(analysis): 분석 실패 원인 단계별 노출 feat(analysis): 분석 실패 단계 노출 + Supabase 진단 로그 수집 Jul 30, 2026
@devpark435
devpark435 marked this pull request as ready for review July 30, 2026 07:11
@devpark435
devpark435 merged commit 0a9bcad into dev Jul 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant