Skip to content

Rebrand: Polish the leftovers, and announce the rename - #488

Merged
mmtr merged 3 commits into
trunkfrom
rebrand-polish
Aug 5, 2026
Merged

Rebrand: Polish the leftovers, and announce the rename#488
mmtr merged 3 commits into
trunkfrom
rebrand-polish

Conversation

@mmtr

@mmtr mmtr commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

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.

Before After
Screenshot 2026-08-04 at 18 24 29 Screenshot 2026-08-04 at 18 24 47

Notice link colour. Links inside <os-notice> (for example the Settings > Connectors link in OpenStation Settings > Features) painted WordPress Blue at rest and #135e96 on hover, close to illegible on the notice wash. They now read Nebula, lifting to Starlight.

Before After
Screenshot 2026-08-04 at 17 14 44 Screenshot 2026-08-04 at 18 25 23

OpenStation Settings. The OS Settings tile and window are renamed, and the tile wears the logomark instead of dashicons-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.

Before After
Screenshot 2026-08-04 at 18 24 17 Screenshot 2026-08-04 at 18 23 53

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_rebrand suppresses it site-wide.

Screenshot 2026-08-04 at 18 23 28

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:

  • A slotted link belongs to the document tree, not the shadow tree that renders it. CSS Scoping hands normal declarations to the outer tree on a collision, so wp-admin/css/common.css a { 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.
  • The dock paints an icon's alpha, not its colours (_makeSvgIcon() masks every image icon with currentColor so 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 a currentColor silhouette 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.sh fix is a slug the rename sweep caught by accident, even though the rebrand commit listed it as not-to-be-renamed. The script runs under set -euo pipefail, so the failed activate aborted it: the Gutenberg Guidelines experiment never got enabled and the plugin was left inactive on every fresh wp-env start.

Testing instructions

Tab strip gradients

  1. Open a window with a submenu that fits, e.g. Settings.
  2. Make sure there is no grey fade at either end of the tab strip.
  3. Narrow the window until the tabs overflow.
  4. Make sure a fade appears on the right only.
  5. Scroll the strip to the middle. Make sure both ends fade.
  6. Scroll it fully right. Make sure only the left end fades.
  7. Widen the window until the tabs fit again. Make sure both fades disappear.

Notice link colour

  1. Go to OpenStation Settings > Features on a site with no AI provider configured.
  2. Find the "This feature requires an AI provider configured in Settings > Connectors" notice.
  3. Make sure the link is pink (Nebula), not blue, and that hovering it turns it near-white rather than a darker blue.
  4. Go to OpenStation Settings > Appearance, switch the accent to WordPress Blue, and return to Features. Make sure the link colour did not change, since it no longer follows the accent.

OpenStation Settings tile

  1. Make sure the dock tile and its window title both read "OpenStation Settings".
  2. Make sure the tile shows the OpenStation logomark (a circle with a blob cut), the same weight as the dashicons beside it, and not a filled square.
  3. Open the window and make sure the title bar shows the same mark.

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:

wp user meta update admin desktop_mode_mode 1
wp eval 'openstation_migrate_flag_rebrand_notice( 0 );'
wp user meta delete admin desktop_mode_seen_intros

To reset between runs, wp user meta delete admin desktop_mode_seen_intros alone is enough.

  1. Reload the shell. Make sure the dialog appears about a second after the desk settles, not mid-paint.
  2. Make sure it is styled like the first-run welcome card: blurred backdrop, white card, dark shimmering hero with the logomark.
  3. Press Esc. Make sure it closes and focus returns to where it was.
  4. Reload. Make sure it does not come back.
  5. Run the wp user meta delete line again, reload, and dismiss with Got it instead. Reload and make sure it stays gone.
  6. Repeat once more and dismiss by clicking the backdrop, then the × chip. Both should stick.
  7. Click inside the card (for example select some text). Make sure it does not close.
  8. Go to OpenStation Settings > Features and hit "Reset what's-new dialogs". Reload and make sure the announcement is back.
  9. On a second user account that was also flagged, make sure the announcement still appears after the first user dismissed it.
  10. Create a fresh user, enable OpenStation for them, and make sure they never see it. They joined after the rename, so there is nothing to explain.
  11. Switch to the classic admin (?desktop_mode_classic=1) and make sure the dialog never appears there, and that announce.css is not among the loaded stylesheets.
  12. On a user who is not flagged, view source and make sure announce.css is not enqueued at all.

bin/setup-wp-env.sh

  1. Run npm run env:start on a fresh instance, or reset an existing one:
wp plugin deactivate desktop-mode gutenberg
wp option delete gutenberg-experiments
./bin/setup-wp-env.sh
  1. Make sure the script exits 0 with no "plugin could not be found" error.
  2. Run wp plugin list and make sure both desktop-mode and gutenberg are active.
  3. Run wp option get gutenberg-experiments and make sure it contains gutenberg-guidelines => true.

Regression sweep

  • npm run test:js, npm run lint, npm run typecheck
  • npm run lint:php, npm run test:php

🤖 Generated with Claude Code

Open WordPress Playground Preview

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>
@mmtr mmtr self-assigned this Aug 4, 2026
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 AllTerrainDeveloper left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
@mmtr
mmtr merged commit 9a17ee0 into trunk Aug 5, 2026
5 checks passed
@mmtr
mmtr deleted the rebrand-polish branch August 5, 2026 10:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants