Describe the bug
On every template: upgrade page, the "page last updated" date is rendered twice in the header region, about 150px apart, with a stray partial-width horizontal rule between them.
Reading top to bottom on https://ethereum.org/roadmap/glamsterdam/ (desktop, 1440px):
Glamsterdam (h1)
Learn about the Glamsterdam protocol upgrade
- a partial-width rule (768px, stops mid-page) followed by "Page last updated: July 20, 2026"
- the hero's full-width bottom border
- "Page last update: July 20, 2026" — the same date again, next to the contributor avatars
The two lines even use different translation keys for the same string: common:page-last-updated in the hero vs page-last-update in FileContributors.
Expected behavior
The date appears once, in the standard FileContributors line at the top of the article, same as every other content page on the site.
Root cause
Two independent components render the same lastEditLocaleTimestamp:
src/layouts/Topic.tsx appends <p className="border-t pt-4 italic">…</p> to the hero description, gated on showLastUpdatedInHero, which is set only in src/data/topics/upgrade.ts.
src/layouts/ContentLayout.tsx renders <FileContributors variant="compact">, which prints the date at src/components/FileContributors.tsx:171.
These didn't collide before. In 49d6425 (migrate/refactor(ui): ContentLayout, TableOfContents) the compact FileContributors became unconditional at the top of the article. Previously it was gated on asidePosition === "right-top", and the default was left-bottom, which placed contributors at the bottom of the page. The Upgrade layout never passed asidePosition, so it got the bottom placement and the hero timestamp was the only date in the header.
The hero rule itself predates the consolidation — it was carried verbatim from src/layouts/md/Upgrade.tsx into the showLastUpdatedInHero flag in cba15c3. In the old design the hero held a bulleted summaryPoints list, so the rule read as a footer under a block of bullets. Pages with a one-line description (like Glamsterdam) leave it floating under a single sentence.
Affected pages
All template: upgrade pages, in every locale:
/roadmap/beacon-chain/
/roadmap/dencun/
/roadmap/fusaka/
/roadmap/glamsterdam/
/roadmap/merge/
/roadmap/pectra/
Verified live on glamsterdam, fusaka, pectra and dencun — the same border-t pt-4 italic paragraph is present in each hero.
Steps to reproduce
- Open https://ethereum.org/roadmap/glamsterdam/ on desktop
- Look at the area between the h1 and the start of the article body
Desktop
- Reproduced at 1440x1000 in Chromium
- Present on production
Describe the bug
On every
template: upgradepage, the "page last updated" date is rendered twice in the header region, about 150px apart, with a stray partial-width horizontal rule between them.Reading top to bottom on https://ethereum.org/roadmap/glamsterdam/ (desktop, 1440px):
Glamsterdam(h1)Learn about the Glamsterdam protocol upgradeThe two lines even use different translation keys for the same string:
common:page-last-updatedin the hero vspage-last-updateinFileContributors.Expected behavior
The date appears once, in the standard
FileContributorsline at the top of the article, same as every other content page on the site.Root cause
Two independent components render the same
lastEditLocaleTimestamp:src/layouts/Topic.tsxappends<p className="border-t pt-4 italic">…</p>to the hero description, gated onshowLastUpdatedInHero, which is set only insrc/data/topics/upgrade.ts.src/layouts/ContentLayout.tsxrenders<FileContributors variant="compact">, which prints the date atsrc/components/FileContributors.tsx:171.These didn't collide before. In 49d6425 (migrate/refactor(ui): ContentLayout, TableOfContents) the compact
FileContributorsbecame unconditional at the top of the article. Previously it was gated onasidePosition === "right-top", and the default wasleft-bottom, which placed contributors at the bottom of the page. The Upgrade layout never passedasidePosition, so it got the bottom placement and the hero timestamp was the only date in the header.The hero rule itself predates the consolidation — it was carried verbatim from
src/layouts/md/Upgrade.tsxinto theshowLastUpdatedInHeroflag in cba15c3. In the old design the hero held a bulletedsummaryPointslist, so the rule read as a footer under a block of bullets. Pages with a one-linedescription(like Glamsterdam) leave it floating under a single sentence.Affected pages
All
template: upgradepages, in every locale:/roadmap/beacon-chain//roadmap/dencun//roadmap/fusaka//roadmap/glamsterdam//roadmap/merge//roadmap/pectra/Verified live on
glamsterdam,fusaka,pectraanddencun— the sameborder-t pt-4 italicparagraph is present in each hero.Steps to reproduce
Desktop