diff --git a/CHANGELOG.md b/CHANGELOG.md
index ff43f0f..76576cb 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 training extraction.** Transcript normalization, LCS matching, and word-level comparison now live in
+ `rehearser-train.js`; recording and state-machine wiring remain behavior-compatible in `rehearser.js`.
- **Rehearser cast-controls extraction.** Cast view switching, sorting, filtering, and their guarded event wiring now
live in `rehearser-cast.js`, reducing the main renderer's responsibility while preserving the legacy API.
- **Namespace migration surface.** Extracted Rehearser and Audiobook modules now publish parse, stage, voice-picker,
diff --git a/TODO.md b/TODO.md
index 8d0f5e1..dfaf6b7 100644
--- a/TODO.md
+++ b/TODO.md
@@ -131,6 +131,7 @@ architecture change: the larger Audiobook/Rehearser/style split.
- [ ] Extract Rehearser voice matching and voice design.
- [x] Extract Rehearser voice-picker presentation and preview state into `rehearser-voice-picker.js`.
- [x] Extract Rehearser cast view, sorting, filtering, and toolbar wiring into `rehearser-cast.js`.
+- [x] Extract Rehearser training transcript comparison helpers into `rehearser-train.js`.
- [x] Extract Rehearser library persistence and IndexedDB migration into `rehearser-library.js`.
- [ ] Extract Audiobook parsing and casting.
- [x] Extract Audiobook parsing primitives and speaker-heuristic constants into `audiobook-parse.js`.
diff --git a/VERSION b/VERSION
index e74fe9d..db49fca 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.24.31
+1.24.32
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index 8150fc4..ce4a00d 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -35,7 +35,7 @@ Done incrementally as global-scope ordered files (no ES-module change needed)
- ✅ `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`.
- ✅ `audiobook-parse.js` — dialogue detection, dehyphenation, and speaker-heuristic constants; the casting pipeline remains in `audiobook.js`.
-- ⬜ `rehearser-train.js` — mic record / STT compare.
+- ✅ `rehearser-train.js` — transcript normalization, LCS comparison, and word-level training feedback; microphone/state wiring remains in `rehearser.js`.
- ✅ `rehearser-library.js` — SQLite persistence helpers and IndexedDB migration; import/export and auto-save remain
in `rehearser.js` until their UI/event-handler dependencies are isolated.
diff --git a/static/index.html b/static/index.html
index 8f09852..afefdfc 100644
--- a/static/index.html
+++ b/static/index.html
@@ -10,7 +10,7 @@
-
+
@@ -27,7 +27,7 @@
-
+
@@ -392,7 +392,7 @@ window.toggleNavTree = function(treeId, chevronId) {
-
+