The forms pass — the forms board against the principles, decisions and the owner's feedback (2026-10-19)
Status: Reference · Date: 2026-10-19
The owner asked (2026-10-19): "take another pass at the proposed designs on forms, including my feedback, to ensure they are all in line with our design principles, decisions and best practices" (open issues, § 2). A read-only audit of flat-v2-forms.jsx at 4007f5209 (6,571 lines, 19 page sections, 285 frames; the board's footer still says 286). No forms-specific owner notes were found (none on the record page; the QA board's 79 items are September's and closed), so "the owner's feedback" is everything the owner has ruled: the reviews, the decisions of 2026-10-14 to 10-19, the shared-foundation rule and the accepted review 46 components. The lead's calls on the open points close the doc.
Key: LIB = docs/design/flat-v2-component-library-2026-10-09.md; CMP = docs/canon/components.md; WIZ = docs/canon/wizards.md; R46 = owner-review-46-rulings-2026-10-19.md; DL = decision-log-autonomous-2026-09-17.md; TERM = terminology-guide.md; KM = canon/korean-market.md; SA = research/shared-foundation-audit-2026-10-19.md. Bare numbers are board lines at 4007f5209. [M] a rule or decision settles it; [J] a design choice (decided by the lead below).
1. Contradicts a decision or the app's canon (first)
- C1, 알림 설정 (SG 5464-5598): 13 switch Cells (5464-5478) against the decided six families (일정, 경기, 회비·입금, 클럽, 사람, 시스템) and a per-club 전체 / 공지만 / 끔 level (R46; DL); quiet hours and the payment exemption stay. Caption 5502 ("모든 알림은 알림함에 표시돼요") is false for chat, which stays out of 알림.
- C2, 클럽 설정 › 출석 (5910-5918; SPEC_KS 6353): the old opt-in ("멤버 출석을 추적하고 …") against attendance recorded in every club and pickup, the setting deciding only enforcement.
- C3, 관리 sheet (AD 6399-6438): 도전 과제 instead of 클럽 대항전 (6421, 6495, 6503); the sheet drawn three ways (forms 6409-6427, list-a 3160-3182, hub 2684-2706) while its spec claims "one registry"; AD_TABS (6364) copies the hub's CLUB_TABS_KO (hub:1813).
- C4, 일정 만들기's review (CsRecord 651-663) is not the canonical session record (sessions.md:143, session-record.tsx:50-92, WIZ:20): missing 코트, 한 경기 시간 (fixed after create) and 취소 규정; 최소 인원 asked (1141-1143) but shown nowhere; 경기 유형 (655) not in the record; step 2 drops the app's court picker (CourtUsagePanel) though booked courts are decided (R46 M21).
- C5, 클럽 만들기's review (1788-1799) lists 10 of about 19 answers (create-club-step8.tsx:214-431: 코트 정보, 성격, 모집 목표, 회비, 소개, 공개, 게스트 참가비, 방문 횟수 제한, 사진 정책); the seeded 성격 is not shown on the quick path (WIZ:94); the 인원 row glues two facts with a comma (CMP:145).
- C6, 클럽 가입하기's identity (JcIdentity 2191-2211) hand-draws the club hero stacked, against review 43 (option B: logo beside the name; 강남구 | NTRP 3.0–4.0 | 멤버 42명) and the kit's FvkClubHero.
- C7, 회원 탈퇴 (DA): the Notice (4550-4554) and Dialog (4663) omit what a departure does (예정된 일정과 행사 참석은 취소돼요, DL:740) and the 24-hour refund (DL:742); "복구할 수 있어요" and "복구를 요청할 수 있어요" name one thing two ways; the Dialog body is two sentences (LIB:2632); no blocked state for a club's 대표.
- C8, 공개 범위's preview Sheet (5336-5369) omits 신뢰, decided: strangers see the tier only; a shared club, session or friend the tier and one fact.
- C9, 장소 정보 제안 › 문제 신고 (3134-3152): four reasons drawn, six in the app (report-editor.tsx:7-14); sentences as Choices (LIB:2080, 2336: sentences are check-row Cells), and six exceed five.
- C10, 행사 만들기 is missing (D2, owner review 44): the hub menu offers it (hub:2673).
- C11, 동의 관리 grants a consent on one tap without its text (CnPage 5676-5684), against KM:23; the revoke Dialog colours 철회 danger in an unequal pair, against LIB:2632 (a consent dialog gives two equal choices).
- C12, 클럽 설정 › 입금 계좌 (5882-5890, 6048-6064) glues bank and number into one value with 예금주 as line 2, against the one shared account row (the Cell's
copy); placeholders "숫자만 입력" and "예금주 이름" break LIB:2260.
2. Per page
- 일정 만들기 (CS 467-1498): every section of a step drawn at once (X1); the 참가비 Sheet pairs a Switch with 저장 (877-881, 1149; LIB:2092); the step title 추가 옵션 is not a sentence (1044; LIB:826) and step 5 bundles fee, deadline and repeat; hint 866 is advice and 879/1149 imperative (LIB:2354, 1191); a Task Cell used as a plain row (988; LIB:1866); three facts glued in a label (764-765) and the retired 모임 (752; TERM:167); SPEC_CS (1476) names the removed 일정 pane; four Edit Sheets hold two controls (X8); the leave guard says the draft is lost though drafts resume (944-953 against 1410-1420, WIZ:48-53).
- 클럽 만들기 (CC 1500-2180): the required 정기 일정이 있나요? fork preselected (1672) with no unset frame (WIZ:64, LIB:2426); a court row's ⋯ opens a two-row MenuSheet (2032-2050; LIB:591, 2663 against 2614, 2657); step 8 bundles 가입 방식 and 게스트 policy, whose fee and visit limit must hide at 허용 안 함 (CMP:89); 회비 주기 labels are monthly-only (1735-1739) while M17 moves to dues plans; a two-sentence Dialog (2112); the region reads 서울 강남구 while the picker lists 시/도 only and the courts are 송파구 (1633-1656).
- 클럽 가입하기 (JC 2182-2448): CTAs of 9 and 6 syllables (2317, 2306; LIB:718); an error line ending in a period (2278; LIB:2408).
- 글쓰기, 비밀번호 변경, 연결된 계정: conform, but for the guarded leaves with no frame (X10) and ac-busy leaving siblings live (4739; LIB:1526).
- 경기 규칙 (MR 2690-2965): phrase options (2760; LIB:2080); 차이로 승리 twice (2731, 2747) and a bare 분 legend (2757); mr-invalid marks no field and its copy is two sentences (2822-2827; LIB:2394-2400); four Switches on a Save-gated page (2737-2767); ten controls by default (X11).
- 장소 정보 제안 (VC 2967-3436): required sets preselected or without an unset frame (3048-3053, 3123-3142; LIB:2426, WIZ:41); question labels (3021, 3138; LIB:2246); an either/or evidence pair both marked (선택) while one is required (3008-3032); a two-sentence hint (3108); a wall title as an instruction and a fragment Notice (3147-3173); an 8-syllable CTA (3264-3276).
- 소유권 신청 (OC 3438-3649): a 장소 보기 Button on a row that only navigates (3500; IA8, R46 M28); a blocked Notice body repeating its title (3516-3517).
- 단톡방 만들기, 멤버 초대 (NG, AM): recipient-count helpers outside the helper warrant list (3797-3800, 3939; LIB:701-703); a caption restating title and button (3918).
- 프로필 수정 (EP 4004-4331): only 출생 연도 marked (선택) though 성별, 지역, 구력 are optional (LIB:2422); a numeric placeholder (4117); the avatar row drawn by hand (4040-4075); the region Sheet shows 9 of 17 시/도 (4011-4022); LIB:594 still describes a pencil the identity Block no longer has.
- 회원 탈퇴 (DA 4536-4698): the instruction drawn as raw text with an inline bold phrase (4556-4564).
- 설정 (ST 4859-5228): a literal "|" in a string (4879, 4921) instead of the meta break; stValueSheet (5068-5086) rebuilds FvkValueSheet by hand.
- 공개 범위 (PV 5230-5455): the level Sheet's title hardcoded to 지역 (5330).
- 동의 관리 (CN 5627-5798): 필수/선택 as Tags here but as a text prefix at sign-up (LIB:1520); a two-sentence Dialog (5761); an empty state that cannot occur (5649-5660).
- 클럽 설정 (KS 5800-6355, ks-ideal 2564 tall): the name Field draws a hint and a counter the wizard's same Field does not (6014-6029 against 1595-1599; LIB:2372); Steppers over 4–120 (6070, 1728; LIB:2276); 10 groups and about 38 Cells, with an 운영 group duplicating 관리's doors (5919-5923) and derived 모집 계획 numbers (5898-5909); the dues plan editable nowhere (WIZ:20, CMP:162); a two-sentence Dialog (6168); a Sheet
subused for an instruction (6129). - Checked and consistent: loading, error, offline and empty coverage on every page; soft-disabled against validate-on-press; header subtitles, danger helpers, leave guards, the D7 theme retirement, 합니다체 only in 탈퇴합니다, 회원 only in 회원 탈퇴, 입금/납부.
3. Cross-cutting
X1 the reveal contract (step frames draw every section; CMP:90, WIZ:34-45, LIB:448) · X2 required controls start unset (LIB:2426) · X3 hint and copy rules (LIB:2354, 2360, 2260, 2372, 2246) · X4 one-sentence Dialog bodies (LIB:2632) · X5 phrase options in Choice sets · X6 Sliders without the Stepper alternative LIB:2122 requires (WCAG 2.5.7) · X7 a Switch in a Save-gated form (LIB:2092) · X8 compound Edit Sheets against "one field per sheet" (LIB:2713) · X9 CTA labels over five syllables (LIB:718) · X10 specified guards with no frame (pw, oc, da, am) · X11 ten or more controls on one screen · X12 shared foundation: JcIdentity, NgList, the leave guard reused by four pages, the edit guard typed three times, the Toast pinned three ways, AD_TABS, stValueSheet, the account row, dead constants (CC_QUICK, CC_QUICK_NOREGION, CC_SOFT.fork), the cast and the region mismatch.
The lead's calls (2026-10-19)
Settled by the library, the canon or the owner's decisions; logged in the decision log for veto, and drawn for the owner's check.
- Reveal states are drawn (WIZ, the owner's 2026-08-08 law): an unset step shows only its first section; each multi-section step gets its reveal pair, plus one all-answered frame.
- No Switch in a Save-gated form (LIB:2092): 참가비 becomes a 무료 | 유료 Choice with the amount nested under 유료; 경기 규칙's toggles become check rows.
- Edit Sheets edit one answer, which may have parts that belong together (a date and its times, a range, an account) — a library clause that names the existing practice.
- A row ⋯ needs three or more commands: with one or two, they sit on the row. The court row gets a radio ring for 홈 코트 and a remove control.
- 관리 sheet: one kit registry for all three boards with today's groups and 클럽 대항전; the 운영 / 설정 split comes with the navigation drawing (M28).
- 클럽 설정 is trimmed by the M28 rules (rare work lives in 설정): the 운영 group goes (those are 관리's doors), the derived 모집 계획 numbers move to 성장 분석, and the dues plan is edited with the money pages (M17's 회비 설정), with a door from 클럽 설정. Drawn for the owner's check.
- 입금 계좌 is the shared account rows (은행, 계좌번호 with copy, 예금주) under a head-level 수정 that opens an edit page with a bank Picker Cell (a Sheet over a Sheet is not allowed).
- 알림 설정 is the one place for every push: the six families (one line each), 메시지 (push only; chat stays out of the inbox), quiet hours with the payment exemption, and 클럽별 levels; 설정 keeps one door to it.
- 회원 탈퇴 says what leaving does ("예정된 일정과 행사 참석은 취소돼요"; a paid fee comes back for a departure 24 hours or more before the start) and gets a blocked state for a club's 대표 (hand over first).
- 동의 관리 grants from the consent's text (a 보기 door), and the revoke Dialog gives two equal choices; the legal text stays verbatim until counsel (EXT-2).
- 행사 만들기 is drawn from the data: 제목, 일시, 장소 (free text), 정원 (optional), 소개; members only.
- An either/or group says so on its head ("둘 중 하나는 필요해요"), and its fields drop (선택).
- Every Slider gets its Stepper (LIB:2122, WCAG 2.5.7).
- CTA labels aim at two to five syllables, up to seven when a verb needs its object; 로그인하고 가입하기 and 검토 요청 보내기 get shorter.
- 신뢰 on the preview: a fixed row, "신뢰 등급", visible to everyone, with the one fact that a shared club, session or friend also sees.
- A fee needs an account (payments.md:21-23): creating a paid session with no account on file shows a gate with a door to add one.
The order
Batch B (the 회비 Block, the 클럽 대항전 rename, the Strip sweep, the copy icon) lands first; then the kit and library pre-work for the forms (FvkDialog equal, FvkSlider stepper, the 관리 registry, the families table, the clauses above); then the forms in four batches, one writer at a time: the twelve conflicts and record parity; the mechanical sweep; the patterns; the reveal states. The shared-foundation lane for this board (B5) follows the owner's marks on it.