Files
rclone-jav/bugs-fix-queue.md
admin f7fc15b17c Sync working tree before initial Gitea push
Includes:
- cli.py path fix (parents[1]) for config/catalog resolution
- Library cleanup feature design docs (TODO.md, mockup)
- Audit + bug-queue markdowns from May 2026 reliability pass
- .gitignore expanded for transient artifacts
2026-05-26 22:35:42 +02:00

9.1 KiB

Phase 2 Fix Queue — audit-snapshot-2026-05-24T15-55Z.md

Compiled from bugs-python.md, bugs-host.md, bugs-extension-bg.md, bugs-extension-options.md, bugs-extension-popup.md after cross-chunk comparative re-rank. Per-chunk severity labels were assigned in isolation; this queue reflects normalized severity using the audit-plan + codex's re-rank criteria:

  • Severe: data loss/corruption · wrong remote operation · persistent broken workflow with no reasonable recovery · silent success when operation actually failed
  • Moderate: operation fails/hangs but user can retry · wrong persisted settings · diagnostic loss that materially blocks investigation · modal/workflow stuck until manual recovery · race causing stale/wrong visible results
  • Light: confusing UI · cosmetic stale state · diagnostic annoyance · non-blocking alert issue · two-click recoverable

Per-chunk bugs-*.md files have been updated so their severity sections are consistent with this queue.

Fix order (top-to-bottom)

# Original ID Re-ranked File Fix boundary One-line
1 opts M-2 S-1 bugs-extension-options.md Extension (Options) FIXED v0.1.33 — Export now blocks on RPC failure; success path verified with populated keep_ranking
2 opts M-1 M-1 bugs-extension-options.md Extension (Options) FIXED v0.1.34 — Element validators per array key; malformed elements dropped with index in modal; mirror check resolved in same commit
3 bg M-2 M-2 bugs-extension-bg.md Extension (background SW) FIXED v0.1.36 — Top-level ensureContextMenu() call at module init runs on every SW evaluation
4 host M-2 M-3 bugs-host.md Host (Python) FIXED v0.1.37 — Per-invocation spawn handoff via threading.Event + dict; handle_scan waits ≤500ms for Popen result
5 host M-1 M-4 bugs-host.md Host (Python) FIXED v0.1.39 — Threaded worker fire-and-forget for real alerts; test RPC waits 6s for synchronous pass/fail; outcome logged with alert_source
6 popup M-2 M-5 bugs-extension-popup.md Extension (Popup) FIXED v0.1.40 — Monotonic _currentSearchId gate; stale callbacks bail before any UI write
7 bg S-1 M-6 bugs-extension-bg.md Extension (background SW) FIXED v0.1.42 — Promise-chain lock around recordRpc; 5/5 concurrent writes preserved in smoke test (vs 1/5 unlocked)
8 python M-1 M-7 bugs-python.md CLI (Python) FIXED (no manifest bump — CLI only) — Mirrored save_cache retry; 3/3 smoke tests pass
9 bg M-1 L-1 bugs-extension-bg.md Extension (background SW) FIXED v0.1.43 — Dedicated _hostAlertLock around rate-limit + notification + Discord paths
10 bg L-1 L-2 bugs-extension-bg.md Extension (background SW) Discord post failures no passive UI surface
11 host L-1 L-3 bugs-host.md Host (Python) Stderr blocking 5s stale on rc-jav stall
12 popup L-1 L-4 bugs-extension-popup.md Extension (Popup) Stale expectedId between delete modal sessions
13 popup L-2 L-5 bugs-extension-popup.md Extension (Popup) History chip during open delete modal
14 popup M-1 L-6 bugs-extension-popup.md Extension (Popup) Search Clear button leaves delete modal open (demoted — two-click recovery)

