Files
felhom.eu/REPORT-website-globe.md
T

4.7 KiB

REPORT — the website's language switch becomes a globe (2026-10-08)

REPORT-website-globe.md, not REPORT.md: another session worked in this repo today (commit c7aade40).

Part What State
A The globe on every page, CSS, no JavaScript Done, live (803af479)
B Gates 3 and 13 read the globe from one LANGS list; leftover text switch fails; 5 decoys Done
C CHANGELOGs, .claude/rules/website.md, 10-localisation.md ruling 11 + §10.7, STATUS Done

Register: before 130, after 131, opened 1 (R-903), closed 0.

What was built

  • Every page's nav: <details class="lang-globe"> with the sprite's i-globe (aria-hidden), aria-label/title „Nyelv" / „Language", a list Magyar, English (same order everywhere). The page's own language points at the page itself, is bold with a blue rule and carries aria-current="true"; the other item points at the twin.
  • site.css: globe rules for desktop (list below the icon, right-aligned) and for the ≤900 px menu (last item, list opens in place). Tokens only. ?v=2 → ?v=3 on all 16 pages. There was no .lang-switch rule to retire — the text switch had no CSS.
  • No script added. The controller's globe has no close-on-outside-click or Escape script either (searched lang-globe in its templates and CSS: markup + CSS only).
  • The current item is marked by weight and a rule, not by the controller's „✓" (content: "\2713"): U+2713 is in the site's emoji gate range.
  • 404.html and the hidden prices page carry the globe too (their English item points at /en/): gate 3 requires one nav across the Hungarian set, and gate 13 checks their globe's structure (not targets — they have no twin).

Decoys (mutation on website/en/apps.html → failure line; documentation/audits/website-globe-2026-10-08/decoys.txt)

Decoy Failure line
Magyar item → / en/apps.html: the globe's hu item points at '/' — its twin is '/alkalmazasok'
Magyar item also current + aria-current en/apps.html: the globe marks 'hu' as current (class current=True, aria-current=True) — only the page's own language 'en' is
Magyar item removed en/apps.html: the globe lists [('en', 'English')] — every page lists exactly [('hu', 'Magyar'), ('en', 'English')], in that order
items swapped en/apps.html: the globe lists [('en', 'English'), ('hu', 'Magyar')] — every page lists exactly …
a text switch added back en/apps.html: a leftover text language switch (class="lang-switch") — the globe replaced it (also gate 3: <nav> differs from en/index.html)

The decoy suite (scripts/test_gate_decoys.py) runs all five with must= on these lines: all rejected. The old site/switch-wrong-twin decoy was retired with the switch.

Live check (headless Chrome on scratch guest 9202, after git-sync; check.txt + six screenshots)

  • / and /en/, 1280 px, JavaScript on and off: the globe is closed at load, opens on a click; Magyar → / (lang hu), English → /en/ (lang en); the current one has aria-current="true"; no sideways scroll.
  • 376 px, JavaScript on, inside the opened three-line menu: the list opens in place, both items visible, both go to the right page, no sideways scroll.
  • 376 px, JavaScript off: not possible — the three-line menu itself is scripted, so it does not open. This is older than the globe. Filed as R-903 (P4).

Files and pushes

  • 803af479: website/*.html (9), website/en/*.html (7), website/assets/site.css, website/CHANGELOG.md, scripts/site_gates.py, scripts/test_gate_decoys.py, scripts/CHANGELOG.md, .claude/rules/website.md, documentation/architecture/10-localisation.md, STATUS.md, documentation/audits/website-globe-2026-10-08/ (decoys.txt, globe.py). CI: job 1538, success.
  • This report, the live evidence and R-903: the next commit (named in the chat).
  • Earlier, 67b3fd23 (website refresh): CI job 1535 failed with no log and every step failing in the same second (R-887's shape); 663421dd on top passed (job 1536).

Fixed without a row

The decoy suite's fake register ids were R-903…R-907 — the real register reached R-903 today, so the closed-register/body-word decoy saw R-903 in BOTH registers and the pre-push hook refused 42a4a463. The fakes are now R-99903…R-99907 (scripts/test_gate_decoys.py, 12 lines); suite 73/73 behaved, all gates OK. (My command chain ran the commit after the red gate; the hook held the push. Each later step ran gates first, read rc, then committed.)

Instruction-file edits

.claude/rules/website.md: one bullet added — the switch is a globe; a new language = one LANGS entry + its twins. No rule was loosened.