sci-biology/foldingathome
Folding@Home distributed computing client for protein folding research
ChangeLog
commit 94b5101e95a88c220e6368ddfe5dae575863f0aa
Author: lucascouts <lucascs@protonmail.com>
Date: Mon Sep 7 09:45:17 2026 -0300
fix(media-libs/mesa, dev-db/sqlitebrowser): two metadata.xml defects, mod(scripts/gentoo-parity.sh): a package-level axis CAN carry a reason, mod(9 packages): tag the rows that unlocks
The eleven rows left on metadata.xml and files/content were stuck by
construction: both axes were listed as unjustifiable, so every row on them was
ALIGN forever however deliberate the divergence. Two turned out to be real
defects. The other nine needed the guard fixed, not the tree.
THE DESIGN ERROR. PARITY_UNJUSTIFIABLE_AXES was documented as "these can never
be JUSTIFIED either", argued from "the file holds no ebuild code, so it cannot
carry a # BENTOO-DIVERGENCE: tag". That confuses WHERE THE DIFFERENCE IS with
WHERE THE REASON CAN BE WRITTEN. A patch under files/ exists because an ebuild
applies it; a metadata.xml describes a package whose ebuilds sit beside it. The
ebuild is the natural place for the reason and always was.
Mechanically the block was elsewhere anyway: these rows carry the literal
"(package)" where a PV goes, so assign_verdicts looks them up under
"<category>/<pn>-(package)|<axis>", and collect_tags only ever registered the
per-ebuild key "<category>/<pf>|<axis>". No tag could match. collect_tags now
registers both. The array keeps doing the job it should - blocking promotion to
UNDOCUMENTED, which is a claim about ebuild content that a file-level difference
cannot support.
The cost of the old reading was eleven permanently red rows, including
chromium's patched bin-finder.py and thirteen zed USE flag descriptions
::gentoo has no reason to carry. A guard with rows that can never go green is
one people stop reading.
THE TWO REAL DEFECTS, both in metadata.xml and both now gone from the report
rather than reclassified.
media-libs/mesa described five USE flags that no longer exist - d3d9, osmesa,
vdpau, vulkan-overlay, xa - and did NOT describe sysprof, which its IUSE does
have. pkgcheck was reporting both, as UnusedLocalUse and as UnknownUseFlags:
'sysprof' - the second because a flag with no description anywhere is not a
known flag. Both findings are gone.
dev-db/sqlitebrowser had lost the French <longdescription lang="fr"> and <use
lang="fr"> blocks ::gentoo carries. Nothing gained by dropping them; a
francophone user simply lost the translation in the fork. Restored verbatim, so
the file now matches ::gentoo's outside the maintainer block.
THE NINE TAGS. Five metadata.xml where the overlay documents MORE - zed's
thirteen own USE flags, and longdescription/bugs-to/remote-id on act,
foldingathome, fakeroot and minikube (fakeroot's records that the package is a
temporary mirror to delete once ::gentoo reaches 2.x, which has nowhere else to
live). Four files/content, each a deliberate difference: open-vm-tools.initd
gains "use vgauthd" because this overlay ships that service at all; blender's
two find-module patches are ::gentoo's rebased onto a series where upstream
CMake renamed the variables; libcamera's no-automagic patch is much smaller
because upstream de-automagicked most of it in 0.7.x, leaving only gnutls; and
chromium's bin-finder.py carries this overlay's observability work, which cannot
be upstreamed under Gentoo's no-AI-contribution policy.
A08 grows a fifth case for the new rule, because a mechanism with no test is how
the last one broke. The verdict fixture's metadata.xml now differs between its
two sides and its ebuild carries a metadata.xml tag, so package-level=JUSTIFIED
is asserted against a real row. Two mutants kill it: dropping the package-level
key, and blocking UNJUSTIFIABLE axes from JUSTIFIED as well.
Verified. Every md5-cache delta is _md5_ only; two entries also reordered
_eclasses_, checked pair by pair as same names and same hashes. pkgcheck against
a worktree at a67afc170 is identical on ten of eleven packages once line numbers
are normalised, and differs on mesa by exactly the two findings this commit
fixes. The sweep goes 232 rows to 230 with ALIGN 70 -> 59: two closed outright,
nine reclassified. --self-test 24/24.
The deleted md5-cache entry is collateral kept rather than restored:
app-editors/zed-1.20.0_pre20260904-r2 lost its ebuild to another session's bump
in a67afc170 and egencache removed the orphan.
FOUND, NOT FIXED: files/unreferenced now reports two UNDOCUMENTED rows - four
patches no ebuild names, three tdesktop-6.9.3-* and one nodejs-24.11.1-gcc15-ppc,
all naming versions long gone from the tree. They predate this commit; they are
the first UNDOCUMENTED the tree has produced since 2026-09-05, which is the
verdict asking a human to decide. Deleting files is that human's call.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit dd4b277975d560456f87c107dea3cf1368505af2
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 6 21:46:58 2026 -0300
mod(12 packages): tag every remaining REQUIRED_USE divergence, del(metadata/md5-cache/dev-util/mesa_clc-26.3.0_pre20260905)
The last thirteen resolution-affecting parity rows, and not one was a lag. All
thirteen were decisions already taken and already argued in the ebuild - eleven
of them ALREADY TAGGED on a different axis, by the same edit that caused this
one. With these the ALIGN count on DEPEND, RDEPEND, BDEPEND and REQUIRED_USE
reaches zero, from 42 this morning.
ONE EDIT, TWO AXES - the shape that produced eleven of the thirteen:
PYTHON_COMPAT gains 3.14 -> IUSE gains a target AND $
expands to a wider ^^ group
(crossover-bin, netdata, foldingathome, and
libreoffice/calibre in the other direction)
LLVM_COMPAT gains a slot -> same, through $
(mesa, mesa_clc)
a USE flag appears or goes -> the constraint naming it follows
(zed, networkmanager, qemu, freecad)
A tag names ONE axis - collect_tags captures the first token after the colon -
so tagging the axis where the edit was made leaves the axis it propagated to
reading ALIGN forever. Fourth and fifth occurrences of this in three batches.
TWO WORTH READING ON THEIR OWN.
freecad has no test? ( techdraw ) because there is no techdraw flag to name.
This ebuild builds TechDraw unconditionally, -DBUILD_TECHDRAW=ON beside
SKETCHER, SPREADSHEET and WEB, where ::gentoo passes $(usex techdraw). The
constraint is satisfied by construction, and restoring it would reference a
flag that does not exist and kill the ebuild. This is the row A08 was pinned on
until the previous commit - it was never a lag, which is one more reason that
pin was wrong.
ghc gates ::gentoo's unconditional ^^ ( llvm_slot_* ) behind llvm? ( ). An
unconditional ^^ with no default forces every profile to choose an LLVM slot
even at USE=-llvm, which stops a headless emerge dead. Gating it costs an llvm
user nothing. The overlay is ahead here, not behind.
mesa_clc declares no REQUIRED_USE at all - llvm-r2.eclass builds it from
LLVM_COMPAT - so its tag sits beside that declaration instead.
Verified. Every md5-cache delta is _md5_ only: no depend field, no IUSE, no
REQUIRED_USE changed, which is what a comment-only edit must produce. Two
entries also reordered _eclasses_; checked pair by pair, same eclasses and same
hashes, egencache simply rewrote them sorted. pkgcheck against a worktree at
07519e2e3 differs on four packages by LINE NUMBERS ONLY - the same findings,
shifted by the inserted comments. The sweep holds at 230 rows with ALIGN 83 ->
70 and JUSTIFIED 147 -> 160: the thirteen were reclassified, not dropped.
--self-test 24/24, A20 untouched because the total did not move.
The deleted md5-cache entry is unrelated collateral, kept rather than restored:
dev-util/mesa_clc-26.3.0_pre20260905 has had no ebuild since yesterday's bump
and egencache removed the orphan. Recreating it would be recreating litter.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit de97d8448870eafbc7d84ab92ac143486dd48607
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 6 20:28:03 2026 -0300
fix(app-office/libreoffice-l10n, dev-util/vulkan-tools): two dependency lags, mod(dev-lang/lua, sci-biology/foldingathome): tag two that only look like lags, mod(scripts/gentoo-parity.sh): re-measure A20
Second parity remediation batch, and it splits the same way the gstreamer one
did: half were real, half were consequences of a decision already recorded
somewhere else. Deciding which is which is the work; the edits are one line each.
THE TWO LAGS.
libreoffice-l10n never set RPM_COMPRESS_TYPE. rpm.eclass then takes its unset
branch - "the ebuild hasn't been updated to resolve deprecations" - and narrows
BDEPEND to || ( app-arch/rpm2targz ) alone, dropping ::gentoo's
>=app-arch/rpm-4.19.0[lzma(+)]. Anyone who already has app-arch/rpm installed is
pushed to install rpm2targz as well, for nothing. Measured rather than copied:
extracting a langpack from DISTDIR and running strings over the RPM inside
reports PayloadIsXz, which is exactly the value ::gentoo declares. The variable
is @PRE_INHERIT, so it goes above the inherit or the eclass never sees it.
vulkan-tools got back test? ( dev-cpp/gtest ). The comment sitting there since
2026-09-04 already said what to do - "restore the atom or state why it is
unwanted" - and there is no reason to want it gone: it was collateral from the
edit that rewrote the SDK pins. The tests that need it are behind USE=test, so
its absence is invisible until someone enables that flag and the build fails
looking for gtest.
THE TWO THAT ONLY LOOK LIKE LAGS.
lua is missing app-portage/elt-patches, and must be. libtool.eclass is what puts
that in BDEPEND, and this ebuild deliberately does not inherit it - a divergence
already tagged on the INHERIT axis, because no Gentoo autotools-patched tarball
exists for 5.5 and it drives upstream's Makefile with tc-getCC instead. Nothing
here runs elibtoolize, and elt-patches exists only to feed it.
foldingathome is missing dev-util/patchelf from DEPEND because it MOVED to
BDEPEND, where a build-time tool belongs, and gained an elogind? guard. The
BDEPEND side was already tagged; the axis it left was not. Worth stating plainly
because it generalises: moving an atom between depend axes produces TWO
divergence rows, and tagging only the destination leaves the origin reading
ALIGN forever.
Verified. The md5-cache delta is exactly +[>=app-arch/rpm-4.19.0[lzma(+)]] twice
and +[test? ( dev-cpp/gtest )] once, with no removal anywhere and no depset
change at all on lua and foldingathome, whose edits are comments. pkgcheck was
run against a worktree at c10066d9d and produces identical findings before and
after on all four. The sweep goes 235 rows to 232: three closed, two
reclassified, nothing new. --self-test is 24/24 with A20 re-measured.
NOT VERIFIED: nothing was merged - this host has no sudo, and Portage reads
/var/db/repos/bentoo rather than the checkout. check-foldingathome-image.sh was
not run because it asserts properties of an installed image and this commit
changes no phase, no atom and no installed byte of that package.
RELATED FINDING, left alone: four more overlay ebuilds inherit rpm.eclass with
no RPM_COMPRESS_TYPE - proton-mail-bin, github-desktop, openoffice-bin and one
libreoffice-l10n sibling already covered here. The parity sweep cannot see three
of them because ::gentoo carries no counterpart, so the same latent narrowing is
there unaudited. Each needs its own payload measured; do not assume xz.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 10ff7a5a5001b1fc013fd442b0d46d18f43ac688
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Sep 5 16:12:26 2026 -0300
mod(sci-biology/foldingathome): document the 7 divergences, flag the bindist question
Third batch of the divergence-tag pass, and the one where the sweep's pairing is
itself the finding: ::gentoo ships foldingathome-7.6.21, the old "fahclient"
tarball, and this is 8.5.6 -- a different client, different upstream, different
licence, different install layout. The packages share a name and almost nothing
else, so six of the seven divergent axes follow from that one fact rather than
from any decision taken here. The header tag says so once, and the per-axis tags
point back at it instead of repeating it.
THE ONE WORTH READING TWICE. LICENSE is GPL-3 here where ::gentoo declares
"FAH-EULA-2014 FAH-special-permission". That looks like a licensing mistake and
is not: Folding@home relicensed at v8. Verified against upstream rather than
assumed -- github.com/FoldingAtHome/fah-client-bastet reports spdx_id GPL-3.0 on
2026-09-05. The EULA pair belongs to the 7.6.x client, which ::gentoo still
ships and we do not.
AN OPEN QUESTION IS RECORDED RATHER THAN ANSWERED. RESTRICT="bindist" sits oddly
next to GPL-3, which permits binary redistribution, and nothing in the ebuild
said why. It is defensible -- we ship a prebuilt .deb, and redistributing GPL
binaries obliges the redistributor to offer matching source, which a binhost
would not do on its own -- but "defensible" is not "decided". Licensing is the
maintainer's call, so the tag states the tension and asks for either a reason or
the token's removal. Writing a confident justification I had not verified would
be exactly the failure that produced the three wrong tags this whole pass exists
to clean up.
The rest, briefly: INHERIT (unpacker for the .deb, desktop/xdg for v8's GUI,
python-single-r1 for the control panel), KEYWORDS "-*" plus the two arches
upstream publishes a .deb for -- there is no source, so an arch with no .deb has
nothing to install -- IUSE elogind/systemd because this overlay requires every
daemon to start without systemd where ::gentoo installs a unit unconditionally,
BDEPEND patchelf used only on the elogind path to rewrite the .deb's libsystemd
NEEDED entry, and DEFINED_PHASES src_unpack/pkg_preinst against their pkg_config.
Verified: scripts/check-foldingathome-image.sh still reports PASS 15/15 against
the built image.
sci-biology/foldingathome now reports 7 JUSTIFIED, 0 UNDOCUMENTED.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 60563775269884942ae151e82e8dead969439455
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Aug 8 22:11:11 2026 -0300
fix(sci-biology/foldingathome-8.5.6-r1 -> -r2): reconcile RDEPEND with the shipped payload, del(foldingathome-8.5.6-r1)
RDEPEND did not describe the payload. Three edits, each decided from the
installed image rather than from upstream's packaging:
+ app-arch/lz4 liblz4.so.1 is DT_NEEDED on a BIND_NOW
binary, so the loader aborts before main()
without it -- the same failure class as
the libsystemd.so.0 bug -r1 fixed.
+ app-misc/ca-certificates the client speaks HTTPS to the assignment
servers, and on a minimal headless or
container host nothing else necessarily
pulls a CA bundle in.
- dev-libs/openssl:= nothing links it; TLS is static. See below.
sys-libs/zlib:= -> virtual/zlib:=, clearing the DeprecatedDep
pkgcheck reported on both 8.5.6 and -r1.
dev-libs/expat was deliberately NOT added even though upstream's .deb
Depends lists libexpat1. Also below.
Deliberately out of scope: upstream's Pre-Depends (adduser, procps) are
Debian packaging mechanics and the identities already come from
acct-user/acct-group; polkitd is Recommends and the rules file this
ebuild installs is inert without polkit rather than broken;
nvidia-opencl-icd is Recommends and accel backends are opt-in USE flags
in this overlay, never hardcoded deps.
--- evidence: readelf / strings on the installed fah-client ---
DT_NEEDED, 8 entries, no libssl/libcrypto/libexpat among them:
libsystemd.so.0 libpthread.so.0 libdl.so.2 liblz4.so.1
libz.so.1 libm.so.6 libc.so.6 ld-linux-x86-64.so.2
dlopen IS live in this binary. `readelf -W --dyn-syms` shows dlopen,
dlsym, dlclose, dlerror and dladdr imported UND at GLIBC_2.2.5(10),
which `readelf -W -V` maps to libdl.so.2 -- already DT_NEEDED and
already covered by sys-libs/glibc, so it adds no atom. It does mean the
string table has to be read before concluding anything: a dlopen'd
library has no DT_NEEDED entry. Note that plain `readelf --dyn-syms`
WITHOUT -W truncates the symbol-name column and shows none of these
five; the -W is load-bearing, and omitting it produced a wrong
first-pass reading of this same binary.
The complete lib*.so* string-literal set is the 8 DT_NEEDED names plus
exactly three dlopen candidates, all optional accel backends:
libcuda.so libOpenCL.so libamdhip64.so
No libexpat, libssl or libcrypto candidate exists.
dev-libs/expat -- NOT ADDED. `strings -a | grep -i expat` returns only
Expat's own compiled-in material: expat.txt, its license text, the
internal version string "expat_2.2.6", the message "requested feature
requires XML_DTD support in Expat", and the mangled cbang symbol
N2cb3XML12ExpatAdapterE (cb::XML::ExpatAdapter). No libexpat.so*
string, no DT_NEEDED entry, no XML_* dynamic symbol. That is static
linkage, not a dlopen miss, so the "err toward declaring it" rule does
not fire. Do not re-add it from the .deb's Depends without repeating
this check.
dev-libs/openssl:= -- REMOVED. Same method, same answer. No
libssl.so*/libcrypto.so* in DT_NEEDED, in the string set, or as an
imported symbol (grep for SSL_|EVP_|BIO_|X509_|OPENSSL_init in
--dyn-syms: no match), and upstream's own Depends never listed it. What
IS present is ~30 CRYPTOGAMS perlasm banners ("AES-NI GCM module for
x86_64, CRYPTOGAMS by <appro@openssl.org>", GHASH, Poly1305, ChaCha20,
X25519, Keccak-1600, the SHA transforms, the AESNI-CBC+SHA stitches),
an embedded "OpenSSL 1.1.1n 15 Mar 2022" banner, and the source paths
src/cbang/openssl/{KeyGenPacifier,KeyPair,SSLContext,SecurityUtilities}
.cpp.
CVE exposure, recorded because dropping the := hides it: TLS is
compiled into fah-client. A host-side dev-libs/openssl update does not
patch this binary, and without the subslot operator Portage will no
longer even propose the rebuild that never helped anyway. The bundled
copy self-reports OpenSSL 1.1.1n (2022-03-15), a branch that reached
EOL on 2023-09-11. A real fix has to come from upstream re-releasing
the .deb.
--- the check that would have caught this ---
scripts/check-foldingathome-libsystemd.sh is renamed to
scripts/check-foldingathome-image.sh (renamed in d7ba26372) and grows
two checks. A name that undersells what a gate covers is how the gate
goes stale, which is exactly what produced this bugfix: -r1 added a
section titled "Declared dependencies match what is installed" and
reconciled only the Python half.
14 every DT_NEEDED SONAME resolves to something RDEPEND declares
15 every declared library atom is referenced by the binary, either
as DT_NEEDED or as a dlopen string literal
Red against -r1, green against -r2, checks 01-13 unchanged in both:
FAIL 14 needed but not in RDEPEND: liblz4.so.1 -> app-arch/lz4
FAIL 15 declared but never loaded: dev-libs/openssl [9 lib(s)]
RESULT FAIL 2 of 15 checks red (8.5.6-r1)
PASS 14 8 DT_NEEDED entries all accounted for
PASS 15 every declared library atom is referenced by the binary
RESULT PASS 15/15 checks green (8.5.6-r2)
Three traps the checks had to handle, all of which produce a wrong
answer rather than a missing one:
* SONAME resolution is image-first, host-second. This package ships
its own libsystemd.so.0 (the elogind symlink), so asking the host
answers sys-apps/systemd -- an atom the elogind build correctly
does not declare, i.e. a false FAIL manufactured by asking the
wrong machine.
* virtual/* is expanded one level into its providers, or libz.so.1
(owned by sys-libs/zlib) stops matching the moment RDEPEND says
virtual/zlib.
* RDEPEND is read from build-info/RDEPEND, which portage writes
already USE-resolved, never from the ebuild text.
Both checks are host-relative and say so on every run: an atom not
installed on the checking host is printed as NOT JUDGED rather than
counted green. Check 15 also exempts python/acct-*/virtual atoms, which
are declared for reasons other than ELF linkage, and prints that
exemption list every run.
--- unchanged installed image ---
A dependency-atom change must not alter what is installed. Built both
revisions with USE="elogind -systemd" and compared:
diff -r --no-dereference <r1-image> <r2-image>
Only in r1/usr/share/doc: foldingathome-8.5.6-r1
Only in r2/usr/share/doc: foldingathome-8.5.6-r2
The docdir rename is dodoc following $; README.md.bz2 is
byte-identical (cmp) on both sides. Nothing else differs.
--- commit split ---
This change reached master in three commits, not one, and the two
earlier ones were not written by the author of the change:
d7ba26372 the script rename + checks 14/15, and -r2 carrying only
the lz4/ca-certificates half of the reconciliation
cff5fb8da the openssl removal, bundled with unrelated mesa and
llama-cpp bumps
this one the zlib atom, del(-r1), the md5-cache entry, and the
reasoning for all of it
Despite the bump-shaped subject lines, no automated sweep exists in
this repository -- no cron, no timer, no script emits them. Several
sessions run concurrently against this one checkout and each `git add`s
whatever it finds, so a tree that is mid-change gets committed and
pushed by whichever session commits next. Both were already pushed when
this was noticed, so rewriting was off the table: users sync from this
overlay.
Stricter staging is not the fix. Explicit paths were used here and
still lost two thirds of the change, because the problem is a second
writer to the same index, not a careless `git add`. The fix is one
`git worktree` per session, which gives each its own index and working
tree while sharing `.git`. Until that exists, a story requirement of
the form "commit in reviewable slices" is not satisfiable here and
should not be written as an acceptance criterion.
--- pre-existing, not introduced here ---
pkgcheck reports NonsolvableDepsInDev on 6 ~arm64 musl profiles,
solution set [ sys-libs/glibc ]. That atom is unchanged from -r1 and a
musl profile cannot satisfy glibc by construction, so the finding
predates this change. It is also not wrong: the payload is a
glibc-linked Debian binary and genuinely does not run on musl. The
honest fix is a musl mask, which is a separate decision from
reconciling RDEPEND.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit cff5fb8da4ccc1e49177cc5d0a79908340d37e5d
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Aug 8 21:57:22 2026 -0300
add(metadata/{md5-cache/dev-util/mesa_clc-26.3.0_pre20260809, md5-cache/media-libs/mesa-26.3.0_pre20260809, md5-cache/sci-ml/llama-cpp-0_pre10331}), mod(sci-biology/foldingathome-8.5.6-r2), mod(.autoupdate/packages.toml), up(dev-util/mesa_clc-26.3.0_pre20260808 -> 26.3.0_pre20260809, media-libs/mesa-26.3.0_pre20260808 -> 26.3.0_pre20260809, sci-ml/llama-cpp-0_pre10330 -> 0_pre10331)
commit d7ba26372c4942b42904ba4cc83f3efb52aa9523
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Aug 8 21:49:50 2026 -0300
add(sci-biology/foldingathome-8.5.6-r2), add(scripts/check-foldingathome-image.sh), del(scripts/check-foldingathome-libsystemd.sh)
commit ddf98b5d4512928c76581cb3515f9daf27fe2f6c
Author: lucascouts <lucascs@protonmail.com>
Date: Fri Aug 7 17:30:38 2026 -0300
fix(sci-biology/foldingathome-8.5.6-r1): default to elogind so headless OpenRC still merges, add(scripts/check-foldingathome-libsystemd.sh)
The libsystemd fix shipped with IUSE="elogind systemd" and no default.
Neither flag is default-on by itself: elogind comes from the desktop
target, systemd only from systemd profiles. On a plain OpenRC server or
headless profile that leaves both off, so REQUIRED_USE refused the merge
on 30 amd64 profiles -- pkgcheck RequiredUseDefaults. 8.5.6 at least
merged there and failed at runtime; -r1 did not merge at all, which is a
regression for exactly the audience the fix was written for. Default to
+elogind. On a systemd profile elogind is USE-masked, so the default is
overridden there and the exactly-one-of constraint still resolves.
Drop the multilib inherit. get_libdir is a PMS built-in for EAPI >= 6
(eapi.sh:41 gates it, phase-helpers.sh:961 defines it); multilib.eclass
only uses it. The inherit was carried on a false premise and produced a
pkgcheck UnusedInherits warning that 8.5.6 did not have. Re-verified by
execution: the image check stays 13/13 green with $(get_libdir) still
resolving to lib64 without the eclass.
Extend PYTHON_COMPAT to python3_15, which dev-python/websocket-client-1.9.0
supports.
All three were invisible to the QA gate that cleared -r1: it ran pkgcheck
with -c ManifestCheck,MetadataVarCheck,DependencyCheck,SrcUriCheck,
PackageMetadataXmlCheck, chosen to dodge the git-addon IndexError that
crashes a bare full scan. None of those five checks can emit
RequiredUseDefaults, UnusedInherits or PythonCompatUpdate. Narrow by
keyword (-k) instead: it bypasses the same crash without blinding the
gate. The scan now matches the 8.5.6 baseline exactly -- DeprecatedDep on
sys-libs/zlib:= and NonsolvableDepsInDev on arm64/musl, both pre-existing.
Commit the image check itself. It previously lived under .epic/, which is
gitignored, so neither the script nor its recorded output survived outside
one working tree, and the green build directory was already gone by the
time this was audited.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit c556c503b72f7f0cc16d6c34ec02323dc26398a0
Author: lucascouts <lucascs@protonmail.com>
Date: Fri Aug 7 16:45:27 2026 -0300
fix(sci-biology/foldingathome-8.5.6 -> -r1): resolve libsystemd.so.0 via elogind on OpenRC
Upstream 8.5.6 added a DT_NEEDED on libsystemd.so.0 to the prebuilt
fah-client (8.5.5 had none). It imports seven sd_bus_* symbols, all
version-scoped to LIBSYSTEMD_221/222, and the binary is BIND_NOW -- so on
a host without that SONAME the loader aborts before main() and the package
is unusable. sys-apps/systemd-utils does not ship the library.
Select the provider with mutually exclusive elogind/systemd USE flags.
Under USE=elogind, install a private symlink to sys-auth/elogind's
libelogind.so.0 and bake a DT_RUNPATH into the binary, so the loader finds
it with no environment variable from the caller. elogind's version script
declares the LIBSYSTEMD_<n> version nodes and all seven symbols, so this
satisfies the loader's version check rather than merely matching a name.
The systemd path installs no symlink and no RUNPATH, resolving through
ld.so.cache as before. Neither provider can be an unconditional RDEPEND:
sys-auth/elogind carries !sys-apps/systemd.
Also declare what fahctl actually needs. It is a python3 script whose
`from websocket import create_connection` is mandatory -- the ImportError
branch exits 1 -- so python-single-r1 pulls dev-python/websocket-client
for the selected interpreter and python_fix_shebang pins the shebang to it.
Drop the stale md5-cache entry of the superseded 8.5.6.
Verified against the installed image, not by reading the ebuild: 13/13
checks green on -r1 and 5 red on 8.5.6. No OpenRC host was available, so
this proves the package loads, not that it folds work units there.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit faaa7641f5823a7be3029c200577c0f0c01a62f1
Author: lucascouts <lucascs@protonmail.com>
Date: Fri Aug 7 15:14:05 2026 -0300
add(metadata/{md5-cache/dev-python/uv-bin-0.12.3, md5-cache/dev-util/spirv-tools-1.4.357.0_p20260807, md5-cache/dev-util/vulkan-tools-1.4.359_p20260807, md5-cache/dev-util/vulkan-utility-libraries-1.4.359, md5-cache/media-libs/vulkan-loader-1.4.359_p20260807, md5-cache/sci-biology/foldingathome-8.5.6-r1, md5-cache/sci-ml/llama-cpp-0_pre10319}), mod(.autoupdate/packages.toml), up(dev-python/uv-bin-0.12.2 -> 0.12.3, dev-util/{spirv-tools-1.4.357.0_p20260806 -> 1.4.357.0_p20260807, vulkan-tools-1.4.358_p20260806 -> 1.4.359_p20260807, vulkan-utility-libraries-1.4.358_p20260806 -> 1.4.359}, media-libs/vulkan-loader-1.4.358_p20260806 -> 1.4.359_p20260807, sci-biology/foldingathome-8.5.6 -> 8.5.6-r1, sci-ml/llama-cpp-0_pre10312 -> 0_pre10319)
commit 99bb5388458f91658ea4702167439e9301141d3e
Author: lucascouts <lucascs@protonmail.com>
Date: Mon Jul 13 13:40:56 2026 -0300
add(metadata/{md5-cache/app-editors/zed-1.12.0_pre20260713, md5-cache/app-portage/bentoolkit-0.13.1, md5-cache/dev-util/codex-0.144.3, md5-cache/dev-util/codex-bin-0.144.3, md5-cache/dev-util/mesa_clc-26.2.0_pre20260713, md5-cache/media-libs/mesa-26.2.0_pre20260713, md5-cache/media-libs/vulkan-layers-1.4.352_p20260713, md5-cache/net-misc/modemmanager-1.25.1_p20260713, md5-cache/net-misc/postman-bin-12.19.0, md5-cache/sci-biology/foldingathome-8.5.6, md5-cache/sci-ml/llama-cpp-0_pre9987}), mod(metadata/md5-cache/app-portage/bentoolkit-0.13.0-r1, .autoupdate/packages.toml), up(app-editors/zed-1.12.0_pre20260712 -> 1.12.0_pre20260713, app-portage/bentoolkit-0.13.0-r1 -> 0.13.1, dev-util/codex{,-bin}-0.144.1 -> 0.144.3, media-libs/{mesa-26.2.0_pre20260712 -> 26.2.0_pre20260713, vulkan-layers-1.4.352_p20260712 -> 1.4.352_p20260713}, net-misc/{modemmanager-1.25.1_p20260710 -> 1.25.1_p20260713, postman-bin-12.18.5 -> 12.19.0}, sci-biology/foldingathome-8.5.5 -> 8.5.6, sci-ml/llama-cpp-0_pre9977 -> 0_pre9987)
commit ec3d8e936fe552efbfea33d4718352b475c36ffb
Author: lucascouts <lucascs@protonmail.com>
Date: Tue Apr 14 21:32:27 2026 -0300
add(dev-libs/{fzssh-1.1.10, libfilezilla-0.55.3}, sci-biology/foldingathome-8.5.5), mod(app-editors/zed-0.233.0_pre20260414, net-ftp/filezilla-3.70.3), up(dev-util/claude-code-2.1.105 -> 2.1.108)
Author: lucascouts <lucascs@protonmail.com>
Date: Mon Sep 7 09:45:17 2026 -0300
fix(media-libs/mesa, dev-db/sqlitebrowser): two metadata.xml defects, mod(scripts/gentoo-parity.sh): a package-level axis CAN carry a reason, mod(9 packages): tag the rows that unlocks
The eleven rows left on metadata.xml and files/content were stuck by
construction: both axes were listed as unjustifiable, so every row on them was
ALIGN forever however deliberate the divergence. Two turned out to be real
defects. The other nine needed the guard fixed, not the tree.
THE DESIGN ERROR. PARITY_UNJUSTIFIABLE_AXES was documented as "these can never
be JUSTIFIED either", argued from "the file holds no ebuild code, so it cannot
carry a # BENTOO-DIVERGENCE: tag". That confuses WHERE THE DIFFERENCE IS with
WHERE THE REASON CAN BE WRITTEN. A patch under files/ exists because an ebuild
applies it; a metadata.xml describes a package whose ebuilds sit beside it. The
ebuild is the natural place for the reason and always was.
Mechanically the block was elsewhere anyway: these rows carry the literal
"(package)" where a PV goes, so assign_verdicts looks them up under
"<category>/<pn>-(package)|<axis>", and collect_tags only ever registered the
per-ebuild key "<category>/<pf>|<axis>". No tag could match. collect_tags now
registers both. The array keeps doing the job it should - blocking promotion to
UNDOCUMENTED, which is a claim about ebuild content that a file-level difference
cannot support.
The cost of the old reading was eleven permanently red rows, including
chromium's patched bin-finder.py and thirteen zed USE flag descriptions
::gentoo has no reason to carry. A guard with rows that can never go green is
one people stop reading.
THE TWO REAL DEFECTS, both in metadata.xml and both now gone from the report
rather than reclassified.
media-libs/mesa described five USE flags that no longer exist - d3d9, osmesa,
vdpau, vulkan-overlay, xa - and did NOT describe sysprof, which its IUSE does
have. pkgcheck was reporting both, as UnusedLocalUse and as UnknownUseFlags:
'sysprof' - the second because a flag with no description anywhere is not a
known flag. Both findings are gone.
dev-db/sqlitebrowser had lost the French <longdescription lang="fr"> and <use
lang="fr"> blocks ::gentoo carries. Nothing gained by dropping them; a
francophone user simply lost the translation in the fork. Restored verbatim, so
the file now matches ::gentoo's outside the maintainer block.
THE NINE TAGS. Five metadata.xml where the overlay documents MORE - zed's
thirteen own USE flags, and longdescription/bugs-to/remote-id on act,
foldingathome, fakeroot and minikube (fakeroot's records that the package is a
temporary mirror to delete once ::gentoo reaches 2.x, which has nowhere else to
live). Four files/content, each a deliberate difference: open-vm-tools.initd
gains "use vgauthd" because this overlay ships that service at all; blender's
two find-module patches are ::gentoo's rebased onto a series where upstream
CMake renamed the variables; libcamera's no-automagic patch is much smaller
because upstream de-automagicked most of it in 0.7.x, leaving only gnutls; and
chromium's bin-finder.py carries this overlay's observability work, which cannot
be upstreamed under Gentoo's no-AI-contribution policy.
A08 grows a fifth case for the new rule, because a mechanism with no test is how
the last one broke. The verdict fixture's metadata.xml now differs between its
two sides and its ebuild carries a metadata.xml tag, so package-level=JUSTIFIED
is asserted against a real row. Two mutants kill it: dropping the package-level
key, and blocking UNJUSTIFIABLE axes from JUSTIFIED as well.
Verified. Every md5-cache delta is _md5_ only; two entries also reordered
_eclasses_, checked pair by pair as same names and same hashes. pkgcheck against
a worktree at a67afc170 is identical on ten of eleven packages once line numbers
are normalised, and differs on mesa by exactly the two findings this commit
fixes. The sweep goes 232 rows to 230 with ALIGN 70 -> 59: two closed outright,
nine reclassified. --self-test 24/24.
The deleted md5-cache entry is collateral kept rather than restored:
app-editors/zed-1.20.0_pre20260904-r2 lost its ebuild to another session's bump
in a67afc170 and egencache removed the orphan.
FOUND, NOT FIXED: files/unreferenced now reports two UNDOCUMENTED rows - four
patches no ebuild names, three tdesktop-6.9.3-* and one nodejs-24.11.1-gcc15-ppc,
all naming versions long gone from the tree. They predate this commit; they are
the first UNDOCUMENTED the tree has produced since 2026-09-05, which is the
verdict asking a human to decide. Deleting files is that human's call.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit dd4b277975d560456f87c107dea3cf1368505af2
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 6 21:46:58 2026 -0300
mod(12 packages): tag every remaining REQUIRED_USE divergence, del(metadata/md5-cache/dev-util/mesa_clc-26.3.0_pre20260905)
The last thirteen resolution-affecting parity rows, and not one was a lag. All
thirteen were decisions already taken and already argued in the ebuild - eleven
of them ALREADY TAGGED on a different axis, by the same edit that caused this
one. With these the ALIGN count on DEPEND, RDEPEND, BDEPEND and REQUIRED_USE
reaches zero, from 42 this morning.
ONE EDIT, TWO AXES - the shape that produced eleven of the thirteen:
PYTHON_COMPAT gains 3.14 -> IUSE gains a target AND $
expands to a wider ^^ group
(crossover-bin, netdata, foldingathome, and
libreoffice/calibre in the other direction)
LLVM_COMPAT gains a slot -> same, through $
(mesa, mesa_clc)
a USE flag appears or goes -> the constraint naming it follows
(zed, networkmanager, qemu, freecad)
A tag names ONE axis - collect_tags captures the first token after the colon -
so tagging the axis where the edit was made leaves the axis it propagated to
reading ALIGN forever. Fourth and fifth occurrences of this in three batches.
TWO WORTH READING ON THEIR OWN.
freecad has no test? ( techdraw ) because there is no techdraw flag to name.
This ebuild builds TechDraw unconditionally, -DBUILD_TECHDRAW=ON beside
SKETCHER, SPREADSHEET and WEB, where ::gentoo passes $(usex techdraw). The
constraint is satisfied by construction, and restoring it would reference a
flag that does not exist and kill the ebuild. This is the row A08 was pinned on
until the previous commit - it was never a lag, which is one more reason that
pin was wrong.
ghc gates ::gentoo's unconditional ^^ ( llvm_slot_* ) behind llvm? ( ). An
unconditional ^^ with no default forces every profile to choose an LLVM slot
even at USE=-llvm, which stops a headless emerge dead. Gating it costs an llvm
user nothing. The overlay is ahead here, not behind.
mesa_clc declares no REQUIRED_USE at all - llvm-r2.eclass builds it from
LLVM_COMPAT - so its tag sits beside that declaration instead.
Verified. Every md5-cache delta is _md5_ only: no depend field, no IUSE, no
REQUIRED_USE changed, which is what a comment-only edit must produce. Two
entries also reordered _eclasses_; checked pair by pair, same eclasses and same
hashes, egencache simply rewrote them sorted. pkgcheck against a worktree at
07519e2e3 differs on four packages by LINE NUMBERS ONLY - the same findings,
shifted by the inserted comments. The sweep holds at 230 rows with ALIGN 83 ->
70 and JUSTIFIED 147 -> 160: the thirteen were reclassified, not dropped.
--self-test 24/24, A20 untouched because the total did not move.
The deleted md5-cache entry is unrelated collateral, kept rather than restored:
dev-util/mesa_clc-26.3.0_pre20260905 has had no ebuild since yesterday's bump
and egencache removed the orphan. Recreating it would be recreating litter.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit de97d8448870eafbc7d84ab92ac143486dd48607
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 6 20:28:03 2026 -0300
fix(app-office/libreoffice-l10n, dev-util/vulkan-tools): two dependency lags, mod(dev-lang/lua, sci-biology/foldingathome): tag two that only look like lags, mod(scripts/gentoo-parity.sh): re-measure A20
Second parity remediation batch, and it splits the same way the gstreamer one
did: half were real, half were consequences of a decision already recorded
somewhere else. Deciding which is which is the work; the edits are one line each.
THE TWO LAGS.
libreoffice-l10n never set RPM_COMPRESS_TYPE. rpm.eclass then takes its unset
branch - "the ebuild hasn't been updated to resolve deprecations" - and narrows
BDEPEND to || ( app-arch/rpm2targz ) alone, dropping ::gentoo's
>=app-arch/rpm-4.19.0[lzma(+)]. Anyone who already has app-arch/rpm installed is
pushed to install rpm2targz as well, for nothing. Measured rather than copied:
extracting a langpack from DISTDIR and running strings over the RPM inside
reports PayloadIsXz, which is exactly the value ::gentoo declares. The variable
is @PRE_INHERIT, so it goes above the inherit or the eclass never sees it.
vulkan-tools got back test? ( dev-cpp/gtest ). The comment sitting there since
2026-09-04 already said what to do - "restore the atom or state why it is
unwanted" - and there is no reason to want it gone: it was collateral from the
edit that rewrote the SDK pins. The tests that need it are behind USE=test, so
its absence is invisible until someone enables that flag and the build fails
looking for gtest.
THE TWO THAT ONLY LOOK LIKE LAGS.
lua is missing app-portage/elt-patches, and must be. libtool.eclass is what puts
that in BDEPEND, and this ebuild deliberately does not inherit it - a divergence
already tagged on the INHERIT axis, because no Gentoo autotools-patched tarball
exists for 5.5 and it drives upstream's Makefile with tc-getCC instead. Nothing
here runs elibtoolize, and elt-patches exists only to feed it.
foldingathome is missing dev-util/patchelf from DEPEND because it MOVED to
BDEPEND, where a build-time tool belongs, and gained an elogind? guard. The
BDEPEND side was already tagged; the axis it left was not. Worth stating plainly
because it generalises: moving an atom between depend axes produces TWO
divergence rows, and tagging only the destination leaves the origin reading
ALIGN forever.
Verified. The md5-cache delta is exactly +[>=app-arch/rpm-4.19.0[lzma(+)]] twice
and +[test? ( dev-cpp/gtest )] once, with no removal anywhere and no depset
change at all on lua and foldingathome, whose edits are comments. pkgcheck was
run against a worktree at c10066d9d and produces identical findings before and
after on all four. The sweep goes 235 rows to 232: three closed, two
reclassified, nothing new. --self-test is 24/24 with A20 re-measured.
NOT VERIFIED: nothing was merged - this host has no sudo, and Portage reads
/var/db/repos/bentoo rather than the checkout. check-foldingathome-image.sh was
not run because it asserts properties of an installed image and this commit
changes no phase, no atom and no installed byte of that package.
RELATED FINDING, left alone: four more overlay ebuilds inherit rpm.eclass with
no RPM_COMPRESS_TYPE - proton-mail-bin, github-desktop, openoffice-bin and one
libreoffice-l10n sibling already covered here. The parity sweep cannot see three
of them because ::gentoo carries no counterpart, so the same latent narrowing is
there unaudited. Each needs its own payload measured; do not assume xz.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 10ff7a5a5001b1fc013fd442b0d46d18f43ac688
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Sep 5 16:12:26 2026 -0300
mod(sci-biology/foldingathome): document the 7 divergences, flag the bindist question
Third batch of the divergence-tag pass, and the one where the sweep's pairing is
itself the finding: ::gentoo ships foldingathome-7.6.21, the old "fahclient"
tarball, and this is 8.5.6 -- a different client, different upstream, different
licence, different install layout. The packages share a name and almost nothing
else, so six of the seven divergent axes follow from that one fact rather than
from any decision taken here. The header tag says so once, and the per-axis tags
point back at it instead of repeating it.
THE ONE WORTH READING TWICE. LICENSE is GPL-3 here where ::gentoo declares
"FAH-EULA-2014 FAH-special-permission". That looks like a licensing mistake and
is not: Folding@home relicensed at v8. Verified against upstream rather than
assumed -- github.com/FoldingAtHome/fah-client-bastet reports spdx_id GPL-3.0 on
2026-09-05. The EULA pair belongs to the 7.6.x client, which ::gentoo still
ships and we do not.
AN OPEN QUESTION IS RECORDED RATHER THAN ANSWERED. RESTRICT="bindist" sits oddly
next to GPL-3, which permits binary redistribution, and nothing in the ebuild
said why. It is defensible -- we ship a prebuilt .deb, and redistributing GPL
binaries obliges the redistributor to offer matching source, which a binhost
would not do on its own -- but "defensible" is not "decided". Licensing is the
maintainer's call, so the tag states the tension and asks for either a reason or
the token's removal. Writing a confident justification I had not verified would
be exactly the failure that produced the three wrong tags this whole pass exists
to clean up.
The rest, briefly: INHERIT (unpacker for the .deb, desktop/xdg for v8's GUI,
python-single-r1 for the control panel), KEYWORDS "-*" plus the two arches
upstream publishes a .deb for -- there is no source, so an arch with no .deb has
nothing to install -- IUSE elogind/systemd because this overlay requires every
daemon to start without systemd where ::gentoo installs a unit unconditionally,
BDEPEND patchelf used only on the elogind path to rewrite the .deb's libsystemd
NEEDED entry, and DEFINED_PHASES src_unpack/pkg_preinst against their pkg_config.
Verified: scripts/check-foldingathome-image.sh still reports PASS 15/15 against
the built image.
sci-biology/foldingathome now reports 7 JUSTIFIED, 0 UNDOCUMENTED.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 60563775269884942ae151e82e8dead969439455
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Aug 8 22:11:11 2026 -0300
fix(sci-biology/foldingathome-8.5.6-r1 -> -r2): reconcile RDEPEND with the shipped payload, del(foldingathome-8.5.6-r1)
RDEPEND did not describe the payload. Three edits, each decided from the
installed image rather than from upstream's packaging:
+ app-arch/lz4 liblz4.so.1 is DT_NEEDED on a BIND_NOW
binary, so the loader aborts before main()
without it -- the same failure class as
the libsystemd.so.0 bug -r1 fixed.
+ app-misc/ca-certificates the client speaks HTTPS to the assignment
servers, and on a minimal headless or
container host nothing else necessarily
pulls a CA bundle in.
- dev-libs/openssl:= nothing links it; TLS is static. See below.
sys-libs/zlib:= -> virtual/zlib:=, clearing the DeprecatedDep
pkgcheck reported on both 8.5.6 and -r1.
dev-libs/expat was deliberately NOT added even though upstream's .deb
Depends lists libexpat1. Also below.
Deliberately out of scope: upstream's Pre-Depends (adduser, procps) are
Debian packaging mechanics and the identities already come from
acct-user/acct-group; polkitd is Recommends and the rules file this
ebuild installs is inert without polkit rather than broken;
nvidia-opencl-icd is Recommends and accel backends are opt-in USE flags
in this overlay, never hardcoded deps.
--- evidence: readelf / strings on the installed fah-client ---
DT_NEEDED, 8 entries, no libssl/libcrypto/libexpat among them:
libsystemd.so.0 libpthread.so.0 libdl.so.2 liblz4.so.1
libz.so.1 libm.so.6 libc.so.6 ld-linux-x86-64.so.2
dlopen IS live in this binary. `readelf -W --dyn-syms` shows dlopen,
dlsym, dlclose, dlerror and dladdr imported UND at GLIBC_2.2.5(10),
which `readelf -W -V` maps to libdl.so.2 -- already DT_NEEDED and
already covered by sys-libs/glibc, so it adds no atom. It does mean the
string table has to be read before concluding anything: a dlopen'd
library has no DT_NEEDED entry. Note that plain `readelf --dyn-syms`
WITHOUT -W truncates the symbol-name column and shows none of these
five; the -W is load-bearing, and omitting it produced a wrong
first-pass reading of this same binary.
The complete lib*.so* string-literal set is the 8 DT_NEEDED names plus
exactly three dlopen candidates, all optional accel backends:
libcuda.so libOpenCL.so libamdhip64.so
No libexpat, libssl or libcrypto candidate exists.
dev-libs/expat -- NOT ADDED. `strings -a | grep -i expat` returns only
Expat's own compiled-in material: expat.txt, its license text, the
internal version string "expat_2.2.6", the message "requested feature
requires XML_DTD support in Expat", and the mangled cbang symbol
N2cb3XML12ExpatAdapterE (cb::XML::ExpatAdapter). No libexpat.so*
string, no DT_NEEDED entry, no XML_* dynamic symbol. That is static
linkage, not a dlopen miss, so the "err toward declaring it" rule does
not fire. Do not re-add it from the .deb's Depends without repeating
this check.
dev-libs/openssl:= -- REMOVED. Same method, same answer. No
libssl.so*/libcrypto.so* in DT_NEEDED, in the string set, or as an
imported symbol (grep for SSL_|EVP_|BIO_|X509_|OPENSSL_init in
--dyn-syms: no match), and upstream's own Depends never listed it. What
IS present is ~30 CRYPTOGAMS perlasm banners ("AES-NI GCM module for
x86_64, CRYPTOGAMS by <appro@openssl.org>", GHASH, Poly1305, ChaCha20,
X25519, Keccak-1600, the SHA transforms, the AESNI-CBC+SHA stitches),
an embedded "OpenSSL 1.1.1n 15 Mar 2022" banner, and the source paths
src/cbang/openssl/{KeyGenPacifier,KeyPair,SSLContext,SecurityUtilities}
.cpp.
CVE exposure, recorded because dropping the := hides it: TLS is
compiled into fah-client. A host-side dev-libs/openssl update does not
patch this binary, and without the subslot operator Portage will no
longer even propose the rebuild that never helped anyway. The bundled
copy self-reports OpenSSL 1.1.1n (2022-03-15), a branch that reached
EOL on 2023-09-11. A real fix has to come from upstream re-releasing
the .deb.
--- the check that would have caught this ---
scripts/check-foldingathome-libsystemd.sh is renamed to
scripts/check-foldingathome-image.sh (renamed in d7ba26372) and grows
two checks. A name that undersells what a gate covers is how the gate
goes stale, which is exactly what produced this bugfix: -r1 added a
section titled "Declared dependencies match what is installed" and
reconciled only the Python half.
14 every DT_NEEDED SONAME resolves to something RDEPEND declares
15 every declared library atom is referenced by the binary, either
as DT_NEEDED or as a dlopen string literal
Red against -r1, green against -r2, checks 01-13 unchanged in both:
FAIL 14 needed but not in RDEPEND: liblz4.so.1 -> app-arch/lz4
FAIL 15 declared but never loaded: dev-libs/openssl [9 lib(s)]
RESULT FAIL 2 of 15 checks red (8.5.6-r1)
PASS 14 8 DT_NEEDED entries all accounted for
PASS 15 every declared library atom is referenced by the binary
RESULT PASS 15/15 checks green (8.5.6-r2)
Three traps the checks had to handle, all of which produce a wrong
answer rather than a missing one:
* SONAME resolution is image-first, host-second. This package ships
its own libsystemd.so.0 (the elogind symlink), so asking the host
answers sys-apps/systemd -- an atom the elogind build correctly
does not declare, i.e. a false FAIL manufactured by asking the
wrong machine.
* virtual/* is expanded one level into its providers, or libz.so.1
(owned by sys-libs/zlib) stops matching the moment RDEPEND says
virtual/zlib.
* RDEPEND is read from build-info/RDEPEND, which portage writes
already USE-resolved, never from the ebuild text.
Both checks are host-relative and say so on every run: an atom not
installed on the checking host is printed as NOT JUDGED rather than
counted green. Check 15 also exempts python/acct-*/virtual atoms, which
are declared for reasons other than ELF linkage, and prints that
exemption list every run.
--- unchanged installed image ---
A dependency-atom change must not alter what is installed. Built both
revisions with USE="elogind -systemd" and compared:
diff -r --no-dereference <r1-image> <r2-image>
Only in r1/usr/share/doc: foldingathome-8.5.6-r1
Only in r2/usr/share/doc: foldingathome-8.5.6-r2
The docdir rename is dodoc following $; README.md.bz2 is
byte-identical (cmp) on both sides. Nothing else differs.
--- commit split ---
This change reached master in three commits, not one, and the two
earlier ones were not written by the author of the change:
d7ba26372 the script rename + checks 14/15, and -r2 carrying only
the lz4/ca-certificates half of the reconciliation
cff5fb8da the openssl removal, bundled with unrelated mesa and
llama-cpp bumps
this one the zlib atom, del(-r1), the md5-cache entry, and the
reasoning for all of it
Despite the bump-shaped subject lines, no automated sweep exists in
this repository -- no cron, no timer, no script emits them. Several
sessions run concurrently against this one checkout and each `git add`s
whatever it finds, so a tree that is mid-change gets committed and
pushed by whichever session commits next. Both were already pushed when
this was noticed, so rewriting was off the table: users sync from this
overlay.
Stricter staging is not the fix. Explicit paths were used here and
still lost two thirds of the change, because the problem is a second
writer to the same index, not a careless `git add`. The fix is one
`git worktree` per session, which gives each its own index and working
tree while sharing `.git`. Until that exists, a story requirement of
the form "commit in reviewable slices" is not satisfiable here and
should not be written as an acceptance criterion.
--- pre-existing, not introduced here ---
pkgcheck reports NonsolvableDepsInDev on 6 ~arm64 musl profiles,
solution set [ sys-libs/glibc ]. That atom is unchanged from -r1 and a
musl profile cannot satisfy glibc by construction, so the finding
predates this change. It is also not wrong: the payload is a
glibc-linked Debian binary and genuinely does not run on musl. The
honest fix is a musl mask, which is a separate decision from
reconciling RDEPEND.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit cff5fb8da4ccc1e49177cc5d0a79908340d37e5d
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Aug 8 21:57:22 2026 -0300
add(metadata/{md5-cache/dev-util/mesa_clc-26.3.0_pre20260809, md5-cache/media-libs/mesa-26.3.0_pre20260809, md5-cache/sci-ml/llama-cpp-0_pre10331}), mod(sci-biology/foldingathome-8.5.6-r2), mod(.autoupdate/packages.toml), up(dev-util/mesa_clc-26.3.0_pre20260808 -> 26.3.0_pre20260809, media-libs/mesa-26.3.0_pre20260808 -> 26.3.0_pre20260809, sci-ml/llama-cpp-0_pre10330 -> 0_pre10331)
commit d7ba26372c4942b42904ba4cc83f3efb52aa9523
Author: lucascouts <lucascs@protonmail.com>
Date: Sat Aug 8 21:49:50 2026 -0300
add(sci-biology/foldingathome-8.5.6-r2), add(scripts/check-foldingathome-image.sh), del(scripts/check-foldingathome-libsystemd.sh)
commit ddf98b5d4512928c76581cb3515f9daf27fe2f6c
Author: lucascouts <lucascs@protonmail.com>
Date: Fri Aug 7 17:30:38 2026 -0300
fix(sci-biology/foldingathome-8.5.6-r1): default to elogind so headless OpenRC still merges, add(scripts/check-foldingathome-libsystemd.sh)
The libsystemd fix shipped with IUSE="elogind systemd" and no default.
Neither flag is default-on by itself: elogind comes from the desktop
target, systemd only from systemd profiles. On a plain OpenRC server or
headless profile that leaves both off, so REQUIRED_USE refused the merge
on 30 amd64 profiles -- pkgcheck RequiredUseDefaults. 8.5.6 at least
merged there and failed at runtime; -r1 did not merge at all, which is a
regression for exactly the audience the fix was written for. Default to
+elogind. On a systemd profile elogind is USE-masked, so the default is
overridden there and the exactly-one-of constraint still resolves.
Drop the multilib inherit. get_libdir is a PMS built-in for EAPI >= 6
(eapi.sh:41 gates it, phase-helpers.sh:961 defines it); multilib.eclass
only uses it. The inherit was carried on a false premise and produced a
pkgcheck UnusedInherits warning that 8.5.6 did not have. Re-verified by
execution: the image check stays 13/13 green with $(get_libdir) still
resolving to lib64 without the eclass.
Extend PYTHON_COMPAT to python3_15, which dev-python/websocket-client-1.9.0
supports.
All three were invisible to the QA gate that cleared -r1: it ran pkgcheck
with -c ManifestCheck,MetadataVarCheck,DependencyCheck,SrcUriCheck,
PackageMetadataXmlCheck, chosen to dodge the git-addon IndexError that
crashes a bare full scan. None of those five checks can emit
RequiredUseDefaults, UnusedInherits or PythonCompatUpdate. Narrow by
keyword (-k) instead: it bypasses the same crash without blinding the
gate. The scan now matches the 8.5.6 baseline exactly -- DeprecatedDep on
sys-libs/zlib:= and NonsolvableDepsInDev on arm64/musl, both pre-existing.
Commit the image check itself. It previously lived under .epic/, which is
gitignored, so neither the script nor its recorded output survived outside
one working tree, and the green build directory was already gone by the
time this was audited.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit c556c503b72f7f0cc16d6c34ec02323dc26398a0
Author: lucascouts <lucascs@protonmail.com>
Date: Fri Aug 7 16:45:27 2026 -0300
fix(sci-biology/foldingathome-8.5.6 -> -r1): resolve libsystemd.so.0 via elogind on OpenRC
Upstream 8.5.6 added a DT_NEEDED on libsystemd.so.0 to the prebuilt
fah-client (8.5.5 had none). It imports seven sd_bus_* symbols, all
version-scoped to LIBSYSTEMD_221/222, and the binary is BIND_NOW -- so on
a host without that SONAME the loader aborts before main() and the package
is unusable. sys-apps/systemd-utils does not ship the library.
Select the provider with mutually exclusive elogind/systemd USE flags.
Under USE=elogind, install a private symlink to sys-auth/elogind's
libelogind.so.0 and bake a DT_RUNPATH into the binary, so the loader finds
it with no environment variable from the caller. elogind's version script
declares the LIBSYSTEMD_<n> version nodes and all seven symbols, so this
satisfies the loader's version check rather than merely matching a name.
The systemd path installs no symlink and no RUNPATH, resolving through
ld.so.cache as before. Neither provider can be an unconditional RDEPEND:
sys-auth/elogind carries !sys-apps/systemd.
Also declare what fahctl actually needs. It is a python3 script whose
`from websocket import create_connection` is mandatory -- the ImportError
branch exits 1 -- so python-single-r1 pulls dev-python/websocket-client
for the selected interpreter and python_fix_shebang pins the shebang to it.
Drop the stale md5-cache entry of the superseded 8.5.6.
Verified against the installed image, not by reading the ebuild: 13/13
checks green on -r1 and 5 red on 8.5.6. No OpenRC host was available, so
this proves the package loads, not that it folds work units there.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit faaa7641f5823a7be3029c200577c0f0c01a62f1
Author: lucascouts <lucascs@protonmail.com>
Date: Fri Aug 7 15:14:05 2026 -0300
add(metadata/{md5-cache/dev-python/uv-bin-0.12.3, md5-cache/dev-util/spirv-tools-1.4.357.0_p20260807, md5-cache/dev-util/vulkan-tools-1.4.359_p20260807, md5-cache/dev-util/vulkan-utility-libraries-1.4.359, md5-cache/media-libs/vulkan-loader-1.4.359_p20260807, md5-cache/sci-biology/foldingathome-8.5.6-r1, md5-cache/sci-ml/llama-cpp-0_pre10319}), mod(.autoupdate/packages.toml), up(dev-python/uv-bin-0.12.2 -> 0.12.3, dev-util/{spirv-tools-1.4.357.0_p20260806 -> 1.4.357.0_p20260807, vulkan-tools-1.4.358_p20260806 -> 1.4.359_p20260807, vulkan-utility-libraries-1.4.358_p20260806 -> 1.4.359}, media-libs/vulkan-loader-1.4.358_p20260806 -> 1.4.359_p20260807, sci-biology/foldingathome-8.5.6 -> 8.5.6-r1, sci-ml/llama-cpp-0_pre10312 -> 0_pre10319)
commit 99bb5388458f91658ea4702167439e9301141d3e
Author: lucascouts <lucascs@protonmail.com>
Date: Mon Jul 13 13:40:56 2026 -0300
add(metadata/{md5-cache/app-editors/zed-1.12.0_pre20260713, md5-cache/app-portage/bentoolkit-0.13.1, md5-cache/dev-util/codex-0.144.3, md5-cache/dev-util/codex-bin-0.144.3, md5-cache/dev-util/mesa_clc-26.2.0_pre20260713, md5-cache/media-libs/mesa-26.2.0_pre20260713, md5-cache/media-libs/vulkan-layers-1.4.352_p20260713, md5-cache/net-misc/modemmanager-1.25.1_p20260713, md5-cache/net-misc/postman-bin-12.19.0, md5-cache/sci-biology/foldingathome-8.5.6, md5-cache/sci-ml/llama-cpp-0_pre9987}), mod(metadata/md5-cache/app-portage/bentoolkit-0.13.0-r1, .autoupdate/packages.toml), up(app-editors/zed-1.12.0_pre20260712 -> 1.12.0_pre20260713, app-portage/bentoolkit-0.13.0-r1 -> 0.13.1, dev-util/codex{,-bin}-0.144.1 -> 0.144.3, media-libs/{mesa-26.2.0_pre20260712 -> 26.2.0_pre20260713, vulkan-layers-1.4.352_p20260712 -> 1.4.352_p20260713}, net-misc/{modemmanager-1.25.1_p20260710 -> 1.25.1_p20260713, postman-bin-12.18.5 -> 12.19.0}, sci-biology/foldingathome-8.5.5 -> 8.5.6, sci-ml/llama-cpp-0_pre9977 -> 0_pre9987)
commit ec3d8e936fe552efbfea33d4718352b475c36ffb
Author: lucascouts <lucascs@protonmail.com>
Date: Tue Apr 14 21:32:27 2026 -0300
add(dev-libs/{fzssh-1.1.10, libfilezilla-0.55.3}, sci-biology/foldingathome-8.5.5), mod(app-editors/zed-0.233.0_pre20260414, net-ftp/filezilla-3.70.3), up(dev-util/claude-code-2.1.105 -> 2.1.108)


View
Download
Browse