From 47a423413b71c5e1c57e3d9c6c7f57241ccf2bfb Mon Sep 17 00:00:00 2001 From: Jason Ross Date: Mon, 24 Aug 2026 23:15:51 -0500 Subject: [PATCH] Say which conversions come back, rather than that they all do README promised, without qualification: "Conversions run as durable background work, so they survive leaving the app and are restored after a restart." The first half is true and the reattachment work made it truer. The second half has one exception the sentence does not admit, and it is the case a user is most likely to hit without understanding it. When Android refuses a foreground-service start, FailureOutcome retries -- ten attempts on the default exponential backoff, 30 s doubling to a five-hour clamp, about eight and a half hours in total -- and then returns FOREGROUND_DENIED on a FAILED job. Reattachment excludes FAILED (Reattachment.kt:176). So the job is not restored, and neither is the message explaining why: the user opens the app to an empty screen. FailureOutcome's own KDoc already says this plainly -- "a user who was not watching when the eleventh attempt ran will find an empty screen rather than the explanation". The code was honest and the README was not, which is the wrong way round for the two documents. The replacement says what actually happens and ends with the thing the user can act on: reopening the app is what grants permission to run, so a conversion stalled this way should be started again rather than waited on. That is the same reasoning FOREGROUND_DENIED_MESSAGE is written on -- "open the app and start it again" is the fix, not filler. Deliberately not claimed: that the app tells you. It does not, and #16 is the open ticket for giving a present, willing user a way to make that retry happen now. Writing "you will be told" here would be the same defect this commit is fixing, one release earlier. Verified against the current code rather than the finding's date -- R35 was filed as PLAUSIBLE on 2026-08-22 and both mechanisms it names are still in place. Closes #44. --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7171ff0..28d9b0a 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,14 @@ container × codec matrix — including combinations that cannot work, which it offers alternatives for rather than hiding. Conversions run as durable background work, so they survive leaving the app and are -restored after a restart. +restored when you reopen it. + +One case is not restored, and it is worth knowing about. If Android refuses to let a job +restart in the background, it is retried on an exponential backoff for about eight and a +half hours and then given up on — and a job that has been given up on does not come back +when you reopen the app. Reopening the app is what grants permission to run, so a +conversion that has stalled this way is best started again from the app rather than waited +on. ## Building