Classify and present remote upload name conflicts #8
Loading…
Reference in a new issue
No description provided.
Delete branch "oss-oo/upload-conflict-state-rt20261008"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Detects and presents remote upload name conflicts as a first-class state instead of an endlessly "retrying" queue item. Comes from a real incident class (2026-10-08): a torn block-POST left a server-side draft, and every VFS retry failed with 422 "name already exists" for hours while the UI only showed generic retrying.
Changes
bin/pdrive-state(schema 1 → 2, backwards compatible): queue items gainedconflict,conflict_since,conflict_kind— flagged after ≥3 distinct failed tries matching the real conflict signatures (Proton422 … A file or folder with that name already exists, including the pre-v2 wording, or the bridge'scan't create a new file upload request and can't find an active/draft revision).400 "Upload file empty"and 502s do not classify. Newupload-conflictissue category; incident grouping now keys backend-context subjects by category so a conflict incident no longer inherits an older 502'shttp-5xxcategory andfirst_seen.libexec/pdrive-draft-recovery-auto: the automation trigger accepts the real signatures (plus the legacy phrase, never narrowed), file-bound, with backend-context lines only under the existing single-item-queue guard. All existing guards (queue fingerprint, activity probe, confirmations, cooldowns, generation/namespace handling) and the recovery action are unchanged.bin/pdrive-ui: conflict queue rows (warning pill, per-row detail, hover/pressed/keyboard-focus + click/Enter/Space navigation to the History review), overview card line, translated History incident rendering with self-heal expectation and both recovery routes. Exactly one desktop notification per unresolved incident (persistent dedup marker, atomic 0600 write, removed on resolution, policy + language gated, sent off the main loop). All new strings in English and German.docs/TROUBLESHOOTING.mdsymptom entry ("Upload retries forever: name already exists");docs/OPERATIONS.mdreference for the new state and notification behavior.Validation
make checkfully green (re-run independently during review);git diff --checkclean.