Maintenance release with no new functionality. The processing pipeline, API, and UI behave as in 2.100.10. The work is module splits, documentation, dependency updates, OpenAPI corrections, and one settings save fix.
Added
- Integration tests validate live API responses against
openapi.yamlwith JSON Schema 2020-12, so a response that drifts from the documented schema fails CI instead of passing a substring check. - Design specs behind larger features now live in
docs/specs/, with an index, and tests that pin a design decision cite the spec by path and heading instead of a bare section number.
Changed
- The episode processing module is split into stage modules under
main_app/pipeline/(transcribe, signals, detect, review, cuts, keep rules, verify, publish, finalize, admission, failure, recut), withprocessing.pykeeping the orchestrator and background start path. No behavior change. - Installation docs state that a GPU is recommended but not required, lead with the Docker-on-any-host path, and give a 2 CPU core, 8 GB RAM minimum.
- README lists processing modes, configuration export and restore, podcast search, output audio controls, and queue resilience, and corrects stale statements about auth, backups, verification, and providers.
- README Documentation table and docs/README.md list the System One, Failover, Pattern Cleanup, Transcript Differential, Glossary, and Container Security pages, ordered from first install through pipeline, tuning, and maintainer topics.
- Dependency updates: anthropic 1.12.1, openai 3.26.1, tldextract 5.4.0, fsspec 2026.9.0, python-slugify 9.1.3; frontend wavesurfer.js 8.0.2, vite-plugin-pwa 2.0.0, @vitejs/plugin-react 6.1.2, @tanstack/react-query 5.104.1, eslint 10.12.0; GitHub Actions upload-artifact 7.0.2, download-artifact 8.0.2, setup-node 7.1.0.
- Episode run serialization lives in a top-level
episode_runsmodule, so the episode and stats APIs import it directly instead of reaching into a route package. - The episodes API module is split into a package (core, runs, chapters, media). No behavior change.
- The transcriber module is split into a package: the Transcriber class stays at the top; settings, local backend (model singleton, GPU admission, batch-size ceiling), remote backend (health probes and the whole remote transcription attempt policy), segment filters and chunking live in their own modules. No behavior change.
- The settings API module is split into a package by settings area: core, ad detection (detection-tuning phases), provider phases (provider, failover and whisper), System One phases, notifications, providers and operations. Shared helpers and the post-commit scope live in a common module used by both the settings save and config import. No behavior change.
Fixed
- Saving the provider budget with USD as the display currency no longer fails with a database constraint error.
- The OpenAPI schema for the settings object marks the model and provider routing values as nullable, matching the null the API returns while they are unset.
- The OpenAPI document describes the response bodies of the unassigned corrections list, the feed tags update, the reviewer settings update, and the community sync settings update.