# open-notebook v1.12.0 — v1.12.0 — Maintainability & Correctness - Product: open-notebook (https://whatsnew.fyi/product/open-notebook) - Vendor: lfnovo - Date: 2026-07-12 - Version: v1.12.0 - Original notes: https://github.com/lfnovo/open-notebook/releases/tag/v1.12.0 - Permalink: https://whatsnew.fyi/product/open-notebook/releases/v1.12.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Live Anthropic model discovery now queries Anthropic's models API instead of a hardcoded list, so new Claude models appear as soon as they ship - **added** — New GET /api/providers endpoint exposing provider metadata including modalities, docs, and env-configured status from a single backend registry - **added** — Math rendering in chat steers models to emit $$...$$/$...$ so formulas render via KaTeX instead of raw LaTeX code blocks - **fixed** — Missing or misconfigured models now return a clear 422 error with guidance, and not-found resources return 404, instead of generic Internal Server Error across all API routes - **fixed** — Translations interpolate correctly in all 14 languages with counters, names and plurals no longer showing literal {count}/{name} placeholders - **fixed** — Eight podcast toasts that always showed {name} placeholder are now fixed - **fixed** — Podcast dialog rapid source toggling no longer causes request storms with flickering token counts and closes deterministically after the episode list refreshes - **changed** — API error codes are now accurate: configuration errors return 422, missing resources 404, provider rate limits 429, and upstream provider failures 502 - **removed** — POST /api/notebooks/{id}/context endpoint was removed in favor of POST /api/chat/context with body {notebook_id, context_config} - **removed** — Dead code removed including the entire leftover Streamlit-era service layer - **removed** — Unused langchain-community and langchain-deepseek dependencies removed - **changed** — CI now gates every PR on ruff, ESLint, the frontend production build and mypy at zero errors - **changed** — Single provider registry now drives env config, modalities, connection tests and discovery, reducing hand-synced locations from 6 to 2 - **changed** — Both Docker images are now built from a single multi-stage Dockerfile, eliminating drift between regular and single-container variants - **removed** — Pre-1.6 embedding job compatibility shims were removed; users upgrading from versions older than 1.6 with queued jobs must drain the queue on a 1.x release first **We recommend all users upgrade.** v1.12.0 is a maintainability and correctness release: a full-repo cleanup (20+ focused PRs) that removed ~3,000 lines of dead code, fixed real user-facing bugs along the way, and turned on the quality gates that keep them fixed — validated end-to-end by the release test process (full suites, API+UI smoke, fresh-install and upgrade tests on the real images). ##### ✨ New features - **Live Anthropic model discovery** — "Discover models" for Anthropic credentials now queries Anthropic's models API instead of a hardcoded 2024-era list, so new Claude models appear as soon as they ship (#1070) - **`GET /api/providers`** — new endpoint exposing provider metadata (modalities, docs, env-configured status) from a single backend registry (#1075) - **Math rendering in chat** — prompts now steer models to emit `$$...$$`/`$...$` so formulas render via KaTeX instead of raw LaTeX code blocks (#1051) ##### 🐛 Notable fixes - **Errors now tell you what's wrong**: a missing/misconfigured model returns a clear 422 with guidance (and not-found resources a 404) instead of a generic "Internal Server Error" — across all API routes (#1078) - **Translations interpolate correctly in all 14 languages**: counters, names and plurals no longer risk showing literal `{count}`/`{name}` placeholders; eight podcast toasts that always showed `{name}` are fixed (#1074, #1077) - **Podcast dialog**: rapid source toggling no longer causes a request storm with flickering token counts, and the dialog closes deterministically after the episode list refreshes (#1067) ##### 🧹 Code health (why this release exists) - ~3,000 lines of dead code removed, including the entire leftover Streamlit-era service layer (#1053, #1054, #1056) - CI now gates every PR on ruff, ESLint, the frontend production build **and mypy at zero errors** (was: 197 baseline errors, not enforced) (#1062, #1068, #1076) - One provider registry drives env config, modalities, connection tests and discovery — adding a provider went from ~6 hand-synced locations to 2, both test-enforced (#1075) - Heavy copy-paste deduplicated across the chat routers, sources router, embedding commands and model discovery (#1069–#1072) - Both Docker images are now built from a single multi-stage `Dockerfile`, eliminating drift between the regular and single-container variants — published image names and tags are unchanged (#1066) - Dependency diet: unused `langchain-community` and `langchain-deepseek` removed, upper bounds on the langchain family, and an undeclared transitive dependency made explicit (#1073) ##### ⚠️ Behavior changes for self-hosters 1. **API error codes are now accurate** — if you script against the API and matched on `500` for configuration mistakes, update your handling: configuration errors return `422`, missing resources `404`, provider rate limits `429`, upstream provider failures `502` (#1078). 2. **`POST /api/notebooks/{id}/context` was removed** — it duplicated `POST /api/chat/context` and had no known callers. If you used it, switch to `POST /api/chat/context` with body `{notebook_id, context_config}` (#1079). 3. **Upgrading from a version older than 1.6** with embedding jobs still queued: drain the queue on a 1.x release before upgrading past this version — the pre-1.6 job compatibility shims were removed (#1056). ##### 🙏 Thanks This cycle was a focused maintenance sprint by the core team, but it stands on the community's shoulders: thank you to everyone who reported the issues that shaped the cleanup backlog and the release checklist — your reports are what turned a "refactor" into a list of real bugs to fix. Special mention to the contributors whose earlier security work (#1042, #1046, #1049) set the quality bar this release enforces in CI. Full details in the [CHANGELOG](https://github.com/lfnovo/open-notebook/blob/main/CHANGELOG.md).