sober-bin
The package downloads a prebuilt binary and its checksum manifest from the project's own distribution domain; while the host is not whitelisted, the binary is verified against both a pinned hash in the PKGBUILD and a cross-checked release manifest line, ensuring integrity despite the non-standard host.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package downloads a prebuilt binary and its checksum manifest from the project's own distribution domain; while the host is not whitelisted, the binary is verified against both a pinned hash in the PKGBUILD and a cross-checked release manifest line, ensuring integrity despite the non-standard host.
2 higher static findings superseded - not the current verdict (shown for transparency)
external_download_not_in_source
curl/wget fetches a URL on a non-allowlisted host that is not part of source=(), so it is not checksum-verified by makepkg.
-
PKGBUILD:57
curl -fsSL "https://pkg.sober-dev.app/ce/SHA256SUMS?ref=${_upstream_version}" \
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:26
"https://pkg.sober-dev.app/ce/sober_v${_upstream_version}_linux_amd64"
PKGBUILD
2 offending line(s) highlighted# Maintainer: Markus Maiwald <markus@maiwald.work>
pkgname=sober-bin
_upstream_version=2026.09.1
pkgver="${_upstream_version//-/_}"
pkgrel=1
pkgdesc='Prevent AI-Slop: a local-first repository governance client and code reviewer with deterministic review readiness (local app; the forge-side Raccoon daemon and dashboard ship in Sober Enterprise)'
arch=('x86_64')
# Marketing / product site (read about Sober). Source + releases: git.sovereign-society.org/Sober/sober
url='https://sober-dev.app'
license=('LSL-1.0')
depends=('tree-sitter')
provides=('sober')
conflicts=('sober')
# Integrity model (why this is not "no verification"):
# 1) makepkg validates the binary against the pinned sha256sums[0] in this PKGBUILD
# (the AUR git history is the trust anchor — standard Arch -bin practice).
# 2) prepare() re-checks the same binary against the release SHA256SUMS *line*
# for this artifact only (cross-check vs the published release manifest).
# SHA256SUMS itself uses SKIP: that file is rewritten when OCI/Debian image
# assets are attached later; pinning its whole-file hash caused false AUR
# failures. The binary line inside it stays stable for a given release.
# Sources come from the sober-dist R2 layer (download-counter instrumented),
# not the forge release page, so installs are visible in the /stats counters.
source=(
"https://pkg.sober-dev.app/ce/sober_v${_upstream_version}_linux_amd64"
"https://pkg.sober-dev.app/ce/SHA256SUMS"
)
sha256sums=(
'47550b5af9e7a33c0c13e4aaed97db2c3648ab3c19029966b125dc500faf8a53'
'SKIP'
)
prepare() {
cd "${srcdir}"
local bin="sober_v${_upstream_version}_linux_amd64"
local line
if [[ ! -f SHA256SUMS ]]; then
echo "error: release SHA256SUMS missing from sources" >&2
return 1
fi
if [[ ! -f "${bin}" ]]; then
echo "error: binary ${bin} missing from sources" >&2
return 1
fi
# Exact artifact line (hash + two spaces/tabs + filename).
line="$(grep -E "^[0-9a-fA-F]{64}[[:space:]]+${bin}\$" SHA256SUMS || true)"
if [[ -z "${line}" ]]; then
# SHA256SUMS is a moving file fetched with hash SKIP, so a copy cached
# by makepkg (SRCDEST) or a CDN edge can predate this release. Re-fetch
# once — the query string busts edge caches — before declaring the
# release broken.
echo "note: ${bin} missing from local SHA256SUMS — refetching manifest" >&2
if command -v curl >/dev/null 2>&1; then
curl -fsSL "https://pkg.sober-dev.app/ce/SHA256SUMS?ref=${_upstream_version}" \
-o SHA256SUMS || true
fi
line="$(grep -E "^[0-9a-fA-F]{64}[[:space:]]+${bin}\$" SHA256SUMS || true)"
fi
if [[ -z "${line}" ]]; then
echo "error: ${bin} is not listed in upstream SHA256SUMS" >&2
echo "hint: stale cached manifest — retry with fresh sources: paru -S ${pkgname} --redownload" >&2
echo "------- SHA256SUMS -------" >&2
cat SHA256SUMS >&2 || true
return 1
fi
# Cross-check binary bytes against the release manifest line.
if ! printf '%s\n' "${line}" | sha256sum -c -; then
echo "error: binary failed verification against release SHA256SUMS" >&2
return 1
fi
# Defense in depth: manifest hash must equal the PKGBUILD pin (makepkg
# already checked the file; this catches a stale pin vs updated release).
local from_sums actual
from_sums="$(printf '%s\n' "${line}" | awk '{print tolower($1)}')"
actual="$(sha256sum "${bin}" | awk '{print tolower($1)}')"
if [[ "${from_sums}" != "${actual}" ]]; then
echo "error: SHA256SUMS hash (${from_sums}) != binary hash (${actual})" >&2
return 1
fi
if [[ "${from_sums}" != "${sha256sums[0]}" ]]; then
echo "error: PKGBUILD pin (${sha256sums[0]}) != release SHA256SUMS (${from_sums})" >&2
echo "hint: maintainer must re-run scripts/publish-aur.sh after re-uploading the binary" >&2
return 1
fi
echo "ok: ${bin} matches PKGBUILD pin and release SHA256SUMS"
}
package() {
install -Dm755 "${srcdir}/sober_v${_upstream_version}_linux_amd64" \
"${pkgdir}/usr/bin/sober"
# Ship the release manifest so operators can re-verify offline.
install -Dm644 "${srcdir}/SHA256SUMS" \
"${pkgdir}/usr/share/doc/${pkgname}/SHA256SUMS"
}
Changes since previous scan
--- PKGBUILD @ 2026-09-16 15:22+++ PKGBUILD @ 2026-09-17 00:27@@ -1,9 +1,9 @@ # Maintainer: Markus Maiwald <markus@maiwald.work> pkgname=sober-bin-_upstream_version=0.11.0+_upstream_version=2026.09.1 pkgver="${_upstream_version//-/_}"-pkgrel=2-pkgdesc='Prevent AI-Slop: The Sober Raccoon is your local CodeRabbit: A Local-first repository governance assistant and code reviewer with deterministic review readiness'+pkgrel=1+pkgdesc='Prevent AI-Slop: a local-first repository governance client and code reviewer with deterministic review readiness (local app; the forge-side Raccoon daemon and dashboard ship in Sober Enterprise)' arch=('x86_64') # Marketing / product site (read about Sober). Source + releases: git.sovereign-society.org/Sober/sober url='https://sober-dev.app'@@ -27,7 +27,7 @@ "https://pkg.sober-dev.app/ce/SHA256SUMS" ) sha256sums=(- '4fb595ca85ae131c7477918bc4dde0cc714ba482eece080c6e87ddff5eace7ad'+ '47550b5af9e7a33c0c13e4aaed97db2c3648ab3c19029966b125dc500faf8a53' 'SKIP' ) Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 3 |
| 2026-09-16 17:23:26 | Medium | 2 |
| 2026-09-16 15:22:50 | Medium | 2 |
| 2026-09-16 00:03:17 | Low | 3 |
| 2026-09-15 00:25:31 | Low | 3 |
| 2026-09-14 00:27:57 | Low | 3 |
| 2026-09-13 00:19:54 | Low | 3 |
| 2026-09-12 00:25:17 | Low | 3 |
| 2026-09-11 00:19:22 | Low | 3 |
| 2026-09-10 00:22:44 | Low | 3 |
| 2026-09-09 00:04:09 | Low | 3 |
| 2026-09-08 00:18:08 | Low | 3 |
| 2026-09-07 00:30:15 | Low | 3 |
| 2026-09-06 00:17:06 | Low | 3 |
| 2026-09-05 00:16:27 | Low | 3 |
| 2026-09-04 00:03:13 | Low | 3 |
| 2026-09-03 00:15:47 | Low | 3 |
| 2026-09-02 00:02:31 | Low | 3 |
| 2026-09-01 00:11:19 | Low | 3 |
| 2026-08-31 00:19:57 | Low | 3 |