Skip to content

fix(mobile): expose thread rows and project picker rows to accessibility (#152) - #718

Merged
rynfar merged 1 commit into
pylonfrom
fix/issue-152-mobile-accessibility
Sep 21, 2026
Merged

rynfar merged 1 commit into
pylonfrom
fix/issue-152-mobile-accessibility

Conversation

@rynfar

@rynfar rynfar commented Sep 21, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #152

Root Cause

  1. Thread rows (Home and Sidebar):
    Rows are wrapped in <ControlPillMenu shouldOpenOnLongPress>, which renders @react-native-menu/menu's ThemedMenuView (MenuViewImplementation: UIButton). In iOS UIKit, UIButton initializes with isAccessibilityElement = YES by default. Under React Native Fabric, RCTViewComponentView.mm evaluates self.contentView.isAccessibilityElement, which returned YES for the menu overlay button without an accessibility label. In UIKit, marking a view as an accessibility element causes the accessibility engine to treat it as a leaf element, completely ignoring and hiding all child views (the row Pressables, thread title text, labels, and badges) from VoiceOver and accessibility inspection.
  2. Project picker rows (NewTaskRouteScreen):
    Project rows in the "Choose project" sheet rendered a bare Pressable without accessibility role, label, or state attributes. The iOS toolbar "Add project" button and empty-state buttons were also missing accessibility labels/roles.

Fix

  • Updated @react-native-menu/menu iOS patch (MenuViewImplementation.swift) to set self.isAccessibilityElement = !shouldOpenOnLongPress alongside self.isUserInteractionEnabled = !shouldOpenOnLongPress. In long-press mode, the overlay button is excluded from the accessibility tree, allowing VoiceOver to traverse into the wrapped child views.
  • Updated NewTaskRouteScreen project picker rows to configure accessible, accessibilityRole="button", accessibilityLabel (via getProjectScopeAccessibilityLabel), and accessibilityState={{ disabled }}.
  • Added accessibility labels and roles to the "Add project" header button and empty-state action buttons.
  • Added unit tests for getProjectScopeAccessibilityLabel.

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

@vercel

vercel Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
pylon-marketing Ready Ready Preview Sep 21, 2026 9:54pm UTC

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Sep 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 14.0 KiB 14.0 KiB +13 B (+0.1%) 15.1 KiB ✅
Codex Thread snapshot wire 7.2 KiB 7.2 KiB −12 B (−0.2%) 7.3 KiB ✅
Codex Live turn WebSocket wire 6.7 KiB 6.8 KiB +25 B (+0.4%) 7.8 KiB ✅
Codex Live turn WebSocket decoded 58.0 KiB 58.0 KiB +44 B (+0.1%) 66.4 KiB ✅
Codex Live turn messages 9 10 +1 (+11.1%) 21 ✅
Claude Total thread wire 13.9 KiB 13.9 KiB −27 B (−0.2%) 15.1 KiB ✅
Claude Thread snapshot wire 7.2 KiB 7.2 KiB 0 B (0.0%) 7.3 KiB ✅
Claude Live turn WebSocket wire 6.7 KiB 6.7 KiB −27 B (−0.4%) 7.8 KiB ✅
Claude Live turn WebSocket decoded 58.9 KiB 58.8 KiB −44 B (−0.1%) 66.4 KiB ✅
Claude Live turn messages 9 8 −1 (−11.1%) 21 ✅

Baseline: d93a127 · PR result: 6872486 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 115.6 KiB
  • Claude decoded thread snapshot: 116.3 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@rynfar
rynfar merged commit 9ec31fd into pylon Sep 21, 2026
19 checks passed
@rynfar
rynfar deleted the fix/issue-152-mobile-accessibility branch September 21, 2026 22:12

This branch was successfully deployed

1 active deployment
Preview — 6872486c Deployed Sep 21, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Mobile thread and project rows are invisible to accessibility

1 participant