REPORT: the CI outcome - four red runs, two real causes, all now green
gates / gates (push) Successful in 12s

Adds section 11. The sharpest result of the whole sweep is in it: my own decoy-coverage gate
identified a repository by its DIRECTORY NAME and went blind the first time CI ran it, because the
act-runner checks out into a folder called hostexecutor. The gate written that morning to catch
name-for-fact was matching a name, in the first ten lines of its own main loop (R-428).

The other cause was my push ordering - two repos citing R-421 pushed before felhom.eu carried the
row - which instructions_gate convicted exactly as designed.
This commit is contained in:
2026-09-01 12:48:50 +02:00
parent 22983885f1
commit 960d29b061
+40 -3
View File
@@ -134,7 +134,37 @@ Closed **R-419**. Filed **R-421** (the class), **R-422**, **R-423**, **R-424**,
(the exemption list), **R-427** (the mirrored gap). Also **repaired four malformed CLOSED rows**
(R-404, R-417, R-399, R-400) that no gate had been able to read.
## 11. Observations, and my own mistakes by name
## 11. CI — four red runs after the first push, all mine, all now green
**The first push of every repo except the catalog went RED**, while all four runners were green
locally. The workflow's own alarm text calls that *"a finding about the gates themselves"*, and it
was right twice.
| repo | final job | sha | result |
|---|---|---|---|
| felhom.eu | run 300 | `2d88776` | **success** |
| felhom-controller | job 493 | `2298388` | **success** |
| felhom-agent | job 492 | `4586f0f` | **success** |
| app-catalog-felhom.eu | job 486 | `29edad9` | **success** (green first time) |
**Cause 1 — R-428, and it is the sweep's sharpest result.** `decoy_coverage_gate.py` identified a
repository by `os.path.basename(root)`. Gitea's act-runner checks the repo out into a directory named
`hostexecutor`, so the gate reported *"unknown repo 'hostexecutor'"* and went INCONCLUSIVE. **The
gate written that morning to catch instruments matching a NAME instead of a FACT was matching a name,
in the first ten lines of its own main loop.** It now identifies a repo by which registered runner
FILE exists under the root. Verified under a renamed directory: 14 gates found where the name-based
version found none.
**Cause 2 — my push ordering.** `felhom-agent` and `felhom-controller` cite R-421, and I pushed them
**before** `felhom.eu` carried that row, so `instructions_gate` correctly convicted *"cites R-421,
which appears in neither register"*. The register lives in `felhom.eu`; **a repo citing a new row must
be pushed after it.** Not a gate defect — the gate did exactly its job, on me.
**Cause 3 — a missing input.** CI fetches two sibling clones; the meta-gate walks four runners. The
catalog fetch was added rather than letting the gate skip, which is the reasoning already written into
the two fetch steps beside it.
## 12. Observations, and my own mistakes by name
1. **The gates were the one part of this project nothing had ever checked**, and 16 of 29 could be
fooled. **FILED: R-421** — the class row, with the four shapes.
@@ -165,11 +195,18 @@ Closed **R-419**. Filed **R-421** (the class), **R-422**, **R-423**, **R-424**,
8. **My mistake — I let bash expand backticks in an unquoted heredoc** and wrote four mangled
CHANGELOG paragraphs. Caught by reading the file back, repaired in place. **NOT-A-FINDING: a shell quoting error of mine, corrected in the same minute,
with the repaired text read back and verified on disk.**
9. **`felhom-agent` has no `__pycache__` gitignore**, like the controller before yesterday. Left
9. **My own meta-gate identified a repository by its DIRECTORY NAME** and went blind on its first CI
run. **FILED: R-428** — kept as the class's best example: it was written that morning, for exactly
this, by a session with the four shapes on screen.
10. **My mistake — I pushed two repos citing R-421 before the register carried the row**, so CI
convicted them. The register lives in `felhom.eu`. **NOT-A-FINDING: an ordering error of mine that
the instructions gate caught precisely as designed; the rule now stated in the commit is that a
repo citing a new row is pushed after felhom.eu.**
11. **`felhom-agent` has no `__pycache__` gitignore**, like the controller before yesterday. Left
alone. **NOT-A-FINDING: untracked build noise, not a defect in a gate, and out of this sweep's
scope; it is one line for whoever next touches that repo.**
10. **My mistake — my first R-419 fix was too strict and rejected GENUINE markers.** It anchored a
12. **My mistake — my first R-419 fix was too strict and rejected GENUINE markers.** It anchored a
marker to a line start or a bare `. `, which misses the commonest real shape: a bolded sentence
followed by a bolded marker (`...them.** **FILED: R-427**`). **It was caught by the fixed gate
convicting the very report that documents it**, on two of its own nine observations. Emphasis is