# 미개발 분류 (Gap Taxonomy) — 킨텍스 감사 시 각 지점을 아래 유형으로 분류하고 근거(파일:라인)와 심각도를 붙인다. ## 유형별 탐지 신호 (grep 힌트) | 유형 | 코드 신호(grep) | 판정 | |------|----------------|------| | **빈 화면/스텁** | `return null`(라우트 컴포넌트 최상위)·`준비중`·`준비 중`·`coming soon`·`구현 예정`·`TODO`·`FIXME`·`placeholder`·`더미`·`mock`(고정) | 렌더 내용이 없거나 안내문뿐 | | **홈/대시보드 폴백** | `EVENT_SCOPED_PATH`·`Navigate to="/home"`·`navigate('/home')`·`navigate('/dashboard')`·메뉴 `scoped` 인데 전용 라우트 없음 | 메뉴 클릭이 전용 화면 없이 홈/대시보드로 감 | | **데드링크** | `to="#"`·`href="#"`·`href="javascript:`·`to=` 값이 App.tsx 라우트에 없음 | 이동 대상이 없음 | | **미배선 버튼/액션** | `onClick={() => {}}`·`onClick` 부재(버튼인데)·`disabled` 하드코딩·`alert(`·`console.log('TODO` | 눌러도 동작 없음 | | **미구현 API** | 프론트 `api.get/post('/api/...')` 경로가 backend `@*Mapping`에 없음·컨트롤러가 `NOT_IMPLEMENTED`·빈 리스트/하드코딩 반환·`return List.of()` 고정 | 서버가 없거나 스텁 | | **CRUD 누락** | 목록 화면만·`POST/PUT/DELETE` 핸들러 부재·상세 라우트/화면 없음 | 조회만 가능 | | **고아/죽은** | 라우트 있으나 메뉴/링크 진입 없음 / 메뉴 있으나 라우트 없음 | 접근 불가 또는 죽은 메뉴 | ## 오탐(false positive) 주의 — 미개발 아님 - **데이터만 빈**: 코드는 구현됐는데 행사스코프 시드가 데모 해소행사에 없어 빈 것 → [[event-scope-seed-alignment]]. **미개발 아님, 데이터 이슈로 별도 표기**(담당=testdata). - **역할 게이트로 미노출**: 권한상 안 보이는 것(관리자 전용 등)은 미개발 아님. - **degraded 폴백**: API 실패 시 의도적 폴백(그라디언트·안내) 있는 것은 정상 처리. - **의도적 외부/준비중**: iOS TestFlight "준비중" 등 명시적 로드맵 항목은 "계획됨"으로 표기(미개발과 구분). ## 심각도 - **P0**: 핵심 업무 흐름(로그인 후 주요 도메인 진입·부스/옥션/정산/관람객 핵심 CRUD) 차단. - **P1**: 주요 화면이 빈/폴백/데드링크. 메뉴에 있으나 동작 안 함. - **P2**: 부가·엣지·관리자 세부·모바일 mock. ## 정본 대조 `docs/PLANNING.md`(M1~M18·§5B 공통·역할/트랙)·`docs/design.md`(SCR 인벤토리)에 **있는데 미구현**인 것을 최우선. 기획에 없는 것은 "범위 외"로 표기. ## 4자 체인 스캔 순서 1. `AppShell.tsx` GROUPS/NavItem → 메뉴·`to`·`scoped` 목록 2. `App.tsx` `` → 라우트·컴포넌트 목록 3. 각 컴포넌트 파일 → 렌더 내용 판정(위 신호) 4. 컴포넌트가 부르는 `*Api.ts`/`api.*` 경로 → backend `@*Mapping` 대조 5. 공개 사이트: `PublicShell`·`screens/public/*` 동일 절차 6. (선택) `mobile/app/*` → API 배선 여부