You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.9 KiB
4.9 KiB
Backend Rust Audit Report (Partial)
Scope and limitations
- Audited backend docs + code paths in:
handlers/,services/,db/,models/, migrations, representative tests
- Limitation:
- Full backend test execution could not be completed due persistent Cargo artifact lock after interruption.
Clarification Questions
- Is "LLM vs HTML source-link extraction mode" still a product requirement, or intentionally removed?
- Docs still mention configurability (
functional_specs.md:140) - Related settings were removed in migrations (
20260326000026_remove_use_llm_for_source_links.sql,20260325000018_drop_deprecated_settings.sql)
- Docs still mention configurability (
- What are canonical theme defaults: docs/DB (
max_items=4,summary_length=3) or handler (5,2)?
Assumptions
- Docs are source of truth unless explicitly superseded by migration intent.
- Multi-theme source scoping is mandatory.
Prioritized Findings
P0
- Theme-scoped source import/export contract is broken.
- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/handlers/sources.rs:111,/Users/oabrivard/Projects/rust/ai_synth/backend/src/handlers/sources.rs:154,/Users/oabrivard/Projects/rust/ai_synth/backend/src/handlers/sources.rs:234,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:120,/Users/oabrivard/Projects/rust/ai_synth/backend/src/handlers/sources.rs:249 - Spec refs:
/Users/oabrivard/Projects/rust/ai_synth/docs/requirements.md:19,/Users/oabrivard/Projects/rust/ai_synth/docs/functional_specs.md:35 - Direction: make import/export strictly theme-aware.
- Evidence:
P1
-
Theme update endpoint lacks validation; invalid settings can persist.
- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/models/theme.rs:77,/Users/oabrivard/Projects/rust/ai_synth/backend/src/handlers/themes.rs:72,/Users/oabrivard/Projects/rust/ai_synth/backend/src/db/themes.rs:72 - Direction: add
UpdateThemeRequest::validate()and enforce in handler.
- Evidence:
-
Source create/import path does not verify theme ownership.
- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/handlers/sources.rs:72,/Users/oabrivard/Projects/rust/ai_synth/backend/src/db/sources.rs:55 - Direction: enforce
theme_idownership check before insert/update.
- Evidence:
-
Theme creation contract drifts from documented behavior/defaults.
- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/models/theme.rs:43,/Users/oabrivard/Projects/rust/ai_synth/backend/src/models/theme.rs:47,/Users/oabrivard/Projects/rust/ai_synth/docs/functional_specs.md:90,/Users/oabrivard/Projects/rust/ai_synth/backend/src/handlers/themes.rs:56,/Users/oabrivard/Projects/rust/ai_synth/docs/functional_specs.md:185 - Direction: align create validation + defaults with agreed product contract.
- Evidence:
P2
-
Core synthesis orchestration is monolithic and high-risk to change.
- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:85,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:152,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:357,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:542 - Direction: split into composable phase modules.
- Evidence:
-
Scheduler reliability path is under-tested.
- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/scheduler.rs:94
- Evidence:
-
Phase-2 filtering performs per-URL DB checks (N+1 pattern).
- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:1031
- Evidence:
P3
- Silent error suppression (
.ok()) hides operational issues.- Evidence:
/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:351,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:457,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/synthesis.rs:604,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/scheduler.rs:67,/Users/oabrivard/Projects/rust/ai_synth/backend/src/services/scheduler.rs:85
- Evidence:
Idiomatic Rust Assessment
- Error handling: good (
AppError,Result, minimal panics). - Layering: mostly good, but orchestration service is overloaded.
- Async/concurrency: good use of
JoinSet,watch,AtomicBool. - Testability: strong in many modules; weaker around scheduler/autonomous workflows.
Refactoring Plan
- Correctness first (1 sprint).
- Theme-aware import/export, theme ownership validation, update validation, defaults alignment.
- Pipeline decomposition (1-2 sprints).
- Split
run_generation_innerinto phase modules and explicit state contexts.
- Split
- Reliability and QA hardening (1 sprint).
- Scheduler integration tests + SSE progress integration tests.
- Performance cleanup (incremental).
- Batch article-history checks and optimize bulk inserts.
Quick Wins
- Add theme ownership guard in
POST /sources. - Add update validation for themes.
- Wire
theme_idthrough bulk/csv import. - Make
export-csvhonortheme_id.