v0.255.0 — the globe on the sign-in-flow pages: styled, and inside the card
gates / gates (push) Successful in 23s

Two defects in v0.254.0's globe, both plain on a browser and neither catchable by anything
that existed — every test read the MARKUP, and the fault was in which CSS file the browser
fetched.

The shells requested /static/style.css with NO ?v=, while layout.html has carried one since
v0.166.0. A browser holding a copy from before v0.254.0 kept serving CSS with no .lang-globe
rules, so the globe came out as a bare unstyled <details> — a stray triangle and two plain
words at the edge of the window. It was FIVE shells, not the three named: both guest share
pages have the same fault for any CSS change, and their visitor is the likeliest of all to be
holding an old copy. And .Version was missing from three of those five data maps, which is
exactly how the next one would be forgotten — it is now filled at the one choke point every
shell renders through.

The globe also floated outside the card, pinned to the corner of the VIEWPORT, reading as part
of the browser rather than the page. It now sits inside the card, centred under the footer, with
the menu opening upward via the shared rule — so the dashboard and the shells cannot drift.

AND A THIRD, caught by a test that already existed: putting the version on the guest share pages
would have printed the controller build onto a page a stranger with a capability URL can open.
TestShareGuest_HeadersTilesNoAdminChrome refused it. Those two now take an opaque per-build tag
— same cache-busting, no disclosure. The fill is ONE function shared with the parity harness,
because a fixture rendered through a different data path is a picture of a page nobody serves,
which the previous release got wrong twice.

15 shell fixtures re-captured; 91 identical, every dashboard page among them.

MinAgent: 0.131.0 (unchanged). No hub release needed.

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 15:07:49 +02:00
parent 2e9d40255b
commit 8fb2f9ef9d
28 changed files with 277 additions and 367 deletions
+2 -2
View File
@@ -5,10 +5,9 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{if .IsReset}}{{T "claim.jelszo_visszaallitasa"}}{{else}}{{T "claim.a_szerver_beallitasa"}}{{end}} — Felhom</title>
<link rel="stylesheet" href="/static/style.css">
<link rel="stylesheet" href="/static/style.css?v={{.Version}}">
</head>
<body class="login-body">
<div class="shell-lang">{{template "lang_globe" .}}</div>
<div class="login-card">
<img src="/static/felhom-logo.svg" alt="Felhom.eu" class="login-logo">
<h1 class="login-title">{{if .IsReset}}{{T "claim.jelszo"}} <span class="title-accent">{{T "claim.visszaallitasa"}}</span>{{else}}{{T "claim.a_szerver"}} <span class="title-accent">{{T "claim.beallitasa"}}</span>{{end}}</h1>
@@ -59,6 +58,7 @@
</form>
<p class="login-footer">{{T "claim.felhom_otthoni_szerver_kezeles_felhom"}}</p>
<div class="shell-lang">{{template "lang_globe" .}}</div>
</div>
</body>
</html>
@@ -7,7 +7,7 @@
<meta name="robots" content="noindex, nofollow">
<title>{{T "launcher_share_password.inditopult"}}</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<link rel="stylesheet" href="/static/style.css">
<link rel="stylesheet" href="/static/style.css?v={{.AssetTag}}">
</head>
<body class="guest-body guest-gate-body">
<main class="guest-gate">
@@ -7,7 +7,7 @@
<meta name="robots" content="noindex, nofollow">
<title>{{T "launcher_shared.inditopult"}}</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<link rel="stylesheet" href="/static/style.css">
<link rel="stylesheet" href="/static/style.css?v={{.AssetTag}}">
</head>
<body class="guest-body">
<main class="guest-content">
+2 -2
View File
@@ -5,10 +5,9 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{T "login.bejelentkezes_felhom"}}</title>
<link rel="stylesheet" href="/static/style.css">
<link rel="stylesheet" href="/static/style.css?v={{.Version}}">
</head>
<body class="login-body">
<div class="shell-lang">{{template "lang_globe" .}}</div>
<div class="login-card">
<img src="/static/felhom-logo.svg?v={{.Version}}" alt="Felhom.eu" class="login-logo">
<h1 class="login-title">{{T "login.otthoni"}} <span class="title-accent">{{T "login.vezerlopult"}}</span></h1>
@@ -26,6 +25,7 @@
</form>
<p style="text-align:center;margin:0.75rem 0 0;font-size:0.85rem"><a href="/claim">{{T "login.elfelejtett_jelszo"}}</a></p>
<p class="login-footer">{{T "login.felhom_otthoni_szerver_kezeles_felhom"}}</p>
<div class="shell-lang">{{template "lang_globe" .}}</div>
</div>
<script>
(function() {
@@ -6,10 +6,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex, nofollow">
<title>{{T "recovery.adatok_visszaszerzese_felhom"}}</title>
<link rel="stylesheet" href="/static/style.css">
<link rel="stylesheet" href="/static/style.css?v={{.Version}}">
</head>
<body class="login-body">
<div class="shell-lang">{{template "lang_globe" .}}</div>
<div class="login-card" style="max-width:46rem">
<img src="/static/felhom-logo.svg" alt="Felhom.eu" class="login-logo">
@@ -189,6 +188,7 @@
</p>
{{end}}
{{end}}
<div class="shell-lang">{{template "lang_globe" .}}</div>
</div>
</body>
</html>
+6 -6
View File
@@ -3676,9 +3676,9 @@ html::-webkit-scrollbar-track { background: var(--bg-0); }
border-left: 2px solid var(--crit);
}
/* i18n (v0.254.0): the globe on the pages a VISITOR meets — sign-in, claim, recovery. Those pages have
their own shell and no sidebar, so the globe is pinned to the top-right corner of the viewport, the
same place on all three. It posts to /lang, which sets a display-only cookie in that visitor's own
browser and never the household's setting. */
.shell-lang { position: absolute; top: 1rem; right: 1rem; z-index: 30; }
.shell-lang .lang-globe-menu { bottom: auto; top: calc(100% + .35rem); left: auto; right: 0; transform: none; }
/* i18n (v0.254.0, placed properly in v0.255.0): the globe on the pages outside the dashboard chrome —
sign-in, claim, recovery. Those pages have their own shell and no sidebar.
v0.255.0: it lives INSIDE the card, centred under the footer, and the menu opens UPWARD — which is
the shared .lang-globe-menu rule, so this block adds no positioning of its own. It floated in the
top-left of the viewport before, outside the card, which read as a stray browser control. */
.shell-lang { display: flex; justify-content: center; margin-top: 1.5rem; }