callstack / callstack/agent-device

Test-fixture gaps for divergence chrome-filter over-filtering live evidence (short-form screen, native inputAccessoryView, runtime-permission action)

Abierto
#1,255 0 comentarios 0 reacciones 0 asignados Ver en GitHub
needs-triage
Lenguaje dominante
TypeScript
Estrellas
4.6k
Forks
299
Merge medio
10 h 23 min
PR fusionados (30 d)
535

Descripción

## Summary

Follow-up from the #1233 reviews (merged). The divergence chrome-filter **over-filtering** live-evidence requirement (does the filter wrongly *drop* legit app/actionable controls?) could not be produced end-to-end with the current RN test-app, because the fixtures don't create the states the exemptions target. These are test-fixture gaps, not product bugs — capturing them so the over-filtering guards can be validated on the production divergence route rather than unit-only.

## Fixture gaps

**1. Short-content screen with a focused input + app control (iOS "accessory survives *within 20 refs*").**
The accessory buttons survive `collectSettleChromeRefs` (verified on a real device tree), but the `field-accessory-input` lives at the bottom of the dense Checkout form, so in a live `get`/`is`/`wait` divergence the app controls ahead of it fill the `SCREEN_REF_CAPTURE_LIMIT` (20) and the accessory is truncated by the cap, not by filtering. A minimal screen (one focused field + a couple of app-owned controls, well under 20 interactive nodes) would let a divergence payload actually show the app-owned control retained within 20 with the keyboard up.

**2. Native-UIKit `inputAccessoryView` hosted inside the keyboard window (iOS geometric exemption).**
RN's `` renders in a **separate window** from `UIRemoteKeyboardWindow`, so the whole-window keyboard classifier never sweeps it — meaning the geometric exemption `collectKeyboardAccessoryIndexes` (the actual over-filter guard, which keeps a control whose center sits above the keyboard container's top edge *inside the keyboard window*) is never exercised by any RN fixture. A native accessory-view fixture (a small UIKit host, or an Expo config-plugin/native module that sets a real `inputAccessoryView` on a `UITextField`) is required to exercise that exemption live. It stays unit-covered otherwise.

**3. A runtime-permission action (Android permission dialog surviving the filter).**
The test-app declares no dangerous runtime permission, so there is no permission dialog to raise. A screen that requests one (e.g. camera/mic via `expo-camera`/`expo-av`) would let a divergence capture a `com.google.android.permissioncontroller` dialog surviving the Android settle-chrome filter (foreign-package dialogs are kept by design). Note the *actionable-`com.android.systemui`* survival case is separately blocked by #1251 (systemui classification is inert in the non-raw divergence capture until that lands).

## Why it matters

With these fixtures, the over-filtering live cases the #1233 reviews asked for become producible on the real divergence route, closing the gap between "unit-covered + reasoned structurally absent for RN" and "device-facing evidence". Lower priority than #1251 (which is a real product bug); this is test-infrastructure.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza en la ruta actual de divergencia entre test-app y production de RN, localizando collectSettleChromeRefs, collectKeyboardAccessoryIndexes y SCREEN_REF_CAPTURE_LIMIT. Añade fixtures para una pantalla corta con un input enfocado, un inputAccessoryView nativo de UIKit y un diálogo de permisos en tiempo de ejecución, utilizando los enfoques indicados en el issue. La tarea estará terminada cuando las capturas de divergencia en vivo ejecuten las protecciones contra el filtrado excesivo, mientras la cobertura de unit tests existente permanece intacta.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
android, ios, react-native, typescript
Área
mobile, testing
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
55/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.