docs: R-168 is CLOSED — correct the stale "CI is still owed" sentence carried into the trim (R-229)
gates / gates (push) Successful in 8s

Found by the checklist's own last item (confirm your push's CI run by run ID). Corrected here and
in the three sibling repos. Ledger J2 records the two lessons: a trim is a VOLUME operation and
carries stale claims forward unless each is re-checked, and the gate cannot catch this class --
"this register item is closed" is not mechanically checkable from the instruction file.
This commit is contained in:
2026-08-06 11:03:40 +02:00
parent 9c10c5d600
commit a0b50eb48f
3 changed files with 57 additions and 1 deletions
@@ -226,6 +226,44 @@ upstream images are the only plausible consumer, and there `docker inspect` stil
---
## J2. A stale claim found by the checklist's own last item — corrected in all four repos
The end-of-session checklist says **"confirm your own last push's CI run went green, by run ID."**
Doing that surfaced a contradiction in the file that had just been trimmed.
Four instruction files asserted that continuous integration **was still owed** (`OPEN-ITEMS.md`
R-168). **R-168 was CLOSED on 2026-08-02**: `.gitea/workflows/gates.yml` re-runs each repo's gate
entry point on every push and emails the operator on failure via Resend. This session's own commits
produced runs 117 (`success`) and 118 against the real SHAs.
| File | Status |
|---|---|
| `felhom.eu/CLAUDE.md` | **carried forward into the trim by this session** — corrected |
| `felhom-controller/.claude/rules/gates.md` | from part 1 — corrected |
| `felhom-agent/CLAUDE.md` | from part 1 — corrected |
| `app-catalog-felhom.eu/CLAUDE.md` | older wording, same claim — corrected |
**`felhom-agent/CLAUDE.md` contradicted itself.** Its release section already said *"R-168 sends that
failure by mail"* while its gates section said CI was still owed — a contradiction **inside a single
instruction file**, which is exactly the class the whole R-229 effort exists to find, sitting in a
file part 1 had already gone through.
Two lessons, both about this task rather than about CI:
1. **A trim carries stale claims forward unless each is re-checked.** Compressing 227 lines to 115 is
a *volume* operation; it does not validate content. This sentence survived because it read as
settled — the same reason the nine invariant comments in the project's own case table survived.
2. **The gate cannot catch this class.** It checks length, version literals, expired TEMPORARY blocks,
rule scoping and copy identity. "This register item is closed" is not mechanically checkable from
the instruction file alone. The checklist item that *did* catch it is a human PULL check, and it
only worked because it demands a **run ID**, not a memory.
No new register row: found, fixed, and pushed in the same session. `REPORT.md` was deliberately **not**
overwritten in the three sibling repos — a one-line docs correction must not destroy the record of
their last real implementation.
---
## K. Observations — noticed, not acted on
1. **`target-selection.md` t740 error** — still present, carried from part 1 §L.1.