register shrink 2026-10-10: 13 rows closed with live evidence (138 -> 125); R-903 phone menu without JS; R-910 pictures; R-912 site gate 21
gates / gates (push) Successful in 6m4s

Closed: R-906 R-907 R-909 R-910 R-911 R-815 R-756 R-570 R-896 R-912 R-903 R-338 R-916.
Updated: R-899 (press set up, dated check 2026-10-11), R-243 (the mail is due 2026-10-11 ~16:06Z, dated check),
R-782 (homepage live; glance question to the operator), R-904 (the TLS sentence is in 01 s7).
Website: site.css v=9 (scripting:none menu), eight dashboard pictures retaken. Evidence: audits/register-shrink-2026-10-10/.

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-10-10 15:27:59 +02:00
parent dee4e0aa0c
commit ec5605d42c
56 changed files with 2400 additions and 47 deletions
+8
View File
@@ -1,3 +1,11 @@
## 2026-10-10 (afternoon) — site gate 21: every catalog app has its logo under its slug (R-912)
- `site_gates.py` gate 21 reads `app-catalog-felhom.eu/templates/*/.felhom.yml` (the `slug:`, else the directory) and
requires `website/assets/<slug>-logo.svg` or `.png` — the name the dashboard asks for. 60 of 60 today. No catalog
clone → „NOT CHECKED" said out loud; a clone with no templates → a failure (the gate checked nothing).
- Decoy `site/app-logo-under-another-name` in `test_gate_decoys.py`: Crafty Controller's logo renamed to
`crafty-logo.png` (the measured 2026-10-08 shape) — convicts with gate 21's own line.
## 2026-10-09 (late afternoon) — dooplex-offsite carries the operator signing keys (R-924, operator ruling option A)
- `felhom-dooplex-offsite`: `felhom-op-operational`, `felhom-rec-recovery`, `felhom_op_ed25519` and their `.pub` (from
+24 -1
View File
@@ -31,8 +31,12 @@ Gates (all must pass; non-zero exit on any failure):
19. dash-lang — a page shows dashboard pictures only in its own language (`dashboard-*-hu.webp` / `-en.webp`)
20. viewer — data-gallery openers are <a href> to existing assets; gallery.js (with ?v=) exactly where openers are;
no inline viewer copy
21. app logos — every catalog app (`app-catalog-felhom.eu/templates/*/.felhom.yml`, by its `slug:`) has
website/assets/<slug>-logo.svg or .png — the dashboard asks for exactly that name and shows a grey
placeholder otherwise (R-912: five apps had theirs under other names). The sibling catalog clone
absent → said out loud, not checked
"""
import html as _html, io, json, os, re, sys, unicodedata
import glob, html as _html, io, json, os, re, sys, unicodedata
# A gate's own console must not decide its verdict. These scripts quote back Hungarian copy, file
# paths and arrow characters; a Windows console here is cp1250, and printing one of them raised
@@ -497,6 +501,25 @@ for p, s in pages.items():
fail("%s: an inline copy of the picture viewer — it lives only in assets/gallery.js" % p)
print(" picture viewer: %d openers, every one a link to an existing file" % _open_n)
# gate 21: every catalog app has its logo under its slug (R-912)
_CAT = os.path.join(os.path.dirname(ROOT), "app-catalog-felhom.eu", "templates")
if not os.path.isdir(_CAT):
print(" app logos: NOT CHECKED — no catalog clone at %s" % _CAT)
else:
_slugs = []
for _f in sorted(glob.glob(os.path.join(_CAT, "*", ".felhom.yml"))):
_m = re.search(r'^slug:\s*["\']?([A-Za-z0-9._-]+)', io.open(_f, encoding="utf-8-sig").read(), re.M)
_slugs.append(_m.group(1) if _m else os.path.basename(os.path.dirname(_f)))
if not _slugs:
fail("app logos: the catalog clone at %s holds no templates/*/.felhom.yml — the gate checked nothing" % _CAT)
_missing = [x for x in _slugs if not any(os.path.isfile(os.path.join(W, "assets", "%s-logo.%s" % (x, e)))
for e in ("svg", "png"))]
if _missing:
fail("app logos: no website/assets/<slug>-logo.svg or .png for %s — the dashboard shows a grey placeholder"
% ", ".join(_missing))
else:
print(" app logos: %d catalog apps, each with its <slug>-logo file" % len(_slugs))
if fails:
print("\nSITE GATES FAILED: %d problem(s)" % len(fails))
sys.exit(1)
+13 -1
View File
@@ -91,7 +91,7 @@ COVERS = {
"switch at the wrong twin, lang=\"hu\" on an English page, an app missing from one apps page, "
"ASCII-only Hungarian in English text and in a script message, a 'please', an English "
"retrieval promise the Hungarian does not make, a FAQ JSON-LD drifting from the visible "
"answer, text after </html>, a Hungarian dashboard picture on an English page, and four picture-viewer faults (an opener without href, an opener to a missing file, openers with no gallery.js, the inline viewer put back) — each must convict WITH its own failure line"),
"answer, text after </html>, a Hungarian dashboard picture on an English page, and four picture-viewer faults (an opener without href, an opener to a missing file, openers with no gallery.js, the inline viewer put back), and (R-912) a catalog app's logo under another name than its slug — each must convict WITH its own failure line"),
"script-tests": ("R-885: FIVE cases in scripts/test_script_tests_gate.py, run from here: a suite that PRINTS "
"OK and exits 1 (label without fact), a failing suite three levels deep (scope is a walk), "
"an empty scripts/ tree (checked nothing), the genuine article (must pass), the nested mark"),
@@ -549,6 +549,18 @@ decoy("site/globe-wrong-order", "site_gates.py",
decoy("site/leftover-text-switch", "site_gates.py",
replace_in(_EN("apps.html"), '<li class="lang-globe-li">', '<li><a href="/alkalmazasok" lang="hu" hreflang="hu" class="lang-switch">Magyar</a></li><li class="lang-globe-li">'),
must='en/apps.html: a leftover text language switch')
# R-912 (2026-10-10, gate 19): the measured 2026-10-08 shape — Crafty Controller's logo under ANOTHER name
# (`crafty-logo.png`), so the dashboard asked for `crafty-controller-logo.*` and showed the grey placeholder.
def _rename(src, dst):
def _plant():
os.rename(src, dst)
return lambda: os.rename(dst, src)
return _plant
decoy("site/app-logo-under-another-name", "site_gates.py",
_rename(os.path.join(_WEB, "assets", "crafty-controller-logo.png"), os.path.join(_WEB, "assets", "crafty-logo.png")),
must="app logos: no website/assets/<slug>-logo.svg or .png for crafty-controller")
# the dashboard pictures (2026-10-08): a Hungarian picture copied onto the English home page
decoy("site/dashboard-picture-wrong-language", "site_gates.py",
replace_in(_EN("index.html"), 'src="/assets/dashboard-start-en.webp"', 'src="/assets/dashboard-start-hu.webp"'),