Install queue: a failing download blocks every later install, and none can be cancelled #74

Closed
opened 2026-10-23 14:44:06 +00:00 by claude-bot · 3 comments
Collaborator

Found by the owner on the phone after #72, via the Bible chooser's "+":

There's currently no way to cancel downloads in progress, and the GerSch download has failed with temporary failure in name resolution, and everything else waits on it, so the user can effectively get softlocked out of being able to install a new bible

Seen (Plinius, build a7f00d6):

  • GerSch, GerElb1871, StrongsGreek, StrongsHebrew, Robinson and TSK are queued.
  • GerSch fails with "temporary failure in name resolution". The journal shows install GerSch downloading then install GerSch retrying in the same second, on every launch (16:40:39, 16:41:38).
  • The other items wait behind it indefinitely. There is no cancel, so no further Bible can be installed: a softlock.
  • From the phone's shell (same WiFi, 16:45), DNS works: getent hosts ftp.crosswire.org gives 209.250.6.226, plus a NAT64 AAAA. So either the app's confined resolver fails (AppArmor, resolver socket, IPv6-first with no fallback), or an old failure from when the phone was on mobile data is being retried with a stale or blocked path.

Wanted:

  1. Root cause of the DNS failure in the app while the shell resolves. If it is a real app bug, fix it, with a test where possible.
  2. A failure never blocks the queue. A failed item is marked failed and the next one starts. A transient error retries with backoff, but without holding up the others indefinitely.
  3. Cancel. Each queued, running or failed item can be cancelled from the progress view, and one action clears all. Cancelling removes partial files atomically (no half-installed module in mods.d), and survives a kill: the "save within about 1 s" and resumable-task rules.
  4. Retry a failed item by hand.
  5. e2e coverage: an unreachable source fails one item, the next one installs, and cancel removes a queued item.

Blast radius: trunk (core/src/tasks/, sword/src/install*, qt/ glue).

🤖 Generated with Claude Code

Found by the owner on the phone after #72, via the Bible chooser's "+": > There's currently no way to cancel downloads in progress, and the GerSch download has failed with temporary failure in name resolution, and everything else waits on it, so the user can effectively get softlocked out of being able to install a new bible **Seen (Plinius, build a7f00d6):** - GerSch, GerElb1871, StrongsGreek, StrongsHebrew, Robinson and TSK are queued. - GerSch fails with "temporary failure in name resolution". The journal shows `install GerSch downloading` then `install GerSch retrying` in the same second, on every launch (16:40:39, 16:41:38). - The other items wait behind it indefinitely. There is no cancel, so no further Bible can be installed: a softlock. - From the phone's shell (same WiFi, 16:45), DNS works: `getent hosts ftp.crosswire.org` gives 209.250.6.226, plus a NAT64 AAAA. So either the app's confined resolver fails (AppArmor, resolver socket, IPv6-first with no fallback), or an old failure from when the phone was on mobile data is being retried with a stale or blocked path. **Wanted:** 1. **Root cause** of the DNS failure in the app while the shell resolves. If it is a real app bug, fix it, with a test where possible. 2. **A failure never blocks the queue.** A failed item is marked failed and the next one starts. A transient error retries with backoff, but without holding up the others indefinitely. 3. **Cancel.** Each queued, running or failed item can be cancelled from the progress view, and one action clears all. Cancelling removes partial files atomically (no half-installed module in mods.d), and survives a kill: the "save within about 1 s" and resumable-task rules. 4. **Retry** a failed item by hand. 5. **e2e coverage:** an unreachable source fails one item, the next one installs, and cancel removes a queued item. Blast radius: trunk (`core/src/tasks/`, `sword/src/install*`, `qt/` glue). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

More evidence, from the phone at 16:56 on build c0d97e6, over WiFi:

  • I cleared the stuck queue: the GerSch… rows and GerSch.zip.part are gone. A copy of the stuck state is kept on the dev PC.
  • The owner then queued StrongsGreek, StrongsHebrew, Robinson and TSK from the "+".
  • StrongsGreek went downloading → retrying within the same second. A new 0-byte tasks/StrongsGreek.zip.part was created, and the queue is softlocked again.

So every download fails inside the app, not just GerSch, while the shell resolves ftp.crosswire.org. The cause is in the app's networking path (resolver, AppArmor or socket family), not one module or source.

🤖 Generated with Claude Code

More evidence, from the phone at 16:56 on build c0d97e6, over WiFi: - I cleared the stuck queue: the GerSch… rows and `GerSch.zip.part` are gone. A copy of the stuck state is kept on the dev PC. - The owner then queued StrongsGreek, StrongsHebrew, Robinson and TSK from the "+". - StrongsGreek went `downloading` → `retrying` within the same second. A new 0-byte `tasks/StrongsGreek.zip.part` was created, and the queue is softlocked again. So **every** download fails inside the app, not just GerSch, while the shell resolves `ftp.crosswire.org`. The cause is in the app's networking path (resolver, AppArmor or socket family), not one module or source. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

Merged in #76 (Review-Confidence 70). On the phone (build c6ef183), the owner confirmed: "The actual download worked". StrongsGreek, Robinson and TSK installed at 17:46, which confirms the networking policy group was the cause.

StrongsHebrew failed in the same run, which is a separate packaging bug, now #77. It was marked failed and the rest of the queue carried on: the new no-blocking behaviour, seen live.

Still to try on the phone before sign-off:

  • Queue two items, cancel the queued one, and press Cancel all during the running download. The choice comes back and installing works again.
  • Dismiss and Retry on the failed StrongsHebrew row. Retry fails again until #77 is fixed, and that is expected.
  • Optional: turn WiFi off mid-download. After about 15 s the item fails without blocking the queue, and Retry continues it.

🤖 Generated with Claude Code

Merged in #76 (Review-Confidence 70). On the phone (build c6ef183), the owner confirmed: "The actual download worked". StrongsGreek, Robinson and TSK installed at 17:46, which confirms the `networking` policy group was the cause. StrongsHebrew failed in the same run, which is a separate packaging bug, now #77. It was marked failed and the rest of the queue carried on: the new no-blocking behaviour, seen live. **Still to try on the phone before sign-off:** - [x] Queue two items, cancel the queued one, and press Cancel all during the running download. The choice comes back and installing works again. - [x] Dismiss and Retry on the failed StrongsHebrew row. Retry fails again until #77 is fixed, and that is expected. - [x] Optional: turn WiFi off mid-download. After about 15 s the item fails without blocking the queue, and Retry continues it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Owner

This issue seems somewhat obsolete. Checked and all checks pass, so closing.

This issue seems somewhat obsolete. Checked and all checks pass, so 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#74
No description provided.