14 KiB
KJMix Pro 0.6.9 (build 20) — live singer tuning and library pagination
Verified on 5 November 2026.
- Debug build was also verified with
xcodebuildin the normalbuilddirectory. Unfinished DJSystem/DJConsole references added during this work are retained behind the optional KJMIX_DJ_CONSOLE compilation condition, restoring the default build without deleting that pending integration. - Dedicated live Key and Tempo controls beside the main transport identify the performing singer. Both the existing detail controls and a loaded song’s inline tuning controls route live changes to the same performance. Audio effect parameters change without restarting playback.
- Live changes save only to the performing singer/song pair, using playbackSinger rather than the singer being browsed. Other singers, other songs, global defaults and the singer’s saved rating are preserved. Without an assigned performer, adjustments are temporary.
- Library results are paginated at 20 songs per page, with first/previous/next/last controls, page count and matching-song range. Search and sorting operate before pagination. Filtering/sorting resets the page; page navigation clears row selection; Next Song traverses all filtered results and follows the appropriate page. Generate All Library Waveforms continues to use the full library.
- 105 XCTest cases passed, zero failures (
/tmp/kjmix-live-pages-buildfix-tests.log). New cases exercise live playback while browsing another singer, persistence and rating isolation, inline/live routing, temporary unassigned tuning, invalid values and first/middle/last/empty/filtered page boundaries. Prior native UI, import, playback, rotation, metadata and storage tests passed. - The library was rendered at 1320 × 900 with 45 isolated demo entries. The performing singer’s +3 key/95% tempo remained visible while another singer was selected; pagination displayed songs 1–20 and Page 1 of 3.
- Release signing, Apple notarization, stapling and Gatekeeper results are stored under
build-release/release-verification/KJMixPro-0.6.9-macOS/. Only the current DMG is retained indist.
KJMix Pro 0.6.8 (build 19) — Reinterpret Names
Verified on 5 November 2026.
- Advanced → Reinterpret Names follows the active library or playlist selection. Library/playlist context menus and playlist buttons also open the dialog. Song Name and original File Name sources, built-in/custom templates, album/track/artist/title/rendition/ignore fields, repeated fields, folder templates, literal delimiters, em-dash handling and underscore handling are supported.
- All selected songs are checked asynchronously; the first 200 are shown in stable Song ID order. Unmatched rows are reported. Applying a matching subset requires an explicit toggle. Metadata updates use one SQLite transaction and one UI refresh, preserving playlist order and media files.
- Schema 11 adds track number, rendition, original-name/source-path records and persistent undo. The last ten changed batches are retained. Stale previews and undo conflicts roll back atomically rather than overwriting later edits. Ratings, singer preferences, media locations, file tags and playlist memberships are preserved.
- New imports retain original names, including ZIP member paths. Reimporting older sources can backfill missing provenance through duplicate-safe imports; older unchanged ZIPs may be extracted once for this backfill.
- Track and Rendition are visible/sortable in Library, editable in Song Info and searchable with track:/version:/rendition:. Playlist sorting includes Saved Order (PLI), Song ID, Track and Rendition.
- 101 XCTest cases passed, zero failures (
/tmp/kjmix-reinterpret-final-101-tests.log). New tests cover provided template examples, Unicode, punctuation, repeated/ignored fields, rendition, normalization toggles, invalid templates, folder metadata, managed filename fallback, original-name backfill, persisted undo, stale preview/undo rollback and preserved singer/playlist data. A real native mouse click on Apply verified the dialog updates the selected song. - The dialog was rendered in Light appearance with isolated sample metadata. Test-host app storage is isolated from the production library when XCTest supplies its configuration environment.
- Release signing, Apple notarization, stapling and Gatekeeper results are stored under
build-release/release-verification/KJMixPro-0.6.8-macOS/. Only the current DMG is retained indist. - User instructions:
docs/REINTERPRETING.md.
KJMix Pro 0.6.7 (build 18) — external media storage and legacy ZIP filenames
Verified on 4 November 2026.
- Settings → Imported Media Storage provides Choose Import Folder, Move Existing Media and Show in Finder. The selected folder and permission bookmark persist across launches. The database, singer lists, settings and waveform cache remain in the existing local Application Support folder.
- New imports and ZIPs found by folder scans use the selected media folder. An unavailable external drive blocks imports with a reconnect message; no fallback media folder is created on the internal drive.
- Background media moves include previous configured import folders. Each copy is checked with SHA-256 before transactional library-path updates. Original files are removed only after commit. Cancellation, conflicts and copy failures preserve originals; retries reuse verified copies. Song IDs, metadata, singer preferences and list relationships are retained. Managed background-track references are updated too.
- The supplied SF285 ZIP passed its CRC test; macOS unzip failed with exit 50 on a legacy-encoded accented filename despite free disk space. Validated extraction now uses ditto and renames legacy filename components to Unicode before MP3/CDG matching. Raw central-directory names are read directly, including ZIP64 offsets, because zipinfo translates filename bytes. Original ZIPs are unchanged.
- The supplied archive imported all 16 MP3/CDG pairs in an isolated temporary library. No commercial test media was added to the repository or installer. The synthetic legacy-name fixture uses original demo audio and graphics.
- 87 XCTest cases passed, zero failures (
/tmp/kjmix-media-storage-final-tests.log). Coverage includes saved destination/relaunch, media and CDG copies, migration and preference preservation, cancellation/retry, conflicts, missing drives, earlier media folders, background reference updates, corrected legacy filenames and existing import/playback/rotation regressions. - Release signing, Apple notarization, stapling and Gatekeeper results are stored under
build-release/release-verification/KJMixPro-0.6.7-macOS/. Only the current DMG is retained indist.
KJMix Pro 0.6.6 (build 17) — responsive imports and import history
Verified on 4 November 2026.
- File copying, fingerprints, archive extraction and metadata reading now run on a utility worker with its own SQLite connection. Imports show a progress dialog with current file, completed count, imported/skipped totals, cancellation and completion/error feedback. Completed tracks survive cancellation or errors.
- Each source directory is indexed once per batch for companion CDG matching. Archive-to-track history mapping uses direct lookup; progress updates are throttled.
- SQLite schema 10 adds persistent import history. Unchanged sources and archives are skipped on later imports. Audio fingerprints recognise renamed/copied tracks, preserving existing metadata and singer preferences. Changed audio/graphics are rechecked; missing managed copies are restored. Archive history is recorded only after successful processing; partial archives are retried safely.
- Existing libraries get audio-fingerprint deduplication on their next import; source-history shortcuts are populated as files are encountered. ZIP shortcuts start after the first successful import using this version.
- The waveform playhead now has a bright white line with a dark outline/cyan glow, cyan pointer and moving precise-time label, plus shading over elapsed audio. The marker remains visible during waveform analysis.
- 80 XCTest cases passed, zero failures (
/tmp/kjmix-import-final-80-tests.log). New cases cover async import return/UI scheduling, progress, cancellation/partial saves, errors, history persistence, unchanged ZIP extraction bypass, renamed audio, changed audio/CDG, missing media recovery and managed archive copies. Existing playback, singer and rotation tests also passed. - Import dialog and playing waveform rendered with isolated original test media at 1320 × 900. No personal media used in previews or distributions.
- The release script records signing, Apple notarization, stapling and Gatekeeper results under
build-release/release-verification/KJMixPro-0.6.6-macOS/. Only the current DMG is retained indist.
KJMix Pro 0.6.5 (build 16) — native macOS appearance
Verified on 3 November 2026.
- Native SwiftUI sidebar list, contextual window title and venue subtitle, simplified toolbar.
- System appearance by default, with persisted System / Light / Dark selection in Settings. Editors and workspaces inherit the choice; waveform, video and tone mixer use dedicated dark monitoring surfaces.
- 73 XCTest cases passed with zero failures, including actual singer disclosure/navigation and rotation Add to Tonight, reorder and Start clicks. Log:
/tmp/kjmix-native-ui-tests-final.log. - Light-mode library, rotation and settings rendered using isolated original demo data; dark-mode rotation inspected from the native UI test capture.
- Final contrast-only change to playback-position labels compiled in the universal Release build.
- Distribution contains only the current DMG. Signing, notarization, stapling and Gatekeeper results are recorded by the release script under
build-release/release-verification/KJMixPro-0.6.5-macOS/. - This is a native macOS styling update, not a claim of Apple certification or an exhaustive accessibility audit.
KJMix Pro 0.6.4 (build 15) verification
Verified on 3 November 2026.
- 73 XCTest cases passed, zero failures. See verification/xcode-test.log.
- Coverage includes actual mouse clicks on singer Songs, Add to Tonight, reorder arrow and Start Rotation; both singer and song NSItemProviders routed through the unified drop handler; persisted manual/smart order; start/pause/resume/stop; singer chevron and navigation via actual mouse events in an isolated native window; independent singer preferences; SQLite persistence; rotation drag validation; atomic singer-plus-Tonight creation; automatic next-singer playback at a real audio end; automatic background resume after the queue empties; manual background override; saved settings restored without launch autoplay; cue/jog/loop/stop; rapid CDG seeks; and prior media, server, import, tags and library regressions.
- Actual SwiftUI views rendered with isolated original demo data at 1320 × 900 and 1060 × 760. Rotation, settings and library screenshots accompany this report.
- Release builds both arm64 and x86_64. Source ZIP includes canonical KJMix Pro.xcodeproj/project.pbxproj and shared scheme, source, tests, executable scripts, icon assets and original test media only.
- ZIP CRC checks, extracted file hashes and extracted Xcode project listing are checked during packaging. Personal media, library databases, invitations, bookmarks and user settings are excluded.
The production DMG and its enclosed app are Developer ID signed, notarized and stapled; explicit local preview modes remain unnotarized. Intel/older macOS runtime, broad commercial media, hardware/display latency, large-library show stress and every native drag/keyboard interaction are not exhaustively validated. Music-store profiles/catalogue imports are not provider purchase or subscription integrations. See README.md for feature limits.
The complete operating-system drag gesture is not automated end to end. Drop payload delivery and ordering are tested with real NSItemProviders, and visible reorder arrows provide an independently mouse-tested alternative.
Background seeking is tested while playing, paused and paused for a singer, including negative/end/nonfinite positions and resuming at the chosen position.
Configurable background fade times persist; tests inspect the real mixer output gain during fade-in and after fade-out, and verify cancellation when scrubbing or starting singer playback.
Fade-out handoff regression checks inspect actual mixer gain while it decreases, assert the singer audio node has not started during the fade and starts after silence, and verify Pause/unload cancel the pending singer start. Manual background fade-out also has an intermediate gain check.
Batch waveform checks verify cache reuse versus forced regeneration, deduplication of tracks sharing audio, missing-file reporting, ShowScreen skipping, cancellation retaining completed caches, selected-track versus whole-library scope, and unchanged playback/history/library metadata. The release contains no Spotify support.
DMG release pipeline
The release script now creates a compressed DMG with the approved app icon as both its volume icon and Finder file icon, plus an Applications shortcut. A real --signed-only run succeeded with the installed Developer ID Application identity and hardened runtime. DMG checksum, mounted contents, custom icon flag, app/volume artwork matching, app signature and disk-image signature were verified. Gatekeeper assessments of both app and DMG explicitly returned Unnotarized Developer ID; this output is not a Gatekeeper-verified release.
The normal release mode is fail-closed: it requires a valid notarytool Keychain profile, notarizes/staples the app and DMG, and requires Gatekeeper success for both the image and mounted app before publishing verified filenames. The missing-profile failure was verified before credential setup. After the KJMixPro profile was configured, Apple accepted both the app and DMG, both tickets were stapled and validated, and Gatekeeper accepted the final DMG and mounted app as Notarized Developer ID. The app also passed syspolicy_check distribution. An independent final check confirmed the downloadable DMG/app tickets, extracted ZIP app signature, ZIP integrity and download SHA-256 hashes. See RELEASING.md.
The release script now keeps only the current DMG in dist. Reports/checksums are written under build-release/release-verification, and old outputs are removed only after the new image passes its checks. The notarization result variable is notary_status; Bash/zsh function regressions verified Accepted and Invalid responses without the zsh read-only status error.