You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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
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
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
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.
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, oneActHeader, oneGroupLabel, oneStatBand, one gate layout.Findings (10: P2 ×8, P3 ×2)
ConfirmedUiState, passcoverUrland the defaultactThumbon 07, and replace 94'sMonogramwith the sameActRow.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.WizardFieldLabelfor questions,EyebrowLabelonly for labelled regions per its own docstring) and dropSectionHeaderhere; give the package fieldslabel ="Package", "Length", "Your fee".dimens.funnel.outcomeDischere.EpkSectionHeaderin favour ofSectionHeader(with itsactionLabelslot), or make it a thin wrapper overEyebrowLabelif the panes really want an eyebrow.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.SectionHeaderfor page sections (16, 50 tabs),EyebrowLabelonly inside the sheet where the design's eyebrow rhythm applies, and one wording ("What moves it").ActionBarcomposable (rule or no rule, decided once) used by 04/102/50, and the Message circle atcomponent.cta.AccountStatBandtodesignsystem/component/and deleteStatStrip.Acceptance
./gradlew :app:assembleDebug,:app:testDebugUnitTestand:app:lintDevDebuggreen.artistantAVD with the debug harness (RELEASE.md §10) and the fix confirmed visually — this audit was code-grounded, not device-walked.