96 lines
5.2 KiB
Markdown
96 lines
5.2 KiB
Markdown
# Archive Report: android-auto-eq-presets
|
|
|
|
**Date**: 2026-07-19
|
|
**Change**: android-auto-eq-presets
|
|
**Status**: ARCHIVED - VERIFIED PASS
|
|
**Commit**: 90cd232 on main
|
|
|
|
## Summary
|
|
|
|
The android-auto-eq-presets change has completed all phases (proposal → spec → design → tasks → apply → verify) with a PASS verdict (0 CRITICAL, 0 WARNING, 0 SUGGESTION). The change adds a browsable `Ecualizador` folder to the Android Auto media tree, exposing the 6 fixed EQ presets as selectable items without interrupting playback. Implementation spans 3 files with 346 changed lines (339 insertions + 7 deletions), all covered by strict TDD (46/46 tests passing). Delta spec requirements have been merged into the base `openspec/specs/android-auto-media/spec.md`. The original change folder has been archived to `openspec/changes/archive/2026-07-19-android-auto-eq-presets/` and the source folder deleted.
|
|
|
|
## Artifacts Preserved
|
|
|
|
| Artifact | Location | Type |
|
|
|----------|----------|------|
|
|
| Proposal | `archive/2026-07-19-android-auto-eq-presets/proposal.md` | Requirements intent and scope |
|
|
| Design | `archive/2026-07-19-android-auto-eq-presets/design.md` | Architecture, 6 ADRs, integration points |
|
|
| Tasks | `archive/2026-07-19-android-auto-eq-presets/tasks.md` | 5 phases, 21 tasks (all complete) |
|
|
| Apply Progress | `archive/2026-07-19-android-auto-eq-presets/apply-progress.md` | TDD cycle evidence, 3 files modified |
|
|
| Verify Report | `archive/2026-07-19-android-auto-eq-presets/verify-report.md` | Test execution, spec compliance, 0 issues |
|
|
| Delta Spec | `archive/2026-07-19-android-auto-eq-presets/specs/android-auto-media/spec.md` | Original change-scoped spec delta |
|
|
|
|
## Base Spec Merge
|
|
|
|
**File**: `openspec/specs/android-auto-media/spec.md`
|
|
|
|
**Changes**:
|
|
1. **Modified "Browsable Media Tree" requirement** (line 63):
|
|
- Root folder count updated from 3 to 4 (added `Ecualizador`)
|
|
- Updated scenario "Car requests the root" to return 4 folders instead of 3
|
|
- Updated requirement description to reference EQ folder and preset behavior
|
|
|
|
2. **Added "EQ Preset Browsable Folder" requirement** (new):
|
|
- 6 fixed presets exposed as playable items in `Ecualizador` folder
|
|
- Distinct `eq_preset:<nombre>` media-id scheme
|
|
|
|
3. **Added "EQ Preset Selection Applies Without Disturbing Playback" requirement** (new):
|
|
- Branch in `playFromMediaId` intercepted BEFORE `emisora:`/`grupo:` routing
|
|
- No `playMediaItem` call, no `mediaItem` mutation
|
|
- Three scenarios: preset while playing, preset while stopped, unknown/stale id
|
|
|
|
4. **Added "EQ Preset Persistence and Phone/Car Parity" requirement** (new):
|
|
- Preset applied from car persists as principal preset
|
|
- Eventual phone/car parity via SharedPreferences
|
|
- Two scenarios: car-to-phone, phone-to-car parity
|
|
|
|
5. **Added "Active Preset Indication (Optional)" requirement** (new):
|
|
- Optional visual marker via title-text convention
|
|
- Explicitly allows out-of-scope scoping (ADR-6)
|
|
- Two scenarios: with marker, without marker
|
|
|
|
## Implementation Evidence
|
|
|
|
**Files Modified**:
|
|
- `lib/servicios/navegacion_auto.dart` — 94 insertions (const, functions, tree builder)
|
|
- `lib/servicios/servicio_audio.dart` — 26 insertions (handler wiring)
|
|
- `test/servicios/navegacion_auto_test.dart` — 226 insertions (15 new test cases, 46/46 passing)
|
|
|
|
**Test Results**:
|
|
- `navegacion_auto_test.dart`: 46/46 passing (34 pre-existing + 12 new test blocks)
|
|
- Regression check: `estado_radio_test.dart` (favorite-groups shared surface): 22/22 passing
|
|
- Load-bearing invariant verified: preset tap structurally cannot reach `playMediaItem`
|
|
|
|
**Design Adherence**:
|
|
- All 6 ADRs (ADR-1 through ADR-6) verified in live code
|
|
- Headless-safe persistence via `ServicioEcualizador.guardarPrincipal` (SharedPreferences)
|
|
- Per-station preset override gate mirrored from `cambiarPresetPrincipal`
|
|
- Active-preset marker scoped out per ADR-6 (no partial/stale implementation)
|
|
|
|
## Verification
|
|
|
|
**Verdict**: PASS (0 CRITICAL, 0 WARNING, 0 SUGGESTION)
|
|
|
|
**Coverage**:
|
|
- Completeness: All 21 tasks verified complete
|
|
- Test execution: Independently re-run (46/46 navegacion_auto, 22/22 regression)
|
|
- Structural invariants: Signature-enforced non-playback guarantee
|
|
- Spec compliance: All 5 spec requirements mapped to code
|
|
- Design coherence: All ADRs traced against implementation
|
|
|
|
**Deviations identified and verified harmless**:
|
|
1. `servicio_ecualizador.dart` import added (required for instantiation, task-description omission only)
|
|
2. `playFromMediaId` restructured to single outer try/catch (functionally inert for pre-existing paths, required for spec exception safety)
|
|
|
|
## Archive Integrity
|
|
|
|
**Source deletion**: Original `openspec/changes/android-auto-eq-presets/` directory has been deleted. No files remain in the change folder; all artifacts are archived in `openspec/changes/archive/2026-07-19-android-auto-eq-presets/`.
|
|
|
|
**Engram memory**: Archive report saved to engram topic `sdd/android-auto-eq-presets/archive-report` with full observation ID for traceability.
|
|
|
|
## Next Steps
|
|
|
|
- Change is complete and closed.
|
|
- No follow-up work required (ADR-6 scoping decision on active-preset marker is intentional; revisit only if reliable tree-refresh trigger is added).
|
|
- Merged base spec is ready for team use and future changes.
|