Fix pre-existing test failure: EmailListScreen tapping search icon shows search bar #486
Closed
opened 2026-06-06 15:19:14 +00:00 by guettlibot
·
5 comments
No Branch/Tag Specified
main
issue-563-agentloop-validation
dummy-pr-test
issue-560-fix-firebase-run-url
issue-539-stable-imap-uid
issue-533-shared-email-list
plan-issue-555
drop-nix
plan-issue-484
plan-issue-539
plan-issue-535
plan-issue-474
plan-issue-533
fix-dagger-engineless-precommit
issue-521-fix-deploy-yml-wait-time-api
issue-502-fix-email-id-collision-mailbox
issue-492-eliminate-duplicate-build-runner
issue-494-website-change-detection
issue-491-parallelize-check
issue-478-fix-stalwart-dual-stack-bind
issue-475-allowed-addresses-glob
issue-473-search-result-reorder
issue-453-update-agentloop-defaults
issue-466-structured-search
issue-505-exclude-chaos-monkey-from-regular-ci
issue-509-fix-search-result-sorting
fix-ink-sparkle-remaining-tests
issue-506-fix-search-emails-tests
issue-504-runner-wait-time
issue-488-search-notes
issue-472-changelog-issue-links
issue-501-folder-search-local-sqlite
issue-486-fix-stale-test-shader-mismatch
fix/prevent-settled-search-rerun-473
issue-467-fix-search-stale-results
issue-446-installed-versions-in-changelog
issue-462-fix-pr
issue-448-chaos-monkey-test
issue-436-notes-on-emails
issue-429-unify-mail-display
issue-422-move-to-folder-create-new
issue-414-ensure-not-run-as-root
issue-424-unify-email-list-views
issue-419-trusted-senders-page
issue-425-fix-prs
test-foo
issue-421-bug-report
issue-383-fix-ci
issue-394-fix-deploy-flutter-version
issue-391-fix-ci-double-trigger
issue-376-combined-inbox-v2
issue-376-combined-inbox
issue-384-fix-open-prs
sops-migrate
issue-339-safe-first-on-imap-fetch
issue-340-try-catch-measure-height
issue-342-pin-intl-version
issue-341-guard-threademails-last
issue-335-agentloop-code-test
issue-329-fix
issue-315-fix
issue-320-fix
issue-325-fix
issue-312-fix
issue-311-fix
issue-305-fix
issue-304-fix
issue-299-fix
issue-300-fix
issue-298-fix
issue-296-fix
issue-294-fix
issue-289-fix
issue-288-fix
issue-287-fix
issue-286-fix
issue-277-fix
issue-282-fix
issue-280-fix
issue-272-fix
issue-268-fix
issue-267-fix
issue-266-fix
issue-258-fix
issue-260-fix
issue-257-fix
issue-253-fix
issue-216-fix
issue-251-fix
issue-249-fix
issue-question-fixes
issue-235-fix
issue-236-fix-v2
issue-237-fix
issue-236-fix
issue-228-fix
issue-217-fix
issue-214-fix
issue-213-fix
issue-208-fix
issue-205-fix
issue-204-fix
issue-203-fix
issue-202-fix
issue-129-fix
issue-161-fix
issue-160-fix
issue-201-fix
issue-210-fix
issue-198-fix
issue-200-fix
issue-144-fix
issue-199-fix
fix/playstore-upload-use-requests
issue-193-fix
issue-186-fix
issue-185-fix
issue-192-fix
issue-183-fix
issue-175-fix
issue-172-fix
issue-171-fix
issue-167-fix
issue-136-fix
issue-162-fix
issue-179-fix
issue-155-fix
issue-154-fix
issue-152-fix
issue-151-fix
issue-141-fix
issue-150-fix
issue-164-fix
migrate-to-dagger
task/d1-ci-matrix
task/a4-typeconverter-json
task/u7-onboarding-walkthrough
task/d3-sync-doc
task/a5-layer-boundary-lint
task/t5-golden-tests
task/p5-date-cache
task/s4-link-handling
task/p3-html-parse-isolate
task/u8-mark-all-read
task/u3-recent-searches
task/a3-jmap-injectable-http-client
task/r5-tls-error-handling
fix/playstore-redirect-retry
task/t3-repository-contract-tests
task/p2-email-list-pagination
task/p1-fts5-search
fix/playstore-upload-timeout
task/a1-email-detail-notifier
fix/upgrade-workmanager-0.9
fix/android-core-library-desugaring
task/p4-db-indexes
task/r3-html-error-boundary
task/d2-check-coverage
task/a2-email-tile
task/t4-migration-tests
task/t2-widget-tests
task/t1-email-repo-coverage
task/u6-connection-status
task/u4-push-notifications
task/u2-draft-sync
task/u1-list-unsubscribe
task/s2-hostname-validation
task/r6-reliability-fuzz-tests
task/r4-sync-error-banner
task/r2-force-resync
task/r1-undo-history-persistence
No results found.
Labels
Clear labels
NeedSupervisor
State/InProgress
State/Later
State/Planned
automerge
ci-failure
do-not-merge
loop/code
loop/code-ci-pending
loop/code-done
loop/code-in-process
loop/merge
loop/merge-done
loop/merge-in-process
loop/plan
loop/plan-done
loop/plan-in-process
Issue escalated to a human supervisor; agentloop will skip it until cleared.
Eligible for automatic merge by CI
Issue opened by agentloop to track a failing CI workflow; used for deduplication.
Plan PR — review only, do not merge.
Add to run the built-in "code" prompt; override at prompts/code.md.
Prompt "code" finished; waiting for the PR's CI to pass before advancing.
Prompt "code" finished successfully.
Agent for the "code" prompt is currently running on this issue.
Managed by agentloop
Managed by agentloop
Managed by agentloop
Add to run the built-in "plan" prompt; override at prompts/plan.md.
Prompt "plan" finished successfully.
Agent for the "plan" prompt is currently running on this issue.
No labels
NeedSupervisor
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: guettli/sharedinbox#486
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.
Problem
The widget test
EmailListScreen tapping search icon shows search barintest/widget/email_list_screen_test.dart(line 107) is permanently failing.Error
The pre-compiled InkSparkle shader in the test asset bundle was built against an older Flutter SDK version and does not match the current runtime (Flutter 3.44.0).
Context
The test was written when the search bar was hidden behind a toggle icon. The SearchBar is now always visible in the AppBar, so the test's premise ("tapping icon shows search bar") is also stale — the bar is already there without any tap.
Fix
Two things need to happen:
ink_sparkle.fragshader version mismatch. Either rebuild the shader assets for Flutter 3.44.0 or configure the relevant tests to skip shader warm-up.Now I have a complete picture. Let me write the implementation plan.
Here is the implementation plan for issue #486:
Implementation Plan
Root cause analysis
There are two independent problems:
1. Stale test logic (lines 107–129)
The test "tapping search icon shows search bar" taps
Icons.searchand then assertsfind.byType(TextField)andfind.text('Search…'). Both assertions are now trivially true without any tap — theSearchBarwidget is permanently mounted inAppBar.bottom(email_list_screen.dart:247–268). TheIcons.searchicon in the tap is the leading icon inside the SearchBar, not a toggle button. The test title, interaction, and premise are all stale.There is already a test at line 240, "SearchBar is always visible in the AppBar", that directly checks
find.byType(SearchBar)andfind.text('Search…')without any tap — it fully covers the stale test's intent.2. Shader version mismatch
test/widget/helpers.dart:583builds the test theme withuseMaterial3: trueand nosplashFactoryoverride. Material 3's default splash factory isInkSparkle, which at paint-time tries to decodeshaders/ink_sparkle.fragfrom the asset bundle. The pre-compiled shader in the test bundle targets an older Flutter SDK format version (1), but Flutter 3.44.0 expects version 2 — causing theINVALID_ARGUMENTexception duringpumpAndSettle.Changes required
File:
test/widget/email_list_screen_test.darttestWidgets('tapping search icon shows search bar', ...)).File:
test/widget/helpers.dartbuildApp(), addsplashFactory: NoSplash.splashFactoryto bothThemeDatainstances (light and dark) at lines ~583 and ~589.NoSplash.splashFactoryis part ofpackage:flutter/material.dart— no new dependency needed.ink_sparkle.fragasset during widget tests, eliminating the version-mismatch crash for all current and future tests in this suite.What is NOT needed
shaders/directory in the test bundle is Flutter-SDK-internal; apps cannot ship a replacement.flutter test --no-shader-warmupflag. The theme-level override is narrower and applies automatically without build-system changes.EmailListScreencode — it is correct; the issue is entirely in the test suite.The PR is open at https://codeberg.org/guettli/sharedinbox/pulls/489.
What I did:
Two root causes were fixed in a single commit:
Deleted the stale test
'tapping search icon shows search bar'(email_list_screen_test.dartlines 107–129). TheSearchBaris now always rendered inAppBar.bottom, so both assertions (find.byType(TextField),find.text('Search…')) were trivially true before any tap. The existing test'SearchBar is always visible in the AppBar'already covers this intent.Added
splashFactory: NoSplash.splashFactoryto bothThemeDatainstances intest/widget/helpers.dart. Material 3's defaultInkSparklesplash factory tries to load the pre-compiledshaders/ink_sparkle.fragasset at paint time. The bundled shader targets SDK format version 1, but Flutter 3.44.0 expects version 2 — causing theINVALID_ARGUMENTcrash. UsingNoSplashprevents that asset from ever being loaded in tests, fixing the crash for all current and future tests in the suite without any build-system changes.agentloop: agent exceeded its 2h0m0s runtime budget and was stopped.
agent stderr tail:
agentloop: previous agent process exited unexpectedly; resuming acpx session (restart 1/3).
agentloop: agent exceeded its 2h0m0s runtime budget and was stopped.
agent stderr tail: