Skip to content

Releases: codenogo/dkompos-releases

Dkompos 1.6.6

Choose a tag to compare

@codenogo codenogo released this 30 Jul 23:31
b78ee86

Dkompos 1.6.6

Dkompos 1.6.6 is a focused compatibility hotfix for AAC/M4A files authored by
older iTunes tooling. It keeps the Symphonia 0.6 fidelity and allocation
hardening shipped in 1.6.5 while closing an ISO-MP4 metadata-padding regression.

Fixed

  • AAC/M4A files with zero-filled free or skip padding inside their iTunes
    metadata list now open and decode normally.
  • Dkompos no longer mistakes those padding atoms for metadata tag containers,
    which previously surfaced as isomp4: unknown size atom has sized parent.
  • The change is deliberately narrow: Symphonia 0.6's strict size and parent
    boundary checks remain in force for malformed nested atoms.

Compatibility evidence

The regression gate rewrites an existing AAC/M4A fixture in memory so its first
metadata entry becomes an equal-sized, zero-filled free atom. This preserves
all container sizes and media offsets while reproducing the affected iTunes
layout; the resulting file must open and decode completely.

The candidate also decoded every track in the reported 12-file AAC/M4A album
with zero wrapper-versus-direct-Symphonia sample mismatches. Formatting,
warnings-as-errors Clippy, the complete workspace target suite, allocation
hardening tests, generated Swift bindings, the arm64 Rust bridge, and native
Swift compilation/linking all pass.

Unchanged constraints

  • Symphonia 0.6's ISO-MP4 reader still does not expose authored chapters in the
    migration M4B fixture; Dkompos uses its honest chapterless fallback there.
  • A single packet or metadata value above the 64 MiB security budget remains
    rejected rather than risking process-wide memory exhaustion.
  • Local Symphonia patches remain until upstream releases provide equivalent
    allocation hardening, RIFF metadata retention, and iTunes padding handling.

Dkompos 1.6.5

Choose a tag to compare

@codenogo codenogo released this 30 Jul 18:17
b78ee86

Dkompos 1.6.5

Dkompos 1.6.5 upgrades the native audio engine to Symphonia 0.6 while keeping
the release boundary conservative: decoded fidelity is proven against pinned
oracles, transparent-output admission fails closed, and hostile container
lengths are bounded before they can reach the allocator.

Symphonia 0.6 without silent fidelity drift

  • The decoder, probe, packet, timing, seek, metadata, chapter, and EOF paths now
    use Symphonia 0.6.0 through one resolved dependency generation.
  • Lossless transparent routes are admitted only for FLAC, ALAC, and linear PCM.
    Unknown codecs and ADPCM variants remain on the processed path instead of
    inheriting an unsafe bit-depth assumption.
  • MP3 decoded-direct admission uses Symphonia's codec identifier rather than a
    display name that could drift independently of routing policy.
  • ALAC source precision is recovered from the standard magic cookie because
    Symphonia's decoded I32 container does not itself identify the original bit
    depth.
  • Clean EOF is distinct from truncated input. A damaged WAV, FLAC, or M4A now
    fails as a decode error instead of being accepted as a short successful file.

Deterministic compatibility evidence

The checked-in corpus covers PCM16 WAV, AIFF, and CAF; PCM24 WAV; IMA and
Microsoft ADPCM; FLAC16 and FLAC24; ALAC16; CBR and VBR MP3; AAC in MP4 and
ADTS; and Vorbis in Ogg and Matroska.

Transparent WAV samples are parsed independently of Symphonia and pinned as
canonical SHA-256 streams. AIFF, CAF, FLAC, and ALAC must decode to those exact
samples. The decoded-direct MP3 I32 stream is pinned separately, and every
corpus file must produce non-empty output with zero wrapper-versus-direct
sample mismatches.

Metadata, chapters, and library scanning

  • Typed Symphonia metadata is mapped into Dkompos without stringly typed
    fallbacks for track/disc totals, ReplayGain, BPM, musical key, artwork, and
    audiobook fields.
  • A focused local RIFF patch retains LIST/INFO metadata that Symphonia 0.6.0
    parses but otherwise drops when constructing its WAVE reader.
  • Authored ID3 chapters retain their titles and boundaries. Truly chapterless
    audio still receives the duration-based fallback used by Dkompos audiobooks.
  • .mka participates in automatic music discovery. .mkv remains available
    for explicit decoding but is excluded from recursive music scans so video
    extras do not pollute the catalogue.
  • Startup scans aggregate imported, unchanged, unreadable, and pruned counts;
    routine candidate probes no longer flood the bounded application log.

Allocation hardening for untrusted media

Symphonia issue #539 reports eight attacker-controlled allocation paths through
the shared ReadBytes::read_boxed_slice{,_exact} helpers, including petabyte
requests that unconditionally terminate a panic = "abort" process.

Dkompos carries a source-audited Symphonia Core patch that caps each boxed read
at 64 MiB and reserves memory fallibly. Oversized values fail with
InvalidData before input is consumed; reservation failure becomes
OutOfMemory instead of a process abort. No enabled Symphonia 0.6 reader
overrides the protected helpers.

The eight reported allocation magnitudes run in isolated child processes under
the optimized release profile. The upstream crafted byte sequences remain
private, so the release proof combines those dynamic boundary tests with a
static audit that every reported format path reaches the guarded methods.

Known constraints

  • Symphonia 0.6's ISO-MP4 reader does not expose the authored chapters in the
    migration M4B fixture; Dkompos uses its honest chapterless fallback there.
  • A single packet or metadata value above the 64 MiB security budget is
    rejected. This may reject pathological embedded artwork, but it cannot take
    down the application.
  • The local Symphonia patches remain until an upstream release provides
    equivalent allocation hardening and RIFF metadata retention.

Qualification

The candidate passed formatting, locked all-target Rust compilation, warnings-
as-errors Clippy, the complete workspace suite, fixture checksum verification,
the 17-file wrapper-parity corpus, release-profile hostile-length tests,
generated UniFFI binding regeneration, an arm64 bridge build, native Swift
compilation/linking, application launch, and clean startup diagnostics.

Hosted full-Xcode XCTest did not execute: GitHub Actions failed before creating
any job steps, and the local machine has Command Line Tools but no XCTest
framework. At the owner's explicit direction, publication proceeded through
the documented local release path. Apple accepted the separately submitted app
and DMG, and both artifacts passed Developer ID signature verification,
stapling, Gatekeeper assessment, and published SHA-256 verification. Hosted
full-Xcode confirmation remains open release debt.

Dkompos 1.6.4

Choose a tag to compare

@codenogo codenogo released this 29 Jul 20:26
b78ee86

Dkompos 1.6.4

Dkompos 1.6.4 is a reliability and refinement release. It makes automatic exact-output transitions deterministic, removes the competing motions that could make Home scrolling feel sticky, and applies the existing visual language consistently across the full native macOS application.

Exact-output transitions that finish cleanly

  • Direct routes now pass through an ordered prepare, coordinate, register, start, verify, release, and recovery lifecycle.
  • A replacement cannot begin until the outgoing route has finished restoring and the device is quiescent.
  • CoreAudio formats are read before they are written. Dkompos changes only a format that differs, waits for convergence, and reserves repeated alternating writes for drivers that demonstrably need that escalation.
  • Registration and post-registration recovery never rewrite device formats beneath an actively rendering callback.
  • Lifecycle watchdogs follow forward progress instead of applying one coarse deadline that can destroy a route moments after it becomes healthy.
  • Recovery distinguishes a route that did not converge from a temporarily detached device or a restoration that is still in progress.

These changes preserve strict verification: Dkompos shows Bit-Perfect only after the active route proves non-mixable integer formats, exact native rate, exclusive ownership, callback liveness, and an unchanged render contract. If that proof cannot be maintained, the app uses the configured processed fallback honestly rather than weakening the claim.

Reliable queue advance across format boundaries

Natural completion and manual queue movement now use the same supervised transition rules. In particular, constant-rate changes such as 24-bit to 16-bit at 44.1 kHz no longer expose a restore-versus-coordinate race. Same-route handoffs remain efficient, while an incompatible render contract performs a safe, fully verified rebuild.

Smooth motion without changing the design

The release keeps the existing charcoal, content-first interface and improves its geometry and behaviour across the whole app:

  • Home scrolling no longer competes with carousel correction, feedback-banner, or shell-column animation.
  • Sidebar and queue transitions remain stable while collections, tables, settings, search, playlists, audiobooks, Now Playing, and DJ surfaces share consistent sizing and alignment rules.
  • Hover, focus, selection, and active-playback states use paint-only feedback so layout does not jump.
  • Collection grids derive their columns and spacing from shared responsive metrics.
  • Reduced Motion is honoured by shell, navigation, collection, artwork, feedback, and control transitions.

Accessibility and application structure

  • Keyboard focus, VoiceOver names, accessibility identifiers, cursor feedback, text scaling, and localised strings are more consistent across primary flows.
  • Navigation restoration and shell presentation have dedicated regression coverage.
  • The largest library and application-core modules are now split into focused internal components, making future work safer without changing their public contracts.
  • Native persistent logging records bounded playback and route evidence for post-session diagnosis.

Qualification

The candidate is gated by Rust formatting, locked all-target compilation, warnings-as-errors Clippy, the complete Rust workspace suite, generated UniFFI binding drift verification, native Swift tests, release-mode application assembly, Developer ID signing, Apple notarisation, stapling, Gatekeeper assessment, and published checksums. Automatic queue advance and exact-output route replacement were also exercised against a physical Chord Mojo 2, including a constant-rate 24-bit-to-16-bit transition.

Dkompos 1.6.3

Choose a tag to compare

@codenogo codenogo released this 21 Jul 19:37
b78ee86

Dkompos 1.6.3

Dkompos 1.6.3 is a focused interaction-quality release. It makes the native macOS shell, collection navigation, artwork, tabs, and long pages feel continuous instead of rebuilding or reflowing around each click.

Drawers that behave like real desktop columns

  • The full sidebar and compact icon rail are persistent presentations of the same navigation column.
  • At normal desktop widths, collapsing the sidebar reclaims space for the content and opening the queue allocates a sibling column; neither panel overlays Home.
  • Narrow windows retain intentional off-canvas panels with a scrim and explicit dismissal.
  • Sidebar and queue contents stay mounted at their final width while a lightweight clipped allocation animates, preventing repeated text, artwork, and list measurement.
  • Rapid open/close reversals preserve motion velocity and the queue restores correctly after expanded Now Playing closes.

Collections without the click flash

Albums, Hi-Res, Artists, and Genres now use store-owned browse snapshots. Their last complete projection, filter, sort, readiness, and scroll anchor survive disposable route views. Refresh work happens asynchronously and replaces visible results only after the new projection is complete.

Clicking the active sidebar destination is a genuine no-op, so it no longer republishes the whole workspace. Album, artist, genre, and artwork caches also provide a synchronous warm path on first paint, avoiding the placeholder frame that previously appeared before each route task restarted.

Stable scrolling and tabs

  • Home shelf width changes are debounced at the Home boundary, and carousels no longer issue competing scroll corrections during a drawer transition.
  • Feedback-banner motion is scoped to its overlay instead of entering the Home scroll transaction.
  • Album detail keeps warm tracks and album metadata visible while current data refreshes, and its artwork atmosphere resolves without disturbing layout.
  • Genre Albums and Tracks share one stable header and viewport. The peer contents cross-fade while the native track table explicitly opts out of the SwiftUI animation transaction.
  • Queue sections own one vertical layout, preventing current-track and upcoming rows from overlapping when playback snapshots update.

Quieter visual feedback

Shared motion tokens now cover panels, tabs, active rows, and artwork atmosphere with reduced-motion support. Active rows use paint-only cues, and cards retain the borderless treatment throughout hover, focus, and selection.

