Skip to content

[design-qa][P2] Outcome discs, act headers, block labels and stat bands are drawn N ways across sections #175

Description

@cestercian

Part of the Sep-2026 designer's-eye QA of the 138 "Artistant iOS Light" screens (theme T12c, category consistency; epic #161). Full report with evidence and per-screen coverage: docs/DESIGN_QA_2026-09.md; the per-section appendices under docs/design-qa/ carry the code excerpts.

Why it matters. The confirm/confirmed/match-confirmed trio disagree about their own act header and actions; the wizard's Done disc is 64 where the funnel's is 74; "this is a group label" has four treatments in the press kit alone; the two three-up stat bands are two components in two type families; the two full-screen gates share no header or glyph.

Fix direction. One OutcomeHeader, one ActHeader, one GroupLabel, one StatBand, one gate layout.

Findings (10: P2 ×8, P3 ×2)

  • F-BC-07 (P2) — The act header is drawn three ways on 06 / 07 / 94, and 07's never gets a cover
    • Screens: 06, 07, 94
    • Where: feature/booking/CheckoutScreen.kt:145-150 (ActRow, 62dp actThumb, cover); ConfirmedScreen.kt:170-178 (ActRow, 64dp avatarLg, no coverUrl); MatchConfirmedScreen.kt:182, :266-290 (48dp initials disc); BookingChrome.kt:498
    • Fix: Keep the artist in ConfirmedUiState, pass coverUrl and the default actThumb on 07, and replace 94's Monogram with the same ActRow.
  • F-BC-08 (P2) — The three outcome screens disagree about their own actions
    • Screens: 07, 94, 17
    • Where: feature/booking/ConfirmedScreen.kt:212, :216-221, :227-236; MatchConfirmedScreen.kt:238, :242-251; RequestQuoteScreen.kt:400
    • Fix: One dock recipe for 07/94/17 — PrimaryButton + SecondaryButton — with "View booking" on both, "Back to discover" as the secondary everywhere (17 included, instead of "Done"), and "See the record" moved into the card as a row with a chevron.
  • F-WZ-04 (P2) — Four different components label a block across eleven steps
    • Screens: 37, 24, 39, 40, 41, 43, 44
    • Where: WizardFormSteps.kt:250 (SectionHeader), :447,479,579,755 and WizardMediaSteps.kt:99,516 (WizardFieldLabel), WizardFormSteps.kt:668 and WizardMediaSteps.kt:581 (EyebrowLabel), WizardFormSteps.kt:75-99 (AppTextField's own label)
    • Fix: pick one block-label convention (WizardFieldLabel for questions, EyebrowLabel only for labelled regions per its own docstring) and drop SectionHeader here; give the package fields label = "Package", "Length", "Your fee".
  • F-WZ-16 (P3) — The Done disc is 64dp where the app's outcome disc token is 74dp
    • Screens: 46
    • Where: WizardPublishSteps.kt:293-303; peers feature/booking/BookingChrome.kt:438, feature/system/UpdateRequiredScreen.kt:83; tokens designsystem/theme/Dimens.kt:79,594
    • Fix: use dimens.funnel.outcomeDisc here.
  • F-PK-04 (P2) — Four different treatments for "this is a group label", two on screen 23
    • Screens: 23, 67, and every pane
    • Where: feature/epk/EpkScreen.kt:574,609,634 (SectionHeader); feature/epk/EpkComponents.kt:71 used at EpkPanes.kt:280,485,564,835,892,961,1059; feature/epk/EpkSheets.kt:375
    • Fix: retire EpkSectionHeader in favour of SectionHeader (with its actionLabel slot), or make it a thin wrapper over EyebrowLabel if the panes really want an eyebrow.
  • F-PK-08 (P2) — Two gradient pickers, and the press kit's one has no label
    • Screens: 23 (gallery pane)
    • Where: feature/epk/EpkPanes.kt:428-466 and its call site :150-161; peer feature/wizard/WizardMediaSteps.kt:343-376
    • Fix: lift one picker into designsystem/component/, keep the wizard's ink ring, and give the press-kit instance a header ("Cover fallback") like every other block in the pane.
  • F-AP-07 (P2) — The "what moves it" block gets a different heading component on every screen
    • Screens: 04, 16, 50, 99, 51
    • Where: feature/artist/ArtistProfileScreen.kt:772; feature/score/BookabilityScreen.kt:223; feature/score/ScoreBreakdownSheet.kt:163, :173, :196; feature/score/ScoreExplainerScreen.kt:395, :436-446; feature/score/ScoreHistoryScreen.kt
    • Fix: SectionHeader for page sections (16, 50 tabs), EyebrowLabel only inside the sheet where the design's eyebrow rhythm applies, and one wording ("What moves it").
  • F-AP-16 (P2) — Pinned action bars differ between 04 and 102/50; the Message circle is 52 next to a 54 CTA
    • Screens: 04, 102, 50
    • Where: feature/artist/ArtistProfileScreen.kt:1318-1343; feature/artist/ArtistReviewsScreen.kt:280-292; feature/score/ScoreExplainerScreen.kt:237-243; designsystem/theme/Dimens.kt:223, :414
    • Fix: one ActionBar composable (rule or no rule, decided once) used by 04/102/50, and the Message circle at component.cta.
  • F-AC-18 (P3) — Two three-up stat bands, two implementations, two type families
    • Screens: 26, 47, 69
    • Where: feature/profile/AccountChrome.kt:149-188; peer feature/artist/ArtistProfileScreen.kt:679-748
    • Fix: pick one (mono reads as the "money and numerals" rule in §2), move AccountStatBand to designsystem/component/ and delete StatStrip.
  • F-SH-05 (P2) — The two full-screen gates are twins that share no header, glyph, or title step
    • Screens: 120, 121
    • Where: feature/system/UpdateRequiredScreen.kt:80-107 vs feature/system/ServiceOutageScreen.kt:88-127
    • Fix: pick one gate anatomy (disc shape + fill + glyph family + title step + alignment) and apply it to both; the back circle is the only thing that should differ.

Acceptance

  • Every finding above is closed on the cited lines (or refuted in a comment with the reason).
  • ./gradlew :app:assembleDebug, :app:testDebugUnitTest and :app:lintDevDebug green.
  • The screens listed above walked on the artistant AVD with the debug harness (RELEASE.md §10) and the fix confirmed visually — this audit was code-grounded, not device-walked.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions