Skip to content

RTC: Fix find_canonical_storage_post_id() always returning null#78053

Merged
t-hamano merged 4 commits into
trunkfrom
rtc-fix-unit-test
May 7, 2026
Merged

RTC: Fix find_canonical_storage_post_id() always returning null#78053
t-hamano merged 4 commits into
trunkfrom
rtc-fix-unit-test

Conversation

@t-hamano

@t-hamano t-hamano commented May 7, 2026

Copy link
Copy Markdown
Contributor

Follow up to #77675

What?

Fix WP_Sync_Post_Meta_Storage::find_canonical_storage_post_id() always returning null.

Why?

The function calls get_posts( ..., 'fields' => 'ids' ) which returns an array of IDs, but checked is_numeric( $post_id ). That check is always false for an array, so the function always returned null.

This issue surfaced when it was merged into trunk. The problem went unnoticed because the PR only runs unit tests on the latest WordPress version. This is because the latest version of WordPress skips these unit tests.

Testing Instructions

In this PR, I will intentionally run unit tests with an older WP version. Once I confirm that the tests do not fail, I will remove the temporary code.

Use of AI Tools

AI assistance: Yes
Tool(s): Claude Code
Model(s): Claude Opus 4.7
Used for: Root-cause analysis and the fix. Reviewed and validated by me.

t-hamano and others added 2 commits May 7, 2026 18:06
get_posts() with 'fields' => 'ids' returns an array of IDs, so the
previous is_numeric( $post_id ) check was always false. As a result,
find_canonical_storage_post_id() always returned null and the storage
layer kept promoting the suffixed post to the canonical slug, leaving
two posts sharing the same slug. This caused
test_first_access_race_does_not_split_room_storage to fail on
WordPress 6.8/6.9 where the Gutenberg shim is active (WP 7.0+ skips
the test because core ships its own class).

Read the first element from the result array and return it as the
canonical post ID instead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The race-condition regression test for WP_Sync_Post_Meta_Storage only
runs against the Gutenberg shim, which is bypassed on the latest WP.
PRs normally exclude the previous-major WP job, so the fix cannot be
verified by CI on a PR. Comment out that exclude with a TODO to revert
before merging.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@t-hamano

t-hamano commented May 7, 2026

Copy link
Copy Markdown
Contributor Author

OK, all unit tests have passed. I will now remove the temporary code.

https://github.com/WordPress/gutenberg/actions/runs/25486730647/job/74784157464?pr=78053

@t-hamano t-hamano self-assigned this May 7, 2026
CI confirmed the fix on the previous WP major. Restore the original
pull_request exclude.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@t-hamano t-hamano added [Type] Bug An existing feature does not function as intended [Feature] Real-time Collaboration Phase 3 of the Gutenberg roadmap around real-time collaboration labels May 7, 2026
return null;
}

return $posts[0];

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.

Since $posts is guaranteed to be an array of int values, I don't think is_numeric is necessary.

The find_canonical_storage_post_id() fix needs to ride along with the
existing 11660 backport so Core gets the corrected race-resolution
logic in one piece.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@t-hamano t-hamano added the No Core Sync Required Indicates that any changes do not need to be synced to WordPress Core label May 7, 2026
@t-hamano t-hamano marked this pull request as ready for review May 7, 2026 09:19
@t-hamano t-hamano requested a review from spacedmonkey as a code owner May 7, 2026 09:19
@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@t-hamano t-hamano added the Backport to WP 7.0 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label May 7, 2026
@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown

Flaky tests detected in b0e4ee2.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/25487198480
📝 Reported issues:

@t-hamano t-hamano merged commit 3c09a4e into trunk May 7, 2026
54 checks passed
@t-hamano t-hamano deleted the rtc-fix-unit-test branch May 7, 2026 10:40
@github-actions github-actions Bot added this to the Gutenberg 23.2 milestone May 7, 2026
@github-actions github-actions Bot added Backported to WP Core Pull request that has been successfully merged into WP Core and removed Backport to WP 7.0 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta labels May 7, 2026
gutenbergplugin pushed a commit that referenced this pull request May 7, 2026
* RTC: Fix find_canonical_storage_post_id() always returning null

