# Changelog All notable changes to **Ranger Reader** are documented here. Format: [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/) — versioning: [SemVer](https://semver.org/). --- ## [Unreleased] --- ## [1.1.2] — 2026-05-27 ### Fixed — High WPM in Sentence / Paragraph modes was clamped by a too-conservative minimum-display floor After v1.1.1 raised the WPM cap to 3000 in Sentence and Paragraph modes, David noticed that pushing the slider from 1500 to 3000 didn't actually speed up reading — the chunks were still sitting on screen for the same amount of time. Root cause: the v1.1.0 minimum-display floor was **1500 ms per chunk** (set conservatively to prevent flash-frame illegibility). At 3000 WPM, any sentence under ~60 words mathematically wants to display for under 1500 ms — but the floor clamped them all to 1500 ms, so the calculated speed-up never reached the user. Lowered floors: - **Sentence mode**: 1500 ms → **400 ms** (eye can absorb a short sentence in well under half a second once it's on screen) - **Paragraph mode**: 1500 ms → **800 ms** (paragraphs are denser; need slightly more time even at high WPM) Maximum cap stays at 12 s for very long paragraphs at very low WPM. At 3000 WPM with the new floors, a 20-word sentence displays for **500 ms** (was 1500 ms — 3× faster) and a 60-word paragraph displays for **1750 ms** (was 1500 ms — uncapped formula now visible). This makes the WPM slider actually behave the way users expect: higher WPM = faster reading, all the way up to 3000. ### Clarification The reader does NOT iterate word-by-word inside a chunk in Sentence or Paragraph modes. The whole sentence or paragraph is rendered in one DOM update; only the auto-advance interval is calculated from word count. The word count is used as a proxy for "how long does a reader need to absorb this chunk," not as a per-word display loop. --- ## [1.1.1] — 2026-05-27 ### Changed — Mode-aware WPM ceiling The WPM slider's maximum value now adapts to the active reading mode: - **Word** mode: 1500 WPM ceiling (human single-word recognition limit — beyond ~25 ms per word the brain stops registering individual words) - **Sentence** and **Paragraph** modes: 3000 WPM ceiling. In chunk modes the "WPM" controls auto-advance timing across larger display units, so higher values still produce comprehensible reading speeds (a 20-word sentence at 3000 WPM still gets ~400 ms of display time, which is well within visual-recognition comfort) Switching from a high-WPM chunk mode back to Word mode automatically clamps the current value down to 1500, preventing accidentally-illegible word-mode playback. The `+` keyboard shortcut now respects the mode-specific ceiling. ### Why this matters For skim-pass reading on long thesis papers, the previous 1500 WPM cap in Sentence mode was too conservative. With a 20-word sentence at 1500 WPM the display held each sentence for ~1 s — comfortable but slower than necessary for already-known territory. 3000 WPM cuts that to ~400 ms, suitable for the Preview / Postview phases of structured reading (preview chapters, scan for known concepts, identify sections that warrant a slower second-pass read). --- ## [1.1.0] — 2026-05-27 ### Added — Sentence and Paragraph reading modes The single-word RSVP display from v1.0 is now one of three modes selectable via the toggle in the header (or keyboard `1` / `2` / `3`): - **Word** (`1`) — original RSVP, one word at a time with ORP focal-character coloring - **Sentence** (`2`) — one full sentence at a time, auto-advancing on `(words / WPM) × 1.25` interval, clamped to 1.5–12 s per chunk - **Paragraph** (`3`) — one paragraph at a time, larger reading area, `(words / WPM) × 1.40` interval The sentence splitter handles common academic-text false positives — titles (`Mr.`, `Dr.`, `Prof.`), Latin (`e.g.`, `i.e.`, `et al.`), abbreviations (`Vol.`, `Fig.`, `Eq.`, `Ref.`), and decimal numbers — by guarding them before splitting on `.!?` followed by whitespace and capital letter. Paragraph splitting is on blank-line separation (the conventional output of `pdftotext`). Other v1.1 polish: - Stage centre guide-lines hidden in Sentence / Paragraph modes (single-word framing isn't needed) - Skip-distance adapts per mode: ± 10 in Word mode, ± 1 in chunk modes - Meta text adapts to mode: `N / total words` / `sentences` / `paragraphs` - Time-remaining always computed in raw words regardless of mode (so 500 WPM means 500 WPM everywhere) - Mode is persisted alongside text + WPM + position in `localStorage` - v1.1 version stamp visible in header --- ## [1.0.0] — 2026-05-27 Initial release. ### Added - Single-word RSVP display with WPM slider (200–1500, default 500) - ORP (Optimal Recognition Point) focal-character coloring in red - Punctuation-aware pause: 2.5× for period/exclamation/question, 1.7× for comma/semicolon/colon, 1.3× for closing brackets - Progress bar + meta (`N / total words · ~X min remaining at Y WPM`) - Keyboard shortcuts (`Space`, `←`/`→`, `+`/`−`, `R`) - Drag-and-drop `.txt` file loading anywhere on the page - `localStorage` persistence — text, WPM and position survive page reloads - Dark-mode WP-tone palette (accessible-contrast colour scheme) - "Done" state turns the display green when the paper finishes Single self-contained HTML file. No dependencies, no install, no network calls. Runs in any modern browser, fully offline.