Skip to content

Fix mount races and recover stale FUSE endpoints - #1

Open
nixfred wants to merge 9 commits into
davidszp:mainfrom
nixfred:main
Open

Fix mount races and recover stale FUSE endpoints#1
nixfred wants to merge 9 commits into
davidszp:mainfrom
nixfred:main

Conversation

@nixfred

@nixfred nixfred commented Aug 23, 2026

Copy link
Copy Markdown

Summary

  • serialize concurrent mount requests from multiple panel instances
  • detect dead fuse.rclone endpoints left after daemon restarts
  • lazily detach only inaccessible stale rclone mounts before recreating them
  • leave healthy external mounts untouched
  • keep QObject references (panel, service) off the IpcHandler: wrap it in a QtObject, so Quickshell stops logging Type QObject* cannot be used across IPC on every plugin load

Verification

  • ./check passes completely
  • reproduced and repaired the real Transport endpoint is not connected failure on Omarchy
  • plugin status reports a healthy mount with zero errors and zero pending uploads
  • journalctl --user -u omarchy-shell no longer shows the PanelIpc IPC warnings after reload

LR-T: rclone, omarchy, fuse, mount-recovery

LR-D: desktop/plugins/storage

LR-K: stale-fuse, transport-endpoint, lazy-unmount
@nixfred nixfred changed the title fix: serialize duplicate mount requests Fix mount races and recover stale FUSE endpoints Aug 23, 2026
nixfred and others added 7 commits August 22, 2026 21:50
LR-T: rclone, omarchy, quickshell, ipc

LR-D: desktop/plugins/storage

LR-K: qobject, panel-ipc, warning-noise
WHAT: BandwidthRow gains a throughput bar + caption ("2 MB/s of 5.24 MB/s cap",
"2 MB/s in use", or "idle"). Model.liveRate sums transferring[].speed;
bwLimitBytes parses rclone's binary rate echo (5Mi, 10M:1M); bwMeterFraction
scales to the cap, else the session peak (Service.peakRate). statusText now
reports the live rate instead of stats.speed (a daemon-lifetime average).
WHY: Fred wants to see bandwidth actually in use, not just the cap.
TAGS: rclone, omarchy, plugin, bandwidth, meter, throughput
LR-T: rclone,bandwidth,meter
LR-D: omarchy-plugins
LR-K: rclone-bandwidth-meter
WHAT: setup-daemon.sh template writes ExecStart with --log-level NOTICE
WHY: INFO logged vfs cache-clean every minute; Drive 403 abusive-file errors
buried journal; flagged OrignialConversation.md.rtf moved server-side to
gdrive:Quarantine-google-flagged/ (both copies)
ENABLES: quiet rclone journal; quarantine reversible via rclone moveto back
LR-T: rclone,logging,systemd,drive,quarantine LR-D: infrastructure,observability LR-K: rclone-rcd,log-level,abusive-file,vfs-cache
…panel

WHAT: The visual overhaul every other bar plugin got this week, applied
here. Three new components and a reshaped Panel.qml:
  * SkyField.qml — hero: sonar rings ping while bytes move, breathe while
    the daemon idles; packets cross the cloud in the direction of travel
    (up/down/both from srcFs/dstFs), faster the harder the link is pushed;
    one pip orbits per mounted remote; struck-out cloud when rcd is down
  * RateTrace.qml — last 48 polls of liveRate as a filled trace under the
    title; repaints once per poll, head pulses while live
  * QuotaHalo.qml — every remote's ProviderIcon inside a storage ring
    (accent <80%, amber <95%, red after); mounted rows breathe, rows with
    queued writes or a dead grant throb; no ring when the probe never said
  * Panel.qml — Grid of two Columns (left = hero/bandwidth/jobs/transfers,
    right = remotes/add/recent); panelColumns setting, 1 = original order;
    sizzle setting gates every animation, ANDed with opened; bar hairline
    under the icon while transferring
  * Service.qml — rateHistory ring appended once per poll
  * Model.js — flowDirection, isRemoteFs, quotaFraction, quotaLevel,
    rateHistoryPush, rateTraceScale (+41 cases in test/model-test.js)
WHY: Fred: "We have done major overhauls on all the plugins but this one."
Halo Bluetooth, Chronos, Tesla, Sandman and Burn Bar all got hero motion,
per-row rings, a sizzle switch and/or a two-column layout on 2026-09-03/04.
HOW: No Canvas repaints per frame — every moving part is a scene-graph
scale/opacity/position animation (the lesson from the Halo hero's 35% core).
Glyphs resolved by name via test/glyph-coverage.py --find, never typed.
Column width derived from the Grid's realised width, not the requested
contentWidth (the Tesla clipping trap).
VERIFIED: ./check green except panel-test, which drives the OLD live build
(zombie IPC after hot-reload; rerun after deploy).

LR-T: omarchy-plugin, rclone, sizzle, hero, two-column, quota-ring, overhaul
LR-D: omarchy, quickshell, qml, rclone
LR-K: sky-hero, rate-trace, quota-halo, panel-columns, sizzle-switch, scene-graph-animation
LR-L: law-7, law-9, law-14
LR-S: 0626pm-omarchy-rclone
LR-E: high
LR-R: 895a4f0, f7a27bc

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VYUpS2NZRr18Pyhs1MNqR8
WHAT: Screenshot of the live panel on vic (grim, not drawn) during a
512Ki-capped copy of a 9 MB Drive folder: download cloud with rings, the
trace touching the cap line, JOBS and TRANSFERRING on the left, gdrive's
storage ring on the right.
WHY: The README embeds it; the old one showed the single-column upstream
panel. A preview must be the real thing.

LR-T: omarchy-plugin, rclone, preview, docs
LR-D: omarchy, rclone
LR-K: preview-screenshot, real-not-drawn

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VYUpS2NZRr18Pyhs1MNqR8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant