LearnNewsExamplesServices
Frontmatter
id16113
titlePopup birth still exposes white canvas after theme-carrier fix
stateOpen
labels
bugaitestingregressioncore
assigneesneo-gpt-emmy
createdAtJul 28, 2026, 9:51 PM
updatedAt7:26 AM
githubUrlhttps://github.com/neomjs/neo/issues/16113
authorneo-gpt-emmy
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Popup birth still exposes white canvas after theme-carrier fix

Open Backlog/active-chunk-10 bugaitestingregressioncore
neo-gpt-emmy
neo-gpt-emmy commented on Jul 28, 2026, 9:51 PM

Context

PR #16107 resolved #16092 at merged dev commit e981b57d0ba102c2a914aa72b559666c901cadf3 by carrying the selected Workstation theme through the popup URL, installing a parser-blocking color-scheme hint before MicroLoader.mjs, and seeding the child viewport from the same carried value.

A fresh native five-beat recording on that exact merged head falsified the physical-pixel closure claim. The original ticket remains resolved history; this successor owns only the post-merge regression.

Evidence receipt:

  • exact merged source: e981b57d0ba102c2a914aa72b559666c901cadf3;
  • native media SHA-256: 103b63c000c7a17af78f25b25a71f5fd844c8a30878dcc760460572bebf6162d;
  • exact-head five-beat suite: 9 expected / 9 passed;
  • full native decode: 720 / 720 frames;
  • whole-media disposition: quarantined, not eligible as a film parent.

The first popup visibly presents white at approximately 6.05–6.25s and becomes themed by 6.30s. The second popup repeats the defect at approximately 9.0–9.3s while the first child remains fully themed. The second-popup white raster at approximately 9.10s has SHA-256 66ad5eaebdb6de8253419965342224ebb63c14d6c28e3b0a592d1e706988b20c.

Live latest-open sweep: checked the newest 20 open issues and recent A2A claims at 2026-07-28T19:50Z; no post-merge successor duplicate exists.

The Problem

The selected Neo theme and final child VDOM are correct after boot, but each newly born native popup can expose a transient white document canvas for roughly 150–300 ms. This makes the defect recoverable but still plainly visible inside the continuous docking gesture.

The branch-bound retained-frame matrix from PR #16107 proved carried-theme parity on the frames it sampled. It did not prove absence of a shorter presentation excursion between those samples. DOM presence of the dynamic color-scheme meta is therefore insufficient evidence for physical first-paint continuity.

The simultaneous state—one child fully themed while the next child is white—narrows the defect to per-child bootstrap/presentation. It does not support a global stylesheet-reset diagnosis.

The Architectural Reality

  • apps/workstation/view/Workspace.mjs#openTearOutVessel() owns the selected me.theme and carries it into the child URL.
  • apps/workstation/index.html synchronously maps the admitted theme to a dynamically inserted meta[name="color-scheme"] before src/MicroLoader.mjs.
  • apps/workstation/app.mjs seeds the child viewport from the same validated theme.
  • src/Main.mjs#windowOpen() deliberately stages same-origin children through about:blank, writes the one-use native-route token, and only then calls location.replace(). That authority order was introduced by PR #15573 and must not regress.
  • Current continuous evidence includes white about:blank frames and white final-URL frames. The exact first-paint boundary still needs a mechanically discriminating mutation matrix.

This remains Workstation-local unless evidence proves that a framework-level initial-canvas contract is required.

The Fix

  1. Build a high-frequency native mutation matrix that distinguishes the staged blank realm, the earliest final-document paint, and the first themed viewport frame.
  2. Identify the smallest prepaint owner that keeps the selected Neo theme visible across every physical frame of both popup births.
  3. Preserve one carried theme authority for both canvas polarity and initial viewport theme.
  4. Preserve blank → route token → location.replace() ordering and all existing admission/failure semantics.
  5. Prove the replacement through continuous physical pixels, not DOM/meta presence or sparse retained samples alone.

Contract Ledger

Target surface Source of authority Required behavior Fallback Docs Evidence
Popup bootstrap canvas validated Workspace.me.theme no white or opposite-theme physical frame from native birth through first themed viewport configured Workstation default for missing/invalid carrier only ticket + source JSDoc continuous native frame matrix
Child initial Neo theme same validated carried value first VDOM paint matches the parent-selected theme configured default source JSDoc semantic child-theme receipt plus native pixels
Native route admission Main.windowOpen() one-use token order storage precedes replace; token is consumed by the correct child existing failure cleanup existing route contract unit authority specs plus five-beat journey

Decision Record impact

None. This is a post-merge regression leaf within the existing native-window and Workstation theme contracts.

Acceptance Criteria

  • Reproduce the white interval on a fresh exact-head native take and bind the media hash, source SHA, frame cadence, and popup birth timestamps.
  • Distinguish about:blank, earliest final-document, and first themed viewport frames for both popup births.
  • Neo dark + host prefers light remains dark across every retained physical frame.
  • Neo light + host prefers dark remains light across every retained physical frame.
  • No white or opposite-polarity popup-content frame appears from physical window birth through the first themed pane in the continuous native stream.
  • Negative control: styling only the staged blank realm cannot satisfy the final-document interval.
  • Negative control: repairing only the final document cannot hide a white staged-blank interval.
  • Mutation control: removing or corrupting the effective repair restores a detectable mismatch or safe configured-default path; arbitrary theme input never reaches DOM classes.
  • The one-use route token is written before navigation and consumed by the intended child; all PR #15573 ordering and failure-path tests remain green.
  • A later Workstation dark↔light toggle updates open children to the new palette.
  • The exact-head five-beat Workstation journey remains green through both births, conversion, docking, and reintegration.
  • Whole-media review of the exact successor take confirms the popup-birth interval is clean before the take is eligible as a render parent.
  • Post-merge validation is recorded on this successor ticket; the resolved predecessor is never reopened.

Out of Scope

  • The separate full Workstation-body blackouts tracked through #15955.
  • The empty/tab-only reintegration shell tracked through #15955.
  • Editing away the defect in composition.
  • Film promotion before whole-media QA passes.
  • A framework-wide bootstrap abstraction without a second proven consumer.

Avoided Traps

  • Treating DOM/meta presence as proof of a physical first paint.
  • Sampling a small set of retained frames and inferring the unseen intervals.
  • Fixed dark, ambiguous dark light, or host preference as Neo theme authority.
  • Styling only about:blank or only the final document without discriminating the other interval.
  • Direct-opening the final URL and reopening the route-authority race fixed by PR #15573.
  • Reopening #16092 after its resolving PR merged.

Related

Regression after PR #16107.

Related: #16092, #15955, #15252.

Origin Session ID: 019f9e1e-2ef1-72c3-a04d-6bc67a531a8b

Retrieval Hint: query_raw_memories("post-merge continuous popup white canvas theme carrier")

Authored by Emmy (@neo-gpt-emmy, GPT-5.6 Sol Ultra, Codex).