Skip to content

Device checklists — the only checks that need a phone ​

Status: Active · Last reviewed: 2026-10-06 · Owner: the phone in hand; everything else in the QA ladder is machine-run (qa-automation.md).

Each list is scripted to take about fifteen minutes with nothing to decide: install or update, seed once, walk the rows, tick or ✗ each row in the page QA board's Device lists view (https://claude.ai/code/artifact/435ac449-870f-4717-a2dc-209830650ece — the board renders this file, so the rows there are these rows). A ✗ with one sentence is enough; it lands in the feedback inbox with the row named and Claude reproduces from there.

Before any list

As of 2026-11-13 these lists (1 to 52) were written for the 0.11.0 build and the pre-flat-v2 pages; they are history, not a guide to the next build. The script for the 0.12.0 build is List 53, run after the pre-build and post-build checklists. The three steps below describe how the older lists were run.

  1. Preview channel on the 0.11.0 Android build (e4583905, List 47); pull the latest OTA (background the app, reopen, or Dev panel → 업데이트 확인).
  2. Seed once from the dev panel or the terminal: node scripts/run-scenario.mjs full_qa (hosted QA bed; this overwrites the QA world — never on a database you called live). qa_showcase is the lighter chain when only cards and live surfaces matter.
  3. Sign in as the dev account by typing the e-mail and password (no build holds the password since 2026-11-13). Airplane mode is a separate list (offline behaviour is machine-tested; skip it here).

Legend: Route is what to open · Do is the gesture · Pass is what a Toss user would expect to see. Anything that needs a second person is marked (2p).


List 1 — Autonomous pass, wave 1 (after OTA of the 2026-09-17 decisions) ​

#RouteDoPass
1클럽 tablook at the headera text action "초대 코드" (no key icon); tapping opens the code screen
2클럽 tab, account with no clubsread the empty state"클럽 탐색" filled, "초대 코드로 가입" outlined under it; the bottom "클럽 만들기" band is outlined, not filled
3클럽 tab, account with a clublook at the bottom band"클럽 만들기" is filled again
4club detail as an officialheader"관리" text action next to ⋯; white over the banner, brand colour once collapsed; ⋯ holds only 공유 and 나가기
5club detail as a plain memberheaderno "관리"; ⋯ holds 공유 and 나가기
6club detail → 멤버 panescroll the headermember count line; "복식 파트너 추천" row for members; no 조 line when the club has one group; legend line + 조 lines when it has two or more
7관리 → 멤버 관리headerthe partner row is gone from here
8관리 → 회비 관리unpaid rowinline "납부 확인" and "면제" pills, no ⋯; tapping the row opens the note editor; paid current-month row shows "납부 취소"
9sametwo or more unpaid rows"전체 납부 확인" in the section header; confirm names the count and the total; one tap marks all; the toast counts them
10session detail → host tools → 참가비title and sectionstitle "참가비"; section "입금 현황"; cost-split sessions show "정산" and the one-sentence explainer with 1,000원 rounding
11same, pending rowpills"입금 확인" (not 납부) and "면제"
12세션 만들기 from a clubstep 3형식 is pre-selected with the club's format and still changeable; pickup wizard starts empty
13session edit (open session, nobody paid)fields참가비 row is editable; the lock note names 종목/로테이션/모집 마감 only
14session edit (a payment exists)fields참가비 row disabled with "입금이 시작되어…" caption
15scorecard rules stripbadgesa 듀스 or 노애드 badge next to tiebreak
16any listread secondary textdates/venues/fees are visibly larger (14px); nothing clips mid-word
17any card with a long venue nametitlewraps to two lines, never an ellipsis after one
18클럽 만들기 step 4 / 세션 만들기 step 3tier pickerplain 구력 lines; "자세히 보기" reveals the federation lines; tapping again collapses
19same steps구성 fieldone-line hint under the label; the "?" beside the tier label opens the tier sheet
20session detail → 정보로테이션 rowreads "N분마다 교대"
21홈 → 알림 filter chipslabels"대항전", no "인터클럽"
22설정 → 신뢰 등급 row · public profile trust celltapthe trust sheet opens, four tiers with plain requirements, mine highlighted
23설정 → 문의하기rows이메일 문의 only (no Kakao until the channel URL is configured); tapping opens the mail app

