Date: 2026-03-17 Status: In Progress (sub-agents still running)
| File | LOC | Recommendation |
|---|---|---|
echophrase/src/lib/components/SettingsPanel.svelte |
2223 | Split into separate section components |
echophrase/src-tauri/src/commands/transcription.rs |
1717 | Split by responsibility (model mgmt, transcription, audio) |
echophrase/src/lib/components/ModelDownloadProgress.svelte |
1360 | Extract progress UI, status logic |
echophrase/src/lib/components/settings/CudaSetupModal.svelte |
1309 | Extract platform detection, install steps |
echophrase/src/lib/composables/useRecording.ts |
1226 | Extract VAD logic, state machine |
echophrase/src-tauri/src/transcription/candle_whisper.rs |
1220 | Consider splitting tokenizer/decoder |
echophrase/src-tauri/src/transcription/onnx_backend.rs |
1087 | Extract model loading, inference |
echophrase-server/Program.cs |
840 | Well-structured but could use extension methods |
| File | Line | Code | Risk |
|---|---|---|---|
commands/transcription.rs |
105, 142, 596 | dirs::home_dir().unwrap() |
Panics if no HOME |
commands/transcription.rs |
737, 741 | dirs::cache_dir().unwrap() |
Panics if no cache dir |
vad.rs |
140-146 | Multiple .unwrap() on tensors |
Could panic on invalid data |
transform/t5_grammar.rs |
60 | cache.as_mut().unwrap() |
Panics if not loaded |
Recommendation: Replace with ok_or("message") or expect("reason") with context.
File: echophrase-server/src/Echophrase.Core/impl/Webhooks/DefaultWebhookHandler.cs
// TODO: Persist subscription to database (line 125)
// TODO: Update subscription record in DB (line 145)
// TODO: Update subscription status in DB (line 161)
// ... 20+ more TODOsImpact: Subscription lifecycle events not fully handled. Recommendation: Implement or document as "out of scope for beta".
Client (Rust): 3 tiers - Anonymous, Free, Premium Server (.NET): 4 tiers - Anonymous, Free, ProMonthly, ProAnnual
β
OK: Client correctly normalizes ProMonthly/ProAnnual β Premium via from_string()
Admin Dashboard: Uses boolean feature flags (model_medium, model_large) while Rust uses string arrays (available_models). This is a design difference but documented.
lib.rs(766 LOC): Well-structured, mostly plugin setup and commands registrationProgram.cs(840 LOC): Clean but long - could extract service registration to extension methods
- Feature gate changes are documented with sync instructions
- Tier normalization handles various formats (snake_case, PascalCase, kebab-case)
- Proper separation between auth storage and business logic
- Environment validation on startup (Rust)
- Comprehensive rate limiting configured (Server)
- Wait for sub-agent reports
- Deep dive on auth flow end-to-end
- Cross-reference with Elsagent's frontend findings
- Prioritize issues by beta-blocking vs nice-to-have