Skip to content

Audit 5 — navigation parity (2026-11-01) ​

Status: Reference · Date: 2026-11-01 · The tables behind owner-review-52-audits-2026-11-01.md § 3. Read-only, at HEAD 191e628bd.

Read-only audit. Repo ~/Dev/twomore-v2 at HEAD 191e628bd, working tree clean. Inputs: docs/workflows/page-links.json (329 links), docs/workflows/page-levels.json (82 pages), docs/architecture/page-code-map.md, packages/app/src/navigation/routes.ts (+ venue-owner-claim-routes.ts), docs/design/owner-review-52-synthesis-2026-10-31.md § 3, and the appRouter/routes.* calls under packages/features/*/src, packages/app/src/presentation, apps/mobile/app, apps/web.

Method: for each drawn link I resolved from/to to routes (page-levels), took the screen serving from (page-code-map), walked its relative-import closure (screen, sections, hooks, shared rows in the same feature) and the shared packages/app components it renders (PersonRow, PlayerIdentityChip/Card, DmThreadRow, VenueFinder, ClubCard, MatchHistoryRow, SessionCompactRow, LeaderboardPodium, SettingsRow, whose default presses are known), and read the pushing line. Evidence is file:line of the push. built means the pair of pages is reachable; when the drawn control is not the one that exists the row says [control differs] and the JSON carries controlDiffers: true. No test was run, nothing was executed in the app: this is a reading of the source.

Summary ​

Class (drawn but not built, 329 links)Count
built152
built via another route38
not built102
from is new16
to is new20
unsure1

Of the 152 built, 27 are [control differs] (the pair opens, through another control than the one drawn: a header icon for a FAB, a CTA band for a MenuSheet, a footer row for a Shelf-head door, the default tap on a person row for a Sheet). 25 of the built are kind tab (24 tab-bar links, 1 in-screen pill, link 73).

By kind: band 38, door 115, fab 16, header 6, link 11, menu 33, push 6, row 77, switcher 2, tab 25.

  • Built but not drawn: 52 rows in the second table (12 dropped on purpose by review 52 § 3, 5 moved on purpose by the boards to another page or control, 4 not a page pair or a landing contradiction, 31 unsure: a missing link or a path the boards did not mention).
  • Route helpers no page claims: 22 listed in the third table (4 have no caller at all: ranking, matchHistory, createPost, notificationsAt).
  • Owed pages: none of the five has a route, a helper or a screen of its own (details after the third table).

Findings worth reading first ​

  1. The club 관리 gear sheet is built as a routed screen. Every L2-01 -> L3-03/07/10/11/25/27/28/29 and L4-20 link runs through /clubs/[clubId]/admin (club-detail-screen.tsx:523 -> club-detail/admin-tab.tsx), a screen no page claims. 신고 관리 (L3-28) is reachable only from the snapshot strip there, and only while the open-report count is non-zero (admin-snapshot-cells.ts:84). Status built via another route.
  2. L2-04 is served by the wrong screen for navigation. /venues/[id] (VenueDetailScreen, the route page-levels gives L2-04) has no navigation but back; every picker, list and signal opens /directory-venues/[id] (routes.directoryVenue, 10 callers), which holds all of L2-04's outgoing links (create session, 정보 수정 제안, 소유권 신청, 제안 내역). Review 52 § 3 retires the directory screen into L2-04; until then, of the 22 links into and out of L2-04, 13 are built via another route, 6 not built, 3 built.
  3. Three routes are claimed by two pages each, against review 52 § 3's "82 pages, 0 shared routes": /(tabs)/(sessions) (L1-03, L1-03c), /clubs/[clubId]/dues (L3-11, L4-14), /messages (L3-14, L3-15). Links between those pairs (73, 183, 184, 197) cannot be a push today; 197 is an in-screen tab, 183 and 184 have nothing to open.
  4. The L4-10 claim looks wrong. page-levels gives L4-10 (멤버 초대) the route /messages/add-members (the DM add-members screen), but page-links opens it from club pages (L2-01 130, L3-11 182, L3-25 218, L3-03 317). The app's only opener is the DM thread (dm-thread/participants-modal.tsx:158), which the boards do not draw. Those four links are not built on the reading that no club-side invite page exists; if L4-10 is meant to be the club invite page, it has no route yet.
  5. Member and person rows are mostly inert. 15 of the 29 links into L2-06 (공개 프로필) are not built; eight of them (103, 104, 208, 209, 213, 238, 240, 251) rest on an explicit onPress={null}: club member rows (club-members/member-row.tsx:114), the 순위 stats modal, add-friend results, the blocked list, attendance and applicant rows, the DM member list. The 13 built ones ride the default PersonRow / PlayerIdentityChip tap (person-row.tsx:155).
  6. Not-found doors are 돌아가기. NotFoundState has one action, appRouter.back() (not-found-state.tsx:39); the five drawn not-found doors (133, 153, 241, 249, 253) and L0-06's (18) are not built.
  7. /profile/practice is stale in page-code-map. The route file went with commit 51c6060c4 (the practice log leaves the product); the map and page-inventory.json (commit 29466be87) still list it among the 85 routes and the 20 unclaimed. Today: 84 route files, 19 unclaimed.
#FromToViaKindStatusEvidence
0L0-01 시작L0-02 이메일 로그인the entry band's ghost 이메일로 로그인bandfrom is newno route (page-levels route null); sign-in today is LoginScreen inside AuthGate (apps/mobile/app/_layout.tsx:226), email+password only
1L0-01 시작L0-03 이메일 가입interim only: the entry band's ball 이메일로 가입bandfrom is newno route (page-levels route null); sign-in today is LoginScreen inside AuthGate (apps/mobile/app/_layout.tsx:226), email+password only
2L0-01 시작L0-04 온보딩a provider button, for a new account (after the provider's own page)bandfrom is newno route (page-levels route null); sign-in today is LoginScreen inside AuthGate (apps/mobile/app/_layout.tsx:226), email+password only
3L0-01 시작L1-01 홈a provider button, for a known account (after the provider's own page; or the signed-out deep link's destination)bandfrom is newno route (page-levels route null); sign-in today is LoginScreen inside AuthGate (apps/mobile/app/_layout.tsx:226), email+password only
4L0-01 시작L3-44 이용약관the entry band's links row: 이용약관bandfrom is newno route (page-levels route null); sign-in today is LoginScreen inside AuthGate (apps/mobile/app/_layout.tsx:226), email+password only
5L0-01 시작L3-45 개인정보 처리방침the entry band's links row: 개인정보 처리방침bandfrom is newno route (page-levels route null); sign-in today is LoginScreen inside AuthGate (apps/mobile/app/_layout.tsx:226), email+password only
6L0-02 이메일 로그인L1-01 홈the band's 로그인 (replace; or the signed-out deep link's destination)bandfrom is newno route (page-levels route null); sign-in today is LoginScreen inside AuthGate (apps/mobile/app/_layout.tsx:226), email+password only; a successful signInWithEmail just swaps AuthGate to the app stack
7L0-03 이메일 가입L0-04 온보딩the mailed link (the mail app, then the app) continues to 본인인증linkfrom is newno 이메일 가입 screen or mailed-link flow in the app (LoginScreen only signs in)
8L0-03 이메일 가입L1-01 홈the mail for an address that already has an account: 로그인하기, a one-tap sign-in link (the mail app, then the app)linkfrom is newno 이메일 가입 screen or mailed sign-in link in the app
9L0-04 온보딩L0-01 시작step 1, an existing account: the band 카카오로 로그인하고 연결bandnot builtpackages/features/onboarding/src/onboarding-wizard-screen.tsx has no 카카오 connect band (screen exists inside AuthGate, no route)
10L0-04 온보딩L0-01 시작step 1, the under-14 stop's 로그아웃 (and the exit Dialog's)doorbuiltpackages/features/onboarding/src/onboarding-wizard-screen.tsx:156-170 logout confirm -> signOut() -> AuthGate shows LoginScreen
11L0-04 온보딩L1-01 홈step 3: 건너뛰기 in the headerheaderbuilt[control differs] packages/features/onboarding/src/onboarding-wizard-screen.tsx:284 appRouter.replace(postOnboardingDestination), default routes.home (packages/app/src/navigation/onboarding-intent.ts:26); no step-3 header 건너뛰기
12L0-04 온보딩L1-02 클럽step 3: the Cell 클럽에 가입할래요doorbuilt[control differs] destination routes.discoverClubs for intent club_member (packages/app/src/navigation/onboarding-intent.ts:27), chosen by entry intent, not a step-3 Cell
13L0-04 온보딩L1-03 경기step 3: the Cell 매치로 칠래요 (경기 › 매치 찾기)doornot builtno intent maps to 경기 › 매치 찾기 (packages/app/src/navigation/onboarding-intent.ts:26-32: home, discoverClubs, createClub, createSession, joinClub)
14L0-04 온보딩L3-43 문의하기the own-name-phone stop’s band 문의하기 (on the Danal fallback channel)bandnot builtno routes.legalContact push in packages/features/onboarding/src/*
15L0-04 온보딩L3-44 이용약관step 2: 보기 › on the 서비스 이용약관 consent rowdoorbuiltpackages/features/onboarding/src/onboarding-step-consent.tsx:109 appRouter.push(policyUrl); policyUrl 'twomore://legal/terms' (packages/app/src/config/legal/policy-versions.ts:23) = /legal/terms (hard-coded scheme string, not a routes helper)
16L0-04 온보딩L3-45 개인정보 처리방침step 2: 보기 › on the 개인정보 처리방침 consent rowdoorbuiltpackages/features/onboarding/src/onboarding-step-consent.tsx:109; 'twomore://legal/privacy' (policy-versions.ts:24) = /legal/privacy
17L0-04 온보딩L4-02 클럽 만들기step 3: the Cell 클럽을 만들래요doorbuilt[control differs] destination routes.createClub for intent club_admin (packages/app/src/navigation/onboarding-intent.ts:29), chosen by entry intent, not a step-3 Cell
18L0-06 공유 링크L1-01 홈the not-found state's 홈으로 가기doornot builtapps/mobile/app/s/[sessionId].tsx: the not-found state is a bare EmptyState with no action
19L0-06 공유 링크L1-03 경기the closed Notice's action 매치 찾기 (경기 › 매치 찾기)doornot builtno closed-session Notice in apps/mobile/app/s/[sessionId].tsx (preview shows date/time/venue only)
20L0-06 공유 링크L2-01 클럽 홈a member opening /lb (replace; the club's 기록 pane)linkbuilt via another routeapps/mobile/app/lb/[clubId].tsx:37 Redirect to routes.club(id,{tab:'records'}); served by /lb, not /s
21L0-06 공유 링크L2-02 일정 상세a member opening /s (replace)linkbuiltapps/mobile/app/s/[sessionId].tsx:93-96 Redirect to routes.clubSession for a viewer who can read the session
22L0-06 공유 링크L2-03 매치 미리보기the band 참석 신청하기 (a non-member's /s)bandnot builtapps/mobile/app/s/[sessionId].tsx renders PublicSessionSharePreview (FactList only); no 참석 신청하기 band, no routes.sessionPreview
23L0-06 공유 링크L2-04 장소 상세the 주소 Cell on a non-member’s /s (장소 상세 · 디렉터리)doornot builtPublicSessionSharePreview (apps/mobile/app/s/[sessionId].tsx:36-50) shows the location as a plain FactList row, no door
24L0-06 공유 링크L2-06 공개 프로필a member opening /p (replace)linkbuilt via another routeapps/mobile/app/p/[userId].tsx:37-38 Redirect to routes.profileDetail; served by /p
25L0-07 웹 공유 페이지L0-01 시작the /join-club band 로그인하기 (/login, the code and returnTo kept)bandbuilt via another routeL0-07 has no route; the /join-club page is L4-04's JoinClubScreen: packages/features/clubs/src/join-club-screen.tsx:114-118 push(routes.loginReturnTo(routes.joinClub({clubId,code}))); web /login exists (apps/web/app/login/page.tsx), mobile has no /login route
26L0-07 웹 공유 페이지L2-01 클럽 홈the /join-club club rowrownot builtpackages/features/clubs/src/join-club-screen.tsx shows the origin club only as context title/hint (:132-133), no club row
27L1-01 홈L1-02 클럽first run: the 할 일 card 클럽 찾기 (클럽 at 클럽 찾기)doorbuiltpackages/features/home/src/cards/home-club-discovery-card.tsx:23 routes.discoverClubs (zero-club card, gated in shared/home-recommendations-section.tsx)
28L1-01 홈L1-02 클럽the tab bar › 클럽tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
29L1-01 홈L1-03 경기first run: the 할 일 card 매치 찾기 (경기 at 매치 찾기)doorbuiltpackages/features/home/src/cards/home-nearby-pickups-card.tsx:105 and packages/features/home/src/views/home-today-view.tsx:454 routes.activityPickups (/activity?tab=pickup_finder redirects to the 경기 tab)
30L1-01 홈L1-03 경기the Block's door 매치 찾기 › when nothing is ahead (경기 at 매치 찾기)doorbuilt[control differs] packages/features/home/src/views/home-today-view.tsx:454 (discovery Pressable); not the Block's door
31L1-01 홈L1-03 경기the tab bar › 경기tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
32L1-01 홈L1-04 기록the tab bar › 기록tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
33L1-01 홈L1-05 프로필the tab bar › 프로필tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
34L1-01 홈L2-01 클럽 홈the 할 일 Feed item 회비 납부 (a member’s own dues: 클럽 홈 at 회비)doornot builtno routes.club/routes.clubDues in packages/features/home/src; home has no 회비 납부 item
35L1-01 홈L2-02 일정 상세a Feed item: a club session, a 대회 or a 경기 결과rowbuiltpackages/features/home/src/shared/home-pane-row.ts:239 routes.clubSession(session.clubId, session.id)
36L1-01 홈L2-02 일정 상세the Block (the next game) and its door 일정 보기 ›doorbuilt[control differs] packages/features/home/src/cards/live-session-stack.tsx:127,136 and packages/features/home/src/shared/home-pane-row.ts:239 routes.clubSession; the card tap, no 일정 보기 › door
37L1-01 홈L2-02 일정 상세the Block's door 입금하기 › while a fee is due (that session's 일정 상세)doornot builtno routes.sessionPayments in packages/features/home/src
38L1-01 홈L2-02 일정 상세the 할 일 Feed item 참가비 입금 (that session's 일정 상세)doornot builtno routes.sessionPayments in packages/features/home/src
39L1-01 홈L2-03 매치 미리보기a Feed item: a 매치rowbuiltpackages/features/home/src/cards/home-nearby-pickups-card.tsx:51 routes.sessionPreview(pickup.id)
40L1-01 홈L3-11 회비 관리the 할 일 Feed item 회비 미납 (an official)doornot builtno routes.clubDues in packages/features/home/src
41L1-01 홈L3-13 알림the header 알림 iconheaderbuiltpackages/features/home/src/cards/notification-bell.tsx:53 routes.notifications
42L1-01 홈L3-14 메시지the header 메시지 iconheadernot builtno 메시지 icon in the home header (packages/features/home/src/home-feed-screen.tsx renders NotificationBell only); the inbox opens from the 프로필 header (packages/features/profile/src/profile-screen.tsx:236) and the web nav (apps/web/components/app-nav.tsx:295)
43L1-01 홈L3-23 앨범a Feed item: a 사진 upload (앨범)rownot builtno routes.clubAlbum in packages/features/home/src
44L1-01 홈L3-25 멤버 관리the 할 일 Feed item 가입 신청 (멤버 관리 at 가입 신청)doornot builtno routes.clubMembers/joinReview in packages/features/home/src
45L1-01 홈L3-35 참석자 관리the 할 일 Feed item 입금 확인 (one session's 참석자 관리)doornot builtno routes.sessionParticipants in packages/features/home/src
46L1-01 홈L3-38 스코어카드the 할 일 Feed item 점수 입력doorbuilt[control differs] packages/features/home/src/cards/home-disputed-alert-banner.tsx:89 routes.scorecard(firstMatch.sessionId): a disputed-score banner, not a 점수 입력 할 일 item
47L1-01 홈L3-41 게시글a Feed item: a 공지, 자유 or 경기후기 postrownot builtno routes.clubPost in packages/features/home/src (the home feed shows sessions, not posts)
48L1-01 홈L4-01 일정 만들기the FAB 매치 (a member) or 일정 (an officer of one club)fabnot builtno routes.createSession in packages/features/home/src; create entry is on 경기 (packages/features/activity/src/activity-screen.tsx:535) and the web nav (apps/web/components/app-nav.tsx:209)
49L1-01 홈L4-01 일정 만들기the FAB 일정 (an officer of several clubs) › the club pickerfabnot builtsame: no FAB or club picker on home
50L1-01 홈L4-04 초대 코드로 가입first run: the 할 일 card 초대 코드로 가입doornot builtno routes.joinClub in packages/features/home/src
51L1-02 클럽L1-01 홈the tab bar › 홈tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
52L1-02 클럽L1-03 경기the tab bar › 경기tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
53L1-02 클럽L1-04 기록the tab bar › 기록tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
54L1-02 클럽L1-05 프로필the tab bar › 프로필tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
55L1-02 클럽L2-01 클럽 홈a 내 클럽 or 게스트 클럽 rowrowbuiltpackages/features/clubs/src/shared/club-card.tsx:235 routes.club for a member row; archived/guest rows are the same ClubCard
56L1-02 클럽L2-01 클럽 홈a 신청 중 rowrowbuilt via another routepackages/features/clubs/src/shared/club-card.tsx:235 sends a non-member row to routes.clubPreview (/clubs/[clubId]/preview, PublicClubProfileScreen); whether a 신청 중 row is isMember=false is unsure
57L1-02 클럽L2-01 클럽 홈a 클럽 찾기 row (a non-member sees 클럽 홈)rowbuilt via another routepackages/features/clubs/src/shared/club-card.tsx:235 routes.clubPreview for a non-member (/clubs/[clubId]/preview)
58L1-02 클럽L2-01 클럽 홈a header-search result row (클럽 찾기)rowbuilt via another routesearch results are the same ClubCard (packages/features/clubs/src/club-list-screen.tsx:79-130); non-member -> routes.clubPreview
59L1-02 클럽L4-02 클럽 만들기the FAB 클럽 › MenuSheet 클럽 만들기fabbuilt[control differs] packages/features/clubs/src/club-list-screen.tsx:486 header Plus icon and :506 empty-state band -> routes.createClub; no FAB MenuSheet
60L1-02 클럽L4-04 초대 코드로 가입the FAB 클럽 › MenuSheet 초대 코드로 가입fabbuilt[control differs] packages/features/clubs/src/shared/club-join-header-action.tsx:13 header action and packages/features/clubs/src/club-list-screen.tsx:395 empty-state secondary -> routes.joinClub(); no FAB MenuSheet
61L1-02 클럽L4-20 클럽 설정a 보관한 클럽 row (the recovery view)rowbuiltpackages/features/clubs/src/shared/archived-club-row.tsx:15 routes.clubSettings
62L1-03 경기L1-01 홈the tab bar › 홈tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
63L1-03 경기L1-02 클럽the tab bar › 클럽tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
64L1-03 경기L1-04 기록the tab bar › 기록tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
65L1-03 경기L1-05 프로필the tab bar › 프로필tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
66L1-03 경기L2-02 일정 상세an 예정 row (저장됨 too)rowbuiltpackages/app/src/presentation/hooks/use-club-session-card-row.tsx:36 routes.clubSession via packages/features/activity/src/activity-screen.tsx:135,231
67L1-03 경기L2-03 매치 미리보기a header-search result row (일정, 매치)rownot builtpackages/features/activity/src/activity-screen.tsx has no header search; the 테니스장 tab and 매치 찾기 pane have their own filters. The pair is reached by the 매치 찾기 row (link 68)
68L1-03 경기L2-03 매치 미리보기a 매치 찾기 rowrowbuiltpackages/features/activity/src/activity-screen.tsx:353 routes.sessionPreview(item.id)
69L1-03 경기L2-04 장소 상세a header-search result row (테니스장)rowbuilt via another routeVenueFinder rows push routes.directoryVenue (packages/app/src/presentation/components/sessions/venue-finder.tsx:287,409) = /directory-venues/[id], not /venues/[id]; the 경기 tab's 테니스장 pane has its own search, no header search
70L1-03 경기L4-01 일정 만들기the FAB 매치fabbuilt[control differs] packages/features/activity/src/activity-screen.tsx:535 routes.createSession(PICKUP_CLUB_SENTINEL) in the 매치 찾기 pane's bottom CTA band (not a FAB)
71L1-03c 경기 · 테니스장L1-01 홈the Tab bartabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
72L1-03c 경기 · 테니스장L1-02 클럽the Tab bartabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
73L1-03c 경기 · 테니스장L1-03 경기the Tabs 예정 and 매치 찾기tabbuilt[control differs] L1-03c and L1-03 share /(tabs)/(sessions); the 예정 / 매치 찾기 pills are the in-screen tabs of packages/features/activity/src/activity-screen.tsx:470-500 (activeTab state), not a route push
74L1-03c 경기 · 테니스장L1-04 기록the Tab bartabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
75L1-03c 경기 · 테니스장L1-05 프로필the Tab bartabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
76L1-03c 경기 · 테니스장L2-04 장소 상세a venue Feed itemrowbuilt via another routevenue-finder.tsx:287,409 routes.directoryVenue (/directory-venues/[id])
77L1-03c 경기 · 테니스장L4-07 장소 정보 제안the Feed-end door 목록에 없는 테니스장 추가, and the same door in the Search takeoverdoorbuiltpackages/app/src/presentation/components/sessions/venue-finder/venue-finder-contribution-row.tsx:37 routes.newVenueContribution() in venue-finder-browse-list.tsx
78L1-04 기록L1-01 홈the tab bar › 홈tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
79L1-04 기록L1-02 클럽the tab bar › 클럽tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
80L1-04 기록L1-03 경기first run: the Empty state's 매치 찾기 (경기 at 매치 찾기)doorbuiltpackages/features/records/src/records-screen.tsx:359 routes.activityPickups (zero-match EmptyState action)
81L1-04 기록L1-03 경기the tab bar › 경기tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
82L1-04 기록L1-05 프로필the tab bar › 프로필tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
83L1-04 기록L2-02 일정 상세a match card in the 경기 기록 Shelf (its session's 일정 상세)rownot builtpackages/features/records/src/records-screen.tsx has no match list (its 경기 기록 link goes to /records/history, :411); no routes.clubSession
84L1-04 기록L2-06 공개 프로필a face in the 순위, 최고의 파트너 or 천적 Shelfrownot builtpackages/features/records/src/cards/top-partners-card.tsx has no onPress/routes
85L1-04 기록L3-05 하루 기록a day on the activity gridrownot builtpackages/features/records/src/cards/activity-heatmap-card.tsx has no onPress/routes; routes.recordDay is only pushed from packages/features/records/src/record-detail-screen.tsx:192
86L1-04 기록L3-06 선수별 전적the 최고의 파트너 Shelf head's door 선수별 전적 ›doorbuilt[control differs] packages/features/records/src/records-screen.tsx:405 routes.analysisRivals from a footer ListRow, not a Shelf-head door
87L1-04 기록L3-17 순위표the 순위 Shelf head's door 순위표 ›doorbuilt[control differs] packages/features/records/src/records-screen.tsx:417 routes.recordsLeaderboard from a footer ListRow, not a Shelf-head door
88L1-05 프로필L3-08 테니스 여정the closing Cell 테니스 여정 (owner review 52: the match notes and the season's story)doorto is newno /profile/journey route file or helper
89L1-05 프로필L1-01 홈the tab bar › 홈tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
90L1-05 프로필L1-02 클럽the tab bar › 클럽tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
91L1-05 프로필L1-03 경기the tab bar › 경기tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
92L1-05 프로필L1-04 기록the tab bar › 기록tabbuiltapps/mobile/app/(tabs)/_layout.tsx:116-148 (Tabs.Screen for (home), (clubs), (sessions), (records), (profile))
93L1-05 프로필L2-06 공개 프로필a face in the 친구 pilerownot builtpackages/features/profile/src/friends-summary-card.tsx:127 pushes routes.profileFriends for the whole pile; no per-face profile push
94L1-05 프로필L3-01 신뢰 기록the identity Block's Door pill 신뢰 72점doorto is newno /profile/trust route file or helper
95L1-05 프로필L3-09 업적a badge on the 업적 Shelfrownot builtpackages/features/profile/src/achievements-preview-section.tsx has only the head link (:127); tiles carry no onPress
96L1-05 프로필L3-09 업적the 업적 head's 전체 보기 ›doorbuiltpackages/features/profile/src/achievements-preview-section.tsx:127 routes.achievements (own profile only)
97L1-05 프로필L3-18 친구 목록the 친구 head's 전체 보기 ›doorbuiltpackages/features/profile/src/friends-summary-card.tsx:102 (count>0)
98L1-05 프로필L3-19 친구 찾기the empty 친구's action 친구 찾기doorbuiltpackages/features/profile/src/friends-summary-card.tsx:116 routes.profileFriendsAdd (empty state)
99L1-05 프로필L4-15 설정the header 설정 iconheaderbuiltpackages/features/profile/src/profile-screen.tsx:255 and packages/features/profile/src/profile-menu-card.tsx:46 routes.settings
100L2-01 클럽 홈L2-02 일정 상세a Feed item: a club session, a 대회 or a 경기 결과rowbuiltpackages/features/clubs/src/club-detail/home-tab.tsx:159, packages/features/clubs/src/club-detail/home/use-home-tab-data.tsx:412, packages/features/clubs/src/club-detail/home/auto-match-row.tsx:29 routes.clubSession; sessions pane rows via SessionCompactRow
101L2-01 클럽 홈L2-03 매치 미리보기a non-member's session item (매치 미리보기)rownot builta non-member is replaced to routes.clubPreview (packages/features/clubs/src/club-detail-screen.tsx:178); the preview's guest sessions push routes.clubSession (packages/features/clubs/src/public-club-profile/guest-sessions-section.tsx:66), not sessionPreview
102L2-01 클럽 홈L2-04 장소 상세the 홈 코트 Cell at the top of the 홈 panerownot builtno routes.venue in the club-detail closure (packages/features/clubs/src/club-detail-screen.tsx and club-detail/*)
103L2-01 클럽 홈L2-06 공개 프로필a 멤버 row (an official's too)rownot builtmember rows are PersonRow onPress={null}: packages/features/clubs/src/club-members/member-row.tsx:114 (shared by club-detail/members-pane.tsx)
104L2-01 클럽 홈L2-06 공개 프로필a 순위 row's Sheet › 공개 프로필 (and the named 베스트 파트너 and 천적)menunot builtthe 순위 row opens MemberStatsModal (packages/features/clubs/src/club-detail/ranking-tab.tsx:437) whose PersonRow/PlayerIdentityChip are onPress={null} (member-stats-modal.tsx:238, member-stats-rows.tsx:103,170)
105L2-01 클럽 홈L3-03 성장 분석the header 관리 gear (an official) › the 관리 sheet › 성장 분석menubuilt via another routegear 관리 -> routes.clubAdmin (packages/features/clubs/src/club-detail-screen.tsx:523) -> packages/features/clubs/src/club-detail/admin-tab.tsx:153 routes.clubAnalytics (row tagged 준비 중 when not entitled)
106L2-01 클럽 홈L3-06 선수별 전적a 순위 row's Sheet › 나와의 전적menunot builtno routes.analysisRivals in the club-detail closure
107L2-01 클럽 홈L3-06 선수별 전적the 기록 pane's closing Cell 선수별 전적doornot builtpackages/features/clubs/src/club-detail/records-pane.tsx has no routes
108L2-01 클럽 홈L3-07 출석 현황the header 관리 gear (an official) › the 관리 sheet › 출석 현황menubuilt via another route/clubs/[clubId]/admin -> packages/features/clubs/src/club-detail/admin-tab.tsx:90 routes.clubAttendance
109L2-01 클럽 홈L3-10 클럽 대항전the header 관리 gear (an official) › the 관리 sheet › 클럽 대항전menubuilt via another route/clubs/[clubId]/admin -> packages/features/clubs/src/club-detail/admin-tab.tsx:126 routes.clubChallenges
110L2-01 클럽 홈L3-11 회비 관리the header 관리 gear (an official) › the 관리 sheet › 회비 관리menubuilt via another route/clubs/[clubId]/admin -> packages/features/clubs/src/club-detail/admin-tab.tsx:99 routes.clubDues
111L2-01 클럽 홈L3-11 회비 관리the 회비 pane's closing Cell 회비 관리 with its count (an official)doornot builtpackages/features/clubs/src/club-detail/dues-pane.tsx has no routes; routes.clubDues is only pushed from the admin screen
112L2-01 클럽 홈L3-16 참가비 내역the 회비 pane's closing Cell 참가비 내역doorto is newno /profile/fees route file or helper
113L2-01 클럽 홈L3-23 앨범a Feed item: a 사진 upload (앨범)rowbuiltpackages/features/clubs/src/club-detail/home/auto-media-row.tsx:57 routes.clubAlbum
114L2-01 클럽 홈L3-23 앨범the MediaBand (the album)rowbuiltpackages/features/clubs/src/club-detail/club-place-header.tsx:82 routes.clubAlbum (onOpenAlbum)
115L2-01 클럽 홈L3-24 복식 파트너 추천the 베스트 파트너 head's door 복식 파트너 추천 ›doorbuilt[control differs] packages/features/clubs/src/club-detail/members-pane.tsx:232 routes.clubPartners from a ListRow in the 멤버 pane, not a 베스트 파트너 head door
116L2-01 클럽 홈L3-25 멤버 관리the header 관리 gear (an official) › the 관리 sheet › 멤버 관리menubuilt via another route/clubs/[clubId]/admin -> packages/features/clubs/src/club-detail/admin-tab.tsx:80 routes.clubMembers
117L2-01 클럽 홈L3-25 멤버 관리the 멤버 pane's closing Cell 멤버 관리 (an official)doorbuilt[control differs] packages/features/clubs/src/club-detail/club-place-header.tsx:91 routes.clubMembers via the header member count (any member), not an official's closing Cell
118L2-01 클럽 홈L3-25 멤버 관리the 멤버 pane's Task Cell 가입 신청 (멤버 관리 at 가입 신청; an official)doornot builtroutes.joinReview is pushed from packages/features/clubs/src/club-members/members-list-header.tsx:170 (L3-25), not from the 멤버 pane
119L2-01 클럽 홈L3-27 일정 관리the header 관리 gear (an official) › the 관리 sheet › 일정 관리menubuilt via another route/clubs/[clubId]/admin -> packages/features/clubs/src/club-detail/admin-tab.tsx:108 routes.clubSessions
120L2-01 클럽 홈L3-28 신고 관리the header 관리 gear (an official) › the 관리 sheet › 신고 관리menubuilt via another routeonly the admin screen's snapshot strip: packages/features/clubs/src/club-detail/admin-snapshot-cells.ts:84 routes.clubReports (shown when the open-report count is non-zero)
121L2-01 클럽 홈L3-29 테니스장 관리the header 관리 gear (an official) › the 관리 sheet › 테니스장 관리menubuilt via another route/clubs/[clubId]/admin -> packages/features/clubs/src/club-detail/admin-tab.tsx:117 routes.clubVenues
122L2-01 클럽 홈L3-41 게시글a Feed item: a 공지, 자유 or 경기후기 postrowbuiltpackages/features/clubs/src/shared/post-row.tsx:371 routes.clubPost (PostFeedRow used by club-detail/home-tab.tsx:46)
123L2-01 클럽 홈L3-42 DM 스레드a 채팅 rowrowbuiltpackages/features/clubs/src/club-detail/chat-pane.tsx uses DmThreadRow whose default press is routes.dmThread (packages/app/src/presentation/components/dm/dm-thread-row.tsx:131)
124L2-01 클럽 홈L4-01 일정 만들기the FAB 만들기 (an official) › the MenuSheet 일정 만들기fabbuilt[control differs] packages/features/clubs/src/club-detail-screen.tsx:555 routes.createSession in a BottomCtaBand on the 일정 pane (canManageSchedule); no FAB / MenuSheet
125L2-01 클럽 홈L4-01 일정 만들기the empty 회비 pane's setup step 첫 일정 만들기 (an official)doornot builtpackages/features/clubs/src/club-detail/dues-pane.tsx has no routes
126L2-01 클럽 홈L4-03 행사 만들기the FAB 만들기 (an official) › the MenuSheet 행사 만들기fabto is newno /clubs/[clubId]/events/new route file or helper
127L2-01 클럽 홈L4-04 초대 코드로 가입a non-member's join band 초대 코드로 가입 (an invite-only club)bandbuilt via another routea non-member is replaced to /clubs/[clubId]/preview (packages/features/clubs/src/club-detail-screen.tsx:178), whose join band pushes routes.joinClub({clubId}) (packages/features/clubs/src/public-club-profile-screen.tsx:224)
128L2-01 클럽 홈L4-05 글쓰기the FAB 글 (a member)fabbuilt[control differs] packages/features/clubs/src/club-detail-screen.tsx:543 routes.clubBoardCreate in a BottomCtaBand on the 홈 pane; no FAB
129L2-01 클럽 홈L4-05 글쓰기the FAB 만들기 (an official) › the MenuSheet 글쓰기fabbuilt[control differs] same band (packages/features/clubs/src/club-detail-screen.tsx:543) and the mission card packages/features/clubs/src/club-detail/home/use-home-tab-data.tsx:366; no FAB MenuSheet
130L2-01 클럽 홈L4-10 멤버 초대the empty 회비 pane's setup step 멤버 초대 (an official)doornot builtno 멤버 초대 setup step in packages/features/clubs/src/club-detail/dues-pane.tsx; routes.dmAddMembers is pushed only from the DM thread (packages/features/messaging/src/dm-thread/participants-modal.tsx:158)
131L2-01 클럽 홈L4-14 회비 설정the empty 회비 pane's setup step 회비 설정 (an official)doornot builtpackages/features/clubs/src/club-detail/dues-pane.tsx has no routes
132L2-01 클럽 홈L4-20 클럽 설정the header 관리 gear (an official) › the 관리 sheet › 클럽 설정menubuilt via another route/clubs/[clubId]/admin -> packages/features/clubs/src/club-detail/admin-tab.tsx:165 routes.clubSettings (canManageClub)
133L2-02 일정 상세L1-03 경기the not-found state’s 경기 보기doornot builtpackages/features/sessions/src/session-detail-screen.tsx:242 NotFoundState: its only action is 돌아가기 = appRouter.back() (packages/app/src/presentation/components/not-found-state.tsx:39)
134L2-02 일정 상세L2-01 클럽 홈the 클럽 Cell of the 정보 group (a club’s session)rownot builtno routes.club in the session-detail closure (packages/features/sessions/src/session-detail-screen.tsx and session-detail/*)
135L2-02 일정 상세L2-04 장소 상세the band’s 장소 보기 pill, the map and the titlebandbuiltpackages/features/sessions/src/session-detail/sections/session-hero-section.tsx:92 routes.venue(session.courtVenueId) = /venues/[id]
136L2-02 일정 상세L2-06 공개 프로필the 호스트 Cell of the 정보 grouprowbuilt[control differs] packages/features/sessions/src/session-detail/sections/participation-section.tsx:152-196 roster PersonRow (host-badged row) with the default tap routes.userProfile (packages/app/src/presentation/components/person-row.tsx:155); no 정보-group 호스트 Cell
137L2-02 일정 상세L3-35 참석자 관리the band 정산하기 (the host, completed)bandbuilt via another routepackages/features/sessions/src/session-detail/actions/primary-action.tsx:395 routes.sessionPayments (/sessions/[id]/payments, a screen no page claims), label 정산 for a completed paid session
138L2-02 일정 상세L3-35 참석자 관리the gear’s 관리 sheet › 참석자 관리 and 참가비 관리menubuiltpackages/features/sessions/src/session-detail/actions/host-menu-actions.ts:56 routes.sessionParticipants (참석자 관리); no separate 참가비 관리 row
139L2-02 일정 상세L3-35 참석자 관리the host’s Notice 입금 확인 3건doornot builtpackages/features/sessions/src/session-detail/sections/session-alerts-section.tsx has no 입금 확인 Notice (refund banners only: refund-banners.tsx:64 -> sessionPayments)
140L2-02 일정 상세L3-35 참석자 관리the 참석 head’s 전체 보기 › and the rosterdoorbuiltpackages/features/sessions/src/session-detail/sections/participation-section.tsx:121 routes.sessionParticipants (goToParticipants, the 외 N명 row)
141L2-02 일정 상세L3-36 참석 확인the gear’s 관리 sheet › 참석 확인menubuiltpackages/features/sessions/src/session-detail/actions/host-menu-actions.ts:84 routes.sessionAttendance
142L2-02 일정 상세L3-37 호스트 관리the gear’s 관리 sheet › 호스트 관리menubuiltpackages/features/sessions/src/session-detail/actions/host-menu-actions.ts:76 routes.sessionHostDashboard
143L2-02 일정 상세L3-37 호스트 관리the host’s Notice 신청 N건doorbuiltpackages/features/sessions/src/session-detail/sections/session-alerts-section.tsx:70 routes.sessionHostDashboard (pending applicants banner)
144L2-02 일정 상세L3-38 스코어카드the Notice 입력하기 (scores to enter)doornot builtno scores-to-enter Notice in packages/features/sessions/src/session-detail/*
145L2-02 일정 상세L3-38 스코어카드the band 실시간 스코어카드 보기 (a participant, in progress)bandbuiltpackages/features/sessions/src/session-detail/actions/primary-action.tsx:381 routes.scorecard (confirmed participant, in_progress)
146L2-02 일정 상세L3-38 스코어카드the 경기 head’s 전체 보기 › and a 경기 rowdoorbuilt[control differs] packages/features/sessions/src/session-matchups-card.tsx:213 routes.scorecard (card tap)
147L2-02 일정 상세L3-39 스코어카드 운영the band 스코어카드 보기 (the host, in progress)bandbuiltpackages/features/sessions/src/session-detail/actions/primary-action.tsx:365 routes.matchBoard (host, in_progress); also host-menu-actions.ts:102
148L2-02 일정 상세L3-47 대진 짜기the band 대진 짜기 (the host, closed, or open on game day, with no draw yet)bandto is newno /sessions/[sessionId]/draw route file or helper
149L2-02 일정 상세L3-47 대진 짜기the gear’s 관리 sheet › 대진 짜기 (an open, closed or live session)menuto is newno /sessions/[sessionId]/draw route file or helper
150L2-02 일정 상세L3-39 스코어카드 운영the host’s Notice 확인하기 (scores to settle)doornot builtno scores-to-settle Notice in packages/features/sessions/src/session-detail/*
151L2-02 일정 상세L4-06 경기 규칙the gear’s 관리 sheet › 경기 규칙menubuiltpackages/features/sessions/src/session-detail/actions/host-menu-actions.ts:65 routes.sessionMatchRules
152L2-03 매치 미리보기L0-01 시작the band 로그인하고 신청하기 (signed out)bandbuiltpackages/features/sessions/src/public-pickup-preview-screen.tsx:294 appRouter.push(routes.login); /login exists on web (apps/web/app/login/page.tsx) but mobile has no /login route file (the AuthGate shows LoginScreen)
153L2-03 매치 미리보기L1-03 경기the not-found state’s 매치 찾기doornot builtthe preview screen has no not-found door (packages/features/sessions/src/public-pickup-preview-screen.tsx)
154L2-03 매치 미리보기L1-03 경기the 같은 장소 매치 Cell (매치 찾기 filtered to the venue)doornot builtno 같은 장소 매치 Cell in packages/features/sessions/src/public-pickup-preview-screen.tsx
155L2-03 매치 미리보기L2-01 클럽 홈the 클럽 Cell of the 정보 group (a club’s public session)rownot builtno routes.club in packages/features/sessions/src/public-pickup-preview-screen.tsx
156L2-03 매치 미리보기L2-04 장소 상세the band’s 장소 보기 pill, the map and the titlebandbuiltpackages/features/sessions/src/session-detail/sections/session-hero-section.tsx:92 routes.venue (SessionHeroSection reused by the preview, public-pickup-preview-screen.tsx:114,520)
157L2-03 매치 미리보기L2-06 공개 프로필the 호스트 Cell of the 정보 grouprowbuilt[control differs] packages/features/sessions/src/pickup-host-card.tsx uses PlayerIdentityCard whose default press is routes.profileDetail (packages/app/src/presentation/components/player-identity-card.tsx:122)
158L2-04 장소 상세L2-01 클럽 홈a 홈 코트로 쓰는 클럽 cardrownot builtpackages/features/sessions/src/venue-detail-screen.tsx (the /venues/[id] screen) imports only appRouter for back; no routes.club
159L2-04 장소 상세L2-02 일정 상세a 다음 일정 card (a session of the club or a 매치 you are in)rownot builtpackages/features/sessions/src/venue-detail-screen.tsx has no session cards or routes
160L2-04 장소 상세L2-03 매치 미리보기a 다음 일정 card (an open 매치 you are not in)rownot builtpackages/features/sessions/src/venue-detail-screen.tsx has no session cards or routes
161L2-04 장소 상세L4-01 일정 만들기the band 이 테니스장에서 일정 만들기 (from a club) or 매치 만들기 (from the directory)bandbuilt via another route/directory-venues/[id]: packages/features/sessions/src/directory-venue-detail/use-directory-venue-detail.ts:437 routes.createSession(PICKUP_CLUB_SENTINEL, {venue presets}); the /venues/[id] screen has none
162L2-04 장소 상세L4-07 장소 정보 제안the header ⋯ › 정보 수정 제안menubuilt via another route/directory-venues/[id]: packages/features/sessions/src/directory-venue-detail/directory-venue-detail-screen.tsx:206 and use-directory-venue-detail.ts:401,447,465 routes.newVenueContribution
163L2-04 장소 상세L4-08 소유권 신청the header ⋯ › 소유권 신청menubuilt via another route/directory-venues/[id]: packages/features/sessions/src/directory-venue-detail/directory-venue-detail-screen.tsx:291 routes.newVenueOwnerClaim
164L2-06 공개 프로필L2-01 클럽 홈the club in the hero’s facts (several: a Sheet of the clubs, each row)rowbuiltpackages/features/profile/src/public-profile-screen.tsx:489 routes.club(club.id)
165L2-06 공개 프로필L3-42 DM 스레드the band 메시지 보내기 (friends)bandbuiltpackages/features/profile/src/public-profile-screen.tsx:129 routes.dmThread (after initiating the thread)
166L2-06 공개 프로필L3-42 DM 스레드the header ⋯ › 메시지 보내기 (not friends: a message request)menubuiltpackages/features/profile/src/public-profile-screen.tsx:129 (same push; whether the not-friends case is a message request is the server's)
167L3-01 신뢰 기록L1-03 경기the day-one state’s 일정 찾기doorfrom is newno /profile/trust screen
168L3-01 신뢰 기록L2-02 일정 상세a record’s Sheet › 일정 보기menufrom is newno /profile/trust screen
169L3-01 신뢰 기록L3-43 문의하기the Cell 기록 문의doorfrom is newno /profile/trust screen
170L3-03 성장 분석L3-23 앨범the Cell 승인 대기 사진doornot builtpackages/features/clubs/src/club-analytics-screen.tsx has no routes
171L3-03 성장 분석L3-25 멤버 관리the Cell 대기 신청 (멤버 관리 at 가입 신청)doornot builtpackages/features/clubs/src/club-analytics-screen.tsx has no routes
172L3-03 성장 분석L4-20 클럽 설정the Cell 클럽 설정doornot builtpackages/features/clubs/src/club-analytics-screen.tsx has no routes
173L3-04 기간 기록L3-05 하루 기록a calendar day of 활동rowbuiltpackages/features/records/src/record-detail-screen.tsx:192 routes.recordDay(day.date, scope)
174L3-05 하루 기록L3-04 기간 기록the quiet day’s and the invalid date’s 기간 기록doornot builtpackages/features/records/src/record-detail/record-day-detail-screen.tsx has no routes (back only: apps/mobile/app/records/day.tsx:26-31)
175L3-06 선수별 전적L2-06 공개 프로필a person row (주요 선수, 모든 선수) and the person’s row of 나와의 전적rowbuiltpackages/features/records/src/head-to-head-screen.tsx:171 PersonRow with default tap routes.userProfile
176L3-07 출석 현황L3-01 신뢰 기록a member row (신뢰 기록, the officials' view)rowto is newno /profile/trust route file or helper
177L3-07 출석 현황L3-25 멤버 관리the door Cell 멤버 관리doornot builtpackages/features/clubs/src/club-attendance-screen.tsx has no routes
178L3-10 클럽 대항전L1-02 클럽the empty state's 클럽 찾기 (the 클럽 찾기 pane)doornot builtpackages/features/clubs/src/club-challenges-screen.tsx has no routes
179L3-10 클럽 대항전L2-01 클럽 홈a 대항전 row (the club it names; a 받은 신청 row too)rownot builtpackages/features/clubs/src/club-challenges-screen.tsx has no routes
180L3-11 회비 관리L3-01 신뢰 기록a 미납 or 완납 row's Sheet › the name row (신뢰 기록, the officials' view)menuto is newno /profile/trust route file or helper
181L3-11 회비 관리L4-01 일정 만들기the no-plan setup step 첫 일정 만들기doornot builtpackages/features/clubs/src/club-dues-screen.tsx and club-dues/* have no routes
182L3-11 회비 관리L4-10 멤버 초대the no-plan setup step 멤버 초대doornot builtpackages/features/clubs/src/club-dues-screen.tsx and club-dues/* have no routes
183L3-11 회비 관리L4-14 회비 설정the header ⋯ › 회비 설정menunot builtL3-11 and L4-14 both claim /clubs/[clubId]/dues (ClubDuesScreen); no separate page, no header ⋯ door (no routes in club-dues/*)
184L3-11 회비 관리L4-14 회비 설정the no-plan setup step 회비 설정doornot builtsame screen for both pages; no routes in club-dues/*
185L3-13 알림L2-01 클럽 홈a 회비 row (opens 클럽 홈 at 회비)rownot builtpackages/app/src/presentation/utils/signal-routes.ts:95-96 a 'dues' signal opens routes.clubDues (L3-11), not 클럽 홈 at 회비
186L3-13 알림L2-02 일정 상세a 일정 row (new, cancelled, 최소 인원, 참석, 참가비 마감)rowbuiltsignal-routes.ts:105 routes.clubSession (session/rsvp signals), pushed at packages/features/home/src/notification-center/use-notification-center.ts:159
187L3-13 알림L2-04 장소 상세a 장소 정보 수정 반영 rowrowbuilt via another routesignal-routes.ts:92 routes.directoryVenue (venue_correction_approved/rejected) = /directory-venues/[id]
188L3-13 알림L2-06 공개 프로필a 친구 요청 or 친구가 됐어요 rowrownot builtno friend-request/accepted signal in signal-routes.ts or domain/entities/signal.entity.ts
189L3-13 알림L3-01 신뢰 기록a 신뢰 점수 row (a deduction, at its record)rowto is newno /profile/trust route; signal-routes.ts:143,155 trust/system signals open routes.profile
190L3-13 알림L3-01 신뢰 기록a 사유 인정 요청 row (신뢰 기록, the officials' view, at the request)rowto is newno /profile/trust route; no 사유 인정 request mapping in signal-routes.ts
191L3-13 알림L3-25 멤버 관리a 가입 신청 row (멤버 관리 at 가입 신청)rowbuilt via another routesignal-routes.ts:118-120 club_join_request_received opens routes.joinReview (L3-32) with an actor, routes.clubMembers (L3-25, no 가입 신청 anchor) without
192L3-13 알림L3-28 신고 관리a 신고 rowrownot builtno report/moderation mapping in signal-routes.ts (routes.clubReports appears only in admin attention: presentation/utils/club-admin-attention.ts:249)
193L3-13 알림L3-35 참석자 관리a 입금 알림 row (a session fee)rowbuilt via another routesignal-routes.ts:62-63 routes.sessionPayments for session_payment_submitted / host_refund_unsettled (/sessions/[id]/payments, a screen no page claims)
194L3-13 알림L3-39 스코어카드 운영a 대진표 rowrowbuiltsignal-routes.ts:100 routes.matchBoard (matchup signal with clubId+sessionId)
195L3-13 알림L3-41 게시글a 공지 or 댓글 rowrowbuiltsignal-routes.ts:110 routes.clubPost (social signal with clubId+postId)
196L3-13 알림L4-18 알림 설정the header's gear (알림 설정)headerbuiltpackages/features/home/src/notification-center/use-notification-center.ts:220 openSettings -> routes.signalPreferences
197L3-14 메시지L3-15 메시지 요청the door row 메시지 요청doorbuilt[control differs] packages/features/messaging/src/dm-inbox-screen.tsx:152-180 요청 is a tab inside the same /messages screen (L3-14 and L3-15 share the route); no door row
198L3-14 메시지L3-42 DM 스레드a thread rowrowbuiltDmThreadRow default press routes.dmThread (dm-thread-row.tsx:131) via useDmThreadRowRenderer (packages/features/messaging/src/dm-inbox-screen.tsx:65)
199L3-14 메시지L4-09 단톡방 만들기the FAB 단톡방fabbuiltpackages/features/messaging/src/dm-inbox-screen.tsx:187 routes.dmCreateGroup() (handleNewGroup, :199)
200L3-15 메시지 요청L2-06 공개 프로필a request row (the requester's profile)rownot builtthe 요청 tab rows are DmThreadRow with isRequest (packages/features/messaging/src/dm-inbox-screen.tsx:108) and open the thread, not a profile
201L3-16 참가비 내역L2-02 일정 상세a fee rowrowfrom is newno /profile/fees screen
202L3-17 순위표L1-02 클럽the no-club state’s 클럽 찾기doornot builtno routes.discoverClubs in packages/features/records/src/records-leaderboard-screen.tsx or leaderboard-*-tab.tsx
203L3-17 순위표L2-06 공개 프로필a Podium column and a ranking rowrowbuiltpackages/app/src/presentation/components/leaderboard-podium.tsx:84 routes.profileDetail; rows via LeaderboardRow identity press (packages/features/records/src/leaderboard-rank-row.tsx:60)
204L3-17 순위표L3-19 친구 찾기the no-friends state’s 친구 찾기doornot builtthe no-friends 친구 찾기 action is on 기록 (packages/features/records/src/records-screen.tsx:298), not on the leaderboard screen
205L3-17 순위표L4-11 프로필 수정the no-region state’s 지역 설정doorbuiltpackages/features/records/src/leaderboard-region-tab.tsx:133 routes.editProfile (no-region action)
206L3-18 친구 목록L2-06 공개 프로필a request row and a friend rowrowbuiltpackages/features/profile/src/friends-screen.tsx:148 FriendRow PersonRow default tap -> profile; the request rows are onPress={null} (:80,:120)
207L3-18 친구 목록L3-19 친구 찾기the FAB 친구fabbuiltpackages/features/profile/src/friends-screen.tsx:288 routes.profileFriendsAdd
208L3-19 친구 찾기L2-06 공개 프로필a result rowrownot builtpackages/features/profile/src/add-friend-screen.tsx:87 result row PersonRow onPress=
209L3-20 차단한 사용자L2-06 공개 프로필a blocked person’s rowrownot builtpackages/features/profile/src/settings-blocked-users-screen.tsx:89 PersonRow onPress=
210L3-23 앨범L2-02 일정 상세a group head's door 일정 상세doornot builtpackages/features/clubs/src/club-album-screen.tsx has no routes
211L3-23 앨범L3-41 게시글a group head's door 게시글doornot builtpackages/features/clubs/src/club-album-screen.tsx has no routes
212L3-24 복식 파트너 추천L2-06 공개 프로필a row's Sheet › the person row (공개 프로필)menubuilt[control differs] packages/features/clubs/src/partner-suggester-screen.tsx:261 routes.userProfile on the row tap; no row Sheet
213L3-25 멤버 관리L2-06 공개 프로필a member row's Sheet › the name row (공개 프로필)menunot builtmember rows are PersonRow onPress={null} (packages/features/clubs/src/club-members/member-row.tsx:114); the kebab actions (shared/use-member-kebab-actions.ts) have no profile item
214L3-25 멤버 관리L2-06 공개 프로필the viewer's own rowrownot builtsame member-row.tsx:114 for the viewer's own row
215L3-25 멤버 관리L3-01 신뢰 기록a member row's Sheet › 멤버 기록 (신뢰 기록, the officials' view)menuto is newno /profile/trust route file or helper
216L3-25 멤버 관리L3-07 출석 현황the header ⋯ › 출석 현황menunot builtno routes.clubAttendance in packages/features/clubs/src/club-members-screen.tsx or club-members/*
217L3-25 멤버 관리L4-09 단톡방 만들기the header ⋯ › 클럽 단톡방 만들기menubuiltpackages/features/clubs/src/club-members-screen.tsx:242 routes.dmCreateGroup({userIds,title})
218L3-25 멤버 관리L4-10 멤버 초대the FAB 초대fabnot builtno push from packages/features/clubs/src/club-members-screen.tsx to the L4-10 route (/messages/add-members is reached only from packages/features/messaging/src/dm-thread/participants-modal.tsx:158)
219L3-27 일정 관리L2-02 일정 상세a session rowrowbuiltpackages/features/clubs/src/club-sessions-screen.tsx via useClubSessionCardRow -> routes.clubSession (use-club-session-card-row.tsx:36)
220L3-27 일정 관리L4-01 일정 만들기the FAB 일정fabbuiltpackages/features/clubs/src/club-sessions-screen.tsx:327 routes.createSession(clubId)
221L3-28 신고 관리L2-06 공개 프로필a report's Sheet › the reported person's name row (공개 프로필)menubuilt[control differs] packages/features/clubs/src/club-reports-screen.tsx:98 PersonRow userId={report.reportedId} with the default tap -> profile; no Sheet
222L3-29 테니스장 관리L2-04 장소 상세a venue row (its header ⋯ holds the club's commands)rowbuiltpackages/features/clubs/src/club-venues-screen.tsx:238 routes.venue(item.id) = /venues/[id]
223L3-29 테니스장 관리L4-07 장소 정보 제안the FAB 테니스장 › the finder's 없는 장소 추가fabbuilt[control differs] packages/features/clubs/src/club-venues-screen.tsx:321 routes.newVenueContribution() from the screen's add action, not the finder's row
224L3-30 장소 정보 제안 내역L3-31 소유권 신청 내역the Feed-end door 소유권 신청 내역doorbuiltpackages/features/sessions/src/venue-contributions/list-screen.tsx:71 routes.venueOwnerClaims({venueId}); the Feed-end door is an ActionButton in the list header
225L3-30 장소 정보 제안 내역L3-33 제안 상세a receipt rowrowbuiltpackages/features/sessions/src/venue-contributions/contribution-row.tsx:15 routes.venueContribution(receipt.id)
226L3-30 장소 정보 제안 내역L4-07 장소 정보 제안the FAB 테니스장 (spoken 없는 테니스장 추가)fabbuiltpackages/features/sessions/src/venue-contributions/list-screen.tsx:110 routes.newVenueContribution()
227L3-31 소유권 신청 내역L3-34 장소 소유권a receipt rowrowbuiltpackages/features/sessions/src/venue-owner-claims/list-screen.tsx:65 routes.venueOwnerClaim(item.id)
228L3-31 소유권 신청 내역L4-08 소유권 신청the FAB 소유권 신청fabbuiltpackages/features/sessions/src/venue-owner-claims/list-screen.tsx:132 routes.newVenueOwnerClaim({venueId})
229L3-32 가입 심사L2-06 공개 프로필the applicant’s row, a 함께 친 멤버 row and a 추천 rowrownot builtpackages/features/clubs/src/join-review-detail-screen.tsx has no routes
230L3-32 가입 심사L3-25 멤버 관리the already-decided state’s 신청 목록 (멤버 관리 at 가입 신청)doornot builtpackages/features/clubs/src/join-review-detail-screen.tsx has no routes
231L3-33 제안 상세L2-04 장소 상세the venue’s MediaRowrowbuilt via another routepackages/features/sessions/src/venue-contributions/detail-screen.tsx:148,162 routes.directoryVenue (/directory-venues/[id])
232L3-33 제안 상세L4-07 장소 정보 제안the band 정보 보완하기 and 다시 보내기bandbuiltpackages/features/sessions/src/venue-contributions/receipt-actions.tsx:167 routes.newVenueContribution({supersedesId,...})
233L3-34 장소 소유권L2-04 장소 상세the venue’s MediaRowrowbuilt via another routepackages/features/sessions/src/venue-owner-claims/receipt-details.tsx:26 routes.directoryVenue (/directory-venues/[id])
234L3-34 장소 소유권L4-08 소유권 신청the band 정보 보완하기 and 다시 신청하기bandbuiltpackages/features/sessions/src/venue-owner-claims/claim-actions.tsx:286 routes.newVenueOwnerClaim({supersedesId})
235L3-35 참석자 관리L2-06 공개 프로필a 미납, 참석 확정 or 예비 row's Sheet › the name row (공개 프로필)menubuilt[control differs] packages/features/sessions/src/components/participant-row.tsx:191 PersonRow default tap -> profile only for a viewer with no admit/remove action; a manager's row is onPress=
236L3-35 참석자 관리L2-06 공개 프로필a 신청 row, or a member's view rowrowbuiltpackages/features/sessions/src/components/participant-row.tsx:191 (member's view row: default tap -> profile)
237L3-35 참석자 관리L3-36 참석 확인the switcher › 참석 확인switchernot builtpackages/features/sessions/src/participants-screen.tsx and packages/features/sessions/src/session-attendance-screen.tsx are separate screens with no switcher and no routes between them
238L3-36 참석 확인L2-06 공개 프로필a player's Sheet › the name row (공개 프로필)menunot builtpackages/features/sessions/src/components/participant-row.tsx:93,285 PersonRow onPress={null} on the attendance rows
239L3-36 참석 확인L3-35 참석자 관리the switcher › 참석자switchernot builtno switcher (see link 237)
240L3-37 호스트 관리L2-06 공개 프로필an applicant rowrownot builtpackages/features/sessions/src/pickup-host-dashboard-screen.tsx:104 PersonRow onPress=
241L3-38 스코어카드L1-03 경기the not-found state’s 경기 보기doornot builtpackages/features/sessions/src/spectator-scorecard-screen.tsx:457 NotFoundState: 돌아가기 = appRouter.back()
242L3-38 스코어카드L2-06 공개 프로필a player’s name on a row, a Podium name, a standings row and a name in a group tablerowbuiltpackages/features/sessions/src/scorecard/live-tab/live-match-row.tsx:142, packages/features/sessions/src/scorecard/use-player-profile-reopen.ts:26, packages/features/sessions/src/scorecard/score-edit-sheet.tsx:275 routes.profileDetail; standings via PlayerIdentityChip/LeaderboardPodium defaults
243L3-39 스코어카드 운영L3-35 참석자 관리the warning Notice’s action 참석자 관리 (unpaid players)doorbuilt via another routepackages/features/sessions/src/unsettled-pool-notice.tsx:39 routes.sessionPayments (/sessions/[id]/payments, a screen no page claims), shown by packages/features/sessions/src/match-board-screen.tsx
244L3-39 스코어카드 운영L4-06 경기 규칙the header ⋯ › 경기 규칙menunot builtno routes.sessionMatchRules in packages/features/sessions/src/match-board-screen.tsx or match-board/*
245L3-39 스코어카드 운영L3-47 대진 짜기the band N라운드 대진 짜기 (a round settled, none next) and the empty state’s 대진 짜기bandto is newno /sessions/[sessionId]/draw route file or helper
246L3-39 스코어카드 운영L3-47 대진 짜기the header ⋯ › 라운드 추가 and 대진 다시 짜기 (before round 1)menuto is newno /sessions/[sessionId]/draw route file or helper
247L3-47 대진 짜기L3-39 스코어카드 운영저장 (replace: the draw is committed, the Toast 경기 배정이 완료됐어요)bandfrom is newno 대진 짜기 screen
248L3-47 대진 짜기L3-35 참석자 관리the Notice’s action 참석자 관리 (unpaid players are left out of the draw)doorfrom is newno 대진 짜기 screen
249L3-41 게시글L2-01 클럽 홈the not-found state’s 클럽으로doornot builtpackages/features/clubs/src/post-detail-screen.tsx:250 NotFoundState: 돌아가기 = appRouter.back()
250L3-41 게시글L2-06 공개 프로필the author and a commenterrowbuiltpackages/features/clubs/src/post-detail/comment-row.tsx:102 commenter PersonRow default tap -> profile; the post author's PersonRow is onPress={null} (packages/features/clubs/src/shared/post-row.tsx:437) so only the commenter half is built
251L3-42 DM 스레드L2-06 공개 프로필the header ⋯ › 멤버 보기 (a group), each member rowmenunot builtpackages/features/messaging/src/dm-thread/participants-modal.tsx:129 member rows are PersonRow onPress={null}; the modal's only push is dmAddMembers (:158)
252L3-42 DM 스레드L2-06 공개 프로필the header’s name (a one-to-one thread)headerbuilt[control differs] packages/features/messaging/src/dm-thread/use-dm-message-renderer.tsx:79 routes.profileDetail(senderId) on a message avatar; packages/features/messaging/src/dm-thread/thread-info-header.tsx has no press
253L3-42 DM 스레드L3-14 메시지the not-found state’s 메시지로doornot builtpackages/features/messaging/src/dm-thread-screen.tsx:299 NotFoundState: 돌아가기 = appRouter.back()
254L4-01 일정 만들기L2-02 일정 상세the band 일정 만들기 (a club session; replace)bandbuiltpackages/features/sessions/src/create-session/use-submit-session.ts:257 appRouter.replace(routes.clubSession(clubId, result.id))
255L4-01 일정 만들기L3-37 호스트 관리the band 일정 만들기 (a pickup; replace to 호스트 관리)bandbuiltpackages/features/sessions/src/create-session/use-submit-session.ts:246 appRouter.replace(routes.sessionHostDashboard(result.id))
256L4-01 일정 만들기L4-06 경기 규칙the 경기 규칙 value Cell of the review pagedoornot builtno routes.sessionMatchRules in packages/features/sessions/src/create-session/* or create-session-*.tsx
257L4-01 일정 만들기L4-07 장소 정보 제안the row 테니스장 추가 of the 테니스장 Search takeover when nothing is founddoorunsurethe 테니스장 step opens VenueSearchTakeover (packages/features/sessions/src/create-session/step2/create-session-step2.tsx:296); whether its empty result shows VenueFinderContributionRow (packages/app/src/presentation/components/sessions/venue-finder/venue-finder-contribution-row.tsx:37) was not traced
258L4-02 클럽 만들기L2-01 클럽 홈the band 클럽 만들기 on step 10 (replace)bandbuiltpackages/features/clubs/src/create-club/screen/use-club-submit.ts:228 appRouter.replace(routes.club(progress.clubId))
259L4-04 초대 코드로 가입L0-01 시작the band 로그인하기 (returnTo and the code kept)bandbuiltpackages/features/clubs/src/join-club-screen.tsx:114-118 push(routes.loginReturnTo(routes.joinClub({clubId,code}))); web only, mobile has no /login route file
260L4-04 초대 코드로 가입L2-01 클럽 홈the band 가입하기 (replace)bandbuiltpackages/features/clubs/src/join-club-screen.tsx:70 appRouter.replace(routes.club(targetClubId))
261L4-04 초대 코드로 가입L2-01 클럽 홈the club's rowrownot builtpackages/features/clubs/src/join-club-screen.tsx has no club row
262L4-05 글쓰기L3-41 게시글the band 올리기 (replace)bandbuiltpackages/features/clubs/src/post-create-screen.tsx:207 appRouter.replace(routes.clubPost(...))
263L4-07 장소 정보 제안L0-01 시작the signed-out wall's 로그인doornot builtno routes.login in packages/features/sessions/src/venue-contributions/*
264L4-07 장소 정보 제안L2-04 장소 상세the venue's rowrowbuilt via another routepackages/features/sessions/src/venue-contributions/lifecycle-editor.tsx:110 routes.directoryVenue (/directory-venues/[id])
265L4-07 장소 정보 제안L3-33 제안 상세the band 제안 보내기 (replace)bandbuiltpackages/features/sessions/src/venue-contributions/contribution-editor.tsx:54 appRouter.replace(routes.venueContribution(receipt.id))
266L4-07 장소 정보 제안L3-33 제안 상세the replacement Notice's action 제안 상세doorbuiltpackages/features/sessions/src/venue-contributions/contribution-editor.tsx:116 routes.venueContribution(lastReceipt.id)
267L4-08 소유권 신청L0-01 시작the signed-out wall's 로그인doornot builtno routes.login in packages/features/sessions/src/venue-owner-claims/*
268L4-08 소유권 신청L2-04 장소 상세the venue's rowrowbuilt via another routepackages/features/sessions/src/venue-owner-claims/application-editor.tsx:139 routes.directoryVenue (/directory-venues/[id])
269L4-08 소유권 신청L3-34 장소 소유권the band 신청하기 (replace)bandbuiltpackages/features/sessions/src/venue-owner-claims/application-editor.tsx:93 appRouter.replace(routes.venueOwnerClaim(result.id))
270L4-08 소유권 신청L3-34 장소 소유권the blocked state's one door Cell 장소 소유권doorbuiltpackages/features/sessions/src/venue-owner-claims/application-editor.tsx:169,178 routes.venueOwnerClaim(...)
271L4-09 단톡방 만들기L3-19 친구 찾기the zero-candidates state's 친구 찾기doorbuiltpackages/features/messaging/src/dm-create-group-screen.tsx:163 routes.profileFriendsAdd
272L4-09 단톡방 만들기L3-42 DM 스레드the band 단톡방 만들기 (replace)bandbuiltpackages/features/messaging/src/dm-create-group-screen.tsx:124 appRouter.replace(routes.dmThread(threadId))
273L4-10 멤버 초대L3-19 친구 찾기the nobody-to-invite state's 친구 찾기doorbuiltpackages/features/messaging/src/dm-add-members-screen.tsx:104 routes.profileFriendsAdd
274L4-10 멤버 초대L3-42 DM 스레드the band 2명 초대하기 (pops back to the thread)bandbuiltpackages/features/messaging/src/dm-add-members-screen.tsx:73 onSuccess appRouter.back()
275L4-11 프로필 수정L4-15 설정the band 저장 (pops back, with the Toast 프로필을 저장했어요)bandbuiltpackages/features/profile/src/edit-profile-screen.tsx:284 appRouter.back()
276L4-12 비밀번호 변경L4-15 설정the band 변경하기 (pops back, with the Toast 비밀번호가 변경됐어요)bandbuiltpackages/features/profile/src/change-password-screen.tsx:91 appRouter.back()
277L4-13 회원 탈퇴L0-01 시작the band 탈퇴하기 (the mutation, then sign out)bandbuiltpackages/app/src/presentation/hooks/mutations/use-delete-account.ts:30 auth.signOut() -> AuthGate
278L4-13 회원 탈퇴L4-20 클럽 설정a club row of the blocked page (at 대표 권한 넘기기)doornot builtpackages/features/profile/src/delete-account-screen.tsx has no routes (no blocked-by-club page)
279L4-15 설정L0-01 시작the danger zone's Cell 로그아웃 (a Dialog, then sign out)doorbuiltpackages/features/profile/src/settings/destructive-section.tsx:15 onSignOut -> packages/features/profile/src/settings-screen.tsx:157-164 confirm then signOut()
280L4-15 설정L3-20 차단한 사용자the 프라이버시 Cell 차단한 사용자doorbuiltpackages/features/profile/src/settings/privacy-section.tsx:20 routes.settingsBlockedUsers
281L4-15 설정L3-22 공지사항the 지원 Cell 공지사항doorbuiltpackages/features/profile/src/settings/support-section.tsx:19 routes.legalNotices
282L4-15 설정L3-43 문의하기the 지원 Cell 문의하기doorbuiltpackages/features/profile/src/settings/support-section.tsx:23 routes.legalContact
283L4-15 설정L3-44 이용약관the 지원 Cell 이용약관doorbuiltpackages/features/profile/src/settings/support-section.tsx:27 routes.legalTerms
284L4-15 설정L3-45 개인정보 처리방침the 지원 Cell 개인정보 처리방침doorbuiltpackages/features/profile/src/settings/support-section.tsx:31 routes.legalPrivacy
285L4-15 설정L4-11 프로필 수정the 계정 Cell 프로필 수정doorbuiltpackages/features/profile/src/settings/account-section.tsx:18 routes.editProfile
286L4-15 설정L4-12 비밀번호 변경the 계정 Cell 비밀번호 변경doorbuiltpackages/features/profile/src/settings/account-section.tsx:19 routes.changePassword
287L4-15 설정L4-13 회원 탈퇴the danger zone's Cell 회원 탈퇴 (the page's last group; the one door; destructive)doorbuiltpackages/features/profile/src/settings/destructive-section.tsx:16 routes.deleteAccount
288L4-15 설정L4-16 연결된 계정the 계정 Cell 연결된 계정doorto is newno /settings/accounts route file or helper
289L4-15 설정L4-17 공개 범위 설정the 프라이버시 Cell 공개 범위 설정doorbuiltpackages/features/profile/src/settings/privacy-section.tsx:18 routes.settingsPrivacy
290L4-15 설정L4-18 알림 설정the 알림 Cell 알림 설정doorbuiltpackages/features/profile/src/settings/notifications-section.tsx:47 routes.signalPreferences
291L4-15 설정L4-19 동의 관리the 프라이버시 Cell 동의 관리doorbuiltpackages/features/profile/src/settings/privacy-section.tsx:19 routes.consentManagement
292L4-19 동의 관리L3-21 동의 이력the door Cell 동의 이력doorbuiltpackages/features/profile/src/settings-consent-management-screen.tsx:276 routes.consentHistory
293L4-19 동의 관리L3-44 이용약관the 보기 › of the 서비스 이용약관에 동의합니다 rowdoornot builtpackages/features/profile/src/settings-consent-management-screen.tsx pushes only deleteAccount (:139) and consentHistory (:276); no policy 보기 › rows
294L4-19 동의 관리L3-45 개인정보 처리방침the 보기 › of the 개인정보 처리방침에 동의합니다 rowdoornot builtsame: no policy 보기 › rows
295L4-20 클럽 설정L1-02 클럽the destructive Cell 클럽 보관 (a Dialog, then replace)doorbuiltpackages/features/clubs/src/club-settings-screen.tsx:242 onSuccess appRouter.replace(routes.clubs)
296L4-20 클럽 설정L3-03 성장 분석the 모집 계획 Cell 성장 분석doornot builtno routes.clubAnalytics in packages/features/clubs/src/club-settings-screen.tsx or settings/*
297L4-20 클럽 설정L3-29 테니스장 관리the 정보 Cell 활동 지역doorbuilt[control differs] packages/features/clubs/src/settings/info-section.tsx:217 routes.clubVenues from the venues Cell; the drawn Cell is 활동 지역
298L4-20 클럽 설정L4-14 회비 설정the 회비 Cell 회비 설정doornot builtno routes.clubDues in packages/features/clubs/src/club-settings-screen.tsx or settings/*
299L4-20 클럽 설정L4-21 입금 계좌클럽 설정 › 회비 › 입금 계좌doorto is newno /clubs/[clubId]/settings/account route file or helper
300linkL0-06 공유 링크a shared /s, /m, /p or /lb link opened in the applinkbuiltapps/mobile/app/s/[sessionId].tsx, m/[matchId].tsx, p/[userId].tsx, lb/[clubId].tsx exist; share URLs built in packages/app/src/presentation/utils/share-cards.ts
301linkL0-07 웹 공유 페이지a shared link opened in a browser without the applinkbuilt via another routeL0-07 has no route in page-levels; apps/web/app/s/[sessionId]/page.tsx (and m, p, lb, join-club) are the web landing pages with an OpenInAppButton
302linkL2-02 일정 상세the shared link /s/[sessionId] (a member of the session’s club or a participant)linkbuiltapps/mobile/app/s/[sessionId].tsx:93-96 Redirect to routes.clubSession when the viewer can read the session
303linkL2-03 매치 미리보기the shared link /s/[sessionId] (a non-member)linknot builta non-member on /s sees PublicSessionSharePreview (apps/mobile/app/s/[sessionId].tsx:98-103), not routes.sessionPreview
304linkL2-06 공개 프로필the shared link /p/[userId]linkbuiltapps/mobile/app/p/[userId].tsx:37-38 Redirect to routes.profileDetail
305linkL4-04 초대 코드로 가입an invite link /join-club?codelinkbuiltroutes.publicClubInviteShare (packages/app/src/navigation/routes.ts) -> /join-club?code; parsed by parseJoinClubParams
306pushL2-01 클럽 홈a 회비 push opens it at the 회비 panepushnot builtsignal-routes.ts:95-96 a dues signal opens routes.clubDues (L3-11), not 클럽 홈 at 회비; packages/app/src/presentation/hooks/use-notification-handler.ts:254 pushes the result
307pushL3-01 신뢰 기록the tier-change and RSVP-block pushespushto is newno /profile/trust route; signal-routes.ts:130 tier signals open routes.records, :143 trust signals open routes.profile
308pushL3-01 신뢰 기록a 사유 인정 요청 push (신뢰 기록, the officials' view, at the request)pushto is newno /profile/trust route
309pushL3-30 장소 정보 제안 내역the contribution pushes (a suggestion decided)pushbuilt via another routesignal-routes.ts:86 a contribution signal opens routes.venueContribution(contributionId) = L3-33, not the L3-30 list
310pushL3-38 스코어카드the score pushes (a score to enter, a score under review)pushbuilt via another routesignal-routes.ts:100-101 a matchup signal opens routes.matchBoard (L3-39) when clubId+sessionId exist, routes.scorecard (L3-38) only as fallback
311pushL3-41 게시글a club post notificationpushbuiltsignal-routes.ts:110 routes.clubPost -> use-notification-handler.ts:254
312L3-11 회비 관리L3-46 장부the 장부 Cell at the page's end (owner review 48)rowto is newno /clubs/[clubId]/dues/ledger route file or helper
313L1-04 기록L3-04 기간 기록the 경기 기록 Shelf head's door 전체 보기 ›doorbuilt via another routepackages/features/records/src/records-screen.tsx:411 routes.recordsHistory = /records/history (RecordsHistoryScreen, a screen no page claims)
314L4-15 설정L3-30 장소 정보 제안 내역the 앱 Cell 보낸 제안 (장소 정보 제안 내역 at 내가 보낸 제안)doornot builtno Cell in packages/features/profile/src/settings/app-section.tsx or settings-screen.tsx; the header of packages/features/profile/src/settings-screen.tsx:19-23 says 제안 내역 moved to the 테니스장 directory (venue-finder-contribution-row.tsx:48)
315L3-25 멤버 관리L3-32 가입 심사an applicant row (가입 심사)rowbuiltpackages/features/clubs/src/club-members/members-list-header.tsx:170 routes.joinReview(clubId, request.userId)
316L3-25 멤버 관리L2-06 공개 프로필a guest row of 추천할 만한 게스트rownot builtpackages/features/clubs/src/club-members/recommend-guest-row.tsx has no press to a profile (the row toggles a nomination, :59)
317L3-03 성장 분석L4-10 멤버 초대the Cell 멤버 초대doornot builtno push to the L4-10 route in packages/features/clubs/src/club-analytics-screen.tsx
318L2-04 장소 상세L3-30 장소 정보 제안 내역the owner Notice 검토할 제안 N건, action 장소 정보 제안 내역doorbuilt via another route/directory-venues/[id]: packages/features/sessions/src/venue-contributions/venue-contribution-links.tsx:15 routes.venueContributions({venueId}) (in the directory screen's closure)
319L2-04 장소 상세L3-30 장소 정보 제안 내역the pending Notice’s 장소 정보 제안 내역doorbuilt via another routesame venue-contribution-links.tsx:15 on /directory-venues/[id]
320L2-04 장소 상세L4-07 장소 정보 제안the closed Notice’s 장소 정보 제안doorbuilt via another route/directory-venues/[id]: packages/features/sessions/src/directory-venue-detail/use-directory-venue-detail.ts:465 routes.newVenueContribution({kind:'report'}) and venue-contribution-links.tsx:22 lifecycle
321L2-04 장소 상세L1-03 경기the 다음 일정 head’s 전체 보기 › (경기 filtered to the venue)doornot builtpackages/features/sessions/src/venue-detail-screen.tsx has no routes (see link 158)
322L2-06 공개 프로필L3-06 선수별 전적the 나와의 전적 head’s door 자세히 ›doornot builtno routes.analysisRivals in packages/features/profile/src/public-profile-screen.tsx closure
323L2-06 공개 프로필L3-01 신뢰 기록the 신뢰 head’s door 기록 보기 ›doorto is newno /profile/trust route file or helper
324L3-04 기간 기록L3-06 선수별 전적the Cell 상대doornot builtpackages/features/records/src/record-detail-screen.tsx and record-detail/* push only routes.recordDay (:192)
325L3-01 신뢰 기록L3-11 회비 관리the Cell 회비와 참가비 (an official’s view, 멤버 기록)doorfrom is newno /profile/trust screen
326L2-06 공개 프로필L3-04 기간 기록the 전적 head’s door 전체 보기 › (owner review 52: 기간 기록 read as that person’s)doornot builtpackages/features/profile/src/recent-matches-section.tsx:66 routes.recordsHistory is shown only when isOwnProfile (a visitor sees no link), and it opens /records/history
327L2-06 공개 프로필L3-38 스코어카드a 최근 경기 row (owner review 52), where the viewer may see the matchrowbuilt via another routepackages/app/src/presentation/components/match-history-row.tsx:89 routes.clubSession -> L2-02 일정 상세, not L3-38 스코어카드
328L3-38 스코어카드L3-08 테니스 여정the result’s note glyph (owner review 52: the note sits on 테니스 여정)doorto is newno /profile/journey route file or helper

Table 2: built but not drawn ​

Every push or replace in a screen whose target is a route a page claims (or a route no page claims, from a page's screen), where page-links has no link from that page to that page. Dropped on purpose?: yes = review 52 § 3 lists the screen; moved = the boards draw the same door on another page or control (the link number is given); no = not a page pair, or the app contradicts a drawn landing; unsure = the boards say nothing, so it is a missing link or a path dropped without a note.

From routeTo routeFile:lineDropped on purpose?Note
L1-01 /(tabs)/(home)L3-04 /records/[period]packages/features/home/src/cards/recap-summary-card.tsx:201unsurethe week/month recap card; the 홈 board draws no recap card and review 52 § 3 does not list it, so it is either a missing link or a card the boards dropped
L1-05 /(tabs)/(profile)L3-14 /messagespackages/features/profile/src/profile-screen.tsx:236movedthe boards put the 메시지 icon on the 홈 header (link 42, not built); the 프로필 header icon is not drawn
L1-04 /(tabs)/(records)L3-19 /profile/friends/addpackages/features/records/src/records-screen.tsx:298movedno-friends empty action; the boards draw it on 순위표 (link 204), not on 기록
L1-04 /(tabs)/(records)L4-11 /settings/edit-profilepackages/features/records/src/records-screen.tsx:310movedno-region empty action; the boards draw it on 순위표 (link 205), not on 기록
L1-04 /(tabs)/(records)/records/history (no page)packages/features/records/src/records-screen.tsx:411yesreview 52 § 3: the history is 기록's own list and 기간 기록's rows; link 313 (L1-04 -> L3-04) is the drawn replacement
L2-06 /profile/[userId] (own view)/records/history (no page)packages/features/profile/src/recent-matches-section.tsx:66yesreview 52 § 3 (history absorbed); shown only when isOwnProfile; the boards draw L2-06 -> L3-04 (link 326)
L2-06 /profile/[userId] (own view)L3-09 /profile/achievementspackages/features/profile/src/achievements-preview-section.tsx:127unsureisOwnProfile only; L1-05 -> L3-09 is drawn (96), L2-06 -> L3-09 is not
L2-06 /profile/[userId]L2-02 /sessions/[sessionId]packages/app/src/presentation/components/match-history-row.tsx:89 (via packages/features/profile/src/recent-matches-section.tsx)movedthe boards draw the 최근 경기 row to L3-38 (link 327, owner review 52); the app opens 일정 상세
L2-01 /clubs/[clubId]/clubs/[clubId]/admin (no page)packages/features/clubs/src/club-detail-screen.tsx:190 and :523yesreview 52 § 3 row 1: the admin screen's rows are 클럽 설정's groups and the 관리 gear sheet (review 48)
L2-01 /clubs/[clubId]/clubs/[clubId]/preview (no page)packages/features/clubs/src/club-detail-screen.tsx:178 (replace for a non-member)yesreview 52 § 3 row 2: one home for members and visitors (review 50)
L2-01 /clubs/[clubId]L1-02 /(tabs)/(clubs)packages/features/clubs/src/club-detail-screen.tsx:229 (replace after leaving the club)unsurenot drawn on any board; the leave flow's landing is a missing link or an implicit pop
/clubs/[clubId]/preview (no page)L2-01 /clubs/[clubId]packages/features/clubs/src/public-club-profile-screen.tsx:147,154 (replace)yesreview 52 § 3 row 2
/clubs/[clubId]/preview (no page)L3-25 /clubs/[clubId]/memberspackages/features/clubs/src/public-club-profile-screen.tsx:403yesreview 52 § 3 row 2; the visitor frames of L2-01 draw no members door
/clubs/[clubId]/preview (no page)L2-02 /sessions/[sessionId]packages/features/clubs/src/public-club-profile-screen.tsx:273 and public-club-profile/guest-sessions-section.tsx:66yesreview 52 § 3 row 2; the boards draw a non-member's session item to L2-03 (link 101)
/clubs/[clubId]/admin (no page)L2-01 /clubs/[clubId]packages/features/clubs/src/club-admin-screen.tsx:54 (replace for a non-admin)yesreview 52 § 3 row 1
L2-02 /sessions/[sessionId]L3-42 /messages/[threadId]packages/features/sessions/src/session-detail/actions/share-and-chat-actions.ts:58,78unsurethe session group chat door; no L2-02 -> L3-42 link on the boards
L2-02 /sessions/[sessionId]L4-09 /messages/new-grouppackages/features/sessions/src/session-detail/actions/share-and-chat-actions.ts:62unsurecreates the session chat from its participants; no L2-02 -> L4-09 link on the boards
L2-02 /sessions/[sessionId]/tournament-board (no page)packages/features/sessions/src/session-detail-screen.tsx:450 and create-tournament-modal.tsx:260yesreview 52 § 3: a tournament is stages of the session's matches (L3-38 / L3-39)
L2-02 /sessions/[sessionId]/sessions/[sessionId]/payments (no page)packages/features/sessions/src/session-detail/actions/primary-action.tsx:395; session-detail/sections/refund-banners.tsx:64yesreview 52 § 3: split into L3-16 (own fees) and L3-35 (host confirmations); link 137 draws L2-02 -> L3-35
L2-03 /sessions/[sessionId]/previewL2-02 /sessions/[sessionId]packages/features/sessions/src/public-pickup-preview-screen.tsx:428,433,438,443 (replace)unsurebounce for a non-pickup, the host, a club member or an approved applicant; only the /s link (302) is drawn into L2-02
L2-03 /sessions/[sessionId]/previewL3-42 /messages/[threadId]packages/features/sessions/src/pickup-host-card.tsx:79unsurethe 호스트 card's message button; the boards draw the host Cell only to L2-06
L3-38 /sessions/[sessionId]/scorecardL3-42 /messages/[threadId]packages/features/sessions/src/scorecard/score-correction-sheet.tsx:111unsurethe score-correction sheet opens a DM thread
L3-29 /clubs/[clubId]/venuesL3-30 /venue-contributionspackages/features/clubs/src/club-venues-screen.tsx:349unsurea 제안 내역 door on 테니스장 관리; the boards draw L3-29 -> L4-07 and L3-29 -> L2-04 only
L1-03c /(tabs)/(sessions) 테니스장L3-30 /venue-contributionspackages/app/src/presentation/components/sessions/venue-finder/venue-finder-contribution-row.tsx:48movedthe boards moved 제안 내역 to 설정 › 앱 (link 314, not built) and keep only 목록에 없는 테니스장 추가 on the feed end
L4-01 /create-sessionL2-04 /directory-venues/[id]packages/features/sessions/src/create-session/step2/create-session-step2.tsx:176unsurethe picked venue's detail from the 테니스장 step; the boards draw L4-01 -> L4-07 only
L4-02 /create-clubL2-04 /directory-venues/[id]packages/features/clubs/src/create-club-step2.tsx:343unsurea picked venue's detail from step 2; not drawn
L4-02 /create-clubL1-02 /(tabs)/(clubs)packages/features/clubs/src/create-club/screen/club-setup-receipt.tsx:76,117 (replace when no progress)unsurethe setup receipt's exit; the boards draw only the replace to L2-01 (258)
L4-02 /create-clubL4-20 /clubs/[clubId]/settingspackages/features/clubs/src/create-club/screen/club-setup-receipt.tsx:149 (replace)unsurethe receipt's 클럽 설정 door (finish the setup); not drawn
L4-08 /venue-owner-claims/newL4-07 /venue-contributions/newpackages/features/sessions/src/venue-owner-claims/existing-venue-picker.tsx:50unsurethe picker's add-a-venue row; not drawn
L4-08 /venue-owner-claims/newL3-31 /venue-owner-claimspackages/features/sessions/src/venue-owner-claims/application-editor.tsx:157 (scope inbox)unsurenot drawn
L4-07 /venue-contributions/newL4-07 (kind switch)packages/features/sessions/src/venue-contributions/lifecycle-editor.tsx:118; facts-editor.tsx:241; report-editor.tsx:43; venue-contribution-links.tsx:22nothe same page reopened with another kind (facts, courts, lifecycle, report): a self-link, not a page pair
L3-33 /venue-contributions/[id]; L3-34 /venue-owner-claims/[id]the same page for the predecessor or successor recordpackages/features/sessions/src/venue-contributions/detail-screen.tsx:130,139; venue-owner-claims/receipt-details.tsx:82,94,114; transfer-proposals.tsx:57norecord chains (supersedes, replaced by, outgoing tenure): self-links
L3-42 /messages/[threadId]L4-10 /messages/add-memberspackages/features/messaging/src/dm-thread/participants-modal.tsx:158unsurethe boards draw L4-10 -> L3-42 (274, pop back) but no door into L4-10 from the thread; page-links gives L4-10 four club-side openers (130, 182, 218, 317) while its claimed route is the DM add-members screen
L4-19 /settings/consentL4-13 /settings/delete-accountpackages/features/profile/src/settings-consent-management-screen.tsx:139unsurea delete-account door on the consent page; not drawn
L4-20 /clubs/[clubId]/settingsL4-01 /create-sessionpackages/features/clubs/src/settings/operations-section.tsx:72unsurethe 운영 section is not on the 클럽 설정 board
L4-20 /clubs/[clubId]/settingsL2-02 /sessions/[sessionId]packages/features/clubs/src/settings/operations-section.tsx:83unsuresame 운영 section
L4-20 /clubs/[clubId]/settingsL3-39 /match-boardpackages/features/clubs/src/settings/operations-section.tsx:93unsuresame 운영 section
L4-20 /clubs/[clubId]/settingsL2-01 /clubs/[clubId]packages/features/clubs/src/settings/archived-club-section.tsx:38 (replace after restoring)unsurerestore from the archived view; the boards draw only 보관 -> L1-02 (295)
L3-13 /home/notificationsL3-11 /clubs/[clubId]/duespackages/app/src/presentation/utils/signal-routes.ts:96 (pushed at packages/features/home/src/notification-center/use-notification-center.ts:159)noa 회비 row lands on 회비 관리; the boards say 클럽 홈 at 회비 (185): a missing link in page-links, or a wrong landing in the app
L3-13 /home/notificationsL3-32 /clubs/[clubId]/join-review/[userId]packages/app/src/presentation/utils/signal-routes.ts:120unsurepage-links draws the 가입 신청 row to L3-25 (191); the app prefers the applicant's dossier
L3-13 /home/notificationsL3-33 /venue-contributions/[id]packages/app/src/presentation/utils/signal-routes.ts:86unsurea contribution decision row; the boards draw the push to L3-30 (309)
L3-13 /home/notificationsL3-34 /venue-owner-claims/[id]packages/app/src/presentation/utils/signal-routes.ts:80unsurean owner-claim announcement row; not drawn
L3-13 /home/notificationsL3-38 /sessions/[sessionId]/scorecardpackages/app/src/presentation/utils/signal-routes.ts:101,106,139unsurefallback when a matchup, session or unrated-outcome signal has no clubId
L3-13 /home/notificationsL3-42 /messages/[threadId] (or L3-14 /messages)packages/app/src/presentation/utils/signal-routes.ts:159unsurechat signals; not drawn
L3-13 /home/notificationsL1-04 /(tabs)/(records)packages/app/src/presentation/utils/signal-routes.ts:130unsureelo_changed / tier_promoted / tier_demoted rows; the boards say L3-01 (189, 190, 307), a page that does not exist yet
L3-13 /home/notificationsL1-05 /(tabs)/(profile)packages/app/src/presentation/utils/signal-routes.ts:143,155unsuretrust / progression / system / subscription rows; the boards say L3-01 for trust
push -> L2-01 / L3-32 / L3-11 / L1-04 / L1-05 / L3-42 / L3-39 / L3-33 / L3-34the same targets as the notification rows abovepackages/app/src/presentation/hooks/use-notification-handler.ts:254 pushes getSignalRoute() (signal-routes.ts)unsurepage-links draws push -> L2-01, L3-01, L3-30, L3-38, L3-41 only (306-311); the app's push set is the notification-row set
L0-04 onboarding (no route)L4-01 /create-sessionpackages/app/src/navigation/onboarding-intent.ts:30 (pickup_host)unsurepost-onboarding destination by entry intent; the boards draw L0-04 -> L1-01, L1-02, L1-03, L4-02 only
L0-04 onboarding (no route)L4-04 /join-clubpackages/app/src/navigation/onboarding-intent.ts:31,57 (invitee keeps the code)unsuresame; link 305 draws the invite link, not the onboarding hand-off
web shell, every page >= 600pxL4-15 /settings; L4-01 /create-session; L3-13 /home/notifications; L3-14 /messagesapps/web/components/app-nav.tsx:169, :209, :287, :295noWebNavCovered: the web nav carries 메시지, 알림, 설정 and the create button from 600px up; the boards draw the mobile header icons only
redirect routes (/leaderboard, /ranking, /activity, /activity/pickups, /clubs, /clubs/discover, /home, /profile, /records, (tabs)/(clubs)/discover)L3-17, L1-04, L1-03, L1-02, L1-01, L1-05apps/mobile/app/leaderboard.tsx:11; ranking.tsx:5; activity/pickups.tsx:9; clubs/discover.tsx:4; (tabs)/(clubs)/discover.tsx:9yesreview 52 § 3 last row: kept for old links or dropped with the route tree
/m/[matchId], /p/[userId], /lb/[clubId] share cardsL2-02, L2-06, L2-01apps/mobile/app/m/[matchId].tsx:96; p/[userId].tsx:38; lb/[clubId].tsx:37yesreview 52 § 3: one web share page per object (L0-07); the pairs L0-06 -> L2-02 / L2-06 / L2-01 are drawn (20, 21, 24)

Table 3: route helpers no page claims ​

Compared with page-code-map's "App routes no page claims" (20 routes there; 19 today). A helper is listed when its path is claimed by no page, or when nothing calls it. Callers are non-test, non-comment routes.<helper> hits (the helper's own file excluded).

HelperPathCallersNote
routes.ranking/records0routes.records already points at the same path; no caller, no page claims /records (a redirect)
routes.matchHistory/records/history0duplicate of recordsHistory; no caller; no page claims the path
routes.createPost/clubs/[clubId]/board/create0duplicate of clubBoardCreate; no caller (the path is L4-05's)
routes.notificationsAt/home/notifications?filter=...0no caller outside tests, though its doc says 홈's 할 일 전체 보기 opens it at 처리할 일 (the path is L3-13's)
routes.home/home12redirect route; callers use it as the app root (tab bar, back-fallback, redirects); no page claims /home
routes.clubs/clubs10redirect route to the 클럽 tab; no page claims /clubs
routes.activity/activity12redirect route to the 경기 tab; no page claims /activity
routes.activityPickups/activity?tab=pickup_finder3redirect with a query; callers: home-nearby-pickups-card, home-today-view, records-screen
routes.records/records6redirect route to the 기록 tab
routes.profile/profile9redirect route to the 프로필 tab
routes.discoverClubs/clubs?tab=discover3redirect with a query to the 클럽 tab's 탐색 pane
routes.recordsHistory/records/history2RecordsHistoryScreen, no page claims it (review 52 § 3)
routes.clubPreview/clubs/[clubId]/preview2PublicClubProfileScreen, no page claims it (review 52 § 3)
routes.clubAdmin/clubs/[clubId]/admin2ClubAdminScreen, no page claims it (review 52 § 3)
routes.directoryVenue/directory-venues/[id]10DirectoryVenueDetailScreen, no page claims it, yet it is the app's real 장소 상세 for every picker, list and signal; routes.venue (/venues/[id], L2-04's route) is a bare screen with no navigation
routes.sessionPayments/sessions/[sessionId]/payments4SessionPaymentsScreen, no page claims it (review 52 § 3)
routes.tournamentBoard/tournament-board2TournamentBoardScreen, no page claims it (review 52 § 3)
routes.publicMatchShare/m/[matchId]1share-cards.ts only; share card routes (review 52 § 3 -> L0-07)
routes.publicProfileShare/p/[userId]2share-cards.ts only; share card routes
routes.publicLeaderboardShare/lb/[clubId]1share-cards.ts only; share card routes
routes.login/login3L0-01 has route null; mobile has no /login route file (AuthGate renders LoginScreen), the web has apps/web/app/login
routes.loginReturnTo/login?returnTo=...2same: web only (join-club-screen.tsx:114, apps/web/components/route-guard.tsx:35)

Route files with no routes helper at all (all are redirects kept for old links): /(tabs)/(clubs)/discover, /clubs/discover, /activity/pickups, /leaderboard (helper recordsLeaderboard targets /records/leaderboard). Every other unclaimed route in page-code-map has a helper listed above, except /lb, /m, /p share cards (listed). The eight page routes with no route file and no helper are exactly the pages marked new: L3-01 /profile/trust, L3-08 /profile/journey, L3-16 /profile/fees, L4-03 /clubs/[clubId]/events/new, L4-16 /settings/accounts, L4-21 /clubs/[clubId]/settings/account, L3-46 /clubs/[clubId]/dues/ledger, L3-47 /sessions/[sessionId]/draw.

Web-only routes (apps/web, not part of the 84 mobile route files): /status, /preview, /login, /api/*, /sitemap, and the web landing pages /s, /m, /p, /lb, /join-club.

None has a route file under apps/mobile/app or apps/web/app, and none has a routes helper (checked: no events, regular, groups directory or helper). Three exist as inline sections of 클럽 설정 (L4-20), so the data and editors are built but not as pages:

  • 정기 일정 (regular-meets editor): RegularMeetsSection inside ClubSettingsScreen (packages/features/clubs/src/club-settings-screen.tsx:464, settings/regular-meets-section.tsx)
  • 조 (groups editor): ClubGroupsSection inside ClubSettingsScreen (club-settings-screen.tsx:466, settings/club-groups-section.tsx)
  • 앨범 관리: GallerySection inside ClubSettingsScreen (club-settings-screen.tsx:390, settings/gallery-section.tsx) and the read-only /clubs/[clubId]/album
  • 행사 (an event page): nothing: no route file, no routes helper, no screen (t().common.createEvent is the label of the session create CTA)
  • 행사 just made (replace target of L4-03): nothing; L4-03 itself has no route

Unverified and limits ​

  • Closure-based: a push in a file shared by two screens (e.g. club-members-screen.tsx is imported into the L2-01 closure) was attributed by reading the file, not by running the app; the evidence column names the file:line so each can be re-checked.
  • Role gating (official, host, member, non-member) and feature flags (isOwnProfile, canManageClub, entitlements, empty/first-run states) were read, not exercised; a control behind a gate counts as built.
  • Links whose from is a pseudo-source (link, push) were checked against the route files and signal-routes.ts only.
  • [control differs] is a judgement of mine against the via text; the JSON keeps the raw via and evidence so it can be re-judged.

Markdown remains the source of truth. Run yarn docs:check before handoff.