Files
FreeTLab bccc5c48b8
Build & Deploy PluriWave / Análisis de código (push) Successful in 38s
Build & Deploy PluriWave / Build APK + AAB release (push) Successful in 2m30s
docs(openspec): add SDD artifact trail for recent alarm and EQ changes
Persist the exploration, proposal, spec, design, tasks, and
verify/archive reports produced during the multi-device EQ,
alarm-countdown, and notification-visual-polish SDD cycles.
2026-07-04 12:42:11 +02:00

4.7 KiB

Verify Report: EQ Device Auto-Switch UX

Change: eq-device-autoswitch-ux
Date: 2026-06-28
Verdict: PASS WITH WARNINGS


Build / Test Evidence

Check Result
flutter test 223 tests — ALL PASS
flutter analyze No issues found

Task Completeness

Phase Status Notes
1 Service layer COMPLETE All [x]
2 State layer COMPLETE All [x]
3 UI layer PARTIAL 3.3 and 3.9 deferred
4 L10n PARTIAL ARBs written for only 6 of 13 locales
5 Cleanup COMPLETE All [x]

Spec Compliance Matrix (18 scenarios)

Startup device initialization

Scenario Test Status
Correct preset at startup — device known 2.1 PASS
First-seen device bootstrapped at startup 2.2 PASS
obtenerDispositivoActual() fails gracefully 2.3 PASS
Toggle off — no device query at startup 2.4 PASS

Device name persistence

Scenario Test Status
Rename persists across restarts 1.2 + 1.3 PASS
Rename is immediately readable 2.6a PASS
Empty name is not persisted 2.6b PASS
Feature toggle off — no name storage NO TEST FAIL

Display name fallback chain

Scenario Test Status
Custom name wins over platform name 2.8a PASS
Platform name used when no custom name 2.8b unit test PASS (unit only)
Device ID used as last resort 2.8c PASS

Connection status indicator

Scenario Test Status
Active device shows green indicator 3.1 PASS
Indicator updates after device change Implicit only PARTIAL
No indicator when toggle is off 7.1-A PASS

Device edit modal

Scenario Test Status
Modal opens on device row tap 3.2 PASS
Rename confirmed in modal persists 3.6 PASS
EQ changes in modal apply to device preset NO TEST FAIL
Modal dismiss without save leaves state unchanged 3.7 PASS
Modal is scrollable (small screen) DEFERRED UNTESTED

Design Compliance

ADR Implemented
Bug fix via obtenerDispositivoActual() after subscription YES
SP key eq_nombres_dispositivos_v1 YES
nombresDispositivos field in ConfiguracionEcualizador YES
renombrarDispositivo, obtenerNombreDispositivo, nombreVisible YES
showModalBottomSheet with showDragHandle+isScrollControlled YES
Green connection dot per row YES
Fallback chain in state, not UI YES
cambiarPresetDispositivo convenience method (data flow diagram) NO — not implemented

Issues

CRITICAL

CRITICAL-1: Toggle-off no-op for rename not implemented
Spec: when eqMultiDeviceEnabled is false, renombrarDispositivo MUST be a no-op.
Code: no guard on _eqMultiDeviceEnabled in renombrarDispositivo (estado_ecualizador.dart line 314).
No test for this scenario.

CRITICAL-2: EQ changes in modal do NOT persist to device preset
Spec: EcualizadorWidget changes MUST be saved to presetsDispositivo[deviceId].
Code: onCambio only calls setState on local _presetActual; _guardar() only calls renombrarDispositivo.
No public cambiarPresetDispositivo on EstadoEcualizador. EQ edits are silently discarded on confirm.
Files: pantalla_ajustes.dart lines 857-860 and 892.
No test for this scenario.

WARNING

WARNING-1: Platform name fallback (level-2) unreachable from device list UI
FilaDispositivo calls eq.nombreVisible(deviceId, '') with empty platform name.
DispositivoAudio.nombre is not passed to the widget. Level-2 fallback is effectively dead code in the UI.
File: pantalla_ajustes.dart line 769.

WARNING-2: L10n incomplete — 7 of 12 non-template locales missing translations
Missing eqDevice* keys in: app_pt.arb, app_it.arb, app_ja.arb, app_zh.arb, app_ru.arb, app_bn.arb, app_id.arb.
Generator falls back to Spanish. App does not crash but shows Spanish copy in those locales.

WARNING-3: FakeServicioEcualizador.guardarPrincipal and guardarActivo drop nombresDispositivos
Both methods reconstruct _config without nombresDispositivos, silently resetting it to empty.
Hidden test infrastructure defect. File: test/helpers/fakes.dart lines 308-329.

SUGGESTION

SUGGESTION-1: Implement task 3.3 scrollability widget test before PR merge.
SUGGESTION-2: Add widget test for connection indicator update after device change.


Final Verdict

PASS WITH WARNINGS — 2 CRITICAL, 3 WARNING, 2 SUGGESTION.
The two CRITICALs are real spec violations: toggle-off no-op for rename is missing, and EQ preset changes in the edit modal are silently discarded. Both must be fixed before archiving.