Skip to content

Clipboard history VM coverage, version sync, and brew formula - #243

Merged
hanthor merged 30 commits into
mainfrom
vmtest/clipboard-history
Sep 28, 2026
Merged

hanthor merged 30 commits into
mainfrom
vmtest/clipboard-history

Conversation

@hanthor

@hanthor hanthor commented Sep 28, 2026

Copy link
Copy Markdown
Member

Proven on the VM tier (clipboard-history check green in run 36335601846: both markers recorded). Brings: the clipboard-history VM check with keyring handling, version-sync test plus bump_version.sh as source of truth, the Linux Homebrew formula reference copy, and chroot image builds (#240). The dropdown half already landed via #242; identical content here merges clean.

- packaging/vmtest/checks.sh: new clipboard-history subcommand drives
  SetClipboard over the bus and asserts both markers surface in
  query --provider clipboard, against an engine on a private socket
- design: dropdown/dropdown_menu from the palette; the kind filter uses
  them in the launcher font instead of Iced's default chrome
- versions: workspace 0.28.1 to match the manifest tag; bump_version.sh
  moves every source together; version_sync test pins the invariant
- packaging/homebrew/compass.rb: Linux-only formula draft for the
  experimental tap (sha256 pending the release tag)
runuser keeps root's HOME, so the unlock operated on /root's keyring
while the session daemon kept the user's locked one; secret-tool then
hung the full 60s probe timeout on the lock prompt. Set HOME from
getent, verify Locked after unlock, and recreate with a known password
when still locked. Also pipe the probe secret on stdin (closed stdin
stored an empty secret) and put timeouts around engine ping/shutdown
and SetClipboard, which had no bound.
The export -f ran before engine() was defined, so the check died on
'export: engine: not a function' before its first echo.
The replacement daemon needs a moment to own the bus name, so the
Locked read raced it and came back empty. Wait for the service, then
unlock the fresh daemon directly.
Gating on the login collection's Locked property proved unreliable and
--replace races the fresh daemon's bus ownership. Probe the roundtrip
as ground truth; when the autologin-locked login keyring is unusable,
create an unlocked collection over D-Bus and point the default alias
at it, which is what the Secret portal serves the Flatpak from.
Reopening the stdin pipe through runuser fails with EACCES; reading
fd 0 directly works.
The daemon rejects any other alias; 'default' both names the
collection and points the alias at it, so no SetAlias is needed.
The daemon password-protects new D-Bus collections through an
interactive prompt, so the sidecar could never work headless. Drop it:
try an empty password too, then delete the unknown-password login file,
stop the supervising autostart units, and --replace --unlock fresh.
Also removes a stale duplicated unlock block.
--replace never dethroned the PAM-started login daemon, which kept the
bus name while our replacement hung behind it. Kill every keyring
daemon, mask the user units against socket activation, and start one
fresh daemon with a known password, retried against respawns.
comm caps process names at 15 chars, so -x with the 21-char daemon
name never matches. Use -f with a bracketed first letter, which also
keeps the wrapper's own command line from matching.
wayland_display calls uid, but only wayland_display was exported, so
every engine call behind timeout logged 'uid: command not found' (and
ran with an empty WAYLAND_DISPLAY). Cosmetic on ping, real anywhere
the display matters.
checks.sh grew an engine() forwarder (fixed flags plus caller args),
which the flatpak call-site guard could not parse. Stand ping in for
the caller side so the fixed flags are still validated.
@hanthor
hanthor merged commit 1690cec into main Sep 28, 2026
31 checks passed
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