Skip to content

Build the Cua Hyprland plugin from Cua's kit 1.3.0 - #1015

Merged
ryanrhughes merged 2 commits into
masterfrom
cua-hyprland-plugin-kit-1.3.0
Oct 13, 2026
Merged

ryanrhughes merged 2 commits into
masterfrom
cua-hyprland-plugin-kit-1.3.0

Conversation

@spencerbull

Copy link
Copy Markdown
Contributor

The plugin recipe still builds from Cua's stable kit 1.1.0: it rebases that kit onto the separate Driver 0.32.0 source archive, derives its own edge profile, and re-measures Arch's Hyprland 0.56.2-4 rebuild itself. Cua now publishes kit 1.3.0 for Omarchy edge, containing the plugin source, its packaging tooling and a profile measured against Hyprland 0.56.2-4. This builds that kit as published. The Omarchy patch, downstream.patch, is unchanged; it carries the input-method popup guard and remap-tolerant typing, and applies to the kit's 0.33.2 source without fuzz. With it applied, every source file the module is built from is identical to release 0.32.0-3's, and the module builds to the same bytes.

The kit's own profile pins the exact version of all 77 packages Hyprland links against, including Mesa, GLib and OpenSSL. Published as it is, any routine update to one of them would make omarchy update refuse with breaks dependency … required by cua-hyprland-plugin, the failure this package hit when Hyprland moved from -3 to -4. Eight of those 77 have already moved on edge's mirror since Cua measured the kit on 2026-10-04, so the kit as published no longer builds there.

PROFILE.json keeps Cua's profile and limits its runtime list to the ABI packages Cua's daily compatibility CI requalifies the plugin against, which are the pins this package already carries. Cua's profile contract asks for exactly that: exact ABI-relevant dependencies. Everything else in the profile is Cua's unchanged: the source identity, and the compositor, header, compiler and runtime hashes.

kit.py derives that kit from the downloaded archive the way Cua's profile_bundle.py builds one, and refuses a profile that changes anything else. Given the same inputs, Cua's bundler at the kit's tooling commit produces the same eleven files byte for byte. kit.py runs the kit's verifier from the bytes it authenticated, so a stale __pycache__ in a reused build tree cannot run first. kit_test.py runs in check() against the downloaded kit. The recipe's build, check and package steps are Cua's rendered recipe with the patch layered on, as before.

Every package pin is unchanged, so this is a drop-in upgrade on edge. Any future change to those pins, including another Arch rebuild of Hyprland 0.56.2, now needs a new kit from Cua instead of a re-measurement here. Cua's compatibility feed reports it the day a channel update would break the pins.

Codex XHigh reviewed the change against Cua's tooling and the replay evidence. Merging is your call.

🤖 Generated by Opus 5.5 in Claude Code. Reviewed by Codex XHigh.

spencerbull and others added 2 commits October 12, 2026 22:41
The recipe rebased Cua's stable kit 1.1.0 onto the separate Driver 0.32.0 source and re-measured the Hyprland 0.56.2-4 rebuild itself. Kit 1.3.0 carries the plugin source, its packaging tooling and a profile measured on Omarchy edge, so the recipe now builds that kit as published, with the downstream patch layered on as before.

The kit's profile pins all 77 packages Hyprland links against, which would block every routine Mesa or GLib update. PROFILE.json keeps Cua's profile but limits the runtime list to the ABI packages Cua's daily compatibility CI tracks, the same pins the package already carries. kit.py derives the kit the way Cua's profile_bundle.py does and refuses any other profile change; kit_test.py runs against the downloaded kit in check().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kit.py imported profile_verify.py through the file loader, which runs a matching __pycache__ entry instead of the source. In a reused tree (--noextract, --repackage) a planted bytecode file would run before the inventory check rejected it. It now compiles the bytes it authenticated against the kit's SHA256SUMS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Codex XHigh <noreply@openai.com>
@ryanrhughes
ryanrhughes enabled auto-merge (squash) October 13, 2026 03:47
@spencerbull

Copy link
Copy Markdown
Contributor Author

I replayed this on an Omabot Omarchy edge worker running Hyprland 0.56.2-4 with the published cua-driver-bin 0.33.4-1 and cua-hyprland-plugin 0.32.0-3. I built this branch's package on the worker, downloading the kit from Cua's release URL, served it from a local repository ahead of [omarchy], upgraded, and rebooted into a fresh session. Every check passed:

  • Build: all 20 bundled CTests pass, as do the 9 kit tests and 5 downstream tests. The built module's SHA-256 is 6ebc37cc…, byte-identical to the one in the published 0.32.0-3, so the plugin's runtime code is unchanged. --noextract --repackage rebuilds; with a planted __pycache__ in the extracted kit it refuses with extracted kit inventory mismatch.
  • Package: the upgrade from 0.32.0-3 is clean, and pacman -Qkk reports no problems. Cua's consumer verifier passes against the installed module with this kit's digest, a97fc47e….
  • Fresh session: the plugin loads with ime_popup_guard, keyboard_layout_independent and foreground_numlock_compatible all true, input protocol 3 and a ready transport. imv binds both agent seats without crashing.
  • Input: with a terminal focused and the real pointer over it, the driver selected Inkscape's rectangle tool, drew a rectangle and saved. The saved SVG gained a <rect>, and focus never left the terminal (screenshot below). Foreground typing of the full printable ASCII set into the terminal is byte-exact.
  • Capture: desktop and window capture work at scale 1, 1.25 and 1.6, with the monitor offset to 320,200, and across two monitors (2240x800).
  • Cua's own qualification runner: lifecycle.py, run on the derived kit with its provenance digest, passes its native build and isolated install, remove, reinstall and dependency-refusal transactions. The unpatched module it builds from the ABI-scoped profile is 9cc1ea1b…, the same bytes Cua's qualification record lists for kit 1.3.0.
  • Lifecycle: rollback to 0.32.0-3, upgrade again, removal (no files left), and reinstall all pass, with the consumer verifier passing after each.

Not covered: the same pairing on real hardware with two monitors.

Codex XHigh reviewed the change, and its finding is fixed in this branch. Copilot was requested but never started on this pull request. Merging is your call.

With the terminal focused, Inkscape draws and saves a rectangle in the background through the 0.33.2-3 plugin

🤖 Generated by Opus 5.5 in Claude Code. Reviewed by Codex XHigh.

@ryanrhughes
ryanrhughes merged commit e726b56 into master Oct 13, 2026
7 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Publish succeeded → live

Packages: cua-hyprland-plugin (x86_64, PR artifact)

  • edge/x86_64: cua-hyprland-plugin-0.33.2-3-x86_64

Commit e726b56 · run

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.

2 participants