CLI: a closed stdout pipe exits 141 silently (was E_INTERNAL); example avoids head under pipefail
ci / test (3.12) (push) Failing after 8s
ci / test (3.13) (push) Failing after 10s

Found by the P10 fresh-VM run: `simurg inspect … | head` raised BrokenPipeError, reported as
an internal error, and stopped examples/gsa_demo.sh (set -o pipefail). run_guarded now flushes
stdout inside the guard and maps BrokenPipeError to ExitCode.SIGPIPE (141) without a message.
p10.sh: SKIP_DOCKER/SKIP_CONDA, clearer digest report; p10t.sh runs build+pip+tutorial only.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01814GKVzZVL3FuF3DeiZXhv
This commit is contained in:
kemalandClaude Opus 5.5 committed 2026-09-28 23:14:47 +01:00
1 parent 92416397fe
commit bc93e00318
6 files changed
+38 -6

No files matched your search

+10 -3
View File
@@ -56,6 +56,7 @@ for v in fresh pure; do
done
echo "=== 4a. docker $(date -u +%T) ==="
if [[ "${SKIP_DOCKER:-0}" != "1" ]]; then
D=data/p0/gsa_v4_pgx
BPM=$D/GSA-PGx-48v4-0_20079540_E2_bpm/GSA-PGx-48v4-0_20079540_E2.bpm
CSV=$D/GSA-PGx-48v4-0_20079540_E2_csv/GSA-PGx-48v4-0_20079540_E2.csv
@@ -75,8 +76,10 @@ if docker build -q -t simurg:test . > $R/docker_build.log 2>&1; then
else
step docker_build FAILED; tail -30 $R/docker_build.log
fi
fi
echo "=== 4b. conda $(date -u +%T) ==="
if [[ "${SKIP_CONDA:-0}" != "1" ]]; then
curl -sSfL -o $W/miniforge.sh "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-$ARCH.sh" \
&& bash $W/miniforge.sh -b -p $W/conda > /dev/null
C=$W/conda/bin
@@ -94,6 +97,7 @@ if $C/conda install -y -q -n base conda-build > $R/conda.log 2>&1 \
else
step conda_build FAILED; tail -40 $R/conda.log
fi
fi
echo "=== 5. digests $(date -u +%T) ==="
$W/fresh/bin/python - "$R" <<'PY' | tee $R/agreement.txt
@@ -104,10 +108,13 @@ for kind in ("gtc", "vcf"):
runs = {p.stem.split("_", 2)[2]: json.loads(p.read_text())[kind] for p in sorted(r.glob(f"digest_{kind}_*.json"))}
if not runs:
continue
ref_name, ref = "fresh", runs.get("fresh", {})
ref = runs.get("fresh", {})
if not ref:
print(f"{kind}: no reference (the pip-installed tutorial produced no outputs)")
continue
for name, d in runs.items():
same = d == ref and len(d) > 0
print(f"{kind}: {name} vs {ref_name}: {'IDENTICAL' if same else 'DIFFERENT'} ({len(d)} files)")
if name != "fresh":
print(f"{kind}: {name} vs fresh: {'IDENTICAL' if d == ref else 'DIFFERENT'} ({len(d)} vs {len(ref)} files)")
PY
{
echo "{"; echo " \"arch\": \"$ARCH\","