Error paths are inconsistent across Process handlers
_pendingToggleAction is a stringly-typed workaround for stale state
TailscaleWidget.qml mixes UI, timers, Processes, and logic with no separation
Timer continues polling after tailscale binary disappears or fails
isConnected state becomes stale between timer polls
makeExitNodeCommand("") emits invalid tailscale command
for...in loops without hasOwnProperty guard in lib.js
copyProcess has no onExited handler
statusCheck parses stdout in onStreamFinished before onExited validates exit code
Aggressive unconditional 5-second polling even when popout is closed (battery/CPU waste)
Resolved via merge daab237 (polling now guarded when popout closed). The plugin is confirmed working by @jtmorris. Human code review required before merging to testing.
Aggressive unconditional 5-second polling even when popout is closed (battery/CPU waste)
Duplicate state-reset logic in statusCheck catch vs onExited (minor maintainability)
statusCheck triggered from too many sites without deduplication (wasteful concurrent polls)
Inverted MouseArea + manual size binding anti-pattern in peer list delegate
Duplicate state-reset logic in statusCheck catch vs onExited (minor maintainability)
Resolved via merge daab237. The plugin is confirmed working by @jtmorris. Human code review required before merging to testing.
statusCheck triggered from too many sites without deduplication (wasteful concurrent polls)
Resolved via merge daab237. The plugin is confirmed working by @jtmorris. Human code review required before merging to testing.
Inverted MouseArea + manual size binding anti-pattern in peer list delegate
Resolved via merge daab237. The plugin is confirmed working by @jtmorris. Human code review required before merging to testing.
No accessibility attributes + hardcoded English strings (a11y + i18n gap)
Lax / fragmented error handling throughout the widget (catch-all masking, missing exit checks, no stderr)
Redundant boundsBehavior: DragAndOvershootBounds on ListView (unwanted desktop bounce)
Resolved via merge 07982c2. The plugin is confirmed working by @jtmorris. Human code review required before merging to testing.