Skip to content

My Jetpack: port the dashboard to wp-build behind a default-off flag (pilot) - #52204

Merged
dhasilva merged 33 commits into
trunkfrom
jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot
Sep 14, 2026
Merged

dhasilva merged 33 commits into
trunkfrom
jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot

Conversation

@dhasilva

@dhasilva dhasilva commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Fixes JETPACK-2567

Proposed changes

Ports the My Jetpack dashboard onto the wp-build pipeline, behind a feature flag that defaults to off. This is the pilot for JETPACK-2566; the traps it hit are written up for the porting checklist in JETPACK-2575.

The rule for this port is move the frame, keep the UI. The UI is unchanged apart from the frame itself.

  • One wp-build route at path: "/" whose stage.tsx renders the existing React tree with its HashRouter intact. Boot's router reads its path from a ?p= query parameter and never the hash, so every #/… deep link keeps working — ~56 references inside this monorepo, plus links from WordPress.com, support docs and upgrade emails. No URL changes.
  • Both menu registrations still resolve. Admin_Menu::add_menu in class-initializer.php and class-jetpack-manage.php are untouched; admin_page() became a dispatcher instead.
  • The screen ID is aliased only while wp-build's generated enqueue check runs, hooked on either side of that check, so other admin_enqueue_scripts callbacks and JITMs keep the real jetpack_page_my-jetpack ID.
  • ?step=onboarding deliberately stays on the legacy path. It is a full-viewport takeover that hides all wp-admin chrome, so it has no frame to standardize. Verified that the flag does not change its behaviour.
  • Gated on the my-jetpack-wp-build feature flag, default off. Every user still gets today's dashboard. Enable it with wp companion feature-flag enable my-jetpack-wp-build, or locally with add_filter( 'jetpack_feature_flag_enabled_my-jetpack-wp-build', '__return_true' );.

Changes outside packages/my-jetpack

