Run #1 died in Checkout, before a single command of ours ran: actions/checkout
is a JavaScript action, and the job's `container: python:3.13-slim` has no Node
runtime for it. The same actions succeed on this instance with no `container:`
key at all (Experimental/brain-of-reese run 264 is the proof), so the job stays
on the runner and shells into the interpreter it needs instead.
The suite now runs inside a pinned python:3.13-slim via whichever of podman or
docker the runner has — the same runtime the publish job builds with, which is
why "no runtime found" is a hard failure rather than a quiet fallback to
whatever python the runner image happens to ship. Falling back there would make
the gate depend on an interpreter nobody chose.
3.13 rather than the 3.14 of the dev venv: it is the floor declared in
pyproject's requires-python, so CI checks the floor. The image-build smoke step
lost its apt-get install podman for the same reason.
LLM-Generated: true
One image (gitea.reeseapps.com/experimental/mirror), tagged :main on main and
a version tag on release, exactly like brain-of-reese — plus a `test` job the
publish job `needs`. A red pipeline therefore leaves :main on the last good
build, which is what podman auto-update keeps serving: red means nothing
shipped, not that production broke.
The test job runs unit + API only and --ignores tests/e2e rather than
deselecting it: -m filtering happens after collection, and tests/e2e/conftest.py
imports playwright, so a marker alone would not keep the browser suite out of a
container that has no browser. The e2e and realdisplay rungs stay local gates
(AGENTS.md), and pyright is not in CI either, since the python container has no
node to run it with — that asymmetry is written down rather than pretended
away.
The image sheds curl and its HEALTHCHECK: health belongs to the deployment
(HealthCmd in the quadlet, which probes with the python already in the image),
so the runtime image no longer ships a package that exists only to answer
/healthz — and no longer contains a way to make outbound requests, which is
consistent with a server that dials nothing. 171 MB to 157 MB. The image
source label points at the real repo now instead of example.invalid.
Verified locally with podman 5.8: the image builds, `mirror --help` exits 0,
and it serves on 8080 when MIRROR_PORT says 8080.
LLM-Generated: true