Development and release identity

Development builds are now visibly named Dkompos Dev, use the ai.dkompos.mac.dev bundle identifier, and live at DkomposMac-Dev.app. Release builds remain Dkompos, ai.dkompos.mac, at DkomposMac.app. Launch and visual-capture scripts target the exact executable path, preventing validation from opening or terminating a different build.

Qualification

The candidate passed Rust formatting, locked all-target compilation, warnings-as-errors Clippy, the complete Rust workspace suite, an arm64 production bridge rebuild, generated Swift binding drift verification, native application compilation/linking, release-mode bundle assembly, Developer ID signing, Apple notarisation, stapling, Gatekeeper assessment, and checksum verification. The local Swift XCTest target requires full Xcode and was unavailable on the Command Line Tools-only release machine; that environment gate is recorded separately from the successful native app build and manual interaction validation.

Dkompos 1.6.2

Choose a tag to compare

@codenogo codenogo released this 19 Jul 22:37
b78ee86

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.

Dkompos 1.6.1

Choose a tag to compare

@codenogo codenogo released this 18 Jul 02:04
b78ee86

Dkompos 1.6.1

Dkompos 1.6.1 is the largest native macOS release so far. It rebuilds the listening experience around trustworthy playback, stable recommendations, and a quieter charcoal interface that keeps the music—not the chrome—at the centre.

Highlights

A more alive, consistent native interface

  • One charcoal, content-first design language now runs through Home, All Tracks, Albums, Artists, Genres, Hi-Res, Mixes, Audiobooks, playlists, and Now Playing.
  • Scrolling, card density, compact headers, artwork treatment, utility controls, and selection states now behave consistently across the application.
  • Decorative gradients, card-border highlighting, duplicated subtitles, and view-specific player variations have been removed.
  • The global player remains structurally identical in every view and now responds immediately to seeking and volume dragging.

Listening intelligence rebuilt for stability

  • Home shelves are now based on explicit eligibility and deterministic ordering rather than timing-sensitive suppression.
  • “More like this” uses album similarity confidence, edition collapsing, artist and genre evidence, and stable sparse-library fallbacks.
  • Listening statistics and top-artist summaries use canonical artist identities and real playback evidence.
  • Continue Listening advances to the actual next album track and no longer wraps or jumps based on stale history.

Qualified playback and signal-path truth

  • Playback admission now uses live CoreAudio device and stream evidence.
  • Direct-integer and processed routes have explicit preparation, activation, handoff, recovery, and device-restoration states.
  • Bit-perfect status is shown only when the source, device container, ownership, and signal path are all proven compatible.
  • Output-device disappearance and ambiguous processed-output identities now recover without leaving playback unusable.

Now Playing and playlists matured

  • Now Playing is responsive, album-led, and includes album identity alongside track and artist context.
  • Recommendation reasoning is integrated without a large disconnected “Why this track” card.
  • Playlist identity, artwork mosaics, compact scroll headers, and queue-open layouts now remain stable.
  • Reordering is an explicit mode with drag handles and Move Earlier/Move Later actions.

Music and audiobooks stay in their lanes

  • Audiobook playback no longer enters the music queue or music recently played history.
  • Audiobook progress, chapters, bookmarks, and continuation context remain preserved.
  • Music history updates reliably and follows the active music transport.

Distribution

  • Apple silicon only.
  • Requires macOS 14 or later.
  • Distributed as a Developer ID signed and Apple-notarised DMG and ZIP.
  • SHA256SUMS is included with the release assets.

Full release notes and checksums are also available at dkompos.com/releases.html.

Dkompos 1.6.0

Choose a tag to compare

@codenogo codenogo released this 18 Jul 02:04
b78ee86

