Quick settings: night mode, text size, serif and verse numbers (#12 part 1) #36

Merged
claude-bot merged 3 commits from phase1/quick-settings into main 2026-10-22 10:40:25 +00:00
Collaborator

Part 1 of #12. Parts 2 (F3 red letters) and 3 (F4 running text, sliders) follow, so this does not close it.

What

An Aa button at the right of the reading footer opens a bottom sheet with four controls: night mode, text size (80–200 %), a Sans or Serif face, and verse numbers. Each change shows at once, is saved at once by the core, and the verse at the top stays in place. At start the core sends every setting, saved or default, before the text, so night mode doesn't flash white. All sizes and colours now come from one Theme singleton (qml/theme/).

Blast radius

Tier: trunk
Trunk paths touched: core/src/worker.rs, core/src/worker/session.rs, core/src/worker/session/jump.rs, qt/src/reading_model.rs, qml/pages/ReadingPane.qml, qml/Main.qml, tools/mem-check/run.sh
Testing tier: standard
Gate / rollback: The defaults are the old look (day, 100 %, sans, verse numbers on), so nothing changes until a setting is touched. To undo, revert this merge. The settings are rows in the existing settings table, with no migration; an older build ignores them.

Resources (docs/07): The sheet is in a Loader and is compiled on first use, not at start. At start there are 5 setting events (there was 1), before the Bible loads. mem-check peak PSS with the sheet open is 143.5 MB (normal) and 147.0 MB (slow), against the 165 MB baseline; with the picker it is 143.6 MB. Text appears after 316 ms in the slow profile. On the phone the window loaded after 306 ms.

Proof

  • SWORD_TEST_PATH=~/.cache/utsb-sword cargo make exits 0: utsb-core 108 passed, plus fmt, clippy, deny and audit.
  • cargo make app-docker exits 0: qmllint, the -Werror build, clang-tidy, the German catalogue (all 29 strings translated) and mem-check in both profiles. The new e2e (taps on the Aa sheet) prints:
    • mem-check: Aa sheet: night on, text at 200 % (top verse 88 to 301 px), top 'BSB 27197 0.432' before and 'BSB 27197 0.432' after
    • mem-check: after kill -9: night at line 7, size at 8, text at 9 (the settings come back before the text)
  • Fails without the change. Each part was broken on purpose:
    • Rust: dropping the clamp fails a_number_is_clamped_and_else_its_default. A wrong flag default fails a_flag_is_one_or_zero_and_else_its_default. Settings sent after the text fail settings_are_saved_at_once_and_come_back_at_start.
    • e2e: keepTop as a no-op gives FAIL: a bigger text size moved the verse at the top (27197 0.432 → 27194 0.727). The verse font pinned to 18 px gives FAIL: ... didn't make the top verse taller ('88 88'). palette.window unbound gives FAIL: night mode didn't change the window colour.
  • CI green on e6f8a69: rust, audit, app, click.
  • On the phone: e6f8a69 is installed on the Plinius. Launched from adb, the journal shows phase1/quick-settings@e6f8a694c, window loaded after 306 ms, restored KJV 173 0.809, showing Gen 7, and no QML warnings. Nothing has been tried by touch yet. On the phone, try:
    • Tap Aa: the sheet slides up and fits on screen; tapping above it closes it.
    • Night mode turns the whole app dark, including the footer, the picker, the settings page and the sheet. Turning it off brings back the day colours.
    • Drag the text size slider. The text grows and shrinks step by step, and the verse at the top stays put.
    • Serif and Sans switch the face. Each button's label is in its own face.
    • Verse numbers off removes them; the top verse stays.
    • Close the app (or swipe it away) and reopen. Everything is as you left it, with no white flash when night is on.
    • The footer's reference button and Back still respond to taps.

Review

Reviewer: Three fresh-context code-review rounds: high on e9469f7, medium on db13a9d, and a medium delta on e6f8a69. There were 5 findings: 1 medium and 4 low.

  • 2 fixed: the medium (the e2e logs what is shown) and a low (the restart kept the slow profile).
  • 3 declined, with the reasons in comments 1560 and 1569: the slider snap-back is a one-frame late echo; Liberation Serif is present on the target; coordinate taps are how all of mem-check works.
  • 0 deferred, 0 left open.

Review-Confidence: 85/100. The serif and verse-number toggles are not exercised by any automated or phone check yet; everything else has proof.

Confidence by part

  • core settings (settings.rs, sent before the text): high. Unit and worker tests, all shown to fail without the change.
  • qt glue (properties, Initialize defaults): high. It is a thin mapping, exercised by mem-check through the QML.
  • Night palette and text size with the top verse kept: high. The e2e checks what is shown, and it fails when either is broken.
  • Serif and verse number toggles: medium. They go through the same keepTop path, but only the owner's phone check exercises them.
  • Sheet layout on the phone (fit, thumb reach, night colours' contrast): medium. That is the phone checklist above.

🤖 Generated with Claude Code

Part 1 of #12. Parts 2 (F3 red letters) and 3 (F4 running text, sliders) follow, so this does not close it. ## What An **Aa** button at the right of the reading footer opens a bottom sheet with four controls: night mode, text size (80–200 %), a Sans or Serif face, and verse numbers. Each change shows at once, is saved at once by the core, and the verse at the top stays in place. At start the core sends every setting, saved or default, before the text, so night mode doesn't flash white. All sizes and colours now come from one `Theme` singleton (`qml/theme/`). ## Blast radius **Tier:** trunk **Trunk paths touched:** `core/src/worker.rs`, `core/src/worker/session.rs`, `core/src/worker/session/jump.rs`, `qt/src/reading_model.rs`, `qml/pages/ReadingPane.qml`, `qml/Main.qml`, `tools/mem-check/run.sh` **Testing tier:** standard **Gate / rollback:** The defaults are the old look (day, 100 %, sans, verse numbers on), so nothing changes until a setting is touched. To undo, revert this merge. The settings are rows in the existing settings table, with no migration; an older build ignores them. **Resources (docs/07):** The sheet is in a `Loader` and is compiled on first use, not at start. At start there are 5 setting events (there was 1), before the Bible loads. mem-check peak PSS with the sheet open is 143.5 MB (normal) and 147.0 MB (slow), against the 165 MB baseline; with the picker it is 143.6 MB. Text appears after 316 ms in the slow profile. On the phone the window loaded after 306 ms. ## Proof - `SWORD_TEST_PATH=~/.cache/utsb-sword cargo make` exits 0: utsb-core 108 passed, plus fmt, clippy, deny and audit. - `cargo make app-docker` exits 0: qmllint, the -Werror build, clang-tidy, the German catalogue (all 29 strings translated) and mem-check in both profiles. The new e2e (taps on the Aa sheet) prints: - `mem-check: Aa sheet: night on, text at 200 % (top verse 88 to 301 px), top 'BSB 27197 0.432' before and 'BSB 27197 0.432' after` - `mem-check: after kill -9: night at line 7, size at 8, text at 9` (the settings come back before the text) - Fails without the change. Each part was broken on purpose: - Rust: dropping the clamp fails `a_number_is_clamped_and_else_its_default`. A wrong flag default fails `a_flag_is_one_or_zero_and_else_its_default`. Settings sent after the text fail `settings_are_saved_at_once_and_come_back_at_start`. - e2e: keepTop as a no-op gives `FAIL: a bigger text size moved the verse at the top` (27197 0.432 → 27194 0.727). The verse font pinned to 18 px gives `FAIL: ... didn't make the top verse taller ('88 88')`. `palette.window` unbound gives `FAIL: night mode didn't change the window colour`. - CI green on e6f8a69: rust, audit, app, click. - **On the phone:** e6f8a69 is installed on the Plinius. Launched from adb, the journal shows `phase1/quick-settings@e6f8a694c`, `window loaded after 306 ms`, `restored KJV 173 0.809`, `showing Gen 7`, and no QML warnings. Nothing has been tried by touch yet. **On the phone, try:** - [ ] Tap Aa: the sheet slides up and fits on screen; tapping above it closes it. - [ ] Night mode turns the whole app dark, including the footer, the picker, the settings page and the sheet. Turning it off brings back the day colours. - [ ] Drag the text size slider. The text grows and shrinks step by step, and the verse at the top stays put. - [ ] Serif and Sans switch the face. Each button's label is in its own face. - [ ] Verse numbers off removes them; the top verse stays. - [ ] Close the app (or swipe it away) and reopen. Everything is as you left it, with no white flash when night is on. - [ ] The footer's reference button and Back still respond to taps. ## Review **Reviewer:** Three fresh-context `code-review` rounds: high on e9469f7, medium on db13a9d, and a medium delta on e6f8a69. There were 5 findings: 1 medium and 4 low. - 2 fixed: the medium (the e2e logs what is shown) and a low (the restart kept the slow profile). - 3 declined, with the reasons in comments 1560 and 1569: the slider snap-back is a one-frame late echo; Liberation Serif is present on the target; coordinate taps are how all of mem-check works. - 0 deferred, 0 left open. **Review-Confidence:** 85/100. The serif and verse-number toggles are not exercised by any automated or phone check yet; everything else has proof. ## Confidence by part - core settings (`settings.rs`, sent before the text): high. Unit and worker tests, all shown to fail without the change. - qt glue (properties, Initialize defaults): high. It is a thin mapping, exercised by mem-check through the QML. - Night palette and text size with the top verse kept: high. The e2e checks what is shown, and it fails when either is broken. - Serif and verse number toggles: medium. They go through the same keepTop path, but only the owner's phone check exercises them. - Sheet layout on the phone (fit, thumb reach, night colours' contrast): medium. That is the phone checklist above. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
qml: Aa sheet with night mode, text size, serif and verse numbers; one Theme (#12)
All checks were successful
CI / rust (pull_request) Successful in 3m57s
CI / audit (pull_request) Successful in 11s
CI / app (pull_request) Successful in 3m11s
CI / click (pull_request) Successful in 1m5s
e9469f7ec9
The core sends every setting at start, as saved or else its default,
before the Bible opens, so the window has its colours before any text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-review left a comment

Review level: high (trunk). Commit: e9469f7ec9. Range: origin/main...HEAD.

No high or medium findings. Low findings are inline.

Files reviewed: core/src/lib.rs, core/src/settings.rs, core/src/worker.rs, core/src/worker/session.rs, core/src/worker/session/jump.rs, qt/src/reading_model.rs, qml/Main.qml, qml/pages/ReadingPane.qml, qml/pages/QuickSettings.qml, qml/pages/PickerPage.qml, qml/pages/SettingsPage.qml, qml/qml.qrc, qml/theme/Theme.qml, qml/theme/qmldir, po/de.po, po/utstudybible.schaefera.pot (po skimmed only).

Review level: high (trunk). Commit: e9469f7ec97400a40f9f232cd4ec4055329a6071. Range: origin/main...HEAD. No high or medium findings. Low findings are inline. Files reviewed: core/src/lib.rs, core/src/settings.rs, core/src/worker.rs, core/src/worker/session.rs, core/src/worker/session/jump.rs, qt/src/reading_model.rs, qml/Main.qml, qml/pages/ReadingPane.qml, qml/pages/QuickSettings.qml, qml/pages/PickerPage.qml, qml/pages/SettingsPage.qml, qml/qml.qrc, qml/theme/Theme.qml, qml/theme/qmldir, po/de.po, po/utstudybible.schaefera.pot (po skimmed only).
@ -0,0 +58,4 @@
// Each step is shown and saved at once.
onMoved: if (value !== sheet.reading.textScale) sheet.reading.setTextScale(value)
}
Label {
Collaborator

low: the slider shows the core's echoed value. If the worker lags during a fast drag, the handle can snap back to the previous step until the echo arrives. Each step also costs one DB write on the worker. Fix if it shows on the phone: save on release (onPressedChanged) and preview through a local value.

low: the slider shows the core's echoed value. If the worker lags during a fast drag, the handle can snap back to the previous step until the echo arrives. Each step also costs one DB write on the worker. Fix if it shows on the phone: save on release (onPressedChanged) and preview through a local value.
@ -0,0 +22,4 @@
// The reading text, and the lines above each chapter.
readonly property int textSize: Math.round(18 * textScale / 100)
readonly property int ornamentSize: Math.round(22 * textScale / 100)
readonly property int bookSize: Math.round(26 * textScale / 100)
Collaborator

low: "Liberation Serif" has no fallback. On a device without it, Qt substitutes silently and the Serif button does nothing visible. A family list or a check against Qt.fontFamilies() would grey the button out, as the module-data rule does.

low: "Liberation Serif" has no fallback. On a device without it, Qt substitutes silently and the Serif button does nothing visible. A family list or a check against Qt.fontFamilies() would grey the button out, as the module-data rule does.
Author
Collaborator

Answers to review 231 (two lows, no code change):

  • QuickSettings.qml:61, the slider snapping back. Not a snap-back mid-drag. The value binding re-evaluates only when reading.textScale changes, and each echo carries the value that was just set. The one possible case is a late echo of an earlier step during a very fast drag. That moves the handle back one step for a frame, and the next echo puts it right. A step is one small SQLite upsert on the worker, about 13 steps across the whole range, well inside the "save within 1 s" rule. Keeping the core as the single source of truth is worth that.
  • Theme.qml:25, no fallback for Liberation Serif. On the target it is present: fc-match "Liberation Serif" on the phone (Plinius, UT 24.04) gives LiberationSerif-Regular.ttf. Other Linux phones come later, and their packaging will declare the font dependency. So this does not fail on any platform we ship to now.
Answers to review 231 (two lows, no code change): - **QuickSettings.qml:61, the slider snapping back.** Not a snap-back mid-drag. The value binding re-evaluates only when `reading.textScale` changes, and each echo carries the value that was just set. The one possible case is a late echo of an earlier step during a very fast drag. That moves the handle back one step for a frame, and the next echo puts it right. A step is one small SQLite upsert on the worker, about 13 steps across the whole range, well inside the "save within 1 s" rule. Keeping the core as the single source of truth is worth that. - **Theme.qml:25, no fallback for Liberation Serif.** On the target it is present: `fc-match "Liberation Serif"` on the phone (Plinius, UT 24.04) gives `LiberationSerif-Regular.ttf`. Other Linux phones come later, and their packaging will declare the font dependency. So this does not fail on any platform we ship to now.
mem-check: the Aa sheet's night mode and text size, the top verse kept through it, both back before the text after a kill -9 (#12)
Some checks failed
CI / rust (pull_request) Successful in 3m46s
CI / audit (pull_request) Successful in 10s
CI / app (pull_request) Successful in 3m52s
CI / click (pull_request) Has been cancelled
db13a9dbd5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-review requested changes 2026-10-22 10:21:09 +00:00
Dismissed
claude-review left a comment

Level: medium (trunk: tools/mem-check/, qml/pages/ReadingPane.qml). Commit: db13a9dbd5. Range: e9469f7ec97400a40f9f232cd4ec4055329a6071..HEAD (one commit).

Files reviewed:

  • qml/pages/ReadingPane.qml
  • qml/pages/QuickSettings.qml
  • tools/mem-check/run.sh
  • tools/ci/app.sh

Findings: see inline comments (1 medium, 2 low). Nothing outside the diff lines. Not run: the script itself (needs Xvfb, the built app and module data); the tap coordinates were not checked against a rendered layout.

Level: medium (trunk: tools/mem-check/, qml/pages/ReadingPane.qml). Commit: db13a9dbd554d9d620df43d134715fabf2b5c8a9. Range: e9469f7ec97400a40f9f232cd4ec4055329a6071..HEAD (one commit). Files reviewed: - qml/pages/ReadingPane.qml - qml/pages/QuickSettings.qml - tools/mem-check/run.sh - tools/ci/app.sh Findings: see inline comments (1 medium, 2 low). Nothing outside the diff lines. Not run: the script itself (needs Xvfb, the built app and module data); the tap coordinates were not checked against a rendered layout.
@ -392,0 +412,4 @@
tap 520 940
tap 270 751
waitlines "$log" 'utsb: night true' 1
tap 495 824
Collaborator

low: the taps (270,751 / 495,824) depend on the sheet's implicit height and on the slider's right end sitting at or beyond x=495. If the right 'A' label or the margin starts before 495, the tap may land on the label and no 'utsb: text scale 200' arrives (a clean timeout), but a smaller sheet (e.g. a font or margin change) would instead hit the wrong control and fail with the generic 'no ... after 8 s'. Consider tapping via the objectNames or logging each control's centre.

low: the taps (270,751 / 495,824) depend on the sheet's implicit height and on the slider's right end sitting at or beyond x=495. If the right 'A' label or the margin starts before 495, the tap may land on the label and no 'utsb: text scale 200' arrives (a clean timeout), but a smaller sheet (e.g. a font or margin change) would instead hit the wrong control and fail with the generic 'no ... after 8 s'. Consider tapping via the objectNames or logging each control's centre.
@ -392,0 +421,4 @@
sleep 2.5
resized=$(lastsaved "$log")
echo "mem-check: Aa sheet: night on, text at 200 %, top '$before' before and '$resized' after"
if ! samespot "$before" "$resized" 0.05; then
Collaborator

medium: the size check can pass when the size change does nothing. If Theme.textScale is never applied (the keepTop callback broken, or the Theme binding dropped), verse heights don't change, the top verse and fraction stay the same, samespot passes, and the only other assertion is the 'utsb: text scale 200' log line. That line is printed from the property bound to the core, not from anything the Theme or the layout did. The same goes for 'utsb: night true': it proves the core echoed the value, not that the colours changed. Assert that something visible changed, e.g. log Theme.textScale / Theme.night (or a delegate's height) in the same handler after the assignment, or check that the verse count in view dropped.

medium: the size check can pass when the size change does nothing. If Theme.textScale is never applied (the keepTop callback broken, or the Theme binding dropped), verse heights don't change, the top verse and fraction stay the same, samespot passes, and the only other assertion is the 'utsb: text scale 200' log line. That line is printed from the property bound to the core, not from anything the Theme or the layout did. The same goes for 'utsb: night true': it proves the core echoed the value, not that the colours changed. Assert that something visible changed, e.g. log Theme.textScale / Theme.night (or a delegate's height) in the same handler after the assignment, or check that the verse count in view dropped.
@ -392,0 +429,4 @@
sample
kill -9 "$pid"
wait "$pid" 2>/dev/null || true
log=$work/app4.log
Collaborator

low: the restarted app runs as "$app", not "$launch "$app"", so in the SLOW=1 run it is no longer pinned to the two CPUs. The post-kill ordering check (night and size before the text) is then made on a faster profile than the one it is meant to cover, hiding a race that only shows when the core is slow. The app3 restart above does the same, so this extends an existing gap.

low: the restarted app runs as "$app", not "$launch "$app"", so in the SLOW=1 run it is no longer pinned to the two CPUs. The post-kill ordering check (night and size before the text) is then made on a faster profile than the one it is meant to cover, hiding a race that only shows when the core is slow. The app3 restart above does the same, so this extends an existing gap.
mem-check: the Aa check reads what the pane shows (window colour, top verse height); the restart keeps the slow profile (#12)
All checks were successful
CI / rust (pull_request) Successful in 3m45s
CI / audit (pull_request) Successful in 10s
CI / app (pull_request) Successful in 3m48s
CI / click (pull_request) Successful in 1m2s
e6f8a694c3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Collaborator

Answers to review 232, fixed in e6f8a69:

  • medium · run.sh:424, the check passes when the size or night change does nothing: fixed. The log lines now report what the pane shows:
    • Night logs pane.palette.window, and mem-check requires #121212.
    • keepTop returns the top verse's height before and after the change. mem-check requires it to grow by more than 1.5× at 200 %. The run shows top verse 88 to 301 px.
    • Fails without the change, run locally with app-docker: pinning the verse font to 18 px gives FAIL: text at 200 % didn't make the top verse taller ('88 88'). Unbinding palette.window in Main.qml gives FAIL: night mode didn't change the window colour (window #ffffff). Making keepTop a no-op (checked on db13a9d) gives FAIL: a bigger text size moved the verse at the top (BSB 27197 0.432 → BSB 27194 0.727).
  • low · run.sh:415, the coordinates are fragile: kept as they are. Every tap in mem-check is a coordinate on the 540×960 window, the same as the picker's. A missed tap fails loudly: the waitlines timeout prints the whole app log, and that log shows which line never came. Positions found through objectName would need a test hook in the app.
  • low · run.sh:432, the app4 restart without $launch: fixed. It now starts with $launch, so the slow run stays pinned to two CPUs. app3 is code that was there before this PR.
Answers to review 232, fixed in e6f8a69: - **medium · run.sh:424, the check passes when the size or night change does nothing: fixed.** The log lines now report what the pane shows: - Night logs `pane.palette.window`, and mem-check requires `#121212`. - keepTop returns the top verse's height before and after the change. mem-check requires it to grow by more than 1.5× at 200 %. The run shows `top verse 88 to 301 px`. - Fails without the change, run locally with app-docker: pinning the verse font to 18 px gives `FAIL: text at 200 % didn't make the top verse taller ('88 88')`. Unbinding `palette.window` in Main.qml gives `FAIL: night mode didn't change the window colour` (`window #ffffff`). Making keepTop a no-op (checked on db13a9d) gives `FAIL: a bigger text size moved the verse at the top` (`BSB 27197 0.432` → `BSB 27194 0.727`). - **low · run.sh:415, the coordinates are fragile: kept as they are.** Every tap in mem-check is a coordinate on the 540×960 window, the same as the picker's. A missed tap fails loudly: the `waitlines` timeout prints the whole app log, and that log shows which line never came. Positions found through objectName would need a test hook in the app. - **low · run.sh:432, the app4 restart without `$launch`: fixed.** It now starts with `$launch`, so the slow run stays pinned to two CPUs. app3 is code that was there before this PR.
claude-review left a comment

Delta review, level medium, trunk blast radius. Commit e6f8a694c3, range db13a9dbd554d9d620df43d134715fabf2b5c8a9..HEAD (one commit).

No findings. The changes I checked:

  • keepTop's new return value: the only caller that uses it is onTextScaleChanged, which handles null. The serif and verse-number callers ignore it.
  • The night log line reads pane.palette.window right after Theme.night is set. Main.qml binds palette.window to Theme.window, so the value is read after the binding updates. #121212 matches Theme.qml.
  • The slider snaps in steps of 10, so the single tap at 495 should give one 100 to 200 change. That makes tail -n 1 on the "top verse" line correct.
  • $launch "$app" for app4 matches the other launches. taskset execs, so $pid is still the app.

Files reviewed:

  • tools/mem-check/run.sh
  • qml/pages/ReadingPane.qml
  • qml/Main.qml
  • qml/theme/Theme.qml
  • qml/pages/QuickSettings.qml
  • CLAUDE.md
Delta review, level medium, trunk blast radius. Commit e6f8a694c35c0ac689353306b7f0ff2d3d906212, range db13a9dbd554d9d620df43d134715fabf2b5c8a9..HEAD (one commit). No findings. The changes I checked: - keepTop's new return value: the only caller that uses it is onTextScaleChanged, which handles null. The serif and verse-number callers ignore it. - The night log line reads pane.palette.window right after Theme.night is set. Main.qml binds palette.window to Theme.window, so the value is read after the binding updates. #121212 matches Theme.qml. - The slider snaps in steps of 10, so the single tap at 495 should give one 100 to 200 change. That makes tail -n 1 on the "top verse" line correct. - `$launch "$app"` for app4 matches the other launches. taskset execs, so $pid is still the app. Files reviewed: - tools/mem-check/run.sh - qml/pages/ReadingPane.qml - qml/Main.qml - qml/theme/Theme.qml - qml/pages/QuickSettings.qml - CLAUDE.md
claude-bot changed title from WIP: Quick settings: night mode, text size, serif and verse numbers (#12 part 1) to Quick settings: night mode, text size, serif and verse numbers (#12 part 1) 2026-10-22 10:38:47 +00:00
claude-review left a comment

Merge gate, trunk, standard testing tier. Head e6f8a694c3. Approval supersedes review 232.

  • Review 232 medium: fixed in e6f8a69. The e2e now logs the palette window colour (#121212 is checked) and the top verse height (it must grow more than 1.5x), so it reads what the pane shows. The low about the restart is fixed too ($launch "$app").
  • Review 231 (high): no high or medium findings. Review 233 (delta on e6f8a69): no findings.
  • Declined lows (comments 1560 and 1569): the reasons hold and are not blockers.
  • Commits after the last reviewed commit (db13a9d..e6f8a69): one commit, ReadingPane.qml and tools/mem-check/run.sh. The diff only adds logging and a return value to keepTop, which the callers handle.
  • CI on head: rust, audit, app and click all succeeded.
  • PR body Proof: no unrun elevated, maximum or AI-behaviour gate. Review-Confidence 85; the serif and verse-number toggles have no automated proof. The phone checklist is for the owner and is not a blocker.
Merge gate, trunk, standard testing tier. Head e6f8a694c35c0ac689353306b7f0ff2d3d906212. Approval supersedes review 232. - Review 232 medium: fixed in e6f8a69. The e2e now logs the palette window colour (#121212 is checked) and the top verse height (it must grow more than 1.5x), so it reads what the pane shows. The low about the restart is fixed too (`$launch "$app"`). - Review 231 (high): no high or medium findings. Review 233 (delta on e6f8a69): no findings. - Declined lows (comments 1560 and 1569): the reasons hold and are not blockers. - Commits after the last reviewed commit (db13a9d..e6f8a69): one commit, ReadingPane.qml and tools/mem-check/run.sh. The diff only adds logging and a return value to keepTop, which the callers handle. - CI on head: rust, audit, app and click all succeeded. - PR body Proof: no unrun elevated, maximum or AI-behaviour gate. Review-Confidence 85; the serif and verse-number toggles have no automated proof. The phone checklist is for the owner and is not a blocker.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
schaefera/utStudyBIble!36
No description provided.