feat: add drift compensation system for synchronized audio capture with EMA-based detection and resampling
- Added DriftDetector using exponential moving average and linear regression to calculate clock drift in ppm between primary/secondary audio sources
- Implemented DriftMetrics for tracking overflow counts, adjustment counts, and throttled logging to prevent log spam
- Created DriftCompensator with rubato-based resampling to apply dynamic ratio adjustments when drift exceeds threshold
- Added comprehensive
- Added normalizeProjectId and normalizeProjectIds functions to filter out default/empty project IDs before sending to backend
- Applied normalization to setActiveProject, createMeeting, and listMeetings API calls
- Added AssertionError to caught exceptions in streaming diarization and session chunk processing
- Updated repomix config to focus on src/noteflow/infrastructure directory
- Added mock_torch_minimal fixture to
- Moved all hookify configuration files from `.claude/` to `.claude/hooks/` subdirectory for better organization
- Added four new blocking hooks to prevent common error handling anti-patterns:
- `block-broad-exception-handler`: Prevents catching generic `Exception` with only logging
- `block-datetime-now-fallback`: Blocks returning `datetime.now()` as fallback on parse failures to prevent data corruption
- `block-default
- Changed `repomix.config.json` to disable comment removal, empty line removal, and compression, while enabling Base64 truncation.
- Updated the include paths to add a new "tests/" directory.
- Enhanced the `ExportAISection` tests by refining mock implementations and adding new test cases for export settings, template presets, and UI elements.
- Improved the `useAsyncData` hook to store success and error callbacks in refs to prevent unnecessary re-fetching.
- Adjusted timer handling in `useAsrConfig` tests for better accuracy and reliability.
- Added new mock implementations in `RecordingPage` tests to ensure proper state management during rendering.
- Introduced logging for CRUD operations in repositories to enhance visibility into database interactions.
- Implemented timing logs for BaseRepository and UnitOfWork lifecycle events to track performance.
- Added export logging for size and duration without exposing sensitive content.
- Promoted logging levels for specific operations to improve clarity and reduce noise in logs.
- Established a framework for consistent logging practices across persistence and export functionalities.
- Added a specific container name for the frontend service in `compose.yaml` for better identification.
- Disabled the compression option in `repomix.config.json` to potentially improve build performance.
- Refactored audio capture and playback components to improve handling of the optional `sounddevice` module, allowing for better compatibility in environments lacking PortAudio.
- Introduced a new `sounddevice_support.py` module to centralize the management of sounddevice interactions and error handling.
- Updated the `SoundDeviceCapture` and `SoundDevicePlayback` classes to utilize the new support module, ensuring consistent stream management and error logging.
- Improved the `generate_dek` method in the crypto module to enforce key size validation, enhancing security and reliability.
- Enhanced the key file existence check in the keystore to include validation of the key content, improving robustness against invalid key files.
- Added new logging configuration to improve observability across various services.
- Introduced a `.repomixignore` file to exclude unnecessary files from version control.
- Updated `pyproject.toml` to include additional paths for script discovery.
- Refreshed submodule references for the client to ensure compatibility with recent changes.
All quality checks pass.
- Updated client submodule reference to the latest commit.
- Refactored calendar settings to distinguish between integration and trigger settings, renaming `CalendarSettings` to `CalendarIntegrationSettings` and introducing `CalendarTriggerSettings`.
- Enhanced asset deletion logic in `MeetingService` to utilize the correct asset path.
- Updated tests to reflect changes in calendar settings and asset management.
All quality checks pass.
- Updated the Summary entity to include provider and model names, along with tokens used and latency metrics for better tracking of summarization performance.
- Modified the ORM converters and repository methods to accommodate new attributes, ensuring backward compatibility.
- Introduced word timing position indexing to maintain order within summaries.
- Added a new SQLAlchemy model structure for improved organization of persistence layers, including core, identity, and integration models.
- Removed deprecated models and files to streamline the codebase.
- Removed the `support/` and `tests/` directories from the Repomix configuration to streamline included files.
- Updated `repomix-output.md` to reflect the new file structure and clarify included patterns.
- Deleted the outdated `triage.md` document to reduce clutter and improve project organization.
- Introduced a new `ui.md` document detailing the migration plan for transitioning to a Rust/Tauri application, including architecture overview and feature parity checklist.
- Added `repomix-output.md` to `.gitignore` to exclude output files from version control.
- Updated `repomix.config.json` to include the `support/` directory in the include paths.
- Enhanced `TranscriptComponent` to improve search functionality with a debounce mechanism for input.
- Refactored search logic to filter visible segments based on the search query, ensuring better user experience.
- Updated `Meeting` and `Annotation` entities to use `utc_now()` for consistent UTC-aware timestamps.
- Introduced new repository protocols for `DiarizationJob` and `Preferences` to support additional functionalities.
- Implemented in-memory persistence for repositories to facilitate testing and development without a database.
- Added error handling and utility functions to streamline gRPC service responses and improve code maintainability.
- Added `asset_path` to the `Meeting` entity for audio asset storage.
- Implemented `AudioValidationResult` for audio integrity checks during recovery.
- Updated `RecoveryService` to validate audio file integrity for crashed meetings.
- Enhanced `SummarizationService` to include consent persistence callbacks.
- Introduced new database migrations for `diarization_jobs` and `user_preferences` tables.
- Refactored various components to support the new asset path and audio validation features.
- Improved documentation in `CLAUDE.md` to reflect changes in recovery and summarization functionalities.
- Created .dockerignore to exclude unnecessary files from Docker builds.
- Added .repomixignore for managing ignored patterns in Repomix.
- Introduced Dockerfile.dev for development environment setup with Python 3.12.
- Configured docker-compose.yaml to define services, including a PostgreSQL database.
- Established a devcontainer.json for Visual Studio Code integration.
- Implemented postCreate.sh for automatic dependency installation in the dev container.
- Added constants.py to centralize configuration constants for the project.
- Updated pyproject.toml to include new development dependencies.
- Created initial documentation files for project overview and style conventions.
- Added tests for new functionalities to ensure reliability and correctness.