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
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:
@@ -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
@@ -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)
|
||||
|
||||
@@ -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"'),
|
||||
|
||||
Reference in New Issue
Block a user