Skip to content

Implement @starting-style entry transitions used by Code OSS #749

Description

@wieslawsoltes

Active implementation checkpoint — 20 September 2026

Exact upstream heads are WebScene 3cc78ac28101e23f07ded947b44869277da6632d and AppScene acf42662309ea601720ed07c440cf183d7c73fe3; unchanged Code OSS is 645f29cc3176500b4b5762ba887cf2a7f0ffdf2c. Local vscode-demo is 06b5fa4328bae547e40462cbd049b6322f8e8d8e, clean, 294 commits ahead, and intentionally unpushed with Actions disabled.

Focused merge stacks

One-agent mode is enforced. No subagent is active. Reusable runtime behavior continues to land in WebScene or AppScene; unchanged Code OSS remains pinned. The change-related #752 and #753 runs passed. Broad PR CI/NuGet plus consolidation, post-merge main and previous-main runs were canceled to release runners; no WebScene job is intentionally retained between focused PRs. Full package, performance, visual, physical-platform and VM qualification remains deferred under the fast implementation directive; focused parser/native correctness and allocation checks are complete locally.

Next: finish the remaining planned CSS and product features, then physical Linux pixels, synchronization/device-loss/resize/soak/performance, visual comparison, VM/computer-use, and unchanged Code OSS Release qualification. Rich clipboard MIME, MULTIPLE/SAVE_TARGETS, recorded desktop-service/cross-platform work, workspace/Explorer, file/save, terminal, Markdown preview, accessibility, lifecycle, package-size, and no-browser promotion gates remain tracked and incomplete.

Parent trackers: #239, #242, and CSS epic #235

Depends on the existing transition/discrete-display implementation and must not overlap registered custom-property work.

Proven Code OSS scope

Unchanged Code OSS 645f29c contains two product @starting-style blocks. They provide initial opacity/border/background/translate states for session workbench surfaces and the offscreen transform for the phone sidebar when it becomes visible. WebScene currently has no @starting-style parser/runtime semantics, so first-render and display-to-visible transitions cannot begin from the authored state.

Implementation scope

  • parse document-level @starting-style as a bounded grouping rule with ordinary qualified rules;
  • expose typed CSSOM grouping-rule identity and safe insert/delete/replace lifecycle;
  • apply starting declarations only when an element first becomes rendered or returns from display:none, then transition to the normal cascade;
  • preserve specificity/layers/importance and existing selector dependency invalidation;
  • integrate the exact Code OSS opacity, border/background, and 2D translate subset with existing host-clock transitions and transition-behavior: allow-discrete;
  • do not create visual-tree nodes or sustained frame demand; release starting snapshots after transition admission or cancellation.

Gates

  • browser/native first-render, insertion, display-none re-entry, cancellation, removal, stylesheet mutation, nested context, and teardown contracts;
  • unchanged session workbench and phone-sidebar fixtures with geometry/scene/pixel checks;
  • bounded mutation counters, transition admission, zero idle frames after settlement, allocation/RSS stability, and portable/released-RID gates.

Repeated-style-change event semantics beyond the exact Code OSS slice, arbitrary discrete properties, view transitions, and broad transition interpolation remain outside this ticket.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestvscode-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