# Phase 2: App Core + Audio - Discussion Log > **Audit trail only.** Do not use as input to planning, research, or execution agents. > Decisions are captured in CONTEXT.md — this log preserves the alternatives considered. **Date:** 2026-04-03 **Phase:** 02-app-core-audio **Areas discussed:** Choreography format, Audio pipeline, Playback clock, CLI interface **Mode:** auto (all areas auto-selected, recommended defaults chosen) --- ## Choreography File Format | Option | Description | Selected | |--------|-------------|----------| | Pydantic JSON with event list | Structured, validated, sorted events | [auto] | | YAML with event list | More human-readable but slower parsing | | | SQLite database | Overkill for file-based storage | | **User's choice:** [auto] Pydantic-validated JSON (recommended default) --- ## Audio Pipeline | Option | Description | Selected | |--------|-------------|----------| | Separate threads (miniaudio + sounddevice) | Clean isolation, no device contention | [auto] | | Single thread with multiplexing | Complex, potential blocking | | | Subprocess for audio | Over-engineered for this use case | | **User's choice:** [auto] Separate threads with call_from_thread bridge (recommended default) --- ## Playback Clock | Option | Description | Selected | |--------|-------------|----------| | Absolute monotonic timestamps | No drift, correct after pause/resume | [auto] | | Relative sleep chains | Simple but drifts 100-200ms/minute | | | Hardware timer | Overkill for Pi | | **User's choice:** [auto] Absolute monotonic timestamps (recommended default) --- ## CLI Interface | Option | Description | Selected | |--------|-------------|----------| | Simple asyncio REPL | Lightweight, disposable | [auto] | | Click/Typer CLI | Over-engineered for testing | | | No CLI (scripts only) | Less interactive | | **User's choice:** [auto] Simple asyncio REPL (recommended default) --- ## Claude's Discretion - Python package structure, asyncio task organization, Pydantic details, aubio config ## Deferred Ideas None