Saltar al contenido
Development

Un reporte de bug de filtro que se convirtió en tres issues separados

Por Victor Da Luz
iosswiftswiftuidev-logdeep-cut-atlas

El reporte era simple: “los ajustes del filtro de playlist no se están aplicando.” Rastreé toda la cadena antes de asumir nada, desde la pantalla de Settings hasta el view model y hasta el renderizado real de la lista, y cada eslabón se sostenía. Una única instancia compartida de SettingsStore, un passthrough de getter/setter en vivo, una propiedad filtrada genuinamente calculada (no cacheada), y la vista de lista leyendo la propiedad filtrada, no la cruda. Sobre el papel, no había nada mal.

Entonces miré la pantalla real en lugar de seguir leyendo código. No era la lista de Playlist de nivel superior en absoluto, era la sección de sugerencias “More from artist” dentro de la hoja de detalle del álbum, una barra de filtro separada que había construido en una sesión anterior con un comentario que decía, en tantas palabras, “esto es intencionalmente independiente del filtro propio de la pestaña.” Correcto según el diseño, incorrecto según la experiencia.

Esa distinción importó para lo que vino después. No simplemente conecté el filtro independiente al principal y lo di por arreglado, eso habría revertido en silencio una decisión deliberada anterior. Me senté con las dos opciones obvias, unificarlos o mantenerlos separados, y la respuesta resultó no ser ninguna de las dos: mantenerlos independientes, pero darle al independiente su propio valor por defecto dedicado en Settings en lugar de un “mostrar todo” fijo en el código. Un tercer camino que el planteamiento original ni siquiera ofrecía, y el correcto.

La implementación fue pequeña: un Set<RecordingType> persistido más en SettingsStore siguiendo exactamente el mismo patrón que ya usaban los otros dos, una nueva sección en Settings, y un init personalizado de SwiftUI para que el filtro @State local de la sección se inicializara desde el nuevo valor por defecto en lugar de un literal fijo, y que siguiera siendo local después de eso, para que los cambios dentro de la hoja no se filtraran de vuelta a Settings. Lo verifiqué en el simulador con automatización de UI en lugar de confiar sin más: puse el nuevo valor por defecto en solo álbumes, abrí una hoja de sugerencias nueva, confirmé que empezaba filtrada; activé un chip dentro de la hoja, volví a Settings, confirmé que el valor por defecto no se había movido.

De un solo reporte de bug salieron tres issues, y solo uno de ellos era en realidad un bug en el sentido que planteaba el reporte. Los otros dos eran una condición de carrera intermitente y una decisión de alcance, y tratarlos como tres cosas separadas en lugar de meter los arreglos en el issue que estuviera abierto en ese momento mantuvo a cada uno honesto sobre lo que realmente era.

Lecturas relacionadas