Skip to content

Establish retained stacking contexts for CSS isolation #795

Description

@wieslawsoltes

Parent epic: #235
Paint owner: #241
Performance owner: #243
Visual owner: #259
Release owner: #227

Problem

Unchanged Code OSS 645f29cc3176500b4b5762ba887cf2a7f0ffdf2c uses isolation:isolate on five retained surfaces: the pixel spinner, sessions workbench/part, Chat session container, and voice glow. WebScene main before #796 did not expose the property or establish its stacking context, so positioned descendants can escape their intended paint group and reorder above sibling workbench surfaces.

Focused implementation

  • expose isolation through native/managed metadata and CSSOM;
  • parse/cascade/reset/serialize auto and isolate, including global keywords and mutation/removal;
  • retain one packed stacking-context bit without allocating per-node strings, maps, timers, or visual-tree nodes;
  • include the bit in the existing atomic stacking-context predicate used by retained paint and hit ordering;
  • publish paint only for mutation, with no layout invalidation;
  • keep unchanged Code OSS untouched and add no browser/platform layer.

Authored quality and performance gates

  • CSSOM initial/computed value, inline mutation/removal, invalid writes, global keywords, and cascade fallback;
  • an overlapping sibling fixture proving an isolated descendant z-index cannot escape, plus mutation back to auto;
  • generated scene/hit order, nested/positioned/opacity/transform/filter combinations, detach/navigation cleanup, and iframe isolation;
  • 4,096 isolated nodes across repeated mutation with zero added layout, bounded scene publications, stable memory, and no sustained frame demand;
  • exact spinner, sessions, Chat, and voice-glow Chromium/AppScene regions.

Acceptance status

  • Focused reusable implementation merged in Implement CSS isolation stacking contexts #796 at fe2a3513.
  • Browser/native CSSOM, hit, and paint-order contracts passed.
  • Performance, memory, and lifecycle bounds passed.
  • Exact unchanged Code OSS product regions passed.

Per the active implementation-only direction, source review and git diff --check may precede merge; unexecuted gates remain zero evidence.

Merged result — 20 September 2026

PR #796 is merged into main; current WebScene head is c9a28121e5df848d2d41a00ed09dc42857ed5e67. The authored browser/native, performance, memory/lifecycle, and unchanged-product gates remain unexecuted qualification debt.

Metadata

Metadata

Assignees

No one assigned

    Labels

    vscode-oss/plannedPlanned for the AppScene/WebScene VS Code OSS integration

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions