diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6a20cb1..a1ce9c8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,8 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi
## [Unreleased]
### Changed
+- **Rehearser cast-renderer extraction.** The full cast-card renderer and delegated cast interactions now live in
+ `rehearser-cast.js`; the legacy `renderCastList` global and existing behavior remain available.
- **Provider status clarity.** TTS and STT backend discovery now reports configuration separately from liveness,
with bounded endpoint/status/error details shown in backend help text so unreachable services are actionable.
- **Audiobook cast normalization extraction.** Same-speaker post-cast merging now lives in
diff --git a/TODO.md b/TODO.md
index 6a83239..c1a3219 100644
--- a/TODO.md
+++ b/TODO.md
@@ -88,7 +88,7 @@ architecture change: the larger Audiobook/Rehearser/style split.
forms feed prompt generation and identity fingerprints.
- [ ] **L — Modularize the frontend.** The shared manifest, compatibility namespace
bridge, and section-scoped lazy loading are complete foundations; responsibility-level
- extraction and the Audiobook/Rehearser/style split remain.
+ extraction and the remaining Audiobook/Rehearser/style split continue incrementally.
- [x] **M — Add structured logs with request/job IDs.** API/MCP requests now receive sanitized correlation IDs and
duration logs; route-specific logs retain provider/job context without request bodies.
- [x] **L — Add linting and duplicate-function checks.** The manifest-driven frontend syntax/declaration gate now runs
@@ -120,7 +120,8 @@ architecture change: the larger Audiobook/Rehearser/style split.
## P1 — Modular frontend architecture
-- [ ] Split `audiobook.js`, `rehearser.js`, and `style.css` by responsibility.
+- [ ] Split `audiobook.js`, `rehearser.js`, and `style.css` by responsibility; the Rehearser cast renderer is now isolated,
+ with the remaining transport/matching blocks still in the monolith.
- [x] Extract Rehearser stage display and cast-sidebar controls into `rehearser-stage.js`.
- [ ] Replace broad globals with namespaces such as `window.TTVC.audiobook`; a compatibility namespace bridge now
exposes the existing Audiobook, Rehearser, and job APIs while responsibility-by-responsibility migration continues.
diff --git a/VERSION b/VERSION
index d1c9614..4d65d5e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.24.43
+1.24.44
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index 1053e94..cdef598 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -31,10 +31,10 @@ The global scope + monkey-patching is the root cause of the recurring "wiring/ti
### 2. Split `rehearser.js` (was 196 KB) — IN PROGRESS
Done incrementally as global-scope ordered files (no ES-module change needed) — each loaded before `rehearser.js` in `loader.js` + added to the bundle list in `scripts/minify.mjs`, verified by `tests/rehearser.spec.js` (parse → cast) and the smoke suite:
- ✅ `rehearser-parse.js` — `parseScript`, `detectCharacters` (pure; only call-time `SPEAKER_COLORS`).
-- ⬜ `rehearser-cast.js` — `renderCastList`, sort/filter, online voice picker, character research.
+- ✅ `rehearser-cast.js` — `renderCastList`, sort/filter, online voice picker, and character research.
- ✅ `rehearser-stage.js` — stage font/cast sidebar controls and cast-strip rendering; playback and transport remain in `rehearser.js`.
- ✅ `rehearser-voice-picker.js` — voice preview state and matched-choice presentation; import and assignment actions remain in `rehearser.js`.
-- ✅ `rehearser-cast.js` — cast view, sort/filter state handlers, and cast toolbar wiring; card rendering remains in `rehearser.js`.
+- ✅ `rehearser-cast.js` — cast view, full cast-card rendering, sort/filter state handlers, and delegated cast toolbar wiring.
- ✅ `rehearser-voice-design.js` — character development, backend selection, and backend-refresh synchronization.
- ✅ `audiobook-segmentation.js` — quote segmentation, conservative turn-taking, and dialogue-piece validation.
- ✅ `audiobook-parse.js` — dialogue detection, dehyphenation, and speaker-heuristic constants; the casting pipeline remains in `audiobook.js`.
diff --git a/static/index.html b/static/index.html
index 684bdd1..aafa52a 100644
--- a/static/index.html
+++ b/static/index.html
@@ -10,7 +10,7 @@
-
+
@@ -27,10 +27,10 @@
-
-
-
-
+
+
+
+
@@ -395,7 +395,7 @@ window.toggleNavTree = function(treeId, chevronId) {
-
+