Skip to content

Owner review 3 — rulings (2026-10-11) ​

Status: Active · Date: 2026-10-11 · Answers the owner's review-3 points on the flat v2 library: the block chevron, custom implementations, the scoring board and its flow logic, the match row, nine library points, the best-practice audit, the avatar default and the sign-up route. Evidence: lane A (inline adornments, tab bar, wizard shell, sign-up, the audit of foundations, behaviour, chrome and overlays), lane B (lone elements, strip, caption row, form strip, PersonRow line 2, AnswerPair, the audit of surfaces, rows and labels), lane C (scoring components, the state machine, team lines, the audit of controls and conversation) and the faces inventory. Each decision is logged for veto in the decision log. Companions: review-2 rulings, library.

The answers at a glance ​

#Your pointAnswerWhat changed
1Block chevrons: unify them in the middle, no custom implementationsAgreed.Every block draws one chevron from the shared block frame, centred on its height in a 24 lane; the identity block's own chevron is deleted.
2Minimise custom implementations across all building blocksFound 52 places where a component redid what a shared piece owns.One line slot, one helper line, one text action, one badge host, one equal-cell grid, one Cell shell (with check and radio leads), one trailing builder, one team-lines piece, one match row, one field box, one press table and one focus ring. The separate PickerCell and CheckRow became Cell variants.
3Scoring board: aligned, spaced and styled canonicallyNo: 20 deviations, 8 major.Answer buttons 44 tall touching the text → 36 tall with 12 above and below; buttons inside a row's press area → their own stop, centred; decision sheets got radio rings; sheet title rows 48; the dispute sheet shows the claim; every score sits on its own team's line.
4Scoring flow logic: a lot of back and forthThe flow is now a complete state machine.10 states (two new: countered, contested) and a revision overlay, 29 transitions, 13 races (both teams submitting at once, an edit while the other team confirms, a partner trying to confirm …), who may do what, 18 pushes, every timer. The boards draw every state; Flow 7 gained four paths. Details below.
5Match row: 대 is wrong; teams and teammates must not be confusableAgreed: no peer writes a word between teams.One team per line, teammates on one line with the 1px break, your team first with "(나)", the scores on each team's own line, the winner emphasised only once a result is accepted. The same team lines draw the block, the sheets, the score entry table, the request row and the result row.
L1Count tags beside labels are off-centre: a foundational fixRoot cause: a phantom line box plus hand-set offsets that are right at one text size only. All 52 tab counts were 2 px low.One primitive, the line slot: an adornment beside text sits in a box as tall as the label's first line, centred in it. A rule (six clauses) and a verifier check that fails anything more than 0.5 px off. Measured 0.00 at 100, 130 and 200%.
L2Tab bar: too tight above dots and countsOur badge geometry is Material's; the bar had no headroom (2.5 above the badge).Tab bar 64 + inset (was 56), icon 12 from the top: 8.5 above the badge. A badge on at most two tabs; a count only where the number is actionable.
L3Wizard shell: more padding below the controls than aboveBoth ends were unbalanced: header buttons 8 above and 16 below; the footer button 16 above and 50 above the screen edge.Header 12 and 12. Footer: the bottom padding is the safe area itself, at least 16 (Toss's rule), so every bottom bar is 16 shorter (118 → 102).
L4A small element taking a whole rowSix of seven peers never give a status its own row.The law: a Tag, count or level numeral never owns a row. The match block's Tag sits at the end of its top line (and only when that line is not your next action): 144 in every state. Also fixed: the identity Level tag, the create-session provenance row (23 frames), 85 lone filter rows (the filter now sits in its section head) and choice sets that left one chip alone (the rows rebalance: 4 + 1 becomes 3 + 2). The manner tags, sentences that fit two to a row, became a checklist.
L5Strip: equal cells including the spaces; dividers?Followed your direction; the numbers favour it.n equal cells, label over figure centred in each, like the action face. No dividers: equal cells and at least 16 between neighbours group them, and a line adds nothing. This is the final law: the layout depends only on the number of cells and the text size.
L6Caption row: natural wording, style, alignment, spacingOne box was doing three jobs, 18 under a section title.Three roles: under an object (8 above), a section note inside the section head (4 under the title), a page line (12 under the header). 13/20 secondary, two lines at most, at the margin. Seven wording rules and 32 rewrites (marked for your copy review).
L7Form strip: the summary at the endYes."3승 2패" sits at the right margin; it never wraps, even at 200%.
L8PersonRow: configure what line 2 carries per context82% of rows carried a line 2, with constants and three-fact rows.One table of 21 contexts (members, participants, waitlist, applicants, dues, ranking, friends, threads, results, notifications, attendance …): at most two facts, never a repeat, a constant moves to the head. A row with no fact is 64. Ranking keeps your ruling of 2026-09-28: the record and the 7-day change.
L9AnswerPair and request rows: spacing above and belowYou were right: 0 above, 44-tall buttons.12 above, 36-tall buttons (44 to touch), 12 below. Facebook and LinkedIn give 12 to 16.
ALibrary and foundations in line with best practice131 entries audited against Material 3, Apple HIG, Toss TDS, 당근 Seed, KRDS and WCAG 2.2.Majors are the points above. Minors fixed: one red and one teal fill that pass the 6.5:1 floor; the dark toast surface flips light (it was 1.1:1 from its ground); Dialog 560 and Sheet 640 caps; Sign in with Apple; radio affordance; reaction chips 32; dark chat bubbles told apart (1.1:1 → 1.4:1); the date picker spec; predictive back.
FAvatar default: non-members see no facesDone and live.A face reaches someone only through one check: yourself, a shared club, an accepted friend, or the person's own explicit "public" choice; never a logged-out viewer. The raw column is closed, the photo storage can no longer be listed, and the privacy setting reads "클럽 멤버와 친구" by default. Tested with 94 database checks.

The score flow, as one machine ​

StateWho acts nextWay out
점수 입력 전any player (the host can enter for them)a player sends a claim (확인 요청) → 확인 대기; the host's own entry is final at once (호스트 확정)
확인 대기one player of the other team동의 → 확정 · 거절 with a score → countered · 거절 without one → 분쟁 · 24 h with no answer → the host's task
countered (new; Tag 분쟁)the person who sent the claimtakes an opponent's score → 확정; takes the partner's → a new claim · declines, or 24 h pass → 분쟁 (the host)
분쟁a host or official who does not play that matcheither version, another score, or 기록 제외 · 7 days unresolved → 기록 제외
호스트 확정any player, once, within 48 h이의 있어요 → contested
contested (new)another official, or the host if there is nonekeep, change or exclude · 7 days → the result stands
확정any player, within 7 daysa correction request, answered like a claim

Silence never confirms. Ratings move only on an accepted result, after the 8-second undo. The partner never confirms for the other team. Every write carries the version it saw, so the first commit wins and a late one is told what changed.

Sign-up route: your question ​

You asked what the open questions are; you are thinking Kakao, Naver, Google and email. My recommendation:

  1. Kakao and Naver on every platform. Sign in with Apple on iOS (required, not optional: App Store rule 4.8 demands it the moment any social login ships). Google on Android and the web. All four buttons are the same size; each keeps its brand colours.
  2. Email is for signing in only (accounts you create, the App Store review account, someone with neither Kakao nor Naver), not a self-serve sign-up: a self-serve email account would be an unverified person, which your verified-identity directive rules out.
  3. 본인인증 just in time, once: before the first action that depends on trust (joining a club, hosting, paying, entering a score). Sign-up itself stays two taps. Naver's own guide warns that asking for phone verification at sign-up loses people.
  4. Same person, several logins: linked through the verified identity, and listed in 설정 › 계정.
  5. What to start now (outside the app): Kakao Biz App conversion (business registration number), the Naver login review (until it passes only test accounts can log in), an Apple developer account with the Sign in with Apple key, a Google OAuth client. Naver has no built-in Supabase provider: a one-day spike first.

The sign-in board draws this route (iOS: Kakao, Naver, Apple; Android: Kakao, Naver, Google) so you can judge it on the screen.

Where my answer differs ​

  • Wizard header 12 and 12, not "16 clear". Your review-1 ruling put the progress bar 16 below the buttons; with 8 above, that was the imbalance you saw. 16 and 16 is possible and costs 8 more of the screen.
  • The footer button sits on the safe area, not 16 above it. Toss does this; Material and Seed measure from the safe area. Your complaint about the bottom-heavy footer decided it.
  • Answer buttons stay 36 tall, not 44. The 44-tall slabs were the bulk you saw; the touch target is still 44.
  • Manner tags are a checklist, one co-player at a time, not a chip set per player in one sheet. The five tags are sentences that fit two to a row, so one chip always stood alone; 당근's 칭찬 list has the same shape. The tags themselves are unchanged.
  • Skeletons still appear after 300 ms, where 당근 Seed waits 1 s; the 500 ms hold keeps them from flickering.
  • Scoring decisions taken for you (all in the decision log): the host hears of a counter only if it is declined or ignored for 24 h; a partner's counter is a new claim; contests go to another official; winners are emphasised only once accepted; quick picks come in two rows by who won, so a loss costs the same 3 taps as a win.

Found along the way ​

  • The board verifier could not see spacing or vertical alignment. It now checks inline adornments, the tab bar's headroom, the bottom bar, lone elements on their own row, the answer pair, caption spacing, strip cells, the word between teams, partner commas and radio rings, each with a known-bad canary so it cannot pass blind.
  • Faces were wider open than the one discovery stack you asked about: any signed-in user could read every photo address, and list the whole photo storage. Both are closed.
  • Naver's green with white text is 3.1:1; the brand guide fixes both colours, so it is a brand exception like Kakao's yellow.

Open for you ​

  1. The sign-up decisions above (providers, Apple, email's role, when 본인인증 happens).
  2. Pickup players' faces: a pickup game is not a membership, so today players who share no club and are not friends see initials. Say if people confirmed in the same session should see each other's faces.
  3. A match stopped by rain or injury: today only 기록 제외. Should a retirement or walkover count (recorded with the winner, unrated)?
  4. The 32 caption rewrites need your native read.
  5. Then the library again, as you planned.

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