dms_tailscalectl/tailscalectl
vybe 843e3d01f0 feat(proc): direct drop-in port from 4x raw Process to Proc singleton (exact poll-act-poll behavior preserved)
- Removed import Quickshell.Io + all 4 Process { toggleProcess, copyProcess, exitNodeProcess, statusCheck }
- All one-shot commands now use Proc.runCommand(id, argv, (stdout, exitCode) => {...})
- _pendingAction moved to clean root property (was hacked onto statusCheck object)
- Introduced _runStatusCheck() helper + updated wrappers (toggleTailscale, refreshStatus, setExitNode, copyToClipboard, _runNextCopy)
- Exact same sequencing and defensive logic:
  * toggle: set pending → status poll for truth → decide up/down → act → post-act status verify
  * copy retry state machine unchanged (just Proc instead of .command/.running)
  * exit-node and generic refresh paths identical
- Added explicit comment documenting why the poll-act-poll exists (defensive, not forbidden state per AGENTS.md)
- stderr detail dropped from action errors (per chosen A strategy; generic messages only)
- All new JS follows repo ; + {} style
- I18n wrappers already in place from prior slice

Written by AI agent working for @jtmorris. Model: grok-build-0.1.
2026-05-25 03:00:33 +00:00
..
i18n feat(i18n): make lib.js strings I18n source keys (strategy A); remove dead symbol exports; update tests; add i18n/ scaffolding + en.json placeholder 2026-05-25 03:00:33 +00:00
lib.js feat(i18n): make lib.js strings I18n source keys (strategy A); remove dead symbol exports; update tests; add i18n/ scaffolding + en.json placeholder 2026-05-25 03:00:33 +00:00
plugin.json fix: remove unused settings_read/settings_write permissions from plugin.json 2026-05-25 03:00:33 +00:00
TailscaleWidget.qml feat(proc): direct drop-in port from 4x raw Process to Proc singleton (exact poll-act-poll behavior preserved) 2026-05-25 03:00:33 +00:00