Reading window 2/3: continuous scroll #16
No reviewers
Labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
schaefera/utStudyBIble!16
Loading…
Reference in a new issue
No description provided.
Delete branch "phase1/continuous-scroll"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #11.
What
The text now scrolls straight through chapter and book boundaries in both directions, with no ‹ › buttons. The core keeps the fewest chapters that hold 40 verses on each side of the top verse. It slides one chapter on (
Slid) or off (Dropped) as you read, so the text never jumps. Short chapters such as Ps 117, Obadiah and 2–3 John don't stop the scroll. The app still reopens on the saved verse.Blast radius
Tier: trunk
Trunk paths touched:
core/src/worker.rs,core/src/reader.rs,qt/src/reading_model.rs,qml/pages/ReadingPane.qml,tools/mem-check/Gate / rollback: no flag, because this replaces the stepping. To undo it, revert this merge or reinstall the previous
.click. No migration and no schema change.Budgets (docs/07): peak PSS 148–150 MB in mem-check against a 165 MB budget. That is about +2–3 MB over PR 1's ~146.6 MB, from the 3–4 chapter window; the worst case is about 230 rows at Ps 119:1. Start-up is unchanged (83–87 ms).
Proof
cargo make(fmt, clippy, tests with coverage, release check, cargo-deny, cargo-audit): green. 29 core tests pass with SWORD_TEST_PATH set; line coverage 93.97%.cargo make app-docker(C++/QML format and lint, qt/ clippy, -Werror build, clang-tidy, mem-check): green on HEAD:cargo make clickand click-review: pass.place_ofoff by one → 4 tests failkeeps_a_margin_of_verses_around_the_top_versefails at Ps 117contentY += 600on rows removed → caught as a jumpshown/latestgate (there is no glue test harness), the QML timer andrestoringguards (timing), the ListView prepend at the origin, and short chapters on screen (mem-check flings only Gen 1–12). The UI is native Qt, so no screenshot beyond mem-check's logs.Review
Reviewer: fresh-context
code-review, four rounds: high, then medium ×3 on the fixes. 14 findings: 10 fixed and 4 declined.indexAtafter a slide, a report before the restore (twice), a flaky mem-check, the fling cap, a stale layout on the inactive path, stale spec lines, a slide gated onlatest, and an overtaken successful jump.unwrap_or(0)at reader.rs:189 can't be reached.Review-Confidence: 45/100. The core logic is well reviewed with fails-without-change proof, but the glue's overtaken-jump gate, the QML timer and restore guards, and the ListView prepend have no executed proof. The audit found no missed defect.
Confidence by part
core/src/worker.rsmargin slide (slide/grow/trim): high. Unit test across Gen, Ps 116–119, Mal→Matt and Rev, plus deliberate breaks.core/src/reader.rsneighbours and ordinals: high. Tests and deliberate breaks.qt/src/reading_model.rsreceivegate (shown/latest/loading): low. Read this. It was rewritten twice after review and is exercised only by mem-check's happy path.qml/pages/ReadingPane.qmlreport timer andrestoringguards: low. They depend on timing and aren't provable in CI.Merge style: Create merge commit (keeps the trailers).
🤖 Generated with Claude Code