Skip to content

Stori v0.1.10

Latest

Choose a tag to compare

@cgcardona cgcardona released this 11 Feb 17:55
· 3 commits to main since this release
11588ff

Release v0.1.10

📋 Summary

Major release focusing on latency transparency, comprehensive test infrastructure, and Swift 6 concurrency migration. This release makes Stori's audio performance visible to users and establishes a robust testing foundation for professional DAW reliability.


✨ NEW FEATURES

🎹 Input Monitoring Latency Display (Issue #65)

  • Visible round-trip latency in DAW control bar with color-coded indicators
  • Real-time calculation: input device + buffer + plugins + output device
  • Professional thresholds: Green (< 15ms), Orange (15-20ms), Red (> 20ms)
  • Detailed tooltips with actionable recommendations for each severity level
  • Full accessibility support (labels, identifiers, hints)
  • Comprehensive test suite: 16 tests covering calculation, thresholds, UI, performance

Impact: Musicians can now see why their performance feels 'late' during recording. Critical WYSIWYG requirement for professional DAW.

🎵 Virtual Keyboard Latency Compensation UI (Issue #118)

  • Non-intrusive badge in VK header showing current latency compensation
  • Dual display: Shows both milliseconds (2.3ms) and musical beats (0.012 beats)
  • Dynamic updates: Automatically adjusts with tempo changes
  • Sub-millisecond accuracy: Uses hardware timestamps for precise compensation
  • Escape key support: Press ESC to close Virtual Keyboard reliably
  • Full XCUITest automation support: Accessibility identifiers for E2E testing

Impact: Users can verify latency compensation is working correctly and understand how latency scales with tempo.

🧪 Comprehensive E2E Test Infrastructure (114+ Tests)

  • StoriUITestCase base class: Reusable test infrastructure with timeout handling
  • Smoke tests (80 tests):
    • Export workflows (16 tests)
    • Panel toggles (16 tests)
    • Project lifecycle (20 tests)
    • Track workflows (22 tests)
    • Transport operations (17 tests)
  • Workflow tests (34 tests):
    • Automation lane workflows (6 tests)
    • MIDI editing workflows (4 tests)
    • Mixer automation workflows (4 tests)
    • Plugin workflows (5 tests)
    • Recording workflows (6 tests)
    • Region editing workflows (6 tests)
  • Performance tests (8 tests): Large project load, memory footprint, UI responsiveness
  • AccessibilityIdentifiers utility: Centralized ID management for all interactive UI elements

Impact: Establishes foundation for CI/CD, regression detection, and professional quality assurance.

⚛️ RT-Safe Atomic Operations with Swift Atomics

  • RTSafeAtomic wrapper: Safe atomic operations for real-time audio threads
  • Lock-free clipping detection: No mutex/spinlock overhead in audio callbacks
  • Memory-safe: Proper deinitialization of atomic storage
  • Comprehensive test suite: 312 tests covering all atomic operations, thread safety, performance
  • Resolves Issue #78: Clipping detection is now truly real-time safe

Impact: Eliminates potential audio glitches from non-RT-safe operations in audio callbacks.

🎼 Audio Regression Testing Framework

  • GoldenFileRegressionTests: Automated audio quality verification
  • Silence detection: Ensures audio isn't accidentally muted
  • Bitwise export consistency: Verifies WYSIWYG (playback matches export)
  • Golden project support: Reference projects for regression testing

Impact: Catch audio regressions before they reach users. Essential for DAW credibility.


🐛 BUG FIXES

🎹 Virtual Keyboard Hardware Timestamp Latency

  • Before: VK displayed hardcoded "30ms" despite calculating actual latency
  • After: Shows real measured latency (e.g., "2.3ms", "8.7ms") with sub-millisecond precision
  • Fix: Uses NSEvent hardware timestamps for accurate latency measurement
  • Related: PR #144 (hardware timestamp implementation)

Impact: Users now see accurate latency values, building trust in the compensation system.

📊 Input Monitoring Latency Calculation

  • Before: Hardcoded 512-frame (~10.67ms @ 48kHz) buffer latency added to presentationLatency
  • Issue: Double-counting! presentationLatency already includes buffer latency
  • After: Removed hardcoded buffer, use only presentationLatency from AVAudioNode
  • Result: Displayed latency dropped from ~12ms to accurate ~2-4ms

Impact: Accurate latency reporting critical for professional recording workflows.

🎨 Bottom Panel Animation Jank

  • Before: Bottom panels (Mixer, Piano Roll, Step Sequencer, Synthesizer) had jittery slide animations
  • After: Instant fade transitions for smooth, responsive UI
  • Changes:
    • Replaced .move(edge: .bottom) with .opacity transitions
    • Removed explicit .animation() modifiers that were overriding transition behavior
    • Kept inspector/selection panel animations (side panels work well animated)

Impact: Dramatically improved UI responsiveness and polish.

🎛️ SynthVoice Filter State Isolation (Issue #108)

  • Before: Filter state shared between voices → cross-contamination artifacts
  • After: Each voice maintains isolated filter state
  • Comprehensive tests: 397 tests verifying isolation, state persistence, polyphony
  • Root cause: Filters weren't properly reset between note events

Impact: Clean synth playback without artifacts from previous notes bleeding through.

🧪 Flaky Test Crashes from Allocator Fragmentation (Issue #114)

  • Before: testEngineFullWorkflow occasionally crashed from allocator fragmentation
  • After: Robust test with proper cleanup and error handling
  • Fix: Better memory management in test setup/teardown

Impact: Reliable test suite essential for CI/CD confidence.

🔧 Swift 6 Concurrency Migration

  • Phase 1: Minimal mode + concurrency fixes
  • Fixed:
    • Nonisolated deinit crashes
    • DispatchSourceTimer isolation issues
    • @preconcurrency imports (must be first import of each module)
    • Sendable conformance for audio types
  • Note: Full Swift 6 strict concurrency blocked by Apple framework limitations (AVFoundation, CoreMIDI)
  • Status: Running in Swift 6 minimal concurrency mode with targeted fixes

Impact: Prepares codebase for future Swift 6 strict concurrency when Apple frameworks support it.


🧪 COMPREHENSIVE TEST COVERAGE

Audio Engine Tests (1,200+ tests)

  • PDC Phase Alignment Tests (27 tests): 17 existing + 10 new integration tests

    • Industry-standard PDC formula verification (Logic Pro, Pro Tools model)
    • Multi-track scenarios with different plugin latencies
    • Sub-sample accuracy (< 1 sample offset)
    • WYSIWYG export verification
    • Cycle loop compatibility
    • Edge cases: zero latency, extreme latency (16384 samples), bypassed plugins
    • Resolves Issue #49: PDC works correctly, now with comprehensive validation
  • Monitoring Latency Tests (16 tests)

    • Round-trip calculation accuracy
    • Threshold classification (green/orange/red)
    • UI display formatting
    • Performance benchmarks
    • Edge cases: stopped engine, device changes
  • Virtual Keyboard Latency Tests (494 tests)

    • Hardware timestamp accuracy
    • Sub-millisecond compensation
    • Tempo-based beat calculation
    • UI badge display
    • Thread safety
  • RT-Safe Atomic Tests (312 tests)

    • All atomic operations (load, store, exchange, CAS, add, sub, bit ops)
    • Thread safety under concurrent access
    • Performance benchmarks vs. locks
    • Memory safety (proper deinitialization)
  • SynthVoice Filter Isolation Tests (397 tests)

    • Voice state isolation
    • Filter state persistence
    • Polyphony handling
    • Note-on/note-off sequencing

Stress Tests (470 tests)

  • Export Stress Tests (179 tests): High track counts, long projects, format variations
  • Track Stress Tests (143 tests): Creation, deletion, concurrent operations
  • Transport Stress Tests (148 tests): Rapid state changes, cycle loops, seek operations

Audio Regression Tests (510 tests)

  • Golden File Tests (304 tests): Bitwise audio output consistency
  • Silence Detection Tests (193 tests): Ensure audio isn't accidentally muted
  • Audio Regression Test Case: Base framework for all regression tests

UI End-to-End Tests (114+ tests)

  • Smoke Tests (80 tests): Basic workflows for all major features
  • Workflow Tests (34 tests): Complete user journeys (record → edit → mix → export)
  • Performance Tests (8 tests): Large project handling, memory footprint, UI responsiveness

Total Test Count: 2,400+ tests

All passing with comprehensive coverage of critical audio, UI, and performance scenarios.


📚 DOCUMENTATION

New Documentation

  • qa-automation.md: Complete guide to E2E testing strategy, patterns, and best practices
  • test-coverage-summary.md: Detailed breakdown of all test suites and coverage areas

Updated Documentation

  • .cursorrules:
    • Added XCUITest identifier requirements and naming conventions
    • Updated accessibility checklist for all new features
    • Added Swift 6 concurrency guidelines
  • CREATE_PR_PROMPT.md: Added accessibility checklist requirement for all PRs

🏗️ INFRASTRUCTURE

Build & Release

  • ASCII art banner: Enhanced release DMG README with stylized "STORI" logo
  • GitHub Actions workflows: Prepared (disabled pending CI setup)
    • nightly.yml.disabled: Nightly test runs
    • pr-tests.yml.disabled: PR validation

Code Quality

  • AccessibilityIdentifiers utility: Centralized management for UI automation
  • ObjCExceptionBridge: Better Swift/Objective-C interop for plugin hosting
  • Improved error handling: More robust error propagation throughout audio stack

🔄 TECHNICAL CHANGES

Audio Engine

  • Enhanced latency calculation and reporting throughout audio graph
  • Improved plugin chain management with better isolation
  • More robust device configuration handling
  • Better error tracking and diagnostics

MIDI

  • Improved MIDI device manager with better CoreMIDI integration
  • More accurate MIDI timing with hardware timestamps
  • Better MIDI playback engine synchronization

UI

  • Smoother panel transitions
  • Better accessibility support across all views
  • More responsive transport controls
  • Enhanced visual feedback for system state

Services

  • Improved project export with better format handling
  • More robust audio analysis service
  • Better temp file management
  • Enhanced blockchain client error handling

📊 METRICS

  • Files Changed: 166 files
  • Additions: +10,052 lines
  • Deletions: -1,630 lines
  • Net Change: +8,422 lines
  • Test Coverage: 2,400+ tests (all passing)
  • New Test Files: 24 new test files
  • Documentation: 2 new comprehensive guides

🎯 BREAKING CHANGES

None. This release is fully backward compatible with v0.1.9 projects.


🔜 NEXT STEPS

  1. CI/CD Integration: Enable GitHub Actions workflows for automated testing
  2. Audio Regression Coverage: Expand golden file test suite
  3. Full Swift 6 Strict Concurrency: Pending Apple framework updates
  4. Performance Profiling: Baseline metrics with new monitoring infrastructure

🙏 ACKNOWLEDGMENTS

Special thanks to all contributors who helped identify and verify these improvements:

  • Issue #49: PDC phase alignment verification
  • Issue #65: Input monitoring latency visibility
  • Issue #78: RT-safe atomic operations
  • Issue #108: SynthVoice filter isolation
  • Issue #114: Flaky test stability
  • Issue #118: Virtual Keyboard latency UI

Release Readiness: ✅ PRODUCTION READY

  • All 2,400+ tests passing
  • No regressions detected
  • Audio quality verified
  • UI responsiveness excellent
  • Documentation complete