esbuild has no image loader and no config surface, and that follows the route's whole import graph — not just the ported package.

  • packages/connection and packages/licensing now serve their own illustrations from a committed assets/images/ directory, with the base URL published in admin script data (following packages/blaze's precedent). js-packages/connection and js-packages/licensing resolve their own URLs; no consumer passes anything. Data URIs were rejected here on measurement: those four total ~337KB gzipped, versus the ~22KB accepted for My Jetpack's own SVGs.
  • js-packages/components inlines the pricing table's header gradient as a data URI, because runtime-injected CSS resolves url(./gradient.svg) against /wp-admin/.
  • js-packages/config falls back to globalThis.jetpackConfig when the webpack external is missing. My Jetpack's boot init module sets it, so consumer_slug survives esbuild.
  • js-packages/connection drops the manage-connection dialog's link colors. @wordpress/ui injects Link's CSS at runtime, after every <link>, so they never won under webpack; bundled, they turned the links black.
  • packages/jitm: when a JITM placeholder isn't rendered, as on wp-build pages whose CSS hides it, the card now waits for #jp-admin-notices to mount instead of taking the hidden placeholder's spot. Pages with a visible placeholder behave as before.
  • tools/performance: the My Jetpack CodeVitals scenario waits for .jp-admin-page under either container, so it keeps working once the flag is on.

Effects on the default (flag-off) path

The flag is off, so every user takes the legacy path. Four deliberate, measured trade-offs reach it:

  1. Legacy bundle +21.9KB gzipped (+46KB raw, +1.57%) from inlining 14 SVGs as data URIs, against 14 fewer HTTP requests on first load. Accepted as roughly neutral; reversible with a webpack resolve.alias if it turns out not to be.
  2. The 13 raster illustrations lose cache-busting. They are now served from build/images/ at unhashed paths with no ver query, so an image changed by a plugin update can be served stale.
  3. connection.assetsUrl, licensing.assetsUrl and myJetpack.assetsUrl are now added to window.JetpackScriptData on every wp-admin page of every plugin bundling those packages — three short strings. myJetpack.assetsUrl is registered even where My Jetpack itself is turned off, because the Jetpack plugin still renders its connection screen there.
  4. Every plugin bundling My Jetpack ships the unused wp-build output: build/routes is ~8.7 MB on disk (content.min.js ~3 MB, 777 KB gzipped). It loads only when the flag is on, the same as the other wp-build pilots.

Otherwise unchanged: same script handle, same arguments, same three state payloads. The design tokens import moved from _inc/style.module.scss into a legacy-only _inc/design-tokens.scss; the legacy bundle already carried two identical copies of those tokens, so only their order changed.

Related product discussion/links

Does this pull request change what data or activity we track or use?

No. No new tracking, no new data collection. The three script-data keys added are asset base URLs.

Testing instructions

The flag is off by default, so first confirm nothing changed, then enable it and compare.

Before (flag off — this is what ships):

  • Go to Jetpack → My Jetpack. Everything should look and behave exactly as on trunk.
  • Go to Jetpack (?page=jetpack) while disconnected — the "link your WordPress.com account" screen should show its hero illustration. (This screen imports a My Jetpack component; an earlier revision of this PR broke its image, so it is worth an explicit look.)
  • Open the Jetpack plugin's disconnect dialog and the license activation screen — their illustrations should render.
  • Open a product interstitial with a pricing table (e.g. #/add-backup) — the featured column keeps its header gradient.

After (flag on):

add_filter( 'jetpack_feature_flag_enabled_my-jetpack-wp-build', '__return_true' );
  • Jetpack → My Jetpack now renders inside wp-build's rounded frame. The header, tabs, cards, and footer should be otherwise identical.
  • Click through Overview / Products / Help. The Products tab uses DataViews and should be fully styled.
  • Open a product interstitial, then press Back, then Forward. Reload directly on admin.php?page=my-jetpack#/add-backup. All should work — this is the nested-router check.
  • On the interstitials: the pricing table's featured column keeps its gradient, and the CRM and Anti-Spam logos keep their size.
  • Open the connection card's Manage dialog — its links use the brand color, not black.
  • In the Network tab, JITM requests still carry wp:jetpack_page_my-jetpack… message paths, and there is no 404 for a design-tokens.css under /wp-admin/.
  • Visit admin.php?page=my-jetpack&step=onboarding. On a connected site it redirects to #/overview, exactly as with the flag off.
  • Narrow the window below 782px and confirm the layout still behaves.

Verification already done

Measured on one site, one viewport, changing only the flag — computed styles and geometry diffed numerically rather than eyeballed, because a 4px change is invisible in a screenshot:

legacy wp-build
#wpbody-content x160 w1265 h515 identical
.jp-admin-page w1265 h515 w1257 h507
header w1265 h72 pad 16/24 w1257 h72 pad 16/24
.jetpack-footer w1265 h61 y486 w1257 h61 y478
notice paragraph w908 h48 f16 lh24 identical
first tab 86.1875px 86.1875px
body font-family Jetpack stack identical

The only difference is a uniform 8px inset — the boot stage's gutter, which is the frame this port exists to adopt. Body content, typography and spacing are unchanged.

That comparison, extended to every route and dialog, plus live checks found and fixed these defects in this PR: a CJS/ESM interop failure that blanked the dashboard, a body font-family drift, missing charts and DataViews stylesheets, the pricing table gradient 404, logo heights overridden by boot's image reset, black manage-dialog links, a lost consumer_slug, a JITM message path renamed by the screen alias, and a design-tokens @import that 404'd on every load. The last two change no pixels, so they were caught by comparing requests rather than styles.

A later review, also checked live with the flag both off and on, fixed two more:

  • A JITM could land hidden. The JITM fetch starts about 400 ms before the app mounts #jp-admin-notices, and a faster response went into a placeholder that wp-build's CSS hides. Verified with an injected JITM: it now waits and renders inside #jp-admin-notices, and flag-off placement is unchanged.
  • Text outside the admin-ui page region inherited boot's #1e1e1e instead of wp-admin's #3c434a (the Connection screen's footer wordmark). The stage now pins #3c434a, and the Connection screen matches flag-off row for row.

🤖 Generated with Claude Code

https://claude.ai/code/session_016F3z1Uq6h1JiuGiGzo9iSZ
https://claude.ai/code/session_011KmSAEMRaHggqug6jHrvY2

@github-actions

github-actions Bot commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Thank you for your PR!

When contributing to Jetpack, we have a few suggestions that can help us test and review your patch:

  • ✅ Include a description of your PR changes.
  • ✅ Add a "[Status]" label (In Progress, Needs Review, ...).
  • ✅ Add testing instructions.
  • ✅ Specify whether this PR includes any changes to data or privacy.
  • ✅ Add changelog entries to affected projects

This comment will be updated as you work on your PR and make changes. If you think that some of those checks are not needed for your PR, please explain why you think so. Thanks for cooperation 🤖


Follow this PR Review Process:

  1. Ensure all required checks appearing at the bottom of this PR are passing.
  2. Make sure to test your changes on all platforms that it applies to. You're responsible for the quality of the code you ship.
  3. You can use GitHub's Reviewers functionality to request a review.
  4. When it's reviewed and merged, you will be pinged in Slack to deploy the changes to WordPress.com simple once the build is done.

If you have questions about anything, reach out in #jetpack-developers for guidance!


Jetpack plugin:

The Jetpack plugin has different release cadences depending on the platform:

  • WordPress.com Simple releases happen as soon as you deploy your changes after merging this PR (PCYsg-Jjm-p2).
  • WoA releases happen weekly.
  • Releases to self-hosted sites happen monthly:
    • Scheduled release: October 6, 2026

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Backup plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Boost plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Search plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Social plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Starter Plugin plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Protect plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Videopress plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.


Stats Data plugin:

No scheduled milestone found for this plugin.

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.

@dhasilva
dhasilva force-pushed the jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot branch from f7254f5 to 5b7a4fa Compare September 10, 2026 18:32
@github-actions

github-actions Bot commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Are you an Automattician? Please test your changes on all WordPress.com environments to help mitigate accidental explosions.

  • To test on WoA, go to the Plugins menu on a WoA dev site. Click on the "Upload" button and follow the upgrade flow to be able to upload, install, and activate the Jetpack Beta plugin. Once the plugin is active, go to Jetpack > Jetpack Beta, select your plugin (Jetpack or WordPress.com Site Helper), and enable the jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot branch.
  • To test on Simple, run the following command on your sandbox:
bin/jetpack-downloader test jetpack jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot
bin/jetpack-downloader test jetpack-mu-wpcom-plugin jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot

Interested in more tips and information?

  • In your local development environment, use the jetpack rsync command to sync your changes to a WoA dev blog.
  • Read more about our development workflow here: PCYsg-eg0-p2
  • Figure out when your changes will be shipped to customers here: PCYsg-eg5-p2

@jp-launch-control

jp-launch-control Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

Code Coverage Summary

Coverage changed in 64 files. Only the first 5 are listed here.

File Coverage Δ% Δ Uncovered
projects/packages/my-jetpack/_inc/components/onboarding-tour/index.tsx 0/16 (0.00%) 0.00% 6 💔
projects/packages/my-jetpack/_inc/components/product-interstitial/jetpack-ai/more-requests.jsx 0/8 (0.00%) 0.00% 1 ❤️‍🩹
projects/js-packages/config/src/index.js 14/14 (100.00%) 0.00% 0 💚
projects/js-packages/connection/components/disconnect-dialog/steps/step-disconnect-confirm.tsx 3/3 (100.00%) 0.00% 0 💚
projects/js-packages/connection/components/disconnect-dialog/steps/step-thank-you.tsx 3/3 (100.00%) 0.00% 0 💚

6 files are newly checked for coverage. Only the first 5 are listed here.

File Coverage
projects/packages/my-jetpack/packages/init/src/index.ts 0/2 (0.00%) 💔
projects/packages/my-jetpack/_inc/app.jsx 6/6 (100.00%) 💚
projects/packages/my-jetpack/_inc/assets/inline-svgs.ts 14/14 (100.00%) 💚
projects/packages/my-jetpack/_inc/assets/url.ts 4/4 (100.00%) 💚
projects/packages/my-jetpack/packages/init/src/jetpack-config.ts 1/1 (100.00%) 💚

Full summary · PHP report · JS report

If appropriate, add one of these labels to override the failing coverage check: Covered by non-unit tests Use to ignore the Code coverage requirement check when E2Es or other non-unit tests cover the code Coverage tests to be added later Use to ignore the Code coverage requirement check when tests will be added in a follow-up PR I don't care about code coverage for this PR Use this label to ignore the check for insufficient code coveage.

@github-actions github-actions Bot added [Plugin] Backup A plugin that allows users to save every change and get back online quickly with one-click restores. [Plugin] Boost A feature to speed up the site and improve performance. [Plugin] Jetpack Issues about the Jetpack plugin. https://wordpress.org/plugins/jetpack/ [Plugin] Protect A plugin with features to protect a site: brute force protection, security scanning, and a WAF. [Plugin] Search A plugin to add an instant search modal to your site to help visitors find content faster. [Plugin] Social Issues about the Jetpack Social plugin [Plugin] Starter Plugin [Plugin] Stats Data [Plugin] VideoPress A standalone plugin to add high-quality VideoPress videos to your site. labels Sep 10, 2026
@dhasilva
dhasilva force-pushed the jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot branch from 91ab971 to e3cff84 Compare September 11, 2026 01:55
dhasilva and others added 4 commits September 14, 2026 12:21
wp-build requires "type": "module" on the package, which flips every .js
file to ESM. No behavior change.

Also adds the .ts extension to two relative imports in
create-stat-diff-text.js: with "type": "module", webpack parses plain .js
files (unlike .jsx) as strict ESM, which requires fully-specified import
specifiers. This was the only file in the package with that shape.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015pkmmvLXUXe6vnkMXSQDKQ
The wp-build stage and the legacy entry have to render one tree, not two
copies that drift. admin.jsx keeps createRoot() and the onboarding branch,
which reads a container that only exists on the legacy path.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015pkmmvLXUXe6vnkMXSQDKQ
wp-build's esbuild pipeline configures no image loader, so a bare
import from './x.svg' fails to bundle. Data URIs keep the rendered
<img src> identical. Follows packages/activity-log.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015pkmmvLXUXe6vnkMXSQDKQ
~800K of WebP/PNG can't be inlined the way the SVGs were, and esbuild
has no file loader, so they're copied to build/images/ and addressed
through a runtime base exposed as myJetpackInitialState.assetsUrl.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015pkmmvLXUXe6vnkMXSQDKQ
dhasilva and others added 3 commits September 14, 2026 14:42
When the placeholder is not rendered, as on wp-build dashboards whose page
CSS hides it, hold the card until #jp-admin-notices mounts instead of putting
it where it stays invisible. Visible placeholders keep today's behaviour.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011KmSAEMRaHggqug6jHrvY2
Boot's stage sets #1e1e1e, so text outside the admin-ui page region, such as
the Connection screen footer wordmark, darkened against the legacy page.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011KmSAEMRaHggqug6jHrvY2
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011KmSAEMRaHggqug6jHrvY2
@enejb

enejb commented Sep 14, 2026

Copy link
Copy Markdown
Member

Instead of using this add_filter( 'rsm_jetpack_ui_modernization_my_jetpack', '__return_true' );

can we use the new Feature Flags class?

Replace the rsm_jetpack_ui_modernization_my_jetpack filter with the
my-jetpack-wp-build Feature_Flags flag, registered at the top of init() so
it is listed wherever the package loads, including WP-CLI.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011KmSAEMRaHggqug6jHrvY2
@dhasilva

Copy link
Copy Markdown
Contributor Author

can we use the new Feature Flags class?

Done in d20e8c1. The gate is now the my-jetpack-wp-build flag, registered through Feature_Flags::register() at the top of Initializer::init(), so it shows up in wp companion feature-flag list. The rsm_ filter is gone and the dependent plugin locks are regenerated.

Generated by Claude.

@dhasilva
dhasilva marked this pull request as ready for review September 14, 2026 18:29
@dhasilva
dhasilva requested review from a team as code owners September 14, 2026 18:29
@dhasilva dhasilva added [Status] Needs Review This PR is ready for review. and removed [Status] In Progress labels Sep 14, 2026
@@ -0,0 +1,45 @@
// Generated by `pnpm run generate:inline-svgs`. Do not edit.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does this file make sense or should this be individual SVG icons?
that can be reused.
Having them in a file like this seems a bit odd to me because I can't really verify what they are.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good point. The SVGs stay as regular .svg files next to their components, and that's what to review. inline-svgs.ts is generated from them (pnpm run generate:inline-svgs), and inline-svgs.test.ts fails if it drifts. In 5ac4640 I marked it linguist-generated so GitHub collapses it in diffs, and each export now names its source file.

I kept them as <img> data URIs rather than reusable SVG components: each is used once, and inline <svg> would change the DOM. It would also break with this artwork, because jetpack.svg and empty-avatar.svg share SVGID_1_/Layer_1 ids and render side by side.

Generated by Claude.

The base64 blob can't be read in a diff, so mark it linguist-generated and
name each export's source SVG, which is what reviewers should check.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vb2Nnc9pDZgAt8zUkj7fnq
@enejb

enejb commented Sep 14, 2026

Copy link
Copy Markdown
Member

I looked at this PR for backward compatibility, as of d20e8c1. I found no breaking changes: the URL stays the same, no endpoint changes, and a tab that is already open keeps working. There are two small side effects, noted below.

Will the URL change?

No.

  • The page is still admin.php?page=my-jetpack in both modes, and the menu registration is untouched.
  • #/… deep links keep working because HashRouter is still in place. Boot keeps its own route in ?p=, which is empty on this single-route page.
  • On first load, boot's router rebuilds the current URL (?p=, defaulting to /, plus the current hash) and only calls replace if the result differs. It matches, so the address bar isn't rewritten. Moving around inside the app only changes the hash, which boot doesn't touch.
  • If a ?p= ever does get added, the legacy page ignores it, so bookmarks work in both modes.

Did any endpoints change?

No.

  • The diff adds, removes or changes no register_rest_route call, REST path or apiFetch call.
  • The wp-build page preloads core's / site index and OPTIONS /wp/v2/settings on the server. Those are existing core routes, not new endpoints.
  • JetpackScriptData only gains keys (connection.assetsUrl, licensing.assetsUrl, myJetpack.assetsUrl). Nothing is removed or renamed.

What happens to a user on the old dashboard when the site updates?

  1. The flag is off by default, so their next reload serves the same legacy bundle at the same URL. There is no data or option migration.
  2. A tab that stays open keeps working. Its REST routes are unchanged, hash routing happens in the browser, and the legacy build is a single index.js with no lazy chunks, so there's no chunk-load error either.
  3. Minor: that tab can show broken images. The old build emitted images/<name>-<contenthash>.<ext> for the 13 raster images and 14 SVGs this PR moves. A clean build deletes those files, so a tab opened before the update shows broken images on any screen it hasn't rendered yet (connection screen, interstitials) until it's reloaded. It fixes itself on reload, but it may be worth a line in "Effects on the default path".
  4. Turning the flag on or off doesn't affect open tabs. The next reload of the same URL renders the other mode.
  5. Plugins on different versions:
    • My Jetpack's PHP and JS both come from whichever package copy the autoloader picks, so they always match.
    • Older plugins still bundle their own connection and licensing JS, images included.
    • The new cross-package calls (Feature_Flags, the WP_Build_Polyfills constants) are all to packages my-jetpack requires in composer.json, so version skew can't cause a fatal.

API-level changes

  • PHP: no public method, function, hook, constant or property is removed or has a changed signature. Everything is additive: new Initializer static methods, Licensing::configure(), Connection_Assets::add_script_data(), and the licensing package's new actions.php.
  • Flag on only: the my_jetpack_main_app handle and #my-jetpack-container aren't registered on the My Jetpack page (enqueue, render). Third-party code that attaches to either would stop working there. In the monorepo only Boost depends on that handle (plugins/boost/app/admin/class-admin.php), and it's unaffected: on page=jetpack-boost wp-build never loads, should_render_wp_build() fails its function_exists() check, and the handle is still registered.
  • @automattic/jetpack-connection is published to npm. DisconnectDialog now reads its illustration URL from JetpackScriptData.connection.assetsUrl (step-disconnect-confirm.tsx), so a consumer that doesn't run this version of the Connection PHP package silently loses the images. That's fine inside the monorepo, since each plugin ships PHP at least as new as its JS. For outside consumers, the patch / changed changelog entry could mention the new requirement.
  • Compatible changes: ActivationScreenIllustration's imageUrl is now optional instead of required, and @automattic/jetpack-config gains a fallback to a global.

@dhasilva
dhasilva merged commit fc6b865 into trunk Sep 14, 2026
136 of 138 checks passed
@dhasilva
dhasilva deleted the jetpack-2567-port-my-jetpack-to-wp-build-ui-unchanged-pilot branch September 14, 2026 22:52
@github-actions github-actions Bot removed the [Status] Needs Review This PR is ready for review. label Sep 14, 2026
retrofox added a commit that referenced this pull request Sep 15, 2026
the wp-build port (#52204) landed pinned to admin-ui 2.9, build 0.22, route 0.20 and the .54 train
retrofox added a commit that referenced this pull request Sep 16, 2026
* Update Bundled @wordpress/* monorepo

* Fix patch for `@wordpress/build` v0.23.0

* align protect a11y pin with the bundled group

* Backup: report unknown activity totals as null to DataViews
dataviews 19 clamps the page to the last one it knows about, so a fallback of 1 sent the reader to page 1 whenever the log failed or was paused offline

* wp-build-polyfills: keep reusable-blocks on the private-apis allowlist
private-apis 1.55.0 dropped it, but the copy WordPress 7.0 ships still opts in

* Premium Analytics: cast the report params Edit control like its key
dataviews 19 adds setValue to NormalizedField, so the unresolved Attributes generic no longer unifies with the concrete control props

* Boost: expect the theme 2.1 warning color in the overview e2e
@wordpress/theme 2.1.0 moves --wpds-color-foreground-content-warning-weak from #926300 to #936300

* update @wordpress/* packages to the .55 train
folds the wordpress-monorepo renovate round (#52188) so both trains land together and the tree stops carrying two copies of components, element and core-data

* pnpmfile: drop the dataviews dependency hack
dataviews 19 declares every dependency of its wp bundle itself (WordPress/gutenberg#81843), so the hack only duplicated them as optionalDependencies

* refresh the pnpmfile checksum in the lockfile

* align My Jetpack wp-build pins with the round

the wp-build port (#52204) landed pinned to admin-ui 2.9, build 0.22, route 0.20 and the .54 train

* dedupe the lockfile after the trunk merge

collapses the testing-library 16.3.2 / 14.6.1 copies left behind trunk's #52297 bump

* Forms: assert the console error useCreateForm logs

jest-console 9.3.0 keeps its spies across jest.restoreAllMocks(), so the error the hook logs on a failed creation has to be expected

* Charts: wrap useElementSize test updates in act()

jest-console 9.3.0 surfaces the act() warnings that clearAllMocks() used to discard before the console assertion ran

* Social: pre-fill the Bluesky handle on reconnect

InputControl spreads defaultValue onto its controlled input, so the handle never showed and React warned; keep the handle in state

* Jetpack: await the Newsletter email toggle in its test

ToggleGroupControl settles its radio store after render, and jest-console 9.3.0 now reports that act() warning

* Jetpack: fix the Popover ignoreContext prop type

PropTypes.function does not exist, so the shape check only logged a warning that jest-console 9.3.0 now reports

* VideoPress: narrow the files transform before calling it

blocks 16 types findTransform's result as the union of every transform kind, and files.isMatch takes the file list alone

* e2e: accept both labels of the preview menu item

e2e-test-utils-playwright 2.0.0 looks for Gutenberg trunk's 'Preview (opens in a new tab)', while the WP 7.0/7.1 editor still says 'Preview in new tab', so Forms' openPreviewPage never found it

* e2e: match the View button exactly

the substring match also resolved Document Overview in the editor top bar

* PayPal: drop the spy tracking jest-console needed

jest-console 9.3.0 keeps its console spies across restoreAllMocks(), so afterEach can restore every spy the suite made again

* recolor stroke-based icons with color, not fill

@wordpress/icons 16 draws 98 icons as strokes with an inline fill:none, so the CSS fill rules that tinted them stopped applying; the AI message keeps fill for its own filled SVG

---------

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Brad Jorsch <brad.jorsch@automattic.com>
Co-authored-by: Damián Suárez <rdsuarez@gmail.com>
CGastrell added a commit that referenced this pull request Sep 25, 2026
Boot's stage already sets the design-system foreground color. My
Jetpack's dashboard and the Jetpack Settings page each overrode it
with wp-admin's classic #3c434a, which has no WPDS token. Follow-up
to #52204 and #52619 per review feedback asking for no overrides on
Page's own design choices.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Docs [JS Package] Components [JS Package] Config [JS Package] Connection [JS Package] Licensing [Package] Connection [Package] Jitm [Package] Licensing [Package] My Jetpack [Plugin] Backup A plugin that allows users to save every change and get back online quickly with one-click restores. [Plugin] Boost A feature to speed up the site and improve performance. [Plugin] Jetpack Issues about the Jetpack plugin. https://wordpress.org/plugins/jetpack/ [Plugin] Protect A plugin with features to protect a site: brute force protection, security scanning, and a WAF. [Plugin] Search A plugin to add an instant search modal to your site to help visitors find content faster. [Plugin] Social Issues about the Jetpack Social plugin [Plugin] Starter Plugin [Plugin] Stats Data [Plugin] VideoPress A standalone plugin to add high-quality VideoPress videos to your site. RNA [Tests] Includes Tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants