m6

openalice-tts

Features
0
Status
×archived
Last activity
Branch

Architecture rating

C18d ago
testingB

44 tests across router+4 adapters covering critical paths: GDPR consent/sovereignty/regulated-sector policy (7 router tests), billing-correctness regressions (Cyrillic chars≠bytes on 3 adapters), auth headers, HTTP error mapping, input validation, Mistral JSON-envelope unwrap regression, full Voices CRUD wiremock coverage — but zero streaming (synth_stream) tests, no coverage measurement.

consistencyB-

Uniform adapter pattern (new→with_*→config→TTSProvider impl) across all 4 adapters, mirrors openalice-llm-router+openalice-stt shapes exactly (Sovereignty/Sector/TenantPolicy/CostEvent), @feature annotations on every module, wiremock for all adapter tests, openalice-axum-common shared — but 69 missing docstrings and 9 god-module flags from inspector.

docsB-

Thorough README (architecture, emotion-tag table, adapter matrix, conventions), VOICE_CATALOG.md with root-cause analysis + systematic-fix recommendations, @feature annotations on every public surface, Cargo.toml fully populated (license/repo/description) — but inspector flags 69 missing docstrings across the crate, no rustdoc beyond struct/trait headers.

securityC+

GDPR Art 49 consent gating per modality (consent_us_tts), sovereignty enforcement with regulated-sector block, tenant allow-list, input validation (empty+oversized text pre-network), rustls-only, API keys from env — but 3 undeclared env vars (FISH_AUDIO_API_KEY, MISTRAL_API_KEY, OPENROUTER_API_KEY) in Atlas drift, no rate-limit logic (library, but still unguarded), no SSRF guard on configurable base_url.

reliabilityC-

30s HTTP timeout on every adapter, is_retryable() classifies 500/408/425/429 correctly, input validation rejects oversized text before network — but no retry/circuit-breaker logic, no graceful stream-abort cost attribution (CostEvent only fires on SynthChunk::Done), no backpressure on upstream.

observabilityD

LoggingTracker emits structured tracing::info with tenant/provider/model/voice/characters/cost/latency per call — but no prometheus metrics, no distributed tracing spans on synth calls, no health probe endpoint (Atlas confirms 'no https endpoint in manifest exposes'), latency_ms recorded but not histogrammed.

data layerD

Library crate owns zero tables (manifest_owns_tables=[]), no schema/migrations/RLS to evaluate; GDPR consent gating exists in router logic but no data-erasure or retention lifecycle — cost events are emitted via trait but persistence is entirely external.

source · auto-grader-2026-06-30

Telemetry ribbon · last 90 days

1 event
MAYJUNJUL2026-07-17 · lifecycle · first scan — repo indexedNOW
commitmanifestlifecyclekind

No @feature annotations recorded in this repo yet.