10 KiB
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.