G7 COMPLETE: CI is green on our own hardware
All checks were successful
check / gate (push) Successful in 17s
All checks were successful
check / gate (push) Successful in 17s
Run 7 passed end to end: Python 3.12.13, ruff clean, vocabulary audit clean, 42 tests, migration upgrade->downgrade->upgrade against real Postgres, and 'I-12 holds: env override ignored'. This is the finding both August audits converged on — 'nothing anywhere checks whether a decision reached production' — closed for this repo. GitHub Actions is billing-locked and cannot run on private repos at all, even self-hosted. This can, on hardware Grant already owns, for zero dollars. I-5 proven by inspection, not assertion: CI containers sit on windy-git-runner_jobs, the forge database on windy-git_default. Disjoint. And neither CI container holds the host docker socket. Adds strand G7A: seven runs to first green, and each failure presented as a different problem than it was. The worst was a Python version mismatch that appeared as a 14-minute hang rather than an error, because pip answered 3.10-vs-3.12 by backtracking through every dependency's release history with -q hiding it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -355,6 +355,44 @@ and landed in R2 at `lfs/34/2d/…`, with **no local `lfs/` directory on the hos
|
||||
- **G7.7** Artifacts and logs to R2 (G4.1).
|
||||
- **G7.8** *Accept:* a deliberately broken commit to a private repo produces a red check on the PR — **which is something that has not happened anywhere in this ecosystem in over a month.**
|
||||
|
||||
## Strand G7A — CI traps paid for on 2026-08-12
|
||||
|
||||
Seven runs to first green. Every one of these presents as a different problem
|
||||
than it is, and all are now pinned by tests.
|
||||
|
||||
- **G7A.1 — the isolation/DNS collision.** Job containers live inside the dind
|
||||
daemon and cannot resolve `gitea`, which lives on the forge network. The easy
|
||||
fix is to put jobs on the forge network — one line, and it leaves untrusted
|
||||
workflow code one DNS name from the forge's Postgres. **Send jobs to the
|
||||
PUBLIC forge surface instead**, exactly like any stranger. The runner then
|
||||
needs no forge attachment at all, so no CI container has a private route to
|
||||
anything.
|
||||
- **G7A.2 — the instance URL is baked into `/data/.runner` at registration.**
|
||||
Changing the environment variable does nothing; the daemon keeps dialling the
|
||||
old host. To repoint a runner you must drop its data volume and re-register
|
||||
with a fresh token.
|
||||
- **G7A.3 — ⚠️ a Python version mismatch presents as a HANG, not an error.**
|
||||
`catthehacker/ubuntu:act-22.04` ships Python 3.10.12; this project requires
|
||||
≥3.12. pip answered by backtracking through the entire release history of
|
||||
every dependency at 100% CPU, with `-q` hiding all of it, for 14 minutes. Use
|
||||
`actions/setup-python`, and **give every job `timeout-minutes`** so a wedge is
|
||||
a red check in minutes rather than an occupied runner for half an hour.
|
||||
- **G7A.4 — you cannot just run the job in a `python:3.12` image.**
|
||||
`actions/checkout` is a JavaScript action and the official Python images carry
|
||||
no `node`, so checkout dies with *"executable file not found"*. The act image
|
||||
has node; `setup-python` supplies the interpreter.
|
||||
- **G7A.5 — `container.network: bridge` breaks service containers.** Service
|
||||
DNS aliases exist only on a per-job network, so Postgres came up healthy and
|
||||
the job could not name it. `network: ""` is both correct **and stricter** — a
|
||||
shared flat bridge lets concurrent jobs see each other.
|
||||
- **G7A.6 — do not restart the runner while a job is in flight.** Runs 3 and 6
|
||||
died to exactly that, and the resulting log looks like a workflow defect
|
||||
rather than an operator interrupting it.
|
||||
|
||||
**Verified green 2026-08-12, run 7:** Python 3.12.13 · ruff clean · vocabulary
|
||||
audit clean · 42 tests · migration upgrade→downgrade→upgrade against real
|
||||
Postgres · and `I-12 holds: env override ignored`.
|
||||
|
||||
## Strand G8 — Agent surface (MCP + capability discovery)
|
||||
|
||||
- **G8.1** MCP server `windy-git-mcp` exposing the full knob-set — every button a human can push. Follows `windy-word-mcp` conventions.
|
||||
|
||||
Reference in New Issue
Block a user