get_posts() with 'fields' => 'ids' returns an array of IDs, so the
previous is_numeric( $post_id ) check was always false. As a result,
find_canonical_storage_post_id() always returned null and the storage
layer kept promoting the suffixed post to the canonical slug, leaving
two posts sharing the same slug. This caused
test_first_access_race_does_not_split_room_storage to fail on
WordPress 6.8/6.9 where the Gutenberg shim is active (WP 7.0+ skips
the test because core ships its own class).

Read the first element from the result array and return it as the
canonical post ID instead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* CI: Temporarily run previous-major WP PHP tests on pull_request

The race-condition regression test for WP_Sync_Post_Meta_Storage only
runs against the Gutenberg shim, which is bypassed on the latest WP.
PRs normally exclude the previous-major WP job, so the fix cannot be
verified by CI on a PR. Comment out that exclude with a TODO to revert
before merging.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Revert "CI: Temporarily run previous-major WP PHP tests on pull_request"

CI confirmed the fix on the previous WP major. Restore the original
pull_request exclude.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Backport changelog: Add PR 78053 to 7.0/11660 entry

The find_canonical_storage_post_id() fix needs to ride along with the
existing 11660 backport so Core gets the corrected race-resolution
logic in one piece.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown

I just cherry-picked this PR to the wp/7.0 branch to get it included in the next release: 842a2be

dmsnell added a commit to dmsnell/wordpress-develop that referenced this pull request May 7, 2026
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request May 8, 2026
This updates the pinned hash from the `gutenberg` from `e2970ba736edb99e08fb369d4fb0c378189468ee ` to `c15cef1d6b07f666df28dac0383bafb0edfe0914`.

The following changes are included:

