From 70d84fbfd7ba96b5319b5370bb496df3fb0413c5 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 31 Aug 2026 08:20:11 -0400 Subject: [PATCH] ci(integration): print the runner facts that rules 79 and 81 assert (#3237) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three conditional rules state facts about this act_runner — services are not reachable by hostname (79), the service container's name is derived from the job's truncated display name (80), and `run:` steps execute under a shell without bash features (81). None had ever been verified, because each check reads "add a step to a live CI job and read the log" and nobody wants to arrange a throwaway run to do it. So the step is not throwaway. Two lines on every integration run turn the next sweep of these rules into a log read. Rule 80 needs nothing new: the container listing the suite step already prints for the name filter is its evidence, and run 5055's log already answers it. Every command is guarded with a fallback. This observes the lane; it must not be able to break it. --- .forgejo/workflows/ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index 7f0e7b8..6ca1627 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -279,6 +279,21 @@ jobs: env: UV_PROJECT_ENVIRONMENT: /opt/venv run: uv sync --locked --extra dev + # Standing answers to the checks carried by rules 81 and 79 — two facts + # about THIS runner that conditional rules assert as fact, and that + # otherwise need a throwaway job to confirm (#3237). Printing them on + # every integration run makes the next rulebook sweep a log read. + # Rule 80's evidence is the container listing the next step already + # prints. Every command is guarded: a diagnostic that can break the lane + # it observes is worse than no diagnostic. + - name: Runner facts (rules 79 and 81) + run: | + echo "--- rule 81: which shell runs a run: step ---" + readlink -f /bin/sh || echo "/bin/sh: not a symlink" + ps -p $$ -o comm= || true + echo "--- rule 79: is a service reachable by its hostname yet? ---" + getent hosts postgres \ + || echo "no — 'postgres' does not resolve; the bridge-IP lookup is still required" - name: Integration suite (resolve service IP, migrate, test) run: | set -eux