Skip to content

[fix] Rebuild compatible Hyprland dependencies for factory images - #142

Merged
themartiano merged 4 commits into
omacom:mainfrom
Fail-Safe:fix/aquamarine-factory-pin
Sep 9, 2026
Merged

themartiano merged 4 commits into
omacom:mainfrom
Fail-Safe:fix/aquamarine-factory-pin

Conversation

@Fail-Safe

@Fail-Safe Fail-Safe commented Sep 5, 2026 •

Copy link
Copy Markdown
Contributor

Fresh ARM64 factory builds cannot resolve the rolling repository's mixed aquamarine ABIs: the pinned Hyprland needs libaquamarine.so=13, while the current Hyprtoolkit needs .so=14.

This rebuilds aquamarine 0.14 and Hyprtoolkit 0.5.4 from reviewed Arch recipes and verified upstream sources, then exposes the compatible pair through a disposable builder repository. Hyprtoolkit uses package release 6.1 to distinguish the rebuild. The finished guest holds both packages alongside the patched Hyprland and does not retain the builder repository.

The source builder now gives its unprivileged build user access to temporary directories, explicitly produces zstd packages, cleans up its build account on failure, and remaps temporary build paths. Library hashes are verified before packages enter the repository. The Rust/ttfx and pkgconf/Hyprland pins and the 614-package transaction lock are refreshed together.

Validation:

  • CI passes on 3f7ec01.
  • Full make test passes with the Xcode toolchain, including new regression tests for the compatible pair, missing archives, and guest/builder package holds.
  • Independent source rebuilds reproduce the aquamarine and Hyprtoolkit library hashes; the rebuilt ttfx matches its reviewed hash.
  • Full make build passes with a new, empty guest-work volume. The independent Hyprland rebuild reproduces its pinned hash and passes its installed version check inside the guest root.
  • The app passes strict code-signature validation and the macOS 15 compatibility check.
  • An isolated ephemeral VM boots kernel 7.2.3-2, renders first-run setup, and reaches the graphical desktop after setup. The tester completed setup and supplied a screenshot confirming the rendered panel, wallpaper, and welcome notifications. QMP screenshots remain black with the accelerated display, so visual confirmation used the supplied screenshot.

Fixes #171 and extends the factory-build work discussed in #134.

@themartiano themartiano left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the pull request!

Codex comments

Please rebase after #136 and resolve the guest-contract conflict. Also record and verify the provenance of the vendored aquamarine archive: the new repository uses Optional TrustAll, and a SHA declared beside the binary does not establish its upstream origin. Include verified upstream signature evidence or a reproducible source build, then run the complete guest build to verify the changed CMake/Hyprland pins.

