Skip to main content

max / makenotwork

Release pom v0.4.3: drop glibc_check from the recipe The 0.4.2 build failed both targets at verify. glibc_check compares the binary's highest GLIBC symbol against ldd on the machine that runs it, so it reads the [[deploy]] entry a handed-off service no longer has. Removed rather than worked around: knowing which machine runs the bytes is environment-scoped evidence, and a build host cannot honestly produce it. That is the same rule the health poll and the post-install --version check left under. It was the one call in this recipe still on the wrong side. Sando gaining the gate is sando task acd295ad. It matters: measured here, the x86_64 binary needs GLIBC 2.39 and the Hetzner box has exactly 2.39.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-09 17:57 UTC
Signed with PGP, not checked
Commit: 2818996ba720281a872ced709a6aea35426f4f51
Parent: d260612
3 files changed, +32 insertions, -26 deletions
M pom/Cargo.lock +17 -17
@@ -1651,7 +1651,7 @@
1651 1651
1652 1652 [[package]]
1653 1653 name = "pom"
1654 - version = "0.4.2"
1654 + version = "0.4.3"
1655 1655 dependencies = [
1656 1656 "axum",
1657 1657 "chrono",
@@ -3601,22 +3601,6 @@
3601 3601 source = "registry+https://github.com/rust-lang/crates.io-index"
3602 3602 checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
3603 3603
3604 - [[patch.unused]]
3605 - name = "docengine"
3606 - version = "0.4.0"
3607 -
3608 - [[patch.unused]]
3609 - name = "kberg"
3610 - version = "0.1.0"
3611 -
3612 - [[patch.unused]]
3613 - name = "painhours"
3614 - version = "0.1.0"
3615 -
3616 - [[patch.unused]]
3617 - name = "tagtree"
3618 - version = "0.4.0"
3619 -
3620 3604 [[patch.unused]]
3621 3605 name = "synckit-client"
3622 3606 version = "0.8.0"
@@ -3625,6 +3609,10 @@
3625 3609 name = "synckit-config"
3626 3610 version = "0.2.0"
3627 3611
3612 + [[patch.unused]]
3613 + name = "docengine"
3614 + version = "0.4.0"
3615 +
3628 3616 [[patch.unused]]
3629 3617 name = "quasi-http"
3630 3618 version = "0.1.0"
@@ -3640,3 +3628,15 @@
3640 3628 [[patch.unused]]
3641 3629 name = "quasi-webview"
3642 3630 version = "0.1.0"
3631 +
3632 + [[patch.unused]]
3633 + name = "kberg"
3634 + version = "0.1.0"
3635 +
3636 + [[patch.unused]]
3637 + name = "painhours"
3638 + version = "0.1.0"
3639 +
3640 + [[patch.unused]]
3641 + name = "tagtree"
3642 + version = "0.4.0"
M pom/Cargo.toml +1 -1
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "pom"
3 - version = "0.4.2"
3 + version = "0.4.3"
4 4 edition = "2024"
5 5 license = "LicenseRef-PolyForm-Noncommercial-1.0.0"
6 6
@@ -50,14 +50,20 @@
50 50 let binary = resolve_artifact(h, r + "/target/release/pom");
51 51
52 52 step("verify");
53 - // Native-per-arch removed the cross-compile hazard the old script was written
54 - // against, but not this one: fw13 tracks a newer glibc than the Ubuntu 24.04
55 - // box in Hetzner, so a binary built here can reference a symbol version that
56 - // box does not have and fail at exec -- after the unit has already restarted
57 - // onto it. This compares the two and fails the step if the build host got
58 - // ahead. The installer checks the same thing again on the far side, by actually
59 - // running the binary.
60 - log(glibc_check(binary));
53 + // No `glibc_check` here any more, and its absence is the boundary rather than
54 + // an omission. The check compares the built binary's highest GLIBC symbol
55 + // against `ldd --version` on the machine that runs it, so it needs to know that
56 + // machine -- it reads the `[[deploy]]` entry, which a handed-off service does
57 + // not have. It is evidence about the artifact IN A PLACE, which is Sando's half
58 + // of the split, and it was the one call in this recipe still on the wrong side.
59 + //
60 + // This is a real check to be without in the meantime, not a formality. pom's
61 + // x86_64 half builds on fw13 and runs on Ubuntu 24.04 in Hetzner; measured at
62 + // 0.4.2 the binary needs GLIBC 2.39 and that box has exactly 2.39. One point
63 + // release of drift on the build host and it fails at exec, after the unit has
64 + // already restarted onto it. Sando gaining the gate is GoingsOn work; until it
65 + // does, node_health catches it after the restart rather than before.
66 + //
61 67 // The version that is about to ship is the version in the tag. A binary
62 68 // reporting something else means the checkout and the release disagree.
63 69 sh_ok(h, binary + " --version | grep -qw " + v);