Privacy first AI meeting note taker. Download Free and open source granola, otter ai, fireflies alternative. Parakeet / Whisper live transcription, on-device speaker diarization, built on Rust. 100% local processing. Meetily (Meetly Ai - https://meetily.ai) is the #1 Self-hosted, Open-source Ai meeting note taker & Assistant for macOS & Windows
This report summarizes scanner evidence for Zackriya-Solutions/meetily, a Rust project with 32,339 GitHub stars. SynthScan examined 114,779 lines of code across 413 source files, recording 274 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 3.0 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 196 finding(s).
Are imports declared and package/API names verified? 3 finding(s).
Are wrappers, guards, and repeated structures necessary? 98 finding(s).
Which changes need focused human review? 274 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 274 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src-tauri/Cargo.toml | 21 | # BUILD INSTRUCTIONS: | COMMENT |
| LOW | frontend/src-tauri/Cargo.toml | 181 | # Windows-specific dependencies | COMMENT |
| LOW | frontend/src-tauri/src/config.rs | 1 | /// Application configuration constants | COMMENT |
| LOW | frontend/src-tauri/src/console_utils/commands.rs | 1 | // Note: Tauri commands are defined in console_utils.rs to avoid duplicates | COMMENT |
| LOW | frontend/src-tauri/src/parakeet_engine/mod.rs | 1 | //! Parakeet (NVIDIA NeMo) speech recognition engine module. | COMMENT |
| LOW | frontend/src-tauri/src/database/models.rs | 81 | #[serde(rename = "openaiApiKey")] | COMMENT |
| LOW | frontend/src-tauri/src/database/models.rs | 121 | #[sqlx(rename = "elevenLabsApiKey")] | COMMENT |
| LOW | frontend/src-tauri/src/openrouter/commands.rs | 1 | // Note: Tauri commands are defined in openrouter.rs to avoid duplicates | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 41 | /// True for the whole `stop_recording` tail (manager taken -> `recording-stopped` | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 161 | /// Microphone" sends `None`, so `None` here means "use the system default", | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1261 | // DEVICE MONITORING COMMANDS (AirPods/Bluetooth disconnect/reconnect support) | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1401 | return Err("Recording manager gone during hot-swap".to_string()); | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1461 | DeviceEvent::DeviceListChanged => { | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1621 | fallback_name | COMMENT |
| LOW | frontend/src-tauri/src/audio/audio_processing.rs | 141 | /// | COMMENT |
| LOW | frontend/src-tauri/src/audio/audio_processing.rs | 261 | denoiser: *DenoiseState::new(), | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_manager.rs | 21 | } | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_manager.rs | 41 | // fallback) where the mic is technically capturing but no samples reach | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_manager.rs | 121 | wake_audio_connection_sync(&name) | COMMENT |
| LOW | frontend/src-tauri/src/audio/diagnostics.rs | 1 | // Audio Device Diagnostics | COMMENT |
| LOW | frontend/src-tauri/src/audio/device_detection.rs | 1 | // Cross-Platform Bluetooth Device Detection | COMMENT |
| LOW | frontend/src-tauri/src/audio/device_detection.rs | 21 | Bluetooth, | COMMENT |
| LOW | frontend/src-tauri/src/audio/device_detection.rs | 381 | COMMENT | |
| LOW | frontend/src-tauri/src/audio/ffmpeg_mixer.rs | 1 | // FFmpeg-Style Adaptive Audio Mixer | COMMENT |
| LOW | frontend/src-tauri/src/audio/vad.rs | 41 | config.sample_rate = VAD_SAMPLE_RATE as usize; | COMMENT |
| LOW | frontend/src-tauri/src/audio/vad.rs | 261 | // Only log if state changed | COMMENT |
| LOW | frontend/src-tauri/src/audio/vad.rs | 641 | COMMENT | |
| LOW | frontend/src-tauri/src/audio/pipeline.rs | 601 | // // Warn if microphone is completely silent | COMMENT |
| LOW | frontend/src-tauri/src/audio/pipeline.rs | 741 | // mid-sentence thought, and every pause longer than this becomes a segment | COMMENT |
| LOW | frontend/src-tauri/src/audio/permissions.rs | 1 | // macOS audio permissions handling | COMMENT |
| LOW | frontend/src-tauri/src/audio/capture/microphone.rs | 1 | // Microphone audio capture implementation | COMMENT |
| LOW | frontend/src-tauri/src/audio/transcription/provider.rs | 41 | #[derive(Debug, Clone)] | COMMENT |
| LOW | frontend/src-tauri/src/audio/devices/discovery.rs | 101 | /// | COMMENT |
| LOW | frontend/src-tauri/src/audio/devices/speakers.rs | 41 | let device = host | COMMENT |
| LOW | …end/src-tauri/src/whisper_engine/_stderr_suppressor.rs | 1 | /// PERFORMANCE: Utility to suppress verbose C library logs (whisper.cpp, Metal, GGML) | COMMENT |
| LOW | …end/src-tauri/src/whisper_engine/_stderr_suppressor.rs | 21 | COMMENT | |
| LOW | …end/src-tauri/src/whisper_engine/_stderr_suppressor.rs | 41 | COMMENT | |
| LOW | …end/src-tauri/src/whisper_engine/_stderr_suppressor.rs | 61 | // Self { | COMMENT |
| LOW | …end/src-tauri/src/whisper_engine/_stderr_suppressor.rs | 81 | // } | COMMENT |
| LOW | frontend/src-tauri/src/api/commands.rs | 1 | // Commands are now directly in api.rs to avoid duplication | COMMENT |
| LOW | frontend/src-tauri/src/summary/service.rs | 321 | /// | COMMENT |
| LOW | frontend/src-tauri/src/summary/mod.rs | 1 | /// Summary module - handles all meeting summary generation functionality | COMMENT |
| LOW | frontend/src-tauri/src/summary/llm_client.rs | 241 | /// Generates a summary using the specified LLM provider | COMMENT |
| LOW | frontend/src-tauri/src/summary/summary_engine/client.rs | 121 | COMMENT | |
| LOW | frontend/src-tauri/src/summary/templates/mod.rs | 1 | //! Meeting summary template management | COMMENT |
| LOW | frontend/src-tauri/src/summary/templates/mod.rs | 21 | //! // Generate markdown structure | COMMENT |
| LOW | frontend/src-tauri/src/summary/templates/loader.rs | 21 | /// Returns the platform-specific application data directory for custom templates: | COMMENT |
| LOW | frontend/src-tauri/src/summary/templates/loader.rs | 81 | COMMENT | |
| LOW | frontend/src-tauri/src/summary/templates/loader.rs | 121 | /// | COMMENT |
| LOW | frontend/src/components/DeviceSelection.tsx | 81 | // SelectItem value form below), while enumeration returns raw device names — | COMMENT |
| LOW | backend/build-docker.sh | 1 | #!/bin/bash | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 1 | // | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 21 | #ifndef CPPHTTPLIB_KEEPALIVE_MAX_COUNT | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 41 | #ifndef CPPHTTPLIB_WRITE_TIMEOUT_SECOND | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 61 | #ifndef CPPHTTPLIB_REQUEST_URI_MAX_LENGTH | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 81 | #ifndef CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 101 | : 0)) | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 121 | #ifndef _CRT_SECURE_NO_WARNINGS | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 141 | #endif // _MSC_VER | COMMENT |
| LOW | backend/whisper-custom/server/httplib.h | 161 | #endif | COMMENT |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/clean_start_backend.sh | 71 | # Check if required directories and files exist | COMMENT |
| LOW | backend/clean_start_backend.sh | 180 | # Check if the model is valid | COMMENT |
| LOW | backend/clean_start_backend.sh | 188 | # Check if the modelname exists in directory | COMMENT |
| LOW | backend/clean_start_backend.sh | 215 | # Check if port is valid 4 numbers that is already not in use and is not part of standard ports | COMMENT |
| LOW | backend/clean_start_backend.sh | 268 | # Check if required Python packages are installed | COMMENT |
| LOW | backend/clean_start_backend.sh | 282 | # Check if the port is actually listening | COMMENT |
| LOW | backend/run-docker.sh | 442 | # Check if services are actually running | COMMENT |
| LOW | backend/run-docker.sh | 467 | # Check if services are running to determine valid options | COMMENT |
| LOW | backend/run-docker.sh | 604 | # Check if it's a number | COMMENT |
| LOW | backend/run-docker.sh | 614 | # Check if it's a valid model name | COMMENT |
| LOW | backend/run-docker.sh | 689 | # Check if it's a direct language code | COMMENT |
| LOW | backend/run-docker.sh | 809 | # Check if it's a valid SQLite database | COMMENT |
| LOW | backend/run-docker.sh | 1095 | # Check if we should run interactive mode and handle preferences | COMMENT |
| LOW | backend/run-docker.sh | 1183 | # Check if sqlite3 is available for database operations | COMMENT |
| LOW | backend/run-docker.sh | 1372 | # Check if images exist, build if needed | COMMENT |
| LOW | backend/run-docker.sh | 1380 | # Check if both images exist | COMMENT |
| LOW | backend/run-docker.sh | 1471 | # Check if model file exists and is not empty in the whisper container | COMMENT |
| LOW | backend/run-docker.sh | 1517 | # Check if whisper server is responding | COMMENT |
| LOW | backend/run-docker.sh | 1523 | # Check if meeting app is responding | COMMENT |
| LOW | backend/run-docker.sh | 1661 | # Set MODEL_NAME to suppress warnings | COMMENT |
| LOW | backend/setup-db.sh | 84 | # Check if it's a valid SQLite database | COMMENT |
| LOW | backend/setup-db.sh | 341 | # Check if sqlite3 is available for database operations | COMMENT |
| LOW | backend/build-docker.sh | 155 | # Check if buildx builder exists | COMMENT |
| LOW | backend/build-docker.sh | 301 | # Check if building for multiple platforms | COMMENT |
| LOW | backend/build_whisper.sh | 157 | # Check if the model is valid | COMMENT |
| LOW | backend/build_whisper.sh | 164 | # Check if the modelname exists in directory | COMMENT |
| LOW | backend/build_whisper.sh | 230 | # Check if package directory already exists | COMMENT |
| LOW | backend/set_env.sh | 27 | # Check if key needs to be updated | COMMENT |
| LOW | backend/docker/entrypoint.sh | 215 | # Check if model exists | COMMENT |
| LOW | backend/app/db.py | 369 | # Check if meeting exists | COMMENT |
| LOW | backend/app/db.py | 490 | # Check if meeting exists before deletion | COMMENT |
| LOW | backend/app/db.py | 552 | # Check if the configuration already exists | COMMENT |
| LOW | backend/app/db.py | 601 | # Check if settings row exists | COMMENT |
| LOW | backend/app/db.py | 672 | # Check if the configuration already exists | COMMENT |
| LOW | backend/app/db.py | 722 | # Check if transcript settings row exists | COMMENT |
| LOW | backend/app/db.py | 885 | # Check if the meeting exists | COMMENT |
| LOW | backend/app/schema_validator.py | 97 | # Check if table exists | COMMENT |
| LOW | backend/app/transcript_processor.py | 202 | # Check if response is already a SummaryResponse object or a string that needs validation | STRING |
| LOW⚡ | backend/app/main.py | 229 | # Check if API key is available for cloud providers | COMMENT |
| LOW | .github/workflows/release.yml | 36 | # Check if base version tag exists | COMMENT |
| LOW | .github/workflows/pr-main-check.yml | 45 | # Check if version matches semantic versioning pattern | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src-tauri/check_screen_permission.swift | 15 | print("Error: \(error)") | CODE |
| MEDIUM⚡ | backend/debug_cors.py | 37 | print(f"Error Response: {response.text}") | CODE |
| LOW⚡ | backend/debug_cors.py | 39 | except Exception as e: | CODE |
| MEDIUM⚡ | backend/debug_cors.py | 40 | print(f"Error: {str(e)}") | CODE |
| LOW | backend/app/db.py | 39 | except Exception as e: | CODE |
| LOW | backend/app/db.py | 200 | except Exception as e: | CODE |
| LOW | backend/app/db.py | 205 | except Exception as e: | CODE |
| LOW | backend/app/db.py | 274 | except Exception as e: | CODE |
| LOW | backend/app/db.py | 279 | except Exception as e: | CODE |
| LOW | backend/app/db.py | 521 | except Exception as e: | CODE |
| LOW | backend/app/db.py | 526 | except Exception as e: | CODE |
| LOW | backend/app/db.py | 320 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 325 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 385 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 408 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 450 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 572 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 577 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 618 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 623 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 692 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 697 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 739 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 744 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 859 | except Exception as e: | STRING |
| LOW | backend/app/db.py | 908 | except Exception as e: | STRING |
| LOW | backend/app/schema_validator.py | 26 | except Exception as e: | CODE |
| LOW | backend/app/schema_validator.py | 125 | except Exception as e: | CODE |
| LOW | backend/app/transcript_processor.py | 225 | except Exception as chunk_error: | STRING |
| LOW | backend/app/transcript_processor.py | 231 | except Exception as e: | STRING |
| LOW | backend/app/transcript_processor.py | 275 | except Exception as e: | STRING |
| LOW | backend/app/transcript_processor.py | 281 | except Exception as e: | STRING |
| LOW | backend/app/transcript_processor.py | 306 | except Exception as client_error: | CODE |
| LOW | backend/app/transcript_processor.py | 311 | except Exception as e: | CODE |
| MEDIUM | backend/app/main.py | 112 | def __init__(self): | CODE |
| LOW⚡ | backend/app/main.py | 215 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 318 | except Exception as db_e: | CODE |
| LOW⚡ | backend/app/main.py | 320 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 326 | except Exception as db_e: | CODE |
| LOW | backend/app/main.py | 119 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 154 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 165 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 178 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 192 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 202 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 296 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 364 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 406 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 496 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 546 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 593 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 600 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 616 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 629 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 640 | except Exception as e: | CODE |
| LOW | backend/examples/run_summary_workflow.py | 168 | except Exception as e: | CODE |
| LOW | scripts/inject_transcript.py | 173 | except Exception as e: | STRING |
| MEDIUM⚡ | scripts/inject_transcript.py | 283 | print(f"Error: Database not found at {db_path}", file=sys.stderr) | STRING |
| MEDIUM⚡ | scripts/inject_transcript.py | 290 | print(f"Error: CSV file not found at {csv_path}", file=sys.stderr) | STRING |
| MEDIUM⚡ | scripts/inject_transcript.py | 298 | print(f"Error: Invalid timestamp format: {args.created_at}", file=sys.stderr) | STRING |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src-tauri/src/onboarding.rs | 178 | // Step 1: Save model configuration to SQLite database FIRST | COMMENT |
| LOW | frontend/src-tauri/src/onboarding.rs | 205 | // Step 2: Only NOW mark onboarding as complete (after DB operations succeed) | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 700 | // Step 1: Stop audio capture immediately (no more new chunks) with proper error handling | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 747 | // Step 2: Signal transcription workers to finish processing ALL queued chunks | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 813 | // Step 3: Now safely unload Whisper model after ALL chunks are processed | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1005 | // Step 4: Finalize recording state and cleanup resources safely | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1072 | // Step 5: Complete shutdown | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 125 | // Step 1: Clean repetitive text (most expensive operation) | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 128 | // Step 2: Remove common transcription artifacts | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 131 | // Step 3: Normalize whitespace and punctuation | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 134 | // Step 4: Apply contextual improvements (if not partial) | COMMENT |
| LOW | frontend/src-tauri/src/audio/decoder.rs | 54 | // Step 1: Convert to mono if needed | COMMENT |
| LOW | frontend/src-tauri/src/audio/decoder.rs | 70 | // Step 2: Resample to 16kHz if needed | COMMENT |
| LOW | frontend/src-tauri/src/audio/import.rs | 1255 | // Step 1: Decode | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/import.rs | 1267 | // Step 2: Resample to 16kHz mono | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/import.rs | 1272 | // Step 3: Run VAD with both redemption times and compare | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 35 | // Step 1: Welcome - Introduce Meetily features | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 36 | // Step 2: Setup Overview - Database initialization + show recommended downloads | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 37 | // Step 3: Download Progress - Download Parakeet + Summary Model (auto-selected based on platform/RAM) | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 38 | // Step 4: Permissions - Request mic + system audio (macOS only) | COMMENT |
| LOW | docs/building_in_linux.md | 84 | #### Step 1: Install CUDA Toolkit | COMMENT |
| LOW | docs/building_in_linux.md | 95 | #### Step 2: Build with CUDA | COMMENT |
| LOW | docs/building_in_linux.md | 128 | #### Step 1: Install Vulkan SDK and BLAS | COMMENT |
| LOW | docs/building_in_linux.md | 141 | #### Step 2: Configure Environment | COMMENT |
| LOW | docs/building_in_linux.md | 152 | #### Step 3: Build | COMMENT |
| LOW | docs/BUILDING.md | 113 | ##### Step 1: Install CUDA Toolkit | COMMENT |
| LOW | docs/BUILDING.md | 124 | ##### Step 2: Build with CUDA | COMMENT |
| LOW | docs/BUILDING.md | 157 | ##### Step 1: Install Vulkan SDK and BLAS | COMMENT |
| LOW | docs/BUILDING.md | 170 | ##### Step 2: Configure Environment | COMMENT |
| LOW | docs/BUILDING.md | 181 | ##### Step 3: Build | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src-tauri/src/onboarding.rs | 178 | // Step 1: Save model configuration to SQLite database FIRST | COMMENT |
| LOW | frontend/src-tauri/src/onboarding.rs | 205 | // Step 2: Only NOW mark onboarding as complete (after DB operations succeed) | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 700 | // Step 1: Stop audio capture immediately (no more new chunks) with proper error handling | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 747 | // Step 2: Signal transcription workers to finish processing ALL queued chunks | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 813 | // Step 3: Now safely unload Whisper model after ALL chunks are processed | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1005 | // Step 4: Finalize recording state and cleanup resources safely | COMMENT |
| LOW | frontend/src-tauri/src/audio/recording_commands.rs | 1072 | // Step 5: Complete shutdown | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 125 | // Step 1: Clean repetitive text (most expensive operation) | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 128 | // Step 2: Remove common transcription artifacts | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 131 | // Step 3: Normalize whitespace and punctuation | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/post_processor.rs | 134 | // Step 4: Apply contextual improvements (if not partial) | COMMENT |
| LOW | frontend/src-tauri/src/audio/decoder.rs | 54 | // Step 1: Convert to mono if needed | COMMENT |
| LOW | frontend/src-tauri/src/audio/decoder.rs | 70 | // Step 2: Resample to 16kHz if needed | COMMENT |
| LOW | frontend/src-tauri/src/audio/import.rs | 1255 | // Step 1: Decode | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/import.rs | 1267 | // Step 2: Resample to 16kHz mono | COMMENT |
| LOW⚡ | frontend/src-tauri/src/audio/import.rs | 1272 | // Step 3: Run VAD with both redemption times and compare | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 35 | // Step 1: Welcome - Introduce Meetily features | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 36 | // Step 2: Setup Overview - Database initialization + show recommended downloads | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 37 | // Step 3: Download Progress - Download Parakeet + Summary Model (auto-selected based on platform/RAM) | COMMENT |
| LOW⚡ | frontend/src/components/onboarding/OnboardingFlow.tsx | 38 | // Step 4: Permissions - Request mic + system audio (macOS only) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/tests/lib/summary-language-preferences.test.js | 33 | function installFailingLocalStorage() { | CODE |
| LOW | …ntend/src/contexts/RecordingPostProcessingProvider.tsx | 20 | export function RecordingPostProcessingProvider({ children }: { children: React.ReactNode }) { | CODE |
| LOW | frontend/src/constants/audioFormats.ts | 39 | export function getAudioFormatsDisplayList(): string { | CODE |
| LOW | …ontend/src/components/shared/DownloadProgressToast.tsx | 348 | export function DownloadProgressToastProvider() { | CODE |
| LOW | …omponents/MeetingDetails/SummaryUpdaterButtonGroup.tsx | 15 | export function SummaryUpdaterButtonGroup({ | CODE |
| LOW | …ponents/MeetingDetails/SummaryGeneratorButtonGroup.tsx | 41 | export function SummaryGeneratorButtonGroup({ | CODE |
| LOW | frontend/src/hooks/usePaginatedTranscripts.ts | 33 | function convertTranscriptsToSegments(transcripts: Transcript[]): TranscriptSegmentData[] { | CODE |
| LOW | frontend/src/hooks/usePlatform.ts | 15 | function detectPlatformFromUserAgent(): Platform { | CODE |
| LOW | frontend/src/lib/recordingNotification.tsx | 13 | export async function showRecordingNotification(): Promise<void> { | CODE |
| LOW | frontend/src/lib/utils.ts | 13 | export function isOllamaNotInstalledError(errorMessage: string): boolean { | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 33 | export function readPinnedSummaryLanguageDefault(): string | null { | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 42 | export function writePinnedSummaryLanguageDefault(value: string | null): void { | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 83 | function normalisePreferenceResponse( | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 99 | export async function readMeetingSummaryLanguage( | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 119 | export async function saveMeetingSummaryLanguage( | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 148 | export async function applyPinnedSummaryLanguageToMeeting(meetingId: string): Promise<string | null> { | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 157 | export async function readCachedDetectedSummaryLanguage(meetingId: string): Promise<string | null> { | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 173 | export async function saveCachedDetectedSummaryLanguage( | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 200 | export async function detectTranscriptSummaryLanguage( | CODE |
| LOW | frontend/src/lib/summary-language-preferences.ts | 214 | export async function detectAndCacheSummaryLanguage( | CODE |
| LOW | frontend/src/lib/onboarding-summary-model.ts | 19 | export function resolveOnboardingSummaryModelStatus({ | CODE |
| LOW | frontend/src/lib/onboarding-summary-model.ts | 40 | export function formatSummaryModelSizeLabelFromMb(sizeMb: number): string { | CODE |
| LOW⚡ | backend/app/main.py | 219 | async def process_transcript_background(process_id: str, transcript: TranscriptRequest, custom_prompt: str): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/app/db.py | 65 | except sqlite3.OperationalError: | CODE |
| HIGH | backend/app/db.py | 88 | except sqlite3.OperationalError: | CODE |
| HIGH | backend/app/db.py | 92 | except sqlite3.OperationalError: | CODE |
| HIGH | backend/app/db.py | 96 | except sqlite3.OperationalError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | backend/run-docker.sh | 86 | # Create an empty database file with proper permissions | COMMENT |
| MEDIUM | backend/run-docker.sh | 1855 | # Create a temporary file for download | COMMENT |
| MEDIUM | backend/app/transcript_processor.py | 257 | # Create a client and track it for cleanup | STRING |
| MEDIUM | .github/workflows/build-windows.yml | 286 | # Create a minimal test executable using dotnet | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/db.py | 211 | CODE | |
| LOW | backend/app/db.py | 582 | CODE | |
| LOW | backend/app/db.py | 627 | CODE | |
| LOW | backend/app/db.py | 701 | CODE | |
| LOW | backend/app/db.py | 749 | CODE | |
| LOW | backend/app/db.py | 863 | CODE | |
| LOW | backend/app/transcript_processor.py | 87 | CODE | |
| LOW | backend/app/transcript_processor.py | 289 | CODE | |
| LOW | backend/app/main.py | 219 | CODE | |
| LOW | backend/app/main.py | 369 | CODE | |
| LOW | backend/examples/run_summary_workflow.py | 69 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/db.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/schema_validator.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/transcript_processor.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/main.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/examples/run_summary_workflow.py | 20 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src-tauri/Cargo.toml | 22 | # =================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src-tauri/src/audio_v2/compatibility.rs | 3 | //! This module provides a bridge that allows seamless switching between | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/schema_validator.py | 3 | CODE | |
| LOW | backend/app/main.py | 11 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/app/notes/[id]/page.tsx | 36 | attendees: ['John Doe', 'Jane Smith', 'Mike Johnson'], | CODE |