ALARM only publishes libaquamarine.so=14 while locked Hyprland still needs
.so=13, so empty-root resolve fails and Omarchy updates break. Vendor the
reviewed 0.14 package for builder resolve, refresh the lock, and hold
aquamarine with Hyprland in the finished guest.
The factory pin cannot rely on a reconstructed unsigned archive plus TrustAll.
Rebuild 0.14.0-2 from the Arch packaging commit and hyprwm tarball so empty-root
resolve still gets libaquamarine.so=13 with verified upstream origin.
@Fail-Safe
Fail-Safe force-pushed the fix/aquamarine-factory-pin branch from 57892d9 to 3f78ed3 Compare September 8, 2026 19:46
@Fail-Safe

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (including #136) and resolved the guest-contract / Hyprland identity conflicts. The cmake build pin stays at 4.4.3-2 because Arch Linux ARM still publishes that.

Provenance: the reconstructed unsigned archive is gone. The factory now rebuilds aquamarine 0.14.0-2 from the Arch packaging commit 8489a8358817a964a923f05ba324996378d81a5d (tag 0.14.0-2) and the reviewed hyprwm/aquamarine v0.14.0 tarball. [try-omarchy-abi-pins] still uses Optional TrustAll only because repo-add writes an unsigned database for that just-built package; origin is the source rebuild.

supplyChain.aquamarine.binarySha256 is libaquamarine.so.0.14.0 from the previously installed ALARM 0.14.0-2 payload. The first factory rebuild will confirm that digest or we will update the pin if this toolchain is not bit-identical.

Locally: python3 guest/tests/verify.py and python3 -m unittest discover -s guest/tests pass. Complete guest/build-container.sh is still the remaining requested check.

@Fail-Safe

Copy link
Copy Markdown
Contributor Author

@itamblyn I'm reviewing this PR again. There has been a lot in motion in the past day, so let me see what is going on here.

@Fail-Safe
Fail-Safe marked this pull request as draft September 8, 2026 21:48
@Fail-Safe Fail-Safe changed the title [fix] Pin aquamarine 0.14 for factory builds and guest updates [fix] Rebuild compatible Hyprland dependencies for factory images Sep 8, 2026
@Fail-Safe
Fail-Safe marked this pull request as ready for review September 8, 2026 22:36
@Fail-Safe

Copy link
Copy Markdown
Contributor Author

@itamblyn This should be in working shape again. Extra confirmation is very welcome--thanks!

digital-brew added a commit to digital-brew/try-omarchy that referenced this pull request Sep 9, 2026
Arch Linux ARM now publishes only aquamarine 0.15 (libaquamarine.so=14)
while the locked Hyprland still needs .so=13, so an empty-root resolve
failed. Bring in the reviewed aquamarine 0.14.0-2 rebuild and refreshed
package lock from omacom#142. Keep this fork's 150 GiB
working-disk expectation in the verifier.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDi5Ufy1LWAPYcx2U3fvsp
digital-brew added a commit to digital-brew/try-omarchy that referenced this pull request Sep 9, 2026
…ilds work

Arch Linux ARM rebuilt hyprtoolkit against libaquamarine.so=14 after
upstream PR omacom#142 was written, so the locked Hyprland stack still could not
resolve: hyprland -> hyprland-guiutils -> hyprtoolkit -> libaquamarine.so=14.
Add hyprtoolkit 0.5.4-4 as a second reviewed ABI pin, rebuilt from the Arch
PKGBUILD (aarch64 enabled) against the rebuilt aquamarine 0.14 package, and
hold it on the guest IgnorePkg alongside aquamarine.

Fix the aquamarine rebuild script so it actually runs on the ALARM builder:
the mktemp stage was 0700 root so the makepkg user could not enter it;
ALARM's makepkg.conf emits .pkg.tar.xz where the provenance check expects
zstd (pin PKGEXT); and the randomized stage path leaked into the library so
no two rebuilds produced the same digest (use a fixed stage path). Record
the reproducible aquamarine, hyprtoolkit, and Rust 1.98.1 ttfx digests
observed here, and refresh packages.lock.json against current mirrors.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDi5Ufy1LWAPYcx2U3fvsp
@k5953837

k5953837 commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

🤖 Written by Claude Opus 5 (an Anthropic AI model) on behalf of @k5953837, who is blocked on this PR for #175 and ran the build to confirm it. Everything below is from one run on 2026-09-09.

Confirmation from an Apple Silicon Mac, since you asked for it.

Setup: macOS 15 on Apple Silicon, Docker 29.6.2 with native linux/arm64, pr-142 at 3f7ec01 in a clean worktree.

make test

Passes, with one failure that is not yours: StartMenuWindowWidthTests.swift:131, Expectation failed: (content.bounds.width → 601.0) == (600 → 600.0). I ran the same suite on clean main (768d03d) before touching anything and got the same single test, the same expectation, and the same two values — so it is a local display/font-metric artifact here, not a regression from this branch.

Everything guest-side is green: Ran 88 tests ... OK for the unittest modules (including the new test_builder_pacman_conf.py) and 196 ok - checks ending in native guest contract verified.

make guest

The structural fix works. 13 minutes wall clock, and both blockers reported in #171 are gone:

rust-1:1.98.1-1                                       # builder stage installs cleanly
Rebuilt aquamarine 0.14.0-2 from 8489a835... (library 7da003aa...)
Rebuilt hyprtoolkit 0.5.4-6.1 from 1ed23038... (library dc814fad...)

The transaction then resolves past hyprland/aquamarine with no could not satisfy dependencies.

Where it stops

One step later, on a lock drift that appeared today:

package repository transaction differs from packages.lock.json; refresh and review the lock intentionally
archlinux-keyring: 20260902-1 -> 20260909-1
build-cache: guest build failed with exit status 1

Exactly one package. ALARM published archlinux-keyring 20260909-1 today, after this branch's lock was refreshed on the 8th. So this reads as needing one more --refresh-package-lock pass rather than anything structural.

Happy to re-run the full build as soon as you push a refreshed lock — the worktree and the builder image are still warm here, so it is a 13-minute turnaround.

@Fail-Safe

Copy link
Copy Markdown
Contributor Author

@themartiano The lock refresh is pushed in 9e31d3b and CI is green. The fresh resolver confirmed that only archlinux-keyring changed, from 20260902-1 to 20260909-1.

Local validation also passes: the full test suite, complete factory/runtime/app build, pinned binary-hash checks, app signing verification, and macOS 15 compatibility checks.

Could you take another look at the outstanding review and merge if everything is satisfactory? The provenance and complete-build work requested on the earlier revision is included. Since the build resolves against rolling repositories, a timely review would help avoid another lock refresh while this is pending.

@themartiano

Copy link
Copy Markdown
Collaborator

Great! Merging now, thanks

@themartiano
themartiano merged commit 6ef65c7 into omacom:main Sep 9, 2026
1 check passed
@Fail-Safe
Fail-Safe deleted the fix/aquamarine-factory-pin branch September 9, 2026 19:08
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.

make build fails: builder rust pin 1:1.98.0-1 gone from ALARM; hyprtoolkit 0.5.4-6 widens the aquamarine ABI break

3 participants