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
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 |
|---|---|---|---|---|---|
bugs-extension-options.md |
FIXED v0.1.33 — Export now blocks on RPC failure; success path verified with populated keep_ranking | ||||
bugs-extension-options.md |
FIXED v0.1.34 — Element validators per array key; malformed elements dropped with index in modal; mirror check resolved in same commit | ||||
bugs-extension-bg.md |
FIXED v0.1.36 — Top-level ensureContextMenu() call at module init runs on every SW evaluation | ||||
bugs-host.md |
FIXED v0.1.37 — Per-invocation spawn handoff via threading.Event + dict; handle_scan waits ≤500ms for Popen result | ||||
bugs-host.md |
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 | ||||
bugs-extension-popup.md |
FIXED v0.1.40 — Monotonic _currentSearchId gate; stale callbacks bail before any UI write |
||||
bugs-extension-bg.md |
FIXED v0.1.42 — Promise-chain lock around recordRpc; 5/5 concurrent writes preserved in smoke test (vs 1/5 unlocked) | ||||
bugs-python.md |
FIXED (no manifest bump — CLI only) — Mirrored save_cache retry; 3/3 smoke tests pass | ||||
bugs-extension-bg.md |
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 rclonex → rclone-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)
- One bug per fix session. No batch fixes.
- 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\): bumpmanifest.jsonversion (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
- After fixes in a chunk: full chunk test suite re-run (not just per-file)
- 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.pyor sibling files inhost/) → bumpmanifest.jsonAS 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 bumpVERSIONconstant insidercjav-host.pyfor 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/*.pyorrc-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.
Recommended pause
Per audit plan: pause before starting Phase 2. Confirm:
- Severity re-rank looks right (compare side by side, not in isolation)
- Fix-boundary distribution is acceptable (Extension Options has the only Severe — Options pane will need careful regression check after fix)
- Decision on whether to fix all 14 or only the Severe + critical Moderates
Standing by.