Skip to content

fix(ci): the smoke walk finds a button by what it says - #516

Merged
maximsan merged 1 commit into
mainfrom
fix/smoke-button-finder
Sep 5, 2026
Merged

fix(ci): the smoke walk finds a button by what it says#516
maximsan merged 1 commit into
mainfrom
fix/smoke-button-finder

Conversation

@maximsan

@maximsan maximsan commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Main's smoke gate has been red for five merges. The app was never broken.

What happened

The walk waits for an enabled button carrying a label, and found one by reading the button's direct child as a Text. PrimaryButton grew an optional trailing mark in PR #503 and wrapped its label in a Row, so the finder stopped matching. Every wait then timed out against a button that was on screen — the failure dump names Meet Roasty while claiming it was never reached.

Bisected: green at cde2503, red at 4af25bd, same signature every merge since. Proved rather than assumed — a throwaway probe confirmed the old predicate matches nothing today while the label is present.

The fix

The finder asks for what the walk needs: an enabled FilledButton anywhere above the label. How the button arranges its label is the button's business.

Why it went unnoticed

The smoke job runs on main only, so no pull request could catch it. A widget test now pins the same relationship — plain label, label beside a trailing mark, and the disabled case the walk exists to tell apart — and runs on every pull request. Whether the smoke job itself should also run on pull requests is a cost question I have left alone.

Checks: format, analyze, metrics, changelog gate and 2491 tests pass. The smoke itself was run locally on the simulator with CI's own recipe — flutter build ios --simulator then xcodebuild test — and both tests pass with the Dart walk really executing.

Main's smoke gate has been red since the reward-endings merge. The walk
waits for an enabled button carrying a label, and it found one by
reading the button's direct child as a `Text`. `PrimaryButton` grew an
optional trailing mark and wrapped its label in a `Row`, so the finder
stopped matching — and every wait timed out against a button that was
on screen the whole time. Five merges reported a broken app that was
not broken.

The finder now asks for what the walk actually needs: an enabled
FilledButton anywhere above the label. How the button lays its label
out is the button's business.

The smoke job runs on main only, so no pull request could have caught
this. A widget test now pins the same relationship — label, trailing
mark, and the disabled case the walk exists to tell apart — and it runs
on every pull request.

Verified locally on the simulator with CI's own recipe: both smoke
tests pass, and the Dart walk runs rather than passing vacuously.
@maximsan
maximsan merged commit e6daa1e into main Sep 5, 2026
6 checks passed
@maximsan
maximsan deleted the fix/smoke-button-finder branch September 5, 2026 17:03
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.

1 participant