Skip to content

Add Highlight and CSS.highlights registry for Code OSS #743

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: #740
Depends on: #741 / PR #742
Epic: #235

Scope

Implement the document-local object model used by unchanged Code OSS before highlight paint:

  • constructible Highlight(...ranges) with ordered setlike add, delete, clear, has, size, entries, keys, values, forEach, default iteration, and integer priority;
  • CSS.highlights maplike registry with set, get, has, delete, clear, size, entries/keys/values/forEach/default iteration;
  • validate registered names and Range objects, preserve replacement/insertion order, retain registered Highlight objects strongly, and weakly reclaim unregistered Highlight/Range wrappers;
  • publish a compact document-local registry snapshot for the subsequent ::highlight() cascade/paint layer;
  • mark retained scene paint dirty only when a registered highlight, its ranges, or priority changes; no idle frame demand or DOM/visual-tree nodes.

Acceptance

  • Code OSS owner merge/clear behavior works with repeated Highlight.clear/add and CSS.highlights.set/delete.
  • Constructor ranges, duplicate suppression, insertion order, registry replacement, priority mutation, detached/wrong-document ranges, nested contexts, navigation, low-memory cleanup, and capacity bounds have focused contracts.
  • Unregistered objects do not request frames; registered mutations coalesce to one retained scene update.
  • Repeated allocation/registration/deletion returns native bindings, persistent handles, heap/RSS, and frame demand to baseline.

Functional pseudo parsing, style cascade, text intersection, and paint remain the top stack layer in #740.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestsize/Lvscode-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