Conversation
Mirrors #1219's switch for dropped images: source.save assumed the upload path itself was the final addressable URL, but uploadMedia content-addresses the file, so the real URL (now possibly a relative ./media_... path) is only known from the response. Swap each pasted image's FPO placeholder for that response URL as soon as its own upload resolves, instead of waiting for every pasted image to finish. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch.
Commits
|
kptdobe
approved these changes
Aug 10, 2026
4 tasks
tripodsan
added a commit
that referenced
this pull request
Aug 11, 2026
…1228) * fix: serialize Playwright CI runs against shared external test sites Both playwright.yml and playwright-hlx.yml run tests against fixed, shared external sites (da-sites/da-status and da-testautomation/da-e2e-tests respectively) with no isolation between concurrent runs. Overlapping CI jobs from different PRs collide on the same backend, causing document create/cleanup races and timeouts that look like hangs (e.g. run 31389050902 on #1227: 27 failures, all timing out waiting for the editor to load, while two other PRs' Helix jobs were running against the same site concurrently). Add a concurrency group per workflow so runs queue instead of racing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(e2e): catch late-appearing alert banners in dismissAlertBanner dismissAlertBanner only checked once, with a bounded 3s wait, near the start of each test. Some banners (e.g. the "public sandbox" org warning on da-sites/da-status) depend on an async check that can resolve later than that window, so the one-shot check missed them — the banner then appeared mid-test and sat on top of later controls, blocking clicks (e.g. "Clicking Preview opens a confirmation dialog" timing out after 30s trying to click button.preview-button, blocked by #nx-toast-host's "Notifications" region). Now, if the banner isn't visible in the initial window, arm a background watcher for the rest of the test so a late appearance still gets dismissed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 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.
Summary
source.savetosource.uploadMedia, sinceuploadMediacontent-addresses the file (the real, possibly relative./media_..., URL is only known from the upload response).base64uploader.js(pasted/Word-paste base64 images) still usedsource.saveand assumed the upload path itself was the final URL — that assumption breaks once the same content-addressing applies here too.base64uploader.jstosource.uploadMedia, and now resolves each image's finalsrcfrom the upload response'scontentUrlinstead of a pre-computed path.uploadBase64Image(view, { src, path, fpoSrc }), called (fire-and-forget, as before) per pasted image, and dispatched as soon as that image's own upload resolves — rather than batching all pasted images behind a singlePromise.all. This also makes the upload path directly testable/awaitable.Test plan
test/unit/blocks/edit/prose/plugins/base64uploader.test.js: placeholder synchronicity,uploadMedia(notsave) is called, the FPO placeholder is swapped for the responsecontentUrl(including a relative./media_...path), failed uploads log and leave the placeholder, and an end-to-endtransformPastedHTML→ upload → swap flow.npm test): 1800 passed, 0 failed, 4 skipped.🤖 Generated with Claude Code