Skip to content

Present bounded interactive reportValidity feedback #708

Description

@wieslawsoltes

Active implementation checkpoint — 19 September 2026

Exact upstream heads are WebScene 81811bbf733ea5e2b19488e01b6c8839fb1d40ba and AppScene fe14e7b775d347693d6526b7c4d49c0dca082e52; unchanged Code OSS is 645f29cc3176500b4b5762ba887cf2a7f0ffdf2c. Local vscode-demo is d27d1316f8fbe66d36350eecdc79ba0f23d9e692 and remains intentionally unpushed with Actions disabled.

Merged Linux exact-device work remains complete through WebScene #654 and AppScene #270. Linux CLIPBOARD/PRIMARY and inbound/outbound Xdnd are merged through WebScene #658 and AppScene #280. CSS animation direction #659/#660 and fill modes #661/#662 are merged. The current-main native compiler failure exposed by #662 is tracked and fixed by #663/#664; generated selectors now preserve compiled namespace-aware compound and attribute data. #666/#667 binds the remaining native test consumer to the namespace-aware compiler API, and #668/#669 restores complete structured selector parity comparisons. #665/#670 implements demand-free animation pause/resume, and #671/#673 enforces parser package size with both ratio and absolute byte budgets, and #672/#678 implements bounded eight-track animation-list coordination; #674/#681 implements zero-time/count semantics, #679/#680/#682 updates the native stale-track contract for inactive authored list slots, and #675/#683 adds bounded translate/scale keyframe sampling and retained paint composition. #684/#685 refreshes the generated Code OSS ledger and exact property identity count exposed by the post-merge main jobs. #676/#686 adds bounded retained ::before/::after animation lifecycle, scoped paint, owner events, cleanup, and demand-free settled state. Full-V8 package portability epic #687 is implemented by #688/#691 for GCC, #689/#692 for MSVC enum/ABI boundaries, #690/#693 for bounded embedded source literals, #694/#695 for const cascade roots, and #696/#697 for native test syntax. #677/#698 adds bounded retained WAAPI with document/element caps, lifecycle settlement, and demand-free inactive states. #699/#700 restores the 384-byte native document footprint by moving WAAPI-only maps and event state behind one lazy auxiliary allocation. #476/#702 adds bounded asynchronous document fetch and stale-generation suppression for dynamically inserted CSS imports, complementing #480/#484 authored-import reflection. #701/#703 adds browser-shaped Worker options, inherited credential policy, final response/CORS enforcement, generation-safe failure, and bounded slot retirement. #704/#705 adds an optional bounded redirect ledger and per-hop Worker status/scheme/loop/downgrade/origin/CORS/credential checks. #706/#707 extracts bounded request-header ABI v5 onto current main; AppScene #281/#282 and vscode-demo #10 populate the ledger in their host providers. #708/#709 adds interactive reportValidity feedback; #710/#711 repairs its native text-measurement compile break, and #710/#712 dismisses stale feedback after programmatic and eligibility mutations.

One-agent mode is enforced. One-agent mode remains enforced. The sole implementation lane is idle after #712; no other implementation agent is active. Static fill does not sustain frame demand, and new animation work must preserve that bound without per-frame cascade, selector, or visual-tree churn.

Consolidations remain open and unmerged: WebScene #76 at 8e435212df2ec20c339a37d1cb24a11ad4c4e055, AppScene #65 at 0c018306458050a66a19d2c84abd3cf65a20832c, and vscode-demo #1. WebScene #662 and #681 portable V8 contracts passed. Focused #682 native document and Linux SDK runs 35448768204 and 35448768281 passed; #683 portable V8 contracts passed. The failed #683 current-main generated-ledger/property-count gates are repaired by #684/#685, and Linux CI job 105914816775 passed. Full-V8 Linux/Windows RID portability repairs are merged through #691-#697; current-main CI/NuGet runs 35456365243 and 35456365245 are retained; superseded PR, previous-main, and consolidation runs were cancellation-requested. AppScene #282 current-main companion run 35454940645 passed.

Ordered next work: current-main CI/package triage, then the remaining bounded validation wrapping/localization policy and focused CSS and acceptance backlog, then physical Linux pixels, synchronization/device-loss/resize/soak/performance, VM/computer-use, and unchanged Code OSS Release qualification. Rich clipboard MIME, MULTIPLE/SAVE_TARGETS, and the recorded desktop-service/cross-platform backlog remain open.

Parent: #257
CSS epic: #235
Release epic: #227

Remaining implementation gap

Constraint validity, form aggregation, submission blocking, and checkValidity() / reportValidity() APIs are merged through #603-#615. The reportValidity() path still lacks the browser-facing interactive failure behavior: focus the first unhandled invalid control and show a bounded validation message anchored to that control.

Scope

  • Dispatch cancelable invalid in tree/form order and stop interactive presentation when the event is canceled.
  • Select and focus the first invalid, focusable, connected control that was not canceled.
  • Render one engine-owned, non-author DOM validation bubble with the control's current validation message and appropriate native semantic announcement.
  • Reposition on layout/scroll/zoom and dismiss on correction, input/change, successful validation, focus transfer, detach, navigation, or teardown.
  • Keep message text, retained nodes, publications, and pending tasks bounded; no sustained idle frames, repeated selector/cascade work, or visual-tree churn.
  • Preserve existing noninteractive checkValidity(), novalidate, formnovalidate, barred controls, custom-element anchors, and submission behavior.

Constraints

No Code OSS source changes or browser/CEF/Electron/WebView dependency. Keep this generic to WebScene and avoid structural invalidation ownership outside #257.

Deferred validation

Under the implementation-first directive, implementation may merge after diff checks. WPT/browser pixels, keyboard/accessibility, lifecycle, performance, memory, package, and cross-platform gates remain under #257/#235/#227.

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