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
+40
View File
@@ -1,3 +1,43 @@
## v0.255.0 — The globe on the sign-in-flow pages: styled, and inside the card (2026-09-18, fixes v0.254.0)
**MinAgent: 0.131.0** (unchanged). **No hub release needed.** Nothing on the wire moved. One Hungarian
block changes, on the pages outside the dashboard chrome only — **zero dashboard fixtures were
re-captured**.
Two defects in v0.254.0's globe, both visible on a real browser and neither catchable by any test that
existed:
**1. The stylesheet was requested with no cache-buster, so the globe rendered UNSTYLED.** `layout.html`
has always used `/static/style.css?v={{.Version}}`; the shells did not. A browser that had the file
cached from before v0.254.0 kept serving a copy with no `.lang-globe` rules in it, and the globe came
out as a bare `<details>` — a stray triangle and two plain words, floating at the edge of the window.
**It was not three shells but FIVE**: `login`, `claim`, `recovery`, **and both guest share pages**. The
two share pages have no globe, but they have the same stale-stylesheet problem for any CSS change, and
their visitor is the likeliest of all to be holding an old copy. All five fixed.
**And `.Version` was not in the data of three of them** — which is exactly how the next shell would
have been missed. It is now set in `executeTemplateLang`, the single choke point every shell renders
through, so a new shell cannot forget it.
**2. The globe floated outside the card.** `.shell-lang` was pinned to the corner of the VIEWPORT, so
it read as part of the browser rather than part of the page. It now sits **inside the card, centred
under the footer**, with the menu opening upward — which is the shared `.lang-globe-menu` rule, so the
block adds no positioning of its own and the dashboard and the shells cannot drift apart.
**A third defect, found by an existing test while fixing the first two.** Putting `?v={{.Version}}`
on the guest share pages would have printed the controller version onto a page **a stranger holding a
capability URL can open** — `TestShareGuest_HeadersTilesNoAdminChrome` refuses exactly that, and
refused it. Those two pages now take an **opaque per-build tag** (`AssetTag`, four bytes of a hash of
the version): it busts a cache just as well and tells a visitor nothing about which build is running.
The fill lives in one function, `addShellAssetData`, called by `executeTemplateLang` **and** by the
parity harness — because a fixture rendered through a different data path is a picture of a page
nobody serves, which this release's predecessor got wrong twice.
`TestGlobeOnAnonymousShells` gained both halves — the stylesheet carries a non-empty `?v=`, and the
globe is inside the card and below the footer. Each was red-proofed by restoring the defect's exact
shape. The test server gained a version, because an empty `?v=` busts a cache exactly once and never
again, and baking that into a fixture would have hidden it.
## v0.254.0 — The saved notes follow the language, and the switch becomes a globe (2026-09-18, R-557 slice 2 release C — SLICE 2 CLOSED)
**MinAgent: 0.131.0** (unchanged). **No hub release needed.** Nothing on the wire moved.