- RTC: Predefined retry schedules for disconnect dialog, make more lenient (WordPress/gutenberg#76966)
- Block Editor: Prevent Enter key from inserting paragraphs in contentOnly sections (WordPress/gutenberg#76989)
- Cover block: fix embed video background Error 153 in editor (WordPress/gutenberg#76904)
- Restore original template registration tests alongside activation variants (WordPress/gutenberg#77068)
- Avoid stale values in core/cover block for RTC compatibility (WordPress/gutenberg#76916)
- Bump oras-project/setup-oras (WordPress/gutenberg#77096) (WordPress/gutenberg#77110)
- RTC: Change SyncConnectionModal to isSyncConnectionErrorHandled filter and drop IS_GUTENBERG_PLUGIN check (WordPress/gutenberg#76853)
- contentOnly template lock: Fix block insertion and removal rules (WordPress/gutenberg#77119)
- Global Styles Revisions: Fix footer overflow (WordPress/gutenberg#77103)
- Revision: Fix 'Show changes' button reset state (WordPress/gutenberg#77122)
- Link picker: Decode HTML entities in link preview title (WordPress/gutenberg#77170)
- Connectors: don't clobber third-party custom render in registerDefaultConnectors (WordPress/gutenberg#77116)
- Connectors: Replace speak() with notice store for state changes (WordPress/gutenberg#77174)
- Core Data: Fix 'useEntityProp' for raw attributes (WordPress/gutenberg#77120)
- Fix PatternsActions prop name from postType to type (WordPress/gutenberg#77251)
- Fix: restore editor canvas padding in classic themes (WordPress/gutenberg#76864)
- RTC: Add filterable flag for meta box RTC compatibility (WordPress/gutenberg#76939)
- Fix failing 'WP_HTTP_Polling_Sync_Server' unit test (WordPress/gutenberg#77025) (WordPress/gutenberg#77325)
- Edit Post: Fix warning in 'useMetaBoxInitialization' hook (WordPress/gutenberg#77311)
- Update the page slug we link to for the AI plugin after the plugin has been installed and activated (WordPress/gutenberg#77336)
- Test: Connectors Point to the righ page. (WordPress/gutenberg#77272)
- Post Editor: Store metaboxes RTC-compatible flag on location entries (WordPress/gutenberg#77361)
- Core Abilities: Export initialization promise as `ready` (WordPress/gutenberg#77254)
- Block Editor: Strip per-block custom CSS on save for users without edit_css (WordPress/gutenberg#76650)
- Add heading level 1 for the fonts page (WordPress/gutenberg#77482)
- Connectors: Treat network-active plugins as active in plugin status check (WordPress/gutenberg#77661)
- RTC: Fix disconnect dialog due to uneditable entity (WordPress/gutenberg#77242)
- RTC: Fix "Connection Lost" dialog when too many entities are loaded (WordPress/gutenberg#77631)
- RTC: Fix "Edit as HTML" content reset during collaboration (WordPress/gutenberg#77043)
- RTC: Add optional `shouldSync` function to entity sync config (WordPress/gutenberg#76947)
- RTC: Fixed orphaned meta causing dirty editor state (WordPress/gutenberg#77529)
- Ensure "Retry" button is stable during retries (WordPress/gutenberg#77234)
- Patterns: add confirmation dialog before disconnecting/detaching (WordPress/gutenberg#75713)
- Template parts: make 'Detach' context menu item consistent across patterns and template parts (WordPress/gutenberg#77581)
- Remove sandbox `allow-same-origin` for core/html blocks (Merge WordPress/gutenberg#77212 to `wp/7.0`) (WordPress/gutenberg#77699)
- Added Context for Next/Prev Enlarge Image (WordPress/gutenberg#76967)
- Backport: Writing Flow: fix arrow keys skipping paragraph containing link (WordPress/gutenberg#77478)
- Revisions: Improve screen reader accessibility for diff markers region and slider (WordPress/gutenberg#77660)
- Connectors: Add role="list" wrapper to connector cards for valid ARIA structure (WordPress/gutenberg#77689)
- Command Palette: Fix macOs label for sites unable to determine UA via PHP (WordPress/gutenberg#77638)
- RTC: Fix inline inserter reset on update sync (WordPress/gutenberg#76980) (WordPress/gutenberg#77706)
- Connectors: keep focus on action Button during install (WordPress/gutenberg#77544)
- Added Translator Context for Reply (WordPress/gutenberg#77891)
- Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126)
- Core Data: Treat single-item responses specially (WordPress/gutenberg#76318)
- Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957)
- RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980)
- RTC: Fix compaction unit test (WordPress/gutenberg#77986)
- Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857)
- Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043)
- Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273)
- Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897)
- RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675)
- RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053)
- i18n: add context to scale (WordPress/gutenberg#76917)
- Revisions: Simplify fetching (WordPress/gutenberg#77086)
- e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923)
- Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) (WordPress/gutenberg#78070)
- Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904)
- Revision: Fix failing e2e test (WordPress/gutenberg#78079)
- Real-time collaboration: Bundle @wordpress/sync instead of exposing as wp.sync (WordPress/gutenberg#78085)

A full list of changes can be found on GitHub: https://github.com/WordPress/gutenberg/compare/e2970ba736edb99e08fb369d4fb0c378189468ee…c15cef1d6b07f666df28dac0383bafb0edfe0914.

Log created with:

git log --reverse --format="- %s" e2970ba736edb99e08fb369d4fb0c378189468ee..c15cef1d6b07f666df28dac0383bafb0edfe0914 | sed 's|#\([0-9][0-9]*\)|https://github.com/WordPress/gutenberg/pull/\1|g; /github\.com\/WordPress\/gutenberg\/pull/!d' | pbcopy

See #64595.

git-svn-id: https://develop.svn.wordpress.org/trunk@62333 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request May 8, 2026
This updates the pinned hash from the `gutenberg` from `e2970ba736edb99e08fb369d4fb0c378189468ee ` to `c15cef1d6b07f666df28dac0383bafb0edfe0914`.

The following changes are included:

- RTC: Predefined retry schedules for disconnect dialog, make more lenient (WordPress/gutenberg#76966)
- Block Editor: Prevent Enter key from inserting paragraphs in contentOnly sections (WordPress/gutenberg#76989)
- Cover block: fix embed video background Error 153 in editor (WordPress/gutenberg#76904)
- Restore original template registration tests alongside activation variants (WordPress/gutenberg#77068)
- Avoid stale values in core/cover block for RTC compatibility (WordPress/gutenberg#76916)
- Bump oras-project/setup-oras (WordPress/gutenberg#77096) (WordPress/gutenberg#77110)
- RTC: Change SyncConnectionModal to isSyncConnectionErrorHandled filter and drop IS_GUTENBERG_PLUGIN check (WordPress/gutenberg#76853)
- contentOnly template lock: Fix block insertion and removal rules (WordPress/gutenberg#77119)
- Global Styles Revisions: Fix footer overflow (WordPress/gutenberg#77103)
- Revision: Fix 'Show changes' button reset state (WordPress/gutenberg#77122)
- Link picker: Decode HTML entities in link preview title (WordPress/gutenberg#77170)
- Connectors: don't clobber third-party custom render in registerDefaultConnectors (WordPress/gutenberg#77116)
- Connectors: Replace speak() with notice store for state changes (WordPress/gutenberg#77174)
- Core Data: Fix 'useEntityProp' for raw attributes (WordPress/gutenberg#77120)
- Fix PatternsActions prop name from postType to type (WordPress/gutenberg#77251)
- Fix: restore editor canvas padding in classic themes (WordPress/gutenberg#76864)
- RTC: Add filterable flag for meta box RTC compatibility (WordPress/gutenberg#76939)
- Fix failing 'WP_HTTP_Polling_Sync_Server' unit test (WordPress/gutenberg#77025) (WordPress/gutenberg#77325)
- Edit Post: Fix warning in 'useMetaBoxInitialization' hook (WordPress/gutenberg#77311)
- Update the page slug we link to for the AI plugin after the plugin has been installed and activated (WordPress/gutenberg#77336)
- Test: Connectors Point to the righ page. (WordPress/gutenberg#77272)
- Post Editor: Store metaboxes RTC-compatible flag on location entries (WordPress/gutenberg#77361)
- Core Abilities: Export initialization promise as `ready` (WordPress/gutenberg#77254)
- Block Editor: Strip per-block custom CSS on save for users without edit_css (WordPress/gutenberg#76650)
- Add heading level 1 for the fonts page (WordPress/gutenberg#77482)
- Connectors: Treat network-active plugins as active in plugin status check (WordPress/gutenberg#77661)
- RTC: Fix disconnect dialog due to uneditable entity (WordPress/gutenberg#77242)
- RTC: Fix "Connection Lost" dialog when too many entities are loaded (WordPress/gutenberg#77631)
- RTC: Fix "Edit as HTML" content reset during collaboration (WordPress/gutenberg#77043)
- RTC: Add optional `shouldSync` function to entity sync config (WordPress/gutenberg#76947)
- RTC: Fixed orphaned meta causing dirty editor state (WordPress/gutenberg#77529)
- Ensure "Retry" button is stable during retries (WordPress/gutenberg#77234)
- Patterns: add confirmation dialog before disconnecting/detaching (WordPress/gutenberg#75713)
- Template parts: make 'Detach' context menu item consistent across patterns and template parts (WordPress/gutenberg#77581)
- Remove sandbox `allow-same-origin` for core/html blocks (Merge WordPress/gutenberg#77212 to `wp/7.0`) (WordPress/gutenberg#77699)
- Added Context for Next/Prev Enlarge Image (WordPress/gutenberg#76967)
- Backport: Writing Flow: fix arrow keys skipping paragraph containing link (WordPress/gutenberg#77478)
- Revisions: Improve screen reader accessibility for diff markers region and slider (WordPress/gutenberg#77660)
- Connectors: Add role="list" wrapper to connector cards for valid ARIA structure (WordPress/gutenberg#77689)
- Command Palette: Fix macOs label for sites unable to determine UA via PHP (WordPress/gutenberg#77638)
- RTC: Fix inline inserter reset on update sync (WordPress/gutenberg#76980) (WordPress/gutenberg#77706)
- Connectors: keep focus on action Button during install (WordPress/gutenberg#77544)
- Added Translator Context for Reply (WordPress/gutenberg#77891)
- Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126)
- Core Data: Treat single-item responses specially (WordPress/gutenberg#76318)
- Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957)
- RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980)
- RTC: Fix compaction unit test (WordPress/gutenberg#77986)
- Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857)
- Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043)
- Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273)
- Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897)
- RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675)
- RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053)
- i18n: add context to scale (WordPress/gutenberg#76917)
- Revisions: Simplify fetching (WordPress/gutenberg#77086)
- e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923)
- Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) (WordPress/gutenberg#78070)
- Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904)
- Revision: Fix failing e2e test (WordPress/gutenberg#78079)
- Real-time collaboration: Bundle @wordpress/sync instead of exposing as wp.sync (WordPress/gutenberg#78085)

A full list of changes can be found on GitHub: https://github.com/WordPress/gutenberg/compare/e2970ba736edb99e08fb369d4fb0c378189468ee…c15cef1d6b07f666df28dac0383bafb0edfe0914.

Log created with:

git log --reverse --format="- %s" e2970ba736edb99e08fb369d4fb0c378189468ee..c15cef1d6b07f666df28dac0383bafb0edfe0914 | sed 's|#\([0-9][0-9]*\)|https://github.com/WordPress/gutenberg/pull/\1|g; /github\.com\/WordPress\/gutenberg\/pull/!d' | pbcopy

See #64595.
Built from https://develop.svn.wordpress.org/trunk@62333


git-svn-id: http://core.svn.wordpress.org/trunk@61614 1a063a9b-81f0-0310-95a4-ce76da25c4cd
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request May 8, 2026
This updates the pinned hash from the `gutenberg` from `e2970ba736edb99e08fb369d4fb0c378189468ee ` to `c15cef1d6b07f666df28dac0383bafb0edfe0914`.

The following changes are included:

- RTC: Predefined retry schedules for disconnect dialog, make more lenient (WordPress/gutenberg#76966)
- Block Editor: Prevent Enter key from inserting paragraphs in contentOnly sections (WordPress/gutenberg#76989)
- Cover block: fix embed video background Error 153 in editor (WordPress/gutenberg#76904)
- Restore original template registration tests alongside activation variants (WordPress/gutenberg#77068)
- Avoid stale values in core/cover block for RTC compatibility (WordPress/gutenberg#76916)
- Bump oras-project/setup-oras (WordPress/gutenberg#77096) (WordPress/gutenberg#77110)
- RTC: Change SyncConnectionModal to isSyncConnectionErrorHandled filter and drop IS_GUTENBERG_PLUGIN check (WordPress/gutenberg#76853)
- contentOnly template lock: Fix block insertion and removal rules (WordPress/gutenberg#77119)
- Global Styles Revisions: Fix footer overflow (WordPress/gutenberg#77103)
- Revision: Fix 'Show changes' button reset state (WordPress/gutenberg#77122)
- Link picker: Decode HTML entities in link preview title (WordPress/gutenberg#77170)
- Connectors: don't clobber third-party custom render in registerDefaultConnectors (WordPress/gutenberg#77116)
- Connectors: Replace speak() with notice store for state changes (WordPress/gutenberg#77174)
- Core Data: Fix 'useEntityProp' for raw attributes (WordPress/gutenberg#77120)
- Fix PatternsActions prop name from postType to type (WordPress/gutenberg#77251)
- Fix: restore editor canvas padding in classic themes (WordPress/gutenberg#76864)
- RTC: Add filterable flag for meta box RTC compatibility (WordPress/gutenberg#76939)
- Fix failing 'WP_HTTP_Polling_Sync_Server' unit test (WordPress/gutenberg#77025) (WordPress/gutenberg#77325)
- Edit Post: Fix warning in 'useMetaBoxInitialization' hook (WordPress/gutenberg#77311)
- Update the page slug we link to for the AI plugin after the plugin has been installed and activated (WordPress/gutenberg#77336)
- Test: Connectors Point to the righ page. (WordPress/gutenberg#77272)
- Post Editor: Store metaboxes RTC-compatible flag on location entries (WordPress/gutenberg#77361)
- Core Abilities: Export initialization promise as `ready` (WordPress/gutenberg#77254)
- Block Editor: Strip per-block custom CSS on save for users without edit_css (WordPress/gutenberg#76650)
- Add heading level 1 for the fonts page (WordPress/gutenberg#77482)
- Connectors: Treat network-active plugins as active in plugin status check (WordPress/gutenberg#77661)
- RTC: Fix disconnect dialog due to uneditable entity (WordPress/gutenberg#77242)
- RTC: Fix "Connection Lost" dialog when too many entities are loaded (WordPress/gutenberg#77631)
- RTC: Fix "Edit as HTML" content reset during collaboration (WordPress/gutenberg#77043)
- RTC: Add optional `shouldSync` function to entity sync config (WordPress/gutenberg#76947)
- RTC: Fixed orphaned meta causing dirty editor state (WordPress/gutenberg#77529)
- Ensure "Retry" button is stable during retries (WordPress/gutenberg#77234)
- Patterns: add confirmation dialog before disconnecting/detaching (WordPress/gutenberg#75713)
- Template parts: make 'Detach' context menu item consistent across patterns and template parts (WordPress/gutenberg#77581)
- Remove sandbox `allow-same-origin` for core/html blocks (Merge WordPress/gutenberg#77212 to `wp/7.0`) (WordPress/gutenberg#77699)
- Added Context for Next/Prev Enlarge Image (WordPress/gutenberg#76967)
- Backport: Writing Flow: fix arrow keys skipping paragraph containing link (WordPress/gutenberg#77478)
- Revisions: Improve screen reader accessibility for diff markers region and slider (WordPress/gutenberg#77660)
- Connectors: Add role="list" wrapper to connector cards for valid ARIA structure (WordPress/gutenberg#77689)
- Command Palette: Fix macOs label for sites unable to determine UA via PHP (WordPress/gutenberg#77638)
- RTC: Fix inline inserter reset on update sync (WordPress/gutenberg#76980) (WordPress/gutenberg#77706)
- Connectors: keep focus on action Button during install (WordPress/gutenberg#77544)
- Added Translator Context for Reply (WordPress/gutenberg#77891)
- Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126)
- Core Data: Treat single-item responses specially (WordPress/gutenberg#76318)
- Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957)
- RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980)
- RTC: Fix compaction unit test (WordPress/gutenberg#77986)
- Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857)
- Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043)
- Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273)
- Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897)
- RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675)
- RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053)
- i18n: add context to scale (WordPress/gutenberg#76917)
- Revisions: Simplify fetching (WordPress/gutenberg#77086)
- e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923)
- Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) (WordPress/gutenberg#78070)
- Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904)
- Revision: Fix failing e2e test (WordPress/gutenberg#78079)
- Real-time collaboration: Bundle @wordpress/sync instead of exposing as wp.sync (WordPress/gutenberg#78085)

A full list of changes can be found on GitHub: https://github.com/WordPress/gutenberg/compare/e2970ba736edb99e08fb369d4fb0c378189468ee…c15cef1d6b07f666df28dac0383bafb0edfe0914.

Log created with:

git log --reverse --format="- %s" e2970ba736edb99e08fb369d4fb0c378189468ee..c15cef1d6b07f666df28dac0383bafb0edfe0914 | sed 's|#\([0-9][0-9]*\)|https://github.com/WordPress/gutenberg/pull/\1|g; /github\.com\/WordPress\/gutenberg\/pull/!d' | pbcopy

Reviewed by desrosj.
Merges [62333] to the 7.0 branch.

Props ellatrix, desrosj.
See #64595.

git-svn-id: https://develop.svn.wordpress.org/branches/7.0@62335 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to WordPress/WordPress that referenced this pull request May 8, 2026
This updates the pinned hash from the `gutenberg` from `e2970ba736edb99e08fb369d4fb0c378189468ee ` to `c15cef1d6b07f666df28dac0383bafb0edfe0914`.

The following changes are included:

- RTC: Predefined retry schedules for disconnect dialog, make more lenient (WordPress/gutenberg#76966)
- Block Editor: Prevent Enter key from inserting paragraphs in contentOnly sections (WordPress/gutenberg#76989)
- Cover block: fix embed video background Error 153 in editor (WordPress/gutenberg#76904)
- Restore original template registration tests alongside activation variants (WordPress/gutenberg#77068)
- Avoid stale values in core/cover block for RTC compatibility (WordPress/gutenberg#76916)
- Bump oras-project/setup-oras (WordPress/gutenberg#77096) (WordPress/gutenberg#77110)
- RTC: Change SyncConnectionModal to isSyncConnectionErrorHandled filter and drop IS_GUTENBERG_PLUGIN check (WordPress/gutenberg#76853)
- contentOnly template lock: Fix block insertion and removal rules (WordPress/gutenberg#77119)
- Global Styles Revisions: Fix footer overflow (WordPress/gutenberg#77103)
- Revision: Fix 'Show changes' button reset state (WordPress/gutenberg#77122)
- Link picker: Decode HTML entities in link preview title (WordPress/gutenberg#77170)
- Connectors: don't clobber third-party custom render in registerDefaultConnectors (WordPress/gutenberg#77116)
- Connectors: Replace speak() with notice store for state changes (WordPress/gutenberg#77174)
- Core Data: Fix 'useEntityProp' for raw attributes (WordPress/gutenberg#77120)
- Fix PatternsActions prop name from postType to type (WordPress/gutenberg#77251)
- Fix: restore editor canvas padding in classic themes (WordPress/gutenberg#76864)
- RTC: Add filterable flag for meta box RTC compatibility (WordPress/gutenberg#76939)
- Fix failing 'WP_HTTP_Polling_Sync_Server' unit test (WordPress/gutenberg#77025) (WordPress/gutenberg#77325)
- Edit Post: Fix warning in 'useMetaBoxInitialization' hook (WordPress/gutenberg#77311)
- Update the page slug we link to for the AI plugin after the plugin has been installed and activated (WordPress/gutenberg#77336)
- Test: Connectors Point to the righ page. (WordPress/gutenberg#77272)
- Post Editor: Store metaboxes RTC-compatible flag on location entries (WordPress/gutenberg#77361)
- Core Abilities: Export initialization promise as `ready` (WordPress/gutenberg#77254)
- Block Editor: Strip per-block custom CSS on save for users without edit_css (WordPress/gutenberg#76650)
- Add heading level 1 for the fonts page (WordPress/gutenberg#77482)
- Connectors: Treat network-active plugins as active in plugin status check (WordPress/gutenberg#77661)
- RTC: Fix disconnect dialog due to uneditable entity (WordPress/gutenberg#77242)
- RTC: Fix "Connection Lost" dialog when too many entities are loaded (WordPress/gutenberg#77631)
- RTC: Fix "Edit as HTML" content reset during collaboration (WordPress/gutenberg#77043)
- RTC: Add optional `shouldSync` function to entity sync config (WordPress/gutenberg#76947)
- RTC: Fixed orphaned meta causing dirty editor state (WordPress/gutenberg#77529)
- Ensure "Retry" button is stable during retries (WordPress/gutenberg#77234)
- Patterns: add confirmation dialog before disconnecting/detaching (WordPress/gutenberg#75713)
- Template parts: make 'Detach' context menu item consistent across patterns and template parts (WordPress/gutenberg#77581)
- Remove sandbox `allow-same-origin` for core/html blocks (Merge WordPress/gutenberg#77212 to `wp/7.0`) (WordPress/gutenberg#77699)
- Added Context for Next/Prev Enlarge Image (WordPress/gutenberg#76967)
- Backport: Writing Flow: fix arrow keys skipping paragraph containing link (WordPress/gutenberg#77478)
- Revisions: Improve screen reader accessibility for diff markers region and slider (WordPress/gutenberg#77660)
- Connectors: Add role="list" wrapper to connector cards for valid ARIA structure (WordPress/gutenberg#77689)
- Command Palette: Fix macOs label for sites unable to determine UA via PHP (WordPress/gutenberg#77638)
- RTC: Fix inline inserter reset on update sync (WordPress/gutenberg#76980) (WordPress/gutenberg#77706)
- Connectors: keep focus on action Button during install (WordPress/gutenberg#77544)
- Added Translator Context for Reply (WordPress/gutenberg#77891)
- Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126)
- Core Data: Treat single-item responses specially (WordPress/gutenberg#76318)
- Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957)
- RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980)
- RTC: Fix compaction unit test (WordPress/gutenberg#77986)
- Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857)
- Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043)
- Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273)
- Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897)
- RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675)
- RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053)
- i18n: add context to scale (WordPress/gutenberg#76917)
- Revisions: Simplify fetching (WordPress/gutenberg#77086)
- e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923)
- Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) (WordPress/gutenberg#78070)
- Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904)
- Revision: Fix failing e2e test (WordPress/gutenberg#78079)
- Real-time collaboration: Bundle @wordpress/sync instead of exposing as wp.sync (WordPress/gutenberg#78085)

A full list of changes can be found on GitHub: https://github.com/WordPress/gutenberg/compare/e2970ba736edb99e08fb369d4fb0c378189468ee…c15cef1d6b07f666df28dac0383bafb0edfe0914.

Log created with:

git log --reverse --format="- %s" e2970ba736edb99e08fb369d4fb0c378189468ee..c15cef1d6b07f666df28dac0383bafb0edfe0914 | sed 's|#\([0-9][0-9]*\)|https://github.com/WordPress/gutenberg/pull/\1|g; /github\.com\/WordPress\/gutenberg\/pull/!d' | pbcopy

Reviewed by desrosj.
Merges [62333] to the 7.0 branch.

Props ellatrix, desrosj.
See #64595.
Built from https://develop.svn.wordpress.org/branches/7.0@62335


git-svn-id: http://core.svn.wordpress.org/branches/7.0@61616 1a063a9b-81f0-0310-95a4-ce76da25c4cd
adamsilverstein pushed a commit that referenced this pull request May 16, 2026
* RTC: Fix find_canonical_storage_post_id() always returning null

get_posts() with 'fields' => 'ids' returns an array of IDs, so the
previous is_numeric( $post_id ) check was always false. As a result,
find_canonical_storage_post_id() always returned null and the storage
layer kept promoting the suffixed post to the canonical slug, leaving
two posts sharing the same slug. This caused
test_first_access_race_does_not_split_room_storage to fail on
WordPress 6.8/6.9 where the Gutenberg shim is active (WP 7.0+ skips
the test because core ships its own class).

Read the first element from the result array and return it as the
canonical post ID instead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* CI: Temporarily run previous-major WP PHP tests on pull_request

The race-condition regression test for WP_Sync_Post_Meta_Storage only
runs against the Gutenberg shim, which is bypassed on the latest WP.
PRs normally exclude the previous-major WP job, so the fix cannot be
verified by CI on a PR. Comment out that exclude with a TODO to revert
before merging.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Revert "CI: Temporarily run previous-major WP PHP tests on pull_request"

CI confirmed the fix on the previous WP major. Restore the original
pull_request exclude.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Backport changelog: Add PR 78053 to 7.0/11660 entry

The find_canonical_storage_post_id() fix needs to ride along with the
existing 11660 backport so Core gets the corrected race-resolution
logic in one piece.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Backported to WP Core Pull request that has been successfully merged into WP Core [Feature] Real-time Collaboration Phase 3 of the Gutenberg roadmap around real-time collaboration No Core Sync Required Indicates that any changes do not need to be synced to WordPress Core [Type] Bug An existing feature does not function as intended

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants