[macOS][Codex Desktop][In-app Browser] Multiple TinyMCE iframes emit MutationObserver non-Node errors
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.5k
- PR merge metrics
- PR metrics pending
Description
What version is affected?
- ChatGPT/Codex Desktop: 26.803.41515 (build 6321)
- Browser plugin: 26.803.41515
- macOS 26.5.2, arm64
What issue are you seeing?
A localhost response form that mounts eight TinyMCE editors produces seven identical uncaught exceptions in the Codex in-app Browser:
Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver':
parameter 1 is not of type 'Node'.
The editors still render, but the console is polluted and Browser-based production-readiness checks report false failures.
The same authenticated route was loaded twice in connected Chrome. All eight editor iframes rendered and both Chrome runs had a clean console.
A single-editor version of the form produces no exception in the in-app Browser. The 8-editor / 7-error pattern suggests iframe instrumentation is failing for each additional child frame.
Steps to reproduce
- Start a localhost page that mounts eight TinyMCE iframe editors simultaneously.
- Open it with the Codex in-app Browser.
- Wait for all editors to initialize without running locator queries.
- Read Browser console errors.
- Observe seven identical
MutationObserver.observe()non-Node exceptions. - Load the same page in connected Chrome and observe eight editor iframes with no console errors.
Source-level evidence
- The application route itself creates no
MutationObserver. - TinyMCE 7.3.0 and
@tinymce/tinymce-svelte3.0.0 contain noMutationObserveroccurrence. - The installed Browser bundle contains one observer, in the injected Playwright script's
_setupGlobalListenersRemovalDetection():
new MutationObserver(callback).observe(this.document, { childList: true })
The Browser logger exposes only level, message, and timestamp, so it does not provide a source URL or stack trace. The bundle is a generated proprietary cache artifact with no source map or regression tests, so it was not patched locally.
Expected behavior
Multiple iframe editors should initialize without instrumentation-originated page console exceptions. Genuine page-originated observer exceptions should remain visible.
Suggested fix and regression coverage
- Resolve the observer target from the iframe's current document and use that frame's
MutationObserverconstructor. - Verify the frame is still attached and the target is a live Node in that realm before observing.
- Skip/retry when the iframe document is being replaced, and disconnect when it detaches.
- Cover one iframe, eight simultaneous iframes, dynamic attachment, document replacement, and rapid detachment.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the injected Playwright script entry point _setupGlobalListenersRemovalDetection() in the installed Browser bundle, where the observer is created. The bundle is a generated proprietary cache artifact with no source map or regression tests, so first locate its maintainable source and existing iframe instrumentation tests. Done means multiple TinyMCE iframes initialize without instrumentation-originated console errors, while genuine page observer errors remain visible.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, macos, playwright
- Domain
- desktop, testing-qa, web-dev
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100