fix(android): preserve queued upload scheduling - #439
Conversation
Obiente previewNC Native · Obiente updates this comment as the preview changes. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 454d73b427
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
e2a8728 to
d4e541c
Compare
4482b93 to
c2f0cc7
Compare
c2f0cc7 to
84677b8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 84677b8a69
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
84677b8 to
abcbb66
Compare
abcbb66 to
7b2e575
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7b2e575cd6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
7b2e575 to
a86e5ec
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a86e5ec1fa
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
a86e5ec to
3ed84f8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a81651dda8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6299358fb0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
When SessionCipher.decrypt fails because Android's keystore/provider is temporarily unavailable rather than because it raised the definitive InvalidSessionCiphertextException, this catch still classifies the queue as permanently quarantined. During startup, NextcloudNativeApplication treats that disposition as recovered and lets the monitor become idle; if the queued row had not yet reached WorkManager, it remains unscheduled even after the keystore recovers because no new signal is guaranteed. Reserve quarantine for definitive ciphertext failures and classify other decryption exceptions as retryable.
AGENTS.md reference: AGENTS.md:L281-L285
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ae87dc36a6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Outcome
Preserve durable attachment uploads when WorkManager accepts a job but its completion signal fails. Keep the journal and source ownership so startup and status restoration can recover the same upload without submitting a duplicate.
Recovery now also:
Cancellation after persistence remains cancellation. A source is released only when the queue can prove that no active job owns it.
Validation
The preceding recovery revision passed on the dedicated Linux build host at source tree
f26d5d41b6b6fe167a0b2138f806611e29be4503::androidApp:assembleDebug.bash tools/check-repository.shandgit diff --check.The latest revision also stops permanently retrying cleanup blocked by malformed peer metadata. Ambiguous non-preexisting grants remain quarantined. Proven preexisting grants use metadata-only removal without revoking another owner's grant. Three regression tests cover these cases.
Head
50db150461553e227b19907d7b0f2ea7ecec74e1includesmainat92dd2ae9cec1dc7dac16907e66d7b870694ebbbfand the parent provider-deadlock fix. All 49 layer commits retained identical patches during the latest restack. Full repository checks andgit diff --checkpassed. The new regression tests and inherited deadlock fix have not yet received direct build-host validation because the host stopped responding during another capture job. Hosted checks on this head are pending; the earlier 145-test result does not cover these newest changes.Limits and dependency
Deterministic tests and APK assembly do not prove emulator lifecycle behavior, a live Nextcloud attachment upload, or fault injection inside Android's real WorkManager database. Those checks were not performed for this revision.
This PR builds on #438, which owns the adjacent account-isolated queued credential lookup.
Advances #52