Dkompos 1.6.2
Dkompos 1.6.2
Dkompos 1.6.2 consolidates playback, Home recommendations, artwork loading, and large-library behaviour around explicit ownership and bounded work. It is primarily a reliability and performance release.
One authoritative playback lifecycle
- Music and audiobooks now use the same managed supervisor for preparation, activation, pause/resume, seek, source replacement, completion, failure, and route recovery.
- Audiobooks retain their own progression, history, and queue context. They never enter the music queue or music listening evidence.
- The coherent supervisor snapshot is the only source of listening truth. Source identity, transport state, position, active route, and fidelity evidence are published together.
- Realtime atomics remain only where decoder and CoreAudio callbacks require lock-free mechanics; they no longer compete with the supervisor as product state.
- Stop, device transfer, route failure, and recovery explicitly publish their resulting state instead of relying on compatibility inference.
Output changes without restarting playback
The runtime now treats hardware topology changes as supervised route events. A supported DAC or Bluetooth default-output change rebuilds the selected device and stream runtime, transfers the active source, and preserves the latest playback intent. Removal follows the configured processed-route policy without requiring an app restart or a different track.
Automated contracts cover device attachment and removal, Bluetooth default transfer, device and stream handle replacement, rapid transport commands, latest-wins track replacement, seek and playback-rate acknowledgement, exact volume dragging, and fidelity-route transitions. An opt-in physical-hardware harness exercises the same lifecycle with a real source and user-driven DAC changes.
Deterministic, observable Home
- Independent Home sources run concurrently and commit in a fixed canonical order.
- A slow source cannot randomly suppress, reorder, or pop another shelf.
- Observation budgets report slow components without discarding completed content.
- Every run exposes stable component identities, timing, input/output counts, and outcomes.
- Candidate-cache persistence runs after the visible snapshot has been published, keeping writes off the interactive load path.
Bounded artwork and large libraries
- Rust artwork extraction and Swift image decoding are capped at four concurrent operations.
- Duplicate image requests are coalesced and batch results retain their original order.
- Album, track, and audiobook artwork groups resolve concurrently without unbounded fan-out.
- Large track libraries retain a bounded LRU window of completed pages while never evicting in-flight requests.
- Offline analysis no longer has a fixed 3 GiB application ceiling. It remains isolated in a disposable, cancellable worker process so a worker failure cannot take down playback or the main application.
Qualification
The candidate gate includes locked all-target Rust compilation, warnings-as-errors Clippy, the complete Rust workspace suite, generated UniFFI drift checking, full-Xcode Swift tests in CI, release-mode app assembly, and an ad-hoc signature verification. The runtime performance profile records Home cold/warm timings and playback endurance memory growth; physical hardware qualification remains an explicit opt-in test because it requires the declared DAC matrix and real connection events.