The suite hadn't run green since the routes refactor:
- test_profile_duplicate_names.py imported the pre-refactor module
layout and broke collection; now imports backend.services.profiles
- tests/conftest.py puts the repo root and backend dir on sys.path so
files collect standalone instead of depending on run order
- test_cors.py tested a hand-copied mirror of the origin list that had
drifted from app.py (missing http://tauri.localhost); it now builds
the app via the real create_app() factory
- test_progress.py simulated a 1KB download, below the tracker's 1MB
reporting threshold; simulation raised to 5MB
- slow/timeout markers registered in pyproject
Ruff: ~900 violations auto-fixed (typing modernization, import
sorting, unused imports, whitespace). The remaining rules are baselined
in pyproject.toml with per-rule counts to burn down, plus per-file
carve-outs for deliberate env-before-import ordering. ruff check is
now clean; suite is 134 passed, 2 skipped.
Text exceeding max_chunk_chars (default 800) is automatically split at
sentence boundaries, generated per-chunk, and concatenated with a 50ms
crossfade. Works with all engines (Qwen, LuxTTS, Chatterbox, Turbo).
- Abbreviation-aware sentence splitter (Dr., Mr., e.g., decimals)
- CJK sentence-ending punctuation support
- Paralinguistic tag preservation ([laugh], [cough], etc.)
- Per-chunk seed variation to avoid correlated RNG artefacts
- Per-chunk Chatterbox trim (catches hallucination at each boundary)
- max_chunk_chars exposed as per-request param on GenerationRequest
- Text max_length raised to 50,000 characters
Closes#99