2026-04-13 - 2026-07-13
Overview
1 pull request merged by 1 user
Merged
#36 Add conduct rules for agents.
50 issues closed from 2 users
Closed
#34 Implement i18n/localization for Tailscale plugin strings
Closed
#48 Zero test coverage for Process lifecycles, timing, or widget behavior
Closed
#47 No structured logging of command execution or results
Closed
#42 isConnected state becomes stale between timer polls
Closed
#43 TailscaleWidget.qml mixes UI, timers, Processes, and logic with no separation
Closed
#49 Clipboard path uses fragile sh -c string construction
Closed
#50 propagateComposedEvents on right-click MouseArea is a footgun
Closed
#51 plugin.json contains unprofessional author string
Closed
#46 Error paths are inconsistent across Process handlers
Closed
#44 Timer continues polling after tailscale binary disappears or fails
Closed
#41 makeExitNodeCommand("") emits invalid tailscale command
Closed
#40 for...in loops without hasOwnProperty guard in lib.js
Closed
#38 statusCheck parses stdout in onStreamFinished before onExited validates exit code
Closed
#52 tailscale binary invoked via PATH with no absolute path or sandboxing
Closed
#45 _pendingToggleAction is a stringly-typed workaround for stale state
Closed
#39 copyProcess has no onExited handler
Closed
#33 Aggressive unconditional 5-second polling even when popout is closed (battery/CPU waste)
Closed
#31 Duplicate state-reset logic in statusCheck catch vs onExited (minor maintainability)
Closed
#30 statusCheck triggered from too many sites without deduplication (wasteful concurrent polls)
Closed
#32 Inverted MouseArea + manual size binding anti-pattern in peer list delegate
Closed
#29 Lax / fragmented error handling throughout the widget (catch-all masking, missing exit checks, no stderr)
Closed
#28 No accessibility attributes + hardcoded English strings (a11y + i18n gap)
Closed
#27 Redundant boundsBehavior: DragAndOvershootBounds on ListView (unwanted desktop bounce)
Closed
#26 Timer fires before detectClipboard completes (startup race on first statusCheck)
Closed
#25 No stderr capture on toggleProcess / exitNodeProcess (lost diagnostic output)
Closed
#24 Missing package.json declaring module type (ESM/CJS mismatch between tests and lib)
Closed
#23 Hardcoded popout dimensions vs dynamic content (magic numbers, no implicit sizing)
Closed
#22 Redundant duplicate keys in errorMessage() (up/connect, down/disconnect)
Closed
#21 Missing edge-case tests for parsePeers and findActiveExitNode
Closed
#20 for...in without hasOwnProperty/Object.keys guard in lib.js (prototype-chain risk)
Closed
#19 Conflicting anchors.fill + anchors.verticalCenter on peer-list delegate Row (runtime warning + undefined layout)
Closed
#18 Layout.fillWidth inside plain Row is a silent no-op (status row spacing broken)
Closed
#15 No guard against concurrent toggleProcess / exitNodeProcess invocations
Closed
#17 Premature 'Copied' toast with no exit-status check on copyProcess
Closed
#16 Over-declared permissions in plugin.json (unused settings_read / settings_write)
Closed
#13 Double error toast spam on statusCheck failure (TailscaleWidget.qml)
Closed
#11 Remove redundant binaryAvailable guard from TailscaleWidget.qml
Closed
#14 Toggle error message can report the opposite action due to stale isConnected state
Closed
#12 Shell interpolation of clipboard detection output in TailscaleWidget.qml
Closed
#35 Extract QML-embedded logic into testable JavaScript modules
Closed
#1 Tailscale Widget Plugin for Dank Bar
Closed
#9 8. Final packaging & manual test
Closed
#8 7. Error handling & toasts
Closed
#7 6. Exit-node selection buttons
Closed
#6 5. Peer list + click-to-copy
Closed
#5 4. Popout skeleton – header row
Closed
#10 #3.5 Fix popout opening blocked by MouseArea event consumption
Closed
#4 3. Status polling + reactive state
Closed
#2 1. Plugin manifest & scaffolding
Closed
#3 2. Bar pill – icon + right-click toggle
52 issues created by 1 user
Opened
#1 Tailscale Widget Plugin for Dank Bar
Opened
#2 1. Plugin manifest & scaffolding
Opened
#3 2. Bar pill – icon + right-click toggle
Opened
#4 3. Status polling + reactive state
Opened
#5 4. Popout skeleton – header row
Opened
#6 5. Peer list + click-to-copy
Opened
#7 6. Exit-node selection buttons
Opened
#8 7. Error handling & toasts
Opened
#9 8. Final packaging & manual test
Opened
#10 #3.5 Fix popout opening blocked by MouseArea event consumption
Opened
#11 Remove redundant binaryAvailable guard from TailscaleWidget.qml
Opened
#12 Shell interpolation of clipboard detection output in TailscaleWidget.qml
Opened
#13 Double error toast spam on statusCheck failure (TailscaleWidget.qml)
Opened
#14 Toggle error message can report the opposite action due to stale isConnected state
Opened
#15 No guard against concurrent toggleProcess / exitNodeProcess invocations
Opened
#16 Over-declared permissions in plugin.json (unused settings_read / settings_write)
Opened
#17 Premature 'Copied' toast with no exit-status check on copyProcess
Opened
#18 Layout.fillWidth inside plain Row is a silent no-op (status row spacing broken)
Opened
#19 Conflicting anchors.fill + anchors.verticalCenter on peer-list delegate Row (runtime warning + undefined layout)
Opened
#20 for...in without hasOwnProperty/Object.keys guard in lib.js (prototype-chain risk)
Opened
#21 Missing edge-case tests for parsePeers and findActiveExitNode
Opened
#22 Redundant duplicate keys in errorMessage() (up/connect, down/disconnect)
Opened
#23 Hardcoded popout dimensions vs dynamic content (magic numbers, no implicit sizing)
Opened
#24 Missing package.json declaring module type (ESM/CJS mismatch between tests and lib)
Opened
#25 No stderr capture on toggleProcess / exitNodeProcess (lost diagnostic output)
Opened
#26 Timer fires before detectClipboard completes (startup race on first statusCheck)
Opened
#27 Redundant boundsBehavior: DragAndOvershootBounds on ListView (unwanted desktop bounce)
Opened
#28 No accessibility attributes + hardcoded English strings (a11y + i18n gap)
Opened
#29 Lax / fragmented error handling throughout the widget (catch-all masking, missing exit checks, no stderr)
Opened
#30 statusCheck triggered from too many sites without deduplication (wasteful concurrent polls)
Opened
#31 Duplicate state-reset logic in statusCheck catch vs onExited (minor maintainability)
Opened
#32 Inverted MouseArea + manual size binding anti-pattern in peer list delegate
Opened
#33 Aggressive unconditional 5-second polling even when popout is closed (battery/CPU waste)
Opened
#34 Implement i18n/localization for Tailscale plugin strings
Opened
#35 Extract QML-embedded logic into testable JavaScript modules
Opened
#38 statusCheck parses stdout in onStreamFinished before onExited validates exit code
Opened
#39 copyProcess has no onExited handler
Opened
#40 for...in loops without hasOwnProperty guard in lib.js
Opened
#41 makeExitNodeCommand("") emits invalid tailscale command
Opened
#42 isConnected state becomes stale between timer polls
Opened
#43 TailscaleWidget.qml mixes UI, timers, Processes, and logic with no separation
Opened
#44 Timer continues polling after tailscale binary disappears or fails
Opened
#45 _pendingToggleAction is a stringly-typed workaround for stale state
Opened
#47 No structured logging of command execution or results
Opened
#46 Error paths are inconsistent across Process handlers
Opened
#48 Zero test coverage for Process lifecycles, timing, or widget behavior
Opened
#49 Clipboard path uses fragile sh -c string construction
Opened
#50 propagateComposedEvents on right-click MouseArea is a footgun
Opened
#51 plugin.json contains unprofessional author string
Opened
#52 tailscale binary invoked via PATH with no absolute path or sandboxing
Opened
#54 Feature Request: Public IP address in addition to Tailscale node IP address.
Opened
#55 Bug: Tailscale node list still shows, even when disconnected from Tailscale.