Dkompos 1.6.0 unifies the native macOS listening experience and rebuilds the core library flows around a calmer, content-first hierarchy.

  • Rebuilds album, artist, genre, playlist, and audiobook pages with clearer playback context.
  • Unifies music and audiobook playback in the global playbar and Now Playing rail.
  • Adds richer Home discovery shelves, listening fingerprint summaries, and paged navigation.
  • Adds native queue actions and clearer row-level playback controls.
  • Keeps waveform, queue, and sequence context synchronized across track changes.
  • Simplifies Settings and improves keyboard and VoiceOver behavior.
  • Ships the refined macOS application and menu icon.
  • Signed, notarised, stapled, and Gatekeeper-validated.

Notarization:

  • App submission: fec80696-fc1c-402c-ad93-5a3fdda44399
  • DMG submission: 8c7f4e85-b288-4913-999c-031e16b88ef9

SHA-256:

  • Dkompos_1.6.0_aarch64.dmg: 7d08e2e1f16403d415bfbd2fbb1c247dbfb110f8d73b6fcc1d43c963fac0d1cb

Dkompos 1.5.9

Choose a tag to compare

@codenogo codenogo released this 18 Jul 02:04
b78ee86

Dkompos 1.5.9 fixes audiobook import routing, repairs album classification, tightens the native macOS music UI, and improves playback control feedback.

  • Adds native audiobook folder and file import actions backed by the audiobook import pipeline.
  • Keeps audiobook folder imports out of the music-library scanner.
  • Classifies only album-shaped music releases in Albums, genre albums, artist albums, and Hi-Res album views.
  • Refines home shelves, search, album detail spacing, genre cards, and player controls toward a calmer Spotify-like pattern.
  • Removes default blue focus borders and oversized or duplicated play controls from library surfaces.
  • Makes scrubber and volume click or drag feedback move immediately from the clicked position.
  • Updates the macOS app icon assets for the 1.5.9 package.
  • Ships signed, notarised, stapled, and Gatekeeper-validated Apple Silicon DMG.

Notarization:

  • App submission: 6235805c-a61c-4778-8231-8b22e76fe00b
  • DMG submission: 7c5efa72-38a0-4dad-858c-cfbfdd8b174c

SHA-256:

  • Dkompos_1.5.9_aarch64.dmg: 656ac2cc41d4c82e84986baa55535f7233a47edcf5bdb7e384e03922ec823c1a

Dkompos 1.5.8

Choose a tag to compare

@codenogo codenogo released this 18 Jul 02:03
b78ee86

Dkompos 1.5.8 fixes native macOS visual state regressions from the 1.5.7 QA pass.\n\n- Removes the default macOS focus ring from artist cards so focused artists no longer look selected or playing.\n- Refreshes reused album/detail track rows from the actual pointer position so hover backgrounds do not stick to unrelated rows.\n- Ships signed, notarised, stapled, and Gatekeeper-validated Apple Silicon DMG.\n\nNotarization:\n- App submission: dd6c3ea6-5fc8-4a6e-81b3-59b061d861c7\n- DMG submission: af7f39bb-0596-4cac-a925-1c49bfb5cc78\n\nSHA-256:\n- Dkompos_1.5.8_aarch64.dmg: bab6abbf8f9bb4c716116368158fd649d5cef0ce0510e6fce62f38fe7fb69369

Dkompos 1.5.7

Choose a tag to compare

@codenogo codenogo released this 18 Jul 02:03
b78ee86

Dkompos 1.5.7 public website download, rebuilt from commit 13fd4cfeb with the first-run library onboarding fix.\n\nHighlights:\n- Opens the per-user macOS Application Support library database on first launch.\n- Adds a direct Add Music Folder onboarding flow for empty libraries.\n- Suppresses first-run 'library is not open' notices and avoids leading with all-disabled mood cards before analysis is ready.\n- Includes the installed-app resource lookup and clean transparent app icon fixes.\n\nNotarization:\n- App notarization accepted: 269a41f5-13db-4749-a58e-c80107089990\n- DMG notarization accepted: 4296f056-895c-474e-b420-a2a1452a24ab\n- Stapling and Gatekeeper validation passed for both app and DMG.\n\nSHA-256:\n- Dkompos_1.5.7_aarch64.dmg: 992d857ce031609c5bdf305712d95e1aeffd35f14f50072eafc096b7f9479109