Skip to content

Complete native CSS paint, stacking, clipping, transform, and text coverage #241

Description

@wieslawsoltes

Current paint checkpoint — 20 September 2026

Exact merged heads: WebScene a46b62e14eb197603f7e227c1558afb9088633b0; AppScene 97702daeb9ad71341ced7226f0aa966dc77ea53c; unchanged Code OSS 645f29cc3176500b4b5762ba887cf2a7f0ffdf2c; local vscode-demo e4b98e5470cd7856aff3dfd6843c8e125d7db933 (clean, intentionally unpushed). Open consolidations remain WebScene #76 085bba760fa571c8f08ea866dc5dd1ec27c4d376, AppScene #65 ce66ef6ceb776b3f14e129f853bfc08b5c5e608c, and vscode-demo #1; do not merge them. One-agent mode is active.

#799/#806 is merged with interaction-only state and no new paint command or scene node. Later qualification must prove contact scrolling/cancellation and unchanged mouse pixels/geometry on editors, tabs, split views, terminal, and Chat. Existing paint, stacking, clipping, transform, text, and exact-pixel debt remains open.

Parent tracker: #235

Problem

Correct layout can still produce incorrect native output when text, generated content, backgrounds, borders, clipping, transforms, opacity, stacking, images, or native controls are represented incorrectly in the retained scene.

Proposed work

  • Add deterministic browser/native raster and scene-structure contracts for text/glyph fallback, decoration, pseudo/generated content, backgrounds, gradients, borders/radii, clipping, transforms, opacity, stacking contexts, and image sizing.
  • Prove paint invalidation for style changes without rebuilding unaffected scene subtrees.
  • Define missing-glyph and non-rendering control-character behavior.
  • Track paint ordering, scene node count, publication count, allocation, and memory.

Acceptance

