F1: starter sets and module manager #10

Closed
opened 2026-10-20 18:52:05 +00:00 by claude-bot · 7 comments
Collaborator

Phase 1 item (docs/01-pathway.md, docs/04-features.md F1, docs/08-module-presets.md).

  • First run: pick a language, get a pre-ticked starter set (Bible with Strong's, Strong's lexicons, TSK, optional Greek/Hebrew). One tap downloads it.
  • Licence and size shown before download. Modules come straight from CrossWire over HTTPS.
  • Downloads are resumable tasks (core/src/tasks/); a half-finished set continues on the next start.
  • presets/*.toml plus a CI job that checks each preset against the live CrossWire index.
  • Full module manager: all repositories, search, install/remove. Import from URL. Content Hub import.

Builds on the resumable download from spike S4. Depends on the database from #11 for task state.

Phase 1 item (docs/01-pathway.md, docs/04-features.md F1, docs/08-module-presets.md). - First run: pick a language, get a pre-ticked starter set (Bible with Strong's, Strong's lexicons, TSK, optional Greek/Hebrew). One tap downloads it. - Licence and size shown before download. Modules come straight from CrossWire over HTTPS. - Downloads are resumable tasks (`core/src/tasks/`); a half-finished set continues on the next start. - `presets/*.toml` plus a CI job that checks each preset against the live CrossWire index. - Full module manager: all repositories, search, install/remove. Import from URL. Content Hub import. Builds on the resumable download from spike S4. Depends on the database from #11 for task state.
Author
Collaborator

Part 1/2 merged in #26:

  • the five starter sets (presets/*.toml)
  • the SWORD installer (resumable rawzip download, install and remove, the CrossWire index)
  • the resumable task queue (migration 002)
  • the weekly preset check against CrossWire

Nothing is visible in the app yet. Follow-ups: #28 (416 on resume), #29 (preset-check reporting).

Part 2, still open: the qt glue and QML for the module manager and the first-run starter-set picker; wiring the runner; a top-level menu entry (with #30); measuring click size and PSS. Phone QC for F1 comes after part 2.

Part 1/2 merged in #26: - the five starter sets (`presets/*.toml`) - the SWORD installer (resumable rawzip download, install and remove, the CrossWire index) - the resumable task queue (migration 002) - the weekly preset check against CrossWire Nothing is visible in the app yet. Follow-ups: #28 (416 on resume), #29 (preset-check reporting). Part 2, still open: the qt glue and QML for the module manager and the first-run starter-set picker; wiring the runner; a top-level menu entry (with #30); measuring click size and PSS. Phone QC for F1 comes after part 2.
Author
Collaborator

Part 2 is split into three PRs, shipped one at a time:

  • 2a, first run (next up): wire the task runner into the app, plus the first-run starter-set picker. With no Bible installed, you pick a language and get the pre-ticked set from presets/, with the licence and size of each module. One tap downloads it, with progress. A half-finished set continues on the next start. The e2e cases download from a local repository served in the sandbox, never from CrossWire.
  • 2b, module manager: all repositories, search, install and remove, plus a top-level place for Settings (#30).
  • 2c, imports: import from a URL and through Content Hub.

Phone QC for F1 comes after 2c.

Part 2 is split into three PRs, shipped one at a time: - **2a, first run** (next up): wire the task runner into the app, plus the first-run starter-set picker. With no Bible installed, you pick a language and get the pre-ticked set from `presets/`, with the licence and size of each module. One tap downloads it, with progress. A half-finished set continues on the next start. The e2e cases download from a local repository served in the sandbox, never from CrossWire. - **2b, module manager:** all repositories, search, install and remove, plus a top-level place for Settings (#30). - **2c, imports:** import from a URL and through Content Hub. Phone QC for F1 comes after 2c.
Author
Collaborator

Part 2a is merged in #71 (766cf41), with Review-Confidence 85.

  • What it adds:
    • Installs run in the background and pick up again after the app is killed.
    • When no Bible is installed, a starter-set picker appears, with progress per module, an error message and a Retry button.
    • E2e cases install from a local repository.
  • On the phone (Plinius): merged main 766cf41 is installed. It starts in 296 ms, restores KJV Ruth 3 and saves on suspend.
  • Not tried on the phone yet: the first-run screen. It only appears with no modules installed. The F1 phone checklist will cover it after part 2c (reinstall the app with its data cleared), together with the starter page appearing over the picker when the last Bible is removed.
  • Next: #70 (switch Bible), then part 2b (module manager and #30), then 2c (import).

🤖 Generated with Claude Code

Part 2a is merged in #71 (766cf41), with Review-Confidence 85. - **What it adds:** - Installs run in the background and pick up again after the app is killed. - When no Bible is installed, a starter-set picker appears, with progress per module, an error message and a Retry button. - E2e cases install from a local repository. - **On the phone (Plinius):** merged main 766cf41 is installed. It starts in 296 ms, restores KJV Ruth 3 and saves on suspend. - **Not tried on the phone yet:** the first-run screen. It only appears with no modules installed. The F1 phone checklist will cover it after part 2c (reinstall the app with its data cleared), together with the starter page appearing over the picker when the last Bible is removed. - **Next:** #70 (switch Bible), then part 2b (module manager and #30), then 2c (import). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

Part 2b (module manager) merged in PR #82 (9caf6ed). The owner's phone check passed. Follow-ups: #83, #84, #85, #86, #87, #88. This issue stays open for part 2c (import).

Part 2b (module manager) merged in PR #82 (9caf6ed). The owner's phone check passed. Follow-ups: #83, #84, #85, #86, #87, #88. This issue stays open for part 2c (import).
Author
Collaborator

Part 2c (import) merged in PR #90 (5e6a0ed), Review-Confidence 70. The review audit caught one more defect, now fixed: a package whose DataPath was another installed module's folder replaced that module's files. Every install now refuses it. Follow-ups: #92, #93, #94, #95, #96, #97, #98.

F1 phone QC. Merged main 5e6a0ed is installed on the phone (11:52). Holding the reading pane's footer should show main@5e6a0ed. This issue stays open until you sign off.

First run. These steps clear the app's data, so its modules, place and settings go. Do them when you're ready, then launch from the launcher:
adb shell rm -rf /home/phablet/.local/share/utstudybible.schaefera /home/phablet/.cache/utstudybible.schaefera /home/phablet/.config/utstudybible.schaefera

  • 1. With no modules, the starter-set picker appears. You pick a language and the set is pre-ticked. Each module shows its licence and size.
  • 2. One tap downloads the set, with progress per module. The first Bible opens when it is done.
  • 3. Kill the app mid-download (swipe it away) and launch it again. The set continues from where it was.
  • 4. Airplane mode during a download: an error with Retry; Retry after reconnecting finishes it.

Module manager.

  • 5. ⋮ → Modules: the list, search, the language filter and the repository switches in Settings all work. Install one module and remove one.
  • 6. Removing the last Bible brings the starter page back over the picker.
  • 7. ⋮ → Refresh updates the lists. Offline, the last lists show with Install greyed out.

Import (passed on your earlier check of #90; re-check on this build):

  • 8. ⋮ → Import → an https address of a module zip installs it under its conf's name. Pressing and holding the field gives Paste.
  • 9. Importing a module that is already installed is refused with "remove it first".
  • 10. "Choose a file…" opens the Content Hub picker, and a picked zip installs.
  • 11. Optional: kill the app mid-import; on relaunch the import goes on.

Anything off → a comment here, or a new issue for anything bigger.

Part 2c (import) merged in PR #90 (5e6a0ed), Review-Confidence 70. The review audit caught one more defect, now fixed: a package whose `DataPath` was another installed module's folder replaced that module's files. Every install now refuses it. Follow-ups: #92, #93, #94, #95, #96, #97, #98. **F1 phone QC.** Merged main 5e6a0ed is installed on the phone (11:52). Holding the reading pane's footer should show `main@5e6a0ed`. This issue stays open until you sign off. **First run.** These steps clear the app's data, so its modules, place and settings go. Do them when you're ready, then launch from the launcher: `adb shell rm -rf /home/phablet/.local/share/utstudybible.schaefera /home/phablet/.cache/utstudybible.schaefera /home/phablet/.config/utstudybible.schaefera` - [x] 1. With no modules, the starter-set picker appears. You pick a language and the set is pre-ticked. Each module shows its licence and size. - [x] 2. One tap downloads the set, with progress per module. The first Bible opens when it is done. - [x] 3. Kill the app mid-download (swipe it away) and launch it again. The set continues from where it was. - [x] 4. Airplane mode during a download: an error with Retry; Retry after reconnecting finishes it. **Module manager.** - [x] 5. ⋮ → Modules: the list, search, the language filter and the repository switches in Settings all work. Install one module and remove one. - [x] 6. Removing the last Bible brings the starter page back over the picker. - [x] 7. ⋮ → Refresh updates the lists. Offline, the last lists show with Install greyed out. **Import** (passed on your earlier check of #90; re-check on this build): - [x] 8. ⋮ → Import → an https address of a module zip installs it under its conf's name. Pressing and holding the field gives Paste. - [x] 9. Importing a module that is already installed is refused with "remove it first". - [x] 10. "Choose a file…" opens the Content Hub picker, and a picked zip installs. - [ ] 11. Optional: kill the app mid-import; on relaunch the import goes on. Anything off → a comment here, or a new issue for anything bigger.
Owner

Comments:
ℹ️ The "Choose your bibles" should be removed, as the setup step is rather clear, and isn't just for bibles.
ℹ️ The remove button in the module deletion modal popup should probably be red, as all destructive operations really should be for UX purposes, but this can be redone after a UI/UX design document has been created.
ℹ️ Hitting refresh after the completion of an action (such as installing a module or bible) should clear the previous notice. Additionally, the location for the text seems a bit crammed in. Should be resolved after the UI/UX design documents are made.

Otherwise all checks are good.

Comments: ℹ️ The "Choose your bibles" should be removed, as the setup step is rather clear, and isn't just for bibles. ℹ️ The remove button in the module deletion modal popup should probably be red, as all destructive operations really should be for UX purposes, but this can be redone after a UI/UX design document has been created. ℹ️ Hitting refresh after the completion of an action (such as installing a module or bible) should clear the previous notice. Additionally, the location for the text seems a bit crammed in. Should be resolved after the UI/UX design documents are made. Otherwise all checks are good.
Author
Collaborator

F1 signed off on main 5e6a0ed (comment 2134): steps 1–10 pass; step 11 (optional) is covered by the core test an_import_killed_mid_download_goes_on_from_its_part.

From the phone log during the check:

  • Airplane mode: the first module gave up at 11:59:01 ("No internet connection") after its retries; the rest followed about 15 s apart; Retry and the queue finished all of them once back online.
  • Content Hub: ASV imported twice (tasks 22 and 24, a remove between), no errors.
  • AppArmor denials, no visible effect: Libertine list (on start-up) and the connectivity service's Private interface (offline greying still works through the public status).

Follow-ups from your comments: #99 (drop "Choose your bibles", Could), #100 (show "Retrying…" during the wait, Could); red destructive buttons and the Modules notice (clear on Refresh, spacing) are noted on #95 for the design. Closing.

F1 signed off on main 5e6a0ed (comment 2134): steps 1–10 pass; step 11 (optional) is covered by the core test `an_import_killed_mid_download_goes_on_from_its_part`. From the phone log during the check: - Airplane mode: the first module gave up at 11:59:01 ("No internet connection") after its retries; the rest followed about 15 s apart; Retry and the queue finished all of them once back online. - Content Hub: ASV imported twice (tasks 22 and 24, a remove between), no errors. - AppArmor denials, no visible effect: Libertine `list` (on start-up) and the connectivity service's `Private` interface (offline greying still works through the public status). Follow-ups from your comments: #99 (drop "Choose your bibles", Could), #100 (show "Retrying…" during the wait, Could); red destructive buttons and the Modules notice (clear on Refresh, spacing) are noted on #95 for the design. Closing.
Sign in to join this conversation.
No milestone
No project
No assignees
2 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#10
No description provided.