make ui-visual has been failing on main and nothing runs it #196
Closed
opened 2026-08-22 02:43:52 +00:00 by logan
·
3 comments
No Branch/Tag Specified
main
fix/146-stub-etxtbsy
fix/175-wizard-follows-the-library
fix/231-setter-rollback
fix/197-duplicate-column-label
docs/225-fixtures-wav-tags
docs/220-skill-check-scope
test/217-fixture-names-in-queue-selection
fix/216-riff-parse-allocation
fix/170-queue-header-action-names
fix/210-nav-sheet-scroll-affordance
docs/50-readme-landing-page
feat/65-art-prefetch-ahead
feat/71-more-as-a-bottom-sheet
feat/54-native-touch-feel
feat/67-entity-links-into-menus
test/196-visual-tier-gates
fix/138-ui-test-storage-leak
fix/104-wav-tags-read
fix/207-sheet-scroll-affordance
fix/204-ui-visual-update-filter
pi-agent-backlog-automation
63-touch-model-phase-2
63-android-touch-model
186-touch-targets-settings
186-touch-targets-page-header
187-seek-bar-hit-area
189-190-explore-correctness
135-android-underrun-instrumentation
51-android-small-screens
fix/171-phone-queue-scrim
fix/137-touch-only-affordances
fix/154-nested-css-check
feat/58-mini-player-progress-line
fix/66-album-page-scrolls-as-one
60-context-menu-action-sheet
64-android-system-volume
59-slim-the-mini-player
55-queue-as-a-screen
feat/57-drop-the-android-top-bar
feat/62-jobs-as-a-notification
fix/53-seek-bar-never-moves
fix/159-android-task-app-id
fix/52-android-activity-recreation-restarts-the-process
fix/150-expand-button-under-the-art
feat/42-inline-volume-and-centred-transport
fix/156-queue-selection-fixture-order
fix/151-fuse-the-scroll-guard-and-the-write
fix/43-queue-panel-selection
fix/143-top-bar-fits-its-window
feat/27-jobs-into-settings
feat/25-configurable-sidebar-tabs
feat/6-global-back-forward
fix/72-active-view-broadcast
fix/69-page-header-action-overflow
fix/quick-wins-batch
fix/118-in-library-clear
fix/61-mini-player-plain-text
fix/68-hover-affordances-pointer
fix/119-dev-headless-port
fix/130-issue-claim-user
fix/131-codegen-check-scope
feat/28-autotag-match-on-album
feat/17-demote-version-selector
feat/38-ownership-visibility
ci/115-manual-release
feat/34-icon-language
feat/7-full-tracklist-toggle
fix/16-tagwriter-totals
fix/unclaim-ca-certs
fix/unclaim-shell
ci/unclaim-on-close
docs/closing-keyword
docs/retire-stale-planning-docs
docs/issue-driven-workflow
integration/small-fixes
fix/small-issue-batch
fix/queue-toggle-state
fix/drag-count-badge
fix/album-card-year
fix/album-tracklist-heading
fix/seek-bar-clock-width
fix/explore-art-scanner-requests
chore/workflow-guardrails
v0.7.0
v0.6.0
v0.5.0
v0.4.0
v0.3.1
v0.3.0
v0.2.3
v0.2.2
v0.2.1
v0.2.0
v0.1.0
v0.0.1
v0.0.0
Labels
Clear labels
Area/Design
Area/Downloads
Area/Explore
Area/Library-UI
Area/Metadata
Area/Packaging
Area/Player
Area/Queue
Area/Settings
Area/Shell-Nav
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Platform/Android
Platform/Desktop
Breaking change that won't be backward compatible
Something is not working
Documentation changes
Improve existing functionality
New functionality
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Medium
3
The priority is medium
Priority
Low
4
The priority is low
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
In Progress
Somebody is actively working on this right now
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: yonlu/yellowjacket#196
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Report
make ui-visualfails onmain(52038dc) with four storedscreenshots out of date, and nothing runs it, so nobody found out. CI's
checkjob runsmake ui-test, which is the same suite with thecomparisons off (
render.ts'svisualEnabledgate) -- so the visualtier is the only one in this repo that is never executed by anything
but a person choosing to.
Findings
a change that shipped deliberately. Read side by side:
app-sidebar's reference still lists Jobs, the destination#27 retired. That reference has been wrong since #27 merged.
now-playinggained a third line ("Playing from a dynamic mix")and the reference has two.
page-headershots are #195's taller sort control, mergedlast session as the first half of #186.
which is the actual finding: this is not one forgotten refresh, it
is a tier that has been red long enough to accumulate unrelated
debris.
git logontest/components/__screenshots__/has threecommits, the most recent being
862e8a0.current state: a person who runs it today gets four failures that
are nothing to do with what they changed, which is the strongest
possible incentive to stop running it. That is how the sidebar
reference survived #27.
clean, but
make ui-visualwas one of the tiers that pass was meantto be judged in, and it could not be read until these were separated
out.
make ui-visualrenders the fallback colours, not the theme, because thetheme only reaches
:rootin the real app. So it is a layout tier,and layout is exactly what these four are recording.
Direction
Two halves, and the first is nearly free.
Refresh the three references that are behind shipped work, having read
each diff rather than blessing them -- #196 refreshes the two
page-headershots, since those are #186's own debris and it is theissue that found this.
app-sidebarandnow-playingare deliberatelyleft, because blessing an unrelated screenshot is how this happened.
The second half is whether this tier gates. Three options, and the
choice wants an argument rather than a default:
make ui-visualin CI'scheckjob instead ofmake ui-test. It is the same 1,029 tests plus 30-odd comparisonsand costs nothing extra in time -- but a screenshot comparison
across machines is the classic flake, and the references here were
taken on a developer's Arch box while CI is
ubuntu:24.04, so thisprobably fails on font rendering alone until the references are
regenerated in the container.
the skill saying to run it after any stylesheet change.
render-without-crashing tier, which is what
make ui-testalreadyis. That is the honest option if nobody is going to look at the
images, and this issue is evidence that nobody has.
.pi/skills/yellowjacket-dev/references/ui-tier.mdis where whicheveranswer wins gets written down.
Correction to the Direction above: the two
page-headerreferences arerefreshed in #186's second-pass branch (
186-touch-targets-settings),not in this issue -- the body's "#196 refreshes" is self-referential and
wrong. This issue is the tier, not the refresh.
The two left standing are
app-sidebarandnow-playing, deliberately.Picking this up. Branch
test/196-visual-tier-gates.Reproduced on
main(ee1d8b3): the twopage-headershots thecomment above assigns to #186 now pass — they were refreshed in
2100f00— so exactly the two this issue keeps are red:Approach: read each diff before refreshing it, then answer the second
half — whether the tier gates — with a measurement rather than a
preference. The whole question hangs on whether a baseline recorded on
Arch survives CI's
ubuntu:24.04, so I am going to run the visualsuite in that container against the committed baselines and let the
number decide between options 1, 2 and 3. Whichever wins is written
into
.pi/skills/yellowjacket-dev/references/ui-tier.md.PR: #205 — CI green (
checkande2e, run 544). Not merged; leavingStatus/In Progresson.Both halves are answered in it.
The refresh: the two references this issue kept were red, and reading
each diff turned up something the issue could not have known — both
recorded two changes, the shipped one and a leak.
app-sidebarlostJobs (#27) and moved its highlight Home → Tracks;
now-playinggained the source line and was playing from "a dynamic mix". The
stores are singletons and neither case sets one, so each shot
photographed whatever the case above it left behind.
--updatealonewould have pinned each file's own test ordering into a PNG. Both cases
state their world now, and then the references were re-recorded.
The gate: answered with a container run rather than a preference. The
committed baselines replayed in a bare
ubuntu:24.04— CI'scheckimage — fail three ways that have nothing to do with any component
(
track-infoandpage-headerfiltered-by-search at ratio 0.03against a 0.02 allowance,
seek-barat 1152×17 against a stored1152×18), and the two stale ones disagree about their new height
between the machines (
now-playing1152×65 here, 1152×64 there). Sooption 1 costs a second baseline set, which every local run would
then fail against — the same trap with the machines swapped — and a
pre-push hook is that fault again. Option 3 is declined on the one
regression this tier has caught that nothing else could (the
<span>that lost
box-sizingand grew a badge 36→38px,NOTES.md).So option 2, written where a person meets it rather than as a line
nobody reads:
references/ui-tier.mdcarries the table and what thetier is and is not worth,
SKILL.md's "rules about climbing" carriesthe obligation, CLAUDE.md carries the constraint. The rule is a change
that moves a component's geometry refreshes that component's baseline
in the same commit, having read the image, and never one it did not
cause — plus a visual case states the world it photographs.
Filed while here: #204 —
make ui-visual-update UI_ARGS=<path>re-records every baseline, because vitest's
--updatetakes thefollowing positional as its value. That is this issue's own hazard
living in the tool meant to fix it; it bit this session and is
deliberately left out of the diff.
Not done, and it is the door left open: a container-recorded second
baseline set is what option 1 would have to pay for. The measurement
above is the price.