Activity

  1. wieslawsoltes commented on Sep 17, 2026

    @wieslawsoltes
    CollaboratorAuthor

    #246 identifies a concrete generated-text coverage gap for this paint/text tranche. A pseudo-element can override font-size and line-height, but WebScene does not retain its winning font-family; pseudo layout and kind-3 publication use the originating element's family. In unchanged Code OSS that sends Seti PUA code points U+E023/U+E099 through system-ui fallback and creates the oversized white/cyan shapes.

    The focused acceptance slice is: parent system font + ::before downloadable icon font, exact computed family/content/box, exact kind-3 family and intrinsic metrics, native reference pixels bounded to the icon slot, class mutation to another family and exact restoration, and a 4,096-node retained-tree/performance bound. No AppScene renderer change is needed. Detailed capture/provenance and scheduling are recorded on #246.

  2. wieslawsoltes commented on Sep 17, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Issue #246 now has a local review candidate 6e6d5568 for the isolated CSS defect: generated ::before text dropped its computed font-family between cascade, layout, and kind-3 serialization. The candidate preserves the winning/inherited family and has exact native/Chromium PUA pixels plus cascade, mutation, retained-tree, cache, and 4,096-node gates. Exact main fails native by 21,796 pixels; the candidate passes. Live overlap with merged #292 and open #291/#294/#76 is zero. Schedule focused review/integration next; product closure remains gated by #259's exact-package Code OSS regions.

  3. wieslawsoltes commented on Sep 18, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Coordination refresh: #246 is no longer a local candidate. Its focused generated icon-font fix merged through PR #295 as 0d3b29da78df774ac41e90ff251c7b2ffb828d43. #246 now waits only for the shared #259 exact-package tab and Explorer visual regions.

    #241 remains the broader paint/stacking/clipping/transform/text owner; do not reopen or duplicate the merged font-family serialization defect here.

  4. wieslawsoltes commented on Sep 18, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Retained clipping advanced through #449 / PR #451, merged as 3813a31772917655f71be8a15b04aeb096a049d8.

    Centered length/percentage clip-path: circle(...) now emits balanced rounded clip scopes using the existing scene ABI and presenter behavior. This establishes the smallest nonrectangular retained clip without introducing a new command or touching stacking, layout, masks, filters, or backdrop isolation.

    The exact unchanged Code OSS Markdown polygon(...) consumer remains unimplemented, along with positioned/keyword circles and the other #256 effects. Tests, browser/native pixels, performance/lifecycle work, hosted checks, CI monitoring, and product acceptance were skipped under the implementation-first instruction and remain debt under #241/#256.

  5. wieslawsoltes commented on Sep 18, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Retained clipping advanced through #456 / PR #458, merged as a9f309c8ff80d701ef34e66aece8441e0f8f7fb6.

    WebScene now clips the exact unchanged Code OSS Markdown diff indicator polygon. Native resolves bounded 3–64 point px/% paths and publishes them through the existing balanced clip scope; the shared Avalonia/Uno presenter and Flutter apply the indexed path. The scene struct/version and command kinds remain unchanged, and existing inset/circle behavior is preserved.

    Fill-rule variants, other units/functions, remaining clip shapes, masks, filters, backdrop effects, and isolation remain under #241/#256. Tests, browser/native pixels, performance/lifecycle work, hosted checks, CI monitoring, and product acceptance were skipped under the implementation-first instruction and remain debt.

  6. wieslawsoltes commented on Sep 18, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Retained foreground effects advanced through #463 / PR #464, merged as d27290970ef4913b89a083da89a220726ee5e29b.

    Single-function number/percentage filter: brightness(...) now wraps the element and descendant paint in the existing balanced retained group and applies matching RGB matrices in Avalonia/Uno and Flutter. Non-none filters now participate in atomic stacking-context traversal. Existing opacity groups retain their prior encoding.

    Compound filters, animation/interpolation, blur damage, other functions, masks, backdrop effects, and further isolation remain under #241/#256. Tests, browser/native pixels, performance/lifecycle work, hosted checks, CI monitoring, and product acceptance were skipped under the implementation-first instruction and remain debt.

  7. wieslawsoltes commented on Sep 18, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Retained foreground effects advanced through #468 / PR #469, merged as c595be47332adb88a50c374804c299f3db814616.

    Single-function number/percentage filter: grayscale(...) now reuses the balanced retained filter group and applies matching luminance matrices in Avalonia/Uno and Flutter. The implementation preserves the existing brightness and opacity encodings and directly covers pinned Code OSS session/Chat grayscale consumers.

    Compound and animated filters, contrast and other functions, masks, backdrop effects, and remaining isolation stay under #241/#256. Tests, browser/native pixels, performance/lifecycle work, hosted checks, CI monitoring, and product acceptance were skipped under the implementation-first instruction and remain debt.

  8. wieslawsoltes commented on Sep 18, 2026

    @wieslawsoltes
    CollaboratorAuthor

    CSS paint implementation update: focused foreground-filter child #471 merged through PR #473 at e4d8f5f9ce775839a83c08d2f42e64b471ea8bfc (source 6ebd4006950359b36f42bf23c9016070a0a63ea6).

    WebScene now retains single-function number/percentage filter: contrast(...) through the existing balanced kind 30/31 foreground-filter group. Kind 30 bit 29 selects contrast and stroke_width carries a bounded 0–10 multiplier; Avalonia/Uno and Flutter apply matching midpoint-centered RGB matrices. Existing opacity, brightness, and grayscale encodings remain intact, with no scene struct, version, capability, or command-kind change.

    Compound and animated filters, blur and expanded damage, masks, backdrop effects, and remaining isolation stay under #241/#256. Tests, builds, browser/native pixel contracts, performance, memory, lifecycle, exact-package visual gates, hosted checks, and CI monitoring were skipped under the implementation-only instruction and remain validation debt. No consolidation PR was merged.

  9. wieslawsoltes commented on Sep 19, 2026

    @wieslawsoltes
    CollaboratorAuthor

    Implementation-first re-audit at WebScene 488b9790 confirms static product-used filters, blur damage, clips, masks, backdrop effects, and Flutter SVG geometry are implemented through #256/#508. Remaining static paint work is execution/package evidence. The next concrete product-used defect is animated filter progression, correctly owned by #242, so no overlapping #241 change was made. git diff --check passed; no runtime validation ran.

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

    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