Owner review 1 — rulings (2026-10-11)
Status: Active · Date: 2026-10-11 · Answers the owner's 23 review points on the flat v2 library boards, plus the audit of the sections they did not comment on. Evidence is in the three research lanes: lane A (layout, type, blocks, English, motion), lane B (notices, fields, validation, wizard, CTA helper), lane C (header, overlays, media band, messaging, live score, session rows, horizontal lists). The owner asked for research and best judgment; each ruling is logged for veto in the decision log. These rulings feed the consolidated library and the board rebuild.
The answers at a glance
| # | Owner question | Answer | Ruling |
|---|---|---|---|
| 1 | A dot in front loses the front gap | Agreed. Nothing may enter the side margin. | A leading dot takes a slot inside the rail, 8 + 8, on every row of a list that can show it; content starts at 36. The day header's "today" dot is dropped (오늘 already says it). |
| 2 | Why the extra padding above headers | It is the section divider: the space above a heading is about twice the space below, so the title belongs to its own rows. Peers measure 33.8 above, 16.8 below. | Keep 32 above; the space below grows 8 → 12. Day header: 24 above, 12 below. Section titles move up to 20/28·700. |
| 3 | Type scale and accessibility | Mostly in line; three gaps. | New 16/24 reading size for comments, posts, dialog and notice bodies, toasts, terms and input text. Tab labels 11 → 12. Nothing in Hangul below 12. Wrapping small text gets 1.5 line height. Labels scale to 200%. |
| 4 | Is 20 the standard margin | There is no single standard. Apple's own margin is 16 up to 375-pt phones and 20 from 390 pt (measured 20.00 in Apple's apps). Material and 당근 use 16, Toss and the banks 24. | Keep 20 on 390–440-pt phones; 16 below 390; 24 from 600 (tablet and web). |
| 5 | Block grammar | One grammar: label on top, the figure in the middle, the qualifier below, left-aligned. | The whole block is the button with one chevron; no buttons inside; one state table (loading, empty, error, offline, long text, 200%). |
| 6 | Strip: equal division, alignment | Your eye was right: the columns were equal but the text starts were not (133 then 116 apart). | Equal pitch, left-aligned, label above the figure, no divider lines; 2–4 columns; reflows to two-up when a figure does not fit. |
| 7 | Notice: a better way than the icon | Peers lead with the message, not a generic icon. | The title states the state (마감이 가까워요). No ⓘ. A severity mark only on warning and danger, a specific glyph only when it adds meaning (wifi-off, lock). Five tiers; the loud amber and red slabs only when the main action is blocked. |
| 8 | Media row: court as the main information | Agreed (11 of 13 peers lead with title or place). | Venue on line 1, time on line 2 in ink. In discovery, format and level go on line 3. Exception: when every row is at the same court, the court moves into the list head and the time leads. |
| 9 | Input best practice | Label on top, a 3:1 border, no helper by default. | One field grammar for every field type (below). |
| 10 | Wizard: two control areas | Back at the top and the main button at the bottom is the funnel convention (GOV.UK, KRDS, Toss TDS, HIG). The fault was spacing. | Keep the split. The progress bar moves to its own row, 16 clear of the buttons, with a "3/6" count. |
| 11 | Helper texts: when | Rarely. | None by default. Only for a rule people cannot guess, a one-line consequence, a scale, or a live value. Below the control; an error replaces it. |
| 12 | Notice under a field, icon | A field note answers "what will this do". | One line goes in the field's support line; more becomes a neutral notice with no default icon. Never hide essential information behind an ⓘ. |
| 13 | Validation best practice | Reward early, punish late. | Check on leaving a field; re-check live once wrong; on submit focus the first error. Error = 2px red border + 16 glyph + 600 message in $errorText. |
| 14 | Header text actions: icons only? | Agreed, with one exception for mode controls. | Ten universal header icons only. Text appears only to leave or commit a mode (취소, 완료, 저장, 건너뛰기, 전체 선택), drawn as small buttons. 관리 becomes a gear with a badge plus labelled entries in the page. |
| 15 | When is an action sheet used | One rule by what the person is doing. | Confirm → Dialog. Command for an object → bottom MenuSheet (renamed from ActionSheet). Pick a value or enter data → Sheet. Read at length → page. |
| 16 | CTA helper best practice | Decision facts above the button. | Only for money, terms that change the decision, what is missing, or a failure. One line, two at most. The disabled main button becomes soft-disabled: grey, pressable, and the press shows what is missing. |
| 17 | Media band icons | Back plus at most two icons. | ‹ at the left; share first, then save or ⋯. No text, pills or place actions on the photo; venue actions (길찾기, 공유, 전화) become a labelled row under the title. |
| 18 | Message bubble spacing | Measured against KakaoTalk, iMessage, Signal. | Within a run 2 (was 4); system lines 20 around; 12 from the last bubble to the composer; no home inset while the keyboard is up. |
| 19 | Live score controls unclear | Agreed. | A full-screen recorder from the score block: each team's panel (at least 160 tall) is the button, named with the players' names; a labelled 되돌리기 that says what it reverts; screen kept awake. It counts games (our data model and Korean club scoring), with tiebreak points at 6-6. |
| 20 | Warnings compact and actionable | Agreed. | State or consequence first, then one verb. A toast only for results and undo; failures go next to the button or in a notice that stays. |
| 21 | English version cluttered | English runs about 1.33 times the Korean width. | Line budgets by role, short date and count formats (Sat, Sep 19 · 4 courts), only the least important segment truncates, shorter English tag labels. |
| 22 | Motion and accessibility | The tokens match Material 3 and Seed; gaps found. | Reduce Motion becomes a short fade, not a cut. Added: drag alternatives (WCAG 2.5.7), the iOS label checklist, larger targets. |
| 23 | Horizontal participant list | Your goal (a clean page) is right; the evidence says not for the roster. None of eight peers scrolls people sideways, and people miss items past the edge. | The roster shrinks to one row of four faces with the count in its head and the full list one tap away (saves 116 pt). Sideways shelves are used for photos, upcoming sessions and recommendations. |
Where the answer differs from the suggestion
- Wizard (10). Kept split. Unifying at the top hides 다음 from the keyboard; unifying at the bottom fights Android's edge-back and was the design you found "out of proportion" three times. Only the spacing changes.
- Participant list (23). One row of four instead of a horizontal scroll. The sports apps closest to ours (플랩풋볼, Spond, TeamSnap, Playtomic) all show rosters without sideways scrolling, and the roster is what the join button acts on.
- Margin (4). 20 stays. It is Apple's own margin on current iPhones; 16 and 24 are the other two families. Changing it would cost a full board rebuild for no evidence-based gain.
- Live score (19). Games rather than points, because the data model and club scoring work in games.
- The edit sheet. My earlier "no ×, 취소 + 저장 pair" goes: KRDS, 당근 Seed and Apple all put a close in the title row. Edit sheets get × in the title and one 저장 at the bottom, matching your one-button footer law.
Decisions taken with the rulings (lane A D1–D7, lane C)
| # | Decision | Ruling |
|---|---|---|
| D1 | Margin | 20 (16 below 390, 24 from 600) |
| D2 | English clock | 24-hour, the same formatter as Korean |
| D3 | English money and minutes | ₩ in tabular figures; relative time Nmin |
| D4 | Shorter English Tag copy | adopt the six shortened labels |
| D5 | Landscape | decided with the first iOS build (phones portrait until then; WCAG 1.3.4 departure recorded) |
| D6 | Press springs | adopt ζ 0.9; skip the distance helper |
| D7 | Section title size | 20/28·700 |
| C-1 | Header registry | ‹ × 검색 공유 저장 알림 메시지 설정 추가 ⋯; at most two trailing; ⋯ only with three or more rows |
| C-2 | 관리 entry | gear + badge, pane tool Cells, 할 일, a one-time coachmark; five-official test; fallback a small tonal 관리 button |
| C-3 | 초대 코드 | the 클럽 tab's + opens 클럽 만들기 · 초대 코드로 가입 · 클럽 찾기 |
| C-4 | Long documents | 약관 and policies open as pages, not sheets |
The field grammar (points 9, 11–13)
Every field is label · control · support line.
| Part | Rule |
|---|---|
| Label | 13/18·600 ink, above the control. Required: the one asterisk (owner LAW), hidden from screen readers, with "필수" in the accessible name and a legend once per form. Optional fields say "(선택)" after the label. |
| Control | 48 tall, r12, 1px $borderControl #8E8E93 (3.26:1, WCAG 1.4.11). Input text 16/24. Placeholder is an example value in tertiary, never a label, never "(선택)". |
| Support line | 18 tall, 4 under the control: the hint or the error on the left, the counter on the right. |
| Hint | none by default; only the four warranted cases |
| Counter | from 80% of the limit (always on text areas); typing past the limit is allowed and shown as an error, never blocked |
| Error | 2px danger border, a 16 alert glyph and the message 13/18·600 in $errorText #A3261F; replaces the hint; restates the rule |
| Timing | validate on leaving the field after an edit; once wrong, re-validate on each change until fixed; on submit, focus and announce the first invalid field; an error summary only with three or more errors |
Audit fixes adopted (sections not commented on)
- Contrast: input border, switch off track, slider thumb and the segmented control's selected state reach 3:1 (WCAG 1.4.11).
$errorText #A3261Ffor red text at 14px and below;#B8332Estays for fills and large text.- Targets: icon buttons 48 (was 44); FAB 56; Switch 52 × 32 (Material 3).
- Toasts: no glyph; results 4 s, with 되돌리기 8 s; never for errors (they vanish).
- Skeletons appear after 300 ms; nothing under 1 s; a determinate indicator past 10 s.
- Button loading keeps a label ("저장 중…") beside the spinner.
- Dialog buttons name their action (계속 작성 · 나가기); never a bare 취소 that could mean the user's task.
- CTA band: the red helper line is allowed for an action failure (the board's "never red text" note goes).
- Section action and CTA helper text 15/22; roster names 15/22; the album overlay is a counter without dots.
- Kakao button radius 12, the Kakao Login guide's literal value ("radius는 12 픽셀"), which also equals our lg Button radius and removes the special case. (Kakao Sync's guide converts the same 12 px to 6 dp; either reading is within Kakao's rules, and 12 is the simpler one.)
- Reactions sheet shows the message it reacts to; the heatmap gets a text equivalent and a legend; ScoreEntry gets an advisory line and no auto-advance into the tiebreak field.
What happens next
- The library is consolidated into one clean specification with these rulings applied: each component once, current values only, history in the decision log.
- Every board is rebuilt to the library and to the review format (contract §8): frames with one-line captions, specs behind the closed "Show specs" toggle. The library boards are reorganized so each component lives on one board.
- The flows board is re-counted, and the gate runs before anything is pushed.
Status (2026-10-11): all three done. The library is one edition (v2.1, eleven families). Every flat v2 board composes from the shared kit in the review format: foundations 21; library chrome 111, surfaces 120, rows 141, controls 174, overlays 96, conversation and scoring 78, behaviour 132; brand 32; pages hub 83, list A 173, list B 120, detail 267, forms 278, sign-in 61; flows 63 phones with every tap marked. scripts/verify-flat-v2-boards.mjs passes all of them with zero failures, and the recount is in the IA doc §3.