Rebrand: Polish the leftovers, and announce the rename - #488
Merged
Conversation
Tab strip edge fades were masked unconditionally. On the pre-brand light strip that was invisible, since the fade landed on empty area past the last tab; on the dark default it reads as two grey smudges bracketing every window's submenu. They now paint only on an edge that is actually hiding a tab. Links inside <os-notice> painted WordPress Blue at rest and a darker blue on hover, close to illegible on the notice wash. Two causes: the colour resolved through --wp-admin-theme-color, which the accent picker writes inline, so the link took whatever hue the user chose for focus rings; and ::slotted( a ) cannot beat wp-admin's own bare anchor rule, because a slotted link belongs to the document tree and CSS Scoping hands normal declarations to the outer tree. The palette now declares the tokens and a document-tree rule consumes them. OS Settings is renamed to OpenStation Settings and wears the logomark. The mark is a currentColor silhouette rather than the brand's app chip: the dock masks every image icon so plugin colours cannot break the monochrome rail, and a chip's alpha is its tile, so a chip renders as a plain white rounded square. Adds a one-off dialog explaining the rename, shown once per user and only on installs that were already running under the old name. Fresh installs never see it. Dismissal goes to the seen-intros registry, so "Reset what's-new dialogs" brings it back and one admin dismissing it does not silence it for their editors. Fixes the plugin slug in bin/setup-wp-env.sh. The rebrand sweep renamed it to a plugin that does not exist, and because the script runs under set -euo pipefail the failed activate aborted it: the Gutenberg Guidelines experiment never got enabled and the plugin was left inactive on every fresh wp-env start. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Review follow-up. The gate was per-install, so an editor who joined an old site last week and enabled the shell this morning would be told about a rename they never saw. Migration 5 now flags individual users who carry proof of prior use: the `desktop_mode_mode` opt-in, or a saved OS-settings blob for someone who used it and has since switched back to classic. That also fixes a worse miss in the other direction. The install gate read `$from === 0` as "fresh install, nothing to explain", but the migration runner only shipped in 0.9.1, so a site still on 0.9.0 that updates straight to the rebrand release arrives with no stored version and looks brand new. Those installs update rarely, which makes them the most likely to be blindsided, and they were exactly the ones being silenced. The install gate is now just `$from < 4`; per-user evidence tells a dormant install apart from a new one, because a genuinely fresh site runs its first admin_init on the activation redirect, before anyone can have opened the shell. announce.css is no longer enqueued for users who will never see the dialog. The gate is computed once and feeds both the enqueue and the `rebrandNotice` config key, so the two cannot diverge; the dialog cannot paint without the stylesheet. The stylesheet's header now says out loud that it opts out of the palette, that this is a departure from "one declaration, one owner" rather than the house pattern, and that brand-palette.test.ts will not catch it drifting. Also caches the tab strip's text direction across scroll frames instead of calling getComputedStyle on every one, adds wiring tests for observeTabOverflow (listeners, coalescing, teardown, no-observer environments), and fixes a boot comment describing a bundle wait that no longer exists. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
AllTerrainDeveloper
approved these changes
Aug 4, 2026
AllTerrainDeveloper
left a comment
Collaborator
There was a problem hiding this comment.
Thank you! Super valuable!
Verifying the announcement against the upgrade paths turned up a user it was dropping: someone who tried the shell, changed nothing, and switched back to classic. They used Desktop Mode, so they are owed the explanation the next time they come in, and they were not getting it. Switching back writes an empty string to `desktop_mode_mode` rather than deleting the row, and the only two writers of that key are the toggle itself and the portal's auto-enable. So the row existing means "has been through the switch at least once", which is the question the migration is actually asking. Matching on the value being '1' asked a narrower one. Someone who never switched still has no row at all, so the newcomer case is unaffected. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Proposed changes
Four fixes and one addition left over from the rebrand.
Tab strip edge gradients. The submenu tab strip masked both edges unconditionally. They now paint only on an edge that is actually hiding a tab, re-measured on scroll, on resize, and when tabs are added or removed.
Notice link colour. Links inside
<os-notice>(for example theSettings > Connectorslink in OpenStation Settings > Features) painted WordPress Blue at rest and#135e96on hover, close to illegible on the notice wash. They now read Nebula, lifting to Starlight.OpenStation Settings. The
OS Settingstile and window are renamed, and the tile wears the logomark instead ofdashicons-desktop. Renamed across user-facing strings and docs; code comments and test fixtures still say "OS Settings" (around 380 occurrences), left for a separate mechanical sweep so this diff stays readable.Rename announcement. A one-off dialog explaining that Desktop Mode is now OpenStation, shown once to each user who was actually using the plugin before the rename. Fresh installs and users who joined afterwards never see it. It only exists inside the shell, so it cannot appear in the classic admin or in a window iframe. New filter
openstation_install_predates_rebrandsuppresses it site-wide.bin/setup-wp-env.sh. Activates the right plugin slug again.Why are these changes being made?
The first three are the rebrand landing unevenly: cosmetics that were invisible on the old light chrome became visible on the dark one, and a colour that was tied to the user's accent picker stopped being legible once the surfaces went dark.
Two of them had a cause worth writing down, because in both cases the obvious fix does nothing:
wp-admin/css/common.cssa { color: #2271b1 }beats::slotted( a )regardless of specificity. Setting the component's token alone had no effect; the declaration had to move to a tree that can win._makeSvgIcon()masks every image icon withcurrentColorso plugin brand colours cannot break the monochrome rail). The brand's app chip is a mark knocked out of a tile, so masking one yields the tile: a solid white rounded square. The icon is acurrentColorsilhouette instead, which both painters handle correctly and which stays legible on a light title bar without carrying its own ground.The announcement exists because someone who installed under the old name opens wp-admin to a differently named, differently coloured shell. Without a word of explanation that reads as a compromised site rather than a release.
The
setup-wp-env.shfix is a slug the rename sweep caught by accident, even though the rebrand commit listed it as not-to-be-renamed. The script runs underset -euo pipefail, so the failed activate aborted it: the Gutenberg Guidelines experiment never got enabled and the plugin was left inactive on every freshwp-env start.Testing instructions
Tab strip gradients
Notice link colour
OpenStation Settings tile
Rename announcement
The announcement only fires for a user who was using the plugin before the rename, so a fresh dev site will not show it. To simulate one:
To reset between runs,
wp user meta delete admin desktop_mode_seen_introsalone is enough.wp user meta deleteline again, reload, and dismiss with Got it instead. Reload and make sure it stays gone.?desktop_mode_classic=1) and make sure the dialog never appears there, and thatannounce.cssis not among the loaded stylesheets.announce.cssis not enqueued at all.bin/setup-wp-env.shnpm run env:starton a fresh instance, or reset an existing one:wp plugin listand make sure bothdesktop-modeandgutenbergare active.wp option get gutenberg-experimentsand make sure it containsgutenberg-guidelines => true.Regression sweep
npm run test:js,npm run lint,npm run typechecknpm run lint:php,npm run test:php🤖 Generated with Claude Code