REPORT + CONTEXT + CLAUDE.md: step definitions (2026-09-24)
gates / gates (push) Successful in 2s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-24 08:52:59 +02:00
parent 5ed599cd5f
commit 635c7e68f7
3 changed files with 23 additions and 21 deletions
+4 -1
View File
@@ -122,7 +122,10 @@ deployed `app.yaml` (customer secrets) is never overwritten. Full deploy details
`catalog_since`. Two gates: `check-test-record.py` (static — every ladder well-formed and its newest step `catalog_since`. Two gates: `check-test-record.py` (static — every ladder well-formed and its newest step
IS the compose; runs in CI too) and `check-test-record-move.py` (history + the registry for MOVED refs IS the compose; runs in CI too) and `check-test-record-move.py` (history + the registry for MOVED refs
only — a move must add a proven entry whose digests the registry still serves; the hook). The 21 moves only — a move must add a proven entry whose digests the registry still serves; the hook). The 21 moves
of 2026-09-22 carry backfilled entries citing their records (`ladder_backfill.py`, one-off). of 2026-09-22 carry backfilled entries citing their records (`ladder_backfill.py`, one-off). **Every entry but the
newest carries its own compose at `templates/<app>/steps/<ladder.step_key(to)>.yml`** (2026-09-24, `09` §6.4 part
5): the box pins that file, one step per press. The writer keeps the superseded step's definition — fixes
included — and `check-test-record.py` rule 4 refuses a step with no file or a file naming other images.
- **Taking an app out of circulation — use `lifecycle:`, never a directory move.** `.felhom.yml` - **Taking an app out of circulation — use `lifecycle:`, never a directory move.** `.felhom.yml`
gains an optional `lifecycle:` field: `available` (default; absent/empty means this), `hidden` gains an optional `lifecycle:` field: `available` (default; absent/empty means this), `hidden`
(not offered for new installs, no explanation owed), `abandoned` (upstream stopped developing it — (not offered for new installs, no explanation owed), `abandoned` (upstream stopped developing it —
+6
View File
@@ -2,6 +2,12 @@
> Created with the REUSE.md rollout (2026-07-03). History: `CHANGELOG.md`; format spec: `README.md`. > Created with the REUSE.md rollout (2026-07-03). History: `CHANGELOG.md`; format spec: `README.md`.
- **2026-09-24 (morning) — STEP DEFINITIONS (`5ed599c`).** Every ladder entry but the newest has its own compose at
`templates/<app>/steps/<ladder.step_key(to)>.yml` (sha256 of `to`, canonical JSON, 16 hex = controller
`stacks.StepKey`); gate rule 4 + decoys; the writer keeps the superseded step; 8 backfilled
(`steps_backfill.py`, one-off, from the NEWEST commit naming the step's images). Controller v0.268.0 reads them:
one press = one step (proven live, romm two steps). R-653/R-656 fixed in the bench; the two suites that typed
live pins now read them (R-663). Open: R-652, R-655, R-664 (a step has no `.felhom.yml` of its own).
- **2026-09-24 (night 2026-09-23) — THE TEST RECORD.** An `image:` move needs a proven `update_ladder:` entry - **2026-09-24 (night 2026-09-23) — THE TEST RECORD.** An `image:` move needs a proven `update_ladder:` entry
(`scripts/ladder.py`; gates `check-test-record.py` + `check-test-record-move.py`; the only writer (`scripts/ladder.py`; gates `check-test-record.py` + `check-test-record-move.py`; the only writer
`upgrade-test.py --write-ladder`). 21 older moves backfilled; 12 steps published tonight. Harness v3: box fixtures `upgrade-test.py --write-ladder`). 21 older moves backfilled; 12 steps published tonight. Harness v3: box fixtures
+13 -20
View File
@@ -1,22 +1,15 @@
# REPORT — the test record, and 12 steps published with it (night shift 2026-09-23) # REPORT — step definitions for the ladder, two bench fixes (2026-09-24, `5ed599c`)
`09-update-architecture.md` §3 decisions 13, 21–23; §6.4 part 4 and the catalog half of part 6. Night record: Full record: `felhom.eu/documentation/audits/ladder-2026-09-24/README.md`.
`felhom.eu/documentation/audits/DRILL-night-2026-09-23.md`.
## Not done, or changed - Baseline `585a7cba22cf` → **`5ed599c`**. No `image:` line moved.
- adventurelog v0.13.0 NOT moved (R-655): our frontend healthcheck override names `/nodejs/bin/node`, gone in - `ladder.step_key` / `step_file`; `check-test-record.py` rule 4 (+ 4 decoy cases: no file, right name wrong image,
v0.13.0; with it dropped, the backend's start-time `download-countries` crash-looped on a cut-short download. wrong name, genuine); `upgrade-test.py --write-ladder` keeps the superseded step's compose; `steps_backfill.py`
- gitea inconclusive (installer, R-624). Step files `steps/<to>.yml` (part 5) not written. wrote 8 step files (emby, ghost, immich, n8n, navidrome, nextcloud, romm ×2 — romm's first from `f4eb94f`).
- `check-image-resolvable.py` does not keep digests; `image_digest.py` was written for that. - R-653 `load_verdict`, R-656 `clear_scratch_folders` + `test_upgrade_bench.py` (5 tests).
- R-663: `test_gate_decoys.py` and `test_ladder_writer.py` were red at the start (last night's pin moves under
## What shipped literals); they now read the live pins.
- Gates + format + writer + backfill: `6db08a5` (CI 920). R-612 wishlist 512M, R-613 uptime-kuma - Red-proofs: rule 4 removed → 3 decoys pass wrongly; writer's STEP block off → "has no definition"; bench mutations →
`UPTIME_KUMA_DB_TYPE=sqlite`: `a5a729a`. Harness fixes: `1263773`, nextcloud fixture wait. 3 failures. Green: `catalog_gates.py` OK, decoys 84 OK, writer 6 OK, bench 5 OK.
- Published with records: romm 5.3.1 (`7ff4e68`) and mariadb 11.8 (`431cdec`), ghost 6.65.0 (`e6afab9`), - Live: the box (controller v0.268.0) climbed romm's two steps from these files on 9202. **Not run:** a bench edge
wishlist v0.67.1 + opengist 1.15 (`657c83f`), navidrome 0.64.1 (`76cc1f5`), komga 1.27.1 + 768M (`fc1becc`), with the R-653/R-656 changes (no bench this session).
n8n 2.41.1 (`04b63db`), emby 4.11.0.3 (`8d573ad`), kimai mariadb 11.8 (`376b2c3`), immich-ML v3.2.2
(`b82b7c6`), nextcloud 34.0.4 (`5d49a11`, files_may_change).
## Gates
`catalog_gates.py --fast` OK on every push (the move gate judged each move on the registry); decoys 80 OK;
`test_ladder_writer.py` OK; `test_catalog_gates.py` OK (its table test had been stale since two gates ago).