ci: give the wire-contract gate the sibling clone it needs (the hook and CI disagreed)
gates / gates (push) Failing after 34s

CI went red on the two G-1 commits while the local pre-push hook was GREEN — which this workflow's
own alarm mail says outranks whatever the push was for, because it is a finding about the gates
themselves. It was.

CAUSE, reproduced rather than guessed: scripts/wire_contract_gate.py compares what one component
EMITS against what the other can RECEIVE, so it needs the SOURCE of the controller and the agent.
The workflow already fetched the controller (for golden-currency) but not the agent, so the gate
exited 2 INCONCLUSIVE. Reproduced locally by pointing the gate at a nonexistent agent path: same
exit 2, same message.

THE LESSON, and it is the reusable half: the pre-push hook runs on a workstation where every sibling
is a real clone, so a gate that needs a sibling passes there and is inconclusive here. **The two
automated homes are not interchangeable, and a NEW GATE MUST BE CHECKED IN BOTH.** Recorded in the
step's own comment beside the fetch.

Fixed by giving the gate what it needs. NOT by letting it skip when a sibling is absent — that is the
fail-open shape, and it would leave the gate running in NEITHER home, which is the R-29 census
failure this runner was built to end and which golden_currency_gate.py's docstring already warns
about at length.
This commit is contained in:
2026-08-08 09:07:40 +02:00
parent 9771fd9c27
commit 436abf39d5
+20
View File
@@ -32,6 +32,26 @@ jobs:
git checkout -q FETCH_HEAD
echo "checked out $(git rev-parse HEAD)"
- name: Fetch the agent (wire-contract gate needs BOTH sibling repos)
# G-1's gate (scripts/wire_contract_gate.py) compares what one component EMITS against what
# the other can RECEIVE, so it needs the source of the controller AND the agent, not just a
# CHANGELOG. Without this the gate exits 2 (INCONCLUSIVE) and CI is red for ever.
#
# ⚠ THIS STEP WAS MISSING FOR ONE COMMIT AND CI WENT RED, exactly as the alarm mail below
# predicts: "if the local pre-push hook was GREEN, then CI and the hook disagree — that is a
# finding about the gates themselves". It was. The pre-push hook runs on a workstation where
# every sibling is a real clone, so a gate needing a sibling passes locally and is
# INCONCLUSIVE here; the two homes are NOT interchangeable and a new gate must be checked in
# both. Fixed by giving the gate what it needs — never by letting it skip, which would be
# the fail-open shape and would leave it running in NEITHER home (R-29).
run: |
git init -q ../felhom-agent
cd ../felhom-agent
git remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom-agent.git
git fetch -q --depth 1 origin main
git checkout -q FETCH_HEAD
echo "agent at $(git rev-parse --short=12 HEAD)"
- name: Fetch the controller CHANGELOG (golden-currency gate needs the sibling repo)
# R-242's gate compares the newest RELEASED controller against the newest golden baked here,
# and it reads the released version from the sibling clone's CHANGELOG.md — the same sibling