List 2 — Board device checks (three ack'd entries) ​

#RouteDoPass
1session detail with a participant whose photo URL is deadparticipants sectioninitials or silhouette, never a blank circle (board fb_…3jw0x1)
2코트 → saved courts, airplane mode on then offtilepin glyph while the map image fails, image once it loads (board fb_…k39ijx)
3메시지 → open a seeded DMheader while loading and afternever a bare "메시지" once the thread has loaded (board fb_…szile3)

List 3 — SessionCardV2 (owed since 2026-07) ​

Seed: card_showcase (or full_qa).

#RouteDoPass
1홈, 경기 tab, club 일정 pane, recordsscroll every feedevery session is the same V2 card; no old strip card anywhere
2any cardmap tiledistrict-scale tile with the red marker; no blank tile
3live session cardtopattention strip (live / closing) tinted, marks icon-only under it
4a saved sessionright of the weatherbookmark glyph filled; tap toggles
5a session you hostclosing rowcrown host mark
6scroll a 30+ card feed fastlook for blanksno blank cells (Fabric recycling class)

List 4 — ATP live-set cards (owed since 2026-08-27) ​

Seed: live_showcase.

#RouteDoPass
1세션 만들기 → match rulespick a multi-set formatfreeform steppers hide behind "형식이 세부 규칙을 정해요"
2match board on that sessionenter a scoreper-set rows appear progressively; tiebreak entry when the set reaches the spec
3session detail matchups card, spectator scorecardscoreboardN set cells, winner by sets won; single-set sessions unchanged
4session editfield rows코트 / 구성 / 실력 rows edit and save
5live session (2p)live paircurrent-set games update within a few seconds without pull-to-refresh

List 5 — Club home place surface (owed since 2026-08-23) ​

Seed: club_showcase.

#RouteDoPass
1club detailscrollalbum banner scrolls sideways; the top bar goes from ‹/⋯ over the banner to a solid bar with the title
2identity blockreadavatar beside the title, emoji-led chips (📍 🎾 📅), tagline
3mission cardnew member가입인사 → 첫 일정 참석 → 첫 일정 후기 with the right step lit
4schedule rowstap the top rowcollapses/expands; D-day, venue, one signal per row
5feedcategory chips전체 / 공지 / 자유 / 일정 후기 / 가입인사 (운영진방 for officials) filter the list
6a posttap 좋아요, open 답글counts update in place
7채팅 tablistthe club room first, then every DM; no compose button

List 6 — Flat layout device pass (F8, owed since 2026-09-07) ​

#RouteDoPass
1session detail, club detail, venue detail, profile, recordsscroll eachcanvas ground, no tinted card shells; one seam between sections, none inside a group
2any detail pageleft edgetext aligns at the 16px rail; nothing double-inset
3dark modesame five pagesborders one step above surface; no black-on-black rows
4tab barswitch tabs quicklyno elevation flicker on Android

List 7 — Keyboard controller (activation is an on-device OTA loop) ​

Do this only when Claude ships an activation OTA and asks; the library is dormant in the 0.8.0 binary.

#RouteDoPass
1세션 만들기 step with a text field at the bottomfocus itthe field rises above the keyboard without the whole screen jumping
2DM threadtypecomposer stays attached to the keyboard, no flicker on open/close
3참가비 결제 (PortOne WebView)openthe WebView still fills the screen (top inset regression check)

List 8 — Draft resume (owed since 2026-07) ​

#RouteDoPass
1클럽 만들기fill two steps, kill the app, reopen 클럽 만들기"이어서 작성할까요?" offer; accepting restores both steps
2세션 만들기samesame
3eitherdecline the offera clean wizard; the offer does not return

List 9 — Create-club step 4 chips (owed since 2026-07-30) ​

#RouteDoPass
1클럽 만들기 step 4format tilesone-line pills ("복식 · 4인 기준"), selection visible, 44pt tall

List 10 — Autonomous pass, waves 3/4 (OTA f3be020c, 2026-09-17) ​

Seed: live_showcase for rows 1–4, full_qa for the rest.

#RouteDoPass
1session detail of a live sessionlook under the heroone band: 진행 중 · elapsed time · 라운드 N/M · 코트 N; it updates without pull-to-refresh
2match board of the same sessiontop of the flowthe same band, same facts, first thing under the header
3spectator scorecard of the same sessionscroll the tabsthe band stays pinned above the tabs
4a cancelled sessionscrollno empty matches section, no doubled hairline
5클럽 만들기 step 1toggle "기본 설정으로 빠르게 만들기"off by default; on, the wizard runs name → where → when → review (four screens) and the progress dots match
6same, review stepread the rows구성 혼합 / 형식 복식 / 실력 무관 / 균형 / 게스트 허용 each carry a 기본값 badge and open for editing on tap
7클럽 설정 (club created via quick start)인원a 정원 stepper exists and saves
8클럽 설정 → 정보활동 지역 rowread-only district line with a link to 코트 관리; add a court in another district there and the line gains that district on return
9클럽 설정 → 갤러리uploadthe OS picker allows multi-select (up to 4); one toast counts the uploads; no per-photo toast
10club home, 전체 feedafter row 9"OO님이 사진 N장을 올렸어요" row with thumbnails and the 자동 marker; tap opens the album; the row is absent under 공지
11any picker with photo permission deniedpickone dialog everywhere: "권한 필요 / 사진 접근 권한이 필요해요" (settings logo/banner/gallery, post photo, profile avatar, DM photo, club logo tile)

List 11 — Owner report fixes (OTA a2cd626b, 2026-09-17) ​

#RouteDoPass
1any screen, phone onlineswitch Wi-Fi off and on, then leave the app and come backno "연결이 끊겼어요" banner while the phone is online; if it appears during a switch it clears within a few seconds by itself
2any screenairplane mode onthe banner appears after about two seconds, not instantly, and lists fell back to cached content
3sameairplane mode offthe banner clears within five seconds without touching the app; lists refresh
4클럽 tab (and 경기 tab)look at the pinned 클럽 만들기 bandthe band is the button plus 16px above the tab bar — no thick empty strip under the button
5club detail, session detail, session editpinned CTA16px of band under the button before the navigation bar; the band colour continues to the screen edge
6클럽 만들기 / 세션 만들기 wizardfooter CTAsame 16px clearance as row 5; hint text above the button when the button is disabled
7세션 만들기 → 코트 search takeover, pick a courtconfirm barsame band as everywhere else
8DM threadcomposerthe composer sits directly above the keyboard/nav bar with no extra blank strip

List 12 — Audit valid items (OTA c795a39a, 2026-09-18) ​

#RouteDoPass
1홈, 이번 달 view with many sessionsscroll fastcards appear as you scroll with no blank cells and no stutter; section titles and gaps look as before
2경기 tab — 내 경기 / 번개 찾기 / 저장됨look at the left edgecards, titles and the filter bar share one 16px rail; nothing is double-inset
3클럽 → 일정 관리samesame rail on both panes
4기록 tab → ELO trendtap a point, then slide acrossthe marker snaps point to point; the label above shows that match's date and ± delta; release keeps the point
5samescroll the page with a finger on itvertical scroll still wins — the chart does not trap the drag

List 13 — Web-render QA fixes (OTA OTA, 2026-09-18) ​

#RouteDoPass
1기록 tab, scope rowlook at the four pills우리 클럽 reads in full (no "우리 …"); the green pill sits exactly under the active label; tap 친구 → slides
2일정 → 참석자 관리 / 대진표find a member with no photoa light-gray disc with initials, never bare letters floating beside the name
3클럽 홈, 일정 rowswith 4+ upcoming sessions, look at 일정 더보기the row sits on the same 16px rail as the rows above it; tap toggles expand/collapse
4일정 → 참가비 (free session)scrollthe three facts sit tight; the amount input clears the 정산 내역 만들기 band; page scrolls
5일정 만들기 step 1look at the date fieldplaceholder / value inset from the border like a text field
6프로필, 친구 sectionwith zero friendsone CTA (친구 찾기), no chevron on the box; with friends: avatar stack + chevron
7프로필, 친구 section (hosted QA bed)countno friend named 알 수 없음 (migration 00656 removed the seed orphans)

List 14 — Folded session card (OTA OTA, 2026-09-18) ​

| # | Route | Do | Pass | | --- | ---------------------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ----------------------- | | 1 | 경기 tab, 내 경기 (and 홈, 클럽 → 일정) | look at any card | three lines beside a square map tile: venue + one chip + bookmark / 📅 date time / 🎾 format style · tier dots | fee; a thin meter below | | 2 | same | a card where you are host or 참석 확정 | the chip beside the title reads 호스트 / 참석 확정 (or an attention chip like 마감 임박 when one applies) — never two chips | | 3 | same, a live session | look | the red band on top, the title chip shows your standing, no second 진행 중 | | 4 | same | tap a card | the hero repeats the same title + chip, then 📅 ⏰ 🎾 chips — the card read like a preview of this | | 5 | same, a long venue name | look | one line with … ; the tile stays a square; nothing below it is squeezed | | 6 | 360dp phone (small Android) if available | look at L3 | the tier numbers may ellipsize (…) — the 🎾 label and fee never do; nothing overflows the card |

List 15 — Event type, tier cue, panel filters (OTA OTA, 2026-09-18) ​

#RouteDoPass
1경기 tab, 내 경기 / 번개 찾기look under the search barsearch + 필터 only — NO chip row (the quick chips were reversed the same day); tap 필터 → the panel starts 날짜 · 종목 · 경기 유형 — SUPERSEDED by List 16 #1 (the day headers are the frame now; there was never a "다가오는 일정" title, retest under List 16)
2samein the panel, 종목 → 복식the list narrows at once; every card's 🎾 line no longer says 복식; the 필터 badge shows 1
3samein the panel, 날짜 → 오늘cards show ⏰ time only (no date); clear both → cards read 📅 date time again
4same경기 유형 → 대회 (probably no results)"조건에 맞는 일정이 없어요" with a 초기화 button; tapping it restores the list (번개 찾기 keeps your region)
5any cardlook at the tier segment🎯 leads the dots + numbers (no "NTRP" word on the card); 🔒 + grey numbers only on a session whose band excludes your rating
6일정 상세look at the hero📅 · ⏰ · 🎾 · 🎯 NTRP a–b chips in that order — the card unfolded; 정보 section starts with 경기 유형 정기 and still shows 경기 방식
7일정 만들기 (club), step with 종목look after 종목a 경기 유형 field defaulting to 정기 with 대회 / 리그 / 대항전; the review step shows it only when not 정기; 번개 flow has no such field
8a session created as 대회open its card and detailcard 🎾 reads "복식 대회", hero too; the info row says 대회

List 16 — Day sections, 2+2 card, tier cue fix, one title→item seam, no fee, text-only tier band, emoji line box, flush row headers (OTA c1d3e49f, 2026-09-18/20) ​

#RouteDoPass
1경기 탭, 내 경기open the paneday headers ("9월 19일 (토)" style) with 오늘/내일 meta stand above each day's cards; no "다가오는 일정" title anywhere above them
2any session-card list (경기/클럽/홈)look at any cardL2 reads ⏰ time · 🎾 format only — no date; L3 reads 🎯 dots+numbers | fee
3any card, and the 🌱 trust chip on a member rowlook at every emoji's bottom edge (⏰ 🎾 🎯 🌱)drawn whole on YOUR phone's emoji font — the emoji now sits in a 20px line box (was 16); if any glyph is still cut, note which emoji and the phone model
4홈, 주 and 월look under the recap card; then switch to 오늘NO 이번 주 예정 / 이번 달 예정 title — day headers follow the recap card directly; 오늘 pane shows no day header (it's already a single day); card→card gap looks the same as on the 경기 tab
5클럽 → 일정 관리 (모집 중 / 진행 중 / 완료)open each paneday headers precede each day's cards on all three panes
6경기 탭, 번개 찾기scroll to the bottom until it loads moreday headers stay in list order as new pages append — no duplicate or misplaced header
7경기 탭, 필터 panel종목 → 복식every card's 🎾 line drops 복식; the day headers above them are unaffected
8클럽 미리보기 (active guest), 참여 가능한 일정scroll the sectionday headers stand above the guest's session rows, same grammar as every other session list
9클럽 탭 내 클럽 · 알림 센터 · 클럽 멤버 · 기록 히스토리 · 코트 찾기 searchlook at any section title and the first item under itthe gap is the same tight 8px everywhere (was noticeably wider on these five); the 조 group header on 랭킹 keeps its tier dot
10any session cardlook at L3🎯 tier band only — no 무료 / ₩ amount on any card; the detail still shows the fee
11any tier band (card L3, 클럽 card pill, 클럽 미리보기)look at itnumbers only — no coloured dots before the NTRP values; the 티어 안내 sheet still shows its coloured legend
12클럽 → 멤버 / 회비 / 설정 / 관리, and any row list under a titlelook at a section title and its first rowthe first row's content starts about as far under the title as a card's border does on the 경기 list (measured 11–15dp vs 12); the 회비 avatar tops its three-line row instead of floating mid-row

List 17 — Session detail, page-native (OTA 23aba75e, 2026-09-20) ​

Rewrites the 2026-09-20 morning "session share card" list (session-hero-quiet board, candidate D — docs/twomore_design_system/wireframes/session-hero-quiet.jsx's ShqPageNative): the hero card is retired, replaced by the page's own grammar starting right under the media band.

#RouteDoPass
1일정 상세look at the heroa map band (or, only when the session has no venue AND no free-text location, no band at all), a club-name eyebrow above the title, the venue name as the title — no chip, no fact rows, no fill meter on the hero itself
2same, headerlook at the top bar before and after scrollingno title text over the hero (back button + ⋯ only); with a map band, scrolling solidifies the bar (still no title text); with no map band (rare — no venue/location), the bar never collapses, it's solid from the top
3same, top rows below the heroread the first block, before any banner/sectionfive rows, no title above them, no StatStrip: 일시 (date + time) · 종목 (format, + 경기 유형 word if not 정기) · 실력 (tier band, or "실력 무관") · 참가비 (your fee, "무료" if none) · 신청 마감 (date-aware, "없음" if none)
4same, 참석 sectionread the section header, not the rowsreads a recruitment word + count, e.g. "모집 중 6/16" — never a bare "확정 6명, 예비 0명" line while the session is still open/recruiting (that line only returns once the session is in_progress/completed/cancelled)
5same, 정보 sectionscan the rows경기 유형 · 경기 방식 · ELO 반영 · 날씨 (when forecast exists) · 로테이션 (when set) · 취소 규정 (when penalty applies) — no 종목/실력/참가비 rows here (they're in the top block above)
6same, 공지 (a session with a description)look at the 📣 linethe emoji sits vertically centered against the first line of text, whole (not clipped), same grammar as other glyph+text rows in the app
7sametap the map bandopens the venue's 테니스장 detail page (unchanged destination)
8⋯ → 공유 (or the Kakao/system share sheet)send the link to yourself in KakaoTalk (or any app that unfurls links)the unfurled preview still shows the Kakao image card (map/glyph tile + venue + facts) — unchanged, it renders from the web OG projection, not this screen's own hero; 참여하기 on the shared page still works unchanged
9번개 미리보기 (open a shared 번개 link while not a member)scroll top to bottomthe SAME hero law as 일정 상세 (map band, club eyebrow, venue title, no chip); the top block adds a 승인 방식 row between 참가비 and 신청 마감 (자동 승인/승인 필요); no 시작 시간/최대 인원 rows; the 테니스장 card below has no second map — just address · 코트 · 운영시간 · 편의시설 + a 지도 보기 link
10일정 상세, top fact rowslook at each row's left edgeevery row starts with its glyph — 📅 일시 · 🎾 종목 · 🎯 실력 · 💰 참가비 · ⏳ 참석 마감 (📝 승인 방식 on 번개 미리보기), the same glyphs the list card uses; the row reads as one unit despite the gap to its value

List 18 — Session detail audit follow-through (OTA 80b7b66e — rows 1–11 also on 8ad45cd8, 2026-09-21) ​

Triage of the Gemini/Antigravity investigation of 일정 상세 and its reachable pages (docs/design/decision-log-autonomous-2026-09-17.md, GEMINI-AUDIT TRIAGE): the roster wall, the rules gate, the hero's missing tap cue, dead-end roster rows, the bare 정보 rows and the stale 참석 마감 — plus the owner's own Gemini-session changes (fee on the card's closing line, 👤 내 상태 row) now mirrored in canon and the kit.

#RouteDoPass
1일정 상세 as a PLAIN member (not host, not 총무/대표)tap 참석 → 전체 보기 (or the 외 N명 row)the full roster opens (title 참석자) with 확정 + 예비 sections — no 접근 권한 없음, no 취소 section, no 제거 buttons; each row shows a chevron and tapping it opens that member's profile
2same roster as 총무/대표open the same screentitle 참석자 관리 with the manage subtitle, a 취소 section, 제거 on confirmed/waitlisted rows (confirm sheet unchanged), 확정 on a 조-gated 예비 row
3same roster as a 번개 host who is NOT a club adminopen via 호스트 도구 → 참가자 관리title 참석자 관리, the 취소 section, 확정 on a gated 예비 row, but NO 제거 buttons (the server refuses a non-admin host — the button never existed for real)
4일정 상세 as 경기이사 (match director, not 총무)look at 호스트 도구, then open 경기 규칙the 경기 규칙 row is present and the editor opens and saves (before: row hidden / 접근 권한 없음 although the server allowed it)
5대진 방식 선택 → 토너먼트 setup, as a host who is not an adminlook at the 경기 시간 rowa plain read-only row — no "규칙 수정" hint/chevron (tapping it used to land on 접근 권한 없음)
6일정 상세 herolook at the map band's bottom-left cornera small "장소 보기" pill on the band; tapping the band still opens the venue page; a session with no venue id shows no pill
7same, 참석 section rowstap a participant rowopens their profile; the status badge (참석 확정 / 예비) still shows with a chevron after it
8same, 정보 sectionscan each row's left edge🏷️ 경기 유형 · 🏅 경기 방식 · 📈 ELO · (weather glyph) 날씨 — the ☀️/🌧 sits at the row START and the value is just "맑음 26°" (no second emoji) · 🔄 로테이션 · 📋 취소 규정; every glyph whole, not clipped (Samsung)
9a session whose 참석 마감 has passed (or a completed one)read the ⏳ 참석 마감 row"9/20 오전 9:00 마감됨" (or "오늘 오후 6:00 마감됨") — always with a time, never a bare "9/20 마감됨" and never "9/20까지"
10경기 탭 / 홈 list cards as a BROWSING viewerlook at a card's closing linefee text (e.g. 25,000원 / 무료) left of the meter; the venue title owns the whole first line (bookmark only); as host/confirmed the standing chip sits there instead and no fee
11설정 rows / 클럽 관리 hub rowslook at any row that carries a value or a 준비 중 badgevalue/badge then ONE chevron, spacing unchanged from before (the primitive now composes it)

List 19 — Public profile render loss fix & session detail header split (OTA 59f028ee, 2026-09-21) ​

Resolution of the Android Fabric native render loss on the Public Profile (/profile/[userId]) where child views below StatStrip disappeared and Button stretched to the bottom, plus native scroll ownership on DetailShell and SessionDetailHeaderRight component extraction for ARCH-10 file-size safety.

#RouteDoPass
1공개 프로필 (/profile/[userId], e.g. from roster row)view page on AndroidStatStrip stat cells take their natural intrinsic height; 신뢰 등급 cell does NOT stretch vertically; 플레이 section and 친구 well render visibly below the strip
2same, scroll behaviorscroll up and downsmooth native scrolling; bottom footer (신청 / 메시지 / 친구 추가 CTA) stays pinned without covering content or cutting off last items
3일정 상세 (/sessions/[id])tap header top-right bookmark buttonbookmark toggles on/off with visual feedback
4same, header top-right ⋯ menutap ⋯ iconaction sheet / menu opens with full list of session actions (공유, 캘린더 추가, etc.) and matching solid/collapsed ink

List 20 — Session detail Option A alerts, selectable hover insets & badge typography (2026-09-22) ​

Elevating actionable transactional alerts (payment holds, refund obligations) to the top above the hero with rail padding; placing NoticeSection directly after core facts in the flat column; adding 12px inner padding, negative margin compensation, and rounded pill borders to ListRow and StatStrip interactive state layers; and setting the design-system badge default size to sm (12px badge role).

#RouteDoPass
1일정 상세 with a pending payment hold (reserved)open session detail page결제 대기 PaymentGateBanner (with 15-min countdown) renders below the hero title, as the first child of FlatColumn's alerts zone — above NoticeSection/LiveParticipantBar/SessionFactsSection; never buried below the fold (corrected 2026-09-23: layout changed by 85a12160)
2일정 상세 as host with pending refunds / overdueopen cancelled session with refundsRefundBanners renders at the top above the hero; tap 환불하기 CTA routes directly to routes.sessionPayments
3일정 상세 with a host notice (description)open session detail pageNoticeSection (Well tone="primary") appears directly below the alerts zone and ABOVE LiveParticipantBar/SessionFactsSection, before the roster and matches (corrected 2026-09-23: layout changed by 85a12160)
4any list of ListRows (roster, host tools, settings)hover or press a row on web/desktop or mobile$surfaceTertiary highlight displays as a soft 8px-rounded pill with 12px breathing room around the leading avatar/glyph and trailing chevron, rather than a flush 0-inset hard rectangular border
5any StatStrip (public profile, venue detail)hover or tap a stat cellstate layer renders with 8px inner padding and $2 rounded corners cleanly within the cell boundary
6일정 상세 fact block (SessionFactsSection)view 내 상태 row as host or confirmed participant호스트 or 참석 확정 badge text renders at 12px with proper line-height and balanced 4/8px padding; no longer shrunken to 10px micro font
7status badges app-wide (status-badges.tsx)check badges on list cards, roster, and detailsKorean status badges (참석 확정, 마감 임박, 결제 대기, etc.) default to 12px badge role typography, visually proportional against 14px body text

List 21 — Audit W0, Gemini follow-through, W1 batch 1 (OTA 7469af8a, 2026-09-23) ​

The P0 payment banner and ELO chart, the tappable-row seam root cause, the retired scroll pill, host tools in one place, and the first subtraction pass (docs/design/improvement-plan-2026-09-23.md).

#RouteDoPass
1일정 상세 — a paid session you have NOT joinedopen itNo 입금 필요 banner; the CTA is the plain 참석 CTA (PAY-NONE)
2일정 상세 — a cancelled paid sessionopen itTerminal banner only; no payment banner
3일정 상세 — a paid session you joined, hold pendingopen itThe 입금 필요 banner still shows, with the bank line and 입금 완료
4일정 상세 → 참석 sectionlook at the rosterTitle "참석 7/12"; confirmed rows carry no 참석 확정 badge; the host row reads 호스트, a waitlisted row 예비; the title sits 8dp above the first row
5일정 상세 as host → ⋯open the menuOnly 공유 / 그룹 채팅; no host tool there — they are in 호스트 도구, 8dp under its title
6일정 상세 as a non-host → ⋯tap 문의하기Your 1:1 thread with the host opens
7any list of tappable rowspress and hold the first rowThe grey press layer is rounded and whole (not clipped at the top)
8관리 (club admin)open it운영 / 설정 titles 8dp above their rows; the top strip shows only non-zero counts, or 지금 확인할 일이 없어요
9any short list (e.g. 테니스장 관리)open itNo floating 아래로 스크롤해 더보기 pill
10기록 → 최근 ELO 추이look at the chartAfter wins the line rises and is green; one match still draws a line
11경기 tablook at the lensesThe fourth lens reads 테니스장 in full
12홈switch 일/주/월; empty day → tap the cardTitle reads 홈 on all three; 새로운 번개를 찾아보세요 opens 번개 찾기
13클럽 (you have clubs)look at the header and bottomNo pinned 클럽 만들기 band; a + beside 초대 코드 opens the wizard
14업적scroll the galleryNo 준비 중 rows; the 전체 count matches the rows shown
15클럽 홈 일정 rowslook at a day with two sessionsEach row shows a start time between the D-day chip and the venue
16일일 요약 / 기간 기록 match rowslook at a rowOne context line (e.g. 복식), never 복식 / 복식

The shared match row, the honest public profile, records without ghost rows, tier badges only at run starts, strings moved into i18n, and the ?tab= links that had landed on the wrong pane (docs/design/improvement-plan-2026-09-23.md, decision log ROUND 2 / TAB-PARAMS).

#RouteDoPass
1홈 → 일, a day with nothingtap 새로운 번개를 찾아보세요The 경기 tab opens on 번개 찾기 (not 내 경기)
2클럽, no clubs (or 탐색 entry)tap 클럽 둘러보기The 클럽 tab opens on 탐색 (not 내 클럽)
3클럽, cold start as a memberkill the app, reopen on 클럽No 클럽 만들기 band flashes before your clubs load; the + icon appears once they do
4Another player's profileopen it총 경기 is their match count (0 when none, never sessions attended); 승률/출석률 read like "67%"
5Another player's profile → 클럽look at the sectionNo 전체 보기 link; the club row sits 8dp under the title; no 이미 친구예요 well
6Another player's profile → 경기 기록tap a rowThe row looks like a 기록 → 경기 기록 row and opens that 일정
7기록 with fewer than 5 matchesscrollNo greyed "— — —" 개인 기록 rows
8기록 → 리더보드 (any tab)scroll past the podiumA tier badge appears only on the first row of each tier run; tapping it opens the tier sheet
9일일 요약 of a mixed singles/doubles daylook at 최종 레이팅A formatted number ("1,013"), the doubles rating
10기록 → 형식별 통계look at the rows단식 / 복식 / 혼합 복식 as separate rows
111:1 chat → block, then unblockdo bothKorean toasts from the app (차단/차단 해제), no raw text
12로그인 with a wrong passwordsubmitA Korean message about the password — no English or 세션 wording
13일정 상세, a pending 입금 holdtap 입금 완료Toast: 입금 완료를 알렸어요. 호스트 확인을 기다려 주세요.
14Android 설정 → 앱 → 투마 → 알림open the channel listChannel names in Korean (일정, 대진표, 참석, 회비, 입금, 클럽 …)

List 23 — Round 3: one number per metric, club ELO, sessions, home 일 (OTA faecdff0, 2026-09-23) ​

One since-join attendance rate, club-pool ratings labelled, session subtractions, strategy copy in i18n, and home 일 showing your clubs' sessions and pickups (decision log ROUND 3).

#RouteDoPass
1홈 → 일, a day your club has a sessionlookThe club's session shows even if you haven't answered, with your 참석/미정 state
2홈 → 일, a day you joined a 번개lookThe pickup shows on 일 (and its date has a dot in the calendar)
3홈 → 주 or 월, a period with no playlook at the recapOne calm line; no faded donut or overlay pill
4관리 → 출석look at the header and rowsLabel reads 가입 후 출석률; a member who joined recently isn't penalised for older sessions
5관리 → 분석look at the funnelThe join conversion sits under 가입 버튼 탭; no figure above 100%; source rows have Korean labels
6클럽 → 랭킹, 기록 → 리더보드 → 클럽look at the ELO caption and podiumClub values read 클럽 ELO; the column fits "클럽 ELO" and "1,234" on one line
7프로필look at the streak statReads 최장 연승
8일정 상세 before a drawscrollNo empty 경기 section
9일정 상세 → 참석자open it on a session with no 예비No empty group (no "(0)" well)
10번개 호스트 대시보드, no applicantsopen itOne calm line; no big red 번개 취소 (cancel is in the detail's 위험 구역)
11일정 상세 → 경기 (same-tier players)look at the rowsNo identical medal on every player; rows don't repeat the round or a shared format
12클럽 → 대항전, a challenge past its end datelook at its badgeReads 종료
13라운드 추가 → 방식look at the presetsNames like 소셜 복식 / 실력별 단식 (no middle dots); descriptions show
141:1 chat → delete your only messagego back to 채팅 listThe thread's preview no longer shows the deleted text

When a list is done: move the page(s) to Done on the board. Claude reads the board, fixes ✗ items at the class level, and re-ships an OTA; the list is re-run only for the rows that changed.

List 24 — Round 4: one clock, person rows, exception ledger, kind groups, reports (OTA 0ce3160e, 2026-09-24) ​

24-hour times everywhere, one person row, 회비 as an exception ledger, admin work grouped by kind, a real 신고 flow, five-section 설정 and the round-4 review fixes: club chat reports reach club admins, per-kind dismiss, the DM row and host card on the canonical primitives (decision log ROUND 4 and ROUND-4 REVIEW entries).

#RouteDoPass
1일정 상세 with a 참석 마감look at the deadline24-hour "HH:MM" (no 오전/오후)
2일정 만들기 → 마감 stepset a deadline, look at the receipt24-hour time
3일정 상세 → 참석자; 번개 호스트 대시보드look at the rows, tap oneFace (or initials), name, one sub line, a badge only for 호스트/예비; tap opens the profile
4기록 → 리더보드 (전체 / 지역 / 클럽), 클럽 → 랭킹look at the podium and rowsPlayer photos show, not only initials
5기록 → 상대 전적lookBoth players show their photo
6관리 → 회비look at the top and the rowsAmount and due day stated once; sections 확인 대기 / 미납 / 완납 / 면제 (empty ones hidden); one 납부 확인 pill per unpaid row
7관리 → 회비 → tap a rowopen the panel면제 / 메모 / 납부 취소 are there
8일정 → 출석 확인tap ✕ on a row, then tap it againRows are quiet; ✕ marks 불참 with a badge; a second tap clears it
9알림 → 할 일, admin of 2+ clubslook, expand a multi-club row, tap chipsOne row per kind; "N개 클럽" expands inline; each chip's count matches the rows it shows
10A new player's public profileopen itOne line; no empty sections
11내 프로필 with no matches yetlookEmpty sections are gone; the 친구 찾기 prompt shows once
12Public profile headertap 공유, then ⋯ → 신고공유 is its own icon; ⋯ holds 신고 / 차단; 신고 opens the report form
13관리 → 신고 N (admin strip), or a 신고 notificationopen, resolve oneA 신고 review screen lists the reported member, reporter, date and reason; resolving removes it
14A 대회 with no roundsopen the board라운드 만들기 shows; resetting asks a 처음부터 confirm
15설정scrollFive titled sections 계정 / 알림 / 프라이버시 / 앱 / 지원; version, theme, legal, logout, 탈퇴 all there
16경기 → 테니스장 directorylook at the footer and header없는 장소 추가 (footer) and 제안 내역 (header)
17장소 정보 제안 or 소유자 인증 → 관찰 날짜tap the rowThe native date picker opens; the picked date shows on the row
18클럽 → 테니스장 관리remove a venueOne confirm (web: one dialog, not two); the first row has its top inset
19프로필 수정 → 지역open itOne dropdown, not 17 chips
20회원 탈퇴look at the inputThe placeholder is a hint, not the phrase to type
21클럽 홈 as owner or adminlookNo new-member mission
22클럽 게시글, 댓글look at the author lineName first; time and category stacked below; 📌 공지 badge beside ⋯
23관리 → 출석, a member who was a guest before joininglook at their rateNever above 100%
24A club chat → ⋯ on a member's message → 신고; then, as that club's admin, 관리 → 신고file one, open the list, resolve itThe report shows with its category (and the words, if any); 해결 처리 drops it from the 신고 count
25알림 → 할 일, one club with two kinds (e.g. 가입 + 미납)dismiss one kind's rowThe other kind's row stays; the bell count drops by the dismissed kind only
26채팅 list (and 클럽 → 채팅)look at a 1:1 row and the 요청 tabFace, name, last message below; time top-right with the unread dot under it; 요청 rows show 거절 / 수락, no chevron
27번개 미리보기, a pickup you don't hostlook at the host card, tap itFace, name, tier badge, 경기 수 / 출석률 below; tap opens the host's profile
28클럽 설정 → 게스트, a guest over the visit limitlook at the rowA warning badge on the row; the sub text is neutral
29Web: 관리 → 신고open itThe 신고 list opens (no 404)
30신뢰 등급 explainer (tap your tier badge)read the footerSays reports from 3+ members, not "3 reports"

When a list is done: move the page(s) to Done on the board. Claude reads the board, fixes ✗ items at the class level, and re-ships an OTA; the list is re-run only for the rows that changed.

List 25 — Open-issues pass: rails, avatars, answer-by deadline, venue picks (OTA d1d5eb27, 2026-09-24) ​

The regressions the emulator found in round 4, the RSVP deadline as an answer-by time, venue picks everywhere, and the smaller fixes (plan docs/design/open-issues-plan-2026-09-24.md).

#RouteDoPass
1Open the app after this updatelookYou are still signed in
2클럽 → 관리 → 멤버 관리look at 대표 / 총무 / 멤버Every row shows the member's name (and 조), not just a photo
3관리 → 회비look at the rowsRows sit on the page margin (nothing touches the screen edge); 납부 확인 is an outline pill
4프로필 → 친구 목록; 일정 → 참석자scrollEvery person shows a photo or initials — never an empty grey circle
5메시지look at the listAll titles start at the same line; a group shows two faces inside one circle's space
6메시지, a 1:1 chat with no messageslook, then open itNo preview text on the row; the chat opens empty as the row suggests
7일정 상세 with a 응답 기한 aheadlook at the factsReads 응답 기한 "…까지"; nowhere says 마감
8A session whose 응답 기한 has passed, seats leftlook at its card and detailNot "모집 마감"; the 응답 기한 row is gone; 참석 still works
9일정 만들기 → 응답 기한read the captionExplains attendees are asked to respond by then and can still join while seats remain
10일정 상세 → 정보look경기 방식 is one row, with the ELO effect as a second line
11일정 수정 → any fieldopen itThe field's button says 적용; the page's own button says 저장
12일정 수정 → 장소change itOpens the venue search; the picked place replaces the old one
13일정 만들기 → 장소search a place that isn't listedNo free-text venue; "없는 장소 추가" takes you to the suggestion form
14클럽 → 테니스장 관리search a missing placeLeads to 없는 장소 추가; the header has 제안 내역
15경기 → 테니스장scroll to the end"찾는 곳이 없나요?" with 없는 장소 추가 and 제안 내역
16복식 파트너 추천look at a candidate's breakdownValues like 29/40 stay on one line
17클럽 홈 mission card; a post linking a sessionlook at the right edgeA chevron icon, not a typed ›
18Any screenuse normallyNothing blocks the app (the update gate stays open on this build)

List 26 — One rating, counting posts, clean initials (OTA 930dbd7c, 2026-09-24) ​

A player has one ELO now; a club's ranking is that ELO among its members (plan docs/design/club-rating-unification-plan-2026-09-24.md). Post counts now count every member, and club initials skip brackets.

#RouteDoPass
1클럽 → a club → 기록 → 랭킹look at the caption and numbersThe column reads ELO (never 클럽 ELO); two members with the same ELO share a rank
2Same listcompare a member with their profileThe ELO in the ranking is the same number as on that member's profile
3Same listlook for a member who never playedMembers with no rated match are not in the ranking
4기록 → 리더보드 → 클럽look at the podium and rowsValues read ELO; ranks match the club's 랭킹 tab
5클럽 → 관리 → 조 설정 → 재편성 미리보기look at the proposed groupsGroups follow members' ELO (the profile number)
6관리 → 분석look at 평균 ELOA plausible average of the members' profile ELOs
7A completed club 일정 → 결과 → 순위look at 클럽 내 순위The rank change is small and sensible (no jump from mixing two ratings)
8클럽 → 소식, someone else's post (as a member)comment, then pull to refreshThe comment count goes up by one and stays
9Same postreact, then pull to refreshThe reaction count goes up and doesn't snap back
10클럽 → 내 클럽look at club avatars without a logoInitials never show a bracket or symbol ("[참가자뷰] 라이브" reads 참라)
11클럽 → 내 클럽, a card with many memberslook at the member facesThe count chip reads +9 (with the plus), never a bare 9

List 27 — Club colour bands, friends going, rules-change notice (OTA 6631a5d0, 2026-09-24) ​

Three owner questions decided on evidence (decision log: OWNER QUESTIONS DECIDED): photo-less clubs show their own colour instead of a stock photo, sessions say when friends are going, and a rules change tells the players.

#RouteDoPass
1클럽 → 내 클럽 / 탐색scroll past clubs without their own photoEach shows a short band in its own colour (matching its emblem), not the same court photo
2Same list, a club WITH a photolookThe full-width photo is unchanged; while it loads, the club's colour shows, not a grey block
3A photo-less club you manage → detaillook at the topThe coloured band shows 사진 추가; tapping it opens the album
4Same screenlook at ‹ / 관리 / ⋯ at the topThey are dark and easy to read on the light band (white in dark mode)
5A photo-less club you don't manage → detaillookThe band only, no 사진 추가
6홈 or a club's list: a club session a friend has joined, you haven'tlook at the card's bottom-left chipReads 친구 참석 with the number of friends
7Same session → detail → 참석자look at the rowsFriends sit first with a 친구 badge; your own row still says 나
8A session you have joinedlook at the cardNo 친구 chip; your own status (참석 확정) shows
9A pickup you host → 경기 규칙open itYou can edit; the screen says players will be notified when players have joined
10Change a rule and save (as a joined player on a 2nd phone)check notificationsThe player gets an 일정 변경 notification

List 28 — Realistic club photos and logos (hosted data, no OTA, 2026-09-25) ​

The seed world's photos and logos are now real (decision log: REALISTIC-SEED-MEDIA): photos taken at tennis courts and clubs, and original club emblems. Nothing ships to the app; the hosted QA data changed, so the installed preview build shows it as is.

#RouteDoPass
1클럽 → 내 클럽scrollClubs with albums show real court and club photos, not flat drawn shapes; about half the clubs show a real emblem or photo logo
2클럽 → 탐색scrollA club named after a place wears that place (송파구 테니스 → 송파 / SONGPA); neighbouring clubs rarely share a logo
3강남 코트 클럽 → detailswipe the photo bannerEach page is a real photo; the dots, 앨범 N and ‹ / 관리 / ⋯ stay readable over busy photos
4Same → 앨범read the captionsEach caption describes its photo (단체사진 shows a group, 야간 shows a night court)
5탐색 → a club with a logo and no photosopen itThe colour band with the real logo in its circle; say whether the band colour clashes with the logo
6클럽카드 M1 → 소식 → 오늘 코트 사진 공유합니다open the postTwo real photos
7강남 코트 클럽 → 관리 → 클럽 설정look at 로고 and 배너Real logo and banner previews
8Dark mode → 클럽 listslook at logos on a white squareSay whether the white logo squares look wrong on the dark list
9클럽카드 M2 / M3 / D2lookStill no photo and no logo (flag mark and colour band), by design
10광진 갤러리 운영 테스트 → 관리 → 사진 승인lookThe pending photo is a real doubles shot; the rejected one is visibly blurred

List 29 — Every club wears a photo; tighter session cards (OTA d9673491, 2026-09-26) ​

A club without its own photo now shows one of 27 court scenes, and an admin can pick another (decision log: COVER-ALWAYS). Session cards pull their time and tier lines together (CARD-FACT-GROUP). A replaced logo shows at once, and uploaded logos get a thin edge in dark mode (FLAGGED ISSUES).

#RouteDoPass
1클럽 → 탐색scroll the whole listEvery card has a photo; clubs without their own show a court scene, and neighbouring cards rarely share one
2클럽카드 M2 / M3 / D2lookEach shows a court scene, no longer a colour band; the flag and people cluster still sit on the photo edge
3A club with no photos (e.g. 클럽카드 D2)open itThe banner is the same court scene as its card; ‹, 관리 and ⋯ stay readable over it
4Same, as its adminlook at the bannerA small 사진 추가 pill sits bottom-right on the photo and opens the album
5A club you are not in → 클럽 미리보기look at the topA photo, never an empty colour field
6Your club → 관리 → 클럽 설정 → 배너tap 기본 사진 선택A gallery of 27 court scenes opens with the current one ringed; picking one closes it and the preview, card and banner all change
7Same배너 변경 (upload), then remove itYour upload replaces the default and the 기본 사진 badge goes; removing it brings back the club's own default
8Same → 로고 변경upload a new logo, go back, reopen appThe new logo shows on the card and the club page at once, and still after a restart; the old one never flashes back
9Dark mode → 클럽 listslook at clubs with white logosA thin edge outlines each uploaded logo; nothing reads as a floating white square
10홈 / 경기 → any session cardlook at the two lines under the title⏰ time · 🎾 format and 🎯 level sit close together as one group, with more space above them from the title

List 30 — Bigger club photo, legible controls, two-line feed, one session fact list (OTA 80baf5ab, 2026-09-27) ​

The club photo is 2:1 of the screen (PHOTO-BAND-2:1). A soft dark edge keeps the controls over photos legible (PHOTO-SCRIM). Feed rows are two lines (FEED-TWO-LINES).

#RouteDoPass
1Any club → club pagelook at the top photoNoticeably taller (about half the screen's width), faces not cut off; the name and tabs still show below it
2A club whose photo is bright (sky, court)look at ‹, 관리, ⋯All three read clearly; a soft dark shade at the top edge, no circles behind the icons
3Samescroll up until the bar turns whiteThe shade disappears with the switch; no grey flash
4Same, album with 2+ photoslook at the bottom of the photoThe page dots and 앨범 N pill read clearly; swipe to the last page (앨범 전체 보기): no shade there
5A club you are not in → 클럽 미리보기look at the topSame photo height as the club page; the 1/N pill sits bottom-right, not under ⋯
6Club page → 홈 feedread a member postTwo lines above the text: the name, then time and board (e.g. 3시간 전 │ 자유); a bigger face
7Sameread a 사진 올림 / 경기 결과 rowSame two-line shape: the sentence, then time │ 자동
8A post with a link (e.g. an 오픈채팅 URL)tap the link, then tap the row textThe link opens the browser; tapping elsewhere opens the post
9A post linked to a sessionlook at the session chipDate and format on one line inside the chip
10A venue page (코트 상세)look at ‹ and the actions over the mapReadable over the light map
11Any session → session pageread the facts under the titleOne list: 일시, 종목, 경기 유형, 경기 방식 (with "ELO 반영/미반영"), 실력, 참가비, (취소 규정), 응답 기한, 날씨, 로테이션; no 정보 section further down
12Same, a session with 7+ attendeeslook at the 참석 header, then tap 외 N명"참석" on the left, "12/16명" on the right, no 전체 보기; the 외 N명 row shows three faces and opens the full list

List 31 — Compact session facts, big feed photos (OTA d30a5f27, 2026-09-27) ​

#RouteDoPass
1Any session → session pageread the facts under the titleAt most 7 rows: 일시 (with 응답 기한 under it when set), 종목 ("복식 │ 정기 │ 경쟁", with ELO and rotation under it), 실력, 참가비, and 취소 규정 / 날씨 only when they apply
2A session with no RSVP deadlinelook for 응답 기한No "없음" row anywhere
3A session with a cancel penaltyread 취소 규정"시작 N시간 전부터 늦은 취소" in the warning colour
4Club page → 홈 feedscrollA single photo spans the row, not a small thumbnail; two photos sit side by side; three or more show three squares with +N

When a list is done: move the page(s) to Done on the board. Claude reads the board, fixes ✗ items at the class level, and re-ships an OTA; the list is re-run only for the rows that changed.

List 32 — One session record: the wizard review and the page's edit state (OTA 31371ae5, 2026-09-27) ​

The standalone 일정 수정 page is gone; a session is now edited in place on its own page, and the create wizard's last step reads the same field list, in the same order, with the same words (decision log: "merge the edit pages").

#RouteDoPass
1Session page, as its host, open sessiontap 수정The fact block turns into a hint line + rows; 응답 기한/종목/한 경기 시간 and 취소 규정 show a lock with the reason; the footer CTA disappears
2Same, edit statetap 시간The time editor opens; 적용 closes it and the row shows the new time
3Same, a session with confirmed attendeeschange the date or time, then tap 완료 (header)A confirm names how many people will be told, before it saves; a toast confirms the save
4Same, edit state with an unsaved changetap backA confirm offers to discard; keeping editing leaves the row as changed
5Session page as a plain member (not host/총무)look at the headerNo 수정 text action
6일정 만들기 → last step (확인); club 만들기 → last step (확인)read the rows, tap oneSession review: one flat list, no card box; tapping a row returns to its step; 응답 기한/종목/한 경기 시간 and 최대 인원 carry their own note; club review is the same flat-list grammar

List 33 — Edit-mode navigation and unsaved-changes guards (OTA 3673febd, 2026-09-27) ​

The session page's edit state now offers 취소/완료 instead of a back chevron, and every full-screen editor (경기 규칙, 프로필 수정, 글쓰기) asks before an unsaved change is lost to a stray back or swipe.

#RouteDoPass
1Session page, as its host, open sessiontap 수정The bar shows 취소 (left, regular weight) and 완료 (right) — no back chevron; the page shows only the hero and the fact rows (alerts, notice, live bar, 참석, 경기, 호스트 도구, 위험 구역, and the bottom CTA are all gone); the map band no longer opens 테니스장
2Same, edit state, nothing changedtap 취소Leaves the edit state at once — no confirm
3Same, edit statechange a field, then tap 취소"수정을 그만둘까요?" confirm — 계속 작성 keeps editing, 그만두기 discards and leaves the mode
4Same, edit state with an unsaved changeswipe from the left edge (iOS); press the hardware back button (Android)iOS: the swipe does nothing (locked); Android: the same "수정을 그만둘까요?" confirm as 취소
5경기 규칙 screen (호스트 도구 → 경기 규칙)change a rule, then leave (back/swipe); repeat and tap 저장 insteadLeaving with a change asks "나갈까요?" — 삭제하고 나가기 leaves, 계속 작성 stays; 저장 returns without asking
6프로필 수정 (프로필 → 수정); 클럽 → 글쓰기type/change something, then leave; repeat and save/post insteadSame "나갈까요?" confirm on leaving with an unsaved change; a successful save/post returns without asking

List 34 — One hero band for maps; separated fact rows (OTA 1c8cc520, 2026-09-27) ​

Every map band (session, venue, directory venue) is now the same 2:1-of-width hero band a club's photo/album already uses (MAP-BAND-2:1) — no more separate, shorter fixed strip. A fact list whose rows carry a second line spaces every row further apart from its neighbours (FACT-ROW-RHYTHM); a list of plain one-line rows stays as compact as before.

#RouteDoPass
1Any session → session pagelook at the top mapAs tall as a club page's photo band (about half the screen's width), sharp — not stretched or blurry
2A venue page (코트 상세); a club's court page (경기 → 코트 → any venue)look at the top map on eachBoth the same height as the session page's map band
3Any session → session pageread the facts under the title (일시, 종목, 경기 방식, …)Rows with a second line (e.g. 경기 방식 with its ELO note) sit clearly apart from their neighbours — no lines between rows
4A venue page → 이용료; a session's 참가비 rowread those one-line rowsStill compact — no extra gap was added where every row is a single line

List 35 — Pencil + bottom edit sheets, bare edit page, map controls, one bottom CTA, dark badges (OTA a14ad2de, 2026-09-28) ​

Every editable row now trails a pencil instead of "수정" text, and tapping one rises a bottom edit sheet instead of a centered dialog (EDIT-PENCIL, EDIT-SHEET). The session page's edit state drops its map and hint line (EDIT-PAGE-BARE). The map band's own header controls read white over a dark top gradient, and the "장소 보기" pill is gone (MAP-BAR-INK, MAP-NO-CHIP). Detail pages keep exactly one bottom CTA — host tools and the destructive actions moved into the ⋯ menu (ONE-BOTTOM-CTA). Dark-mode badge fills lifted a tonal step so they read as chips again (BADGE-DARK-FILL).

#RouteDoPass
1Any session page, as its hostlook at the header, then tap the pencilThe header shows a pencil + ⋯ — no bookmark, no "수정" text; a plain member instead sees a bookmark + ⋯ (never both, never three glyphs)
2Same, edit state → tap any editable rowtap 장소, then 참가비/공지 (a text field)A sheet rises from the bottom with a full-width [취소 | 적용] pair, rounded top corners, no drag handle, no X; the 참가비/공지 sheet lifts further when the keyboard opens
3Same, edit statelook at the whole pageNo map, no hint line above the rows; the bar is titled "일정 수정" with 취소 (left) and 완료 (right) — a plain bar, not the collapsing one
4Any session → session pagelook at the map band's ‹ / bookmark-or-pencil / ⋯White glyphs read clearly over a dark top gradient on the map, matching a club photo's own header treatment
5Samelook for a "장소 보기" pill on the map, then tap the mapNo pill anywhere on the band; tapping it still opens the venue page
6Session page, as its hostscroll to the bottom, then open ⋯The bottom shows only the one primary CTA; ⋯ holds 참석자 관리 · 경기 규칙 · 호스트 관리 · 출석 확인, then red 경기 종료 · 일정 취소 · 일정 삭제, each still confirming
7대회 board (토너먼트), as its hostlook beside the header status text⋯ opens with one row, 대회 취소 (confirm-gated); the bottom keeps only 다음 라운드/라운드 만들기
8Dark mode → any session roster/club member listlook at 호스트 / 친구 / 게스트 badgesEach reads as a distinct filled chip against the row background — none blend into it

List 36 — Session facts lead with the decision (OTA afc1ff71, 2026-09-28) ​

The session page's fact block now shows in two layers: what a player needs to decide leads — 일시, 장소, 참가비, and any warning — and the game's own details (종목, 대상, a calm forecast) wait behind a tinted "자세히 보기" text link, closed on every visit (FACTS-LEAD-DETAIL).

#RouteDoPass
1Any session pageopen it fresh, without scrollingThe first screen shows 일시, 장소 and 참가비, then "자세히 보기", then the 참석 title and its first roster rows — all above the bottom CTA
2Sametap "자세히 보기", then tap "접기"종목 and 대상 (and a calm weather line, if there is one) join the SAME list right under the lead rows; 접기 removes them again
3A session with a late-cancel fee penalty, or one with a rainy forecastopen it fresh, without tapping 자세히 보기The warning (취소 규정 or 날씨) already shows in the lead rows, above the link — never hidden behind a tap
4Any session page, after tapping 자세히 보기 to open itleave the page, then come back"자세히 보기" shows again — the block is closed, not remembering the last visit's choice

List 37 — One chevron collapse pattern; the session hero zone (OTA cc805948, 2026-09-28) ​

Every collapse/expand control in the app is now the same chevron — never a text link (EXPAND-TOGGLE; DisclosureLink is deleted). The session page's alerts/notice/live bar and its fact block now read as one hero with the map and title, with no divider between them — the page's first divider sits above 참석 (HERO-ZONE).

#RouteDoPass
1Any session page (with a notice or an alert banner showing)open it fresh, without scrolling; look between the notice/alert and the facts, then down to right above 참석No divider line between the notice/alert and the fact block — they read as one block under the map and title; the FIRST divider on the page sits right above 참석
2Any session pagescroll to just under 참가비, tap the chevron there, then tap it againA lone chevron (no text) sits under the lead facts; tapping it slides 종목/대상 (and a calm weather line, if any) into place and the chevron turns up; tapping again closes them and turns it back down
3Club creation wizard → 4단계 인원, with a schedule settap the 모집 목표 result box's headline rowNo "왜 이 숫자죠?" text anywhere; the row itself is the tap target, its trailing chevron turns up, and the 게임 슬롯/필요 인원 arithmetic appears beneath it
4Club creation wizard → 5단계 회비, with a court fee enteredtap the 제안 월 회비 headline rowSame pattern — the row is the tap target, the chevron turns, the per-venue arithmetic and 월 예산 line appear beneath it
5Club creation wizard → 3단계 스타일 → 범위 설정, with a federation-credentialed tier in rangetap the chevron under the tier list; then turn on VoiceOver (iOS) or TalkBack (Android) and focus itThe chevron reveals the federation/league detail lines with no text link anywhere; the screen reader announces "자세히 보기, 버튼" collapsed / "접기, 버튼" expanded — never silent

List 38 — Every collapse is the chevron (OTA 6c0882e2, 2026-09-28) ​

The 2026-09-28 audit found fifteen more hand-rolled collapse/expand controls across the app — chevrons swapped by hand, rows with no expanded state for a screen reader, and four remaining text toggles (전체 보기/접기, 일정 더보기/접기, 설정 더보기/접기, 더보기/접기). All of them are now the one ExpandToggle/ExpandChevron pattern from List 37 — never a text link.

#RouteDoPass
1Club home → 일정 tab, a club with more scheduled sessions than fit on screenscroll to the bottom of the schedule rows, tap the chevron, then tap it againA lone chevron (no "일정 더보기"/"일정 접기" text) sits under the rows; tapping shows the rest and turns the chevron up; tapping again folds them back and turns it down
2Club home → 기록 tab, a club with more ranked members than the visible list; then open any member's stats cardtap the ranking footer chevron, tap it again; in the stats card, tap the 전적 (record) rowThe footer's old "전체 보기"/"접기" pill is now a lone chevron with the same open/close behavior; the stats card's 전적 row keeps its W-L-D value but now trails the shared chevron, and opens/closes the partner/opponent ledger below it
3Club home → 멤버 tab, or Club Members screen (/clubs/[clubId]/members), a club with 2+ regular memberstap the "멤버" section headerThe header (count on the right, chevron trailing) is the whole tap target; the chevron turns up and the member rows slide into view; tap again to collapse
4Club settings → 사진첩 (gallery), any uploaded photo rowtap the photo rowThe whole row (thumbnail + caption + status) is the tap target with a trailing chevron; tapping opens the caption/visibility editor beneath it; tapping again folds it away
5Create-club wizard → 지역 step (after picking a venue) and → 일정 step (any scheduled venue row)tap the picked venue's court-count row; then tap a schedule rowBoth show only a plain chevron (never a separate up/down icon swap) that turns up when its panel is open and down when closed
6Profile → 문의하기 (Contact & FAQ), and Profile → 공지사항 (Announcements)tap any FAQ question; then tap any announcement rowBoth rows are ExpandToggle headers with a trailing chevron; the FAQ answer and the announcement body slide in on open. The announcement row now shows a chevron it never had before
7Home tab → 할 일 (admin attention) band, an item type held by 2+ clubs (e.g. 미납 회비 across clubs)tap the grouped rowThe row's trailing chevron turns up and the per-club rows slide into place beneath it; tap again to collapse
8Records tab → any period → 기록 상세, a period with 6+ distinct opponents; and the scope chip above the statsscroll to 상대 전적, tap the chevron, tap it again; then tap the scope chipA lone chevron replaces the old "더 보기" row — tapping shows up to 10 opponents, tapping again folds back to 5; the scope chip's own trailing chevron turns up while its filter fields are open
9Sessions: create-tournament flow's 설정 section; a session's 정보가 달라요 (venue correction) 더 보기 panel; 경기 스코어카드 round headerstap the tournament 설정 summary row; tap the venue-correction 더 보기 row; tap a scorecard round headerAll three are a lone chevron (no "설정 더보기"/"더 보기"/"접기" text, no bordered box on the venue-correction one) that opens its panel/rows on tap and folds them back on a second tap
10Any venue search/pick screen with more results than fit (create-club 지역 step, or 경기 탭 → 테니스장 찾기 → search)scroll to the bottom of the results, tap the chevron, then tap it againA lone chevron replaces the old "테니스장 N곳 더보기" text button; tapping opens every loaded result, tapping again folds back to the short list
11Public pickup preview (a pickup's shared/discovery preview link), opened signed outopen the screen and look between the title and the fact list, without scrollingNo divider line between the map/title and the fact block — they read as one hero; the page's first divider sits below the facts, above the host card
12Any row above, with VoiceOver (iOS) or TalkBack (Android) onfocus the chevron row and activate itThe screen reader announces the row's action (its own label, or "자세히 보기"/"접기") plus its expanded/collapsed state — never a silent glyph

List 39 — Fee off once you're in; chevron spacing; names never cut (OTA 481f7306, 2026-09-28) ​

The 참가비 row now hides once the viewer's spot is settled (owner: "removing the 참가비 from sessions that you've already signed up for because you've already paid for it most likely"); the session fact block's lone chevron moved onto the list's own row rhythm (owner: "if we are rendering the chevron as a separate row, we should give it proper spacing up and below"); and a person's name now wraps to two lines everywhere instead of clipping (owner: "we shouldn't cut people's names. Other things should be cropped if we are crammed for space").

#RouteDoPass
1Session detail, a session you're confirmed and paid forread the fact blockNo 참가비 row — your spot is settled
2Session detail, a session you're waitlisted for, or one you're only browsing (no RSVP)read the fact block참가비 still shows — you may still be asked to pay
3Session detail, a session you're confirmed for but still oweread the top of the page and the fact blockThe payment banner states the owed amount; the 참가비 row itself is gone (the banner already states the price)
4Session detail, as the session's hostread the fact blockNo 참가비 row — the host runs it and pays nothing
5Session detail, any sessionscroll to the fact block's chevron and look at the space above and below itThe gap from the last fact's text to the chevron equals the gap between any two facts; the gap from the chevron to the divider below matches
6Club home → 일정 tab, a club with more scheduled sessions than fit on screenscroll to the schedule rows' chevronEvenly spaced above (matching row rhythm) and below (against the divider) — no lopsided gap
7Club home → 기록 tab (ranking)switch between 전체 and 조별전체 shows a 조 column per row; 조별 shows no 조 column at all (its section header already names the group) — no blank column either way
8Club home → 기록 tab (ranking), your own rowfind your row in either view"나" sits right beside your name, not in a separate trailing column
9Records → 리더보드, or a session's 순위/스코어카드 standings, with a long Korean namefind that row or the podiumThe full name wraps to a second line — never cut with "…"
10참가비 payment screen (session payments), club ranking, records, or match history, with a long namescan any rowNames wrap to two lines everywhere instead of clipping
11Any screen aboveswitch to a large system font sizeRows grow to fit two-line names and the chevron spacing without clipping or overlap

List 40 — Named chevrons; ranking second line; no press band (OTA e7e5c480, 2026-09-28) ​

A chevron that hides a different kind of content than what already shows now names it, quietly (owner: "look for best practices and reflect them. We are always going for something clean and uncluttered"); club/session ranking rows drop their 전적/변동 columns for one quiet second line under the name (owner: leaderboard density pass); and the pressed/hovered tint band on rows and cards is gone — press just settles and dims the thing itself (owner: "is there a way to indicate that something is being pondered for action without rendering the grey band over the component?").

#RouteDoPass
1Session detail, fact block closed (any session)read the chevron row at the bottom of the fact block, without tappingIt reads "종목 │ 대상 │ 날씨" in quiet grey, chevron trailing — not a bare glyph
2Session detail, same chevron rowtap itThe 종목/대상/날씨 rows appear above; the words on the chevron row drop and only the chevron remains, in the same place — tap again to fold back
3Sessions: create-tournament flow, 설정 section (a session with a generated group draw)look at the summary sentence above the chevron, then tap itThe sentence ("N개 조, 조당 M명…") is now the chevron row's own header — no separate summary line above a bare chevron; tapping opens the 조/진출/시드 knobs beneath it
4A venue's 정보가 달라요 (correction) flow, more than 3 editable fieldsread the folded-fields row, without tappingField names show up to 3 ("이름 │ 종류 │ 코트 구성"), then "외 N개" for the rest — never a bare chevron or "더 보기" text
5Club home → 기록 tab (ranking), 전체 viewread the header row, then any member rowHeader reads 조·#·선수·ELO — no 전적 or 변동 column; a row shows the record and delta ("N승 N패 ▲N") on a quiet line under the name, ELO alone on the right
6Club home → 기록 tab (ranking), a member with no rating change this weekfind their rowThe record line has no delta at all (no "+0") — it's dropped, not shown as zero
7Club home → 기록 tab (ranking)switch to 조별No 조 column on any row — the section header above already names the group
8A score-driven session's 스코어카드 → 순위 tabread any ladder rowThe ELO delta sits on a line under the player's name, not beside the points value
9Any browsing list (club list, session list, feed) or a list row (club home schedule, ranking, settings)press and hold a card, then a rowThe content itself dims and settles slightly on press — no grey/tinted band appears over the card or row
10Web build, any of the same cards/rowshover with a mouse, do not clickA gentle dim + pointer cursor — no band; move off and it returns to normal
11Web build, any of the same rowsTab to the row with the keyboard, don't press EnterA visible focus ring still outlines it — unaffected by the tint-band removal
12Any pressable card/row, with reduced motion on (OS accessibility setting)press and holdOnly the dim shows — no scale/settle motion, still no tinted band

List 41 — Section title to first item is 8pt on the club pages (OTA e924136a, 2026-09-28) ​

Owner: "there is a wider gap between the section and items on the club pages (my clubs and discovery) than in other pages". Measured on the web build from the title to the first card: 홈 8pt, 내 클럽 24pt, 탐색 20pt. After the fix all three measure 8pt.

#RouteDoPass
1클럽 tab, 내 클럽 (member of 2+ clubs)look at 가입한 클럽 and the first club cardThe card sits as close under its title as the 홈 tab's cards sit under theirs (8pt)
2클럽 tab, 탐색look at 추천 클럽 and the first club cardSame 8pt gap; no extra space under the title
3클럽 tab, 내 클럽, with a guest invite (게스트 section)scroll to the 게스트 sectionA clear 16pt break between the last member card and the 게스트 title; 8pt under the title
4Club → 순위 → 조별scan the A조 → B조 boundaryThe groups still sit apart as before; no gap opens between a group title and its first row
5내 클럽, pull to refresh (the list re-sorts)refresh twiceThe gap under 가입한 클럽 stays 8pt after the refresh (the stale-separator bug no longer returns)

Owner: "Yes to all, but dev doesn't need to be handled too carefully." This implements Stages 0–1 of the page-quality review (.audit/page-polish-20260929/claude-review.md). Needs migrations 00675–00677 on the hosted project.

#RouteDoPass
1설정 → 프라이버시change 지역 and then 성별 quickly, one after the other; leave and come backBoth changes stuck — the second didn't undo the first
2설정 → 프라이버시, airplane mode, cold opentry to tap a chipThe chips are inert until the profile loads online — nothing saves against defaults
3설정 → 알림 수신 toggleturn it off and onPush delivery follows the toggle; 설정 → 동의 관리 shows the 마케팅 알림 consent unchanged by it
4설정 → 동의 관리 → 마케팅 알림 (an account that had it granted)read its state; turn it on; leave and come backIt reads withdrawn after the 00676 cleanup; turning it on sticks (re-consent works — it used to silently stay withdrawn)
5동의 관리 → 마케팅 알림turn it off, then on, then offEach change sticks; no error toast
6Onboarding (fresh account), reach 완료, go back to 동의uncheck a required consent, then jump forward to 완료 and tap 시작하기You're sent back to the 동의 step; nothing is saved until it's checked again
7Onboarding, 완료 → back to 이름clear the name, jump to 완료, tap 시작하기Sent back to the 이름 step
8A club venue's detail pagetap 길찾기, then 지도길찾기 opens turn-by-turn directions; 지도 opens the place on the map (they used to be crossed)
9Venue directory detail of a venue open overnight (e.g. 22:00–02:00), after midnightread the hours line영업 중 — not 영업 종료
10Venue directory: a venue nobody has described as indoor or outdoorread the hero facts and its cardNo 야외/실내 fact at all — it used to say 야외 for every unknown venue
11A public pickup preview (not joined), below its minimumread the attendance line"N자리 남음" counts real open spots (max − confirmed); a separate line says how many more are needed to play
12Host a pickup at a venue found through searchcreate it, then open the sessionThe session's venue has the searched venue's map and address — not a bare name
13Web build, 홈 → 주 / 월 / 일 tabstap 주, then 월The underline indicator moves under the tapped tab each time (it used to stay on 일)
14Web build, any pagepinch or ctrl-+ to zoomThe page zooms (it was locked)
15Web build, venue finder (코트 찾기)open it without touching anything, then turn on 가까운 순Opening never prompts; turning on 가까운 순 asks the browser once, and allowing it sorts by distance (denying turns the chip back off)

List 43 — Install the 0.9.0 preview build (EAS build a55c851f, 2026-09-29) ​

Phase A of the dependency upgrade: Expo SDK 55 latest patches, React Native 0.83.10 and TypeScript 6. The app version is now 0.9.0, a new runtime: preview OTAs from here on reach only this build. List 42's checks carry over unchanged.

#RouteDoPass
1Install the APK from the build pageopen the app coldIt boots to 홈 without a crash; 설정 → 앱 버전 reads 0.9.0
2홈 → a session → back, 클럽 → a club → backmove through tabs and push/pop a few screensTransitions and the back gesture behave as before; no blank screens
3A long list (코트 찾기, 클럽 탐색)scroll hard up and downNo blank rows or cells (the FlashList recycling class)
4A wizard with a text field (일정 만들기)type, go back with unsaved editsThe keyboard behaves as before; the unsaved-changes prompt still appears
5설정 → 알림 수신toggle itPush registration still works (a test push arrives, or the setting saves without error)
6Any screen with a photo or mapopen itImages and static maps load

List 44 — Install the 0.10.0 build: Expo SDK 57, React Native 0.86 (EAS build 2a544fb5, 2026-09-29) ​

Phase B of the dependency upgrade. The app version is now 0.10.0, a new runtime: install it, and later preview OTAs reach only this build. It supersedes the 0.9.0 build (List 43's checks apply unchanged). Navigation now runs on Expo Router's own fork of React Navigation, so rows 2–4 matter most.

#RouteDoPass
1Install the APK from the build pageopen the app coldIt boots to 홈 without a crash; 설정 → 앱 버전 reads 0.10.0
2홈 → leave for another tab and come backwatch the listIt refreshes on return (screen focus still reaches the app); nothing polls while you're away
3프로필 수정, change a fieldpress Android back, then try the iOS back swipeAndroid back asks 계속 작성 / 삭제하고 나가기 (계속 작성 keeps the edit); the iOS swipe is locked while unsaved
4일정 만들기 wizard with typed inputpress backThe same question appears; nothing is lost silently
5홈 → 주 / 월 tabs; any collapsing headertap the tabs; scroll a detail pageThe indicator slides to the tapped tab; the header collapses smoothly
6A date/time field (일정 만들기 → 일시)open the pickerThe date/time picker opens and returns the chosen value
7경기 → 코트 찾기 and 클럽 탐색scroll hard up and downNo blank rows (the FlashList recycling class)

List 45 — Web frame pinned to the viewport; route params on both platforms (OTA 0f6c2142 on 0.10.0, 2026-09-29) ​

Review Stage 2 (F01, F12). Rows 1–4 are web (a phone browser or a narrow desktop window); rows 5–6 apply on the phone too.

#RouteDoPass
1Web: 프로필 or 경기 while loading, or any short pagelook at the bottom of the screenThe tab bar is at the bottom of the screen, not floating mid-page
2Web: 클럽 → 내 클럽 with several clubs (a long list)scroll downThe list scrolls under a fixed title and the tab bar stays pinned; the page itself doesn't move
3Web: a session detail with a bottom button (참석 / 초대)scroll the pageThe bottom button stays pinned at the bottom of the screen
4Web: 이용약관, then another pagescroll 이용약관 down, then open another page이용약관 scrolls normally; the next page opens at its top
5An invite-only club you're not in (클럽 탐색 → its page)tap its join buttonThe join screen names that club and warns if a code belongs to a different club (web too)
6Venue directory → a venue → 여기서 일정 만들기open the create-session wizard어디서 is pre-filled with that venue and region (web too)

List 46 — Page state, drafts, readable content (OTA 88456c6d on 0.10.0, 2026-09-29) ​

Review Stages 3–5 (F09, F10, F11, F14, F15, F16, F18, F20, C02, C04). Rows 1–15 are on the phone; row 16 is web.

#RouteDoPass
1클럽 → 내 클럽, with airplane mode onopen the tab coldAn offline or error message with retry, never "가입한 클럽이 없어요"
2기록pull to refreshThe spinner stays until the numbers update
3기록 → 전적 on the dev account (many sessions)open it and scrollIt loads (no "Failed to fetch"); month headers line up with the rows
4클럽 설정 → 계좌type a new account number, switch apps, come backWhat you typed is still there
5일정 만들기 → 규칙edit the rules, leave the wizard, resume the draftThe edited rules are kept
6코트 정보 제보 (a venue → 정보 수정)type something, press backA leave confirmation appears; nothing is lost silently
7코트 소유 신청 (a venue → 소유 신청)scroll the venue list, pick one, fill the formOne side margin (not double); the list scrolls smoothly; the submit button stays pinned at the bottom
8코트 소유 신청 내역 → a receiptscroll the receiptThe action buttons stay pinned at the bottom
9클럽 관리 → 신고 관리 with a long reportread the row, then tap 처리The reason shows up to 4 lines; the confirmation shows the whole report before the action
10설정 → 알림 설정read the quiet-hours and payment helpersEach helper reads whole, not cut at one line
11개인정보처리방침 / 이용약관scroll the tables and article titlesLong values and titles wrap; nothing is cut off
12A long Korean club or session name (iPhone)look at where the line breaksLines break between words, never inside one
13A club you're not in (클럽 탐색 → 미리보기)look at the pageCapacity reads as information, the member count appears once, no empty gallery section
14기록 → a ranking row → 멤버 통계 while loadingopen it on a slow networkUnknown values show "···", never 0% or 0/0
15A comment or join request containing a linktap the linkIt opens
16Web: a shared session link (/s/…)read the subtitleThe grey subtitle is clearly readable

List 47 — Install the 0.11.0 build: MMKV 4, security refresh (EAS build e4583905, 2026-09-30) ​

Phase C of the dependency upgrade. The app version is now 0.11.0, a new runtime: install it over 0.10.0 (don't uninstall first, so row 2 tests the stored data). Later preview OTAs reach only this build. Local storage moved to MMKV 4 (a new native module), so rows 2–4 matter most. List 46's checks apply unchanged.

Status (2026-10-06): still open. The owner's install smoke on this build is the one outstanding owner item; every later OTA list (48–52) assumes it.

#RouteDoPass
1Install the APK over the 0.10.0 appopen the app coldIt boots without a crash; 설정 → 앱 버전 reads 0.11.0
2The first launch after installinglook at the first screenYou're still signed in, and the last tab and settings you used are kept
3홈, then airplane mode, then close and reopen the appopen 홈 and 클럽The lists you saw before appear from storage, with the offline message
4일정 만들기 → fill two steps → close the app → reopenopen the wizard againIt offers to resume the draft
5설정 → 로그아웃, then sign in againopen 홈The previous account's data doesn't flash before the new session's
6경기 → 코트 찾기 and 클럽 탐색scroll hard up and downNo blank rows

List 48 — Tamagui 2 (OTA aca045c1 on 0.11.0, 2026-09-30) ​

The UI library moved to Tamagui 2 as an OTA — no new install: open the app twice to pick it up. Layout is meant to be unchanged; accessibility labels moved to the web vocabulary. Emulator-checked: 클럽, 기록 and 설정 render and nothing crashed.

#RouteDoPass
1Every tabtap through 홈 / 클럽 / 경기 / 기록 / 프로필Icons show; nothing is misaligned compared with yesterday
2Any card or rowpress and hold, then releaseThe press dims and settles as before
3홈 → 일 / 주 / 월; 클럽 → 내 클럽 / 탐색tap the tabsThe indicator slides to the tapped tab
4경기 → 코트 찾기look at a venue without a photoA map thumbnail or the pin placeholder shows, never an empty box
5A session detail, then 참석open it, then RSVPThe page and the bottom button look as before; the button responds
6Optional: TalkBack on (설정 → 접근성)swipe through a club card and the tab barEach card and tab reads its name and state (selected, expanded)

List 49 — Animation driver, heading levels, slider keys (OTA 5f531fd6 on 0.11.0, 2026-09-30) ​

No new install: open the app twice. Animations now run on Tamagui's Reanimated driver (the Moti driver is deprecated); presets are unchanged, so nothing should look different. Emulator-checked: 홈 → 주 moves the indicator and nothing crashed.

#RouteDoPass
1홈 → 일 / 주 / 월; 클럽 → 내 클럽 / 탐색tap the tabs quickly, back and forthThe indicator glides as before; no stutter or jump
2A toast (e.g. save a venue)trigger itIt slides in and out as before
3Any expandable section (전적, 필터)open and close itIt expands and collapses smoothly
4설정 → 접근성 → 동작 줄이기 onrepeat row 1The indicator snaps without animating
5Web: a range slider (일정 만들기 → 실력)click the handle, then press ← / →The value steps with the arrow keys
6경기 → 코트 찾기look at a card with a ratingThe rating and its review count stay on one line together

List 50 — Partner candidates and analytics facts (OTA 08fb8f05 on 0.11.0, 2026-09-30) ​

Your board answers Q2 and Q3. No new install: open the app twice.

#RouteDoPass
1클럽 → 멤버 → 복식 파트너 추천scroll the listEach candidate is one row: face, name, NTRP │ ELO, one reason, the 궁합 score on the right
2Same screentap a candidateThe four factor bars, the shared record and 프로필 보기 open under it; tap again to close
3Same screenopen two candidatesBoth stay open, so you can compare
4Same screen, an open candidatetap 프로필 보기Their profile opens
5클럽 관리 → 성장 분석 (when available)look at 탐색 and 주요 경로Each count is a row: label left, number right; 최근 N일 sits beside the 탐색 title

List 51 — Web app on a desktop window, phone unchanged (OTA ee2b6a90 on 0.11.0, 2026-09-30) ​

Your go on the web-app board (W1–W5) and Q1. The phone should look exactly as before except the titled post (row 1). Rows 2–3 are the phone regression; the rest is the web app in a desktop browser (yarn web, sign in with the dev account), no install.

Status (2026-10-06): the web rows (4–10) still apply unchanged — the Codex landing (List 52) touched the web app only at /status, the onboarding redirect and vitals.

#RouteDoPass
1Phone: 클럽 → a post that has a titleopen itThe title leads (club name above it, author and time as chips); the title is not repeated in the body
2Phone: 홈, 경기, 일정 상세, 설정open eachSame as before: bell on 홈, 번개 만들기 band on 경기, 참석 band pinned on the session, back on 설정
3Phone: 클럽 → 앨범open itStill three photos per row
4Web, window ≥ 1200: 홈lookLabeled sidebar left (번개 만들기, five tabs, 알림, 메시지, you → 설정); sessions in a 3-column grid
5Web, window ~ 700–1100narrow the windowThe sidebar becomes an icon rail; under 600 the bottom tab bar returns
6Web: an 일정 상세, window ≥ 840lookThe page sits in a centred column; 참가비, the 모집 bar and the 참석 button sit in a pane on the right
7Web: 메시지 → a threadclick another conversationThe list stays on the left; the right side swaps to that conversation
8Web: 설정 → 프로필 수정lookThe settings list stays on the left with 프로필 수정 highlighted
9Web: 번개 만들기click itThe wizard opens as a centred column; 다음 lines up with the fields
10Web: any pagepress Tab once"본문으로 건너뛰기" appears top-left; Enter jumps past the sidebar

List 52 — Codex landing: privacy, payments, messaging, clubs repairs (OTA 1719d507 on 0.11.0, 2026-10-06) ​

Migrations 00678–00690 are live on the hosted QA project (hosted DB at 00690) and the functions send-push, check-push-receipts, seed-scenario, fetch-holidays and export-user-data are deployed. No new install: open the app twice. Rows 1–7 are the phone; rows 8–10 are the web app in a desktop browser (yarn web, dev account). (2p) rows need a second account.

#RouteDoPass
1Phone: 클럽 설정 → 클럽 보관, then 내 클럽archive a club you own, then open its row in 내 클럽The archived row shows; its recovery view restores the club within 30 days and it returns to the active list
2Phone: 클럽 설정 → 소유권 이전open the recipient list with two members of one nameMembers with the same or no nickname stay distinguishable, so you can pick the right one
3Phone: 클럽 → a post with photosopen the post, then a photoPhotos load (they now come from signed links) and open full size
4Phone (2p): a 파트너 inviteenter a code that belongs to a different invite참여 is refused with a clear message and nothing is joined; the right code joins
5Phone: 일정 상세 → 입금 → 입금 확인 (as the session host)confirm a member's transferThe row turns paid for the host (without 총무 role); a second tap does nothing and shows no error
6Phone (2p): 메시지 → a group conversation → 나가기leave, then reopen the stale thread and leave againYou leave once; the repeat shows no error and no duplicate system message
7Phone (2p): another account replies to your messagebackground the app, wait for the push, then open itThe push arrives once; the app-icon badge counts it; opening the thread clears the badge
8Web: /statusopen it signed in and signed outIt renders the status page; signed in, your profile region loads without an error
9Web: a new account's first sign-infinish sign-inIt lands on onboarding, not 홈; finishing onboarding then lands on 홈
10Web: any page, devtools Network, filter vitalsnavigate between three pagesVitals posts return 2xx or 204; no repeated failures in the console

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