Skip to content

fix(mobile): enlarge the Filter sessions tap target to 44dp - #6365

Closed
iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-a-control-is-too-small-to-tap-reliably-ede15598-2f45
Closed

iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-a-control-is-too-small-to-tap-reliably-ede15598-2f45

Conversation

@iscekic

@iscekic iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Changelog for users

  • Tap the Filter sessions button anywhere in its 44×44dp square and the filter picker opens, including near its edges.
  • The count badge still shows on the icon while filters are active.

Changelog for maintainers

  • session-filter-button.tsx now reserves a fixed h-[44px] w-[44px] shrink-0 layout box on the Pressable; the previous hitSlop was clipped to the parent and never enlarged the measured target.
  • Removed the button's hitSlop; the target no longer depends on the header gap or trailing margin.
  • The icon and count badge moved into an inner View, so the badge stays anchored to the icon's top-right while the outer Pressable owns the full target.
  • New mounted test session-filter-button.mounted.test.tsx asserts the 44dp classes, native-compiled 44-unit width/height with flexShrink: 0, and unchanged label, badge, and press behavior for active counts 0, 1, and 12.
  • The button is one shared iOS and Android implementation; the compiler import in its test is type-only and selects no platform.
  • Review hint: start with session-filter-button.tsx, then confirm the badge corner anchoring and that adjacent header controls stay independently tappable.
  • Review hint: the edge-tap capture kept above replaces the earlier edge-tap note, whose quoted search text does not appear in the device logs; the apply-and-clear run (e2-applied2.log, e2-cleared.log, e2-nomatch.log, e2-clearfilters.log) replaces the follow-up that called that scenario unproven.
  • Review hint: the live run recorded no platform, so an iOS live run is skipped, pending owner verification; landscape was not exercisable on the emulator (the harness leaves the display portrait). No data, config, or migration changes.

E2E proof

[e1] Filter sessions tap target on Agents and session history (android emulator-5554) — e2e-mobile-app/e1.png

Owner request

Explorer finding: a control is too small to tap reliably

The user-agent explorer found this while using the app like a user.
One finding per item; the explorer never edits product code.

Flow: accessibility
Found on revision: 59ef790

Repro:

  1. set this state first: account e2e-empty-1789812454@example.com (the failed fresh sign-in), $10 credits, 3 Code Reviewer PRs, a second organization (42852247-0bc9-4794-ac17-0dfb7cd15c30), one top-level permission session (ses_f46c67376ffeaXQv13Fi1wpxCg), no GitHub/GitLab linked, no repos; device landscape 2400x1080, system day mode, default density.; the device in light mode
  2. open the app on emulator-5554
  3. reach the screen the capture names (the screen the capture names)
  4. the capture shows the defect named below

Observed: controls below 28dp on a side: agents-list: 1 small control(s): Filter sessions (54x54px)
Expected: every control is at least 28dp on a side

Evidence (from the device run):

Production record (automatic, 2026-09-19):

Production record for ses_f46c67376ffeaXQv13Fi1wpxCg

Axiom, last 72 h

No line carries this term in: vercel, cloudflare-logpush, supabase-production.

The session row, read replica

No row in cli_sessions_v2 carries ses_f46c67376ffeaXQv13Fi1wpxCg.

Log archives, R2 kilocode-sessions

NOT READ: R2 keys are indexed by the agent id, not the session id; take the agent_* from the worker logs above and query that.

Sentry, last 72h

No Sentry issue carries this term.

E2E proof — log excerpts

[e1] Filter sessions tap target on Agents and session history (android emulator- -> pass :: Android emulator-5554, portrait, light+dark: target box 115x116px at displayDensity 420 (e1-agents-list-light.log: 'bounds="[907,165][1022,281]"', '"displayDensity":420') = 44x44dp; each of the four edge presses opened the picker on the Agents live list (e1-agents-list-edge-taps.log: 4x 'text="PLATFORM"' bounds="[101,355][979,392]"), on session history (e1-edge-taps.log: 4x 'text="PLATFORM"') and in dark mode (e1-edge-taps-dark.log: 4x 'text="PLATFORM"'); neighbours independent, See all navigated to history and Search sessions accepted 'qqzzxx' -> (e1-search-typed.log: 'text="No sessions match"') while the target stayed 'bounds="[907,165][1022,281]"'; landscape not exercisable (sim-tool rota

Explorer finding: a control is too small to tap reliably

The user-agent explorer found this while using the app like a user.
One finding per item; the explorer never edits product code.

Flow: accessibility
Found on revision: 59ef790

Repro:
1. set this state first: account `e2e-empty-1789812454@example.com` (the failed `fresh` sign-in), $10 credits, 3 Code Reviewer PRs, a second organization (42852247-0bc9-4794-ac17-0dfb7cd15c30), one top-level `permission` session (ses_f46c67376ffeaXQv13Fi1wpxCg), no GitHub/GitLab linked, no repos; device landscape 2400x1080, system day mode, default density.; the device in light mode
2. open the app on emulator-5554
3. reach the screen the capture names (the screen the capture names)
4. the capture shows the defect named below

Observed: controls below 28dp on a side: agents-list: 1 small control(s): Filter sessions (54x54px)
Expected: every control is at least 28dp on a side

Evidence (from the device run):
- ~/.local/share/kwf/findings/explorer-a-control-is-too-small-to-tap-reliably-ede15598/agents-empty.png
- ~/.local/share/kwf/findings/explorer-a-control-is-too-small-to-tap-reliably-ede15598/agents-list.png
- ~/.local/share/kwf/findings/explorer-a-control-is-too-small-to-tap-reliably-ede15598/agents-search-empty.png
- ~/.local/share/kwf/findings/explorer-a-control-is-too-small-to-tap-reliably-ede15598/code-reviewer-empty.png

Production record (automatic, 2026-09-19):
## Production record for `ses_f46c67376ffeaXQv13Fi1wpxCg`

### Ax
@kilo-code-bot

kilo-code-bot Bot commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

The Filter sessions button now owns a fixed 44×44 shrink-0 Pressable target with the icon/badge wrapped in an inner View; the new mounted test verifies the target classes, native-compiled dimensions, badge anchoring, and press behavior, and I found no bugs, security issues, or memory leaks in the changed code.

Files Reviewed (2 files)
  • apps/mobile/src/components/agents/session-filter-button.tsx
  • apps/mobile/src/components/agents/session-filter-button.mounted.test.tsx

Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic marked this pull request as draft September 19, 2026 12:48
@iscekic

iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Rejected, no code change (kwf kwf-fix-platform-293a).

Why: (already implemented, verified live: no change needed: The alleged platform fork is a test-only type import; the production Filter sessions button already uses one shared 44×44 implementation for iOS and Android. The finding is unsupported: apps/mobile/src/components/agents/session-filter-button.mounted.test.tsx:5 imports only compiler

@iscekic
iscekic marked this pull request as ready for review September 19, 2026 13:20
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 19, 2026
@iscekic iscekic self-assigned this Sep 19, 2026
@iscekic

iscekic commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator Author

Closing as a duplicate of #6395.

This PR and ten others came from the same explorer finding, a-control-is-too-small-to-tap-reliably. Nine of the eleven edit apps/mobile/src/components/agents/session-filter-button.tsx, so they could never all merge — the first to land would conflict the rest.

#6395 is kept because it is the broadest of the group (14 files of the 34 the group touches).

Any screen still below the tap-target bar after #6395 merges will be found again by the same scan, and will now arrive as one finding: the intake refuses a finding whose slug already has an open PR or a live section (kwf 07c842fd).

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

Labels

human-ready The PR is ready for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant