Skip to content

ci: make gradients a UX review finding - #8286

Merged
chenmingwei23 merged 1 commit into
mainfrom
ci/ux-review-no-gradients
Sep 4, 2026
Merged

ci: make gradients a UX review finding#8286
chenmingwei23 merged 1 commit into
mainfrom
ci/ux-review-no-gradients

Conversation

@CrysisDeu

@CrysisDeu CrysisDeu commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a flat-fill rule to the UX review lane (main + fork variants): a NEW decorative gradient fill (linear-, radial-, conic-gradient used as a background or surface color) on chrome, a dialog, or an exported image such as a share card is a finding. The expected fill is one solid theme token, or the brand purple #7c3aed on an outward-facing artifact.

The rule is scoped to the defect class it comes from. It explicitly does not flag functional gradients (mask-image scroll-edge fades, loading shimmer, streaming glow) or the shipped gradient mechanisms (appstore gradient art in components/appstore/gradient.ts, which reads as content rather than chrome, and the session 'gradient' color mode) — those are deliberate and test-pinned, and an "any gradient" rule would misfire on every PR that touches them.

The rule is stated once in website/docs/theming-contract.md (next to the existing "never a hardcoded #hex" rule, reachable from website/AGENTS.md), so an author sees it before review; both reviewer prompts cite that doc.

Why

The brand system is flat. A gradient background on a share card in #8040 went through the UX lane without comment because no lens named gradients; it was caught by a human instead. This puts the rule where the reviewer will apply it every time — lens 7 (Consistency & Habituation), next to the existing "theme tokens over hardcoded colors" bullet.

Prompt + doc change, no new lane/gate/script. Both ux-review.yml and fork-ux-review.yml get the identical bullet so fork PRs are held to the same bar.

Tested

  • Both workflow files parse as YAML
  • scripts/check_brand_name.py (added lines) and scripts/docs-lint.sh pass locally
  • CI runs the workflow-shape and docs tests

no linked issue: prompt-only reviewer tightening surfaced during #8040 review.

@CrysisDeu
CrysisDeu requested a review from a team as a code owner September 3, 2026 22:18
@CrysisDeu
CrysisDeu requested a review from smeyffret September 3, 2026 22:18
@github-actions github-actions Bot added the readiness: checking Automated validation is still running label Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Opus 4.8 Review — ✅ no blocking findings

Reviewed 616d0afe82f1a1e74a6a31b4990bc53bfec474fe — this comment is updated in place on each push.

Review details

No findings.

[OPUS-REVIEWED] 616d0af

Verdict parsed from the review's SHA-scoped output markers for commit 616d0afe82f1a1e74a6a31b4990bc53bfec474fe.

False positive or not applicable? A repository writer can comment:
/ai-review override fable 616d0afe82f1a1e74a6a31b4990bc53bfec474fe: <one-sentence reason>

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Design Review (Fable 5) — ✅ PASS

Design-level review of 616d0afe82f1a1e74a6a31b4990bc53bfec474fe — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

Design-Verdict: PASS

A reviewer-lens gap with a named escaped defect (#8040), fixed at the exact layer that missed it — prompt plus author-facing doc, no new gate.

Watch

  • The rule text (including the exclusion list and the #7c3aed literal) now lives verbatim in three files; when a new shipped gradient mechanism lands or the brand hex changes, all three must move together or the lane starts false-flagging — consider making the two prompt copies terser and letting theming-contract.md own the exclusion details.

[DESIGN-REVIEWED] 616d0af

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

First Principles Review (Fable 5) — ✅ PASS

Premise-level review of 616d0afe82f1a1e74a6a31b4990bc53bfec474fe — why this exists and whether the shipped surface is the smallest honest version. Updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

All checks are done. The rule duplicates nothing (grep for gradient in website/AUTOSDE.yaml, check-theme-colors.mjs, and all workflows: zero pre-existing hits), the fork/main duplication is that file pair's documented mirroring pattern, the carve-outs name real shipped mechanisms (components/appstore/gradient.ts exists; 'gradient' mode in sessionColors.ts; #7c3aed in 21 files including ShareCard.tsx), and the provenance is a reported defect (#8040). Final review:

First-Principles-Verdict: PASS

A gradient shipped past the UX lane because no lens named gradients; this puts the rule exactly where that lens failed, scoped to the defect class.

What this change ships

Intent: stop new decorative gradient fills from passing UX review unflagged, as one did in #8040. FIX (a review-lane gap with a reported escape), shipped as a prompt+doc addition.

  1. UX review now flags a new decorative gradient fill on chrome/dialogs/share cards — justified (reported defect, feat: share assistant messages as branded social cards #8040)
  2. Fork PRs are held to the identical rule — justified (fork-ux-review.yml is a declared mirror of ux-review.yml)
  3. Theming contract tells authors "fills are flat," with named carve-outs — justified (author sees the rule before the reviewer does)

Verification that grounds the PASS: no existing mechanism covers this — gradient appears nowhere in website/AUTOSDE.yaml, website/scripts/check-theme-colors.mjs (which checks raw literals, not gradients built from tokens), or any workflow before this change (counts: 0, 0, 0). The neighbouring "theme tokens over hardcoded colors" bullet does not catch a token-built gradient, so this is not a second spelling. Every carve-out names a real, test-pinned mechanism in the tree, so the rule won't misfire on the shipped gradient art. The change sits at cause level: the lens that missed the defect is the thing amended, and the author-facing contract now states the rule the reviewer enforces. All three items are declared in the description.

[FIRST-PRINCIPLES-REVIEWED] 616d0af

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

GPT 5.6 Review — ✅ no blocking findings

GPT 5.6 completed its review of 616d0afe82f1a1e74a6a31b4990bc53bfec474fe and found no blocking issues.

This comment is updated in place on each push.

Review details

No findings.
[GPT-REVIEWED] 616d0af

False positive or not applicable? A repository writer can comment:
/ai-review override gpt 616d0afe82f1a1e74a6a31b4990bc53bfec474fe: <one-sentence reason>

@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention and removed readiness: checking Automated validation is still running labels Sep 4, 2026
@CrysisDeu
CrysisDeu force-pushed the ci/ux-review-no-gradients branch from e359456 to 175d830 Compare September 4, 2026 07:58
@github-actions github-actions Bot added readiness: checking Automated validation is still running readiness: passed Eligible automated validation passed for the current revision and removed readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running readiness: passed Eligible automated validation passed for the current revision labels Sep 4, 2026
@CrysisDeu
CrysisDeu force-pushed the ci/ux-review-no-gradients branch from 175d830 to d827b60 Compare September 4, 2026 08:41
@CrysisDeu

Copy link
Copy Markdown
Collaborator Author

Design Review — Watch: "Any gradient is a finding" contradicts the shipped dashboardfixed in d827b60

The bullet's premise — "the brand system is flat, so any CSS gradient … on a user-facing surface is a finding" — is falsified by the codebase it governs … Scope the rule to the actual #8040 failure class: decorative background/fill gradients, with functional gradients (fade masks, scroll cues, loading shimmer) and existing gradient features exempt.

Verified the cited sites exist (20 non-test files under website/src carry a gradient; index.css:2086 mask-image fades, appstore/gradient.ts header says the art "reads as content, not chrome", sessionColors.ts ships a 'gradient' mode). The bullet in both ux-review.yml and fork-ux-review.yml is now scoped to a new decorative gradient fill (background/surface color) and names the exemptions explicitly: mask-image scroll-edge fades, loading shimmer, streaming glow, the appstore gradient-art module, and the session 'gradient' color mode.

Suggestion: state the rule once in the theming contract and have both prompts cite itfixed in the same commit. Added a "Fills are flat" paragraph to website/docs/theming-contract.md next to the existing "never a hardcoded #hex" rule (reachable from website/AGENTS.md); both prompt bullets now point at that doc.

@CrysisDeu

Copy link
Copy Markdown
Collaborator Author

First Principles — Subtraction: shrink the bullet to the harm #8040 demonstratedfixed in d827b60

Shrink the bullet in both ux-review.yml and fork-ux-review.yml from "any CSS gradient … dashboard chrome, dialogs, and exported images … alike" to the harm #8040 demonstrated: decorative gradient fills (backgrounds) on new surfaces, explicitly not mask-image fades, shimmer skeletons, or the appstore gradient-art mechanism.

Done as stated. The bullet now reads "a NEW decorative gradient fill (linear-, radial-, or conic-gradient as a background or surface color) … is a finding" and carries an explicit NOT-a-finding list: mask-image scroll-edge fades, loading shimmer, streaming glow, components/appstore/gradient.ts, and the session 'gradient' color mode. The Watch item (59 occurrences / test-pinned *scrollEdges* masks would earn a finding under the old wording) is the same defect and is closed by the same edit; the PR body's "the brand system is flat" claim is now qualified to fills rather than all gradients, and the rule is recorded once in website/docs/theming-contract.md so the two YAML copies cite a single source.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

UX Review (Fable 5) — ✅ PASS

UX-level review of 616d0afe82f1a1e74a6a31b4990bc53bfec474fe — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

UX-Verdict: PASS

No product surface changes — this is a reviewer-prompt and contributor-doc edit; nothing a dashboard user sees or does is touched, and all cited exemptions (components/appstore/gradient.ts, session 'gradient' mode) exist.

[UX-REVIEWED] 616d0af

@CrysisDeu

Copy link
Copy Markdown
Collaborator Author

Bundle Size Gate red on d827b60 is main-inherited. The gate reports assets/t-*.js: 740.0 KB exceeds its 740.0 KB budget by 4 B; this PR touches no file under website/src. Three locale-adding merges on main (4e5398d, de19df8, 390ac8d) put the i18n runtime chunk over its ceiling, and sibling PRs on the same main window show the same red. Unblocker: #8411 moves the ceiling to 780 KB (re-measured). This PR will be rebased once #8411 lands.

@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running and removed readiness: checking Automated validation is still running readiness: action required A blocking check or review needs attention labels Sep 4, 2026
The brand system is flat, and a gradient fill on a share card slipped
past the UX lane because no lens named it. Add a flat-color rule to the
consistency lens of both the main and fork UX reviewers: any CSS
gradient on a user-facing surface -- dashboard chrome, dialogs, or an
exported image -- is a finding, with one solid token (or the brand
purple on outward-facing artifacts) as the expected fill.
@CrysisDeu
CrysisDeu force-pushed the ci/ux-review-no-gradients branch from d827b60 to 616d0af Compare September 4, 2026 09:36
@CrysisDeu

Copy link
Copy Markdown
Collaborator Author

Rebased onto main 434ff7c, which carries #8412's re-measured t ceiling (777 KB), so the inherited Bundle Size Gate red is cleared without any change to this PR's diff. #8411 was closed as redundant.

@github-actions github-actions Bot added readiness: checking Automated validation is still running readiness: passed Eligible automated validation passed for the current revision and removed readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running labels Sep 4, 2026
@chenmingwei23
chenmingwei23 enabled auto-merge (squash) September 4, 2026 11:07

@chenmingwei23 chenmingwei23 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tier 1 auto-approve: chore/CI tooling (3 files). Criteria: no conflict, no requested changes, security path denylist clean, design-doc gate clean, SAST annotations clean (Semgrep + CodeQL both success, zero PR-scoped alerts), security checklist all-NO, AI reviewers green. Category: adds a flat-fills gradient rule to the UX review workflow prompts plus its theming-contract doc; workflow prompt text with no runtime impact.

@chenmingwei23
chenmingwei23 merged commit 6c433cf into main Sep 4, 2026
64 checks passed
@chenmingwei23
chenmingwei23 deleted the ci/ux-review-no-gradients branch September 4, 2026 11:07
@github-actions github-actions Bot removed the readiness: passed Eligible automated validation passed for the current revision label Sep 4, 2026

@iamwhatever iamwhatever left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tier 1 auto-approve: chore / build tooling (3 files). Criteria: no conflict, no requested changes, security path denylist clean, design-doc gate clean, SAST annotations clean, security checklist all-NO, AI reviewers green. Category: adds a "flat fills" gradient criterion to the UX review prompt in .github/workflows/ux-review.yml and its fork variant, and documents the same rule in website/docs/theming-contract.md — prompt/doc prose only, no job gating logic and no runtime code path.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants