slice 4: bilingual console + the English download page is live (R-559)

The image is BUILT but NOT PUBLISHED, and that is deliberate: publishing to
iso.felhom.eu is public and irreversible, and the runbook needs a proof install
on BOTH menu entries plus a reboot against the uploaded bytes. That is
supervised, so I stopped there. felhom-installer-1.29.0-pve9.2-1.iso, sha256
c67ceaa3…fb02, with every mechanically checkable criterion passing (G1, G2, G5,
G6, G7, G9, G16 — including both payload files byte-identical to repo HEAD).

The download pages still name 1.28.0, the image that IS published. Pointing
them at a file that is not there would hand every reader a 404. A new site gate
refuses the two pages naming different installer files or checksums, so
whoever publishes 1.29.0 cannot update one and forget the other.

Measured rather than read: the pairing banner is 24 rows on a 25-row console.
One row of margin — so the height is now pinned, because two more lines push
the HUNGARIAN code at row 5 off the top, and a banner whose code has scrolled
away is furniture.

R-587: two root-password files from July sit in the directory the public ISO is
published from. Both 404 on the bucket (against a 200 control), so nothing
leaked — but the only thing keeping them off is an --include pattern they miss
by an accident of naming. A pattern that protects by coincidence is not a
control.

R-588: release records live in two different places, which made me wrongly
conclude 1.28.0's gate had never been run. It had.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-18 17:47:58 +02:00
parent eb1ae37095
commit 5a654ebc9a
10 changed files with 267 additions and 82 deletions
+14
View File
@@ -279,6 +279,20 @@ done
# The pairing code appears once per language — a person reads one block, and must find it there.
check "R-559: the pairing code appears in BOTH blocks" \
"[ \"\$(grep -c 'TST-CDE' /work/b.pairing)\" -eq 2 ]"
# HEIGHT, not just width — the measurement slice 4's plan called for, and the one a width check
# cannot make. A console is 80x25. The pairing banner is now 21 framed lines plus the blank before it
# and the two after: 24 rows, and the console shows the LAST 25. One more line and the paint is 25;
# two more and the top row scrolls away — and the top of this banner is where the HUNGARIAN pairing
# code sits (row 5). The banner exists to be read; a banner whose code has scrolled off is furniture.
#
# 25 is the limit, not 24, because 25 still fits exactly. The margin is one line and this check is
# what makes that fact survive the next person adding a sentence.
banner_rows() { echo $(( $(wc -l < "$1") + 3 )); } # +1 leading blank, +2 trailing
check "R-559: the pairing banner fits a 25-row console (it is $(banner_rows /work/b.pairing))" \
"[ \"\$(banner_rows /work/b.pairing)\" -le 25 ]"
check "R-559: the bound banner fits a 25-row console (it is $(banner_rows /work/b.bound))" \
"[ \"\$(banner_rows /work/b.bound)\" -le 25 ]"
check "R-559: the bound banner carries no pairing code" "! grep -q 'TST-CDE' /work/b.bound"
# /etc/issue: the Hungarian half frozen, the English half added, still no ő/ű and still no admin URL.