Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
4.7 KiB
REPORT — the website's language switch becomes a globe (2026-10-08)
REPORT-website-globe.md, notREPORT.md: another session worked in this repo today (commitc7aade40).
| 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'si-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 carriesaria-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=3on all 16 pages. There was no.lang-switchrule 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-globein 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.htmland 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 hasaria-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);663421ddon 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.