**task-2260 완료 보고** (dev2-team) **task-2260 완료 보고서** (40분 56초) **핵심 결과** 3가지 패턴(getattr 안전 접근, isinstance 타입 가드, type: ignore 최소 사용)을 적용하여 85건 → 0건 달성. pytest 477건 전량 통과, npm build 성공, 서버 /api/status 정상 응답 확인. ## 수정 내용 ### 적용 패턴 1. **getattr 안전 접근**: `res.data` → `getattr(res, 'data', None)` — Pyright가 `maybe_single().execute()` 반환값의 `.data`를 None-able로 판단하는 문제 해결 2. **isinstance 타입 가드**: JSON 유니온 값에 `.get()`, `["key"]` 접근 전 `isinstance(x, dict)` / `isinstance(x, list)` 체크 3. **type: ignore 최소 사용**: SDK 타입 정의 불일치 (count 파라미터, pptx BaseShape, UploadFile.read) 3곳만 ### 수정 영역별 상세 - **라인 960~1070**: compliance 검증 — `ver_res.data`, `consent_res.data` 안전 접근, model_tier str 변환 - **라인 1130~1265**: FCPA 체크리스트 — `fcpa_res.data` 안전 접근, list comprehension 내 dict 필터, title unbound 해결 - **라인 3558~3572**: pptx 파싱 — `shape.table`, `shape.text_frame` type: ignore 추가 - **라인 테스트: pyright 0 errors **발견/해결 이슈 3건** 1. **Supabase SDK `maybe_single()` 타입 추론 문제** — `getattr` 패턴으로 우회. SDK 자체의 타입 정의가 `SingleAPIResponse | None`을 반환할 수 있다고 선언하기 때문. 2. **python-pptx BaseShape 타입 스텁 누락** — `type: ignore[attr-defined]` 사용. python-pptx 라이브러리에 타입 스텁이 없음. 3. **list comprehension 내 JSON 유니온 접근** — `isinstance(i, dict)` 필터를 comprehension 조건에 추가하여 타입 내로우잉 적용.