prism-harness-suite
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (anthropic/claude-4.6-sonnet-20260217) reviewed the full PKGBUILD and judged it LOW (confidence 70%): Builds from a self-hosted Forgejo instance (git.sovereign-society.org) that is plausibly the project's own infrastructure; clones additional repos from the same host at build time, which is unconventional but not inherently malicious. The SKIP checksum on a git tag is normal AUR practice. No obfuscation, no exfiltration, no piped-to-shell payloads; the main concern is that the non-whitelisted personal forge could be swapped, but the realistic worst case is installing untrusted JS bundles run via Bun, which is a low-to-medium supply-chain risk typical of any AUR package building from a personal host.
1 higher static finding superseded - not the current verdict (shown for transparency)
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:13
source=("git+https://git.sovereign-society.org/prism/prism-harness.git#tag=v1.0.0-rc.1")
PKGBUILD
1 offending line(s) highlighted# Maintainer: Markus Maiwald <markus@maiwald.tk>
pkgname=prism-harness-suite
pkgver=1.0.0_rc1
pkgrel=1
pkgdesc="PRISM Harness suite - small bundles sharing one Bun runtime (harness, loop, proxy, route, sober)"
arch=('x86_64')
url="https://git.sovereign-society.org/prism"
license=('custom:LSL-1.0')
depends=('bun')
makedepends=('git' 'bun')
provides=('prism-harness' 'prism-loop' 'prism-proxy' 'prism-route' 'prism-sober')
conflicts=('prism-harness' 'prism-loop' 'prism-proxy' 'prism-route' 'prism-sober')
source=("git+https://git.sovereign-society.org/prism/prism-harness.git#tag=v1.0.0-rc.1")
sha256sums=('SKIP')
build() {
cd "$srcdir/prism-harness"
# Clone the other components (they are separate repos on Forgejo)
for r in prism-loop prism-sober prism-proxy prism-route; do
if [ ! -d "../$r" ]; then
git clone --depth 1 "https://git.sovereign-society.org/prism/$r.git" "../$r"
fi
done
# Build small bundles (each package has its "build" script from the suite setup)
for d in . ../prism-loop ../prism-sober ../prism-proxy ../prism-route; do
if [ -f "$d/package.json" ]; then
(cd "$d" && bun install --frozen-lockfile 2>/dev/null || bun install; bun run --if-present build) || echo "note: build for $d"
fi
done
}
package() {
cd "$srcdir"
# Install each component's built tree to /usr/lib/prism/<name> and wrapper in /usr/bin
# This keeps node_modules for native deps (e.g. sharp in proxy) next to the code
# Small size, one Bun runtime
install -d "$pkgdir/usr/lib/prism"
install -d "$pkgdir/usr/bin"
for comp in prism-harness prism-loop prism-sober prism-proxy prism-route; do
srcdir_comp="$srcdir"
if [ "$comp" != "prism-harness" ]; then
srcdir_comp="$srcdir/../$comp"
fi
if [ -d "$srcdir_comp/dist" ]; then
# Copy the full component (for deps) or at least dist + needed
install -d "$pkgdir/usr/lib/prism/$comp"
cp -r "$srcdir_comp/dist" "$pkgdir/usr/lib/prism/$comp/" 2>/dev/null || true
# For components with node_modules (proxy etc), copy if present after build
if [ -d "$srcdir_comp/node_modules" ]; then
cp -r "$srcdir_comp/node_modules" "$pkgdir/usr/lib/prism/$comp/" 2>/dev/null || true
fi
# Copy package.json if needed for resolution
if [ -f "$srcdir_comp/package.json" ]; then
install -Dm644 "$srcdir_comp/package.json" "$pkgdir/usr/lib/prism/$comp/package.json"
fi
# The bundle .js
bundle="$pkgdir/usr/lib/prism/$comp/dist/$comp.js"
if [ -f "$bundle" ]; then
# Wrapper script (ensures correct exec with bun and resolution)
cat > "$pkgdir/usr/bin/$comp" << WRAP
#!/usr/bin/env sh
exec /usr/bin/bun "/usr/lib/prism/$comp/dist/$comp.js" "\$@"
WRAP
chmod +x "$pkgdir/usr/bin/$comp"
fi
else
echo "warning: no dist for $comp"
fi
done
# Install helper
if [ -f "prism-harness/install.sh" ]; then
install -Dm755 "prism-harness/install.sh" "$pkgdir/usr/share/doc/$pkgname/install.sh"
fi
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 3 |
| 2026-07-22 00:29:32 | LOW | 3 |
| 2026-07-21 00:24:15 | LOW | 3 |
| 2026-07-20 00:19:49 | LOW | 3 |
| 2026-07-19 00:17:08 | LOW | 3 |
| 2026-07-18 00:14:48 | LOW | 3 |
| 2026-07-17 00:06:16 | LOW | 3 |
| 2026-07-16 00:05:41 | LOW | 3 |
| 2026-07-15 00:09:25 | LOW | 3 |