세 축 + 상태·권한 + 오버레이. 🟢 는 근거·구현·검증이 모두 있는 것 — 닫아도 되는 칸이다.
이 문서는 같은 색인에서 만든 여러 보기 중 하나입니다 — 여정 지도는 사용자 흐름을, 백엔드·흐름 지도와 오픈 체크리스트는 API와 실행 관문을 보여주고, 이 목록은 전부를 한 자리에 둡니다. 모두 같은 번호·같은 색을 씁니다. 번호를 누르면 복사되고, 그 번호로 에이전트에게 지시하면 됩니다. 끊긴 자리는 고장이 아니라 물어볼 자리입니다.아래 숫자는 “고장난 개수”가 아닙니다. 아직 아무도 채우지 않은 칸의 개수입니다. 이 칸들이 비어 있는 동안에는 그 요소에 색을 칠할 근거가 없습니다 — 즉 2단계로 갈 수 없습니다.
코드에서 이 요소를 가리키는 표식이 약해, 파일이 바뀌면 번호가 엉뚱한 곳을 가리킬 수 있다. 표식을 심어야 번호가 오래 간다.
현재 Reader가 자동 테스트와 이 요소를 안정적으로 결속할 표식(test id 등)을 찾지 못했다. 다른 selector나 runtime 근거가 있을 수 있어 미검출을 미검증으로 단정하지 않는다.
화면에 글자 없이 아이콘만 있거나 번역 키가 안 잡힌 것. 대표님이 말로 지칭할 이름이 없다.
"이게 무엇을 하는가"를 한 줄로 쓴 사람이 아직 없다. 기계가 못 만드는 칸이라 사람이 채워야 한다.
아래 셋은 서로 다른 이야기입니다. 한 덩어리로 읽으면 “다 고장났다”로 잘못 읽힙니다. 아무도 안 부르는 API, 화면은 부르는데 누를 버튼이 없는 API, 버튼은 있는데 뒤가 없는 화면 — 각각 해야 할 일이 다릅니다.
백엔드에는 있지만 현재 정적 Reader가 화면 호출 연결을 찾지 못했다.
할 일 — 서버·CLI·worker·외부 연동 진입점인지, 동적 호출을 추출하지 못했는지, 실제 미사용 후보인지 근거를 확인한다. 이 숫자만으로 삭제하지 않는다.
화면 수준 호출은 찾았지만 현재 정적 Reader가 특정 요소와의 연결을 찾지 못했다.
할 일 — 화면 초기 조회처럼 요소가 필요 없는 정상 호출인지, 동적 handler를 놓쳤는지, 실제 UI 연결이 빠졌는지 확인한다.
요소는 찾았지만 현재 정적 Reader가 이 화면의 API 호출 연결을 찾지 못했다.
할 일 — API 없이 동작하는 정상 화면인지, 동적 호출을 놓쳤는지, 실제 구현 연결이 빠졌는지 화면별 근거로 확인한다.
주소는 있지만 현재 정적 Reader가 이 화면으로 가는 링크를 찾지 못했다.
할 일 — 동적 navigation을 놓쳤는지, 직접 URL·외부 진입점인지, 의도적으로 숨긴 화면인지 확인한다.
같은 창구를 부르는데 어떤 곳은 신분을 싣고 어떤 곳은 안 싣는다.
할 일 — 같은 사람의 화면끼리 갈리면 설계로 설명이 안 된다 — 안 싣는 쪽이 401을 받고 있을 수 있다. 실제로 그런 일이 있었다.
가져오다 실패해도 빈 값으로 갈음한다 — 화면은 멀쩡해 보인다.
할 일 — 빈 목록이 '없음'인지 '못 가져옴'인지 사용자가 구분할 수 없다. 이 도구의 색이 절대 못 잡는 자리다 — 여기만은 사람이 봐야 한다.
| 번호 | 메서드 | 경로 | 핸들러 | 테스트 |
|---|---|---|---|---|
| BE-0020 | DELETE | /api/v1/stadiums/{id}/reviews/{reviewId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:190 |
deleteReview |
없음 |
| BE-0026 | GET | /api/v1/admin/clubssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:34 |
getClubs |
없음 |
| BE-0032 | GET | /api/v1/admin/engagementssports-pie-main-api/src/main/java/com/sportspie/common/controller/AdminEngagementController.java:34 |
getEngagements |
없음 |
| BE-0033 | GET | /api/v1/admin/facilitiessports-pie-main-api/src/main/java/com/sportspie/facility/controller/AdminFacilityController.java:41 |
getFacilities |
없음 |
| BE-0039 | GET | /api/v1/admin/mesports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminMeController.java:30 |
me |
없음 |
| BE-0041 | GET | /api/v1/admin/postssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminPostController.java:26 |
getPosts |
없음 |
| BE-0042 | GET | /api/v1/admin/promotion-labelssports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionLabelController.java:41 |
getPromotionLabels |
없음 |
| BE-0043 | GET | /api/v1/admin/promotionssports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionController.java:43 |
getPromotions |
없음 |
| BE-0045 | GET | /api/v1/admin/reportssports-pie-main-api/src/main/java/com/sportspie/report/controller/AdminReportController.java:29 |
getReports |
없음 |
| BE-0050 | GET | /api/v1/admin/stadium-reservationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:45 |
getReservations |
없음 |
| BE-0054 | GET | /api/v1/admin/stadiumssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:75 |
getStadiums |
없음 |
| BE-0061 | GET | /api/v1/admin/stadiums/{id}/reviewssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:210 |
getReviews |
없음 |
| BE-0064 | GET | /api/v1/admin/stadiums/{stadiumId}/postssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:40 |
list |
없음 |
| BE-0067 | GET | /api/v1/admin/userssports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:37 |
getUsers |
없음 |
| BE-0070 | GET | /api/v1/clubssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:50 |
list |
없음 |
| BE-0075 | GET | /api/v1/clubs/{id}/postssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:218 |
posts |
없음 |
| BE-0088 | GET | /api/v1/home/popular-stadiumssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:53 |
popularStadiums |
없음 |
| BE-0112 | GET | /api/v1/stadiumssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:50 |
list |
없음 |
| BE-0115 | GET | /api/v1/stadiums/{id}/postssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:128 |
posts |
없음 |
| BE-0117 | GET | /api/v1/stadiums/{id}/reviewssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:109 |
reviews |
없음 |
| BE-0154 | PATCH | /api/v1/stadiums/{id}/reviews/{reviewId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:178 |
updateReview |
없음 |
| BE-0173 | POST | /api/v1/auth/email/otp/sendsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:127 |
sendEmailOtp |
없음 |
| BE-0174 | POST | /api/v1/auth/email/otp/verifysports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:134 |
verifyEmailOtp |
없음 |
| BE-0175 | POST | /api/v1/auth/find-idsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:165 |
findId |
없음 |
| BE-0176 | POST | /api/v1/auth/loginsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:188 |
login |
없음 |
| BE-0177 | POST | /api/v1/auth/logoutsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:214 |
logout |
없음 |
| BE-0180 | POST | /api/v1/auth/password/resetsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:156 |
resetPassword |
없음 |
| BE-0181 | POST | /api/v1/auth/password/reset/otpsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:147 |
sendPasswordResetOtp |
없음 |
| BE-0182 | POST | /api/v1/auth/refreshsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:198 |
refresh |
없음 |
| BE-0183 | POST | /api/v1/auth/signupsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:176 |
signup |
없음 |
| BE-0184 | POST | /api/v1/auth/socialsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:111 |
socialLogin |
없음 |
| BE-0225 | POST | /api/v1/stadiums/{id}/reviewssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:167 |
createReview |
없음 |
| 번호 | 메서드 | 경로 | 핸들러 | 부르는 화면 |
|---|---|---|---|---|
| BE-0023 | GET | /api/feedback/guest/unread-countsports-pie-main-api/src/main/java/com/sportspie/feedback/controller/FeedbackController.java:50 |
getUnreadCount |
SH-S31 |
| BE-0031 | GET | /api/v1/admin/dashboardsports-pie-main-api/src/main/java/com/sportspie/common/controller/AdminDashboardController.java:108 |
getDashboardData |
AD-S01SH-S01 |
| BE-0051 | GET | /api/v1/admin/stadium-reservations/today-countsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:35 |
getTodayReservationCount |
AD-S12 |
| BE-0055 | GET | /api/v1/admin/stadiums/status-countssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:105 |
getStatusCounts |
AD-S12 |
| BE-0058 | GET | /api/v1/admin/stadiums/{id}/description/translationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:142 |
getDescriptionTranslations |
AD-S13 |
| BE-0060 | GET | /api/v1/admin/stadiums/{id}/promotion-labelssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:283 |
getPromotionLabels |
AD-S13 |
| BE-0068 | GET | /api/v1/admin/users/{id}sports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:70 |
getUser |
AD-S08 |
| BE-0084 | GET | /api/v1/home/bannerssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:41 |
banners |
SH-S23 |
| BE-0085 | GET | /api/v1/home/hot-eventssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:67 |
hotEvents |
US-S02 |
| BE-0087 | GET | /api/v1/home/mega-eventssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:80 |
megaEvents |
US-S02 |
| BE-0089 | GET | /api/v1/home/recommended-clubssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:92 |
recommendedClubs |
US-S02 |
| BE-0096 | GET | /api/v1/me/notification-settingssports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:69 |
getNotificationSettings |
US-S32 |
| BE-0097 | GET | /api/v1/me/notificationssports-pie-main-api/src/main/java/com/sportspie/notification/controller/NotificationController.java:30 |
list |
SH-S34SH-S36 |
| BE-0098 | GET | /api/v1/me/notifications/unread-countsports-pie-main-api/src/main/java/com/sportspie/notification/controller/NotificationController.java:47 |
unreadCount |
US-S02 |
| BE-0099 | GET | /api/v1/me/profilesports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:36 |
getProfile |
US-S02US-S10US-S34 |
| BE-0103 | GET | /api/v1/oauth/authorize-infosports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:54 |
authorizeInfo |
US-S25 |
| BE-0111 | GET | /api/v1/promotions/{id}/engagementsports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:90 |
engagement |
SH-S44 |
| BE-0114 | GET | /api/v1/stadiums/{id}/availabilitysports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:98 |
availability |
US-S36 |
| BE-0116 | GET | /api/v1/stadiums/{id}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:144 |
postDetail |
US-S38 |
| BE-0150 | PATCH | /api/v1/me/notification-settingssports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:80 |
updateNotificationSettings |
US-S32 |
| BE-0151 | PATCH | /api/v1/me/notifications/readsports-pie-main-api/src/main/java/com/sportspie/notification/controller/NotificationController.java:59 |
markAllRead |
SH-S34SH-S36 |
| BE-0189 | POST | /api/v1/clubs/{id}/bookmarkssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:482 |
toggleClubBookmark |
US-S04US-S06 |
| BE-0190 | POST | /api/v1/clubs/{id}/likessports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:470 |
toggleClubLike |
US-S04US-S06 |
| BE-0218 | POST | /api/v1/promotions/{id}/bookmarksports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:81 |
bookmark |
SH-S44 |
| BE-0219 | POST | /api/v1/promotions/{id}/likesports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:72 |
like |
SH-S44 |
| BE-0220 | POST | /api/v1/reportssports-pie-main-api/src/main/java/com/sportspie/report/controller/ReportController.java:34 |
create |
SH-S20 |
| BE-0222 | POST | /api/v1/stadiums/{id}/bookmarksports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:218 |
bookmark |
US-S04US-S36 |
| BE-0223 | POST | /api/v1/stadiums/{id}/likesports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:208 |
like |
US-S04US-S36 |
| BE-0224 | POST | /api/v1/stadiums/{id}/reservationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:156 |
reserve |
US-S36 |
| BE-0244 | POST | /api/v1/stadiums/reservations/{reservationId}/payment-invoicesports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:317 |
reissuePaymentInvoice |
US-S29 |
| 번호 | 화면 | 주소 | 레인 | 요소 |
|---|---|---|---|---|
| AD-S02 | NotFound | /admin/* |
관리자 웹 | 1 |
| AD-S06 | LoginPage | /admin/login |
관리자 웹 | 6 |
| AD-S07 | MembersPage | /admin/members |
관리자 웹 | 13 |
| AD-S25 | StandardPackagePage | /admin/standard-package |
관리자 웹 | 2 |
| SH-S03 | UserAppPreview | 여러 화면에 공용 | 공용 UI | 3 |
| SH-S06 | ClubEventsSection | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S07 | ClubInfoSection | 여러 화면에 공용 | 공용 UI | 3 |
| SH-S12 | StadiumLocationPicker | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S13 | EntryTableOverlay | 여러 화면에 공용 | 공용 UI | 6 |
| SH-S14 | ZoneCard | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S15 | StadiumNoticePreview | 여러 화면에 공용 | 공용 UI | 3 |
| SH-S16 | ClubTab | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S17 | AvatarCropDialog | 여러 화면에 공용 | 공용 UI | 3 |
| SH-S19 | FirstRunPreferenceSheet | 여러 화면에 공용 | 공용 UI | 4 |
| SH-S21 | FilterSheet | 여러 화면에 공용 | 공용 UI | 4 |
| SH-S24 | BottomSheetShell | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S25 | Button | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S26 | DatePickerSheet | 여러 화면에 공용 | 공용 UI | 3 |
| SH-S27 | HorizontalCarousel | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S28 | Input | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S29 | ToastContainer | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S30 | ClubPromoBanner | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S32 | AuthHeader | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S33 | DetailHeader | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S35 | HomeTopBar | 여러 화면에 공용 | 공용 UI | 3 |
| SH-S37 | HotEvents | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S38 | MegaHero | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S39 | PopularStadiums | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S40 | RecommendedClubs | 여러 화면에 공용 | 공용 UI | 3 |
| SH-S41 | SportSheet | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S42 | BottomNav | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S43 | LegalDocumentSheet | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S45 | BookingModal | 여러 화면에 공용 | 공용 UI | 6 |
| SH-S46 | PaymentModal | 여러 화면에 공용 | 공용 UI | 2 |
| SH-S47 | StadiumInfo | 여러 화면에 공용 | 공용 UI | 1 |
| SH-S54 | AdminLayout | 여러 화면에 공용 | 공용 UI | 15 |
| SH-S55 | StadiumSelector | 여러 화면에 공용 | 공용 UI | 3 |
| US-S01 | NotFoundPage | * |
사용자 웹 | 2 |
| US-S15 | ClubListPage | /club/list |
사용자 웹 | 7 |
| US-S20 | LoginPage | /login |
사용자 웹 | 12 |
| US-S21 | LoginRecoveryPage | /login/find-id /login/find-password |
사용자 웹 | 9 |
| US-S22 | MapPage | /map |
사용자 웹 | 9 |
| US-S26 | PgPaymentFlowReviewPage | /pg-review/payment-flow |
사용자 웹 | 2 |
| US-S33 | SignUpPage | /signup |
사용자 웹 | 11 |
확실 1개 — 주소가 화면 코드 어디에도 글자로조차 안 나옵니다. 아마 40개 — 가리키는 링크는 못 찾았지만 주소가 글자로는 나옵니다.
| 번호 | 화면 | 주소 | 확신 · 코드에 나온 조각 |
|---|---|---|---|
| US-S01 | NotFoundPage | * |
확실 |
| AD-S01 | DashboardPage | /admin |
아마 /admin |
| AD-S02 | NotFound | /admin/* |
아마 /admin |
| AD-S03 | ClubsPage | /admin/clubs |
아마 /admin/clubs |
| AD-S04 | ClubDetailPage | /admin/clubs/:id |
아마 /admin/clubs |
| AD-S05 | DesignGuidePage | /admin/design-guide |
아마 /admin |
| AD-S06 | LoginPage | /admin/login |
아마 /admin/login |
| AD-S07 | MembersPage | /admin/members |
아마 /admin |
| AD-S08 | MemberDetailPage | /admin/members/:id |
아마 /admin |
| AD-S09 | PostsPage | /admin/posts |
아마 /admin/posts |
| AD-S10 | BannersPage | /admin/posts/banners |
아마 /admin/posts |
| AD-S11 | PromotionsPage | /admin/promotions |
아마 /admin/promotions |
| AD-S12 | StadiumsPage | /admin/stadiums |
아마 /admin/stadiums |
| AD-S13 | StadiumInfoPage | /admin/stadiums/:id /admin/stadiums/:id/info |
아마 /admin/stadiums /admin/stadiums |
| AD-S14 | StadiumBoardPage | /admin/stadiums/:id/board |
아마 /admin/stadiums |
| AD-S15 | StadiumBoardDetailPage | /admin/stadiums/:id/board/:postId |
아마 /admin/stadiums |
| AD-S16 | StadiumBoardWritePage | /admin/stadiums/:id/board/:postId/edit /admin/stadiums/:id/board/write |
아마 /admin/stadiums /admin/stadiums |
| AD-S17 | StadiumReservationsDetailPage | /admin/stadiums/:id/reservations |
아마 /admin/stadiums |
| AD-S18 | StadiumReviewsPage | /admin/stadiums/:id/reviews |
아마 /admin/stadiums |
| AD-S19 | StadiumSettlementPage | /admin/stadiums/:id/settlement |
아마 /admin/stadiums |
| AD-S20 | StadiumZonesPage | /admin/stadiums/:id/zones |
아마 /admin/stadiums |
| AD-S21 | StadiumCodesPage | /admin/stadiums/codes /admin/stadiums/codes/* /admin/stadiums/codes/board /admin/stadiums/codes/board/:postId /admin/stadiums/codes/board/:postId/edit /admin/stadiums/codes/board/write /admin/stadiums/codes/info /admin/stadiums/codes/reservations /admin/stadiums/codes/reviews /admin/stadiums/codes/settlement /admin/stadiums/codes/zones /admin/system/facilities |
아마 /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin/stadiums /admin |
| AD-S22 | StadiumRegisterPage | /admin/stadiums/register |
아마 /admin/stadiums |
| AD-S23 | StadiumReservationsPage | /admin/stadiums/reservations |
아마 /admin/stadiums |
| AD-S24 | ReservationDetailPage | /admin/stadiums/reservations/:id |
아마 /admin/stadiums |
| AD-S25 | StandardPackagePage | /admin/standard-package |
아마 /admin |
| AD-S26 | SystemPage | /admin/system /admin/system/admin-log /admin/system/admins /admin/system/codes /admin/system/i18n /admin/system/menus /admin/system/permissions /admin/system/stadium-managers /admin/system/user-log |
아마 /admin /admin /admin /admin /admin /admin /admin /admin /admin |
| AD-S27 | IntegrationSettingsPage | /admin/system/integrations |
아마 /admin |
| AD-S28 | SystemSettingsPage | /admin/system/settings |
아마 /admin |
| US-S04 | ActivityFavoritesPage | /activity/favorites |
아마 /activity/favorites |
| US-S09 | ClubBoardWritePage | /club/:id/board/write |
아마 /club |
| US-S17 | EventsPage | /events |
아마 /events |
| US-S22 | MapPage | /map |
아마 /map |
| US-S23 | MegaEventListPage | /mega-event |
아마 /mega-event |
| US-S24 | MegaEventDetailPage | /mega-event/:id |
아마 /mega-event |
| US-S25 | OauthAuthorizePage | /oauth/authorize |
아마 /oauth/authorize |
| US-S26 | PgPaymentFlowReviewPage | /pg-review/payment-flow |
아마 /pg-review |
| US-S27 | ProfilePage | /profile |
아마 /profile |
| US-S30 | PromotionsPage | /promotions |
아마 /promotions |
| US-S31 | PromotionDetailPage | /promotions/:id |
아마 /promotions |
| US-S40 | PaymentResultPage | /payment/result |
아마 /payment |
이 목록은 없는 것을 세는 검사라 눈이 나쁘면 곧바로 틀립니다. 지금 목적지를 못 푼 링크가 12건 있습니다 — 그중 하나가 위 화면을 가리키고 있을 수 있습니다. 그래서 '확실'과 '아마'를 나눠 적습니다.
해당 없음.
| 화면 | 자리 | 무엇을 부르다 | 무엇으로 갈음 |
|---|---|---|---|
| AD-S17 | stadium-reservations.tsx:170 |
fetchStadiumDetail(Number(id)) |
null |
| AD-S18 | reviews.tsx:67 |
fetchStadiumDetail(Number(id)) |
null |
| SH-S44 | PromotionDetailView.tsx:156 |
fetchPromotionEngagement(promotion.id).then((state) => { if … |
undefined |
| SH-S54 | AdminLayout.tsx:155 |
http.post("/api/v1/auth/logout") |
undefined |
| US-S07 | page.tsx:58 |
fetchClubDetail(clubId).then((detail) => { if (generation !=… |
setClub(null) |
| US-S08 | page.tsx:98 |
.fetchClubDetail(clubId).then((c) => { if (generation === re… |
setClubName(null) |
| US-S13 | page.tsx:235 |
fetchClubDetail(clubId).then((club) => { if (generation === … |
setClubRole(null) |
| US-S29 | page.tsx:511 |
loadReservations() |
undefined |
| US-S29 | page.tsx:524 |
.await loadReservations() |
undefined |
| US-S37 | page.tsx:98 |
fetchStadiumDetail(stadiumId).then((detail) => { if (!cancel… |
undefined |
여기는 색이 절대 못 잡는 자리입니다. 테스트도 통과하고 화면도 그려지니 초록이 됩니다 — 그런데 서버가 오류를 내도 사용자는 빈 목록을 봅니다. "없음"인지 "못 가져옴"인지 구분할 방법이 없습니다.
백엔드 API 214개 중 0개(0%)가 sports-pie-main-api/src/main/java/com/sportspie/SportsPieMainApiApplication.java 한 파일 안에 있습니다.
지도에서 이 파일 하나가 거의 모든 선을 물고 있다는 뜻입니다. 이 파일을 건드리는 작업은 전부 서로를 밟습니다 — 한 번에 한 사람만 손댈 수 있고, 고장나면 여기서 같이 고장납니다.
종류: B 버튼 775 · L 링크 38 · F 입력창 184 · C 선택 48 · T 표 25 · D 표시 · M 창 · N 알림
반복 코드 자리는 하나인데 화면에서는 여러 개로 보입니다 (목록 안에서 그려지는 요소) — 카드가 두 장이어도 번호는 하나입니다. 카드 카드 전체가 하나의 링크입니다 — 이름 칸이 비어 있어도 정상입니다. → BE-#### 는 그 요소가 부르는 백엔드 API 번호이고, 빈 칸은 아직 이어진 곳을 못 찾았다는 뜻입니다.
BE-0169 처럼 넣으면 걸립니다| 번호 | 메서드 | 경로 | 핸들러 | 부르는 요소 | 테스트 |
|---|---|---|---|---|---|
| BE-0001 | DELETE | /api/v1/admin/banners/{id}sports-pie-main-api/src/main/java/com/sportspie/banner/controller/AdminBannerController.java:62 |
deleteBanner |
2 | 0 |
| BE-0002 | DELETE | /api/v1/admin/clubs/{clubId}/posts/{postId}/comments/{commentId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:72 |
deleteComment |
1 | 0 |
| BE-0003 | DELETE | /api/v1/admin/facilities/{id}sports-pie-main-api/src/main/java/com/sportspie/facility/controller/AdminFacilityController.java:78 |
deleteFacility |
1 | 0 |
| BE-0004 | DELETE | /api/v1/admin/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminPostController.java:41 |
deletePost |
1 | 0 |
| BE-0005 | DELETE | /api/v1/admin/promotion-labels/{id}sports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionLabelController.java:78 |
deletePromotionLabel |
1 | 0 |
| BE-0006 | DELETE | /api/v1/admin/promotions/{id}sports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionController.java:95 |
deletePromotion |
1 | 0 |
| BE-0007 | DELETE | /api/v1/admin/stadiums/{id}/imagessports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:399 |
removeImage |
1 | 0 |
| BE-0008 | DELETE | /api/v1/admin/stadiums/{stadiumId}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:105 |
delete |
2 | 0 |
| BE-0009 | DELETE | /api/v1/admin/stadiums/{stadiumId}/zones/{zoneId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:441 |
deleteZone |
1 | 0 |
| BE-0010 | DELETE | /api/v1/clubs/{id}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:128 |
delete |
1 | 0 |
| BE-0011 | DELETE | /api/v1/clubs/{id}/applications/mesports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:205 |
cancelMyApplication |
1 | 0 |
| BE-0012 | DELETE | /api/v1/clubs/{id}/membershipsports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:152 |
leave |
1 | 0 |
| BE-0013 | DELETE | /api/v1/clubs/{id}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:275 |
deletePost |
1 | 0 |
| BE-0014 | DELETE | /api/v1/clubs/{id}/posts/{postId}/comments/{commentId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:317 |
deleteComment |
1 | 0 |
| BE-0015 | DELETE | /api/v1/clubs/{id}/schedules/{schedId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:381 |
deleteSchedule |
1 | 0 |
| BE-0018 | DELETE | /api/v1/mesports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:114 |
withdraw |
1 | 0 |
| BE-0019 | DELETE | /api/v1/stadiums/reservations/{reservationId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:257 |
cancelReservation |
1 | 0 |
| BE-0020 | DELETE | /api/v1/stadiums/{id}/reviews/{reviewId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:190 |
deleteReview |
0 | 0 |
| BE-0021 | GET | /api/feedback/board/entriessports-pie-main-api/src/main/java/com/sportspie/feedback/controller/AdminFeedbackController.java:92 |
boardListEntries |
1 | 0 |
| BE-0022 | GET | /api/feedback/guest/entriessports-pie-main-api/src/main/java/com/sportspie/feedback/controller/FeedbackController.java:35 |
getEntries |
6 | 0 |
| BE-0023 | GET | /api/feedback/guest/unread-countsports-pie-main-api/src/main/java/com/sportspie/feedback/controller/FeedbackController.java:50 |
getUnreadCount |
0 | 0 |
| BE-0024 | GET | /api/v1/admin/bannerssports-pie-main-api/src/main/java/com/sportspie/banner/controller/AdminBannerController.java:30 |
getAllBanners |
4 | 0 |
| BE-0026 | GET | /api/v1/admin/clubssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:34 |
getClubs |
0 | 0 |
| BE-0027 | GET | /api/v1/admin/clubs/{clubId}/posts/{postId}/commentssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:61 |
getComments |
1 | 0 |
| BE-0028 | GET | /api/v1/admin/clubs/{id}sports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:85 |
getClub |
2 | 0 |
| BE-0029 | GET | /api/v1/admin/clubs/{id}/applicationssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:150 |
getApplications |
1 | 0 |
| BE-0030 | GET | /api/v1/admin/clubs/{id}/translationssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:104 |
getTranslations |
1 | 0 |
| BE-0031 | GET | /api/v1/admin/dashboardsports-pie-main-api/src/main/java/com/sportspie/common/controller/AdminDashboardController.java:108 |
getDashboardData |
0 | 0 |
| BE-0032 | GET | /api/v1/admin/engagementssports-pie-main-api/src/main/java/com/sportspie/common/controller/AdminEngagementController.java:34 |
getEngagements |
0 | 0 |
| BE-0033 | GET | /api/v1/admin/facilitiessports-pie-main-api/src/main/java/com/sportspie/facility/controller/AdminFacilityController.java:41 |
getFacilities |
0 | 0 |
| BE-0034 | GET | /api/v1/admin/feedback/entriessports-pie-main-api/src/main/java/com/sportspie/feedback/controller/AdminFeedbackController.java:26 |
adminListEntries |
0 | 0 |
| BE-0035 | GET | /api/v1/admin/feedback/entries/{id}/completion-checkssports-pie-main-api/src/main/java/com/sportspie/feedback/controller/AdminFeedbackController.java:83 |
adminListCompletionChecks |
0 | 0 |
| BE-0036 | GET | /api/v1/admin/integrationssports-pie-main-api/src/main/java/com/sportspie/common/integration/controller/AdminIntegrationSettingController.java:38 |
getIntegrations |
2 | 0 |
| BE-0039 | GET | /api/v1/admin/mesports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminMeController.java:30 |
me |
0 | 0 |
| BE-0040 | GET | /api/v1/admin/oauth/clientssports-pie-main-api/src/main/java/com/sportspie/oauth/controller/AdminOauthClientController.java:37 |
list |
0 | 0 |
| BE-0041 | GET | /api/v1/admin/postssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminPostController.java:26 |
getPosts |
0 | 0 |
| BE-0042 | GET | /api/v1/admin/promotion-labelssports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionLabelController.java:41 |
getPromotionLabels |
0 | 0 |
| BE-0043 | GET | /api/v1/admin/promotionssports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionController.java:43 |
getPromotions |
0 | 0 |
| BE-0044 | GET | /api/v1/admin/promotions/{id}sports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionController.java:58 |
getPromotion |
1 | 0 |
| BE-0045 | GET | /api/v1/admin/reportssports-pie-main-api/src/main/java/com/sportspie/report/controller/AdminReportController.java:29 |
getReports |
0 | 0 |
| BE-0047 | GET | /api/v1/admin/settingssports-pie-main-api/src/main/java/com/sportspie/common/setting/controller/AdminSystemSettingController.java:23 |
getAllSettings |
2 | 0 |
| BE-0048 | GET | /api/v1/admin/settlements/stadiums/{stadiumId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminSettlementStubController.java:48 |
getSettlementsByStadium |
2 | 0 |
| BE-0049 | GET | /api/v1/admin/settlements/{id}/faktursports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminSettlementStubController.java:33 |
getFakturPajak |
1 | 0 |
| BE-0050 | GET | /api/v1/admin/stadium-reservationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:45 |
getReservations |
0 | 0 |
| BE-0051 | GET | /api/v1/admin/stadium-reservations/today-countsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:35 |
getTodayReservationCount |
0 | 0 |
| BE-0052 | GET | /api/v1/admin/stadium-reservations/{id}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:65 |
getReservation |
3 | 0 |
| BE-0053 | GET | /api/v1/admin/stadium-reservations/{id}/historysports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:169 |
getHistory |
3 | 0 |
| BE-0054 | GET | /api/v1/admin/stadiumssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:75 |
getStadiums |
0 | 0 |
| BE-0055 | GET | /api/v1/admin/stadiums/status-countssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:105 |
getStatusCounts |
0 | 0 |
| BE-0056 | GET | /api/v1/admin/stadiums/{id}/adminssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:271 |
getStadiumAdmins |
0 | 0 |
| BE-0057 | GET | /api/v1/admin/stadiums/{id}/bookmarkssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:259 |
getBookmarkUsers |
1 | 0 |
| BE-0058 | GET | /api/v1/admin/stadiums/{id}/description/translationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:142 |
getDescriptionTranslations |
0 | 0 |
| BE-0059 | GET | /api/v1/admin/stadiums/{id}/likessports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:247 |
getLikeUsers |
1 | 0 |
| BE-0060 | GET | /api/v1/admin/stadiums/{id}/promotion-labelssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:283 |
getPromotionLabels |
0 | 0 |
| BE-0061 | GET | /api/v1/admin/stadiums/{id}/reviewssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:210 |
getReviews |
0 | 0 |
| BE-0062 | GET | /api/v1/admin/stadiums/{id}/settlement-accountsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:310 |
getSettlementAccount |
2 | 0 |
| BE-0063 | GET | /api/v1/admin/stadiums/{id}/settlement/summarysports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumSettlementController.java:59 |
getSettlementSummary |
2 | 0 |
| BE-0064 | GET | /api/v1/admin/stadiums/{stadiumId}/postssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:40 |
list |
0 | 0 |
| BE-0065 | GET | /api/v1/admin/stadiums/{stadiumId}/posts/summarysports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:56 |
summary |
3 | 0 |
| BE-0066 | GET | /api/v1/admin/stadiums/{stadiumId}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:68 |
get |
2 | 0 |
| BE-0067 | GET | /api/v1/admin/userssports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:37 |
getUsers |
0 | 0 |
| BE-0068 | GET | /api/v1/admin/users/{id}sports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:70 |
getUser |
0 | 0 |
| BE-0069 | GET | /api/v1/admin/users/{id}/stadium-scopessports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:132 |
getStadiumScopes |
3 | 0 |
| BE-0070 | GET | /api/v1/clubssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:50 |
list |
0 | 0 |
| BE-0072 | GET | /api/v1/clubs/{id}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:88 |
detail |
5 | 0 |
| BE-0073 | GET | /api/v1/clubs/{id}/applicationssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:166 |
applications |
4 | 0 |
| BE-0074 | GET | /api/v1/clubs/{id}/memberssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:141 |
members |
4 | 0 |
| BE-0075 | GET | /api/v1/clubs/{id}/postssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:218 |
posts |
0 | 0 |
| BE-0076 | GET | /api/v1/clubs/{id}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:235 |
postDetail |
4 | 0 |
| BE-0077 | GET | /api/v1/clubs/{id}/schedulessports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:332 |
schedules |
2 | 0 |
| BE-0078 | GET | /api/v1/clubs/{id}/schedules/{schedId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:341 |
scheduleDetail |
1 | 0 |
| BE-0079 | GET | /api/v1/common/bankssports-pie-main-api/src/main/java/com/sportspie/common/controller/CommonController.java:45 |
banks |
2 | 0 |
| BE-0080 | GET | /api/v1/common/categoriessports-pie-main-api/src/main/java/com/sportspie/common/controller/CommonController.java:30 |
categories |
1 | 0 |
| BE-0082 | GET | /api/v1/common/regionssports-pie-main-api/src/main/java/com/sportspie/common/controller/CommonController.java:52 |
regions |
1 | 0 |
| BE-0084 | GET | /api/v1/home/bannerssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:41 |
banners |
0 | 0 |
| BE-0085 | GET | /api/v1/home/hot-eventssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:67 |
hotEvents |
0 | 0 |
| BE-0087 | GET | /api/v1/home/mega-eventssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:80 |
megaEvents |
0 | 0 |
| BE-0088 | GET | /api/v1/home/popular-stadiumssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:53 |
popularStadiums |
0 | 0 |
| BE-0089 | GET | /api/v1/home/recommended-clubssports-pie-main-api/src/main/java/com/sportspie/home/controller/HomeController.java:92 |
recommendedClubs |
0 | 0 |
| BE-0093 | GET | /api/v1/me/club-savedsports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:507 |
mySavedClubs |
5 | 0 |
| BE-0094 | GET | /api/v1/me/clubssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:496 |
myClubs |
4 | 0 |
| BE-0096 | GET | /api/v1/me/notification-settingssports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:69 |
getNotificationSettings |
0 | 0 |
| BE-0097 | GET | /api/v1/me/notificationssports-pie-main-api/src/main/java/com/sportspie/notification/controller/NotificationController.java:30 |
list |
0 | 0 |
| BE-0098 | GET | /api/v1/me/notifications/unread-countsports-pie-main-api/src/main/java/com/sportspie/notification/controller/NotificationController.java:47 |
unreadCount |
0 | 0 |
| BE-0099 | GET | /api/v1/me/profilesports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:36 |
getProfile |
0 | 0 |
| BE-0100 | GET | /api/v1/me/stadium-reservationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:231 |
myReservations |
4 | 0 |
| BE-0101 | GET | /api/v1/me/stadium-savedsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:243 |
mySavedStadiums |
5 | 0 |
| BE-0102 | GET | /api/v1/me/statssports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:59 |
myStats |
1 | 0 |
| BE-0103 | GET | /api/v1/oauth/authorize-infosports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:54 |
authorizeInfo |
0 | 0 |
| BE-0106 | GET | /api/v1/points/balancesports-pie-main-api/src/main/java/com/sportspie/oauth/controller/PartnerPointsController.java:70 |
balance |
0 | 0 |
| BE-0107 | GET | /api/v1/points/transactionssports-pie-main-api/src/main/java/com/sportspie/oauth/controller/PartnerPointsController.java:131 |
transactions |
0 | 0 |
| BE-0108 | GET | /api/v1/promotionssports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:41 |
list |
2 | 0 |
| BE-0109 | GET | /api/v1/promotions/points/balancesports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PointController.java:46 |
getPointBalance |
0 | 0 |
| BE-0110 | GET | /api/v1/promotions/{id}sports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:57 |
detail |
1 | 0 |
| BE-0111 | GET | /api/v1/promotions/{id}/engagementsports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:90 |
engagement |
0 | 0 |
| BE-0112 | GET | /api/v1/stadiumssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:50 |
list |
0 | 0 |
| BE-0113 | GET | /api/v1/stadiums/{id}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:87 |
detail |
11 | 0 |
| BE-0114 | GET | /api/v1/stadiums/{id}/availabilitysports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:98 |
availability |
0 | 0 |
| BE-0115 | GET | /api/v1/stadiums/{id}/postssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:128 |
posts |
0 | 0 |
| BE-0116 | GET | /api/v1/stadiums/{id}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:144 |
postDetail |
0 | 0 |
| BE-0117 | GET | /api/v1/stadiums/{id}/reviewssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:109 |
reviews |
0 | 0 |
| BE-0118 | GET | /api/v1/users/mesports-pie-main-api/src/main/java/com/sportspie/oauth/controller/PartnerPointsController.java:42 |
me |
0 | 0 |
| BE-0120 | PATCH | /api/v1/admin/clubs/{id}/applications/{appId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:160 |
updateApplication |
2 | 0 |
| BE-0121 | PATCH | /api/v1/admin/clubs/{id}/deactivatesports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:173 |
deactivate |
1 | 0 |
| BE-0122 | PATCH | /api/v1/admin/clubs/{id}/exposuresports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:210 |
updateExposure |
2 | 0 |
| BE-0124 | PATCH | /api/v1/admin/facilities/{id}sports-pie-main-api/src/main/java/com/sportspie/facility/controller/AdminFacilityController.java:66 |
updateFacility |
2 | 0 |
| BE-0125 | PATCH | /api/v1/admin/feedback/entries/{id}sports-pie-main-api/src/main/java/com/sportspie/feedback/controller/AdminFeedbackController.java:37 |
adminUpdateEntry |
0 | 0 |
| BE-0128 | PATCH | /api/v1/admin/promotion-labels/{id}sports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionLabelController.java:66 |
updatePromotionLabel |
2 | 0 |
| BE-0129 | PATCH | /api/v1/admin/promotions/{id}sports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionController.java:82 |
updatePromotion |
2 | 0 |
| BE-0130 | PATCH | /api/v1/admin/reports/{id}sports-pie-main-api/src/main/java/com/sportspie/report/controller/AdminReportController.java:51 |
process |
3 | 0 |
| BE-0131 | PATCH | /api/v1/admin/stadium-reservations/{id}/approvesports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:89 |
approveReservation |
1 | 0 |
| BE-0132 | PATCH | /api/v1/admin/stadium-reservations/{id}/refundsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:121 |
refundReservation |
2 | 0 |
| BE-0133 | PATCH | /api/v1/admin/stadium-reservations/{id}/rejectsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:103 |
rejectReservation |
1 | 0 |
| BE-0134 | PATCH | /api/v1/admin/stadium-reservations/{id}/statussports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:76 |
updateStatus |
1 | 0 |
| BE-0135 | PATCH | /api/v1/admin/stadiums/{id}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:130 |
updateStadium |
3 | 0 |
| BE-0136 | PATCH | /api/v1/admin/stadiums/{id}/exposuresports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:175 |
updateExposure |
2 | 0 |
| BE-0137 | PATCH | /api/v1/admin/stadiums/{id}/reviews/{reviewId}/visibilitysports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:231 |
updateReviewVisibility |
1 | 0 |
| BE-0138 | PATCH | /api/v1/admin/stadiums/{stadiumId}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:92 |
update |
4 | 0 |
| BE-0139 | PATCH | /api/v1/admin/stadiums/{stadiumId}/posts/{postId}/pinsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:118 |
pin |
1 | 0 |
| BE-0140 | PATCH | /api/v1/admin/stadiums/{stadiumId}/posts/{postId}/publishsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:131 |
publish |
1 | 0 |
| BE-0141 | PATCH | /api/v1/admin/users/{id}/profilesports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:107 |
updateProfile |
1 | 0 |
| BE-0142 | PATCH | /api/v1/admin/users/{id}/rolesports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:119 |
updateRole |
1 | 0 |
| BE-0143 | PATCH | /api/v1/admin/users/{id}/statussports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:78 |
updateStatus |
2 | 0 |
| BE-0144 | PATCH | /api/v1/admin/users/{id}/suspensionsports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:92 |
updateSuspension |
2 | 0 |
| BE-0145 | PATCH | /api/v1/clubs/{id}/applications/{appId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:191 |
updateApplication |
2 | 0 |
| BE-0146 | PATCH | /api/v1/clubs/{id}/members/{memberId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:423 |
updateMemberRole |
1 | 0 |
| BE-0147 | PATCH | /api/v1/clubs/{id}/posts/{postId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:261 |
updatePost |
1 | 0 |
| BE-0148 | PATCH | /api/v1/clubs/{id}/posts/{postId}/comments/{commentId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:302 |
updateComment |
1 | 0 |
| BE-0149 | PATCH | /api/v1/clubs/{id}/schedules/{schedId}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:367 |
updateSchedule |
1 | 0 |
| BE-0150 | PATCH | /api/v1/me/notification-settingssports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:80 |
updateNotificationSettings |
0 | 0 |
| BE-0151 | PATCH | /api/v1/me/notifications/readsports-pie-main-api/src/main/java/com/sportspie/notification/controller/NotificationController.java:59 |
markAllRead |
0 | 0 |
| BE-0152 | PATCH | /api/v1/me/passwordsports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:95 |
changePassword |
1 | 0 |
| BE-0153 | PATCH | /api/v1/me/profilesports-pie-main-api/src/main/java/com/sportspie/user/controller/UserController.java:47 |
updateProfile |
4 | 0 |
| BE-0154 | PATCH | /api/v1/stadiums/{id}/reviews/{reviewId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:178 |
updateReview |
0 | 0 |
| BE-0155 | POST | /api/feedback/guest/entriessports-pie-main-api/src/main/java/com/sportspie/feedback/controller/FeedbackController.java:26 |
createEntry |
4 | 0 |
| BE-0156 | POST | /api/v1/admin/bannerssports-pie-main-api/src/main/java/com/sportspie/banner/controller/AdminBannerController.java:41 |
createBanner |
1 | 0 |
| BE-0157 | POST | /api/v1/admin/clubssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:47 |
createClub |
1 | 0 |
| BE-0158 | POST | /api/v1/admin/clubs/{id}/translations/generatesports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:129 |
generateTranslation |
1 | 0 |
| BE-0159 | POST | /api/v1/admin/facilitiessports-pie-main-api/src/main/java/com/sportspie/facility/controller/AdminFacilityController.java:55 |
createFacility |
1 | 0 |
| BE-0160 | POST | /api/v1/admin/feedback/entries/{id}/completionsports-pie-main-api/src/main/java/com/sportspie/feedback/controller/AdminFeedbackController.java:68 |
adminCompleteWork |
0 | 0 |
| BE-0161 | POST | /api/v1/admin/feedback/entries/{id}/worksports-pie-main-api/src/main/java/com/sportspie/feedback/controller/AdminFeedbackController.java:52 |
adminStartWork |
0 | 0 |
| BE-0162 | POST | /api/v1/admin/oauth/clientssports-pie-main-api/src/main/java/com/sportspie/oauth/controller/AdminOauthClientController.java:48 |
register |
0 | 0 |
| BE-0163 | POST | /api/v1/admin/promotion-labelssports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionLabelController.java:55 |
createPromotionLabel |
1 | 0 |
| BE-0164 | POST | /api/v1/admin/promotionssports-pie-main-api/src/main/java/com/sportspie/promotion/controller/AdminPromotionController.java:68 |
createPromotion |
1 | 0 |
| BE-0165 | POST | /api/v1/admin/stadiumssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:117 |
createStadium |
2 | 0 |
| BE-0166 | POST | /api/v1/admin/stadiums/images/batch-replacesports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:351 |
replaceImagesBatch |
0 | 0 |
| BE-0167 | POST | /api/v1/admin/stadiums/{id}/description/translations/generatesports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:153 |
generateDescriptionTranslations |
1 | 0 |
| BE-0168 | POST | /api/v1/admin/stadiums/{id}/imagessports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:370 |
addImage |
1 | 0 |
| BE-0169 | POST | /api/v1/admin/stadiums/{id}/settlement/requestsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumSettlementController.java:46 |
requestSettlement |
1 | 0 |
| BE-0170 | POST | /api/v1/admin/stadiums/{stadiumId}/postssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumPostController.java:79 |
create |
4 | 0 |
| BE-0171 | POST | /api/v1/admin/stadiums/{stadiumId}/zonessports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:414 |
createZone |
1 | 0 |
| BE-0172 | POST | /api/v1/admin/userssports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:59 |
createUser |
1 | 0 |
| BE-0173 | POST | /api/v1/auth/email/otp/sendsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:127 |
sendEmailOtp |
0 | 0 |
| BE-0174 | POST | /api/v1/auth/email/otp/verifysports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:134 |
verifyEmailOtp |
0 | 0 |
| BE-0175 | POST | /api/v1/auth/find-idsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:165 |
findId |
0 | 0 |
| BE-0176 | POST | /api/v1/auth/loginsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:188 |
login |
0 | 0 |
| BE-0177 | POST | /api/v1/auth/logoutsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:214 |
logout |
0 | 0 |
| BE-0178 | POST | /api/v1/auth/otp/sendsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:55 |
sendOtp |
0 | 0 |
| BE-0179 | POST | /api/v1/auth/otp/verifysports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:69 |
verifyOtp |
0 | 0 |
| BE-0180 | POST | /api/v1/auth/password/resetsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:156 |
resetPassword |
0 | 0 |
| BE-0181 | POST | /api/v1/auth/password/reset/otpsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:147 |
sendPasswordResetOtp |
0 | 0 |
| BE-0182 | POST | /api/v1/auth/refreshsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:198 |
refresh |
0 | 0 |
| BE-0183 | POST | /api/v1/auth/signupsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:176 |
signup |
0 | 0 |
| BE-0184 | POST | /api/v1/auth/socialsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:111 |
socialLogin |
0 | 0 |
| BE-0185 | POST | /api/v1/auth/whatsapp/otp/sendsports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:85 |
sendWhatsAppOtp |
0 | 0 |
| BE-0186 | POST | /api/v1/auth/whatsapp/otp/verifysports-pie-main-api/src/main/java/com/sportspie/auth/controller/AuthController.java:92 |
verifyWhatsAppOtp |
0 | 0 |
| BE-0187 | POST | /api/v1/clubssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:103 |
create |
1 | 0 |
| BE-0188 | POST | /api/v1/clubs/{id}/applicationssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:178 |
apply |
1 | 0 |
| BE-0189 | POST | /api/v1/clubs/{id}/bookmarkssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:482 |
toggleClubBookmark |
0 | 0 |
| BE-0190 | POST | /api/v1/clubs/{id}/likessports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:470 |
toggleClubLike |
0 | 0 |
| BE-0191 | POST | /api/v1/clubs/{id}/postssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:248 |
createPost |
1 | 0 |
| BE-0192 | POST | /api/v1/clubs/{id}/posts/{postId}/commentssports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:288 |
createComment |
1 | 0 |
| BE-0193 | POST | /api/v1/clubs/{id}/posts/{postId}/comments/{commentId}/likessports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:454 |
toggleCommentLike |
1 | 0 |
| BE-0194 | POST | /api/v1/clubs/{id}/posts/{postId}/likessports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:439 |
togglePostLike |
1 | 0 |
| BE-0195 | POST | /api/v1/clubs/{id}/schedulessports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:354 |
createSchedule |
1 | 0 |
| BE-0196 | POST | /api/v1/clubs/{id}/schedules/{schedId}/attendancessports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:395 |
attend |
1 | 0 |
| BE-0197 | POST | /api/v1/files/uploadsports-pie-main-api/src/main/java/com/sportspie/file/controller/FileController.java:32 |
upload |
10 | 0 |
| BE-0200 | POST | /api/v1/oauth/authorize/approvesports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:72 |
approve |
1 | 0 |
| BE-0201 | POST | /api/v1/oauth/revokesports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:145 |
revokeForm |
0 | 0 |
| BE-0202 | POST | /api/v1/oauth/tokensports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:117 |
tokenForm |
0 | 0 |
| BE-0209 | POST | /api/v1/payments/doku/webhooksports-pie-main-api/src/main/java/com/sportspie/stadium/controller/DokuPaymentController.java:51 |
dokuWebhook |
0 | 0 |
| BE-0215 | POST | /api/v1/points/deductsports-pie-main-api/src/main/java/com/sportspie/oauth/controller/PartnerPointsController.java:80 |
deduct |
0 | 0 |
| BE-0216 | POST | /api/v1/points/refundsports-pie-main-api/src/main/java/com/sportspie/oauth/controller/PartnerPointsController.java:110 |
refund |
0 | 0 |
| BE-0218 | POST | /api/v1/promotions/{id}/bookmarksports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:81 |
bookmark |
0 | 0 |
| BE-0219 | POST | /api/v1/promotions/{id}/likesports-pie-main-api/src/main/java/com/sportspie/promotion/controller/PromotionController.java:72 |
like |
0 | 0 |
| BE-0220 | POST | /api/v1/reportssports-pie-main-api/src/main/java/com/sportspie/report/controller/ReportController.java:34 |
create |
0 | 0 |
| BE-0221 | POST | /api/v1/stadiums/reservations/{reservationId}/refund-requestsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:277 |
requestRefund |
1 | 0 |
| BE-0222 | POST | /api/v1/stadiums/{id}/bookmarksports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:218 |
bookmark |
0 | 0 |
| BE-0223 | POST | /api/v1/stadiums/{id}/likesports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:208 |
like |
0 | 0 |
| BE-0224 | POST | /api/v1/stadiums/{id}/reservationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:156 |
reserve |
0 | 0 |
| BE-0225 | POST | /api/v1/stadiums/{id}/reviewssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:167 |
createReview |
0 | 0 |
| BE-0227 | POST | /api/v1/waba/waviro/notifysports-pie-main-api/src/main/java/com/sportspie/common/waba/WaviroCallbackController.java:28 |
notifyCallback |
0 | 0 |
| BE-0228 | POST | /api/v1/waba/waviro/notifyurlsports-pie-main-api/src/main/java/com/sportspie/common/waba/WaviroCallbackController.java:28 |
notifyCallback |
0 | 0 |
| BE-0229 | PUT | /api/v1/admin/banners/{id}sports-pie-main-api/src/main/java/com/sportspie/banner/controller/AdminBannerController.java:51 |
updateBanner |
1 | 0 |
| BE-0230 | PUT | /api/v1/admin/clubs/{id}sports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:93 |
updateClub |
1 | 0 |
| BE-0231 | PUT | /api/v1/admin/clubs/{id}/translationssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:114 |
upsertTranslation |
1 | 0 |
| BE-0232 | PUT | /api/v1/admin/integrationssports-pie-main-api/src/main/java/com/sportspie/common/integration/controller/AdminIntegrationSettingController.java:45 |
updateIntegration |
1 | 0 |
| BE-0233 | PUT | /api/v1/admin/settings/{keyName}sports-pie-main-api/src/main/java/com/sportspie/common/setting/controller/AdminSystemSettingController.java:29 |
updateSetting |
1 | 0 |
| BE-0234 | PUT | /api/v1/admin/stadium-reservations/{id}/memosports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:156 |
updateMemo |
1 | 0 |
| BE-0235 | PUT | /api/v1/admin/stadiums/{id}/description/translationssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:163 |
updateDescriptionTranslations |
1 | 0 |
| BE-0236 | PUT | /api/v1/admin/stadiums/{id}/images/ordersports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:384 |
reorderImages |
2 | 0 |
| BE-0237 | PUT | /api/v1/admin/stadiums/{id}/promotion-labelssports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:295 |
updatePromotionLabels |
1 | 0 |
| BE-0238 | PUT | /api/v1/admin/stadiums/{id}/settlement-accountsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:321 |
updateSettlementAccount |
2 | 0 |
| BE-0239 | PUT | /api/v1/admin/stadiums/{stadiumId}/zones/{zoneId}sports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:427 |
updateZone |
1 | 0 |
| BE-0240 | PUT | /api/v1/admin/users/{id}/stadium-scopessports-pie-main-api/src/main/java/com/sportspie/user/controller/AdminUserController.java:140 |
updateStadiumScopes |
4 | 0 |
| BE-0241 | PUT | /api/v1/clubs/{id}sports-pie-main-api/src/main/java/com/sportspie/club/controller/ClubController.java:115 |
update |
1 | 0 |
| BE-0242 | GET | /api/v1/admin/integrations/paymentsports-pie-main-api/src/main/java/com/sportspie/common/integration/controller/AdminIntegrationSettingController.java:75 |
getPaymentProviderStatus |
2 | 0 |
| BE-0243 | PATCH | /api/v1/admin/stadium-reservations/{id}/manual-refund-payoutsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumReservationController.java:141 |
completeManualRefundPayout |
1 | 0 |
| BE-0244 | POST | /api/v1/stadiums/reservations/{reservationId}/payment-invoicesports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:317 |
reissuePaymentInvoice |
0 | 0 |
| BE-0245 | PUT | /api/v1/stadiums/reservations/{reservationId}/refund-accountsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/StadiumController.java:297 |
updateRefundAccount |
1 | 0 |
| BE-0246 | GET | /api/v1/admin/clubs/{id}/memberssports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:183 |
getMembers |
1 | 0 |
| BE-0247 | GET | /api/v1/admin/clubs/{id}/schedulessports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:192 |
getSchedules |
1 | 0 |
| BE-0248 | PATCH | /api/v1/admin/clubs/{id}/activatesports-pie-main-api/src/main/java/com/sportspie/club/controller/AdminClubController.java:201 |
activate |
1 | 0 |
| BE-0249 | PATCH | /api/v1/admin/stadiums/{id}/owner-confirmedsports-pie-main-api/src/main/java/com/sportspie/stadium/controller/AdminStadiumController.java:190 |
updateOwnerConfirmed |
1 | 0 |
| 출처 | 종류 | 내용 |
|---|---|---|
| apicalls | indirect-only | adminFacilityApi.fetchFacilityOptions (sports-pie-admin-web/src/shared/api/adminFacility.ts:121) has no direct fetch/http.<method> call — resolved through adminFacilityApi.fetchAdminFacilities |
| apicalls | indirect-only | stadiumApi.fetchAllStadiums (sports-pie-web/src/entities/stadium/api/stadium.api.ts:423) has no direct fetch/http.<method> call — resolved through stadiumApi.fetchStadiums |
| apicalls | missing-module | sports-pie-admin-web/src/shared/api/reservation.ts not found — every method it defines is missing from the map |
| apicalls | no-http-call | adminClubApi.getClubLevelLabelKey (sports-pie-admin-web/src/shared/api/adminClub.ts:46) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminClubApi.getClubSessionDurationLabelKey (sports-pie-admin-web/src/shared/api/adminClub.ts:78) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminFacilityApi.uploadAdminFacilityIcon (sports-pie-admin-web/src/shared/api/adminFacility.ts:86) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminFeedbackApi.ensureGuestToken (sports-pie-admin-web/src/shared/api/feedbackApi.ts:92) has no direct jsonFetch/fetch call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminFeedbackApi.getGuestName (sports-pie-admin-web/src/shared/api/feedbackApi.ts:113) has no direct jsonFetch/fetch call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminFeedbackApi.setGuestName (sports-pie-admin-web/src/shared/api/feedbackApi.ts:121) has no direct jsonFetch/fetch call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminFileApi.isManagedImageUrl (sports-pie-admin-web/src/shared/api/file.ts:57) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminPromotionApi.emptyPromotionLocaleCopy (sports-pie-admin-web/src/shared/api/adminPromotion.ts:87) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminPromotionApi.emptyPromotionLocaleForm (sports-pie-admin-web/src/shared/api/adminPromotion.ts:91) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminPromotionApi.hydratePromotionLocaleForm (sports-pie-admin-web/src/shared/api/adminPromotion.ts:96) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminPromotionApi.serializePromotionLocaleForm (sports-pie-admin-web/src/shared/api/adminPromotion.ts:114) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminReservationApi.needsManualRefundPayout (sports-pie-admin-web/src/shared/api/adminReservation.ts:63) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | adminReservationApi.normalizeRefundStatus (sports-pie-admin-web/src/shared/api/adminReservation.ts:89) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | bannerApi.hydrateBannerLocaleForm (sports-pie-admin-web/src/shared/api/banner.ts:129) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | bannerApi.serializeBannerLocaleForm (sports-pie-admin-web/src/shared/api/banner.ts:163) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.getClubDescription (sports-pie-web/src/entities/club/api/club.api.ts:396) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.getClubImage (sports-pie-web/src/entities/club/api/club.api.ts:402) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.getClubLabelColorClass (sports-pie-web/src/entities/club/api/club.api.ts:56) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.getClubLevelLabelKey (sports-pie-web/src/entities/club/api/club.api.ts:115) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.getClubPostCategoryMeta (sports-pie-web/src/entities/club/api/club.api.ts:180) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.getClubSessionDurationLabelKey (sports-pie-web/src/entities/club/api/club.api.ts:150) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.getClubTitle (sports-pie-web/src/entities/club/api/club.api.ts:387) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | clubApi.stripDemoSuffix (sports-pie-web/src/entities/club/api/club.api.ts:383) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | commonApi.getRegionLabel (sports-pie-web/src/entities/common/api/common.api.ts:152) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | commonApi.getSportCategoryLabelKey (sports-pie-web/src/entities/common/api/common.api.ts:111) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | commonApi.getSportLabelKey (sports-pie-web/src/entities/common/api/common.api.ts:107) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | commonApi.normalizeSportCategories (sports-pie-web/src/entities/common/api/common.api.ts:115) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | consumerFeedbackApi.ensureGuestToken (sports-pie-web/src/shared/lib/feedbackApi.ts:91) has no direct jsonFetch/fetch call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | consumerFeedbackApi.getGuestName (sports-pie-web/src/shared/lib/feedbackApi.ts:112) has no direct jsonFetch/fetch call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | consumerFeedbackApi.setGuestName (sports-pie-web/src/shared/lib/feedbackApi.ts:120) has no direct jsonFetch/fetch call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | fileApi.validateImageFile (sports-pie-web/src/shared/api/file.api.ts:49) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | promotionApi.isCanonicalPromotionId (sports-pie-web/src/entities/promotion/api/promotion.api.ts:49) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | stadiumApi.getReservationTimeRange (sports-pie-web/src/entities/stadium/api/stadium.api.ts:150) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | stadiumApi.getStadiumDisplayTitle (sports-pie-web/src/entities/stadium/api/stadium.api.ts:127) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | stadiumApi.getStadiumReservationStartSlots (sports-pie-web/src/entities/stadium/api/stadium.api.ts:172) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apicalls | no-http-call | stadiumApi.needsRefundAccount (sports-pie-web/src/entities/stadium/api/stadium.api.ts:641) has no direct fetch/http.<method> call — and nothing it calls reaches one either — it is local-only, or the parser missed it |
| apishare | orphan-ui-shares-api | SH-S18 가 아무 화면에도 안 얹히는데 US-S27·SH-S18 가 API 1개를 나눠 쓴다 — 같은 일을 하는 화면이 둘인데 하나는 죽어 있다 |
| apishare | orphan-ui-shares-api | SH-S18 가 아무 화면에도 안 얹히는데 US-S32·SH-S18 가 API 1개를 나눠 쓴다 — 같은 일을 하는 화면이 둘인데 하나는 죽어 있다 |
| apishare | orphan-ui-shares-api | SH-S18 가 아무 화면에도 안 얹히는데 US-S34·SH-S18 가 API 1개를 나눠 쓴다 — 같은 일을 하는 화면이 둘인데 하나는 죽어 있다 |
| apishare | orphan-ui-shares-api | SH-S31, SH-S53 가 아무 화면에도 안 얹히는데 SH-S31·SH-S53 가 API 2개를 나눠 쓴다 — 같은 일을 하는 화면이 둘인데 하나는 죽어 있다 |
| backend | duplicate-mapping-variant | POST /api/v1/oauth/revoke 가 sports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:145 와 sports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:153 에 함께 매핑된다. HTTP 창구 하나로 합쳤다. |
| backend | duplicate-mapping-variant | POST /api/v1/oauth/token 가 sports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:117 와 sports-pie-main-api/src/main/java/com/sportspie/oauth/controller/OauthController.java:128 에 함께 매핑된다. HTTP 창구 하나로 합쳤다. |
| colors | link-destinations | 링크 목적지 — 문자열 15 · 템플릿 8 · 배열 0 · 인라인배열 0 · 지역상수 2 · 밖으로 나감 0 · 못 품 12 · to/href 없음 0. 이름 자동 0개 · 설명 자동 272개 |
| colors | route-pattern-too-broad | * 는 첫 칸이 파라미터라 아무 주소나 삼킨다 — 테스트를 붙이지 않는다 |
| elements | anchor-collision | sports-pie-web/src/pages/activity/favorites/page.tsx::onToggle is shared by 4 elements (lines 333, 344, 389, 390) — all demoted to positional anchors |
| elements | dynamic-input-type | sports-pie-admin-web/src/pages/login/page.tsx: <input type={showPassword ? "text" : "password"}> is not a literal — treated as F |
| elements | dynamic-input-type | sports-pie-admin-web/src/pages/system/integrations.tsx: <input type={s.secret ? "password" : "text"}> is not a literal — treated as F |
| elements | dynamic-input-type | sports-pie-web/src/pages/login/page.tsx: <input type={showPassword ? "text" : "password"}> is not a literal — treated as F |
| elements | dynamic-input-type | sports-pie-web/src/pages/signup/profile/page.tsx: <input type={showSignupPassword ? "text" : "password"}> is not a literal — treated as F |
| elements | dynamic-input-type | sports-pie-web/src/pages/signup/profile/page.tsx: <input type={showSignupPasswordConfirm ? "text" : "password"}> is not a literal — treated as F |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/banners/page.tsx:747 <select> onChange calls setSearchType, setSearch — anchored on "setSearchType" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/detail.tsx:1013 <button> onClick calls setShowWithdrawModal, setActionError — anchored on "setShowWithdrawModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/detail.tsx:428 <button> onClick calls setShowRoleDropdown, setShowStatusDropdown — anchored on "setShowRoleDropdown" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/detail.tsx:459 <button> onClick calls setShowStatusDropdown, setShowRoleDropdown — anchored on "setShowStatusDropdown" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/detail.tsx:514 <button> onClick calls setProfileNickname, setProfileClearAvatar, setActionError, setShowProfileModal — anchored on "setProfileNickname" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/detail.tsx:888 <button> onClick calls setShowProfileModal, setActionError — anchored on "setShowProfileModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/detail.tsx:963 <button> onClick calls setShowSuspendModal, setActionError — anchored on "setShowSuspendModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/page.tsx:190 <button> onClick calls setStatusFilter, setPage — anchored on "setStatusFilter" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/members/page.tsx:197 <select> onChange calls setRoleFilter, setPage — anchored on "setRoleFilter" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/posts/ReportsTab.tsx:198 <button> onClick calls setStatusFilter, setPage — anchored on "setStatusFilter" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/board-write.tsx:335 <input> onChange calls setTitle, setErrors — anchored on "setTitle" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/board-write.tsx:378 <textarea> onChange calls setContent, clearContentError — anchored on "clearContentError" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/board.tsx:293 <button> onClick calls setFilterCategory, setPage — anchored on "setFilterCategory" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/board.tsx:309 <select> onChange calls setFilterPublished, setPage — anchored on "setFilterPublished" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/board.tsx:321 <input> onChange calls setSearch, setPage — anchored on "setSearch" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/page.tsx:463 <select> onChange calls setSearchType, setSearch — anchored on "setSearchType" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:1171 <input> onChange calls setParkingCapacity, setErrors — anchored on "setParkingCapacity" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:790 <input> onChange calls setName, setErrors — anchored on "setName" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:805 <input> onChange calls setAddress, setErrors — anchored on "setAddress" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:813 <input> onChange calls setAddressDetail, setErrors — anchored on "setAddressDetail" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:855 <select> onChange calls setRegionCode, setErrors — anchored on "setRegionCode" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:863 <input> onChange calls setPhone, setErrors — anchored on "setPhone" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:876 <select> onChange calls setSportCategoryCode, setErrors — anchored on "setSportCategoryCode" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:941 <textarea> onChange calls setIntro, setErrors — anchored on "setIntro" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/reservation-detail.tsx:662 <button> onClick calls setPayoutError, setPayoutReference, setPayoutAcknowledged, setPayoutModalOpen — anchored on "setPayoutError" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/stadium-reservations.tsx:445 <button> onClick calls setRefundTarget, setRefundReason, setRefundError — anchored on "setRefundTarget" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/stadiums/zones.tsx:333 <button> onClick calls setDeleteError, setDeleteTarget — anchored on "setDeleteError" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:565 <div> onClick calls setShowModal, setEditItem — anchored on "setShowModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:584 <button> onClick calls setShowModal, setEditItem — anchored on "setShowModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:716 <button> onClick calls setShowModal, setEditItem — anchored on "setShowModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/system/components/PromotionLabelsPanel.tsx:318 <div> onClick calls setShowModal, setEditItem — anchored on "setShowModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/system/components/PromotionLabelsPanel.tsx:337 <button> onClick calls setShowModal, setEditItem — anchored on "setShowModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/system/components/PromotionLabelsPanel.tsx:440 <button> onClick calls setShowModal, setEditItem — anchored on "setShowModal" |
| elements | multi-call-handler | sports-pie-admin-web/src/pages/system/page.tsx:524 <button> onClick calls setCreatedNotice, setShowCreateModal — anchored on "setCreatedNotice" |
| elements | multi-call-handler | sports-pie-admin-web/src/widgets/feedback/ui/FeedbackWidget.tsx:1094 <button> onClick calls setTarget, setScreenshot, setAttachmentMeta — anchored on "setTarget" |
| elements | multi-call-handler | sports-pie-admin-web/src/widgets/feedback/ui/FeedbackWidget.tsx:988 <button> onClick calls setMessage, setMarkupMode, setHoverTarget, setOpen — anchored on "setMessage" |
| elements | multi-call-handler | sports-pie-admin-web/src/widgets/layout/ui/StadiumSelector.tsx:89 <button> onClick calls setActiveStadiumId, setOpen — anchored on "setActiveStadiumId" |
| elements | multi-call-handler | sports-pie-web/src/pages/club/board/write/page.tsx:157 <input> onChange calls setTitle, setErrors — anchored on "setTitle" |
| elements | multi-call-handler | sports-pie-web/src/pages/club/board/write/page.tsx:185 <textarea> onChange calls setContent, setErrors — anchored on "setContent" |
| elements | multi-call-handler | sports-pie-web/src/pages/club/edit/page.tsx:858 <button> onClick calls removeTag, addTag — anchored on "removeTag" |
| elements | multi-call-handler | sports-pie-web/src/pages/login/page.tsx:127 <input> onChange calls setEmail, setEmailError — anchored on "setEmail" |
| elements | multi-call-handler | sports-pie-web/src/pages/login/page.tsx:142 <input> onChange calls setPassword, setEmailError — anchored on "setPassword" |
| elements | multi-call-handler | sports-pie-web/src/pages/profile/stadiums/page.tsx:683 <button> onClick calls setLoading, loadReservations — anchored on "loadReservations" |
| elements | multi-call-handler | sports-pie-web/src/pages/settings/page.tsx:438 <MenuRow> onClick calls setWithdrawError, setShowDeleteModal — anchored on "setWithdrawError" |
| elements | multi-call-handler | sports-pie-web/src/pages/settings/page.tsx:617 <button> onClick calls setShowLogoutModal, logout — anchored on "logout" |
| elements | multi-call-handler | sports-pie-web/src/pages/signup/profile/page.tsx:264 <button> onClick calls editedProfileFieldsRef.current.add, setAvatarUrl — anchored on "editedProfileFieldsRef.current.add" |
| elements | multi-call-handler | sports-pie-web/src/pages/signup/profile/page.tsx:358 <input> onChange calls editedProfileFieldsRef.current.add, setNickname — anchored on "editedProfileFieldsRef.current.add" |
| elements | multi-call-handler | sports-pie-web/src/pages/signup/profile/page.tsx:428 <button> onClick calls editedProfileFieldsRef.current.add, setRegionId, setRegionOpen — anchored on "editedProfileFieldsRef.current.add" |
| elements | multi-call-handler | sports-pie-web/src/pages/stadium/detail/page.tsx:554 <img> onClick calls setIsImageExpanded, setSelectedImageIndex — anchored on "setIsImageExpanded" |
| elements | multi-call-handler | sports-pie-web/src/pages/stadium/reviews/page.tsx:471 <button> onClick calls setWriteRating, setWriteError — anchored on "setWriteRating" |
| elements | multi-call-handler | sports-pie-web/src/pages/stadium/reviews/page.tsx:501 <textarea> onChange calls setWriteComment, setWriteError — anchored on "setWriteComment" |
| elements | multi-call-handler | sports-pie-web/src/widgets/feedback/ui/FeedbackWidget.tsx:1407 <button> onClick calls setMessage, setMarkupMode, setHoverTarget, setOpen — anchored on "setMessage" |
| elements | multi-call-handler | sports-pie-web/src/widgets/feedback/ui/FeedbackWidget.tsx:1524 <button> onClick calls setTarget, setScreenshot, setAttachmentMeta — anchored on "setTarget" |
| elements | multi-call-handler | sports-pie-web/src/widgets/feedback/ui/FeedbackWidget.tsx:1545 <button> onClick calls setOpen, setPicking — anchored on "setOpen" |
| elements | multi-call-handler | sports-pie-web/src/widgets/layout/ui/BottomNav.tsx:81 <button> onClick calls window.scrollTo, navigate — anchored on "window.scrollTo" |
| elements | multi-state-label | sports-pie-admin-web/src/pages/banners/page.tsx:1042 <select> 이 상태에 따라 이름이 3가지다 — 1번째("banner_status_active")를 이름으로 썼다. 나머지도 이 버튼의 글자다: banner_status_scheduled · banner_status_inactive |
| elements | multi-state-label | sports-pie-admin-web/src/pages/banners/page.tsx:965 <select> 이 상태에 따라 이름이 3가지다 — 1번째("banner_status_active")를 이름으로 썼다. 나머지도 이 버튼의 글자다: banner_status_scheduled · banner_status_inactive |
| elements | multi-state-label | sports-pie-admin-web/src/pages/members/page.tsx:197 <select> 이 상태에 따라 이름이 6가지다 — 1번째("member_role_filter_all")를 이름으로 썼다. 나머지도 이 버튼의 글자다: member_role_member · member_role_club_owner · member_role_stadium_manager · role_platform · role_developer |
| elements | multi-state-label | sports-pie-admin-web/src/pages/stadiums/register.tsx:1204 <button> 이 상태에 따라 이름이 3가지다 — 2번째("stadium_admin_empty")를 이름으로 썼다. 나머지도 이 버튼의 글자다: member_loading · stadium_admin_select |
| elements | multi-state-label | sports-pie-admin-web/src/pages/stadiums/stadium-reservations.tsx:291 <select> 이 상태에 따라 이름이 9가지다 — 1번째("resv_status_all_full")를 이름으로 썼다. 나머지도 이 버튼의 글자다: resv_status_pending · resv_status_paid · resv_status_approval_pending · resv_status_completed · resv_status_refund_requested · resv_status_refunded_internal · resv_status_cancelled · resv_status_approval_rejected |
| elements | multi-state-label | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:725 <button> 이 상태에 따라 이름이 3가지다 — 2번째("facility_save_edit")를 이름으로 썼다. 나머지도 이 버튼의 글자다: facility_saving · facility_save_add |
| elements | multi-state-label | sports-pie-admin-web/src/pages/system/components/PromotionLabelsPanel.tsx:449 <button> 이 상태에 따라 이름이 3가지다 — 2번째("promolabel_save_edit")를 이름으로 썼다. 나머지도 이 버튼의 글자다: promolabel_saving · promolabel_save_add |
| elements | multi-state-label | sports-pie-web/src/pages/club/detail/page.tsx:770 <button> 이 상태에 따라 이름이 3가지다 — 1번째("club_applying")를 이름으로 썼다. 나머지도 이 버튼의 글자다: club_pending_badge · common_cancel |
| elements | multi-state-label | sports-pie-web/src/pages/club/members/page.tsx:397 <select> 이 상태에 따라 이름이 3가지다 — 1번째("role_vice")를 이름으로 썼다. 나머지도 이 버튼의 글자다: role_treasurer · role_member |
| elements | multi-state-label | sports-pie-web/src/pages/club/schedule/detail/page.tsx:506 <select> 이 상태에 따라 이름이 3가지다 — 1번째("schedule_type_training")를 이름으로 썼다. 나머지도 이 버튼의 글자다: schedule_type_match · schedule_type_meeting |
| elements | multi-state-label | sports-pie-web/src/widgets/home/ui/RecommendedClubs.tsx:101 <button> 이 상태에 따라 이름이 4가지다 — 4번째("home_join")를 이름으로 썼다. 나머지도 이 버튼의 글자다: club_applying · club_pending_badge · club_joined_done |
| elements | non-api-module | sports-pie-web/src/pages/feedback/BoardPage.tsx imports from "@/shared/lib/feedbackApi" — its calls are outside api.ts and cannot appear in apiHint |
| elements | non-api-module | sports-pie-web/src/pages/feedback/EntryTableOverlay.tsx imports from "@/shared/lib/feedbackApi" — its calls are outside api.ts and cannot appear in apiHint |
| elements | non-api-module | sports-pie-web/src/widgets/feedback/ui/FeedbackWidget.tsx imports from "@/shared/lib/feedbackApi" — its calls are outside api.ts and cannot appear in apiHint |
| elements | onclick-on-form-control | sports-pie-web/src/pages/club/board/detail/page.tsx: <input> carries onClick — classified B by the spec's rule order, review if it should be F/C |
| elements | onclick-on-form-control | sports-pie-web/src/pages/home/page.tsx: <input> carries onClick — classified B by the spec's rule order, review if it should be F/C |
| elements | unreadable-translator-alias | sports-pie-admin-web/src/pages/banners/page.tsx: const posLabel … => t(`banner_pos_${POS_KEY[p] ?? "unknown"}`) — 앞머리만 붙이는 꼴이 아니다 (`banner_pos_${POS_KEY[p] ?? "unknown"}`). 이 함수로 지은 이름은 비워 둔다 |
| elements | unreadable-translator-alias | sports-pie-admin-web/src/pages/banners/page.tsx: const searchTypeLabel … => t(`banner_search_type_${SEARCH_TYPE_KEY[s] ?? "title"}`) — 앞머리만 붙이는 꼴이 아니다 (`banner_search_type_${SEARCH_TYPE_KEY[s] ?? "title"}`). 이 함수로 지은 이름은 비워 둔다 |
| elements | unreadable-translator-alias | sports-pie-admin-web/src/pages/banners/page.tsx: const statusFilterLabel … => t(`banner_status_filter_${STATUS_FILTER_KEY[s] ?? "all"}`) — 앞머리만 붙이는 꼴이 아니다 (`banner_status_filter_${STATUS_FILTER_KEY[s] ?? "all"}`). 이 함수로 지은 이름은 비워 둔다 |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/banners/page.tsx:614 <button> onClick={() => imageInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/banners/page.tsx:925 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/banners/page.tsx:989 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/clubs/components/ClubRichFieldsForm.tsx:795 <button> onClick={() => inputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/promotions/page.tsx:568 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/info.tsx:1270 <button> onClick={() => fileInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/page.tsx:642 <td> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/page.tsx:658 <td> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/page.tsx:675 <td> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/page.tsx:694 <td> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/register.tsx:1079 <button> onClick={() => fileInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/reservation-detail.tsx:850 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/reservation-detail.tsx:903 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/stadium-reservations.tsx:464 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/stadium-reservations.tsx:495 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/zones.tsx:357 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/stadiums/zones.tsx:423 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:188 <div> onClick={() => { if (!uploading) fileRef.current?.click(); }} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/widgets/feedback/ui/FeedbackWidget.tsx:1053 <button> onClick={() => fileInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-admin-web/src/widgets/layout/ui/AdminLayout.tsx:615 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/club/create/page.tsx:742 <button> onClick={() => logoInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/club/create/page.tsx:754 <button> onClick={() => logoInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/club/edit/page.tsx:585 <button> onClick={() => coverRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/club/edit/page.tsx:609 <button> onClick={() => profileRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/club/edit/page.tsx:970 <button> onClick={() => galleryRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/club/edit/page.tsx:988 <button> onClick={() => galleryRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/club/members/page.tsx:367 <div> onClick={(e) => e.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/payment/result/page.tsx:170 <button> onClick={() => { if (reservation.invoiceUrl) window.location.href = reservation.invoiceUrl; }} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/profile/stadiums/page.tsx:1276 <button> onClick={() => { if (reservation.invoiceUrl) { window.location.href = reservation.invoiceUrl; } }} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/settings/page.tsx:417 <MenuRow> onClick={() => { window.location.href = `mailto:${SUPPORT_EMAIL}`; }} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/signup/profile/page.tsx:273 <button> onClick={() => fileInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/pages/stadium/detail/page.tsx:943 <img> onClick={(event) => event.stopPropagation()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/widgets/feedback/ui/FeedbackWidget.tsx:1484 <button> onClick={() => fileInputRef.current?.click()} — no callable name found |
| elements | unresolved-handler | sports-pie-web/src/widgets/promotion/ui/PromotionDetailView.tsx:403 <img> onClick={(event) => event.stopPropagation()} — no callable name found |
| freshness | evidence-stale | 스크린샷 (shots/manifest.json)가 낡았다 — 이 결과를 만든 뒤로 코드가 바뀌었다. 다시 만들려면: node scripts/viz-capture-shots.mjs |
| freshness | evidence-stale | 테스트 결과 (spec-results.json)가 낡았다 — 이 결과를 만든 뒤로 코드가 바뀌었다. 다시 만들려면: npm run viz:specs |
| history | no-recent-change | 5개 파일이 최근 800커밋 안에 안 나온다 — 오래된 것이거나 방금 추가된 것이다 |
| labels | missing-locale | no .json namespaces under sports-pie-web/src/app/providers/i18n/local/en |
| labels | missing-locale | no .json namespaces under sports-pie-web/src/app/providers/i18n/local/ko |
| legacy | no-legacy-inventory | docs/visualization/legacy-inventory.md 이 없다 — 물려받을 옛 번호 없이 새로 매긴다 |
| link | no-backend-for-path | AD-S03-B03 → adminClubApi.fetchAdminClubs → GET /api/v1/admin/clubs{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S03-B18 → adminClubApi.fetchAdminClubs → GET /api/v1/admin/clubs{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S03-B21 → adminClubApi.fetchAdminClubs → GET /api/v1/admin/clubs{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S04-B01 → adminPostApi.fetchAdminPosts → GET /api/v1/admin/posts{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S07-B04 → adminUserApi.fetchAdminUsers → GET /api/v1/admin/users{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S11-B03 → adminPromotionApi.fetchAdminPromotions → GET /api/v1/admin/promotions{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S11-B04 → adminPromotionApi.fetchAdminPromotions → GET /api/v1/admin/promotions{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S11-B07 → adminPromotionApi.fetchAdminPromotions → GET /api/v1/admin/promotions{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S11-B16 → adminPromotionApi.fetchAdminPromotions → GET /api/v1/admin/promotions{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S12-B06 → adminStadiumApi.fetchAdminStadiums → GET /api/v1/admin/stadiums{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S14-B03 → adminStadiumPostApi.fetchStadiumPosts → GET /api/v1/admin/stadiums/{}/posts{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S14-B10 → adminStadiumPostApi.fetchStadiumPosts → GET /api/v1/admin/stadiums/{}/posts{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S17-B03 → adminReservationApi.fetchAdminReservations → GET /api/v1/admin/stadium-reservations{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S17-B05 → adminReservationApi.fetchAdminReservations → GET /api/v1/admin/stadium-reservations{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S17-B11 → adminReservationApi.fetchAdminReservations → GET /api/v1/admin/stadium-reservations{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S17-B15 → adminReservationApi.fetchAdminReservations → GET /api/v1/admin/stadium-reservations{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S18-B07 → adminStadiumLegacyApi.fetchAdminEngagements → GET /api/v1/admin/engagements{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S18-B07 → adminStadiumLegacyApi.fetchAdminStadiumReviews → GET /api/v1/admin/stadiums/{}/reviews{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S19-B03 → adminReservationApi.fetchAdminReservations → GET /api/v1/admin/stadium-reservations{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S19-B11 → adminReservationApi.fetchAdminReservations → GET /api/v1/admin/stadium-reservations{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | AD-S26-B04 → adminUserApi.fetchAdminUsers → GET /api/v1/admin/users{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S10-B02 → adminPostApi.fetchAdminPosts → GET /api/v1/admin/posts{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S10-B10 → adminPostApi.fetchAdminPosts → GET /api/v1/admin/posts{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S11-B02 → adminReportApi.fetchAdminReports → GET /api/v1/admin/reports{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S11-B03 → adminReportApi.fetchAdminReports → GET /api/v1/admin/reports{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S11-B04 → adminReportApi.fetchAdminReports → GET /api/v1/admin/reports{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S11-B05 → adminReportApi.fetchAdminReports → GET /api/v1/admin/reports{})} 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S15-B02 → stadiumApi.fetchStadiumNotices → GET /api/v1/stadiums/{}/posts{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S50-B14 → adminFacilityApi.fetchAdminFacilities → GET /api/v1/admin/facilities{toQuery({ page: params.page 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S50-B17 → adminFacilityApi.fetchAdminFacilities → GET /api/v1/admin/facilities{toQuery({ page: params.page 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S51-B10 → adminPromotionLabelApi.fetchAdminPromotionLabels → GET /api/v1/admin/promotion-labels{toQuery({ page: params.page 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | SH-S51-B13 → adminPromotionLabelApi.fetchAdminPromotionLabels → GET /api/v1/admin/promotion-labels{toQuery({ page: params.page 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | US-S05-B03 → clubApi.fetchClubs → GET /api/v1/clubs{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | US-S05-B05 → clubApi.fetchClubs → GET /api/v1/clubs{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | US-S05-B06 → clubApi.fetchClubs → GET /api/v1/clubs{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | US-S07-B05 → clubApi.fetchClubPosts → GET /api/v1/clubs/{}/posts{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | US-S07-B06 → clubApi.fetchClubPosts → GET /api/v1/clubs/{}/posts{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | US-S37-B03 → stadiumApi.fetchStadiumNotices → GET /api/v1/stadiums/{}/posts{qs 에 해당하는 백엔드가 없다 |
| link | no-backend-for-path | US-S39-B03 → stadiumApi.fetchReviews → GET /api/v1/stadiums/{}/reviews{qs 에 해당하는 백엔드가 없다 |
| requirements | non-requirement-table | 섹션 "2026-08-16 REQ-ADMIN-001 백엔드 절반 (TASK-355)" 의 표는 요구사항 8칸 형식이 아니다 (데이터 행 11개). 근거 축에서는 쓰지 않지만 버린 것은 아니다. |
| requirements | non-requirement-table | 섹션 "상태값" 의 표는 요구사항 8칸 형식이 아니다 (데이터 행 6개). 근거 축에서는 쓰지 않지만 버린 것은 아니다. |
| requirements | non-requirement-table | 섹션 "최종 시나리오 센터 전 즉시 갭" 의 표는 요구사항 8칸 형식이 아니다 (데이터 행 3개). 근거 축에서는 쓰지 않지만 버린 것은 아니다. |
| requirements | requirement-row-in-foreign-table | 102행: 요구사항 ID "REQ-MATCH-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-MATCH-001 | 2026-08-16 | 사용자 경기매칭 진입점이 제품에서 빠졌다. TASK-055 가 하단 탭을 경기매칭→이벤트로 교체하고, TASK-245 가 `/matches`·`/matches/:id` 를 `/activity` 리다이렉트로 바꿨고, TASK-100 이 `pages/matches/**` 와 `entities/match` |
| requirements | requirement-row-in-foreign-table | 103행: 요구사항 ID "REQ-MATCH-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-MATCH-002 | 2026-08-16 | 생성 화면 `/matches/create` 가 TASK-100 의 `pages/matches/**` 삭제로 사라졌다. 경기 생성 API 는 관리자 도메인에만 남아 REQ-ADMIN 범위에서 다룬다. | 없음 | |
| requirements | requirement-row-in-foreign-table | 104행: 요구사항 ID "REQ-MATCH-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-MATCH-003 | 2026-08-16 | 참여/취소 CTA 화면 `/matches/:id` 가 리다이렉트로 대체됐고 `/profile/matches` 도 `/profile` 로 리다이렉트된다. 사용자가 이 요구사항을 수행할 화면이 없다. | 없음 | |
| requirements | requirement-row-in-foreign-table | 105행: 요구사항 ID "REQ-EVT-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-002 | 2026-08-16 | 티켓 Event 도메인이 제품에서 빠졌다. TASK-290 이 공개 표면을 닫고 TASK-304 가 `com.sportspie.event` 패키지를 코드째 지워 `POST /api/v1/events/{id}/participants` 자체가 없다. 사용자 `/events/:id` 는 PromotionDeta |
| requirements | requirement-row-in-foreign-table | 106행: 요구사항 ID "REQ-EVT-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-003 | 2026-08-16 | 티켓 예매 화면 `/events/:id/booking` 이 `/activity` 리다이렉트로 대체됐고, `/api/v1/me/event-bookings`·`/api/v1/admin/event-bookings` 모두 TASK-304 의 event 패키지 삭제로 사라졌다. 증거 케이스 `MUT-004` 는 영 |
| requirements | requirement-row-in-foreign-table | 140행: 요구사항 ID "REQ-AUTH-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-001 | 연결 — `AUTH-001`·`AUTH-002`·`ADMIN-001` + 로그인 순서 가드 | |
| requirements | requirement-row-in-foreign-table | 141행: 요구사항 ID "REQ-STAD-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-STAD-001 | 연결 — `PUBLIC-001`·`PUBLIC-006`·`ADMIN-003` | |
| requirements | requirement-row-in-foreign-table | 142행: 요구사항 ID "REQ-EVT-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-001 | 연결 — `PUBLIC-007`·`PUBLIC-008`. `/events` 목록의 promotions 경로는 미검증이라 상태를 `진행중` 으로 내렸다 | |
| requirements | requirement-row-in-foreign-table | 143행: 요구사항 ID "REQ-PAY-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-PAY-001 | 연결 — 새 가드 `check-payment-provider-fail-closed.mjs` + `check-admin-payment-visibility.mjs` | |
| requirements | requirement-row-in-foreign-table | 144행: 요구사항 ID "REQ-CLUB-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-001 | 연결 — `PUBLIC-003`·`PUBLIC-004`·`PUBLIC-009`·`ADMIN-004` | |
| requirements | requirement-row-in-foreign-table | 145행: 요구사항 ID "REQ-ADMIN-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-001 | 부분 연결 — 새 가드 `check-admin-menu-role-parity.mjs`(메뉴↔라우트). 백엔드 401/403 은 여전히 없음 | |
| requirements | requirement-row-in-foreign-table | 146행: 요구사항 ID "REQ-CONTENT-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CONTENT-001 | 부분 연결 — 이미지 다양성·빈 상태 가드 3종. 내부 seed marker 는 수동 shell 뿐이라 `진행중` | |
| requirements | requirement-row-in-foreign-table | 147행: 요구사항 ID "REQ-OPS-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-OPS-001 | **해소(TASK-356)** — 수동 shell 대신 **배포 경로 자체**를 증거로 삼았다. 아무도 안 돌리는 스크립트는 증거가 아니지만, 배포할 때마다 반드시 도는 검증은 증거다 | |
| requirements | requirement-row-in-foreign-table | 36행: 요구사항 ID "REQ-AUTH-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-001 | SCN-AUTH-LOGIN | 회원/관리자 | 로그인하고 세션 유지 | `/login`, `/admin/login` | 로그인 응답이 토큰/세션/역할 반환 | 사용자 로그인 상태/시각 갱신 | 프로필이 현재 사용자를 읽음 | 관리자 세션 역할이 메뉴를 결정 | TASK-111 하네스 `AUTH-001`·`AUTH-002`(발급 |
| requirements | requirement-row-in-foreign-table | 37행: 요구사항 ID "REQ-I18N-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-I18N-001 | SCN-I18N-REGION | 회원 | 인도네시아 지역 선택 | 가입/프로필/설정/클럽/경기 폼 | `GET /api/v1/common/regions` | `regions`에 인도네시아 38개 주와 참조 무결성 | 선택 지역이 프로필/설정에 표시 | 관리자 사용자 상세가 지역을 읽을 수 있음 | TASK-111 `PUBLIC |
| requirements | requirement-row-in-foreign-table | 38행: 요구사항 ID "REQ-STAD-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-STAD-001 | SCN-STAD-LIST | 게스트/회원 | 구장 탐색 | `/stadium`, 홈 인기 구장 | public 구장/home API가 데이터 반환 | 구장/이미지/구역 row 존재 또는 정직한 빈 상태 | 목록/상세가 API 데이터를 표시 | 관리자 구장 카운트/목록과 일치 | TASK-111 public 하네스 `PUBLIC |
| requirements | requirement-row-in-foreign-table | 39행: 요구사항 ID "REQ-RES-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-RES-001 | SCN-RES-CREATE | 회원 | 구장 슬롯 예약 | 구장 상세 예약 CTA | 예약 생성 API가 실제 예약을 만들거나 실패 닫힘 | 예약 row, slot/zone/time 중복 방지 | 프로필 예약 목록 갱신 또는 공급자 미준비 오류 표시 | 공급자 준비 시 관리자 예약 목록/상태 갱신 | TASK-114 `MUT-0 |
| requirements | requirement-row-in-foreign-table | 40행: 요구사항 ID "REQ-EVT-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-001 | SCN-EVT-LIST | 게스트/회원 | 이벤트 탐색 | `/events`, 홈 인기 이벤트, 메가이벤트 | public 이벤트 API가 데이터 반환 | 이벤트/메가이벤트 row와 이미지/본문 정책 | 목록/상세가 데이터 적재 상태로 표시 | 관리자 이벤트 목록 카운트와 일치 | TASK-111 public 하네스 `PUBLI |
| requirements | requirement-row-in-foreign-table | 41행: 요구사항 ID "REQ-EVT-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-002 | SCN-EVT-APPLY | 회원 | 이벤트 참여 신청 | `/events/:id` 참가 CTA | 참여 API가 참가자 insert 또는 중복/마감 반환 | `event_participants` insert 및 카운트 증가 | 참가 상태가 사용자 화면에 반영 | 관리자 이벤트 참가자/목록에 반영 | 없음. 증거로 걸려 있던 케 |
| requirements | requirement-row-in-foreign-table | 42행: 요구사항 ID "REQ-EVT-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-003 | SCN-EVT-TICKET | 회원 | 이벤트 티켓 예약 | 이벤트 상세 티켓 CTA | 티켓 예약/결제 API가 예약 생성 또는 실패 닫힘 | 이벤트 예약/결제 row 상태 불변조건 | 프로필 이벤트 예약에 상태 표시 | 관리자 이벤트 예약/결제 목록 반영 | 없음. 증거로 걸려 있던 케이스(MUT-004 는 영구 skip, |
| requirements | requirement-row-in-foreign-table | 43행: 요구사항 ID "REQ-PAY-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-PAY-001 | SCN-PAY-FAILCLOSED | 회원/관리자 | 결제 공급자 미준비 상태 시 결제 시도 | 티켓/구장 예약 결제 흐름 | 공급자 미준비 시 fake success 금지 | 결제 row는 pending/failed와 failure_reason 기록 | 사용자는 pending/failed 상태를 봄 | 관리자는 공급자 실패 사 |
| requirements | requirement-row-in-foreign-table | 44행: 요구사항 ID "REQ-CLUB-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-001 | SCN-CLUB-LIST | 게스트/회원 | 클럽 탐색 | `/club`, 홈 추천 클럽 | 클럽 API가 데이터 반환 | 클럽/멤버/이미지 row 또는 정직한 빈 상태 | 클럽 목록/상세에 로드 상태 표시 | 관리자 클럽 목록과 일치 | TASK-111 public 하네스 `PUBLIC-003`(클럽 목록 4건 이상)·`PU |
| requirements | requirement-row-in-foreign-table | 45행: 요구사항 ID "REQ-CLUB-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-002 | SCN-CLUB-CREATE | 회원 | 클럽 생성 | `/club/create` 제출 | 클럽 생성 API가 클럽과 owner/member 링크 생성 | `clubs`, `club_members` owner/member 불변조건 | `/api/v1/me/clubs`에 생성 클럽 표시 | 관리자 클럽 목록에 생성 클럽 표시 | |
| requirements | requirement-row-in-foreign-table | 46행: 요구사항 ID "REQ-CLUB-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-003 | SCN-CLUB-JOIN | 회원 | 클럽 가입 | `/club/:id` 가입 CTA | 가입 API가 멤버십 또는 신청 상태 생성 | `club_members` 또는 신청 row 상태 불변조건 | 프로필 클럽 수/목록 갱신 | 관리자 클럽/멤버 화면 반영 | TASK-114 `MUT-006`, 중복 가입 불변조건 `MUT-0 |
| requirements | requirement-row-in-foreign-table | 47행: 요구사항 ID "REQ-MATCH-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-MATCH-001 | SCN-MATCH-LIST | 게스트/회원 | 경기매칭 탐색 | `/matches`, 바텀 내비 경기매칭, 홈 경기매칭 | public 경기 API가 데이터 반환 | 경기/참가자 row와 이벤트/경기 라벨 분리 | 목록/상세가 모바일 셸 안에서 표시되고 `/matches/:id`로 이동 | 관리자 경기 목록과 일치 | 없음. |
| requirements | requirement-row-in-foreign-table | 48행: 요구사항 ID "REQ-MATCH-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-MATCH-002 | SCN-MATCH-CREATE | 회원 | 경기매칭 생성 | `/matches/create` 제출 | 경기 생성 API가 경기와 생성자 참가자 생성 | `matches` insert 및 creator participant 불변조건 | `/api/v1/me/matches`에 생성 경기 표시 | 관리자 경기 목록에 생성 경기 표 |
| requirements | requirement-row-in-foreign-table | 49행: 요구사항 ID "REQ-MATCH-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-MATCH-003 | SCN-MATCH-JOIN-CANCEL | 회원 | 경기 참여/취소 | `/matches/:id` 참여/취소 CTA | 참여/취소 API가 정원, 중복, 주최자 가드 처리 | `match_participants` insert/delete 또는 상태 전이 | 프로필 경기 목록/통계 갱신 | 관리자 참가자 수 갱신 | 없음. 증 |
| requirements | requirement-row-in-foreign-table | 50행: 요구사항 ID "REQ-FEED-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-FEED-001 | SCN-FEED-SEND | 게스트/회원/관리자 | 피드백 제출 | 사용자/관리자 피드백 위젯 | 피드백 생성/답변/미확인 API가 tenant/role/guestToken별 저장 | feedback entry/message row와 unread count 일치 | 사용자/관리자 배지 갱신 | 관리자 피드백 목록 표시 | TA |
| requirements | requirement-row-in-foreign-table | 51행: 요구사항 ID "REQ-ADMIN-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-001 | SCN-ADMIN-RBAC | 수퍼어드민/구장관리자 | 올바른 메뉴 접근 | `/admin` 사이드바와 페이지 | admin API가 역할별 권한 강제 | 권한 밖 상태 변경 금지 | 해당 없음 | 메뉴/액션 표시와 401/403 동작 일치 | TASK-108, `node tests/harness/check-admin-men |
| requirements | requirement-row-in-foreign-table | 52행: 요구사항 ID "REQ-CONTENT-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CONTENT-001 | SCN-CONTENT-QUALITY | 게스트/회원 | 서비스 품질 콘텐츠 확인 | 홈/구장/이벤트/클럽/경기 상세 | public API가 내부 seed marker를 노출하지 않음 | 콘텐츠 row가 이미지 다양성과 본문 정책 준수 | 서버가 진짜 빈 상태일 때만 빈 화면 표시 | 관리자 콘텐츠 제어와 같은 row 사 |
| requirements | requirement-row-in-foreign-table | 53행: 요구사항 ID "REQ-UI-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-UI-001 | SCN-MOBILE-SHELL | 게스트/회원 | 모든 사용자 라우트가 모바일 셸 안에서 동작 | 39개 consumer route, 예약/결제 바텀시트 | 정적 UI 계약 | 해당 없음 | 예약/결제/리뷰/프로필/경기 화면이 480px 밖으로 새지 않음 | 관리자 preview iframe도 같은 consumer 화면 사용 | |
| requirements | requirement-row-in-foreign-table | 54행: 요구사항 ID "REQ-ADMIN-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-002 | SCN-ADMIN-MEMBER-OPS | 수퍼어드민 | 회원 정지·탈퇴·프로필 조치 처리 | `/admin/members`, `/admin/members/:id` | 관리자 회원 API 가 목록/상세/정지/프로필 조치를 처리 | 정지는 `suspended_until` 에서 파생, 탈퇴 파기는 유예기간 뒤 익명화 | 정지된 계 |
| requirements | requirement-row-in-foreign-table | 55행: 요구사항 ID "REQ-OPS-001" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-OPS-001 | SCN-OPS-DEPLOY-SMOKE | 운영자 | 배포와 smoke 확인 | deploy scripts/status endpoints | health/web/admin endpoint 200 | Flyway history 성공, active release 확인 | 사용자 앱 접근 가능 | 관리자 앱 접근 가능 | `node t |
| requirements | requirement-row-in-foreign-table | 56행: 요구사항 ID "REQ-AUTH-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-002 | SCN-AUTH-SIGNUP | 게스트 | 약관 동의·계정 입력·프로필 완성으로 가입 | `/signup`, `/signup/profile` | 가입·OTP·구글 ID 토큰 검증이 인증 토큰을 발급 | `users`·`user_social_accounts` 에 계정 생성, 선호 종목·지역 저장 | 가입 직후 프로필이 입력값을 |
| requirements | requirement-row-in-foreign-table | 57행: 요구사항 ID "REQ-AUTH-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-003 | SCN-AUTH-RECOVERY | 게스트 | 아이디·비밀번호 찾기 | `/login/find-id`, `/login/find-password` | 복구 채널 계약이 확정되기 전에는 가짜 성공 대신 준비중을 반환 | 해당 없음 | 로그인 화면의 찾기 동선이 404 로 끝나지 않음 | 해당 없음 | `tests/harness/c |
| requirements | requirement-row-in-foreign-table | 58행: 요구사항 ID "REQ-AUTH-004" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-004 | SCN-AUTH-PROFILE-HOME | 회원 | 프로필 홈에서 내 정보와 활동 지표 확인 | `/profile` | 프로필·활동 API 가 실제 원장 수치만 반환 | 집계 원장이 없는 지표는 화면에 만들지 않음 | 클럽·구장 활동만 표시하고 가짜 수치를 두지 않음 | 관리자 회원 상세가 같은 계정을 조회 | `tests/h |
| requirements | requirement-row-in-foreign-table | 59행: 요구사항 ID "REQ-AUTH-005" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-005 | SCN-AUTH-ACTIVITY | 회원 | 내 활동과 저장한 구장·클럽 확인 | `/activity`, `/activity/favorites` | 저장 목록 API 가 실제 원장에서 회수·해제 | 저장 원장 row 와 화면 목록이 일치 | 저장·해제가 서버 재조회로 목록에 반영 | 관리자 클럽·구장 원장과 같은 row | ` |
| requirements | requirement-row-in-foreign-table | 60행: 요구사항 ID "REQ-AUTH-006" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-006 | SCN-AUTH-SETTINGS | 회원 | 알림·언어·비밀번호·회원 탈퇴 설정 | `/settings` | `DELETE /api/v1/me` 성공에만 토큰·상태를 폐기하고 실패는 오류 표시 | 탈퇴는 유예기간 뒤 익명화, 알림 수신 설정은 실제 row | 탈퇴 성공 시 로그인으로 이동하고 세션이 끊김 | 관리자 회원 상세가 |
| requirements | requirement-row-in-foreign-table | 61행: 요구사항 ID "REQ-AUTH-007" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-AUTH-007 | SCN-AUTH-OAUTH-AUTHORIZE | 외부 앱 사용자 | 외부 앱이 우리 계정으로 인가를 요청할 때 동의 화면 | `/oauth/authorize` | 인가코드 5분 1회용, 코드-토큰 교환은 별도 토큰 엔드포인트 | 인가코드는 Redis, 리프레시 토큰 회전과 재사용 탐지 | 사용자가 동의 화면에서 권한 범위를 확 |
| requirements | requirement-row-in-foreign-table | 62행: 요구사항 ID "REQ-STAD-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-STAD-002 | SCN-STAD-DETAIL | 게스트/회원 | 구장 상세에서 정보·편의시설·구역·리뷰 확인 | `/stadium/:id` | 공개 구장 상세 API 가 같은 id 로 zone·리뷰·공지를 반환 | 내부 전용 필드는 공개 응답에 실리지 않음 | 섹션 순서와 빈 상태가 정본 구조를 따름 | 관리자 구장 기본정보와 같은 row | |
| requirements | requirement-row-in-foreign-table | 63행: 요구사항 ID "REQ-STAD-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-STAD-003 | SCN-STAD-REVIEW-LIST | 게스트/회원 | 구장 리뷰 목록과 평점 요약 확인 | `/stadium/:id/reviews` | 리뷰 API 의 서버 집계(총건수·평균·분포)를 그대로 사용 | 로드된 페이지 subset 으로 요약을 재계산하지 않음 | 실제 리뷰가 있는데 0건으로 보이지 않음 | 관리자 리뷰 공개 여 |
| requirements | requirement-row-in-foreign-table | 64행: 요구사항 ID "REQ-STAD-004" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-STAD-004 | SCN-STAD-NOTICE | 게스트/회원 | 구장 공지 목록과 상세 확인 | `/stadium/:id/notices`, `/stadium/:id/notices/:postId` | 공개 구장 게시글 API 가 published 만 반환 | `stadium_posts` 의 고정·카테고리 상태를 그대로 반영 | 카테고리 필터와 |
| requirements | requirement-row-in-foreign-table | 65행: 요구사항 ID "REQ-STAD-005" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-STAD-005 | SCN-STAD-MAP | 게스트/회원 | 지도에서 구장을 찾고 상세로 이동 | `/map` | 공개 구장 API 의 위·경도로 marker 를 그림 | 고정 좌표가 아니라 실제 구장 row 를 사용 | marker 선택 카드와 상세가 같은 구장 id | 관리자 구장 위치 편집과 같은 row | `tests/harness/ch |
| requirements | requirement-row-in-foreign-table | 66행: 요구사항 ID "REQ-RES-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-RES-002 | SCN-RES-MY-RESERVATIONS | 회원 | 내 예약의 상태·취소·환불 확인 | `/profile/stadiums` | 예약 목록 API 가 상태와 결제 만료 시각을 반환 | 예약·결제 상태 전이가 원장과 일치 | 결제대기 예약도 화면에서 취소할 수 있음 | 관리자 예약 목록과 같은 row | `tests/harnes |
| requirements | requirement-row-in-foreign-table | 67행: 요구사항 ID "REQ-PAY-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-PAY-002 | SCN-PAY-RESULT | 회원 | 결제창에서 돌아온 뒤 결제 결과 확인 | `/payment/result` | 결제 생성 시 복귀 URL 을 보내고 복귀 시 상태를 다시 조회 | 가상계좌 미입금 pending 은 정상 상태이며 실패로 기록하지 않음 | pending 을 실패로 표시하지 않고 입금 만료 시각을 안내 | 관리자 |
| requirements | requirement-row-in-foreign-table | 68행: 요구사항 ID "REQ-PAY-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-PAY-003 | SCN-PAY-PG-REVIEW | 외부 PG 검수자 | 결제 흐름 공개 설명 페이지 확인 | `/pg-review/payment-flow` | 페이지가 설명하는 webhook 경로가 실제 컨트롤러에 존재 | 해당 없음 | 한국어·영어 양쪽이 같은 흐름을 설명 | 해당 없음 | `tests/harness/check-pg-revi |
| requirements | requirement-row-in-foreign-table | 69행: 요구사항 ID "REQ-PAY-004" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-PAY-004 | SCN-PAY-SETTLEMENT | 구장관리자 | 담당 구장 정산 내역 조회와 지급 요청 | `/admin/stadiums/:id/settlement` | scoped 정산 API 가 담당 구장만 반환하고 범위 밖은 403 | 정산 금액·세금을 고객 gross 로 허위 합산하지 않음 | 해당 없음 | 지급 요청은 fail-cl |
| requirements | requirement-row-in-foreign-table | 70행: 요구사항 ID "REQ-EVT-004" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-004 | SCN-EVT-PROMOTION | 게스트/회원 | 프로모션 목록과 상세 확인 | `/promotions`, `/promotions/:id` | 공개 프로모션 API 가 기간·조건·상세 이미지를 반환 | 참가·좋아요 원장을 새로 만들지 않고 노출 기간 정책만 사용 | 카드 구성과 상세 섹션 순서가 정본 구조를 따름 | 관리자 프 |
| requirements | requirement-row-in-foreign-table | 71행: 요구사항 ID "REQ-EVT-005" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-EVT-005 | SCN-EVT-MEGA | 게스트/회원 | 메가이벤트 강조 화면 확인 | `/mega-event`, `/mega-event/:id` | 활성 메가 프로모션 선택 규칙이 서버 데이터로 결정 | 메가 지정이 없으면 정직한 빈 상태 | 빈 상태에 홈 복귀 동선이 있음 | 관리자 메가 지정과 같은 row | `tests/harness/ |
| requirements | requirement-row-in-foreign-table | 72행: 요구사항 ID "REQ-CLUB-004" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-004 | SCN-CLUB-BOARD | 회원 | 클럽 게시판 글 읽기·쓰기·신고 | `/club/:id/board`, `/club/:id/board/:postId`, `/club/:id/board/write` | 클럽 게시글 API 가 작성·조회·권한을 처리 | 좋아요·댓글을 로컬 상태로 흉내 내지 않음 | 작성 뒤 목록이 서버 재조회 |
| requirements | requirement-row-in-foreign-table | 73행: 요구사항 ID "REQ-CLUB-005" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-005 | SCN-CLUB-SCHEDULE | 회원 | 클럽 일정 확인·작성·참석 표시 | `/club/:id/schedule`, `/club/:id/schedule/write`, `/club/:id/schedule/:scheduleId` | 일정 API 와 권한 계약에 연결하고 없는 필드를 만들지 않음 | 일정 종류가 번역 라벨이 아니 |
| requirements | requirement-row-in-foreign-table | 74행: 요구사항 ID "REQ-CLUB-006" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-006 | SCN-CLUB-MEMBERS | 회원/클럽운영진 | 멤버 목록과 가입 신청 승인·거절 | `/club/:id/members` | 멤버·신청 API 가 역할별 권한을 강제 | 정원 초과와 중복 가입을 서버가 막음 | 승인·거절 뒤 목록과 프로필 클럽 수가 갱신 | 관리자 클럽 멤버와 같은 row | `tests/harness/ |
| requirements | requirement-row-in-foreign-table | 75행: 요구사항 ID "REQ-CLUB-007" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-007 | SCN-CLUB-EDIT | 클럽운영진 | 클럽 정보 수정과 삭제 | `/club/:id/edit` | 수정·삭제 API 가 소유자 권한을 강제 | 클라이언트 입력 길이 제한이 서버 제한과 일치 | 수정 결과가 상세에 즉시 반영 | 관리자 클럽 상세와 같은 row | `tests/harness/check-client-serve |
| requirements | requirement-row-in-foreign-table | 76행: 요구사항 ID "REQ-CLUB-008" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-008 | SCN-CLUB-MY-CLUBS | 회원 | 가입·신청중·운영 클럽 확인 | `/profile/clubs` | `/api/v1/me/clubs` 가 상태별 목록을 반환 | pending 클럽을 가입 클럽으로 세지 않음 | 신청 취소·상태 변화가 목록에 반영 | 관리자 클럽 멤버와 같은 row | `tests/harness/ch |
| requirements | requirement-row-in-foreign-table | 77행: 요구사항 ID "REQ-CLUB-009" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-CLUB-009 | SCN-CLUB-ADMIN-OPS | 수퍼어드민 | 관리자에서 클럽 목록·상세 운영과 노출 토글 | `/admin/clubs`, `/admin/clubs/:id` | 관리자 클럽 API 가 rich 필드와 노출 토글을 처리 | 노출 토글이 로컬 상태가 아니라 실제 컬럼 | 메인·TOP 노출이 사용자 클럽 화면에 반영 | 클럽 |
| requirements | requirement-row-in-foreign-table | 78행: 요구사항 ID "REQ-FEED-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-FEED-002 | SCN-FEED-BOARD | 회원/관리자 | 피드백 보드에서 접수 항목 조회·분류·처리 | `/feedback` | 피드백 보드 API 가 tenant·역할별 목록과 답변을 반환 | 처리 상태 전이가 원장에 남음 | 제출한 피드백의 처리 상태를 확인 | 관리자 콘솔에서 재분류·완료 처리 | `tests/harness/chec |
| requirements | requirement-row-in-foreign-table | 79행: 요구사항 ID "REQ-UI-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-UI-002 | SCN-UI-NOT-FOUND | 게스트/회원/관리자 | 없는 주소로 들어갔을 때 404 안내 | `/*`, `/admin/*` | 정적 UI 계약 | 해당 없음 | 404 도 모바일 셸 폭 안에 들어오고 들어온 주소를 보여줌 | 관리자 404 는 대시보드 복귀 링크를 제공 | `tests/harness/run-task-392-p |
| requirements | requirement-row-in-foreign-table | 80행: 요구사항 ID "REQ-ADMIN-003" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-003 | SCN-ADMIN-STADIUM-CATALOG | 수퍼어드민 | 구장 목록 조회·검색과 신규 구장 등록 | `/admin/stadiums`, `/admin/stadiums/register` | `GET /api/v1/admin/stadiums` 목록과 등록 API, 담당자 구장 스코프 배정 | 구장 등록과 담당자 배정 실패를 |
| requirements | requirement-row-in-foreign-table | 81행: 요구사항 ID "REQ-ADMIN-004" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-004 | SCN-ADMIN-STADIUM-INFO | 수퍼어드민/구장관리자 | 담당 구장 기본정보·이미지·정산계좌 편집 | `/admin/stadiums/:id`, `/admin/stadiums/:id/info` | 구장 상세 조회와 부분 수정 API, 담당 밖 구장은 거부 | 이미지 순서와 편의시설이 마스터 코드와 연결 | 편집 결 |
| requirements | requirement-row-in-foreign-table | 82행: 요구사항 ID "REQ-ADMIN-005" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-005 | SCN-ADMIN-STADIUM-ZONES | 수퍼어드민/구장관리자 | 구역과 승인 방식(자동·수동) 설정 | `/admin/stadiums/:id/zones` | 구역 생성·수정 API 가 승인 방식을 실제로 받아 저장 | 예약 이력이 있는 구역 삭제를 막음 | 수동승인 구역은 사용자에게 승인 대기로 안내 | 구역 설정이 |
| requirements | requirement-row-in-foreign-table | 83행: 요구사항 ID "REQ-ADMIN-006" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-006 | SCN-ADMIN-RESERVATION-QUEUE | 수퍼어드민/구장관리자 | 예약 목록·상세에서 승인·거절·환불 처리 | `/admin/stadiums/reservations`, `/admin/stadiums/reservations/:id`, `/admin/stadiums/:id/reservations` | 관리자 예약 응 |
| requirements | requirement-row-in-foreign-table | 84행: 요구사항 ID "REQ-ADMIN-007" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-007 | SCN-ADMIN-STADIUM-BOARD | 수퍼어드민/구장관리자 | 구장 공지 글 작성·수정·고정 | `/admin/stadiums/:id/board`, `/admin/stadiums/:id/board/:postId`, `/admin/stadiums/:id/board/:postId/edit`, `/admin/stadium |
| requirements | requirement-row-in-foreign-table | 85행: 요구사항 ID "REQ-ADMIN-008" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-008 | SCN-ADMIN-STADIUM-REVIEWS | 수퍼어드민/구장관리자 | 리뷰 공개 여부 관리와 저장 사용자 확인 | `/admin/stadiums/:id/reviews` | scoped 리뷰 API 가 숨김 포함 목록과 공개 여부 변경을 처리 | 담당 밖 구장 리뷰는 조회·변경 불가 | 비공개 처리한 리뷰는 사용자 목록에 |
| requirements | requirement-row-in-foreign-table | 86행: 요구사항 ID "REQ-ADMIN-009" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-009 | SCN-ADMIN-STADIUM-CODES | 수퍼어드민 | 구장 공통코드와 편의시설 마스터 관리 | `/admin/stadiums/codes`, `/admin/system/facilities` | 편의시설 등록 API 가 코드 중복·검증·권한을 처리 | 편의시설 마스터를 구장 편집과 사용자 필터가 함께 사용 | 필터에 뜨는 |
| requirements | requirement-row-in-foreign-table | 87행: 요구사항 ID "REQ-ADMIN-010" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-010 | SCN-ADMIN-POSTS | 수퍼어드민 | 게시물 조회·삭제와 신고 처리 | `/admin/posts` | 관리자 게시글·신고 API 가 목록과 상태 처리(숨김·삭제·반려)를 제공 | 신고 상태 전이가 원장에 남고 가짜 카운트를 만들지 않음 | 숨김·삭제한 글은 사용자 화면에서 사라짐 | 신고 큐에서 처리 상태를 확인 | |
| requirements | requirement-row-in-foreign-table | 88행: 요구사항 ID "REQ-ADMIN-011" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-011 | SCN-ADMIN-BANNERS | 수퍼어드민 | 배너 등록·기간·노출 위치 관리 | `/admin/posts/banners` | 배너 API 가 유형별 노출 위치와 기간을 저장 | 편집 시 빈 기간이 기존 값을 지우지 않음 | 노출 중인 배너만 사용자 홈에 나타남 | 배너 유형과 노출 매트릭스가 일치 | `tests/har |
| requirements | requirement-row-in-foreign-table | 89행: 요구사항 ID "REQ-ADMIN-012" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-012 | SCN-ADMIN-PROMOTIONS | 수퍼어드민 | 프로모션·메가이벤트 등록과 노출 관리 | `/admin/promotions` | 프로모션 CRUD 가 혜택 유형·기간·노출 토글을 처리 | 내부 전용 필드가 공개 응답으로 새지 않음 | 노출한 프로모션이 사용자 목록·메가 화면에 반영 | 기간 문구와 시작·종료 값의 불일 |
| requirements | requirement-row-in-foreign-table | 90행: 요구사항 ID "REQ-ADMIN-013" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-013 | SCN-ADMIN-SYSTEM-ACCOUNTS | 수퍼어드민 | 운영자·구장관리자 계정과 권한·코드·다국어·로그 관리 | `/admin/system`, `/admin/system/admins`, `/admin/system/stadium-managers`, `/admin/system/permissions`, `/admin/sy |
| requirements | requirement-row-in-foreign-table | 91행: 요구사항 ID "REQ-ADMIN-014" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-014 | SCN-ADMIN-SYSTEM-SETTINGS | 개발관리자 | 환불 수수료 등 시스템 상수 설정 | `/admin/system/settings` | 설정 저장 API 는 개발관리자만 허용 | 허용 범위를 벗어난 설정값 저장을 막음 | 설정한 수수료가 사용자 환불 금액·약관 문구와 같은 값 | 구장 귀책 취소는 전액 환불 불 |
| requirements | requirement-row-in-foreign-table | 92행: 요구사항 ID "REQ-ADMIN-015" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-015 | SCN-ADMIN-INTEGRATIONS | 개발관리자 | 외부 연동(번역·결제) 키 설정과 상태 확인 | `/admin/system/integrations` | 비밀값은 암호화 저장하고 응답·로그에 노출하지 않음 | 공급자 설정 유무가 실제 결제 가능 여부와 일치 | 해당 없음 | 결제 공급자 설정 현황을 운영자가 확인 | |
| requirements | requirement-row-in-foreign-table | 93행: 요구사항 ID "REQ-ADMIN-016" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-ADMIN-016 | SCN-ADMIN-DESIGN-GUIDE | 개발관리자 | 내부 디자인 토큰·컴포넌트 참조 | `/admin/design-guide` | 서비스 API 를 부르지 않는 내부 도구 | 해당 없음 | 해당 없음 | 구장관리자에게는 숨김이고 직접 주소도 거부 | 미검증 | Console | 대기 | |
| requirements | requirement-row-in-foreign-table | 94행: 요구사항 ID "REQ-OPS-002" 가 요구사항 형식이 아닌 표 안에 있다 — 파싱하지 못했다. 원문: | REQ-OPS-002 | SCN-OPS-STANDARD-PACKAGE | 개발관리자 | 표준 QA 산출물 문서 모음 확인 | `/admin/standard-package` | 문서 링크만 제공하고 지표를 만들어내지 않음 | 해당 없음 | 해당 없음 | 근거 없는 수치를 화면에 만들지 않음 | `tests/harness/check-no-fabricated |
| routes | redirect | sports-pie-admin-web/src/app/providers/router/config.tsx:88 /events 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-admin-web/src/app/providers/router/config.tsx:89 /events/bookings 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-admin-web/src/app/providers/router/config.tsx:90 /events/promotions 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-admin-web/src/app/providers/router/config.tsx:92 /posts/events 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:195 /matches 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:199 /matches/:id 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:203 /matches/* 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:211 /profile/matches 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:223 /profile/events 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:82 /events/register 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:90 /events/:id/edit 리다이렉트는 화면에서 제외했다. |
| routes | redirect | sports-pie-web/src/app/providers/router/config.tsx:94 /events/:id/booking 리다이렉트는 화면에서 제외했다. |
| silent | swallows-failure | sports-pie-admin-web/src/pages/stadiums/reviews.tsx:67 AD-S18 — fetchStadiumDetail(Number(id)) 가 실패하면 null 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-admin-web/src/pages/stadiums/stadium-reservations.tsx:170 AD-S17 — fetchStadiumDetail(Number(id)) 가 실패하면 null 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-admin-web/src/widgets/layout/ui/AdminLayout.tsx:155 SH-S54 — http.post("/api/v1/auth/logout") 가 실패하면 undefined 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-web/src/pages/club/board/detail/page.tsx:98 US-S08 — .fetchClubDetail(clubId).then((c) => { if (generation === re… 가 실패하면 setClubName(null) 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-web/src/pages/club/board/page.tsx:58 US-S07 — fetchClubDetail(clubId).then((detail) => { if (generation !=… 가 실패하면 setClub(null) 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-web/src/pages/club/schedule/detail/page.tsx:235 US-S13 — fetchClubDetail(clubId).then((club) => { if (generation === … 가 실패하면 setClubRole(null) 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-web/src/pages/profile/stadiums/page.tsx:511 US-S29 — loadReservations() 가 실패하면 undefined 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-web/src/pages/profile/stadiums/page.tsx:524 US-S29 — .await loadReservations() 가 실패하면 undefined 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-web/src/pages/stadium/notices/page.tsx:98 US-S37 — fetchStadiumDetail(stadiumId).then((detail) => { if (!cancel… 가 실패하면 undefined 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| silent | swallows-failure | sports-pie-web/src/widgets/promotion/ui/PromotionDetailView.tsx:156 SH-S44 — fetchPromotionEngagement(promotion.id).then((state) => { if … 가 실패하면 undefined 로 갈음한다. 가져오다 실패해도 빈 값으로 갈음한다 — 이 값이 화면에 그대로 쓰이면 사용자는 '없음'과 '못 가져옴'을 구분할 수 없다. 뒤에서 걸러내는지 확인이 필요하다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/banners/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/clubs/components/ClubInfoSection.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/clubs/components/ClubPostsSection.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/clubs/components/ClubRichFieldsForm.tsx: 속성 자리(style/className/disabled 등)의 조건식 6개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/clubs/components/ClubTranslationsSection.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/clubs/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/dashboard/components/StadiumManagerDashboard.tsx: 속성 자리(style/className/disabled 등)의 조건식 5개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/dashboard/components/SuperAdminDashboard.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/login/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/members/detail.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/promotions/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/StadiumLocationPicker.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/board-detail.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/board.tsx: 속성 자리(style/className/disabled 등)의 조건식 6개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/info.tsx: 속성 자리(style/className/disabled 등)의 조건식 5개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/register.tsx: 속성 자리(style/className/disabled 등)의 조건식 8개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/reservation-detail.tsx: 속성 자리(style/className/disabled 등)의 조건식 4개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/reviews.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/settlement.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/stadium-reservations.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/stadiums/zones.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/system/components/PromotionLabelsPanel.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/pages/system/integrations.tsx: 속성 자리(style/className/disabled 등)의 조건식 4개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/widgets/feedback/ui/FeedbackWidget.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/widgets/layout/ui/AdminLayout.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-admin-web/src/widgets/layout/ui/StadiumSelector.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/features/onboarding/ui/FirstRunPreferenceSheet.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/activity/favorites/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 5개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/activity/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/club/board/detail/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 5개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/club/detail/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/club/edit/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/club/schedule/detail/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 9개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/club/schedule/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/feedback/EntryTableOverlay.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/home/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/login/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/profile/stadiums/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/settings/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/signup/profile/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 7개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/stadium/detail/components/ZoneCard.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/stadium/detail/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 5개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/stadium/notices/detail/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/stadium/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 6개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/pages/stadium/reviews/page.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/shared/ui/BannerSlider.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/shared/ui/BottomSheetShell.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/shared/ui/HorizontalCarousel.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/widgets/feedback/ui/FeedbackWidget.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/widgets/header/ui/HomeTopBar.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/widgets/header/ui/NotificationDrawer.tsx: 속성 자리(style/className/disabled 등)의 조건식 3개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/widgets/home/ui/PopularStadiums.tsx: 속성 자리(style/className/disabled 등)의 조건식 1개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/widgets/promotion/ui/PromotionDetailView.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | attribute-conditional | sports-pie-web/src/widgets/stadium/ui/BookingModal.tsx: 속성 자리(style/className/disabled 등)의 조건식 2개는 화면 상태가 아니라 겉모습 토글로 보고 제외했다 |
| states | unknown-state | sports-pie-admin-web/src/pages/clubs/components/ClubInfoSection.tsx:162 조건 `((club.joinConditions?.length ?? 0) > 0 || (club.joinRules?.length ?? 0) > 0 || (club.benefits?.length ?? 0) > 0)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/clubs/components/ClubInfoSection.tsx:164 조건 `(club.joinConditions?.length ?? 0) > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/clubs/components/ClubInfoSection.tsx:171 조건 `(club.joinRules?.length ?? 0) > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/clubs/components/ClubInfoSection.tsx:178 조건 `(club.benefits?.length ?? 0) > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/clubs/components/ClubInfoSection.tsx:211 조건 `(club.memberPreview?.length ?? 0) > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/clubs/components/ClubPostsSection.tsx:147 조건 `post.content && post.content.trim().length > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/clubs/components/ClubRichFieldsForm.tsx:366 조건 `label.text.trim()` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/info.tsx:1004 조건 `(stadium.facilities ?? []).length > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/info.tsx:1052 조건 `form.regionCode && !regionOptions.some((r) => r.code === form.regionCode)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/info.tsx:1089 조건 `isStadiumTurfType(stadium.turfType)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/info.tsx:1219 조건 `(stadium.tags ?? []).length > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/info.tsx:1278 조건 `(stadium.images ?? []).length > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/page.tsx:750 조건 `getPageNumbers()[0] > 1` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/page.tsx:756 조건 `getPageNumbers()[0] > 2` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/page.tsx:770 조건 `getPageNumbers()[getPageNumbers().length - 1] < totalPages` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/page.tsx:772 조건 `getPageNumbers()[getPageNumbers().length - 1] < totalPages - 1` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/register.tsx:918 조건 `isImageIcon(f.icon)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/reservation-detail.tsx:625 조건 `(reservation.refundFee ?? 0) > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/reservation-detail.tsx:832 조건 `formatServerDateTimeWIB(h.createdAt)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/reviews.tsx:474 조건 `getReviewVisible(review)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/stadiums/zones.tsx:324 조건 `zone.description?.trim()` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:500 조건 `isCustomIcon(item.icon)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:601 조건 `isCustomIcon(form.icon)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:770 조건 `isCustomIcon(icon)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/system/components/FacilitiesPanel.tsx:98 조건 `isCustomIcon(value)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/pages/system/page.tsx:816 조건 `row.route.startsWith("/")` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/widgets/feedback/ui/FeedbackWidget.tsx:851 조건 `location.pathname.startsWith("/feedback")` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-admin-web/src/widgets/layout/ui/AdminLayout.tsx:416 조건 `sidebarOpen && expandedMenus.includes(item.path)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/activity/favorites/page.tsx:385 조건 `getClubLevelLabelKey(club.level)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/activity/page.tsx:90 조건 `(stat.key === "clubs" && clubsLoading) || (stat.key === "reservations" && reservationsLoading) || ((stat.key === "bookmarks" || stat.key === "likes") && statsLoading)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/club/detail/page.tsx:702 조건 `!isOwnerOrManager && (isMember || hasLeft)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/club/main/page.tsx:49 조건 `club.labels?.[0]?.text` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/events/page.tsx:99 조건 `promotion.description?.trim()` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/feedback/BoardPage.tsx:558 조건 `isVerificationRecord(selectedEntry)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/oauth/authorize/page.tsx:90 조건 `info.scope.includes("profile")` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/oauth/authorize/page.tsx:91 조건 `info.scope.includes("points")` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/profile/stadiums/page.tsx:1268 조건 `canResumePayment(reservation)` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/stadium/detail/page.tsx:570 조건 `(stadium.promotionLabels ?? []).length > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/stadium/detail/page.tsx:632 조건 `(stadium.tags ?? []).length > 0` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/stadium/detail/page.tsx:677 조건 `facilityIcons[facility] && !facilityIcons[facility].startsWith('ri-')` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/pages/stadium/page.tsx:893 조건 `? stadium.image` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/widgets/club/ui/ClubPromoBanner.tsx:68 조건 `? club.cardImage` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/widgets/feedback/ui/FeedbackWidget.tsx:1195 조건 `location.pathname.startsWith("/feedback") || location.pathname.startsWith("/pg-review")` 가 어떤 상태인지 판정되지 않았다 |
| states | unknown-state | sports-pie-web/src/widgets/stadium/ui/StadiumInfo.tsx:43 조건 `isStadiumTurfType(stadium.turfType)` 가 어떤 상태인지 판정되지 않았다 |
| subjourneys | subjourney-graph-incomplete | 서브 여정은 목적지를 푼 링크로만 그렸다. 목적지가 변수라 못 푼 링크가 12개 있으므로, 여기서 "안 이어졌다"는 "이어진 것을 못 찾았다"는 뜻이다 |
| unreachable | no-way-in | US-S01 NotFoundPage (*) — 이 주소가 화면 코드 어디에도 글자로조차 안 나온다 — 주소를 직접 쳐야만 닿는다 |