Problem/Motivation
When trying to validate the tests in D9, 10, and 11, I could verify that the test failures are legitimate.
Panels is basically EOL, so I'm not going to spend time fixing this, but I'm closing the other test failure issues because there is a real problem, not just something built into the tests.
Steps to reproduce
On a stock drupal site, enable IPE and use page manager or anything else with panels and IPE, and it will fail to place blocks on the page.
Proposed resolution
Unknown, curious if anyone is actually using IPE successfully with panels right now.
Remaining tasks
Get a patch
| Comment | File | Size | Author |
|---|---|---|---|
| #9 | Screenshot 2026-07-24 at 11.19.14.png | 22.25 KB | joelpittet |
| #9 | Screenshot 2026-07-24 at 11.18.19.png | 74.15 KB | joelpittet |
| #9 | Screenshot 2026-07-24 at 11.16.50.png | 166.59 KB | joelpittet |
| #4 | 3456918-ipe-is-entirely.patch | 1016 bytes | inascon |
Issue fork panels-3456918
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #2
joseph.olstadComment #3
joseph.olstadComment #4
inascon commentedI had the same problem and got the following error:
So fixing the function declaration solved the problem for me.
Comment #6
joseph.olstadComment #9
joelpittetDid a manual test to ensure this was fixed (screenshots to show it's not broken anymore)
Place a block:



Set it in a 2 column layout:
Login as another user to see it locked:
These two fixes made this way smaller of a change:
'#ajax' => ['method' => 'replace'], but jQuery has no.replace()method (it's.replaceWith()). Core's AJAX insert command threw before attachBehaviors ran, so the response was never applied and nothing was placed. This is the fix that makes blocks/layouts actually appear._page_manager_page/_page_manager_page_variant; the old code fatally errored when adding a block. Also covers IPE used without Page Manager.PanelsIPEBlockContentForm::actions(): array return-type fix on this branch (thanks @inascon).AI helped me plow through the aged isssues to get this done, so also help to LLMs.
What this issue/MR fixed on top of those, to make it fully work + keep the tests green:
CategoryViewAJAX accounting the form loader resetajax.ajaxing = falseearly, which defeated core'sajaxCompletesuppression and leftdrupalActiveXhrCountunbalanced (test teardown reported "Unfinished AJAX requests").#cache max-age 0) the editor render depends on the shared tempstore lock, which any user can change; without this, a second user was served a stale cached render and saw the editor as editable when it was actually locked.getWebDriverSession()->accept_alert()→alert()->accept()for W3C WebDriver, andaddBlock()now waits for the async-placed[data-block-id]before asserting.