Summary

  • Severe: 1 (#1 keep_ranking export) — FIXED v0.1.33
  • Moderate: 7 (#2-#8)
  • Light: 6 (#9-#14)
  • Total confirmed bugs: 14

Remaining: 0 S · 0 M · 5 L (9 fixed — all Severe + Moderate + 1 Light closed)

Shipped versions log

Tracks manifest version bumps. Not every bump corresponds to a queue entry — some ship out-of-band fixes flagged ad-hoc.

Version Queue ID What
0.1.33 S-1 Export blocks on keep_ranking RPC failure
0.1.34 M-1 sanitizeImportedSettings element validators
0.1.35 (out-of-band) Branding follow-up: _meta.app and export filename rclonexrclone-jav. No functional change.
0.1.36 M-2 Context menu re-registered on every SW evaluation (top-level ensureContextMenu() call)
0.1.37 M-3 handle_scan synchronously surfaces Popen failures via per-invocation Event/dict handoff (≤500 ms wait)
0.1.38 (M-2 follow-up) ensureContextMenu Promise-chain lock + per-create try/catch — fixes "duplicate id" race introduced by M-2's top-level call
0.1.39 M-4 post_discord_alert threaded fire-and-forget (real alerts) + sync wait with explicit timeout error (test RPC); outcome logged via discord_post event with alert_source
0.1.40 M-5 Popup monotonic _currentSearchId gate; stale runCheck/runManualSearch callbacks bail before UI write
0.1.41 (M-5 follow-up) Bump _currentSearchId BEFORE paused early-exit in runCheck/runManualSearch — closes same race class for pause-while-inflight
0.1.42 M-6 Promise-chain lock around recordRpc — serializes concurrent storage.local read-modify-write
(no bump) M-7 rcjav/cli.py save_config gains PermissionError retry to match save_cache — CLI repo, no extension files touched
0.1.43 L-1 Dedicated _hostAlertLock around maybeNotifyHostError; serializes rate-limit read/check/write + notification + Discord paths
0.1.44 (Phase 3 introduced-bug fix) M-3 spawn race: reorder _scan_proc = proc BEFORE spawn_event.set() so cancel handler sees live proc reference
0.1.45 (M-6 mirror) recordActivity race fix — same Promise-chain lock pattern as recordRpc; concurrent activity log writes now serialized

Fix-boundary summary

Boundary S M L Notes
CLI repo (Python D:\DEV\Project\rclone-jav\) 0 1 0 M-7 save_config retry only
Host (Python at D:\DEV\Extensions\Production\rclone-jav\host\) 0 2 1 M-3, M-4, L-3
Extension SW + content (background.js + content.js + manifest.json) 0 2 2 M-2, M-6, L-1, L-2
Extension Options (src/options/) 1 1 0 S-1, M-1
Extension Popup + Bulk (src/popup/, src/bulk-check/) 0 1 3 M-5, L-4, L-5, L-6

Phase 2 rules (per audit-plan)

  1. One bug per fix session. No batch fixes.
  2. Fix verification gate before marking status: fixed:
    • Re-run the bug's reproduction recipe → must produce Expected, not Actual
    • Per-file test re-run for affected file
    • If no test existed for the now-fixed behavior, write one
    • If extension code OR host code changed (any file under D:\DEV\Extensions\Production\rclone-jav\): bump manifest.json version (one bump per fix unless user explicitly batches). CLI fix (separate repo) does not trigger manifest bump.
    • Do NOT touch any other bug entry or any file marked DO NOT FIX
    • Update bug entry with Status: fixed + Fix: line citing the new file:line
  3. After fixes in a chunk: full chunk test suite re-run (not just per-file)
  4. Mirror checks: S-1 (none), M-1 (profiles[], partPatterns[] same pattern), M-2 (none), M-6 (options.js storage writes, activity log buffer, tabvault caller log out-of-scope)

Version bump policy for this queue

Each fix is its own user-requested update under the project's "one bump per shipped change" rule (see feedback_extension_version_bump.md). The manifest version chip is the user's reload-verification signal — they read it in brave://extensions after reload to confirm latest code is loaded.

  • Extension fix (background.js / src/options / src/popup / src/bulk-check / content.js / manifest.json itself) → bump manifest.json (one bump per fix unless explicitly batched)
  • Host fix (host/rcjav-host.py or sibling files in host/) → bump manifest.json AS WELL. Host folder is bundled inside the extension repo and ships together. User's reload habit is "reload extension + check version chip"; if only host changed, user has no other visible "latest version" signal in their normal workflow. Optionally also bump VERSION constant inside rcjav-host.py for forensic record (visible via Diagnostics card), but the manifest bump is the user-facing signal.
  • CLI fix (M-7 only — D:\DEV\Project\rclone-jav\rcjav/*.py or rc-jav.py) → no extension manifest bump. CLI lives in a separate repo; extension folder is unchanged. CLI changes take effect on the next CLI invocation automatically. If forensic version tracking is desired, optionally bump a CLI-side version marker, but no manifest bump.

If user explicitly batches multiple fixes into one shipped change → one bump for the batch. Default = per-fix bump.

Per audit plan: pause before starting Phase 2. Confirm:

  1. Severity re-rank looks right (compare side by side, not in isolation)
  2. Fix-boundary distribution is acceptable (Extension Options has the only Severe — Options pane will need careful regression check after fix)
  3. Decision on whether to fix all 14 or only the Severe + critical Moderates

Standing by.